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

 

 


Tema destacado: Introducción a la Factorización De Semiprimos (RSA)


  Mostrar Temas
Páginas: 1 [2] 3 4 5 6
11  Programación / Programación C/C++ / Problema con arreglo dinamico de estructura en: 15 Junio 2019, 00:48 am
Tengo que hacer un programa en el cual recibo por funcion un arreglo estatico de estructura y una letra.
Luego, tengo que crear un arreglo dinamico de estructura en el cual tengo que guardar los datos del arreglo estatico en el cual el codigo que tenga sea igual al pasado por parametro.
Luego, tengo que guardarlo en orden ascendente e imprimirlo por pantalla.
El problema es que en un momento del programa, creo que el problema esta en el while que esta entre la linea 51 y 64.

Código
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #define T 3
  4. struct s_alumno
  5. {
  6.    int leg;
  7.    char*nombre;
  8.    unsigned char cod_car
  9. };
  10. typedef struct s_alumno t_alumno;
  11. t_alumno*filtrar(t_alumno[T],char cod_car);
  12. int main()
  13. {
  14.    t_alumno arreglo[T];
  15.    t_alumno*lista=NULL;
  16.    int i=0;
  17.    arreglo[0].leg=3;
  18.    arreglo[1].leg=4;
  19.    arreglo[2].leg=5;
  20.    arreglo[0].nombre="Claudio";
  21.    arreglo[1].nombre="Hernan";
  22.    arreglo[2].nombre="Pablo";
  23.    arreglo[0].cod_car='A';
  24.    arreglo[1].cod_car='B';
  25.    arreglo[2].cod_car='C';
  26.  
  27.    printf("Legajo: %d  - Nombre: %s - Codigo Carrera: %c\n",arreglo[0].leg,arreglo[0].nombre,arreglo[0].cod_car);
  28.    printf("Legajo: %d  - Nombre: %s - Codigo Carrera: %c\n",arreglo[1].leg,arreglo[1].nombre,arreglo[1].cod_car);
  29.    printf("Legajo: %d  - Nombre: %s - Codigo Carrera: %c\n",arreglo[2].leg,arreglo[2].nombre,arreglo[2].cod_car);
  30.  
  31.    lista=filtrar(arreglo,'B');
  32.  
  33.    while((lista+i)->leg!=0)
  34.    {
  35.        printf("Legajo: %d  - Nombre: %s - Codigo Carrera: %c\n",(lista+i)->leg,(lista+i)->nombre,(lista+i)->cod_car);
  36.        i++;
  37.    }
  38.  
  39.    return 0;
  40. }
  41. t_alumno*filtrar(t_alumno arreglo[T],char cod_car)
  42. {
  43.  
  44.    t_alumno*nuevo=NULL;
  45.    t_alumno aux;
  46.    nuevo=malloc(sizeof(struct s_alumno));
  47.    int i=0,j=0,k=0,maximo=0;
  48.    char codigo;
  49.  
  50.  
  51.    while(i<T)
  52.    {
  53.        if(arreglo[i].cod_car==cod_car)
  54.        {
  55.            (nuevo+k)->leg=arreglo[i].leg;
  56.            (nuevo+k)->cod_car=arreglo[i].cod_car;
  57.            strcpy((nuevo+k)->nombre,arreglo[i].nombre);
  58.            printf("Legajo: %d  - Nombre: %s - Codigo Carrera: %c\n",(nuevo+k)->leg,(nuevo+k)->nombre,(nuevo+k)->cod_car);
  59.            k++;
  60.            nuevo=realloc(nuevo,(1+k)*sizeof(struct s_alumno));
  61.        }
  62.        i++;
  63.    }
  64.    (nuevo+k)->leg=0;
  65.    printf("El legajo en el ultimo es %d",(nuevo+k)->leg);
  66.  
  67.            /// ORDENAR///
  68.            for(maximo=0;(nuevo+maximo)->leg!=0;maximo++);
  69.            printf("Maximo es %d",maximo);
  70.            for(i=1;i<maximo;i++)
  71.            {
  72.                for(j=0;j<maximo-1;j++)
  73.                {
  74.                    aux=*(nuevo+j);
  75.                    *(nuevo+j)=*(nuevo+j+1);
  76.                    *(nuevo+j+1)=aux;
  77.                }
  78.            }
  79.  
  80.  
  81.            return nuevo;
  82.  
  83. }
12  Programación / Programación C/C++ / Problema con una funcion para verificar si un elemento esta o no en: 14 Junio 2019, 21:52 pm
Tengo 2 arreglos de estructuras estaticos y tengo que crear un tercer arreglo de estructura de manera dinamica, que contenga los valores que no estan en ambos arreglos estaticos.
El problema me esta saliendo, el problema viene cuando quiero verificar para que no me pase ningun repetido.
Por eso cree la funcion esta que es una booleana, pero al poner esta funcion el programa se rompe.
No se en que le estoy pifiando.

Código
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #define T 4
  4. #define N 5
  5. struct s_alumno
  6. {
  7.    int numero;
  8. };
  9. typedef struct s_alumno t_alumno;
  10.  
  11. t_alumno* CARGA (t_alumno arreglo1[T],t_alumno arreglo2[N]);
  12. int esta(t_alumno*,int);
  13.  
  14. int main()
  15. {
  16.    int i=0;
  17.    t_alumno*liston=NULL;
  18.    t_alumno arreglo1[T];
  19.    t_alumno arreglo2[N];
  20.    arreglo1[0].numero=1;
  21.    arreglo1[1].numero=7;
  22.    arreglo1[2].numero=3;
  23.    arreglo1[3].numero=5;
  24.  
  25.    arreglo2[0].numero=2;
  26.    arreglo2[1].numero=8;
  27.    arreglo2[2].numero=5;
  28.    arreglo2[3].numero=9;
  29.    arreglo2[4].numero=7;
  30.  
  31.    printf("Conjunto A : %d - %d - %d - %d\n", arreglo1[0].numero,arreglo1[1].numero,arreglo1[2].numero,arreglo1[3].numero);
  32.    printf("Conjunto B : %d - %d - %d - %d - %d \n",arreglo2[0].numero,arreglo2[1].numero,arreglo2[2].numero,arreglo2[3].numero,arreglo2[4].numero);
  33.    liston=CARGA(arreglo1,arreglo2);
  34.    printf ("\nImprimimos Lista:\n");
  35.    while((liston+i)->numero!=0)
  36.    {
  37.        printf(" %d -",(liston+i)->numero);
  38.  
  39.        i++;
  40.    }
  41.  
  42.  
  43.    return 0;
  44. }
  45. t_alumno* CARGA(t_alumno arreglo1[T],t_alumno arreglo2[N])
  46. {
  47.    int i=0,j=0,k=0,maximo=0,bandera=1;
  48.  
  49.    t_alumno* lista=NULL;
  50.    lista=malloc(sizeof(struct s_alumno));
  51.  
  52.    for(i=0;i<T;i++)
  53.    {
  54.  
  55.        for(j=0;j<N;j++)
  56.        {
  57.            if(arreglo1[i].numero==arreglo2[j].numero)
  58.            {
  59.                bandera=0;
  60.            }
  61.        }
  62.        if(bandera==1)
  63.  
  64.        {
  65.                if(!esta(lista,arreglo1[i].numero))
  66.                {
  67.                    (lista+k)->numero=arreglo1[i].numero;
  68.                k++;
  69.                lista=realloc(lista,(1+k)*sizeof(struct s_alumno));
  70.                }
  71.  
  72.  
  73.  
  74.        }
  75.        bandera=1;
  76.    }
  77.  
  78.    /// Proceso Inverso
  79.  
  80.  
  81.    for(i=0;i<N;i++)
  82.    {
  83.        for (j=0;j<T;j++)
  84.        {
  85.            if(arreglo2[i].numero==arreglo1[j].numero)
  86.            {
  87.                bandera=0;
  88.            }
  89.        }
  90.            if(bandera==1)
  91.            {
  92.                (lista+k)->numero=arreglo2[i].numero;
  93.                k++;
  94.                lista=realloc(lista,(1+k)*sizeof(struct s_alumno));
  95.            }
  96.            bandera=1;
  97.    }
  98.  
  99.    (lista+k)->numero=0;
  100. return lista;
  101. }
  102.  
  103. int esta (t_alumno*lista ,int numero)
  104. {
  105.  
  106.  
  107.    int k=0;
  108.    while((lista+k)!=NULL)
  109.    {
  110.        if((lista+k)->numero==numero)
  111.        {
  112.            printf("%d - ",(lista+k)->numero);
  113.            return 1;
  114.        }
  115.        k++;
  116.  
  117.    }
  118.    return 0;
  119. }
  120.  
