Fandom

Scratchpad

PLE:Unidad6Ejercicio05

216,082pages on
this wiki
Add New Page
Discuss this page0 Share

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.

/*
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;
            }
        }
    }
}

Also on Fandom

Random wikia