Enrere Mòdul 6
Fonaments de programació. Llenguatge C/C++---
Pràctica    Resum teòric Exercicis
Pràctica d'ampliació

 
Freqüència de les lletres

Veurem en aquesta pràctica un útil programa que permet comptar el nombre de vegades que apareix cada caràcter en un text. Veurem l'ús de les funcions tolower() i isalpha()

 

Desenvolupament de la pràctica

Definiu un projecte nou anomenat m6p09 i afegiu-li un arxiu de font C/C++ anomenat m6p09.cpp. Escriviu el següent codi:

//m6p09.cpp. Freqüències de les lletres



#include <stdio.h>
#include <ctype.h>

void main(void){
    int c, frec[26]={0};

    printf("Introduïu un text...\n");    

    while ((c = (getchar())) != EOF) {
        if(isalpha(c)) frec[tolower(c)-97]++;
    }
    printf("\n\n");
    for(c=0;c<26;c++){
        printf("%c=%d\t",c+97,frec[c]);
    }
    printf("\n");
}

Explicació del programa

En aquest programa no emmagatzemarem el text introduït per teclat en la memòria de l'ordinador, sinó que la comptabilitat de les freqüències es farà a mida que el text es va introduint.

La línia de codi que fa aquest recompte sigui:

 
  if(isalpha(c)) frec[tolower(c)-97]++;

La funció isalpha() comprova si el caràcter introduït és una lletra, si no és així, s'ignora el caràcter i no el comptabilitza. En cas positiu, s'incrementa en un el comptador de la lletra corresponent. La funció tolower() ens estalvia de distingir entre majúscules i minúscules ja que converteix totes les lletres en minúscules. Les lletres minúscules tenen el codi ASCII comprès entre 97 i 123, per tant, cada aparició de la lletra a fa que s'incrementi frec[0], cada aparició de la lletra b fa que s'incrementi frec[1], i així successivament.

Per últim, una vegada sortit del bucle de lectura (amb Ctrl-z), s'imprimeix per pantalla la freqüència de totes les lletres.

És important fer notar que aquest programa no funciona amb caràcters especials i accents. A l'exercici 5 es proposarà fer les modificacions oportunes a aquest codi per tal que comptabilitzi també aquests caràcters especials.