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

 

 


Tema destacado: Recopilación Tutoriales y Manuales Hacking, Seguridad, Privacidad, Hardware, etc


  Mostrar Mensajes
Páginas: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 [16] 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 ... 40
151  Programación / Programación C/C++ / Re: uso de strcat en: 22 Diciembre 2013, 16:18 pm
muchas rir3760 ya le cambie el malloc por el calloc para que se inicialice sin basura, una última duda, como en el codigo primero le pido el valor de car y despues le hago un "cast" con sprintf para que sea una cadena, no seria mejor si simplemente  quitar el sscanf y el sprintf, me quedo con el fgets y despues se lo concateno a con strcat, porque como tiene que ser tipo cadena creo que el sprintf y el sscanf están de más

Código
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <string.h>
  4.  
  5. int main()
  6. {
  7.    int i = 0;
  8.    char *cadena = NULL,buffer[5];
  9.    cadena = calloc(5+1);
  10.    while(i < 5)
  11.    {
  12.        printf("Dame car\n");
  13.        fgets(buffer,5,stdin);
  14.        strcat(cadena,buffer);
  15.        i++;
  16.    }
  17.    printf("%s",cadena);
  18.    return 0;
  19. }

gracias
152  Programación / Programación C/C++ / Re: uso de strcat en: 21 Diciembre 2013, 20:27 pm
ya vi que mi error era en que no le habia asignado memoria a la cadena, pero ahora por ejemplo si le ingreso las letras a, b, c, d, e. cuando le pido que imprima ya la cadena completa me imprime con basura #Wqabcde,

Código
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <string.h>
  4.  
  5. int main()
  6. {
  7.    int i = 0;
  8.    char *cadena = NULL,buffer[5],car;
  9.    cadena = malloc(5);
  10.    while(i < 5)
  11.    {
  12.        printf("Dame car\n");
  13.        fgets(buffer,5,stdin);
  14.        sscanf(buffer,"%c",&car);
  15.        sprintf(buffer,"%c",car);
  16.        strcat(cadena,buffer);
  17.        i++;
  18.    }
  19.    printf("\n%s",cadena);
  20.    return 0;
  21. }

153  Programación / Programación C/C++ / uso de strcat en: 21 Diciembre 2013, 03:13 am
Saludos, tengo una duda sobre el uso de la función strcat.

si yo tengo una cadena inicializada en NULL, *cadena = NULL, y con un ciclo while quiero ir agregadole caracter por caracter podria hacer esto con el strcat que me vaya concatenando al final de la cadena caracter por caracter??

algo como asi:

Código
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <string.h>
  4.  
  5. int main()
  6. {
  7.    int i = 0;
  8.    char *cadena = NULL,c[5],car;
  9.    while(i < 5)
  10.    {
  11.        printf("Dame car\n");
  12.        fgets(c,5,stdin);
  13.        sscanf(c,"%c",&car);
  14.        strcat(cadena,car);
  15.        i++;
  16.    }
  17.    return 0;
  18. }

es que el codigo no funciona y creo que es por el strcat

gracias
154  Programación / Programación General / Singleton variables prolog en: 15 Diciembre 2013, 19:34 pm
Saludos, estoy haciendo mi primer programa en Prolog, es un simple árbol genealógico pero me aparece un warning que dice singleton variables[C,D] y no se que significa esto

los hechos del programa son del tipo padre(-,-) y madre(-,-).
hermanos(A,B):-padre(C,A),padre(C,B);madre(D,A),madre(D,B).
abuelo(E,A):-padre(E,padre(C,A)),padre(E,madre(D,A)).

?-abuelo(daniel,maria).

de antemano gracias
155  Programación / Programación C/C++ / Re: Diseño de Ensamblador en: 12 Diciembre 2013, 17:42 pm
jaja cierto no me fije bien, ahora ya estoy empezando a hacer de nuevo el código como me dijiste con la primera opción, pero tengo una duda, por ejemplo si tengo una línea que es un comentario

;comentario numero1

y las instrucciones me dicen:
Las líneas de comentarios tienen las siguientes reglas:
a. empiezan con el caracter ;
b. ese caracter solo se puede encontrar en la primera posicion
c. Después del carácter ; puede seguir cualquier caracter, letras,digitos,etc..

