You are on page 1of 32

UNIVERSIDAD DE GUAYAQUIL

FACULTAD DE CIENCIAS MATEMÁTICAS Y FÍSICAS


CARRERA DE INGENIERÍA EN SISTEMAS COMPUTACIONALES

TEMA PROPUESTO:
REPRESENTACION GRAFICA DE ARBOLES EN C++

NOMBRE DEL EQUIPO:


LOS ALFA & OMEGA

PARALELO:
S1B

AUTORES:
 MOLESTINA SALDAÑA ANTHONY ISAAC
 EGAS ARIZALA KEVIN OSWALDO
 ARIAS MARTINEZ BRYAN JOSE
 APOLINARIO SUAREZ DANIEL EDUARDO

TUTORA:
M.SC. ÁNGELA YANZA MONTALVÁN, ING. MG.

GUAYAQUIL, ECUADOR
2015-2016
DEDICATORIA

Este proyecto va dedicado primeramente a DIOS por darnos salud e inteligencia ante

todo, por habernos permitido formar un excelente equipo y que con mucho sacrificio y

esfuerzo del día a día hemos podido llegar a cumplir nuestros objetivos, agradeciendo

también por darnos infinita bondad, amor y misericordia.

Dedicamos este proyecto también a NUESTROS PADRES por habernos apoyado en

todo momento y ayudándonos en lo que hacía falta dándonos los mejores consejos para

poder llegar a cumplir esta meta tan ansiada.

Dedicamos este proyecto también a NUESTROS DOCENTES que con el trabajo de

ellos nos ayudan con los conocimientos necesarios que debemos tener para poder llevar

a cabo este proyecto y presentarlo de la mejor forma posible.

LOS ALFA & OMEGA


AGRADECIMIENTO

Agradecemos a Dios por darnos salud, inteligencia, perseverancia y mucho esfuerzo

para seguir adelante con este proyecto que nos servirá tanto ahora como en periodo a

largo plazo.

Este proyecto es el resultado del esfuerzo en conjunto de todos los que formamos el

equipo de trabajo LOS ALFA & OMEGA. También agradeciendo mucho a nuestra tutora

Ing. Ángela Yanza, quien a lo largo de este tiempo ha sido de gran ayuda en nuestro

proyecto porque nos ha enseñado a mejorarlo de la mejor manera.

Estamos seguros que nuestros objetivos y metas en un periodo de corto y largo plazo

darán fruto de manera muy eficiente creando así muchas oportunidades para nuestro

gran futuro profesional en esta carrera.

LOS ALFA & OMEGA


INTRODUCCIÓN

La siguiente investigación trata sobre la estructura de datos no lineales llamada árboles.

Esta estructura se usa principalmente para representar datos con una relación entre sus

elementos, como por ejemplo registros, árboles genealógicos, y tablas de contenidos.

Vamos a profundizar en un tipo especial de árbol llamado árbol binario, la cual puede ser

implementada fácilmente en las matemáticas y la programación; aunque en un árbol

puede parecer muy restrictivo.

Se va a realizar una representación gráfica de árboles en el lenguaje de programación

C++ que nos va ayudar mucho para trabajos y proyectos a futuro que nos podrán mandar

en unos semestres superiores dentro de la facultad de Ciencias Matemáticas y Físicas

de la Universidad de Guayaquil.
1. CAPÍTULO I

INTRODUCCIÓN GENERAL

1.1. ANTECEDENTES

Los árboles pueden ser construidos a partir de lenguajes de programación de varias

formas. En un lenguaje con registros y referencias, los árboles son construidos

típicamente con una estructura de nodos y punteros en la cual se almacenan datos, cada

uno de estos nodos tiene una referencia o puntero a un nodo izquierdo y a un nodo

derecho denominados hijos. En ocasiones, también contiene un puntero a un único nodo.

Si un nodo tiene menos de dos hijos, algunos de los punteros de los hijos pueden ser

definidos como nulos para indicar que no dispone de dicho nodo.

1.2. OBJETIVOS

1.2.1 OBJETIVO GENERAL

 Hacer que el estudiante no tenga una visión negativa hacia el tema de la

