Menú

Mostrar Mensajes

Esta sección te permite ver todos los mensajes escritos por este usuario. Ten en cuenta que sólo puedes ver los mensajes escritos en zonas a las que tienes acceso en este momento.

Mostrar Mensajes Menú

Mensajes - rick520

#1
Programación C/C++ / codigo en c errores
11 Diciembre 2020, 23:24 PM
no puedo compilarlo, creo que el error esta en el carga con los punteros, pero nose como arreglarlo


#include <stdio.h>
#include <string.h>
#define N 10000

typedef struct traductor{
   char espanol[20];
   char ingles[20];
   int num;
 }traductor;
traductor T[N];
traductor Auxi;


void CARGA(struct traductor T[N], int *i){


   FILE *archivo1=fopen("espaingl.dat","r");
   if(archivo1 == NULL){
       printf("\nError en la apertura del archivo\n");
   return;
   }
   while(!feof(archivo1)){
           fscanf(archivo1,"%s  %s %d",T[*i].espanol, T[*i].ingles, T[*i].num);
           *i=*i+1;
  }
   fclose(archivo1);
}

int busqueda_dicotomica (struct traductor T[N], int *i, char pal_espanol[21]) {
   int min, max, medio;
   char palabra;
   min=0;
   max= *i-1;
   medio= (min + max)/2;
   while (strcmp(T[medio].espanol, pal_espanol)!=0 &&min<=max) {
           if (strcmp(pal_espanol, T[medio].espanol) <0){
               max=medio-1;}
           else{
               min=medio+1;}

           medio= (min+max)/2; //fin si
   }//fin mientras
   if (strcmp(T[medio].espanol, pal_espanol) ==0)
       return (medio); //se encontro la nueva palabra en el listado
   else
       return -1; //no se encontro la palabra en el listado
   //finsi

}//fin busqueda dicotomica

int MENU(){
   int op;
   printf("--------------------------\n");
   printf("BIENVENIDO AL TRADUCTOR\n\n");
   printf("Elija la opcion que desee\n");
   printf("(1)Ingles a Espanol\n");
   printf("(2)Espanol a Ingles\n");
   printf("(0)Cerrar");
   printf("\n--------------------------\n");
   printf("Opcion: ");
   scanf("%d", &op);
   while(op<0 || op>2){
       printf("Error- opcion inexistente, elija entre 0 y 2: ");
       scanf("%d", &op);
   }
}

int MENU1(){
   char w;
   printf("\nElija opcion\n");
   printf("T - Traducir al espanol\n");
   printf("A - Agregar palabra\n");
   printf("M - Mas buscadas\n");
   printf("V - Volver\n");
   printf("Opcion: ");
   scanf(" %c",&w);
   while(w!='t' && w!='a' && w!='m' && w!='v'){
       printf("Error- Elija T, A, M o V: ");
       scanf(" %c",&w);
   }
}

int MENU2(){
   char q;
   printf("\nElija opcion\n");
   printf("T - Traducir al ingles\n");
   printf("A - Agregar palabra\n");
   printf("M - Mas buscadas\n");
   printf("V - Volver\n");
   printf("Opcion: ");
   scanf(" %c",&q);
   while(q!='t' && q!='a' && q!='m' && q!='v'){
       printf("Error- Elija T, A, M o V:");
       scanf(" %c",&q);
   }
}

void tradu(int opc, int *i) {
    int p, j, temp,des,band1,band,medio;
    char aux[20], la[20];

    CARGA(T, &i);
    temp = 0;

    printf ("\nIntroduce la palabra que desea buscar: ");
    fflush(stdin);
    fgets(aux,N,stdin);
    cambio (aux);
    if(opc==1){
       band=0;
       while(band==0){
           for (p=0 ; p<*i; p++) {
               j = strcmp (aux, T[p].ingles);
               if(j==0){
                   printf("La traduccion de %s es %s\n", T[p].ingles, T[p].espanol);
                   T[p].num=T[p].num+1;

                   band++;
               }
           }
       }
               if(band!=0){
                   printf("La palabra no se encontro, Si desea agregarla marque 1");
                   scanf(" %d", &des);
                   if(des==1){
                           strcpy(T[*i].ingles, aux);
                           printf("Ingrese la traduccion: ");
                           scanf(" %s", &la);
                           strcpy(T[*i].espanol, la);
                           T[*i].num=0;
                           *i=*i+1;
                   }
               }
    }
    else {
           band1=0;
           while(band1==0){
                   medio=busqueda_dicotomica(T, &i, aux);
                       j = strcmp (aux, T[medio].espanol);
                       if (j == 0) {
                           printf ("La traduccion de %s es %s\n", T[medio].espanol, T[medio].ingles);
                           band1++;
                           T[medio].num=T[medio].num+1;
                       }

           }
           if(band!=0){
               printf("La palabra no se encontro, Si desea agregarla marque 1 o cero para volver");
               scanf(" %d", &des);
               if(des==1){
                       strcpy(T[*i].espanol, aux);
                       printf("Ingrese la traduccion: ");
                       scanf(" %s", &la);
                       strcpy(T[*i].ingles, la);
                       T[*i].num=0;
                       *i=*i+1;
               }
           }
}
}

void cambio (char palabra[20]) {
   int i;

   for(i=0 ; i<N ; i++){
       if (palabra[i] == '\n'){
           palabra[i] = '\0';
       }
   }
}

void Agregar (int opc, int *i){
  char Npal, la;
  int p, j,bandera,bandera1,x,c,y,posicion,maximo;
   CARGA (T, &i);
   if (opc ==1){
           printf("Ingrese la palabra que desea agregar");
           scanf (" %s",&Npal );
           bandera==0;
               for(p=0 ; p<*i; p++){
                   j = strcmp (Npal, T[p].ingles);
                   if(j==0){
                       printf("La palabra ya existe");
                       bandera++;
                   }
               }
           if(bandera!=0){
              strcpy(T[*i].ingles, Npal);
                       printf("Ingrese la traduccion: ");
                       scanf(" %s",la);
                       strcpy(T[*i].espanol, la);
                       T[*i].num=0;
                       *i=*i+1;
           }
   }
       if (opc == 2){
           printf("Ingrese la palabra que desea agregar");
           scanf (" %s",&Npal );
           bandera1=0;
           for (c=0 ; c<*i; c++) {
               j = strcmp (Npal, T[c].espanol);
               if(j==0){
                   printf("La palabra ya existe");
                   bandera1++;
               }
           }
               if(bandera1!=0){
                   strcpy(T[*i].ingles, Npal);
                       printf("Ingrese la traduccion: ");
                       scanf(" %s", &la);
                       strcpy(T[*i].ingles, la);
                       T[*i].num=0;
                       *i=*i+1;
               }
           }
           //ordenamiento

           for(x=0;x<*i-1;x++){
               maximo= T[x].num;
               posicion=x;
               for(y=x+1;y<*i;y++){
                   if(T[x].num >maximo){
                       maximo=T[x].num;
                       posicion=y;
                   }
               }
             Auxi=T[posicion];
             T[posicion]=T[x];
             T[x]=Auxi;
           }
       }

void MasBuscada(int i){
   int x,c,y,posicion,maximo;
   for(x=0;x<i-1;x++){
               maximo= T[x].num;
               posicion=x;
               for(y=x+1;y<i;y++){
                   if(T[x].num >maximo){
                       maximo=T[x].num;
                       posicion=y;
                   }
               }
             Auxi=T[posicion];
             T[posicion]=T[x];
             T[x]=Auxi;
           }
   printf("Las diez palabras mas buscadas fueron: \n");
   for(c=0;c<10;c++){
       printf("%s %s %d \n",T[c].espanol, T[c].ingles, T[c].num );
   }
}

int main(void){
   struct traductor T[N];
   int opc,i=0;
   char men1,men2;

   CARGA(T,&i);
   opc=MENU();

   while(opc!=0){
           switch(opc){
               case 1:
                   printf("Elijio opcion: 1 \n\n");
                   men1=MENU1();
                   while(men1!='v'){
                       switch(men1){
                           case 't':
                               tradu(opc,&i);
                           break;
                           case 'a':
                             Agregar (opc, &i);
                           break;
                           case 'm':
                              MasBuscada(i);
                           break;
                       }
                   men1=MENU1();
                   }
               break;
               case 2:
                   printf("Elijio opcion: 2\n\n");
                   men2=MENU2();
                   while(men2!='v'){
                       switch(men2){
                           case 't':
                               tradu(opc,&i);
                           break;
                           case 'a':
                              Agregar (opc, &i);
                           break;
                           case 'm':
                               MasBuscada(i);
                           break;
                       }
                   men2=MENU2();
                   }
               break;
           }
           opc=MENU();
   }
   printf("\n\nUsted ha finalizado el Programa\n");
return 0;
}




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