pero si tengo la función de verificación asi:

Código
  1. int esComentario(FILE *fd)
  2. {
  3.    int car,continuar = 1;
  4.    while((car = fgetc(fd))!= '\n')
  5.    {
  6.        if(car == ';')
  7.           return 0;
  8.    }
  9.    return 1;
  10. }

el programa no me va a recorrer todo la línea de código en caso de que se encuentre un ; intermedio y me returne inmediatamente que no es comentario, pero como le puedo hacer para que me lea todaaa la línea y que no solo se regrese con el return en los casos en que no es línea de comentario?? esto lo quiero hacer para que me vaya leyendo línea por línea desde el principio y para esto el while tiene que hacer completo el ciclo hasta que se encuentre el '\n'

gracias de nuevo
156  Programación / Programación C/C++ / Re: Diseño de Ensamblador en: 11 Diciembre 2013, 19:12 pm
muchas gracias amchacon yo creo que si voy a intentar hacerlo de la primera manera, solo que como en las especificaciones del programa venia que tengo que verificar si la línea es comentario, ETIQUETA, CODIGO DE OPERACION Y OPERANDOS. y para cada uno son como 6 especificaciones pense que seria más fácil si lo guardaba en una estructura, de la segunda manera ya vi cual era mi problema y lo corregi solo que me queda una duda:

Código
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #define MAX 100
  4.  
  5. void verificarLineas(FILE *fd,int buffer[],int renglon);
  6.  
  7. int main()
  8. {
  9.    FILE *fd;
  10.    int car,tam,renglon = 0,buffer[MAX];
  11.    if((fd = fopen("P1ASM.txt","r"))!= NULL)
  12.    {
  13.        while((car = fgetc(fd))!= EOF)
  14.        {
  15.            tam = 0;
  16.            fseek(fd,-1,SEEK_CUR);
  17.            while((car = fgetc(fd))!= '\n'&&(!feof(fd)))
  18.            {
  19.                tam++;
  20.                printf("%c",car);
  21.            }
  22.            printf("\n");
  23.            buffer[renglon++] = tam;
  24.        }
  25.        verificarLineas(fd,buffer,renglon);
  26.    }
  27.    else
  28.       printf("No se pudo abrir el archivo");
  29.    return 0;
  30. }
  31.  
  32. void verificarLineas(FILE *fd,int buffer[],int renglon)
  33. {
  34.    int i = 0,lon;
  35.    char *linea;
  36.    fseek(fd,0,SEEK_SET);
  37.    printf("\n");
  38.    while(!feof(fd))
  39.    {
  40.        lon = buffer[i]+1;//tamaño de buffer mas el salto de linea
  41.        linea = (char*)malloc((lon+1)*sizeof(char));//lon mas el caracter '\0'
  42.        fgets(linea,lon,fd);
  43.        printf("%s",linea);
  44.        free(linea);
  45.        i++;
  46.    }
  47. }

de esta manera me imprime algunas  lineas con basura pero si esta linea de codigo la cambio y le pongo lon+1, ya me imprime correctamente, por que es esto??

Código
  1. lon = buffer[i]+1;//tamaño de buffer mas el salto de linea
  2.        linea = (char*)malloc((lon+1)*sizeof(char));//lon mas el caracter '\0'
  3.        fgets(linea,lon+1,fd);
  4.        printf("%s",linea);
  5.        free(linea);
  6.        i++;
157  Programación / Programación C/C++ / Re: Diseño de Ensamblador en: 11 Diciembre 2013, 02:34 am
 :o nunca se me hubiera ocurrido hacerlo de esa manera, de hecho no sabía ni que era un stringstream y tampoco había visto las funciones rdbuf()... yo pense que iba a ser más fácil la implementación de la segunda opción, ir leyendo el archivo linea por linea e ir guardando en un buffer el tamaño(num de caracteres) de cada línea del archivo, y despues volver a leer el archivo pero esta vez dando brincos del tamaño de cada línea con el fseek(),para guardalos en otro buffer,pero el problema es que en la segunda función se cicla y no me hace lo que le pido, no entiendo por qué??

Código
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #define MAX 100
  4.  
  5. void verificarLineas(FILE *fd,int buffer[],int renglon);
  6.  
  7. int main()
  8. {
  9.    FILE *fd;
  10.    int car,tam,renglon = 0,buffer[MAX];
  11.    if((fd = fopen("P1ASM.txt","r"))!= NULL)
  12.    {
  13.        while((car = fgetc(fd))!= EOF)
  14.        {
  15.            tam = 0;
  16.            fseek(fd,-1,SEEK_CUR);
  17.            while((car = fgetc(fd))!= '\n'&&(!feof(fd)))
  18.            {
  19.                tam++;
  20.                printf("%c",car);
  21.            }
  22.            printf("*%d\n",tam+1);
  23.            buffer[renglon++] = tam;
  24.        }
  25.        verificarLineas(fd,buffer,renglon);
  26.    }
  27.    else
  28.       printf("No se pudo abrir el archivo");
  29.    return 0;
  30. }
  31.  
  32. void verificarLineas(FILE *fd,int buffer[],int renglon)
  33. {
  34.    int i = 0;
  35.    char *linea;
  36.    fseek(fd,0,SEEK_SET);
  37.    while(!feof(fd))
  38.    {
  39.        linea = (char*)malloc(buffer[i]*sizeof(char));
  40.        fgets(linea,buffer[i]+1,fd);
  41.        printf("%s\n",linea);
  42.        fseek(fd,buffer[i]+1,SEEK_CUR);
  43.        free(linea);
  44.        i++;
  45.    }
  46. }
  47.  

gracias
158  Programación / Programación C/C++ / Re: Diseño de Ensamblador en: 10 Diciembre 2013, 02:03 am
Muchas gracias amchacon por tu respuesta, otra duda:

en la segunda opción me dice que lea todo el archivo en un solo ciclo, y que lo guarde  en una estructura, ¿con esto se refiere a que ya no voy a leer el archivo línea por línea?, o sea voy a tener que almacenar el archivo completo en la estructura y en la primera opción trabajo línea con línea sin almacenar nada?

Es que yo pensé que la mejor opción sería ir guardando línea por línea en un arreglo, y después hacer las validaciones de las palabras que están en los arreglos.

de antemano gracias
159  Programación / Programación C/C++ / Diseño de Ensamblador en: 9 Diciembre 2013, 16:56 pm
Saludos

tengo que crear un programa que identifique las partes de una línea en lenguaje ensamblador, y para esto me dicen que necesito tener un archivo de texto creado previamente y

Leer línea a línea el archivo, pudiendo:
a. Leer cada línea directamente del archivo, de una por una y procesar cada línea que se va leyendo.
b. Leer todo el archivo con un ciclo y conforme se lee el archivo almacenarlo en una estructura de datos temporal, posteriormente leer de esta estructura de datos

Me dice que en ambos casos hay ventajas y desventajas. Deberás elegir la que sea más conveniente, recuerda que el  programa debe de irse completando con las siguientes practicas.

¿cuales son estas ventajas y desventajas?,¿Cuál de estas opciones es la mejor y la más fácil de implementar?, No quiero que me hagan la tarea solo que me den una ligera idea de como seria

gracias
160  Programación / Programación C/C++ / Re: basura en mi programa en: 9 Diciembre 2013, 16:50 pm
Ya pude hacer que el código me hiciera lo que le pido, sólo que en la función de ingresar dato en vez de ponerle un switch lo hice con if's, no se cuál de los dos será mejor o más eficiente,pero funciona

Código
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #define TAM 5
  4. #define ARITMETICA_SIMPLE 1
  5. #define ARITMETICA_BINARIA 2
  6. #define FACTORIAL 3
  7. #define TABLA_MULTIPLICAR 4
  8. #define SALIR 5
  9.  
  10. enum tipo{INT,CHAR};
  11. void ingresarDato(void *dato,int tipo);
  12.  
  13. int main()
  14. {
  15.    //Variables de uso interno del programa
  16.    int continuar = 1,i,factorial = 1;
  17.    //Variables para entrada de datos
  18.    int opcion,numero1,numero2,numero_factorial,multiplicando,multiplicador;
  19.    char operador;
  20.    do
  21.    {
  22.        //Menu principal
  23.        printf("CALCULADORA v1.0\n\n");
  24.        printf("Elige una de las siguientes opciones:\n");
  25.        printf("1. Aritmetica simple con suma de enteros a+b\n");
  26.        printf("2. Aritmetica extendida binaria\n");
  27.        printf("3. Factorial de n (n!)\n");
  28.        printf("4. Detallar una tabla de multiplicar\n");
  29.        printf("5. Salir\n");
  30.        printf("Opcion a elegir? ");
  31.        ingresarDato(&opcion,INT);
  32.        switch(opcion)
  33.        {
  34.            //Aritmetica simple con suma de enteros a+b
  35.            case ARITMETICA_SIMPLE:
  36.               printf("Dame el valor de a = ");
  37.               ingresarDato(&numero1,INT);
  38.               printf("Dame el valor de b = ");
  39.               ingresarDato(&numero2,INT);
  40.               printf("%d + %d = %d",numero1,numero2,numero1+numero2);
  41.               break;
  42.            //Aritmetica extendida binaria (+,-,*,/,%modulo)
  43.            case ARITMETICA_BINARIA:
  44.               printf("Escribe el operador (+,-,*,/,%%): ");
  45.               ingresarDato(&operador,CHAR);
  46.               printf("\nDame el valor de a = ");
  47.               ingresarDato(&numero1,INT);
  48.               printf("Dame el valor de b = ");
  49.               ingresarDato(&numero2,INT);
  50.               switch(operador)
  51.               {
  52.                   case '+':
  53.                      printf("%d %c %d = %d\n",numero1,operador,numero2,numero1+numero2);
  54.                      break;
  55.                   case '-':
  56.                      printf("%d %c %d = %d\n",numero1,operador,numero2,numero1-numero2);
  57.                      break;
  58.                   case '*':
  59.                      printf("%d %c %d = %d\n",numero1,operador,numero2,numero1*numero2);
  60.                      break;
  61.                   case '/':
  62.                      printf("%d %c %d = %d\n",numero1,operador,numero2,numero1/numero2);
  63.                      break;
  64.                   case '%':
  65.                      printf("%d %c %d = %d\n",numero1,operador,numero2,numero1%numero2);
  66.                      break;
  67.                   default:
  68.                      printf("No hay un resultado calculable\n");
  69.                      printf("%d %c %d = 0\n",numero1,operador,numero2);
  70.               }
  71.               break;
  72.            //Factorial de n (n!)
  73.            case FACTORIAL:
  74.               printf("Dame el valor de n = ");
  75.               ingresarDato(&numero_factorial,INT);
  76.               if(numero_factorial < 0)
  77.                  printf("El factorial de %d no esta definido\n",numero_factorial);
  78.               else if(numero_factorial == 0)
  79.                  printf("El factorial de 0 es 1\n");
  80.               else
  81.               {
  82.                   for(i = numero_factorial;i > 0;i--)
  83.                      factorial*=i;
  84.                   printf("El factorial de %d es %d\n",numero_factorial,factorial);
  85.               }
  86.               break;
  87.            //Detallar una tabla de multiplicar
  88.            case TABLA_MULTIPLICAR:
  89.               printf("Dame el multiplicando i = ");
  90.               ingresarDato(&multiplicando,INT);
  91.               printf("Dame hasta cual multiplicador n= ");
  92.               ingresarDato(&multiplicador,INT);
  93.               printf("Tabla de multiplicar del %d\n",multiplicador);
  94.               i = 1;
  95.               while(i <= multiplicador)
  96.               {
  97.                   printf("%d\tX\t%d\t=\t%d\n",multiplicando,i,multiplicando*i);
  98.                   i++;
  99.               }
  100.               break;
  101.            //Salida del programa
  102.            case SALIR:
  103.               continuar = 0;
  104.               break;
  105.            default:
  106.               printf("Opcion no valida!\n");
  107.        }
  108.        if(continuar)
  109.           system("pause");
  110.    }while(continuar);
  111.    return 0;
  112. }
  113.  
  114. void ingresarDato(void *dato,int tipo)
  115. {
  116.    char buffer[TAM];
  117.    fgets(buffer,sizeof(buffer),stdin);
  118.    if(tipo == INT)
  119.       sscanf(buffer,"%d",dato);
  120.    else if(tipo == CHAR)
  121.       sscanf(buffer,"%c",dato);
  122. }
  123.  

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 23 24 25 26 27 28 29 30 31 ... 40
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines