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

 

 


Tema destacado: Introducción a Git (Primera Parte)


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  Problema con una funcion para verificar si un elemento esta o no
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Problema con una funcion para verificar si un elemento esta o no  (Leído 758 veces)
palacio29

Desconectado Desconectado

Mensajes: 103


Ver Perfil
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.  


En línea

K-YreX
Moderador
***
Desconectado Desconectado

Mensajes: 846



Ver Perfil
Re: Problema con una funcion para verificar si un elemento esta o no
« Respuesta #1 en: 14 Junio 2019, 22:21 pm »

No he mirado el resto del programa pero te puedo adelantar que la línea 108 no es correcta. Un array no acaba cuando el siguiente elemento apunta a NULL, básicamente porque no apunta a NULL. Cuando pasas un array debes pasar su longitud en otro parámetro para saber hasta donde recorrerlo.


En línea

Código
  1. cout << "Todos tenemos un defecto, un error en nuestro código" << endl;
palacio29

Desconectado Desconectado

Mensajes: 103


Ver Perfil
Re: Problema con una funcion para verificar si un elemento esta o no
« Respuesta #2 en: 14 Junio 2019, 22:30 pm »

No he mirado el resto del programa pero te puedo adelantar que la línea 108 no es correcta. Un array no acaba cuando el siguiente elemento apunta a NULL, básicamente porque no apunta a NULL. Cuando pasas un array debes pasar su longitud en otro parámetro para saber hasta donde recorrerlo.

Muchas gracias, ahi funciono perfecto. Tenes razon, me equivoque y estaba pensando en listas con el puntero al siguiente.



Y si tengo que ordenar un arreglo dinamico y no se la longitud de ese arreglo dinamico...Hasta que punto tengo que recorrerlo?.
« Última modificación: 15 Junio 2019, 00:44 am por Eternal Idol » En línea

K-YreX
Moderador
***
Desconectado Desconectado

Mensajes: 846



Ver Perfil
Re: Problema con una funcion para verificar si un elemento esta o no
« Respuesta #3 en: 14 Junio 2019, 22:47 pm »

Y si tengo que ordenar un arreglo dinamico y no se la longitud de ese arreglo dinamico...Hasta que punto tengo que recorrerlo?.
Si creas un arreglo dinámico en algún sitio estás calculando el tamaño que debe tener... guarda esa longitud. En tu caso que vas incrementando en 1 el tamaño con <realloc()>, al final puedes saber también cuál es esa longitud. Mantenla de alguna forma (retorno o referencia). Para ello te recomendaría que la función reciba el nuevo array por referencia y devuelva la longitud de este como valor de retorno:
Código
  1. int CARGA(t_alumno arreglo1[], t_alumno arreglo2[], t_alumno *nuevo_arreglo[]);
El tamaño de la primera dimensión de un array no es necesario pasarlo a la función. También puedes hacerlo al revés:
Código
  1. t_alumno* CARGA(t_alumno arreglo1[], t_alumno arreglo2[], int *longitud_final);
En línea

Código
  1. cout << "Todos tenemos un defecto, un error en nuestro código" << endl;
Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
verificar Si Web Está Online
Programación Visual Basic
Rudy21 3 1,616 Último mensaje 5 Octubre 2008, 07:04 am
por seba123neo
Que pasos hacen para verificar si un archivo esta infectado o no?
Seguridad
$Edu$ 1 1,668 Último mensaje 31 Julio 2011, 01:18 am
por ‭lipman
Verificar argumentos de función[Python]
Scripting
S3kh 3 2,441 Último mensaje 20 Septiembre 2011, 02:26 am
por Novlucker
Problema con código para verificar usuario y contraseña
Java
MANUELGRAN 5 10,147 Último mensaje 19 Mayo 2013, 22:13 pm
por YairMon
Servicio online para verificar si tu cuenta de gmail está entre las robadas
Seguridad
r32 2 1,725 Último mensaje 27 Septiembre 2014, 01:54 am
por r32
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines