Fandom

Scratchpad

PLE:Unidad6Ejercicio05

219,204pages on
this wiki
Add New Page
Discuss this page0 Share
/*
Programa:         Ficheros05.cpp
Descripción:      Lee un fichero y cuenta la frecuencia de aparición de cada caracter.
*/
#include <iostream>
#include <fstream>
using namespace std;

struct elemento
{
    char c;
    int fA;
    float fR;
};

const int TAM = 256;

void strtoLower(char l[]);
int busca(elemento f[], int n, char c);
void inserta(elemento f[], int &n, char c);
void incrementa(elemento f[], int p);
void calculaFrec(elemento f[], int nE, int nC);
void muestraFrec(elemento f[], int n);
void ordena(elemento f[], int n);

int main() 
{
	ifstream fe;
	elemento frec[TAM];
	int numElem = 0, numCar = 0, i, pos;
	char nombreFich[80], linea[80];

	// Leemos nombre fichero
	cout << "Introduzca nombre del fichero ";
	cin.getline(nombreFich,80);
	
	fe.open(nombreFich);

    // Comprobamos que está abierto
    if(fe.is_open())
    {
    	// Leemos una linea
	    fe.getline(linea,80);
    	while(!fe.eof())
	    {
            strtoLower(linea);
            // Procesamos los caracteres de la linea
            for(i = 0; i < strlen(linea); i++)
            {
                numCar++;
                pos = busca(frec, numElem, linea[i]);
                if( pos == -1 )
                    inserta(frec, numElem, linea[i]);
                else
                    incrementa(frec, pos);
            }
    		// Leemos la siguiente linea
        	fe.getline(linea,80);
	    }
	    cout << endl << endl;
    	fe.close();
    	calculaFrec(frec, numElem, numCar);
    	ordena(frec, numElem);
    	muestraFrec(frec, numElem);
    } else
        cout << "ERROR abriendo fichero" << endl;
    system("PAUSE");
    return EXIT_SUCCESS;    
}

void strtoLower(char l[])
{
    for(int i = 0; i < strlen(l); i++)
        l[i] = (char) tolower(l[i]);
}

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

void inserta(elemento f[], int &n, char c)
{
    f[n].c = c;
    f[n].fA = 1;
    f[n].fR = 0.0;
    n++;
}

void incrementa(elemento f[], int p)
{
    f[p].fA++;
}

void calculaFrec(elemento f[], int nE, int nC)
{
    for(int i = 0; i < nE; i++)
        f[i].fR = (float) f[i].fA / nC *100;
}

void muestraFrec(elemento f[], int n)
{
    int i;
    cout << "car\tnum\tfrec" << endl;
    for(i = 0; i < n; i++)
        cout << f[i].c << '\t' << f[i].fA << '\t' << f[i].fR << endl;
    cout << endl;
}

void ordena(elemento f[], int n)
{
    int i, j;
    elemento tmp;
    
    for(i = 0; i < n; i++)
    {
        for(j=0;j < n-1; j++)
        {
            if (f[j].fA < f[j+1].fA)
            {
                tmp = f[j];
                f[j] = f[j+1];
                f[j+1] = tmp;
            }
        }
    }
}

Ad blocker interference detected!


Wikia is a free-to-use site that makes money from advertising. We have a modified experience for viewers using ad blockers

Wikia is not accessible if you’ve made further modifications. Remove the custom ad blocker rule(s) and the page will load as expected.

Also on Fandom

Random wikia