representación gráfica de árboles en lenguaje de programación C/C++, utilizando

un método de implementación eficiente y práctico para lograr una mayor

motivación hacia el estudiante para que pueda aprender más sobre dicho tema.

1.2.2 OBJETIVOS ESPECÍFICOS

 Proponer un nuevo método de enseñanza mucho más sencillo y a la vez

eficiente para los estudiantes de la Universidad de Guayaquil para que puedan

de manera más fácil graficar árboles en el lenguaje de programación C/C++.


 Aprender a programar en lenguaje C/C++ dando pequeñas guías que servirán a

estudiantes nuevos que empiezan en esta carrera para obtener una mayor

motivación y desempeño en sus materias.

 Realizar varias prácticas sobre este proyecto en los laboratorios de cómputo de

la facultad de Ciencias Matemáticas y Físicas de la Universidad de Guayaquil

para aprender de una manera interactiva y muy eficiente.

1.3. ALCANCE DEL PROYECTO

El presente proyecto está dedicado a facilitar la representación gráfica de árboles en

C/C++ tratando de ayudar a los estudiantes de la carrera de ingeniería en sistemas

computacionales de toda la facultad de Ciencias Matemáticas y Físicas de la Universidad

de Guayaquil.

El programa que se creó en el lenguaje de programación C++ ayuda a la realización y

representación gráfica de árboles, dando como resultado un desarrollo eficiente que

ayude a los estudiantes de esta carrera.

1.4. JUSTIFICACIÓN E IMPORTANCIA

La importancia de nuestro proyecto es que se vean involucradas dos materias muy

importantes como lo son: Matemáticas discretas y Programación ya que uno no solo

aprenderá a programar sino que también aprende a realizar ejercicios matemáticos y

muchas cosas más, que serán importantes en nuestra carrera universitaria.


Este proyecto está dedicado con el fin de ayudar a crear una herramienta útil a todos los

estudiantes, ya que necesitan tener un programa que les permita realizar la

representación gráfica de árboles de una manera eficiente obteniendo resultados

verídicos.

1.5. CRONOGRAMA DE ACTIVIDADES

1.6. RECURSOS

Recursos humanos

 Estudiantes del paralelo S1B (equipo de trabajo).

 Docente (Ing. Ángela Yanza).

Hardware

 Laptop para la creación del programa.

 Dispositivos electrónicos para tomar evidencias sobre la creación del proyecto.

 Computadora de escritorio para investigación y creación de carpeta.


Software

 Sistema Operativo Windows 10.

 Microsoft Word 2010

 Microsoft Excel 2010

 Programa Borland C++

 Navegador Google Chrome.


2. CAPITULO II

ANÁLISIS

2.1 LEVANTAMIENTO DE INFORMACION

¿QUÉ SON LOS LENGUAJES DE PROGRAMACION?

Un lenguaje de programación es un lenguaje formal diseñado para realizar procesos que

pueden ser llevados a cabo por máquinas como las computadoras.

Pueden usarse para crear programas que controlen el comportamiento físico y lógico de

una máquina, para expresar algoritmos con precisión, o como modo de comunicación

humana.

Está formado por un conjunto de símbolos y reglas sintácticas y semánticas que definen

su estructura y el significado de sus elementos y expresiones. Al proceso por el cual se

escribe, se prueba, se depura, se compila (de ser necesario) y se mantiene el código

fuente de un programa informático se le llama programación.

También la palabra programación se define como el proceso de creación de

un programa de computadora, mediante la aplicación de procedimientos lógicos, a

través de los siguientes pasos:

 El desarrollo lógico del programa para resolver un problema en particular.

 Escritura de la lógica del programa empleando un lenguaje de programación

específico (codificación del programa).


 Ensamblaje o compilación del programa hasta convertirlo en lenguaje de máquina.

 Prueba y depuración del programa.

 Desarrollo de la documentación.

Existe un error común que trata por sinónimos los términos 'lenguaje de programación' y

'lenguaje informático'. Los lenguajes informáticos engloban a los lenguajes de

programación y a otros más, como por ejemplo HTML (lenguaje para el

marcado de páginas web que no es propiamente un lenguaje de programación, sino

un conjunto de instrucciones que permiten estructurar el contenido de los documentos).

