Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: @TGGG en 24 Marzo 2021, 21:28 pm



Título: ayuda con un codigo en c
Publicado por: @TGGG en 24 Marzo 2021, 21:28 pm
como puedo reducir mas este codigo

Código
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <string.h>
  4.  
  5. int main() {
  6.  
  7.  
  8.    FILE *file;
  9.    FILE *file2;
  10.    FILE *file3;
  11.    char texto=0;
  12.  
  13. 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;
  14.    int cero=0,uno=0,dos=0,tres=0,cuatro=0,cinco=0,seis=0,siete=0,ocho=0,nueve=0;
  15.  
  16.    /*char abc[]={"abcdefghijklmnopqrstuvwxyz 123456789"};
  17.       char cif[]={"kw9svn8y7od6bmxtz4fl3gu2ahp10jcqire5"};*/
  18.  
  19.    int letra[37];
  20.    int i,as,aux;
  21.    char num;
  22.  
  23.  
  24.    file = fopen("cifrado.txt","wt");
  25.  
  26.  
  27.    if(file == NULL){
  28.        printf("Error al crear archivo 1\n");
  29.        exit(1);
  30.    }
  31.  
  32.  
  33.    file2 = fopen ("estadistica.txt","wt");
  34.  
  35.  
  36.    if(file2 == NULL){
  37.        printf("Error al crear archivo 2\n");
  38.        exit(1);
  39.    }
  40.  
  41.  
  42.    file3 = fopen("textosimple.txt","rb");
  43.  
  44.  
  45.    if(file3 == NULL){
  46.        printf("Error al crear archivo 3\n");
  47.        exit(1);
  48.    }
  49.  
  50.  
  51.  
  52.  
  53.    while(texto != EOF){
  54.  
  55.  
  56.        texto = fgetc(file3);
  57.  
  58.  
  59.        switch(texto){
  60.            case 'a':
  61.                a++;
  62.                letra[0] = a;
  63.                fputs("k", file);
  64.                break;
  65.            case 'b':
  66.                b++;
  67.                letra[1] = b;
  68.                fputs("y", file);
  69.                break;
  70.            case 'c':
  71.                c++;
  72.                letra[2] = c;
  73.                fputs("n", file);
  74.                break;
  75.            case 'd':
  76.                d++;
  77.                letra[3] = d;
  78.                fputs("1", file);
  79.                break;
  80.            case 'e':
  81.                e++;
  82.                letra[4] = e;
  83.                fputs("p", file);
  84.                break;
  85.            case 'f':
  86.                f++;
  87.                letra[5] = f;
  88.                fputs("2", file);
  89.                break;
  90.            case 'g':
  91.                g++;
  92.                letra[6] = g;
  93.                fputs("s", file);
  94.                break;
  95.            case 'h':
  96.                h++;
  97.                letra[7] = h;
  98.                fputs("1", file);
  99.                break;
  100.            case 'i':
  101.                ii++;
  102.                letra[8] = ii;
  103.                fputs("8", file);
  104.                break;
  105.            case 'j':
  106.                j++;
  107.                letra[9] = j;
  108.                fputs("x", file);
  109.                break;
  110.            case 'k':
  111.                k++;
  112.                letra[10] = k;
  113.                fputs("7", file);
  114.                break;
  115.            case 'l':
  116.                l++;
  117.                letra[11] = l;
  118.                fputs("w", file);
  119.                break;
  120.            case 'm':
  121.                m++;
  122.                letra[12] = m;
  123.                fputs("0", file);
  124.                break;
  125.            case 'n':
  126.                n++;
  127.                letra[13] = n;
  128.                fputs("9", file);
  129.                break;
  130.            case ' ':
  131.                espacio++;
  132.                letra[14] = espacio;
  133.                fputs("z", file);
  134.                break;
  135.            case 'o':
  136.                o++;
  137.                letra[15] = o;
  138.                fputs("3", file);
  139.                break;
  140.            case 'p':
  141.                p++;
  142.                letra[16] = p;
  143.                fputs("e", file);
  144.                break;
  145.            case 'q':
  146.                q++;
  147.                letra[17] = q;
  148.                fputs("i", file);
  149.                break;
  150.            case 'r':
  151.                r++;
  152.                letra[18] = r;
  153.                fputs("6", file);
  154.                break;
  155.            case 's':
  156.                s++;
  157.                letra[19] = s;
  158.                fputs(" ", file);
  159.                break;
  160.            case 't':
  161.                t++;
  162.                letra[20] = t;
  163.                fputs("c", file);
  164.                break;
  165.            case 'u':
  166.                u++;
  167.                letra[21] = u;
  168.                fputs("4", file);
  169.                break;
  170.            case 'v':
  171.                v++;
  172.                letra[22] = v;
  173.                fputs("j", file);
  174.                break;
  175.            case 'w':
  176.                w++;
  177.                letra[23] = w;
  178.                fputs("9", file);
  179.                break;
  180.            case 'x':
  181.                x++;
  182.                letra[24] = x;
  183.                fputs("v", file);
  184.                break;
  185.            case 'y':
  186.                y++;
  187.                letra[25] = y;
  188.                fputs("h", file);
  189.                break;
  190.            case 'z':
  191.                z++;
  192.                letra[26] = z;
  193.                fputs("5", file);
  194.                break;
  195.            case '0':
  196.                cero++;
  197.                letra[27] = cero;
  198.                fputs("u", file);
  199.                break;
  200.            case '1':
  201.                uno++;
  202.                letra[28] = uno;
  203.                fputs("g", file);
  204.                break;
  205.            case '2':
  206.                dos++;
  207.                letra[29] = dos;
  208.                fputs("q", file);
  209.                break;
  210.            case '3':
  211.                tres++;
  212.                letra[30] = tres;
  213.                fputs("m", file);
  214.                break;
  215.            case '4':
  216.                cuatro++;
  217.                letra[31] = cuatro;
  218.                fputs("b", file);
  219.                break;
  220.            case '5':
  221.                cinco++;
  222.                letra[32] = cinco;
  223.                fputs("r", file);
  224.                break;
  225.            case '6':
  226.                seis++;
  227.                letra[33] = seis;
  228.                fputs("f", file);
  229.                break;
  230.            case '7':
  231.                siete++;
  232.                letra[34] = siete;
  233.                fputs("t", file);
  234.                break;
  235.            case '8':
  236.                ocho++;
  237.                letra[35] = ocho;
  238.                fputs("d", file);
  239.                break;
  240.            case '9':
  241.                nueve++;
  242.                letra[36] = nueve;
  243.                fputs("o", file);
  244.                break;
  245.            default:;
  246.        }
  247.    }
  248.  
  249.    fprintf(file2,"\n\na = %d\n",a);
  250.    fprintf(file2,"b = %d\n",b);
  251.    fprintf(file2,"c = %d\n",c);
  252.    fprintf(file2,"d = %d\n",d);
  253.    fprintf(file2,"e = %d\n",e);
  254.    fprintf(file2,"f = %d\n",f);
  255.    fprintf(file2,"g = %d\n",g);
  256.    fprintf(file2,"h = %d\n",h);
  257.    fprintf(file2,"i = %d\n",ii);
  258.    fprintf(file2,"j = %d\n",j);
  259.    fprintf(file2,"k = %d\n",k);
  260.    fprintf(file2,"l = %d\n",l);
  261.    fprintf(file2,"m = %d\n",m);
  262.    fprintf(file2,"n = %d\n",n);
  263.    fprintf(file2,"espacio = %d\n",espacio);
  264.    fprintf(file2,"o = %d\n",o);
  265.    fprintf(file2,"p = %d\n",p);
  266.    fprintf(file2,"q = %d\n",q);
  267.    fprintf(file2,"r = %d\n",r);
  268.    fprintf(file2,"s = %d\n",s);
  269.    fprintf(file2,"t = %d\n",t);
  270.    fprintf(file2,"u = %d\n",u);
  271.    fprintf(file2,"v = %d\n",v);
  272.    fprintf(file2,"w = %d\n",w);
  273.    fprintf(file2,"x = %d\n",x);
  274.    fprintf(file2,"y = %d\n",y);
  275.    fprintf(file2,"z = %d\n",z);
  276.    fprintf(file2,"0 = %d\n",cero);
  277.    fprintf(file2,"1 = %d\n",uno);
  278.    fprintf(file2,"2 = %d\n",dos);
  279.    fprintf(file2,"3 = %d\n",tres);
  280.    fprintf(file2,"4 = %d\n",cuatro);
  281.    fprintf(file2,"5 = %d\n",cinco);
  282.    fprintf(file2,"6 = %d\n",seis);
  283.    fprintf(file2,"7 = %d\n",siete);
  284.    fprintf(file2,"8 = %d\n",ocho);
  285.    fprintf(file2,"9 = %d\n",nueve);
  286.    fprintf(file2,"\n");
  287.  
  288.    /*for(as=0; as<37; as++){
  289. }*/
  290.  
  291.  
  292.    for(i=0; i<37; i++){
  293.        aux = letra[i];
  294.        fprintf(file2,"%d\n",aux);
  295.    }  
  296.  
  297.    fclose(file);
  298.    fclose(file2);
  299.    fclose(file3);
  300.  
  301.    printf("\n\n");
  302.    printf("Cifrado guardado en archivo\n\n");
  303.    printf("Estadistica guardada en archivo\n\n");
  304.  
  305.    return 0;
  306. }

MOD: El código debe ir entre etiquetas de Código GeSHi


Título: Re: ayuda con un codigo en c
Publicado por: K-YreX en 26 Marzo 2021, 12:15 pm
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.
Código
  1. // cabeceras
  2.  
  3. #define NUM_CARACTERES 37 // Constante para el numero de caracteres
  4.  
  5. int main() {
  6.  char abecedario[] = "abcd..";
  7.  char cifrado[] = "...";
  8.  int estadisticas[NUM_CARACTERES] = {0}; // Inicializamos todo el array a 0
  9.  // Se puede hacer una comprobacion para evitar errores en tiempo de ejecucion mediante <assert.h>
  10.  assert(strlen(abecedario) == strlen(cifrado) && NUM_CARACTERES >= strlen(abecedario)); // Lanza un error si la condicion no es cierta
  11.  
  12.  FILE *fichero_simple = fopen("texto_simple.txt", "r");
  13.  FILE *fichero_cifrado = fopen("texto_cifrado.txt", "wt");
  14.  // Comprobar que los ficheros se han abierto correctamente y en caso contrario, terminar el programa
  15.  
  16.  char caracterActual;
  17.  int encontrado = 0; // se puede usar bool mediante <stdbool.h>
  18.  while((caracterActual = fgetc(fichero_simple)) != EOF) {
  19.    for(int i = 0; i < strlen(abecedario) && !encontrado; ++i) {
  20.      encontrado = (caracterActual == abecedario[i]);
  21.      if(encontrado) {
  22.        caracter = cifrado[i];
  23.        ++estadisticas[i];
  24.      }
  25.    }
  26.    fputc(caracter, fichero_cifrado); // De esta forma si un caracter no lo encuentra, lo copia sin cifrar
  27.    encontrado = 0;
  28.  }
  29.  
  30.  // Cerrar ficheros de texto simple y cifrado
  31.  
  32.  FILE *fichero_estadisticas = fopen("estadisticas.txt", "wt");
  33.  // Comprobar que se ha abierto correctamente
  34.  
  35.  for(int i = 0; i < strlen(abecedario); ++i)
  36.    fprintf(fichero_estadisticas, "%c = %d\n", abecedario[i], estadisticas[i]);
  37.  
  38.  // Cerrar fichero de estadisticas
  39. }