PLE:Unidad6Ejercicio05

/* Programa:        Unidad5Ejercicio25.cpp Descripción:     Lee varias cadenas y cuenta frecuencia de caracteres.
 * 1) include
 * 2) include
 * 1) include

using namespace std;

struct elemento {       char car; unsigned int cont; };

const int NUM = 80;

void inserta(elemento f[], unsigned int &n, char c); void muestra(elemento f[], unsigned int n); void incrementa(elemento f[], unsigned int n); int busca(elemento f[], unsigned int n, char c); void ordena(elemento f[], unsigned int n);

void main {       ifstream fe; char cadena[80]; char nombreFichero[80]; elemento frec[NUM]; unsigned int numElem = 0, i, p;

// Leemos el nombre del fichero cout << "Introduzca el nombre del fichero de texto "; cin >> nombreFichero;

// Abrimos el fichero fe.open(nombreFichero); if(fe.good) {               fe.getline(cadena,80);

do               { // Mostramos en pantalla la cadena cout << cadena << endl; for(i = 0; i < strlen(cadena); i++) {                               p = busca(frec, numElem, cadena[i]); if(p == -1) inserta(frec, numElem, cadena[i]); else incrementa(frec, p); }                       fe.getline(cadena,80); }while(!fe.eof);

// Ordenamos y mostramos frecuencias ordena(frec, numElem); cout << endl; muestra(frec, numElem);

}       else cout << "Error abriendo archivo";

cin.ignore; cin.get; }

void inserta(elemento f[], unsigned int &n, char c) { f[n].car = c;       f[n].cont = 1; n++; }

void muestra(elemento f[], unsigned int n) { cout << "Car.\tNum\n"; for(unsigned int i = 0; i < n; i++) cout << f[i].car << '\t' << f[i].cont << endl; }

int busca(elemento f[], unsigned int n, char c) { unsigned int pos = -1, i = 0; while(i < n && pos == -1) {               if(f[i].car == c)                        pos = i;                i++; }       return pos; }

void incrementa(elemento f[], unsigned int n) { f[n].cont++; }

void ordena(elemento f[], unsigned int n) { unsigned int i, j, k;       elemento aux; for (i = 0; i < n-1; i++) {               k = i;                aux.car = f[i].car; aux.cont = f[i].cont; for (j = i+1; j <= n-1; j++) {                       if (f[j].cont > aux.cont) {                               k = j;                                aux.car = f[j].car; aux.cont = f[j].cont; }               }                f[k].car = f[i].car; f[k].cont = f[i].cont;

f[i].car = aux.car; f[i].cont = aux.cont; } }