Вы находитесь на странице: 1из 15

UNIVERSIDAD DE SAN MARTN DE PORRES

FACULTAD DE INGENIERA Y ARQUITECTURA

ALGORITMO Y ESTRUCTURA DE DATOS I


Ing. Juan A. Puerta Arce
USMP-FIA CICLO 2011-II

SEMANA 8 Sesin 1
CONTENIDO :

Problema de repaso sobre los algoritmos de bsqueda secuencial, ordenamiento y eliminacin de datos.
OBJETIVOS:

Reforzar los conocimientos adquiridos a travs de la solucin de problemas.

Algoritmo y Estructura de Datos I

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]

Algoritmo y Estructura de Datos I

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.

Algoritmo y Estructura de Datos I

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

Algoritmo y Estructura de Datos I

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; }

Algoritmo y Estructura de Datos I

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;

Algoritmo y Estructura de Datos I

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;

Algoritmo y Estructura de Datos I

Ciclo 2011-II

SOLUCIN
for(int i=0;i<N-c;i++) { if(CANTIDADES[i]<200) { eliminarAvion(i); i--; } } } };

Algoritmo y Estructura de Datos 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

Algoritmo y Estructura de Datos I

Вам также может понравиться