En el programa que hice, le falta hacer una macro para "poner" lo que marque en la función main. De paso puse el enunciado completo, por si ven alguna irregularidad o algo mal, aparte de no saber como tendría que trabajar con la macro y los ports. Desde ya muchas gracias.
Código C:
Ver original
/* ENUNCIADO: Se desea realizar una estadistica con los 200 alumnos de la carrera ingenieria electrónica de la facultad. Para ello inicialmente se debera cargar una base de datos con los siguientes datos: Nombre(cadena de 30 caracteres), legajo(entero entre 0 y 250) edad,sexo. Por los puertos 0x300 y 0x301 vendran los datos con la siguente estructura.. Los datos seran validos cuando el bit S cambie de 0 a 1. Asimismo en el puerto 0x400 se encontrara el legajo del alumno cuya nota se informa; Se solicita realizar la carga de la base de datos. Luego realizar la lectura de las notas a traves de los ports hasta que se ingresa el legajo 255; una vez finalizada la carga se debe imprimir un listado ordenado por promedio de los alumnos de mayor a menor, para eso utilizar la funcion que ordene un vector de punteros Se solicita utilizart una macro para la lectura de ports. Una vez impreso el listado brindar la posibidad de ingresar un promedio e informar cuantos alunos superaron el vslor brindado*/ #include<stdio.h> #include<sys/io.h> #define MAX 200 struct DATOS{ char nombre[30]; int nota; int leg; int materia; int edad; char sexo; }; struct PLACA{ int legajo:8; int s:1; int nota:4; int materia:6; }; union UN { struct placa pl; unsigned char vector[3]; }; void ingreso(struct DATOS [],struct DATOS *[], int ); void mostrar(struct DATOS * [], int ); void ordenar(struct DATOS * [], int L); int buscar(struct DATOS *[], int , int); void main(){ struct DATOS vec[MAX], *punt[MAX]; union UN U; int i,k,prome,canti,legajo; ingreso(vec,punt,MAX); //a partir de aca tendría que comezar lo que va en la macro ioperm(0x400,1,1); ioperm(0x300,2,1); while(legajo!=255){ do{ U.vector[0]=inb(0x400); U.vector[1]=inb(0x300); U.vector[2]=inb(0x301); }while((U.vector[1]&0x01)==0); legajo=U.pl.legajo; vec[legajo].nota=U.pl.nota; vec[legajo].materia=U.pl.materia; do{ U.vector[0]=inb(0x400); U.vector[1]=inb(0x300); U.vector[2]=inb(0x301); } while((U.vector[1]&0x01)==1); } ioperm(0x400,1,0); ioperm(0x300,2,0); //fin de lo que iria en la macroo ordenar(punt,MAX) ; mostrar(punt,MAX); canti=buscar(punt,MAX,prome); if(canti==0){ } else{ } }//fin del main //ordenamiento void ordenar (struct DATOS *p[], int L){ struct DATOS *aux; int i,j; for(i=0;i<L;i++) { for(j=0;j<L-i-1;j++){ if(p[j]->nota<p[j+1]->nota){ aux=p[j]; p[j]=p[j+1]; p[j+1]=aux; } } } } //ingreso de datos void ingreso(struct DATOS v[],struct DATOS *p[], int L){ int i; for(i=0;i<L;i++){ p[i]=&v[i]; /* . . . */ } } //imprimir en pantalla void mostrar(struct DATOS *p[], int L){ struct DATOS *aux; int i; for(i=0;i<L;i++){ /* . . . */ } } int buscar(struct DATOS *p[],int L,int x){ int i,cont=0; for(i=0;i<L;i++){ if(p[i]->nota>x){ cont++; } } return cont; }