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

 

 


Tema destacado: Únete al Grupo Steam elhacker.NET


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  Error Ejercicio de Arreglo Dinamico
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Error Ejercicio de Arreglo Dinamico  (Leído 1,437 veces)
palacio29

Desconectado Desconectado

Mensajes: 103


Ver Perfil
Error Ejercicio de Arreglo Dinamico
« en: 21 Octubre 2016, 20:09 pm »

Hola

Tengo el siguiente ejercicio:

Desarrollar una funcion ordenarArr que reciba como parámetro un arreglo dinámico del tipo t_persona.
La función deberá ordenar el arreglo por número de categoría en forma descendente. El números de categoría
se encuentra dentro del unsigned char cat en los cuatro bit mas significativos (los de la izquierda).
El prototipo de la función que deberá utilizar es:

void ordenarArr(t_persona* arr);


Lo que hice fue lo siguiente

Código
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <conio.h>
  4.  
  5. ///Estructura
  6.  
  7. struct s_persona
  8. {
  9.    long int dni;
  10.    unsigned char cat;
  11.    char *nombre;
  12. };
  13. typedef struct s_persona t_persona;
  14.  
  15. void ordenarArr(t_persona* arr);
  16. int categoria(unsigned char);
  17. void imprimirArr(t_persona*);
  18.  
  19. int main()
  20. {
  21.    t_persona *arreglo=NULL;
  22.  
  23.    arreglo=malloc(4*sizeof(t_persona));
  24.  
  25.    (arreglo)->dni=746;
  26.    (arreglo)->cat='j';
  27.    (arreglo)->nombre="Marisol";
  28.  
  29.    (arreglo+1)->dni=159;
  30.    (arreglo+1)->cat='f';
  31.    (arreglo+1)->nombre="Juan Martin";
  32.  
  33.    (arreglo+2)->dni=691;
  34.    (arreglo+2)->cat='z';
  35.    (arreglo+2)->nombre="Griselda";
  36.  
  37.    (arreglo+3)->dni=489;
  38.    (arreglo+3)->cat='e';
  39.    (arreglo+3)->nombre="Romeo";
  40.  
  41.    imprimirArr(arreglo);
  42.  
  43.    ordenarArr(arreglo);
  44.  
  45.    imprimirArr(arreglo);
  46.  
  47.    return 0;
  48. }
  49.  
  50. void imprimirArr(t_persona* arreglo)
  51. {
  52.    int i;
  53.    printf("\nImpresion:\n");
  54.    for(i=0;i<4;i++)
  55.    {
  56.        printf("\nDNI = %li",(arreglo+i)->dni);
  57.        printf("\nCat = %c - %d",(arreglo+i)->cat,(arreglo+i)->cat);
  58.        printf("\nNombre = %s",(arreglo+i)->nombre);
  59.        printf("\n\n");
  60.    }
  61. }
  62.  
  63. ///FUNCION QUE ME PIDEN
  64.  
  65.  
  66. void ordenarArr(t_persona* arr)
  67. {
  68.    int i,j;
  69.    t_persona aux;
  70.    for(i=0;(arr+i)->dni!=0;i++)
  71.    {
  72.        for(j=i+1;(arr+j)->dni!=0;j++)
  73.        {
  74.            if(((((arr+i)->cat)>>4)&15)<((((arr+j)->cat)>>4)&15))
  75.            {
  76.                aux=*(arr+i);
  77.                *(arr+i)=*(arr+j);
  78.                *(arr+j)=aux;
  79.            }
  80.        }
  81.    }
  82. }


El problema es que hace cualquier cosa menos ordenar y tira error de ejecucion. Nose que hacer.


En línea

MAFUS


Desconectado Desconectado

Mensajes: 1.603



Ver Perfil
Re: Error Ejercicio de Arreglo Dinamico
« Respuesta #1 en: 21 Octubre 2016, 20:49 pm »

Te falla porqué no puedes hacer (arr+i)->dni!=0 y (arr+j)->dni!=0para controlar el bucle de ordenarArr, básicamente porqué lo has llenado de datos y ninguno de ellos es la condición de parada. Deberías usar la misma condición de parada que las otras funciones: contar mientras que i y j sean menores a 4.

Te faltó, en tu línea tu printf de la línea 57, desplazar 4 bits a la derecha para ver el código usado para ordenar, por eso no ves los datos ordenados:
Código
  1. printf("\nCat = %c - %d",(arreglo+i)->cat,(arreglo+i)->cat>>4);



En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Arreglo Dinamico con Objetos :S
Java
Xephiro 9 14,142 Último mensaje 6 Marzo 2009, 20:20 pm
por juancho77
Problema Con Un Arreglo Dinamico De Estructuras [?]
Programación C/C++
Omar_2013 2 2,483 Último mensaje 2 Septiembre 2013, 19:21 pm
por Omar_2013
Asignar Mas Memoria A Un Arreglo Dinamico
Programación C/C++
Omar_2013 4 2,728 Último mensaje 2 Septiembre 2013, 23:26 pm
por Omar_2013
Problema Con Un Arreglo Dinamico [?]
Programación C/C++
Omar_2013 4 2,581 Último mensaje 16 Octubre 2013, 23:35 pm
por Eternal Idol
Arreglo dinamico string
Programación C/C++
leopaez 3 4,753 Último mensaje 10 Diciembre 2016, 21:43 pm
por engel lex
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines