Autor
|
Tema: ayuda con un codigo en c (Leído 2,612 veces)
|
@TGGG
Desconectado
Mensajes: 2
|
como puedo reducir mas este codigo #include <stdio.h> #include <stdlib.h> #include <string.h> int main() { FILE *file; FILE *file2; FILE *file3; char texto=0; int a=0,b=0,c=0,d=0,e=0,f=0,g=0,h=0,ii=0,j=0,k=0,l=0,m=0,n=0,espacio=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0; int cero=0,uno=0,dos=0,tres=0,cuatro=0,cinco=0,seis=0,siete=0,ocho=0,nueve=0; /*char abc[]={"abcdefghijklmnopqrstuvwxyz 123456789"}; char cif[]={"kw9svn8y7od6bmxtz4fl3gu2ahp10jcqire5"};*/ int letra[37]; int i,as,aux; char num; file = fopen("cifrado.txt","wt"); if(file == NULL){ printf("Error al crear archivo 1\n"); } file2 = fopen ("estadistica.txt","wt"); if(file2 == NULL){ printf("Error al crear archivo 2\n"); } file3 = fopen("textosimple.txt","rb"); if(file3 == NULL){ printf("Error al crear archivo 3\n"); } while(texto != EOF){ switch(texto){ case 'a': a++; letra[0] = a; break; case 'b': b++; letra[1] = b; break; case 'c': c++; letra[2] = c; break; case 'd': d++; letra[3] = d; break; case 'e': e++; letra[4] = e; break; case 'f': f++; letra[5] = f; break; case 'g': g++; letra[6] = g; break; case 'h': h++; letra[7] = h; break; case 'i': ii++; letra[8] = ii; break; case 'j': j++; letra[9] = j; break; case 'k': k++; letra[10] = k; break; case 'l': l++; letra[11] = l; break; case 'm': m++; letra[12] = m; break; case 'n': n++; letra[13] = n; break; case ' ': espacio++; letra[14] = espacio; break; case 'o': o++; letra[15] = o; break; case 'p': p++; letra[16] = p; break; case 'q': q++; letra[17] = q; break; case 'r': r++; letra[18] = r; break; case 's': s++; letra[19] = s; break; case 't': t++; letra[20] = t; break; case 'u': u++; letra[21] = u; break; case 'v': v++; letra[22] = v; break; case 'w': w++; letra[23] = w; break; case 'x': x++; letra[24] = x; break; case 'y': y++; letra[25] = y; break; case 'z': z++; letra[26] = z; break; case '0': cero++; letra[27] = cero; break; case '1': uno++; letra[28] = uno; break; case '2': dos++; letra[29] = dos; break; case '3': tres++; letra[30] = tres; break; case '4': cuatro++; letra[31] = cuatro; break; case '5': cinco++; letra[32] = cinco; break; case '6': seis++; letra[33] = seis; break; case '7': siete++; letra[34] = siete; break; case '8': ocho++; letra[35] = ocho; break; case '9': nueve++; letra[36] = nueve; break; default:; } } fprintf(file2 ,"espacio = %d\n",espacio ); /*for(as=0; as<37; as++){ }*/ for(i=0; i<37; i++){ aux = letra[i]; } printf("Cifrado guardado en archivo\n\n"); printf("Estadistica guardada en archivo\n\n"); return 0; }
MOD: El código debe ir entre etiquetas de Código GeSHi
|
|
« Última modificación: 26 Marzo 2021, 10:47 am por K-YreX »
|
En línea
|
|
|
|
K-YreX
|
Antes que nada: el código debe ir entre etiquetas de Código GeSHi. Puedes seleccionar el código, ir al desplegable de "Código GeSHi" encima del cuadro de texto y elegir el lenguaje correspondiente (C en este caso) o escribir directamente tú las etiquetas en el cuadro de texto de la siguiente manera: [code=c] Aquí tu código C [/code]
Claro que se puede simplificar ese código y además ya tienes comentado por ahí cómo hacerlo: utilizando arrays. Otro consejo es que utilices constantes en vez de utilizar números sueltos que no se sabe lo que significan. Además si en algún momento quieres cambiar su valor, basta con cambiarlo al declarar la constante y no en todo el código. // cabeceras #define NUM_CARACTERES 37 // Constante para el numero de caracteres int main() { char abecedario[] = "abcd.."; char cifrado[] = "..."; int estadisticas[NUM_CARACTERES] = {0}; // Inicializamos todo el array a 0 // Se puede hacer una comprobacion para evitar errores en tiempo de ejecucion mediante <assert.h> assert(strlen(abecedario ) == strlen(cifrado ) && NUM_CARACTERES >= strlen(abecedario )); // Lanza un error si la condicion no es cierta FILE *fichero_simple = fopen("texto_simple.txt", "r"); FILE *fichero_cifrado = fopen("texto_cifrado.txt", "wt"); // Comprobar que los ficheros se han abierto correctamente y en caso contrario, terminar el programa char caracterActual; int encontrado = 0; // se puede usar bool mediante <stdbool.h> while((caracterActual = fgetc(fichero_simple )) != EOF ) { for(int i = 0; i < strlen(abecedario ) && !encontrado ; ++i ) { encontrado = (caracterActual == abecedario[i]); if(encontrado) { caracter = cifrado[i]; ++estadisticas[i]; } } fputc(caracter , fichero_cifrado ); // De esta forma si un caracter no lo encuentra, lo copia sin cifrar encontrado = 0; } // Cerrar ficheros de texto simple y cifrado FILE *fichero_estadisticas = fopen("estadisticas.txt", "wt"); // Comprobar que se ha abierto correctamente for(int i = 0; i < strlen(abecedario ); ++i ) fprintf(fichero_estadisticas , "%c = %d\n", abecedario [i ], estadisticas [i ]); // Cerrar fichero de estadisticas }
|
|
|
En línea
|
cout << "Todos tenemos un defecto, un error en nuestro código" << endl;
|
|
|
|
Mensajes similares |
|
Asunto |
Iniciado por |
Respuestas |
Vistas |
Último mensaje |
|
|
Ayuda con codigo en C (no me ejecuta un for y necesito ayuda)
« 1 2 3 »
Programación C/C++
|
Søra
|
22
|
12,498
|
22 Mayo 2010, 00:22 am
por Littlehorse
|
|
|
¿Cuál es la diferencia entre código objeto, código máquina y código binario?
Programación General
|
Aikanáro Anário
|
9
|
30,321
|
23 Diciembre 2010, 15:19 pm
por pucheto
|
|
|
Ayuda con codigo
Desarrollo Web
|
ArhennJosey
|
4
|
2,713
|
22 Marzo 2011, 17:29 pm
por RedZer
|
|
|
ayuda!! necesito ayuda con este pequeño codigo en c++
Programación C/C++
|
giraffe
|
1
|
5,512
|
27 Mayo 2015, 06:25 am
por engel lex
|
|
|
Ayuda con mi codigo pls
Java
|
Wallcroft007
|
0
|
1,577
|
12 Enero 2017, 04:30 am
por Wallcroft007
|
|