Ver Mensaje Individual
  #1 (permalink)  
Antiguo 18/02/2015, 18:17
Avatar de ElenaJuarez
ElenaJuarez
 
Fecha de Ingreso: febrero-2015
Ubicación: Buenos Aires
Mensajes: 8
Antigüedad: 9 años, 9 meses
Puntos: 0
Pregunta Consulta de macros, como realizar el prototipo?

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
  1. /*  ENUNCIADO:
  2.     Se desea realizar una estadistica con los 200 alumnos de la carrera ingenieria
  3.     electrónica de la facultad. Para ello inicialmente se debera cargar una base
  4.     de datos con los siguientes datos: Nombre(cadena de 30 caracteres), legajo(entero entre 0 y 250)
  5.     edad,sexo. Por los puertos 0x300 y 0x301 vendran los datos con la siguente estructura..
  6.     Los datos seran validos cuando el bit S cambie de 0 a 1. Asimismo en el puerto 0x400
  7.     se encontrara el legajo del alumno cuya nota se informa;
  8.     Se solicita realizar la carga de la base de datos. Luego realizar la lectura de las notas
  9.     a traves de los ports hasta que se ingresa el legajo 255;
  10.     una vez finalizada la carga se debe imprimir un listado ordenado por promedio
  11.     de los alumnos de mayor a menor, para eso utilizar la funcion que ordene un vector de punteros
  12.     Se solicita utilizart una macro para la lectura de ports. Una vez impreso el listado brindar la posibidad
  13.     de ingresar un promedio e informar cuantos alunos superaron el vslor brindado*/
  14.    
  15.  
  16.  
  17. #include<stdio.h>
  18. #include<sys/io.h>
  19. #define MAX 200
  20. struct DATOS{
  21.    
  22.     char nombre[30];
  23.     int nota;
  24.     int leg;
  25.     int materia;
  26.     int edad;
  27.     char sexo;
  28. };
  29.  
  30. struct PLACA{
  31.    
  32.    
  33.     int legajo:8;
  34.     int s:1;
  35.     int nota:4;
  36.     int materia:6;
  37.    
  38. };
  39.  
  40. union UN {
  41.    
  42.     struct placa pl;
  43.     unsigned char vector[3];
  44.    
  45. };
  46. void ingreso(struct DATOS [],struct DATOS *[], int );
  47. void mostrar(struct DATOS * [], int );
  48. void ordenar(struct DATOS * [], int L);
  49. int buscar(struct DATOS *[], int , int);
  50.  
  51.  
  52. void main(){
  53.    
  54.     struct DATOS vec[MAX], *punt[MAX];
  55.     union UN U;
  56.    
  57.     int i,k,prome,canti,legajo;
  58.    
  59.     ingreso(vec,punt,MAX);
  60.     //a partir de aca tendría que comezar lo que va en la macro
  61.    
  62.     ioperm(0x400,1,1);
  63.     ioperm(0x300,2,1);
  64.    
  65.     while(legajo!=255){
  66.        
  67.         do{
  68.            
  69.             U.vector[0]=inb(0x400);
  70.             U.vector[1]=inb(0x300);
  71.             U.vector[2]=inb(0x301);
  72.            
  73.         }while((U.vector[1]&0x01)==0);
  74.        
  75.         legajo=U.pl.legajo;
  76.         vec[legajo].nota=U.pl.nota;
  77.         vec[legajo].materia=U.pl.materia;
  78.        
  79.         do{
  80.            
  81.             U.vector[0]=inb(0x400);
  82.             U.vector[1]=inb(0x300);
  83.             U.vector[2]=inb(0x301);
  84.            
  85.         } while((U.vector[1]&0x01)==1);
  86.     }
  87.    
  88.     ioperm(0x400,1,0);
  89.     ioperm(0x300,2,0);
  90.    
  91.     //fin de lo que iria en la macroo
  92.    
  93.     ordenar(punt,MAX)   ;
  94.     mostrar(punt,MAX);
  95.    
  96.     printf("\nIngrese promedio a buscar: ");
  97.     scanf("%d",&prome);
  98.     canti=buscar(punt,MAX,prome);
  99.     if(canti==0){
  100.         printf("\nNo existen alumnos con promedio superior al ingresado.");
  101.     }
  102.     else{
  103.         printf("La cantidad de alumnos con promedio mayor a: %d es de %d.", prome,canti);
  104.     }  
  105. }//fin del main
  106.  
  107. //ordenamiento
  108. void ordenar (struct DATOS *p[], int L){
  109.     struct DATOS *aux;
  110.     int i,j;
  111.    
  112.     for(i=0;i<L;i++)
  113. {
  114.     for(j=0;j<L-i-1;j++){
  115.        
  116.         if(p[j]->nota<p[j+1]->nota){
  117.            
  118.             aux=p[j];
  119.             p[j]=p[j+1];
  120.             p[j+1]=aux;
  121.            
  122.         }
  123.     }
  124. }  
  125. }
  126.  
  127. //ingreso de datos
  128. void ingreso(struct DATOS v[],struct DATOS *p[], int L){
  129.    
  130.     int i;
  131.    
  132.     for(i=0;i<L;i++){
  133.             p[i]=&v[i];
  134.         printf("\nIngrese nombre: ");
  135.         gets(v[i].nombre);
  136.         printf("\nIngrese nota: ");
  137.         scanf("%d", &v[i].nota);
  138.         /*
  139.         .
  140.         .
  141.         .
  142.         */
  143.         getchar();
  144.     }
  145.    
  146. }
  147.  
  148. //imprimir en pantalla
  149. void mostrar(struct DATOS *p[], int L){
  150.    
  151.     struct DATOS *aux;
  152.     int i;
  153.    
  154.     for(i=0;i<L;i++){
  155.        
  156.         printf("\nNombre: %s",p[i]->nombre);
  157.         printf("\nNota: %d",p[i]->nota);
  158.    
  159.     /*
  160.     .
  161.     .
  162.     .
  163.     */
  164.    
  165.     }
  166.    
  167. }
  168.  
  169.  
  170. int buscar(struct DATOS *p[],int L,int x){
  171.    
  172.     int i,cont=0;
  173.    
  174.     for(i=0;i<L;i++){
  175.        
  176.         if(p[i]->nota>x){
  177.             cont++;
  178.         }
  179.     }
  180.    
  181.     return cont;
  182. }