elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Entrar al Canal Oficial Telegram de elhacker.net


  Mostrar Temas
Páginas: 1 2 3 4 5 6 7 8 9 [10] 11 12 13 14 15 16 17 18 19 20 21 22
91  Programación / Programación C/C++ / problemas con fseeks en: 30 Enero 2014, 21:55 pm
Saludos, tengo problemas con unos fseeks que tengo dentro de un ciclo while que me lee un archivo, pero a la hora de imprimir el archivo no lo hace correctamente

este es el codigo:

Código
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <string.h>
  4. #define MAX 8
  5.  
  6. typedef enum {INS,OP,DIR,MAQ,CALCULADO,CALCULAR,TOTAL} tabla;
  7.  
  8. void buscarFinLinea(FILE *hc12);
  9. void listaTABOP();
  10. char *Tabla_Operandos(FILE *hc12,int tabla);
  11. void ignorarEspacios(FILE *hc12);
  12. void quitarSaltosLinea(char *cadena);
  13.  
  14. int main()
  15. {
  16.    listaTABOP();
  17.    return 0;
  18. }
  19.  
  20. void buscarFinLinea(FILE *hc12)
  21. {
  22.    int car;
  23.    while((car = fgetc(hc12))!= '\n')
  24.        ;
  25. }
  26.  
  27. void quitarSaltosLinea(char *c)
  28. {
  29.    char *ptr;
  30.    if(((ptr = strchr(c,'\n'))!= NULL)||((ptr = strchr(c,'\t'))!= NULL)||((ptr = strchr(c,' '))!= NULL))
  31.       *ptr = '\0';
  32. }
  33.  
  34. void listaTABOP()
  35. {
  36.    int car,i,pos,n;
  37.    FILE *hc12;
  38.    COD *ultimo = NULL;
  39.    char *ins,*op,**dir,**maq,**cal,**x_cal,**sum;
  40.    if((hc12 = fopen("Tabla_OP.txt","r"))!= NULL)
  41.    {
  42.        while((car = fgetc(hc12))!= EOF)
  43.        {
  44.            i = 0;
  45.            fseek(hc12,-1,SEEK_CUR);
  46.            ins = Tabla_Operandos(hc12,INS);
  47.            printf("[%s]\t",ins);
  48.            ignorarEspacios(hc12);
  49.            op = Tabla_Operandos(hc12,OP);
  50.            printf("[%s]",op);
  51.            pos = ftell(hc12);
  52.            buscarFinLinea(hc12);
  53.            if((car = fgetc(hc12)) != '\t')
  54.            {
  55.                n = 0;
  56.                fseek(hc12,pos,SEEK_SET);
  57.                ignorarEspacios(hc12);
  58.                dir = (char**)malloc(sizeof(char*));
  59.                dir[i] = Tabla_Operandos(hc12,DIR);
  60.                printf("\t[%s]\t",dir[i]);
  61.                ignorarEspacios(hc12);
  62.                maq = (char**)malloc(sizeof(char*));
  63.                maq[i] = Tabla_Operandos(hc12,MAQ);
  64.                printf("[%s]\t",maq[i]);
  65.                ignorarEspacios(hc12);
  66.                cal = (char**)malloc(sizeof(char*));
  67.                cal[i] = Tabla_Operandos(hc12,CALCULADO);
  68.                printf("[%s]\t",cal[i]);
  69.                ignorarEspacios(hc12);
  70.                x_cal = (char**)malloc(sizeof(char*));
  71.                x_cal[i] = Tabla_Operandos(hc12,CALCULAR);
  72.                printf("[%s]\t",x_cal[i]);
  73.                ignorarEspacios(hc12);
  74.                sum = (char**)malloc(sizeof(char*));
  75.                sum[i] = Tabla_Operandos(hc12,TOTAL);
  76.                printf("[%s]\n",sum[i]);
  77.                buscarFinLinea(hc12);
  78.            }
  79.            else
  80.            {
  81.                n = 1;
  82.                fseek(hc12,pos,SEEK_SET);
  83.                dir = (char**)malloc(MAX*sizeof(char*));
  84.                maq = (char**)malloc(MAX*sizeof(char*));
  85.                cal = (char**)malloc(MAX*sizeof(char*));
  86.                x_cal = (char**)malloc(MAX*sizeof(char*));
  87.                sum = (char**)malloc(MAX*sizeof(char*));
  88.                do
  89.                {
  90.                    ignorarEspacios(hc12);
  91.                    dir[i] = Tabla_Operandos(hc12,DIR);
  92.                    printf("\t[%s]\t",dir[i]);
  93.                    ignorarEspacios(hc12);
  94.                    maq[i] = Tabla_Operandos(hc12,MAQ);
  95.                    printf("[%s]\t",maq[i]);
  96.                    ignorarEspacios(hc12);
  97.                    cal[i] = Tabla_Operandos(hc12,CALCULADO);
  98.                    printf("[%s]\t",cal[i]);
  99.                    ignorarEspacios(hc12);
  100.                    x_cal[i] = Tabla_Operandos(hc12,CALCULAR);
  101.                    printf("[%s]\t",x_cal[i]);
  102.                    ignorarEspacios(hc12);
  103.                    sum[i] = Tabla_Operandos(hc12,TOTAL);
  104.                    printf("[%s]\n",sum[i]);
  105.                    buscarFinLinea(hc12);
  106.                    i++;
  107.                    printf("\t");
  108.                }while((car = fgetc(hc12)) == '\t');
  109.            }
  110.        }
  111.    }
  112.    else
  113.       printf("No se pudo abrir el archivo");
  114. }
  115.  
  116. void ignorarEspacios(FILE *hc12)
  117. {
  118.    int car;
  119.    do
  120.    {
  121.        car = fgetc(hc12);
  122.    }while(car == '\t' || car == ' ');
  123. }
  124.  
  125. char *Tabla_Operandos(FILE *hc12,int tabla)
  126. {
  127.    int car,lon = 0,pos;
  128.    char *c;
  129.    fseek(hc12,-1,SEEK_CUR);
  130.    pos = ftell(hc12);
  131.    if((tabla==INS)||(tabla==OP)||(tabla==DIR)||(tabla==MAQ)||(tabla==CALCULADO)||(tabla==CALCULAR))
  132.    {
  133.        do
  134.        {
  135.            car = fgetc(hc12);
  136.            lon++;
  137.        }while(car != '\t' && car != EOF);
  138.    }
  139.    else
  140.    {
  141.        do
  142.        {
  143.            car = fgetc(hc12);
  144.            lon++;
  145.        }while(car != '\n' && car != EOF);
  146.        lon--;
  147.    }
  148.    fseek(hc12,pos,SEEK_SET);
  149.    c = (char*)calloc((lon+1),sizeof(char));
  150.    fgets(c,lon+1,hc12);
  151.    quitarSaltosLinea(c);
  152.    return c;
  153. }
  154.  
[
y el archivo es
quote]ABA         NO   INH      1806      2   0   2
          ADCA   SI   IMM      89ii      1   1   2
                            DIR      99dd      1   1   2
                            EXT      B9hhll   1   2   3
                            IDX      A9xb      1   1   2
                            IDX1      A9xbff   1   2   3
                            IDX2      A9xbeeff   1   3   4
                            [D,IDX]   A9xb      1   1   2
                            [IDX2]   A9xbeeff   1   3   4[/quote]
el problema es que  cuando llega al codop ADCA no me imprime toda la linea solo me imprime

[]....[ADCA]...[SI]...[IMM]...[89ii]....[1]...[1]

 esto se arregla si le quito el primer fseek() que aparece en el while() de la funcion listaTABOP, pero si se lo quito ahora los codops siguientes al ADCA los imprime sin la primer letra, se la come,entonces como puedo arreglar este problema

gracias
92  Programación / Programación C/C++ / se me borro el codigo en: 27 Enero 2014, 05:08 am
Saludos, tengo un problema con el siguiente codigo que creo que ya habia posteado antes, pero lo que pasa es que de repente la pantalla se me congelo y cuando reinicie la maquina ya no tenia codigo, se me borro todo y ahora estoy empezandolo a hacer de nuevo todo, el codigo me lee de un archivo todos los codigos de operacion y me hace una lista simplemente ligada, esto si funciona bien, pero a la hora de que le pido que busque un codigo de operacion en la lista siempre me imprime que no lo encuentra, y no entiendo por que? si alguien me pudiera ayudar se lo agradeceria mucho

