Академический Документы
Профессиональный Документы
Культура Документы
SEMANA 8 Sesin 1
CONTENIDO :
Problema de repaso sobre los algoritmos de bsqueda secuencial, ordenamiento y eliminacin de datos.
OBJETIVOS:
Ciclo 2011-II
PROBLEMA
Desarrolle un programa que permita simular la base de datos de un aeropuerto. La cantidad de aviones que salen del aeropuerto debe ser generada de forma aleatoria en el rango [5 10]. Todos los aviones tienen los siguientes datos: cdigo, nombre de aerolnea y cantidad de pasajeros. Los cdigos de avin se generan de forma aleatoria y deben ser nmeros de 3 dgitos los cuales no deben repetirse. Los nombres de las aerolneas para cada avin deben generarse de forma aleatoria, teniendo en cuenta que deben ser 3 aerolneas, utilice una letra (A, L, K) segn la aerolnea (A=American Airlines, L=LAN, K=KLM) La cantidad de pasajeros en cada avin debe generarse de forma aleatoria en el rango de [100 300]
Ciclo 2011-II
El programa debe permitir lo siguiente: Mostrar un reporte ordenado en forma ascendente de todos los datos de los aviones considerando como criterio de ordenamiento a la cantidad de pasajeros. Buscar a un avin en funcin a su cdigo y mostrar todos sus datos.
Eliminar a todos los aviones que tengan una cantidad de pasajeros menor a 200
Mostrar el reporte actualizado Utilice la clase, atributos y mtodos que crea conveniente. Realizar la representacin o diagrama de clase. Graficar el diagrama de estructura de datos y el diagrama de secuencia.
Ciclo 2011-II
SOLUCIN
REPRESENTACIN O DIAGRAMA DE CLASE RegistroVuelo NOMBRES[] : char CODIGOS[] : int CANTIDADES[] : int c, N : int RegistroVuelo() registrarDatos() : void generarAerolinea() : char mostrarRegistro(): void ordenarRegistro(): void buscarCodigo(int a, int b) : int eliminarAvion(int p) : void
buscarYEliminar() : void
Ciclo 2011-II
SOLUCIN
DIAGRAMA DE ESTRUCTURA DE DATOS
NOMBRES CODIGOS CANTIDADES
1
2 3 4 5 6
1
2 3 4 5 6
1
2 3 4 5 6
. . .
N-1 N-1
. . .
N-1
. . .
char
Algoritmo y Estructura de Datos I
double
int
Ciclo 2011-II
SOLUCIN
class RegistroVuelo { public: char NOMBRES[10]; int CODIGOS[10]; int CANTIDADES[10]; int c,N; RegistroVuelo() { for(int i=0;i<10;i++) { NOMBRES[i]= ' '; CODIGOS[i]=0; CANTIDADES[i]=0; } c=0; N=0; }
Algoritmo y Estructura de Datos I Ciclo 2011-II
SOLUCIN
void registrarDatos() { int aux;
N = rand()%(10-5+1)+5; for(int i=0;i<N;i++) { NOMBRES[i] = generarAerolinea(); do{ CODIGOS[i] = rand()%(999-100+1)+100; aux = buscarCodigo(CODIGOS[i],i); }while(aux!=-1); CANTIDADES[i] = rand()%(300-100+1)+100; } }
Algoritmo y Estructura de Datos I Ciclo 2011-II
SOLUCIN
char generarAerolinea() { char AEROLINEA[3]= {'A','L','K'}; int a = rand()%(3); return AEROLINEA[a];
}
void mostrarRegistro() { for(int i=0;i<N-c;i++) {
cout<<NOMBRES[i]<<"\t"<<CODIGOS[i]<<"\t"<<CANTIDADES[i]<<endl; }
Ciclo 2011-II
SOLUCIN
void ordenarRegistro() { int cod, cant; char nom;
for(int i=0;i<N-1-c;i++) { for(int j=i+1;j<N-c;j++) { if(CANTIDADES[i]>CANTIDADES[j]) { cant = CANTIDADES[i]; CANTIDADES[i] = CANTIDADES[j]; CANTIDADES[j] = cant; cod = CODIGOS[i]; CODIGOS[i] = CODIGOS[j]; CODIGOS[j] = cod;
Ciclo 2011-II
SOLUCIN
nom = NOMBRES[i]; NOMBRES[i] = NOMBRES[j]; NOMBRES[j] = nom; }
} } } int buscarCodigo(int a,int b) { for(int i=0;i<b-c;i++) { if(a == CODIGOS[i]) } }
Algoritmo y Estructura de Datos I Ciclo 2011-II
return i;
return -1;
SOLUCIN
void eliminarAvion(int p) { for(int i=p;i<N-1-c;i++) { NOMBRES[i]=NOMBRES[i+1]; CODIGOS[i]=CODIGOS[i+1]; CANTIDADES[i]=CANTIDADES[i+1]; } c++; } void buscarYEliminar() { int cod, aux; cout<<endl<<"Ingrese el codigo del avion que desea buscar: "; cin>>cod;
Algoritmo y Estructura de Datos I Ciclo 2011-II
SOLUCIN
aux = buscarCodigo(cod,N); if(aux==-1) { cout<<endl<<"El codigo no existe en el registro"; } else { cout<<endl<<"Datos del Avion: "<<endl; cout<<"NOMBRE DE AEROLINEA: "<<NOMBRES[aux]; cout<<endl<<"CODIGO : "<<CODIGOS[aux];
cout<<endl<<"CANTIDAD DE PASAJEROS: "<<CANTIDADES[aux]<<endl;
Ciclo 2011-II
SOLUCIN
for(int i=0;i<N-c;i++) { if(CANTIDADES[i]<200) { eliminarAvion(i); i--; } } } };
Ciclo 2011-II
SOLUCIN
int main() { RegistroVuelo r1; srand(time(NULL)); r1.registrarDatos(); r1.ordenarRegistro(); cout<<endl<<"Registro inicial ordenado: "<<endl<<endl; r1.mostrarRegistro(); r1.buscarYEliminar(); cout<<endl<<"Registro resultante: "<<endl<<endl; r1.mostrarRegistro(); getch(); return 0;
Ciclo 2011-II