Permite especificar de manera precisa sobre qué datos debe operar una computadora,

cómo deben ser almacenados o transmitidos y qué acciones debe tomar bajo una variada

gama de circunstancias. Todo esto, a través de un lenguaje que intenta

estar relativamente próximo al lenguaje humano o natural. Una característica relevante

de los lenguajes de programación es precisamente que más de un programador pueda

usar un conjunto común de instrucciones que sean comprendidas entre ellos para

realizar la construcción de un programa de forma colaborativa.

¿QUE ES C++?

C++ es un lenguaje de programación diseñado a mediados de los años 1980 por Bjarne

Stroustrup. La intención de su creación fue el extender al lenguaje de

programación C mecanismos que permiten la manipulación de objetos. En ese sentido,

desde el punto de vista de los lenguajes orientados a objetos, el C++ es un lenguaje

híbrido.
Posteriormente se añadieron facilidades de programación genérica, que se sumaron a

los paradigmas de programación estructurada y programación. Por esto se suele decir

que el C++ es un lenguaje de programación multiparadigma.

Actualmente existe un estándar, denominado ISO C++, al que se han adherido la

mayoría de los fabricantes de compiladores más modernos. Existen también algunos

intérpretes, tales como ROOT.

Una particularidad del C++ es la posibilidad de redefinir los operadores, y de poder crear

nuevos tipos que se comporten como tipos fundamentales.

El nombre C++ fue propuesto por Rick Mascitti en el año 1983, cuando el lenguaje fue

utilizado por primera vez fuera de un laboratorio científico. Antes se había usado el

nombre "C con clases". En C++, la expresión "C++" significa "incremento de C" y se

refiere a que C++ es una extensión de C.

VENTAJAS Y DESVENTAJAS DE C++

Ventajas

 Lenguaje de programación orientado a objetos.

 Lenguaje muy didáctico, con este lenguaje puedes aprender muchos otros

lenguajes con gran facilidad, como C#, Java, Visual Basic, JavaScript, PHP, entre

otros.

 Es muy potente en lo que se refiere a creación de sistemas complejos, un lenguaje

muy robusto.

 Actualmente, puede compilar y ejecutar código de C, ya viene con librerías para

realizar esta labor.


Desventajas

 Es mucho más difícil de usar q otros lenguajes de programación.

 Es difícil programar bases de datos

 Los punteros (es muy complicado su sistema).

CARACTERÍSTICAS DE LENGUAJE C++

Las principales características del Lenguaje C++ son:

1. Tiene un conjunto completo de instrucciones de control.

2. Permite la agrupación de instrucciones.

3. Incluye el concepto de puntero (variable que contiene la dirección de otra

variable).

4. Los argumentos de las funciones se transfieren por su valor.

5. E/S no forma parte del lenguaje, sino que se proporciona a través de una biblioteca

de funciones.

6. Permite la separación de un programa en módulos que admiten compilación

independiente.

7. Programación de bajo nivel (nivel bit).


EJEMPLO DE PROGRAMA EN C++

A continuación se cita un programa de ejemplo Hola mundo escrito en C++:

/* Esta cabecera permite usar los objetos que encapsulan los descriptores stdout
y stdin: cout(<<) y cin(>>)*/
#include <iostream>

using namespace std;

int main()
{
cout << "Hola mundo" << endl;
cin.get();
}

Al usar la directiva #include se le dice al compilador que busque e interprete todos los

elementos definidos en el archivo que acompaña la directiva (en este caso, iostream).

Para evitar sobrescribir los elementos ya definidos al ponerles igual nombre, se crearon

los espacios de nombres o namespace del singular en inglés. En este caso hay un

espacio de nombres llamado std, que es donde se incluyen las definiciones de todas las

funciones y clases que conforman la biblioteca estándar de C++. Al incluir la

sentencia using namespace std le estamos diciendo al compilador que usaremos el

espacio de nombres std por lo que no tendremos que incluirlo cuando usemos elementos

de este espacio de nombres, como pueden ser los objetos cout y cin, que representan el

flujo de salida estándar (típicamente la pantalla o una ventana de texto) y el flujo de

entrada estándar (típicamente el teclado).


La definición de funciones es igual que en C, salvo por la característica de que si main no

va a recoger argumentos, no tenemos por qué ponérselos, a diferencia de C, donde había

que ponerlos explícitamente, aunque no se fueran a usar. Queda solo comentar que el

símbolo << se conoce como operador de inserción, y grosso modo está enviando

a cout lo que queremos mostrar por pantalla para que lo pinte, en este caso la

cadena "Hola mundo". El mismo operador << se puede usar varias veces en la misma

sentencia, de forma que gracias a esta característica podremos concatenar el

objeto endl al final, cuyo resultado será imprimir un retorno de línea.

Por último tomaremos una secuencia de caracteres del teclado hasta el retorno de línea

(presionando ENTER), llamando al método get del objeto cin.

¿QUE SON LAS VARIABLES?

Las variables son títulos asignados a espacios en memoria para almacenar datos

específicos. Son contenedores de datos y por ello se diferencian según el tipo de dato

que son capaces de almacenar. En la mayoría de lenguajes de programación se requiere

especificar un tipo de variable concreto para guardar un dato específico. Por ejemplo, en

Java, si deseamos guardar una cadena de texto debemos especificar que la variable es

del tipo String. Por otra parte, en lenguajes como PHP este tipo de especificación de

variables no es necesario. Además, existen variables compuestas llamadas vectores. Un

vector no es más que un conjunto de bytes consecutivas en memoria y del mismo tipo

guardadas dentro de una variable contenedor.


A continuación, un listado con los tipos de variables más comunes:

Tipo de dato Descripción de cada variable

Char Estas variables contienen un único carácter, es decir, una letra, un

signo o un número.

Int Contienen un número entero.

Float Contienen un número decimal.

String Contienen cadenas de texto, o lo que es lo mismo, es un vector con

varias variables del tipo Char.

Boolean Solo pueden contener un cero o un uno.

En el caso de variables booleanas, el cero es considerado para muchos lenguajes

como el literal falso ("False"), mientras que el uno se considera verdadero ("True").

¿QUE SON LAS CONDICIONANTES?

Los condicionantes son estructuras de código que indican que, para que cierta parte del

programa se ejecute, deben cumplirse ciertas premisas; por ejemplo: que dos valores

sean iguales, que un valor exista, que un valor sea mayor que otro...

Estos condicionantes por lo general solo se ejecutan una vez a lo largo del programa.

Los condicionantes más conocidos y empleados en programación son:

 If: Indica una condición para que se ejecute una parte del programa.
 Else if: Siempre va precedido de un "If" e indica una condición para que se ejecute

una parte del programa siempre que no cumpla la condición del if previo y si se

cumpla con la que el "else if" especifique.

 Else: Siempre precedido de "If" y en ocasiones de "Else If". Indica que debe

ejecutarse cuando no se cumplan las condiciones previas.

¿QUE SON LOS BUCLES?

Los bucles son parientes cercanos de los condicionantes, pero ejecutan constantemente

un código mientras se cumpla una determinada condición. Los más frecuentes son:

 For: Ejecuta un código mientras una variable se encuentre entre 2 determinados

parámetros.

 While: Ejecuta un código mientras que se cumpla la condición que solicita.

Hay que decir que a pesar de que existan distintos tipos de bucles, ambos son capaces

de realizar exactamente las mismas funciones. El empleo de uno u otro depende, por lo

general, del gusto del programador.

¿QUE SON LAS FUNCIONES?

Las funciones se crearon para evitar tener que repetir constantemente fragmentos de

código. Una función podría considerarse como una variable que encierra código dentro

de sí. Por lo tanto cuando accedemos a dicha variable (la función) en realidad lo que

estamos haciendo es ordenar al programa que ejecute un determinado código

predefinido anteriormente.
Todos los lenguajes de programación tienen algunos elementos de formación primitivos

para la descripción de los datos y de los procesos o transformaciones aplicadas a estos

datos (tal como la suma de dos números o la selección de un elemento que forma parte

de una colección). Estos elementos primitivos son definidos por reglas sintácticas y

semánticas que describen su estructura y significado respectivamente.

¿QUE ES UN ARBOL?

Un árbol es una estructura de datos no lineal puesto que cada elemento apunta a uno o

varios elementos del mismo tipo; esto es dado un elemento, no hay un único camino a

seguir. El elemento que apunta a otro es llamado padre, mientras que el elemento

apuntado se conoce como hijo. Todos los elementos tienen un padre a excepción de la

raíz. Puede decirse que un árbol está formado por subárboles resaltando así su

naturaleza recursiva.

En la imagen se ilustra un árbol simple:


¿QUE ES UN ARBOL BINARIO?

A los árboles ordenados de grado dos se les conocen como arboles binarios ya que cada

nodo del árbol no tendrá más de dos descendientes directos. Las aplicaciones de los

arboles binarios son muy variadas ya que se les puede utilizar para representar

una estructura en la cual es posible tomar decisiones con dos opciones en distintos

puntos.

La representación gráfica de un árbol binario es la siguiente:

TIPOS DE ARBOLES BINARIOS

Existen cuatro tipos de árbol binario:

 A. B. Distinto.

 A. B. Similares.

 A. B. Equivalentes.

 A. B. Completos.

A continuación se hará una breve descripción de los diferentes tipos de árbol binario

así como un ejemplo de cada uno de ellos.


A. B. DISTINTO

Se dice que dos árboles binarios son distintos cuando sus estructuras son diferentes.

Ejemplo:

A. B. SIMILARES

Dos árboles binarios son similares cuando sus estructuras son idénticas, pero la

información que contienen sus nodos es diferente. Ejemplo:

A. B. EQUIVALENTES

Son aquellos árboles que son similares y que además los nodos contienen la misma

información. Ejemplo:
A. B. COMPLETOS

Son aquellos árboles en los que todos sus nodos excepto los del ultimo nivel, tiene dos

hijos; el subárbol izquierdo y el subárbol derecho.

RECORRIDO DE UN ARBOL BINARIO

Hay tres maneras de recorrer un árbol: en inorden, preorden y postorden. Cada una de

ellas tiene una secuencia distinta para analizar el árbol como se puede ver a

continuación:

INORDEN

 Recorrer el subárbol izquierdo en inorden.

 Examinar la raíz.

 Recorrer el subárbol derecho en inorden.

PREORDEN

 Examinar la raíz.

 Recorrer el subárbol izquierdo en preorden.

 recorrer el subárbol derecho en preorden.

POSTORDEN

 Recorrer el subárbol izquierdo en postorden.

 Recorrer el subárbol derecho en postorden.

 Examinar la raíz.
A continuación se muestra un ejemplo de los diferentes recorridos en un árbol

binario.

Inorden: GDBHEIACJKF

Preorden: ABDGEHICFJK

Postorden: GDHIEBKJFCA

Arboles Enhebrados

Existe un tipo especial de árbol binario llamado enhebrado, el cual contiene hebras que

pueden estar a la derecha o a la izquierda. El siguiente ejemplo es un árbol binario

enhebrado a la derecha.
 ARBOL ENHEBRADO A LA DERECHA. Este tipo de árbol tiene un apuntador a

la derecha que apunta a un nodo antecesor.

 ARBOL ENHEBRADO A LA IZQUIERDA. Estos árboles tienen un apuntador a

la izquierda que apunta al nodo antecesor en orden.

BUSQUEDA DE ARBOLES

Esto implica examinar cada parte del árbol hasta que el vértice o la arista deseada sean

encontrados. Podríamos profundizar moviéndonos a un vértice siempre que sea posible

o podríamos des plegarnos comprobando todos los vértices en un nivel antes de pasar

al siguiente.

 Búsqueda en profundidad:

La idea básica de la búsqueda en profundidad es penetrar tan profundamente como

sea posible antes de desplegarse a otros vértices .Esto se consigue al tomar el nuevo

vértice adyacente al último de los posibles vértices anteriores.


 Búsqueda en anchura:

La idea básica de la búsqueda en anchura es desplegarse a tantos vértices como sea

posible antes de penetrar en profundidad dentro de un árbol. Esto significa que

visitaremos todos los vértices adyacentes a uno dado antes de cambiar de nivel.

2.2. ANÁLISIS DE REQUERIMIENTOS


3. CAPÍTULO III

DISEÑO

3.1 DISEÑO O MODELADO DE DATOS

3.2 DISEÑO DE INTERFAZ


4. CAPÍTULO IV

DESARROLLO Y PRUEBAS DEL SISTEMA

4.1 DESARROLLO DEL SISTEMA

4.2 PRUEBAS DEL SISTEMA


5. CAPÍTULO V

CONCLUSIONES Y RECOMENDACIONES

5.1. CONCLUSIONES

 El portal facilitara la comprensión del tema a los estudiantes mediante ejercicios

y ejemplos de casos prácticos.

5.2. RECOMENDACIONES

 Se sugiere que los estudiantes informen a sus compañeros de la existencia de

este portal web.


6. ANEXOS
7. BIBLIOGRAFÍA

Bibliografía

Abad, F. (s.f.). Manejador de BD. Obtenido de

http://francisco.abad.tripod.com/id16.html

Fuente, E. (25 de Mayo de 2010). Project Kenai. Obtenido de

https://kenai.com/projects/javaquerylanguage/pages/Home

García, Rodríguez , Brazales. (s.f.). En Aprenda Visual Baci 6.0 (pág. 14).

Gutiérrez., J. J. (s.f.). ¿Qué es un Framework Web?

Lógica Matemática. (s.f.). Obtenido de EcuRed:

http://www.ecured.cu/L%C3%B3gica_matem%C3%A1tica

Peñaloza, M. (10 de Febrero de 2015). APLICANDO LA LOGICA

PROPOSICIONAL A LA VIDA DIARIA EVITAREMOS ACCIDENTES. Obtenido

de Prezi: https://prezi.com/_ijmn3m87pyo/aplicando-la-logica-proposicional-a-

la-vida-diaria-evitaremos-accidentes/

Rancel, M. R. (2006). versiones de visual basci. Obtenido de

aprenderaprogramar.com:

http://aprenderaprogramar.com/index.php?option=com_content&view=article&id

=116:versiones-de-visual-basic-ique-es-ies-visual-basic-buen-lenguaje-para-

aprender-a-programar-cu00303a&catid=37:curso-aprender-a-programar-visual-

basic-desde-cero&Itemid=61-https:

Universidad de Murcia. (s.f.). Manual Básico De Creación De Páginas Web.

España.
8. REFERENCIAS BIBLIOGRÁFICAS

Referencias

Abad, F. (s.f.). Manejador de BD. Obtenido de

http://francisco.abad.tripod.com/id16.html

Fuente, E. (25 de Mayo de 2010). Project Kenai. Obtenido de

https://kenai.com/projects/javaquerylanguage/pages/Home

García, Rodríguez , Brazales. (s.f.). En Aprenda Visual Baci 6.0 (pág. 14).

Gutiérrez., J. J. (s.f.). ¿Qué es un Framework Web?

Rancel, M. R. (2006). versiones de visual basci. Obtenido de

aprenderaprogramar.com:

http://aprenderaprogramar.com/index.php?option=com_content&view=article&id

=116:versiones-de-visual-basic-ique-es-ies-visual-basic-buen-lenguaje-para-

aprender-a-programar-cu00303a&catid=37:curso-aprender-a-programar-visual-

basic-desde-cero&Itemid=61-https:

Universidad de Murcia. (s.f.). Manual Básico De Creación De Páginas Web.

España.
9. REFERENCIA GENERAL
ACTA DE CALIFICACIÓN

Proyecto Final

Facilitadora: M.Sc. Ángela Yanza M., Ing. Mg.

Asignatura: Matemáticas Discretas

Paralelo: S1B

Tema: Representación gráfica de árboles en C/C++

Fecha: Febrero, 13 / 2016

Participantes

N° NOMBRES FIRMAS CALIFICACION

1 MOLESTINA SALDAÑA ANTHONY

2 EGAS ARIZALA KEVIN

3 APOLINARIO SUAREZ DANIEL

4 ARIAS MARTINEZ BRYAN

You might also like