13  Programación / Programación C/C++ / Problema con funcion palindroma en forma recursiva en: 12 Junio 2019, 03:45 am
Hola

Tengo que hacer un ejercicio en el cual tengo que ir recorriendo un arreglo dinamico de caracteres en forma recursiva para saber si es palindromo o no.
La funcion recibe el arreglo dinamico y la longitud de la palabra.
Mi problema creo que es el IF, voy printeando lo que sucede y nose porque la funcion sigue mas alla de lo que yo querria...es decir..la idea es que corte cuando la longitud sea mayor a cero, y voy viendo que llega hasta el -5 y no se porque...hice el recorrido de la funcion en  papel, y tampoco encuentro el error..es como que sigue y no se porque


Código
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. int palindromo(char*arreglo,unsigned int longitud);
  4. int main()
  5. {
  6.    char*arreglo=NULL;
  7.    int r;
  8.    arreglo=malloc(sizeof(500));
  9.    arreglo="ana";
  10.    printf("%s",arreglo);
  11.    r=palindromo(arreglo,3);
  12.    printf("\nEl valor es %d",r);
  13.    return 0;
  14. }
  15.  
  16. int palindromo(char*arreglo,unsigned int longitud)
  17. {
  18.    printf("Longitud: %d",longitud);
  19.    if(longitud>0)
  20.    {
  21.        printf("La letra del arreglo es: %c - La letra a comparar al final es: %c - La longitud es: %d \n",*(arreglo),*(arreglo+longitud-1),longitud);
  22.        if((*arreglo)==(*(arreglo+longitud-1)))
  23.        {
  24.  
  25.            return palindromo(arreglo+1,longitud-2);
  26.        }
  27.        else
  28.        {
  29.            return 0;
  30.        }
  31.    }
  32.    else
  33.    {
  34.     return 1;
  35.    }
  36.  
  37. }
14  Programación / Programación C/C++ / (Consulta) Problema con un arreglo dinamico en: 31 Mayo 2019, 01:04 am
Tengo el siguiente ejercicio que no se que es lo que esta fallando.  :huh:
Tengo una estructura  en la cual tengo:

- Una variable int que carga el legajo de un alumno (un numero cualquiera)
- Un puntero char, en donde se va a guardar el nombre del alumno (Ejemplo Juan)
- Un unsigned char en donde se guarda el codigo de una materia. (Ejemplo CATEGORIA B).

En el main lo que hago es cargar un arreglo estatico de esta estructura.
Lo que tengo que hacer con la funcion filtrar es crear un arreglo dinamico que cree e incluya los valores del arreglo estatico que tengan la categoria B.
No se cual es el error, pensaba que era algo de memoria dinamica que estaba fallando, pero puse una memoria grande e igualmente el programa falla.

Código
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <conio.h>
  4. #define T 3
  5. struct s_alumno
  6. {
  7.    unsigned int leg;
  8.    char*nombre;
  9.    unsigned char cod_car;
  10. };
  11. typedef struct s_alumno t_alumno;
  12. t_alumno* filtrar(t_alumno arr[T],char cod_car);
  13. void IMPRIMIR(t_alumno*);
  14.  
  15. int main()
  16. {
  17.    t_alumno arr[T];
  18.    int i=0;
  19.    char letra;
  20.    t_alumno* listado=NULL;
  21.    arr[0].nombre="Fabian";
  22.    arr[1].nombre="Pablo";
  23.    arr[2].nombre="Manuel";
  24.    while(i<T)
  25.    {
  26.        printf("\nCARGAR NUMERO LEGAJO:\n ");
  27.        scanf("%d",&arr[i].leg);
  28.        printf("CARGAR CODIGO CARRERA\n");
  29.        letra=getche();
  30.        arr[i].cod_car=letra;
  31.        i++;
  32.    }
  33.    printf("\n");
  34.    printf("El nombre cargado es %s - CODIGO DE CARRERA: %c\n",arr[0].nombre,arr[0].cod_car);
  35.    printf("El nombre cargado es %s - CODIGO DE CARRERA: %c\n",arr[1].nombre,arr[1].cod_car);
  36.    printf("El nombre cargado es %s - CODIGO DE CARRERA: %c\n",arr[2].nombre,arr[2].cod_car);
  37.    listado=filtrar(arr,'B');
  38.    IMPRIMIR(listado);
  39.  
  40.    return 0;
  41. }
  42.  
  43.  
  44. t_alumno* filtrar(t_alumno arr[T],char cod_car)
  45. {
  46.    int i=0,j=0,fin=0;
  47.    t_alumno*lista=NULL;
  48.    lista=malloc(sizeof(struct s_alumno));
  49.    while(i<T)
  50.    {
  51.        if((cod_car)==arr[i].cod_car)
  52.        {
  53.            (lista+j)->leg=arr[i].leg;
  54.            strcpy((lista+j)->nombre,arr[i].nombre);
  55.            (lista+j)->cod_car=arr[i].cod_car;
  56.            j++;
  57.           lista=realloc(lista,(j+1)*sizeof(struct s_alumno));
  58.        }
  59.        i++;
  60.    }
  61.    (lista+j)->leg=0;
  62.    printf("\nTERMINO EL FILTRADO\n");
  63.    return lista;
  64.  
  65. }
  66.  
  67. void IMPRIMIR(t_alumno* listado)
  68.  
  69. {
  70. int i=0;
  71. printf ("\nIMPRESION DEL ARREGLO\n");
  72. while(listado[i].leg!=0)
  73. {
  74.     printf("NOMBRE: %s - CODIGO DE CARREA: %c\n",(listado+i)->nombre,(listado+i)->cod_car);
  75.     i++;
  76. }
  77. }
  78.  
15  Programación / Programación C/C++ / (Consulta) - Minimo de un arreglo dinamico en: 28 Mayo 2019, 01:28 am
Hola.
Tengo el siguiente codigo para que me de el minimo de un arreglo dinamico.
Mi consulta es, si hay alguna forma mas simple de hacerlo, ya que para usar esto, tendria que mandarle desde el main 2 veces el arreglo para que compare...


Código
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <time.h>
  4. #define N 5
  5. int * minArrHeap(int *, int *);
  6.  
  7. int main()
  8. {
  9.    int * arrHeap, i;
  10.    arrHeap=malloc(N*sizeof(int));
  11.    srand(time(NULL));
  12.    for(i=0; i<N-1; i++)
  13.    {
  14.        arrHeap[i]=rand()%9+1;
  15.    }
  16.    arrHeap[i]=0;
  17.    printf("Arreglo al azar: \n");
  18.    for(i=0; i<N; i++)
  19.    {
  20.        printf("%d ", arrHeap[i]);
  21.    }
  22.    printf("\n\nMinimo: %d direccion:%p \n\n", *minArrHeap(arrHeap, arrHeap),  dirMinArrHeap(arrHeap, arrHeap));
  23.  
  24.    return 0;
  25. }
  26.  
  27. int * minArrHeap(int * ptr, int *min)
  28. {
  29.    if(*ptr==0)
  30.    return min;
  31.    if(*ptr<*min)
  32.    minArrHeap(ptr+1, ptr);
  33.    else
  34.    minArrHeap(ptr+1, min);
  35. }
16  Programación / Programación C/C++ / No encuentro el error en este programa - Structs + Punteros en: 18 Mayo 2019, 20:04 pm
Código
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <conio.h>
  4. struct s_texto
  5. {
  6.    char*txt;
  7.    unsigned int longitud;
  8.  
  9. };
  10. typedef struct s_texto t_texto;
  11.  
  12. t_texto* CARGARTEXTO();
  13. char* CARGASTRING();
  14. void escribirarch(const char* nomArch,t_texto*);
  15.  
  16. int main()
  17. {
  18. escribirarch("frases_con_longitud.csv",CARGARTEXTO());
  19.  
  20.  
  21.    return 0;
  22. }
  23. t_texto* CARGARTEXTO()
  24. {
  25.  
  26.    t_texto kiko;
  27.    kiko.txt=CARGASTRING();
  28.    printf("\n%s\n",kiko.txt);
  29.    return &kiko;
  30. }
  31. char*CARGASTRING()
  32. {
  33.  
  34.    char*texto=NULL;
  35.    char letra;
  36.    int i=0;
  37.    texto=malloc(sizeof(char));
  38.    letra=getche();
  39.    while(letra!='\r')
  40.    {
  41.        *(texto+i)=letra;
  42.        i++;
  43.        texto=realloc(texto,((i+1)*sizeof(char)));
  44.        letra=getche();
  45.    }
  46.    *(texto+i)='\0';
  47.    return texto;
  48. }
  49.  
  50. void escribirarch(const char* nomArch,t_texto* kiko)
  51. {
  52.  
  53.    FILE*arch=NULL;
  54.    printf("Llegue");
  55.    printf("%s",kiko.txt);
  56.    arch=fopen(nomArch,"w");
  57.    fprintf(arch,"%d",5);
  58.    printf("%d",longitud(kiko));
  59.    fclose(arch);
  60. }

