Título: Problema con programa en borland c Publicado por: ghviso en 15 Junio 2011, 21:14 pm 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 Título: Re: Problema con programa en borland c Publicado por: dakomt en 17 Junio 2011, 05:37 am Tienes suerte de que este aburrido... normalmente nadie te contestaría con ese post... la próxima vez selecciona todo el código y pulsa el botoncito que tienes arriba con el dibujito # ya verás que bonico te queda xD
En fin... tu problema creo que es el siguiente... Tienes declarada esta estructura Código: struct RegVuelo Hasta aquí bien... pero luego haces cosas como estas.... Código: B[i+1].N[10] = B.N[10]; Podría explicarte los fallos pero no me aburro tanto xD investiga un poco pero seguro que los tienes por cosas como esas... PD: me das penica.. aqui van unas pistas... 1. los arrays en C son "zero-based" 2. Un array de caracteres (%s) no es lo mismo que un caracter (%c) ni un entero (%d).. aclárate a ver que necesitas para identificar el número de vuelo y manéjalo correctamente. espero no haber sido muy pedante xD al menos te he contestado! :silbar: |