Documente Academic
Documente Profesional
Documente Cultură
UNIVERSIDAD NACIONAL MAYOR DE SAN MARCOS Universidad del Per, Decana de Amrica
Facultad de Ingeniera de Sistemas e Informtica EAP: Ingeniera de Software Curso: Introduccin a la Computacin e Ingeniera de Software Profesor: Luis Guerra Grados. ---------------------------------------------------------------------
2012
INDICE
INTRODUCCIN
El ordenamiento es el proceso de reorganizacin de un conjunto dado de objetos en una secuencia especificada, el propsito del
ordenamiento principal es el de facilitar bsquedas. As, el objetivo de este proyecto es mostrar un mtodo que facilite el ordenamiento de un grupo de datos segn especificaciones del usuario, adems se demostrar de manera lgica y detallada el proceso y funcionamiento de dicho mtodo, incluyendo un ejemplo que ilustre el mtodo y facilite el entendimiento de este. As de las muchas tcnica a realizar, presentaremos El Mtodo de
Ordenacin por Insercin Directa ICIS mtodo de la baraja. Este mtodo trata de reorganizar un conjunto dado de objetos en una secuencia especificada, y cuyo propsito es el de facilitar bsquedas.
Ordenacin por Insercin Directa ICIS Fcil implementacin. Requerimientos mnimos de memoria
Desventajas:
En insercin directa: Si observamos la posicin del valor que estamos ordenando se "borra" automticamente.
3. Comparamos empezando por el final de la parte ordenada, hasta que se encuentra un elemento menor.
UNMSM
4. Se desplaza una posicin a la derecha todos los elementos que han resultado mayores que el que queremos insertar y se coloca el valor de la variable temporal en el lugar encontrado.
DIAGRAMA DE FLUJO
PRINCIPAL:
UNMSM
INGRESAR:
UNMSM
LISTANORMAL:
LISTADOCOD:
UNMSM
LISTAEDAD:
UNMSM
LISTAPELLIDOS:
UNMSM
LISTANOMBRES:
UNMSM
10
PSEUDOCDIGOS
// PROTOTIPO UNMSM
11
Ordenacin por Insercin Directa ICIS PROCEDIMIENTO ingresar (ENTERO codigo[50],CARCTER apellidos[30][30], CARCTER nombres[30][30], ENTERO edad[50], ENTERO *pn) PROCEDIMIENTO listadocod (ENTERO codigo[50],CARCTER apellidos[30][30], CARCTER nombres[30][30], ENTERO edad[50], ENTERO *pn) PROCEDIMIENTO listanormal (ENTERO codigo[50],CARCTER apellidos[30] [30], CARCTER nombres[30][30], ENTERO edad[50], ENTERO *pn) PROCEDIMIENTO listaedad (ENTERO codigo[50],CARCTER apellidos[30][30], CARCTER nombres[30][30], ENTERO edad[50], ENTERO *pn) PROCEDIMIENTO listanombres (ENTERO codigo[50],CARCTER apellidos[30] [30], CARCTER nombres[30][30], ENTERO edad[50], ENTERO *pn) PROCEDIMIENTO listapellidos (ENTERO codigo[50],CARCTER apellidos[30] [30], CARCTER nombres[30][30], ENTERO edad[50], ENTERO *pn) // PROGRAMA PRINCIPAL INICIO entero opcin, n, edad[50], cdigo[50], r, j carcter apellidos[30][30], nombres[30][30] cadena mensaje hacer escribir(menu) escribir(1.- Ingreso de datos: ) escribir(2.- Listado normal) escribir(3.- Lista ordenada por codigo) escribir(4.- Lista ordenada por edades) escribir(5.- Lista ordenada por apellidos) escribir(6.- Lista ordenada por nombres) escribir(7.- Salir) escribir( Seleccione opcin: ) leer(opcion) caso opcin vale `1: ingresar (cdigo, apellidos, nombres, edad, &n) `2: listanormal (cdigo, apellidos, nombres, edad, c) `3: listadocod(cdigo, apellidos, nombres, edad, c) `4: listaedad(cdigo, apellidos, nombres, edad, c) `5: listapellidos (cdigo, apellidos, nombres, edad, c) `6: listanombres (cdigo, apellidos, nombres, edad, c) `7: mensaje (Gracias por usar el programa) Otro: mensaje(error) Mientras(opcin<>7) FIN // PROCEDIMIENTO INGRESO DE DATOS
UNMSM
12
Ordenacin por Insercin Directa ICIS PROCEDIMIENTO ingresar (ENTERO codigo[50],CARCTER apellidos[30][30], CARCTER nombres[30][30], ENTERO edad[50], ENTERO *pn) INICIO Entero i,a Hacer Escribir(Numero de alumnos) Leer(*pn) Mientras (*pn<1 o *pn>50) Para i de 0 a i<*pn hacer Escribir(Codigo) Leer(cdigo[c]) Escribir(Apellidos) Leer (apellidos[c]) Escribir(Nombres) Leer(nombres[c]) Escribir(Edad) Leer(edad[c]) Fpara FIN //PROCEDIMIENTO LISTA NORMAL PROCEDIMIENTO listanormal (ENTERO codigo[50],CARCTER apellidos[30] [30], CARCTER nombres[30][30], ENTERO edad[50], ENTERO *pn) INICIO Entero i Escribir(Listado de alumnos) Para i de 0 a i<c hacer Escribir(cdigo[i], apellidos[i], nombres[i], edad[i]) Fpara FIN //PROCEDIMIENTO LISTA ORDENADA POR CODIGOS PROCEDIMIENTO listadocod (ENTERO codigo[50],CARCTER apellidos[30][30], CARCTER nombres[30][30], ENTERO edad[50], ENTERO *pn) INICIO Entero i,j,temp Escribir(Lista ordenada por codigos) Para i de 0 a i<c hacer Temp=cdigo[i] Mientras (j>=0 y temp<cdigo[j]) hacer Cdigo[j+1]=cdigo[j--] Cdigo[j+1]=temp Fmientras Fpara Para i de 0 a i<c hacer UNMSM
13
Ordenacin por Insercin Directa ICIS Escribir(cdigo[i]) Fpara FIN //PROCEDIMIENTO LISTA ORDENADA POR NOMBRES PROCEDIMIENTO listanombres (ENTERO codigo[50],CARCTER apellidos[30] [30], CARCTER nombres[30][30], ENTERO edad[50], ENTERO *pn) INICIO Entero i,j Carcter temp[30] Real comp Escribir(Lista ordenada por nombres) Para i de 0 a i<c hacer Para j de 0 a j<c hacer Comp=comparacin(nombres[j],nombres[j+1]) Si (comp>0) entonces Copiar nombres[j] en temp Copiar nombres[j+1] en nombres[j] Copiar temp en nombres[j+1] Fsi Fpara Fpara Para i de 0 a i<c hacer Escribir(nombres[i]) Fpara FIN //PROCEDIMIENTO LISTA ORDENADA POR APELLIDOS PROCEDIMIENTO listapellidos (ENTERO codigo[50],CARCTER apellidos[30] [30], CARCTER nombres[30][30], ENTERO edad[50], ENTERO *pn) INICIO Entero i,j Carcter temp[30] Real comp Escribir(Lista ordenada por apellidos) Para i de 0 a i<c hacer Para j de 0 a j<c hacer Comp=comparacin(apellidos [j], apellidos [j+1]) Si (comp>0) entonces Copiar apellidos [j] en temp Copiar apellidos [j+1] en apellidos [j] Copiar temp en apellidos [j+1] Fsi Fpara Fpara UNMSM
14
Ordenacin por Insercin Directa ICIS Para i de 0 a i<c hacer Escribir(apellidos [i]) Fpara FIN //PROCEDIMIENTO LISTA ORDENADA POR EDADES PROCEDIMIENTO listaedad (ENTERO codigo[50],CARCTER apellidos[30][30], CARCTER nombres[30][30], ENTERO edad[50], ENTERO *pn) INICIO Entero i,j,temp Escribir(Lista ordenada por edades) Para i de 0 a i<c hacer Temp=edad[i] Mientras (j>=0 y temp< edad [j]) hacer edad [j+1]= edad [j--] edad [j+1]=temp Fmientras Fpara Para i de 0 a i<c hacer Escribir(edad[i]) Fpara FIN
PANTALLAS
UNMSM
15
UNMSM
16
UNMSM
17
CODIFICACION EN C++
#include <cstdlib> #include <iostream> #include <stdio.h> #include <string.h> #include <ctype.h> using namespace std; int c=0; void ingresar(int codigo[50],char apellidos[30][30],char nombres[30][30],int edad[50],int *pn); void listadocod(int codigo[50],char apellidos[30][30],char nombres[30][30],int edad[50],int c); void listanormal(int codigo[50],char apellidos[30][30],char nombres[30] [30],int edad[50],int c); void listaedad(int codigo[50],char apellidos[30][30],char nombres[30][30],int edad[50],int c); void listanombres(int codigo[50],char apellidos[30][30],char nombres[30] [30],int edad[50],int c); void listapellidos(int codigo[50],char apellidos[30][30],char nombres[30] [30],int edad[50],int c); int main() { int opcion,n,edad[50],codigo[50],r,j; char apellidos[30][30],nombres[30][30]; //Programa Principal do { cout<<" "<<endl; cout<<" ...:::#::: Programa de Ordenamiento por Insercion Directa :::#::::..."; cout<<" "<<endl; cout<<"\n MENU"; cout<<" "<<endl; cout<<"\n 1. Ingreso de datos: Codigo, Apellidos, Nombres, Edad"; cout<<"\n 2. Listado Normal"; cout<<"\n 3. Lista Ordenada de Codigos"; cout<<"\n 4. Lista Ordenada de Edades"; cout<<"\n 5. Lista Ordenada por Apellidos"; cout<<"\n 6. Lista Ordenada por Nombres"; cout<<"\n 7. Salir"; cout<<" "<<endl; cout<<"\n Seleccione opcion: "; cin>>opcion; switch(opcion) { case 1:ingresar(codigo,apellidos,nombres,edad,&n); cout<<" "<<endl; cout<<" -------------------------------------"<<endl; UNMSM
18
Ordenacin por Insercin Directa ICIS system("PAUSE"); system("cls"); break; case 2:listanormal(codigo,apellidos,nombres,edad,c); cout<<" "<<endl; system("PAUSE"); fflush(stdin); system("cls"); break; case 3:listadocod(codigo,apellidos,nombres,edad,c); cout<<" "<<endl; system("PAUSE"); fflush(stdin); system("cls"); break; case 4:listaedad(codigo,apellidos,nombres,edad,c); cout<<" "<<endl; system("PAUSE"); fflush(stdin); system("cls"); break; case 5:listapellidos(codigo,apellidos,nombres,edad,c); cout<<" "<<endl; system("PAUSE"); fflush(stdin); system("cls"); break; case 6:listanombres(codigo,apellidos,nombres,edad,c); cout<<" "<<endl; system("PAUSE"); fflush(stdin); system("cls"); break; case 7: cout<<" "<<endl; cout<<" Gracias por usar el programa ..."; cout<<" "<<endl; break; default:cout<<" "<<endl; cout<<"Error, pulse 1,2,3,4,5,6 o 7"<<endl; cout<<" "<<endl; system("PAUSE"); fflush(stdin); system("cls"); break; } }while(opcion!=7); UNMSM
19
Ordenacin por Insercin Directa ICIS cout<<" "<<endl; system("PAUSE"); return EXIT_SUCCESS; } //Procedimiento Ingreso de datos void ingresar(int codigo[50],char apellidos[30][30],char nombres[30][30],int edad[50],int *pn) {int i,a; do{ cout<<"\n Numero de alumnos(Entre 1 y 50): "; cin>>*pn; }while(*pn<1 || *pn>50); for(i=0;i<*pn;i++) { cout<<" -------------------------------------"<<endl; cout<<"\n Codigo (Solo Numeros): "; cin>>codigo[c]; fflush(stdin); cout<<"\n Apellidos: "; cin.getline(apellidos[c],28); cout<<"\n Nombres: "; cin.getline(nombres[c],28); cout<<"\n Edad: "; cin>>edad[c]; c++; } } //Procedimiento lista normal void listanormal(int codigo[50],char apellidos[30][30],char nombres[30] [30],int edad[50],int c) { int i,j,temp; cout<<"\n\n"<<"\t\t\tLISTADO DE ALUMNOS"; cout<<"\n"<<"\t\t\t------------------"; cout<<" "<<endl; cout<<"\n"<<" CODIGO"<<"\t\tAPELLIDOS Y NOMBRES"<<"\t\tEDAD"; for(i=0;i<c;i++) { cout<<"\n"<<codigo[i]<<"\t"<<apellidos[i]<<" "<<nombres[i]<<"\t\t\t"<<edad[i]; } cout<<"\n\n"; c++; return; } UNMSM
20
//Procedimiento lista ordenada por codigos void listadocod(int codigo[50],char apellidos[30][30],char nombres[30][30],int edad[50],int c) {int i,j,temp; cout<<"\n\n"<<"\t\t\tLISTA ORDENADA POR CODIGOS"; cout<<"\n"<<"\t\t\t--------------------------"; cout<<" "<<endl; cout<<"\n"<<" CODIGO"; for(i=0;i<c;i++) { temp=codigo[i]; j=i-1; while(j>=0 && temp<codigo[j]) codigo[j+1]=codigo[j--]; codigo[j+1]=temp; } for(i=0;i<c;i++) { cout<<"\n\t"<<codigo[i]; } cout<<"\n\n"; } //Procedimiento lista ordenada por nombres void listanombres(int codigo[50],char apellidos[30][30],char nombres[30] [30],int edad[50],int c) { int i,j; char temp[30]; float comp; cout<<"\n\n"<<"\t\t\tLISTA ORDENADA POR NOMBRES"; cout<<"\n"<<"\t\t\t--------------------------"; cout<<" "<<endl; cout<<"\n"<<" NOMBRES"; for(i=0;i<c;i++) { for(j=0;j<c-i;j++) { comp = strcmp( nombres[j], nombres[j+1]); if(comp > 0) { strcpy(temp,nombres[j]); strcpy(nombres[j],nombres[j+1]); strcpy(nombres[j+1],temp); } } UNMSM
21
Ordenacin por Insercin Directa ICIS } for(i=0;i<c;i++) { cout<<"\n\t"<<nombres[i]; } cout<<"\n\n"; c++; return; } //Procedimiento lista ordenada por Apellidos void listapellidos(int codigo[50],char apellidos[30][30],char nombres[30] [30],int edad[50],int c) { int i,j; char temp[30]; float comp; cout<<"\n\n"<<"\t\t\tLISTA ORDENADA POR APELLIDOS"; cout<<"\n"<<"\t\t\t----------------------------"; cout<<" "<<endl; cout<<"\n"<<" APELLIDOS"; for(i=0;i<c;i++) { for(j=0;j<c-i;j++) { comp = strcmp(apellidos[j],apellidos[j+1]); if(comp > 0) { strcpy(temp,apellidos[j]); strcpy(apellidos[j],apellidos[j+1]); strcpy(apellidos[j+1],temp); } } } for(i=0;i<c;i++) { cout<<"\n\t"<<apellidos[i]; } cout<<"\n\n"; } //Procedimiento lista ordenada por edades void listaedad(int codigo[50],char apellidos[30][30],char nombres[30][30],int edad[50],int c) UNMSM
22
Ordenacin por Insercin Directa ICIS { int i,j,temp; cout<<"\n\n"<<"\t\t\tLISTA ORDENADA POR EDADES"; cout<<"\n"<<"\t\t\t-------------------------"; cout<<" "<<endl; cout<<"\t"<<" EDADES"; for(i=0;i<c;i++) { temp=edad[i]; j=i-1; while(j>=0 && temp<edad[j]) edad[j+1]=edad[j--]; edad[j+1]=temp; } for(i=0;i<c;i++) { cout<<"\n\t"<<edad[i]; } cout<<"\n\n"; c++; return; }
CONCLUSIONES
UNMSM
23
Ordenacin por Insercin Directa ICIS El ordenamiento por insercin directa es prctico y sencillo, se encuentra entre los mtodos ms eficientes pues sus operaciones son pocas en comparacin con otros mtodos. La utilidad de este programa radica en la capacidad para comprender este mtodo, pues la lgica es similar a la de cualquier persona al ordenar cartas que encuentre al azar y de forma desordenada. Este mtodo es muy til en la elaboracin de arreglos unidimensionales ordenados, pues permite la ordenacin de una manera eficiente y segura, conservando los datos eficazmente.
BIBLIOGRAFA
UNMSM
24
Ordenacin por Insercin Directa ICIS http://es.scribd.com/beastieux/d/1739233-Ordenamiento-en-C http://insercion-binaria.tripod.com/index_files/insercion_directa.htm http://saforas.wordpress.com/2008/01/06/metodos-de-ordenamiento-hechoen-c/ http://latecladeescape.com/algoritmos/1123-ordenacion-por-insercion-directahttp://www.youtube.com/watch?v=brshaFqTEO4&feature=fvwrel Programacin en C++ Fundamentos de Programacin Fundamentos de Programacin Edgar Ruiz Lizama Luis Joyanes Aguilar Ricardo Marcelo Villalobos
UNMSM
25