Lo que tengo que hacer es cargar la estructura con un texto y la longitud de un texto y eso mandarlo a un archivo de texto
Dentro de la estructura hay un puntero.
Mi problema es en la linea 55. No se como hacer que imprima la frase.
Al intentar mandarlo por archivo, no manda nada...justamente porque hay intentar llamar a la frase para que se ponga ahi, me da error.
17  Programación / Programación C/C++ / Consulta sobre punteros y doble punteros en: 17 Mayo 2019, 16:35 pm
Tengo una consulta con el siguiente codigo:

Entiendo que cuando pongo char*Str=NULL lo que estoy declarando es un puntero cuyo contenido es NULL.
Lo que no entiendo es cuando str= CARGA().
No entiendo muy bien es  como funciona la siguiente linea "str=CARGA();".
Que es lo que hace esta funcion?.
Entiendo que hace que str= direccion de memoria del otro puntero.
Pero si estoy haciendo eso...no deberia poner *str=CARGA() para que el contenido de mi puntero str sea la direccion de esa memoria?.
Osea que es lo que se guarda en el contenido de STR? y porque con un simple %s sale la frase cuando deberia poner un asterisco?..

Código
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. char*CARGA();
  4. void CARGA2(char**);
  5. int main()
  6. {
  7.    char *str=NULL;
  8.    str=CARGA();
  9.    CARGA2(&str);
  10.    printf("\n%s",str);
  11.    return 0;
  12. }
  13. char*CARGA()
  14. {
  15.    char*texto=NULL;
  16.    int i=0;
  17.    char letra;
  18.    texto=malloc(sizeof(char));
  19.    letra=getche();
  20.    while(letra!='\r')
  21.    {
  22.  
  23.        *(texto+i)=letra;
  24.        i++;
  25.        texto=realloc(texto,(i+1)*sizeof(char));
  26.        letra=getche();
  27.    }
  28.    *(texto+i)='\0';
  29.    return texto;
  30. }
  31.  
18  Programación / Programación C/C++ / (Consulta) - Declaracion de punteros en Null en: 16 Mayo 2019, 03:14 am
[LENGUAJE C] Tengo la siguiente sentencia y nose como interpretarla.

Char * Arreglo = NULL;

Que significa esto?.
Que el contenido de este arreglo es vacio  y como es la direccion de memoria de esa variable?.Porque hago un %p y salen todos ceros...
19  Programación / Programación C/C++ / Error cargando una estructura con puntero? en: 28 Abril 2019, 05:03 am
Tengo el siguiente codigo

Código
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. typedef struct
  4. {
  5.    int n,o,p;
  6.    char p1[26],p2[50];
  7.    double a,b,c;
  8.  
  9. }
  10. t_varios;
  11. void CARGA(t_varios* a,t_varios* b);
  12. int main()
  13. {
  14.    t_varios a,b;
  15.    CARGA(&a,&b);
  16.  
  17.    return 0;
  18. }
  19.  
  20. void CARGA(t_varios* a,t_varios* b)
  21. {
  22.    scanf("%d%d%d",a.n,a.p,a.o);
  23.  
  24. }

Basicamente lo que hago es declarar dos variables de mi estructura en el main, pasarlas como puntero a la funcion y desde esa funcion quiero cargar esas estructuras.
El problema es que no se como usar el scanf...si estoy recibiendo punteros, no seria necesario que ponga el & en el scanf pero igual me da error, pongo entonces el & y da error...ya por poner algo puse * tambien y tampoco...nose como cargarla.
Alguna ayudita?
20  Programación / Programación C/C++ / Porque es posible realizar esta operacion en C? en: 20 Febrero 2017, 00:49 am
Tengo el siguiente codigo

Código
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3.  
  4. int main()
  5. {
  6.  
  7. char d='7';
  8.  
  9.  
  10. printf("%d%d",(((d-'0')*2)/10),(((d-'0')*2)%10));
  11.  
  12.    return 0;
  13. }
  14.  


Lo que no entiendo es porque es posible realizar operaciones matematicas si es que el 7 ingresado no es un numero, si no que es el caracter 7 y esta ingresado como char...Creo que me falta algo de concepto para entenderlo.
Páginas: 1 [2] 3 4 5 6
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines