ayuda con un codigo en c

Iniciado por @TGGG, 24 Marzo 2021, 21:28 PM

0 Miembros y 1 Visitante están viendo este tema.

@TGGG

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");
       exit(1);
   }
   

   file2 = fopen ("estadistica.txt","wt");
   

   if(file2 == NULL){
       printf("Error al crear archivo 2\n");
       exit(1);
   }
   

   file3 = fopen("textosimple.txt","rb");
   

   if(file3 == NULL){
       printf("Error al crear archivo 3\n");
       exit(1);
   }
   

       

   while(texto != EOF){
       

       texto = fgetc(file3);
       

       switch(texto){
           case 'a':
               a++;
               letra[0] = a;
               fputs("k", file);
               break;
           case 'b':
               b++;
               letra[1] = b;
               fputs("y", file);
               break;
           case 'c':
               c++;
               letra[2] = c;
               fputs("n", file);
               break;
           case 'd':
               d++;
               letra[3] = d;
               fputs("1", file);
               break;
           case 'e':
               e++;
               letra[4] = e;
               fputs("p", file);
               break;
           case 'f':
               f++;
               letra[5] = f;
               fputs("2", file);
               break;
           case 'g':
               g++;
               letra[6] = g;
               fputs("s", file);
               break;
           case 'h':
               h++;
               letra[7] = h;
               fputs("1", file);
               break;
           case 'i':
               ii++;
               letra[8] = ii;
               fputs("8", file);
               break;
           case 'j':
               j++;
               letra[9] = j;
               fputs("x", file);
               break;
           case 'k':
               k++;
               letra[10] = k;
               fputs("7", file);
               break;
           case 'l':
               l++;
               letra[11] = l;
               fputs("w", file);
               break;
           case 'm':
               m++;
               letra[12] = m;
               fputs("0", file);
               break;
           case 'n':
               n++;
               letra[13] = n;
               fputs("9", file);
               break;
           case ' ':
               espacio++;
               letra[14] = espacio;
               fputs("z", file);
               break;
           case 'o':
               o++;
               letra[15] = o;
               fputs("3", file);
               break;
           case 'p':
               p++;
               letra[16] = p;
               fputs("e", file);
               break;
           case 'q':
               q++;
               letra[17] = q;
               fputs("i", file);
               break;
           case 'r':
               r++;
               letra[18] = r;
               fputs("6", file);
               break;
           case 's':
               s++;
               letra[19] = s;
               fputs(" ", file);
               break;
           case 't':
               t++;
               letra[20] = t;
               fputs("c", file);
               break;
           case 'u':
               u++;
               letra[21] = u;
               fputs("4", file);
               break;
           case 'v':
               v++;
               letra[22] = v;
               fputs("j", file);
               break;
           case 'w':
               w++;
               letra[23] = w;
               fputs("9", file);
               break;
           case 'x':
               x++;
               letra[24] = x;
               fputs("v", file);
               break;
           case 'y':
               y++;
               letra[25] = y;
               fputs("h", file);
               break;
           case 'z':
               z++;
               letra[26] = z;
               fputs("5", file);
               break;
           case '0':
               cero++;
               letra[27] = cero;
               fputs("u", file);
               break;
           case '1':
               uno++;
               letra[28] = uno;
               fputs("g", file);
               break;
           case '2':
               dos++;
               letra[29] = dos;
               fputs("q", file);
               break;
           case '3':
               tres++;
               letra[30] = tres;
               fputs("m", file);
               break;
           case '4':
               cuatro++;
               letra[31] = cuatro;
               fputs("b", file);
               break;
           case '5':
               cinco++;
               letra[32] = cinco;
               fputs("r", file);
               break;
           case '6':
               seis++;
               letra[33] = seis;
               fputs("f", file);
               break;
           case '7':
               siete++;
               letra[34] = siete;
               fputs("t", file);
               break;
           case '8':
               ocho++;
               letra[35] = ocho;
               fputs("d", file);
               break;
           case '9':
               nueve++;
               letra[36] = nueve;
               fputs("o", file);
               break;
           default:;
       }
   }
   
   fprintf(file2,"\n\na = %d\n",a);
   fprintf(file2,"b = %d\n",b);
   fprintf(file2,"c = %d\n",c);
   fprintf(file2,"d = %d\n",d);
   fprintf(file2,"e = %d\n",e);
   fprintf(file2,"f = %d\n",f);
   fprintf(file2,"g = %d\n",g);
   fprintf(file2,"h = %d\n",h);
   fprintf(file2,"i = %d\n",ii);
   fprintf(file2,"j = %d\n",j);
   fprintf(file2,"k = %d\n",k);
   fprintf(file2,"l = %d\n",l);
   fprintf(file2,"m = %d\n",m);
   fprintf(file2,"n = %d\n",n);
   fprintf(file2,"espacio = %d\n",espacio);
   fprintf(file2,"o = %d\n",o);
   fprintf(file2,"p = %d\n",p);
   fprintf(file2,"q = %d\n",q);
   fprintf(file2,"r = %d\n",r);
   fprintf(file2,"s = %d\n",s);
   fprintf(file2,"t = %d\n",t);
   fprintf(file2,"u = %d\n",u);
   fprintf(file2,"v = %d\n",v);
   fprintf(file2,"w = %d\n",w);
   fprintf(file2,"x = %d\n",x);
   fprintf(file2,"y = %d\n",y);
   fprintf(file2,"z = %d\n",z);
   fprintf(file2,"0 = %d\n",cero);
   fprintf(file2,"1 = %d\n",uno);
   fprintf(file2,"2 = %d\n",dos);
   fprintf(file2,"3 = %d\n",tres);
   fprintf(file2,"4 = %d\n",cuatro);
   fprintf(file2,"5 = %d\n",cinco);
   fprintf(file2,"6 = %d\n",seis);
   fprintf(file2,"7 = %d\n",siete);
   fprintf(file2,"8 = %d\n",ocho);
   fprintf(file2,"9 = %d\n",nueve);
   fprintf(file2,"\n");
   
   /*for(as=0; as<37; as++){
}*/
   

   for(i=0; i<37; i++){
       aux = letra[i];
       fprintf(file2,"%d\n",aux);
   }  

   fclose(file);
   fclose(file2);
   fclose(file3);
   
   printf("\n\n");
   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

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
}
Código (cpp) [Seleccionar]

cout << "Todos tenemos un defecto, un error en nuestro código" << endl;