Código
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <string.h>
  4. #define LONG_ETIQUETA 8
  5. #define LONG_CODOP 5
  6. #define COMENTARIO ';'
  7. #define TABULADOR '\t'
  8. #define ESPACIOS_ ' '
  9. #define MAX 8
  10.  
  11. typedef enum {FALSO,VERDADERO} booleano;
  12. typedef enum {ETIQUETA,CODOP,OPERANDO} linea;
  13.  
  14. typedef struct nodo
  15. {
  16.    char *instruccion;
  17.    struct nodo *sig;
  18. }COD;
  19.  
  20. void imprimirLista(COD *cabeza);
  21. int verificarCombinacion(FILE *fd);
  22. booleano esComentario(FILE *fd);
  23. char *Etiqueta_Codop_Operando(FILE *fd,int linea);
  24. void ultimaLinea(char *codop);
  25. void buscarFinLinea(FILE *fd);
  26. void ignorarEspacios(FILE *fd);
  27. void listaTABOP(COD **cabeza);
  28. COD *ultimoElemento(COD **cabeza);
  29. COD *crearNodo(char *ins);
  30. void insertarFinal(char *ins,COD *ultimo);
  31. char *Tabla_Operandos(FILE *hc12);
  32. COD *buscarCodop(COD *cabeza,char *codop);
  33. void quitarSaltosLinea(char *cadena);
  34. booleano esNumero(char caracter);
  35. booleano esLetra(char caracter);
  36.  
  37. int main()
  38. {
  39.    FILE *fd;
  40.    int car,combinacion;
  41.    COD *cabeza = NULL,*encontrado = NULL;
  42.    char *etiqueta,*codop,*operando;
  43.    listaTABOP(&cabeza);
  44.    //imprimirLista(cabeza);
  45.    if((fd = fopen("ejemplo_errores.txt","r"))!= NULL)
  46.    {
  47.        while((car = fgetc(fd))!= EOF)
  48.        {
  49.            switch(car)
  50.            {
  51.                case COMENTARIO:
  52.                   if(esComentario(fd))
  53.                      printf("COMENTARIO\n\n");
  54.                   else
  55.                      buscarFinLinea(fd);
  56.                   break;
  57.                case ESPACIOS_:
  58.                case TABULADOR:
  59.                   etiqueta = "null";
  60.                   printf("ETIQUETA = %s\n",etiqueta);
  61.                   ignorarEspacios(fd);
  62.                   codop = Etiqueta_Codop_Operando(fd,CODOP);
  63.                   printf("CODOP = %s\n",codop);
  64.                   erroresCodop(codop);
  65.                   combinacion = verificarCombinacion(fd);
  66.                   if(combinacion == 2)
  67.                   {
  68.                       operando = "null";
  69.                       printf("OPERANDO = %s\n\n",operando);
  70.                   }
  71.                   else
  72.                   {
  73.                       ignorarEspacios(fd);
  74.                       operando = Etiqueta_Codop_Operando(fd,OPERANDO);
  75.                       printf("OPERANDO = %s\n\n",operando);
  76.                   }
  77.                   break;
  78.                default:
  79.                   etiqueta = Etiqueta_Codop_Operando(fd,ETIQUETA);
  80.                   printf("ETIQUETA = %s\n",etiqueta);
  81.                   erroresEtiqueta(etiqueta);
  82.                   combinacion = verificarCombinacion(fd);
  83.                   if(combinacion == 2)
  84.                   {
  85.                       codop = "null";
  86.                       printf("CODOP = %s\n",codop);
  87.                       erroresCodop(codop);
  88.                       operando = "null";
  89.                       printf("OPERANDO = %s\n\n",operando);
  90.                   }
  91.                   else
  92.                   {
  93.                       ignorarEspacios(fd);
  94.                       codop = Etiqueta_Codop_Operando(fd,CODOP);
  95.                       printf("CODOP = %s\n",codop);
  96.                       erroresCodop(codop);
  97.                       combinacion = verificarCombinacion(fd);
  98.                       if(combinacion == 2)
  99.                       {
  100.                           operando = "null";
  101.                           printf("OPERANDO = %s\n\n",operando);
  102.                       }
  103.                       else
  104.                       {
  105.                           ignorarEspacios(fd);
  106.                           operando = Etiqueta_Codop_Operando(fd,OPERANDO);
  107.                           printf("OPERANDO = %s\n\n",operando);
  108.                       }
  109.                   }
  110.                   break;
  111.            }
  112.            if((encontrado = buscarCodop(cabeza,codop)) == NULL)
  113.               printf("NO SE ENCONTRO EL CODOP DE OPERACION\n");
  114.        }
  115.        ultimaLinea(codop);
  116.    }
  117.    else
  118.       printf("No se pudo abrir el archivo");
  119.    return 0;
  120. }
  121.  
  122. booleano esComentario(FILE *fd)
  123. {
  124.    int car;
  125.    while((car = fgetc(fd))!= '\n')
  126.    {
  127.        if(car == ';')
  128.           return 0;
  129.    }
  130.    return 1;
  131. }
  132.  
  133. void buscarFinLinea(FILE *fd)
  134. {
  135.    int car;
  136.    while((car = fgetc(fd))!= '\n')
  137.        ;
  138. }
  139.  
  140. void ignorarEspacios(FILE *fd)
  141. {
  142.    int car;
  143.    do
  144.    {
  145.        car = fgetc(fd);
  146.    }while(car == '\t' || car == ' ');
  147. }
  148.  
  149. int verificarCombinacion(FILE *fd)
  150. {
  151.    int car,combinacion;
  152.    fseek(fd,-1,SEEK_CUR);
  153.    if((car = fgetc(fd))== '\n')
  154.       combinacion = 2;
  155.    else
  156.       combinacion = 1;
  157.    return combinacion;
  158. }
  159.  
  160. booleano esLetra(char caracter)
  161. {
  162.    if((caracter >= 'A' && caracter <= 'Z')||(caracter >= 'a' && caracter <= 'z'))
  163.       return 1;
  164.    else
  165.       return 0;
  166. }
  167.  
  168. booleano esNumero(char caracter)
  169. {
  170.    if(caracter >= '0' && caracter <= '9')
  171.       return 1;
  172.    else
  173.       return 0;
  174. }
  175.  
  176. char *Etiqueta_Codop_Operando(FILE *fd,int linea)
  177. {
  178.    int car,lon = 0,pos;
  179.    char *cadena,*ptr;
  180.    fseek(fd,-1,SEEK_CUR);
  181.    pos = ftell(fd);
  182.    if((linea == ETIQUETA)||(linea == CODOP))
  183.    {
  184.        do
  185.        {
  186.            car = fgetc(fd);
  187.            lon++;
  188.        }while(car != '\t' && car != ' ' && car != '\n');
  189.    }
  190.    else
  191.    {
  192.        do
  193.        {
  194.            car = fgetc(fd);
  195.            lon++;
  196.        }while(car != '\n');
  197.    }
  198.    cadena = (char*)calloc((lon+1),sizeof(char));
  199.    fseek(fd,pos,SEEK_SET);
  200.    fgets(cadena,lon+1,fd);
  201.    if(((ptr=strchr(cadena,'\n'))!=NULL)||((ptr=strchr(cadena,'\t'))!=NULL)||((ptr=strchr(cadena,' '))!=NULL))
  202.       *ptr = '\0';
  203.    return cadena;
  204. }
  205.  
  206. void ultimaLinea(char *codop)
  207. {
  208.    if((strcmp(codop,"end")) != 0)
  209.       printf("Error:No se encontro el END.\n");
  210. }
  211.  
  212. void quitarSaltosLinea(char *cadena)
  213. {
  214.    char *ptr;
  215.    if(((ptr=strchr(cadena,'\n'))!=NULL)||((ptr=strchr(cadena,'\t'))!=NULL)||((ptr=strchr(cadena,' '))!=NULL))
  216.       *ptr = '\0';
  217. }
  218.  
  219. void listaTABOP(COD **cabeza)
  220. {
  221.    int car;
  222.    FILE *hc12;
  223.    COD *ultimo = NULL;
  224.    char *ins;
  225.    if((hc12 = fopen("Tabla_OP.txt","r"))!= NULL)
  226.    {
  227.         while((car = fgetc(hc12))!= EOF)
  228.        {
  229.            if(car != '\t')
  230.            {
  231.                ins = Tabla_Operandos(hc12);
  232.                buscarFinLinea(hc12);
  233.                if(*cabeza == NULL)
  234.                   *cabeza = crearNodo(ins);
  235.                else
  236.                {
  237.                    ultimo = ultimoElemento(cabeza);
  238.                    insertarFinal(ins,ultimo);
  239.                }
  240.            }
  241.            else
  242.               buscarFinLinea(hc12);
  243.        }
  244.    }
  245.    else
  246.       printf("No se pudo abrir el archivo");
  247. }
  248.  
  249. COD *ultimoElemento(COD **cabeza)
  250. {
  251.    COD *ptr;
  252.    ptr = *cabeza;
  253.    while(ptr->sig != NULL)
  254.       ptr = ptr->sig;
  255.    return ptr;
  256. }
  257.  
  258. char *Tabla_Operandos(FILE *hc12)
  259. {
  260.    int car,lon = 0,pos;
  261.    char *cadena;
  262.    fseek(hc12,-1,SEEK_CUR);
  263.    pos = ftell(hc12);
  264.        do
  265.        {
  266.            car = fgetc(hc12);
  267.            lon++;
  268.        }while(car != '\t');
  269.    fseek(hc12,pos,SEEK_SET);
  270.    cadena = calloc((lon+1));
  271.    fgets(cadena,lon+1,hc12);
  272.    quitarSaltosLinea(cadena);
  273.    return cadena;
  274. }
  275.  
  276. COD *buscarCodop(COD *cabeza,char *codop)
  277. {
  278.    COD *ptr;
  279.    for(ptr = cabeza;ptr != NULL;ptr = ptr->sig)
  280.    {
  281.        if(ptr->instruccion == codop)
  282.           return ptr;
  283.    }
  284.    return NULL;
  285. }
  286.  
  287. void insertarFinal(char *ins,COD *ultimo)
  288. {
  289.    ultimo->sig = crearNodo(ins);
  290.    ultimo->sig->sig = NULL;
  291.    ultimo = ultimo->sig;
  292. }
  293.  
  294. COD *crearNodo(char *ins)
  295. {
  296.    int tam;
  297.    COD *x;
  298.    x = (COD*)malloc(sizeof(COD));
  299.    tam = strlen(ins);
  300.    x->instruccion = malloc(tam);
  301.    strcpy(x->instruccion,ins);
  302.    x->sig = NULL;
  303.    return x;
  304. }
  305.  

93  Programación / Programación C/C++ / problema con doble punteros en: 26 Enero 2014, 23:11 pm
Saludos tengo una variable que es de tipo char** p, esto es para que sea un arreglo que contenga cadenas de tamańo variable y despues estas variables asignarselas al elemento nombre del mismo tipo que esta en una estructura, el problema es que el codigo me truena y no se por que

Código
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <string.h>
  4. #define MAX 4
  5.  
  6. typedef struct
  7. {
  8.    char **nombre;
  9. }CODOP;
  10.  
  11. int main()
  12. {
  13.    int tam,tam1,tam2,tam3,i;
  14.    CODOP *x;
  15.    char **p;
  16.    x = (CODOP*)malloc(sizeof(CODOP));
  17.    p = (char**)malloc(MAX*sizeof(char*));
  18.    p[0] = "anita";
  19.    p[1] = "lava";
  20.    p[2] = "la";
  21.    p[3] = "tina";
  22.    tam = strlen(p[0]);
  23.    tam1 = strlen(p[1]);
  24.    tam2 = strlen(p[2]);
  25.    tam3 = strlen(p[3]);
  26.    x->nombre = (char**)malloc(MAX*sizeof(char*));
  27.    x->nombre[0] = (char*)malloc((tam+1)*sizeof(char));
  28.    x->nombre[1] = (char*)malloc((tam1+1)*sizeof(char));
  29.    x->nombre[2] = (char*)malloc((tam2+1)*sizeof(char));
  30.    x->nombre[3] = (char*)malloc((tam3+1)*sizeof(char));
  31.    strcpy(x->nombre[0],p[0]);
  32.    strcpy(x->nombre[1],p[1]);
  33.    strcpy(x->nombre[2],p[2]);
  34.    strcpy(x->nombre[3],p[3]);
  35.    for(i = 0;i < MAX;i++)
  36.       printf("%s\n",x->nombre[i]);
  37.    return 0;
  38. }
  39.  

gracias de antemano
94  Programación / Programación C/C++ / Process returned 0 en: 19 Enero 2014, 23:40 pm
Saludos, tengo entendido que al compilar un programa si te aparece un mensaje que diga Process returned 0 (0x0) quiere decir que compilo bien y sin errores, pero a mi en el siguiente codigo no me aparece ese mensaje, pero tampoco me aparecen mensajes de error o warnings, el programa tiene que leer un archivo y almacenar algunos datos en la variable que le corresponda, pero no se donde esta el error?? y por que el programa no termina como deberia

Código
  1. int main()
  2. {
  3.    int car,i;
  4.    FILE *hc12;
  5.    COD *cabeza = NULL,*ultimo;
  6.    char *ins,*op,*dir[MAX],*maq[MAX],*cal[MAX],*x_cal[MAX],*suma[MAX];
  7.    if((hc12 = fopen("archivo.txt","r"))!= NULL)
  8.    {
  9.        while((car = fgetc(hc12))!= EOF)
  10.        {
  11.            i = 0;
  12.            ins = Tabla_Operandos(hc12);
  13.            printf("%s\t",ins);
  14.            ignorarEspacios(hc12);
  15.            op = Tabla_Operandos(hc12);
  16.            printf("%s",op);
  17.            do
  18.            {
  19.                ignorarEspacios(hc12);
  20.                dir[i] = Tabla_Operandos(hc12);
  21.                printf("\t\t%s\t",dir[i]);
  22.                ignorarEspacios(hc12);
  23.                maq[i] = Tabla_Operandos(hc12);
  24.                printf("%s\t",maq[i]);
  25.                ignorarEspacios(hc12);
  26.                cal[i] = Tabla_Operandos(hc12);
  27.                printf("%s\t",cal[i]);
  28.                ignorarEspacios(hc12);
  29.                x_cal[i] = Tabla_Operandos(hc12);
  30.                printf("%s\t",x_cal[i]);
  31.                ignorarEspacios(hc12);
  32.                suma[i] = Tabla_Operandos(hc12);
  33.                printf("%s\n",suma[i]);
  34.                buscarFinLinea(hc12);
  35.                i++;
  36.            }while(car == '\t');
  37.        }
  38.    }
  39.    return 0;
  40. }
  41.  
  42. void buscarFinLinea(FILE *fd)
  43. {
  44.    int car;
  45.    while((car = fgetc(fd))!= '\n')
  46.        ;
  47. }
  48.  
  49. void ignorarEspacios(FILE *fd)
  50. {
  51.    int car;
  52.    do
  53.    {
  54.        car = fgetc(fd);
  55.    }while(car == '\t' || car == ' ');
  56. }
  57.  
  58. char *Tabla_Operandos(FILE *hc12)
  59. {
  60.    int car,lon = 0,pos;
  61.    char *cadena;
  62.    fseek(hc12,-1,SEEK_CUR);
  63.    pos = ftell(hc12);
  64.    do
  65.    {
  66.        car = fgetc(hc12);
  67.        lon++;
  68.    }while(car != '\t' && car != ' ');
  69.    fseek(hc12,pos,SEEK_SET);
  70.    cadena = calloc(lon+1);
  71.    fgets(cadena,lon+1,hc12);
  72.    quitarSaltosLinea(cadena);
  73.    return cadena;
  74. }
  75.  

de antemano gracias
95  Programación / Programación C/C++ / Lista con arrays en: 15 Enero 2014, 19:51 pm
Saludos tengo el siguiente archivo de texto:

ADCA****SI***IMM***89ii******1***1***2
**************DIR***99dd*****1***1***2   
**************EXT***B9hhll****1***2***3   
**************IDX***A9xb*****1***1***2   
**************IDX1**A9xbff****1***2***3   
**************IDX2**A9xbeeff**1***3***4   

los * son espacios
Y tengo que leer este archivo y que me guarde cada uno de los elementos en una variable para esto se me ocurrio que podia hacer una lista simplemente ligada que tuviera los elementos:

codop = ADCA, operando = SI y para los 5 elementos restantes pense que podria hacerlos con arreglos, que direccionamiento fuera algo como:

direc[0] = IMM
direc[1] = DIR
direc[2] = EXT
direc[3] = IDX
direc[4] = IDX1
 
y codigo maquina fuera:

maq[0] = 89ii
maq[1] = 99dd
maq[2] = B9hhl
....
....
esto seria un array de cadenas un char **direc y para los campos que tienen numeros seria un simple array, el codigo que tengo hecho es el siguiente pero me aparecen warnings que dicen assignment makes integer from pointer without a cast, y no entiendo por que,żżżcomo corregirlo???

Código
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <string.h>
  4.  
  5. typedef struct nodo
  6. {
  7.    char *codigo;
  8.    char *Operando;
  9.    char **modo_direccionamiento;
  10.    char **codigo_maquina;
  11.    char *bytes_calculados;
  12.    char *bytes_x_calcular;
  13.    char *total_bytes;
  14.    struct nodo *sig;
  15. }COD;
  16.  
  17. void buscarFinLinea(FILE *hc12);
  18. void ignorarEspacios(FILE *hc12);
  19. char *Tabla_Operandos(FILE *hc12);
  20. void insertarFinal(char *ins,char *op,char **dir,char **maq,char *calculado,char *calcular,char *total,COD *ultimo,int i);
  21. COD *ultimoElemento(COD *cabeza);
  22. COD *crearNodo(char *ins,char *op,char **dir,char **maq,char *calculado,char *calcular,char *total,int i);
  23. void quitarSaltosLinea(char *cadena);
  24.  
  25. int main()
  26. {
  27.    COD *cabeza = NULL,*ultimo;
  28.    FILE *hc12;
  29.    int p,i,car;
  30.    char *ins,*op,**dir,**maq,*calculado,*calcular,*total;
  31.    if((hc12 = fopen("archivo.txt","r"))!= NULL)
  32.    {
  33.        i = 0;
  34.        while((car = fgetc(hc12))!= EOF)
  35.        {
  36.            if(car != '\t')
  37.            {
  38.                ins = Tabla_Operandos(hc12);
  39.                ignorarEspacios(hc12);
  40.                op = Tabla_Operandos(hc12);
  41.                ignorarEspacios(hc12);
  42.                p = ftell(hc12);
  43.                buscarFinLinea(hc12);
  44.                if(car == '\t')
  45.                {
  46.                    fseek(hc12,p,SEEK_SET);
  47.                    dir = (char**)malloc(8*sizeof(char));
  48.                    dir[i] = Tabla_Operandos(hc12);
  49.                    ignorarEspacios(hc12);
  50.                    maq = (char**)malloc(8*sizeof(char));
  51.                    maq[i] = Tabla_Operandos(hc12);
  52.                    ignorarEspacios(hc12);
  53.                    calculado = (char*)malloc(8*sizeof(char));
  54.                    calculado[i] = Tabla_Operandos(hc12);
  55.                    ignorarEspacios(hc12);
  56.                    calcular = (char*)malloc(8*sizeof(char));
  57.                    calcular[i] = Tabla_Operandos(hc12);
  58.                    ignorarEspacios(hc12);
  59.                    total = (char*)malloc(8*sizeof(char));
  60.                    total[i] = Tabla_Operandos(hc12);
  61.                    buscarFinLinea(hc12);
  62.                    if(cabeza == NULL)
  63.                       //cabeza = crearNodo(ins,op,dir,maq,calculado,calcular,total,i);
  64.                    else
  65.                    {
  66.                        //ultimo = ultimoElemento(cabeza);
  67.                        //insertarFinal(ins,op,dir,maq,calculado,calcular,total,ultimo);
  68.                    }
  69.                    i++;
  70.                }
  71.            }
  72.        }
  73.    }
  74.    else
  75.       printf("No se pudo abrir archivo\n");
  76.    return 0;
  77. }
  78.  
  79. void buscarFinLinea(FILE *fd)
  80. {
  81.    int car;
  82.    while((car = fgetc(fd))!= '\n')
  83.        ;
  84. }
  85.  
  86. void ignorarEspacios(FILE *fd)
  87. {
  88.    int car;
  89.    do
  90.    {
  91.        car = fgetc(fd);
  92.    }while(car == '\t' || car == ' ');
  93. }
  94.  
  95. char *Tabla_Operandos(FILE *hc12)
  96. {
  97.    int car,lon = 0,pos;
  98.    char *cadena;
  99.    fseek(hc12,-1,SEEK_CUR);
  100.    pos = ftell(hc12);
  101.    do
  102.    {
  103.        car = fgetc(hc12);
  104.        lon++;
  105.    }while(car != '\t');
  106.    fseek(hc12,pos,SEEK_SET);
  107.    cadena = (char*)calloc((lon+1),sizeof(char));
  108.    fgets(cadena,lon+1,hc12);
  109.    quitarSaltosLinea(cadena);
  110.    return cadena;
  111. }
  112.  
  113. void quitarSaltosLinea(char *cadena)
  114. {
  115.    char *ptr;
  116.    if(((ptr=strchr(cadena,'\n'))!=NULL)||((ptr=strchr(cadena,'\t'))!=NULL)||((ptr=strchr(cadena,' '))!=NULL))
  117.       *ptr = '\0';
  118. }
  119.  
  120.  

de antemano gracias
96  Programación / Programación C/C++ / pasar por referencia un puntero en: 12 Enero 2014, 03:15 am
Saludos, tengo unas dudas con respecto a por que en algunas ocasiones se tienen que pasar los punteros por referencias?? como cuando estas haciendo una lista enlazada y quieres insertar por la cabeza, por que tienes que pasar el puntero por referencia, que no se supone que el puntero ya almacena una direccion de memoria y que por lo tanto no es necesario pasarlo asi funcion(&cabeza).

gracias
97  Programación / Programación C/C++ / problema con lista indexada en: 4 Enero 2014, 01:37 am
Saludos, estoy haciendo una lista simplemente ligada la cual tiene un campo indice para que cada que vaya agregando un elemento sepa cuantos elementos tiene. El problema es que cuando inicializo ese campo a 0 dentro de la structura me aparece un error
Código
  1. typedef struct nodo
  2. {
  3.    char *codigo;
  4.    int indice = 0;
  5.    struct nodo *sig;
  6. }NODO;

me dice que expected ':', ','...... or attribute before token

gracias
98  Programación / Programación C/C++ / busqueda binaria en archivo en: 31 Diciembre 2013, 22:54 pm
Saludos

tengo la siguiente tabla de instrucciones(de un ensamblador) capturada en un archivo txt:

codop
ABA     NO   INH   1806     2   0   2
ABX     NO   IDX   1AE5     2   0   2
ABY     NO   IDX   19ED  2   0   2
ADC     SI   IMM   89ii     1   1   2
..
..
..

y tengo por ejemplo un codigo de operacion que dice ABY, el cual lo tengo que buscar en este archivo, para ello pense que seria mas rapido si lo hago con una busqueda binaria, pero me queda la duda de si tengo primero que guardar solamente los codigos de operacion(ABA,ADB...) en una estructura de datos para despues poder hacer la busqueda, o si tengo que recorrer el archivo completo linea por linea para saber cuantos codops son??  no les pido que posteen el codigo solo que me dijeran  cual podria ser la manera más optima y rapida de hacerlo

gracias
99  Programación / Programación C/C++ / funcion strcmpi() en: 31 Diciembre 2013, 05:05 am
Saludos

tengo una duda con respecto a si la funcion strcmpi esta recomendada usarla o no. tengo entendido que a diferencia de strcmp, esta no es estandar, y si tengo que comparar dos cadenas pero sin diferenciar mayusculas de minusculas no se si hacerlo con esta funcion o hacerlo yo todo el procedimiento

de antemano gracias, y felices fiestas
100  Programación / Programación C/C++ / Programa identifique partes de una linea en: 27 Diciembre 2013, 04:45 am
Saludos tengo un programa que me tiene que leer un archivo como por ejemplo:

;comentario numero 1 =TALLER=
Et1       equ      $ffFF
dos         LDAA   @4732
;comentario numero 2 ˇProgramacion!
;comentario numero 3
tres       sWi      x,5
Netq%23       RMB      556
Et12_xyz12  ADCA   1,PC

y me tiene que imprimir sus partes

COMENTARIO

ETIQUETA = Et1
CODOP = equ
OPERANDO = $ffFF
...
...
y asi con todas las lineas

el problema es que para las las etiquetas tengo dos reglas, una que su longitud no sea mayor a 8 caracteres y otra, que solo tenga letras, numeros y el guion bajo, si una etiqueta tiene otro caracter tengo que imprimir

Error:los caracteres validos en las etiquetas son letras, digitos(0..9) y el guion bajo

pero para el Netq%23 me tendria que imprimir un mensaje de error, por que tiene el %, pero no imprime nada no entiendo por que

Código
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <string.h>
  4. #define LONG_ETIQUETA 8
  5. #define LONG_CODOPS 5
  6.  
  7. typedef enum {FALSO,VERDADERO} booleano;
  8. typedef enum {ETIQUETA,CODOP,OPERANDO} linea;
  9.  
  10. booleano esComentario(FILE *fd);
  11. char *Etiqueta_Codop_Operando(FILE *fd,int linea);
  12. void erroresEtiqueta(char *etiqueta);
  13. void buscarFinLinea(FILE *fd);
  14. void ignorarEspacios(FILE *fd);
  15. booleano esNumero(char cadena[],int i);
  16. booleano esLetra(char cadena[],int i);
  17.  
  18. int main()
  19. {
  20.    FILE *fd;
  21.    int car;
  22.    char *etiqueta,*codop,*operando;
  23.    if((fd = fopen("P1ASM.txt","r"))!= NULL)
  24.    {
  25.        while((car = fgetc(fd))!= EOF)
  26.        {
  27.            if(car == ';')
  28.            {
  29.                if(esComentario(fd))
  30.                   printf("COMENTARIO\n");
  31.                else
  32.                   buscarFinLinea(fd);
  33.            }
  34.            else if((car >= 'A' && car <= 'Z')||(car >= 'a' && car <= 'z'))
  35.            {
  36.                etiqueta = Etiqueta_Codop_Operando(fd,ETIQUETA);
  37.                printf("\nETIQUETA = %s\n",etiqueta);
  38.                erroresEtiqueta(etiqueta);
  39.                ignorarEspacios(fd);
  40.                codop = Etiqueta_Codop_Operando(fd,CODOP);
  41.                printf("CODOP = %s\n",codop);
  42.                ignorarEspacios(fd);
  43.                operando = Etiqueta_Codop_Operando(fd,OPERANDO);
  44.                printf("OPERANDO = %s\n\n",operando);
  45.            }
  46.        }
  47.    }
  48.    else
  49.       printf("No se pudo abrir el archivo");
  50.    return 0;
  51. }
  52.  
  53. booleano esComentario(FILE *fd)
  54. {
  55.    int car;
  56.    while((car = fgetc(fd))!= '\n')
  57.    {
  58.        if(car == ';')
  59.           return 0;
  60.    }
  61.    return 1;
  62. }
  63.  
  64. void buscarFinLinea(FILE *fd)
  65. {
  66.    int car;
  67.    while((car = fgetc(fd))!= '\n')
  68.        ;
  69. }
  70.  
  71. void ignorarEspacios(FILE *fd)
  72. {
  73.    int car;
  74.    do
  75.    {
  76.        car = fgetc(fd);
  77.    }while(car == '\t' || car == ' ');
  78. }
  79.  
  80. booleano esLetra(char *etiqueta,int i)
  81. {
  82.    if((etiqueta[i] >= 'A' && etiqueta[i] <= 'Z')||(etiqueta[i] >= 'a' && etiqueta[i] <= 'z'))
  83.       return 1;
  84.    else
  85.       return 0;
  86. }
  87.  
  88. booleano esNumero(char *etiqueta,int i)
  89. {
  90.    if(etiqueta[i] >= '0' && etiqueta[i] <= '9')
  91.       return 1;
  92.    else
  93.       return 0;
  94. }
  95.  
  96. char *Etiqueta_Codop_Operando(FILE *fd,int linea)
  97. {
  98.    int car,lon = 0,pos;
  99.    char *cadena;
  100.    fseek(fd,-1,SEEK_CUR);
  101.    pos = ftell(fd);
  102.    if(linea == ETIQUETA||linea == CODOP)
  103.    {
  104.        do
  105.        {
  106.            car = fgetc(fd);
  107.            lon++;
  108.        }while(car != '\t' && car != ' ');
  109.    }
  110.    else
  111.    {
  112.        while((car = fgetc(fd)) != '\n')
  113.           lon++;
  114.    }
  115.    cadena = calloc((lon+1));
  116.    fseek(fd,pos,SEEK_SET);
  117.    fgets(cadena,lon+1,fd);
  118.    return cadena;
  119. }
  120.  
  121. void erroresEtiqueta(char *etiqueta)
  122. {
  123.    int tam,i,caracterInvalido = 0;
  124.    tam = strlen(etiqueta);
  125.    if(tam-1 > LONG_ETIQUETA)
  126.       printf("\tError:la longitud maxima de una etiqueta es de ocho caracteres\n");
  127.    for(i = 0;(i < tam)&&(caracterInvalido);i++)
  128.    {
  129.        if((!esLetra(etiqueta,i))&&(!esNumero(etiqueta,i))&&(!etiqueta[i] == '_'))
  130.           caracterInvalido = 1;
  131.    }
  132.    if(caracterInvalido)
  133.       printf("Error:los caracteres validos en las etiquetas son letras, digitos(0..9) y el guion bajo\n");
  134. }
  135.  

el resto del codigo funciona bien, solo tengo problema con esa parte

gracias
Páginas: 1 2 3 4 5 6 7 8 9 [10] 11 12 13 14 15 16 17 18 19 20 21 22
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines