Run Code
|
API
|
Code Wall
|
Misc
|
Feedback
|
Login
|
Theme
|
Privacy
|
Patreon
PREGUNTA 3 - MODULO 4 TERMINADA
typedef struct { char palabra[41]; int frecuencia; int longitud; int frelong; }tipoPalabra; /* ......................FUNCIÓN verificar()..................... * Propósito: Verificar si todos los caracteres de una palabra son alfabéticas. * Parámetros: '*palabra' que representará la palabra a analizar. * Retorno: 1 si todos los caracteres de la palabra son alfabéticos, en caso contrario, retornará 0. */ unsigned short verificar( char *palabra ) { while ( *palabra != '\0' ) { if ( !isalpha(*palabra) ) return 0; palabra ++; } return 1; } /* ......................PROCEDIMIENTO strUpper()..................... * Propósito: Transformar todos los carácteres de una cadena a mayúscula. * Parámetros: '*palabra' que representará la palabra a analizar. */ void strUpper( char *palabra ) { while ( *palabra != '\0' ) { if ( islower(*palabra) ) *palabra = toupper(*palabra); palabra ++; } } /* ......................FUNCIÓN posicion()..................... * Propósito: Verificar la posicion de una palabra en un vector de tipo struct. * Parámetros: '*lista' que representará el vector de tipo struct, '*palabra' que representará la palabra a analizar y * 'N' que es el total de elementos del vector '*lista' * Retorno: retorna -1 si el elemento no se encuentra en el vector, en caso contrario, retornará i, que corresponde a la posición * del vector encontrado. */ int posicion( tipoPalabra *lista, int N, char *palabra ) { int i; for ( i = 0 ; i < N ; i ++) if ( strcmp(lista[i].palabra, palabra) == 0 ) return i; return -1; } /* ......................FUNCIÓN comparar()..................... * Propósito: comparar e intercambiar elementos de un vector para realizar la función quick sort. * Parámetros: '*pivot' que representará el pivote y '*element' que representará el elemento a comparar con el pivote. * Retorno: diferencia entre los campos frelong si estos no son iguales, en caso ocntrario, retornará la comparación * del campo 'palabra' del pivote y elemento. */ int comparar( const void *pivot, const void*element ) { tipoPalabra *ptrPivot = (tipoPalabra *) pivot; tipoPalabra *ptrElement = (tipoPalabra *) element; // Si frelongs son iguales, se ordena por palabra alfabeticamente. if ( (ptrPivot -> frelong) == (ptrElement -> frelong)) return strcmp(ptrPivot -> palabra, ptrElement -> palabra); else // Ordenamiento por frelong. return (ptrPivot -> frelong) - (ptrElement -> frelong); } /* ......................PROCEDIMIENTO output()..................... * Propósito: Mostrar por pantalla la nube de palabras. * Parámetros: '*lista' que representará el vector que contendra cada una de las palabras a analizar y 'N' que corresponde a la cantidad * de palabras del vector. */ void output( tipoPalabra *lista, int N ) { int i, j; // 'largoMayor' representrará int largoMayor; // 'espaciado' representará la cantidad de espacios. int espaciado; // 'rep' representará la cantidad de veces que se tendrá que imprimir la palabra en función de su frecuencia. int rep; /* Proceso para calcular los campos 'frelong' de '*lista'. 'frelong' es un alías(frecuencia-longitud) que corresponde a la cantidad * de caracteres a imprimir por cada linea de la nube. */ for ( i = 0 ; i < N ; i ++ ) lista[i].frelong = (lista[i].frecuencia) * (lista[i].longitud); // Ordenamiento de 'lista' en función de sus campos 'frelong' y palabra. qsort(lista, N, sizeof(tipoPalabra), comparar); largoMayor = lista[N-1].frelong; // Proceso para mostrar la primera mitad de la nube. for ( i = 0 ; i < N ; i ++ ) { espaciado = (largoMayor - lista[i].frelong); if ( espaciado != 1) espaciado /= 2; for ( j = 1 ; j <= espaciado ; j ++ ) printf(" "); rep = lista[i].frecuencia; for( j = 1 ; j <= rep ; j ++ ) printf("%s", lista[i].palabra); printf("\n"); } // Proceso para mostrar la segunda mitad de la nube. for ( i = N - 1 ; i >= 0 ; i -- ) { espaciado = (largoMayor - lista[i].frelong); if ( espaciado != 1) espaciado /= 2; for ( j = 1 ; j <= espaciado ; j ++ ) printf(" "); rep = lista[i].frecuencia; for( j = 1 ; j <= rep ; j ++ ) printf("%s", lista[i].palabra); printf("\n"); } } void nubeDePalabras(FILE *entrada) { tipoPalabra *listaPalabras = NULL; int N = 0; // 'pst' representará la posición de la palabra en el vector 'listaPalabras'. int pst; char palabraAux[41]; // Proceso para la lectura de cada cadena del archivo 'entrada'. while ( fscanf(entrada, "%s", palabraAux) != EOF) { // Verificar si la cadena solo contiene caracteres alfabéticos. if ( verificar(palabraAux) ) { // Con 'strUpper' se transforma la cadena a mayúscula. strUpper(palabraAux); pst = posicion(listaPalabras, N, palabraAux); // Verificar si 'palabraAux' se encuentra en el vector 'listaPalabras'. if ( pst == -1 ) { // Proceso para reservar espacio en la memoria. listaPalabras = realloc(listaPalabras, sizeof(tipoPalabra) * (N + 1) ); // Verificar si hay espacio en la memoria. if ( listaPalabras == NULL ) exit(EXIT_FAILURE); // Se almacena 'palabraAux' en la correspondiente posición del vector 'listaPalabras'. strcpy(listaPalabras[N].palabra, palabraAux); listaPalabras[N].frecuencia = 1; listaPalabras[N].longitud = strlen(listaPalabras[N].palabra); N ++; } else // Si la palabra se encuentra en el vector 'listaPalabras' se aumenta su frecuencia. listaPalabras[pst].frecuencia ++; } } // Mostrar por pantalla. output(listaPalabras, N); }
run
|
edit
|
history
|
help
0
RSA Algo
If Statement/ Decrement practice
Project 3 Part 1 v0.5
garbage
PRACTICE FINAL 2
TopRightTriangle.c
date diff sample
Goodone tricky
A_141201_MatrizTodosDistintos
Exploiting uninitialized variable 2