Bueno, estoy haciendo un programa que tiene que hacer lo siguiente:
1)Mostrar la cantidad de pasajeros para cada destino
2)Mostrar un listado con los 10 vuelos con mayor cantidad de pasajeros
3)Mostrar la menor cantidad de pasajeros en algun vuelo
Y los datos ingresan de la siguiente forma:
Por cada vuelo: numero de vuelo (string), fecha (3 enteros), hora (2 enteros), destino (string) y cantidad de pasajeros (entero)
El programa que tengo es este:
#include <stdio.h>
#include <stdlib.h>
#define MAXA 100
#define MAXB 10
////////////////////////////////////////////////////////////////////////
struct RegFec
{
int D;
int M;
int A;
}typedef RegFec;
struct RegHr
{
int H;
int M;
}typedef RegHr;
struct RegVuelo
{
char N[10];
RegFec F;
RegHr H;
char D[10];
int C;
}typedef RegVuelo;
struct RegVueloA
{
char D[10];
int C;
}typedef RegVueloA;
struct RegVueloB
{
char N[10];
int C;
}typedef RegVueloB;
RegVueloA A[MAXA];
RegVueloB B[MAXB];
RegFec F;
RegHr Hr;
RegVuelo vuelo;
int ceA=0;
int ceB=0;
int I=0;
int cant=0;
int Hubo_Datos=0;
int HayDatos;
////////////////////////////////////////////////////////////////////////
int EsBisiesto (A)
{
int Es=0;
if ( ((A%4==0) && (A%100!=0)) || (A%400==0) )
{
Es=1;
}
return Es;
}
////////////////////////////////////////////////////////////////////////
int CantDias (M,A)
{
int Dias = 31;
if ( (M==4) || (M==6) || (M==9) || (M==11) )
{
Dias=30;
}
else
{
if ( (M==2) && (EsBisiesto (A)==1) )
{
Dias=29;
}
else
{
if ( (M==2) && (EsBisiesto (A)==0) )
{
Dias=28;
}
}
}
return Dias;
}
////////////////////////////////////////////////////////////////////////
int FechaValida(RegFec F)
{
int Es=0;
if (F.A>1800)
{
if ( (F.M>=1) && (F.M<=12) )
{
if ( (F.D>=1) && ( (CantDias (F.M,F.A))>=(F.D) ))
{
Es=1;
}
}
}
return Es;
}
////////////////////////////////////////////////////////////////////////
int IngresarFechaValida (RegFec F)
{
do
{
printf("Ingrese Dia\n");
scanf("%d",&F.D);
printf("Ingrese Mes\n");
scanf("%d",&F.M);
printf("Ingrese Año\n");
scanf("%d",&F.A);
}
while (FechaValida(F)==0);
return 0;
}
////////////////////////////////////////////////////////////////////////
int IngresarHoraValida (RegHr Hr)
{
int H;
int M;
do
{
printf("Ingrese la Hora\n");
scanf("%d",&H);
}while ((H>23) || (H<0) );
do
{
printf("Ingrese los Minutos\n");
scanf("%d",&M);
}while ( (M>59) || (M<0) );
Hr.H = H;
Hr.M = M;
return 0;
}
////////////////////////////////////////////////////////////////////////
int IngresarDatos (RegVuelo vuelo)
{
printf("Ingrese el numero de vuelo\n");
scanf("%s",vuelo.N);
IngresarFechaValida (vuelo.F);
IngresarHoraValida (vuelo.H);
printf("Ingrese el destino\n");
scanf("%s",vuelo.D);
do
{
printf("Ingrese la cantidad de pasajeros\n");
scanf("%d",&vuelo.C);
}while (vuelo.C<0);
return 0;
}
////////////////////////////////////////////////////////////////////////
int VerificarFinDatos (int HayDatos)
{
int Aux;
do
{
printf("Ingrese 1 si quiere ingresar datos o cualquier tecla para finalizar\n");
scanf("%d",&Aux);
}while ((Aux!=1) && (Aux!=0) );
if (Aux==1)
{
HayDatos=1;
}
else
{
HayDatos=0;
}
return HayDatos;
}
////////////////////////////////////////////////////////////////////////
int Buscar (RegVueloA A[MAXA], int ceA, RegVuelo vuelo)
{
int i = 0;
int pos;
while ((i < ceA) && (A.D != vuelo.D))
{
i=i+1;
}
if (i==ceA)
pos= -1;
else
pos= i;
return (pos);
}
//////////////////////////////////////////////////////
int InsertarOrdenado (RegVueloB B[MAXB], int *ceB,RegVuelo vuelo)
{
int i=(*ceB -1);
if (*ceB == MAXB)
{
if (B.C < vuelo.C)
i=i-1;
}
else
*ceB=*ceB+1;
while ((i>=0) && (B.C < vuelo.C))
{
B[i+1].C = B.C;
B[i+1].N[10] = B.N[10];
i = i-1;
}
if (i != MAXB-1)
{
B[i+1].C = vuelo.C;
B[i+1].N[10] = vuelo.N[10];
}
return 0;
}
////////////////////////////////////////////////////////////////////////
int Proceso (RegVuelo vuelo, RegVueloA A[MAXA],RegVueloB B[MAXB], int *cant, int *I, int *ceA, int *ceB)
{
int pos;
pos = (Buscar(A, *ceA, vuelo));
if (pos>=0)
{
A[pos].C = A[pos].C+vuelo.C ;
}
else
{
if (*ceA!=MAXA)
{
A[*ceA].D[10] = vuelo.D[10];
A[*ceA].C = vuelo.C;
*ceA=*ceA+1;
}
else
{
exit (0);
}
}
if (I==0)
{
*cant=vuelo.C ;
}
else
{
if (vuelo.C < *cant)
{
*cant=vuelo.C;
}
}
I=I+1;
InsertarOrdenado (B, ceB, vuelo);
return 0;
}
///////////////////////////////////////////////////////////////////////
int MostrarDatos (RegVueloA A[MAXA], RegVueloB B[MAXB], int *cant, int *ceA, int *ceB, int Hubo_Datos)
{
int I=0;
for ((I=0) ; (I<(*ceA)) ; I++)
{
printf ("Destino: %d,Cantidad de pasajeros: %d\n", A.D[10], A.C);
}
for (I=0 ; (I<(*ceB)) ; I++)
{
printf ("Vuelo: %d,Cantidad: %d\n", B.N[10], B.C);
}
if (Hubo_Datos==1)
{
printf ("La menor cantidad fue: %d", *cant);
}
else
printf ("No hubo vuelos");
return 0;
}
///////////////////////////////////////////////////////////////////////
int main()
{
while (VerificarFinDatos (HayDatos)==1)
{
Hubo_Datos=1;
IngresarDatos(vuelo);
Proceso (vuelo,A,B,&cant,&I,&ceA,&ceB);
}
MostrarDatos (A,B,&cant,&ceA,&ceB,Hubo_Datos) ;
return 0;
}
El programa compila, pero a la hora de mostrar los datos muestra todo 0 :S