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
#include <stdio.h> #include <stdlib.h> #include <conio.h> ///Estructura struct s_persona { long int dni; unsigned char cat; char *nombre; }; typedef struct s_persona t_persona; void ordenarArr(t_persona* arr); int categoria(unsigned char); void imprimirArr(t_persona*); int main() { t_persona *arreglo=NULL; (arreglo)->dni=746; (arreglo)->cat='j'; (arreglo)->nombre="Marisol"; (arreglo+1)->dni=159; (arreglo+1)->cat='f'; (arreglo+1)->nombre="Juan Martin"; (arreglo+2)->dni=691; (arreglo+2)->cat='z'; (arreglo+2)->nombre="Griselda"; (arreglo+3)->dni=489; (arreglo+3)->cat='e'; (arreglo+3)->nombre="Romeo"; imprimirArr(arreglo); ordenarArr(arreglo); imprimirArr(arreglo); return 0; } void imprimirArr(t_persona* arreglo) { int i; for(i=0;i<4;i++) { } } ///FUNCION QUE ME PIDEN void ordenarArr(t_persona* arr) { int i,j; t_persona aux; for(i=0;(arr+i)->dni!=0;i++) { for(j=i+1;(arr+j)->dni!=0;j++) { if(((((arr+i)->cat)>>4)&15)<((((arr+j)->cat)>>4)&15)) { aux=*(arr+i); *(arr+i)=*(arr+j); *(arr+j)=aux; } } } }
El problema es que hace cualquier cosa menos ordenar y tira error de ejecucion. Nose que hacer.