c3.hu3.p1.p2.El ser humano y el sentido de su existencia.pptx
Proyecto matediscreta
1. FORMATO DE DESARROLLO DEL PROYECTO DE APLICACIÓN
Curso: Matemática Discreta
Clase:
ORDENAMIENTO DE RUTAS TURÍSTICAS APLICANDO LA
Título del proyecto:
TEORÍA DE ÁRBOLES BINARIOS
Nº de equipo de Trabajo:
Integrantes:
Chalán Malca, Junior.
Iparraguirre Ruiz, Max.
Urteaga Vásquez, Jhon.
Fecha de sustentación: Semana 15
Facultad de Ingeniería y Arquitectura Semestre 2011-II
Carrera de Ingeniería de Sistemas Fecha: 22/08/2011
2. 1. TEMA DEL PROYECTO:
Proponer distintas rutas para la empresa de turismo Terralan utilizando la teoría de
ordenamiento de árboles binarios.
2. PLANTEAMIENTO DEL PROBLEMA:
La empresa “Terralan” llega a Cajamarca para brindar el servicio de turismo. Terralan quiere
ofrecer distintas rutas que permitan llegar a todos los lugares turísticos con el mismo costo;
para solucionar el problema Terralan está solicitando un ingeniero de sistemas para obtener
una solución.
3. OBJETIVO:
-Hacer un programa que indique las distintas rutas que permitan llegar a todos los lugares
turísticos.
4. MODELO MATEMÁTICO:
Vértice:
También llamado nodo unidad fundamental de la que están formados los grafos.
Aristas:
Son las uniones entre vértices.
Grafo:
Es una figura formada por vértices y aristas.
Facultad de Ingeniería y Arquitectura Semestre 2011-II
Carrera de Ingeniería de Sistemas Fecha: 22/08/2011
3. Árbol:
Un árbol es un grafo.
Subárbol:
Árbol binario:
Es un árbol en el que ningún nodo puede tener más de dos subárboles. En un árbol binario cada
nodo puede tener cero, uno o dos hijos (subárboles). Se conoce el nodo de la izquierda como
hijo izquierdo y el nodo de la derecha como hijo derecho.
5. MÉTODOS DE SOLUCIÓN
Para obtener distintas rutas que permitan llegar a todos los destinos turísticos se hace uso de
los recorridos sobre árboles binarios:
-Recorrido en preorden:
En éste tipo de recorrido se sigue el orden: nodo raíz, subárbol izquierdo y subárbol derecho.
-Recorrido en postorden:
En este caso el recorrido sigue el orden: subárbol izquierdo, nodo raíz y subárbol derecho.
-Recorrido en inorden:
En este caso el recorrido sigue el orden: Subárbol izquierdo, subárbol derecho y nodo raíz.
6. ALGORITMO COMPUTACIONAL:
#include <iostream>
#include <stdlib.h>
#include <conio.h>
#include <dos.h>
#include <math.h>
int nodo; /*Indicador de niveles que va tener nuestro arbol*/
Facultad de Ingeniería y Arquitectura Semestre 2011-II
Carrera de Ingeniería de Sistemas Fecha: 22/08/2011
4. /*A consecuencia del gotoxy, nuestro programa solo admite 5 niveles*/
/*Estructura llamada arbol*/
struct arbol{
int grado;/*grado del arbol, por defecto comienza en uno*/
char inf; /*valor que se captura por pantalla*/
struct arbol *i,*d; /*Referencia a los nodos izquierdo y derecho*/
}*cab,*cola,*p,*q;/*Instancias de la estructura arbol*/
int opciones();/*Muestra llenar arbol o salir del arbol*/
void upn(); /*Logo de la upn*/
void principal();/*Muestra los integrantes*/
int op ; /*Varible para salir o llenar arbol*/
void iniciar();/*Procedimiento donde se indica niveles del arbol*/
void llenar_arbol(arbol *cola, int x, int y);/*Se capturan los valores de los nodos*/
void pre_ord(arbol *cab);/*Se ordena el arbol en pre-orden*/
void in_ord(arbol *cab);/*Se ordena el arbol en in-orden*/
void post_ord(arbol *cab);/*Se ordena el arbol en post-orden*/
void dib_cuadro(int ax,int ay,int bx,int by); /*Se dibuja el rectangulo que delimita al nodo*/
int main() {
principal();
Facultad de Ingeniería y Arquitectura Semestre 2011-II
Carrera de Ingeniería de Sistemas Fecha: 22/08/2011
5. do{
clrscr();
op= opciones();
clrscr();
switch(op){
case 1:iniciar(); break;
case 2:exit(1);}
textcolor(14);
gotoxy(1,17);
cprintf( "RECORRIDO DE LOS ELEMENTOS PRE-ORDENn" );
textcolor(14);
gotoxy(1,18);
pre_ord(cab);
cprintf("n");
textcolor(14);
gotoxy(1,21);
cprintf( "RECORRIDO DE LOS ELEMENTOS IN-ORDENn" );
textcolor(14);
gotoxy(1,22);
in_ord(cab);
cprintf("n");
Facultad de Ingeniería y Arquitectura Semestre 2011-II
Carrera de Ingeniería de Sistemas Fecha: 22/08/2011
6. textcolor(14);
gotoxy(1,26);
cprintf( "RECORRIDO DE LOS ELEMENTOS POST-ORDENn" );
textcolor(15);
gotoxy(1,27);
post_ord(cab);
cprintf("n");
gotoxy(1,30);
system ("PAUSE");
system("CLS");
} while(op<2);
return 0;
}
void principal(){
upn();
gotoxy(25,5);
textcolor(4);//color rojo
cprintf( "UNIVERSIDAD PRIVADA DEL NORTEn" );
gotoxy(24,7);
gotoxy(5,17);cprintf( " INTEGRANTESn" );
textcolor(18);//color verde
Facultad de Ingeniería y Arquitectura Semestre 2011-II
Carrera de Ingeniería de Sistemas Fecha: 22/08/2011
9. textcolor(7);
cab = new(arbol); /*cab es un nuevo arbol*/
cab->i = NULL;/*Nodo izquierdo en principio nulo*/
cab->d = NULL;/*Nodo derecho en principio nulo*/
cab->grado=1; /*Se otorga grado uno*/
cola=cab; /*cab se comvierte en cola*/
llenar_arbol(cola,x,y);/*se llama al procedimiento llenar arbol*/
}
void llenar_arbol(arbol *cola,int x, int y){
int z;
dib_cuadro(x,x+3,y,y+2);/*Se le pasa como parametro x and y.Ademas se les suma unos
centimetros
mas para que se dibuje al contorno de el valor del nodo*/
gotoxy(x+1,y+1);
textcolor(14);
cin>>cola->inf;/*Se captura el valor que es introducido por pantalla, se le denomina inf*/
z=x+pow(2,nodo-(cola->grado)); /*z es igual a x + potenciacionde 2 a la (nodo menos
grado)*/
x=x-pow(2,nodo-(cola->grado));
y=y+3;
if(cola->grado < nodo){ /*Si grado es menor que los niveles introducidos por pantalla: */
p = new(arbol); /*Se crea un nuevo arbol*/
Facultad de Ingeniería y Arquitectura Semestre 2011-II
Carrera de Ingeniería de Sistemas Fecha: 22/08/2011
10. p->i = NULL; /*Se inicia con nodo izquierdo nulo*/
p->d = NULL; /*Se inica con nodo derecho nulo*/
p->grado=cola->grado+1;/*se le suma uno al grado y ese nuevo grado se le asigna a p
grado*/
cola->i = p;/*instancia cola con el atrivuto nodo izquierdo se le asigna a p*/
llenar_arbol(p,x,y); /*Se llama nuevamente al procedimiento llenar arbol con nuevos
parametros*/
q = new(arbol);
q->i = NULL;
q->d = NULL;
q->grado=cola->grado+1;
cola->d = q;
llenar_arbol(q,z,y);
}
}
/*Primero se procesa la raiz, luego de izquierda a derecha sus
ramas incluyendo sus ojas*/
/*Primero procesamos el nodo actual,depues el subarbol inzquierdo
y finalmente el subarbol derecho */
void pre_ord(arbol *cab){
if(cab){
cout<<cab->inf<<" "; /*Aplica la funcion al dato del nodo actual*/
Facultad de Ingeniería y Arquitectura Semestre 2011-II
Carrera de Ingeniería de Sistemas Fecha: 22/08/2011
11. pre_ord(cab->i); /*subarbol izquierdo*/
pre_ord(cab->d); /*Subarbol derecho*/
}
}
/*Primero procesamos el subarbol izquierdo,despues el nodo actual,
y finalemnte el subarbol derecho*/
void in_ord(arbol *cab){
if (cab){
in_ord(cab->i);/*Subarbol izquierdo*/
cout<<cab->inf<<" ";/*Aplica la funcion al dato del nodo actual*/
in_ord(cab->d);/*Sub arbol derecho*/
}
}
/*Primero procesamos el subarbol izquierdo,despues el subarbol derecho
y finalmente el nodo actual*/
void post_ord(arbol *cab) {
if (cab) {
post_ord(cab->i);/*Subarbol izquierdo*/
Facultad de Ingeniería y Arquitectura Semestre 2011-II
Carrera de Ingeniería de Sistemas Fecha: 22/08/2011
12. post_ord(cab->d);/*Sub arbol derecho*/
cout<<cab->inf<<" ";/*Aplica la funcion al dato del nodo actual*/
}
}
void dib_cuadro(int ax,int ay,int bx, int by){
textcolor(12);/*Color rojo*/
int a;/*Varible entera que nos va ha servir como iterador para dibujar las lineas*/
for (a=ax;a<=ay;a++) {
gotoxy (a,bx);
cout<<(char(196)); /*Linea horizontal*/
gotoxy (a,by); /*Posicionamiento de la linea*/
cout<<(char(196)); }
for (a=bx;a<=by;a++){
gotoxy (ax,a);
cout<<(char(179)); /*Linea vertical*/
gotoxy (ay,a);
cout<<(char(179));}
gotoxy (ax,bx);
cout<<(char(218)); /*esquina superior izquierda*/
gotoxy (ax,by);
cout<<(char(192)); /*esquina inferior izquierda*/
Facultad de Ingeniería y Arquitectura Semestre 2011-II
Carrera de Ingeniería de Sistemas Fecha: 22/08/2011
13. gotoxy (ay,bx);
cout<<(char(191)); /* esquina superior derecha*/
gotoxy (ay,by);
cout<<(char(217)); /* esquina inferior derecha*/
}
7. RESULTADOS:
8. CONCLUSIONES:
9. REFERENCIAS BIBLIOGRÁFICAS:
Facultad de Ingeniería y Arquitectura Semestre 2011-II
Carrera de Ingeniería de Sistemas Fecha: 22/08/2011
14. 10. CRONOGRAMA DE ACTIVIDADES (Las actividades se enumeran en la primera
columna. Se señalará con una X la semana de culminación de cada actividad).
ACTIVIDADES
Mes/semanas Ago Set. Oct. Nov. Dic.
Actividades 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
Tema del Proyecto x
Recopilación de información x
Planteamiento del problema x
Objetivos x
Modelo matemático x
Métodos de solución x
Algoritmo computacional x
Resultados x
Conclusiones x
Sustentación x
Facultad de Ingeniería y Arquitectura Semestre 2011-II
Carrera de Ingeniería de Sistemas Fecha: 22/08/2011