Buenas noches, esta vez mi consulta esta mas preparada. Espero que se logre entender!! jeje
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);
printf("\nIngrese promedio a buscar: "); canti=buscar(punt,MAX,prome);
if(canti==0){
printf("\nNo existen alumnos con promedio superior al ingresado."); }
else{
printf("La cantidad de alumnos con promedio mayor a: %d es de %d.", prome
,canti
); }
}//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++){
printf("\nNombre: %s",p
[i
]->nombre
); printf("\nNota: %d",p
[i
]->nota
);
/*
.
.
.
*/
}
}
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;
}