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

Creeu un nou arxiu del tipus C++ anomenat m6p09.cc i escriviu el següent codi:

//m6p09.cc - Freqüències de les lletres -

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

#include <stdlib.h>


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

   system("clear");


   printf("Introduïu un text...\n");
   printf("premeu CTRL+D per finalitzar\n\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");

   return 0;

}
 

Captura de l'execució del programa.

 

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.