Sei sulla pagina 1di 152

UNIVESIDAD TCNICA DE MANAB FACULTAD DE CIENCIAS INFORMTICAS

NIVEL:

SEGUNDO A B C
ING. CHRISTIAN RONALD TORRES MORN

DOCENTE:

PERIODO LECTIVO:

SEPTIEMBRE 2012 FEBRERO 2013

PORTAFOLIO DE ESTRUCTURA DE DATOS PARALELOS A-B-C PERIODO SEPTIEMBRE 2012 FEBRERO 2013

FACULTAD DE CIENCIAS INFORMTICAS

Ing. Christian Ronald Torres Morn

PORTAFOLIO DE ESTRUCTURA DE DATOS PARALELOS A-B-C PERIODO SEPTIEMBRE 2012 FEBRERO 2013

FACULTAD DE CIENCIAS INFORMTICAS

UNIVERSIDAD TCNICA DE MANAB

MISIN:
Formar acadmicos, cientficos y profesionales responsables, humanistas, ticos y solidarios, nacional, comprometidos con los objetivos del desarrollo

que contribuyan a la solucin de los problemas del pas como investigacin, capaces de generar y

universidad de docencia con aplicar nuevos

conocimientos, fomentando la promocin y difusin de los

saberes y las culturas, previstos en la Constitucin de la Repblica del Ecuador.

VISIN:
Ser institucin universitaria, lder y referente de la educacin superior en el Ecuador, promoviendo la creacin, desarrollo, transmisin y difusin de la ciencia, la tcnica y la cultura, con reconocimiento social y proyeccin regional y mundial.

Ing. Christian Ronald Torres Morn

PORTAFOLIO DE ESTRUCTURA DE DATOS PARALELOS A-B-C PERIODO SEPTIEMBRE 2012 FEBRERO 2013

FACULTAD DE CIENCIAS INFORMTICAS

FACULTAD DE CIENCIAS INFORMTICAS

MISIN:
Ser una unidad con alto prestigio acadmico, con eficiencia,

transparencia y calidad en la educacin, organizada en sus actividades, protagonistas del progreso regional y nacional.

VISIN:

Formar profesionales eficientes e innovadores en el campo de las ciencias informticas, que con honestidad, equidad y solidaridad, den respuestas a las necesidades de la sociedad elevando su nivel de vida.

Ing. Christian Ronald Torres Morn

PORTAFOLIO DE ESTRUCTURA DE DATOS PARALELOS A-B-C PERIODO SEPTIEMBRE 2012 FEBRERO 2013

FACULTAD DE CIENCIAS INFORMTICAS

UNIVERSIDAD TCNICA DE MANAB FACULTAD DE CIENCIAS INFORMTICAS CARRERA DE INGENIERA EN SISTEMAS INFORMTIVOS TABLA DE CONTENIDOS

FASE 1: Prontuario del curso

FASE 2: Carta de presentacin

FASE 3: Diario metacognitivo

FASE 4: Artculos de revistas profesionales

FASE 5: Trabajo de ejecucin

FASE 6: Materiales relacionados con la clase

FASE 7: Resumen de cierre

FASE 8: Anexos

Ing. Christian Ronald Torres Morn

PORTAFOLIO DE HERRAMIENTAS WEB PERIODO SEPTIEMBRE 2012 FEBRERO 2013

FACULTAD DE CIENCIAS INFORMTICAS CURRICULUM DEL DOCENTE

Curriculum Vitae
Datos Personales
Facultad : Nombres : Apellidos : Fecha de Nacimiento : Lugar de Nacimiento : Direccin Domiciliaria : Cdula de Identidad: Telfono celular Telfono en casa Direccin Electrnica Facultad de Ciencias Informticas Christian Ronald Torres Morn 15 de Junio de 1980 Portoviejo Manab Filemn Macas y Baquerizo M. 130876534-4 (08) 6-076851 (09) 2-564708 (05) 2638507 ChristianTorres_Black@hotmail.com.ec

Estudios realizados
Escuela CENTRO ESCOLAR FRANCISCO Estudios Primarios : PACHECO - Portoviejo Manab Estudios Secundarios : Colegio Ciclo Bsico Paulo Emilio Macas S - Portoviejo Manab Instituto Tcnico Superior Paulo Emilio

Ing. Christian Ronald Torres Morn

PORTAFOLIO DE HERRAMIENTAS WEB PERIODO SEPTIEMBRE 2012 FEBRERO 2013

FACULTAD DE CIENCIAS INFORMTICAS CURRICULUM DEL DOCENTE

Macas S.- Portoviejo-Manab


Ttulo obtenido : Bachiller MECNICA

INDUSTRIAL Estudios Superiores : Tercer Nivel Universidad Tcnica de Manab UTM Portoviejo Manab

Ttulo: Ingeniero en Sistemas

Informticos Cuarto Nivel Universidad Estatal del Sur de Manab UNESUM Jipijapa - Manab

Ttulo: Magister en Gerencia Educativa

Experiencia de Trabajo

Colegio Fiscal Mixto Dr. Camilo Gallegos Domnguez

Profesor de Computacin General, Computacin aplicada la Contabilidad, y Estadsticas. Portoviejo Manab


Periodo 2004-2005

Colegio Nacional Agropecuario Honorato Vsquez

Profesor de Computacin General, Computacin aplicada la Contabilidad, y Estadsticas. Portoviejo Manab


Desde Abril/2005 hasta la actualidad

Colegio Nacional PEDRO ZAMBRANO BARCIA

Ing. Christian Ronald Torres Morn

PORTAFOLIO DE HERRAMIENTAS WEB PERIODO SEPTIEMBRE 2012 FEBRERO 2013

FACULTAD DE CIENCIAS INFORMTICAS CURRICULUM DEL DOCENTE

Profesor de Computacin General, Matemticas y Dibujo Tcnico. Portoviejo Manab


Desde Abril/2007 31 /Enero/2008

Instituto de la Niez y la Familia (INFA)

Asistente de tecnologas de la informacin. Portoviejo Manab


Desde 05 Enero/2009 hasta 03/03/2012

Catedrtico de la Facultad de Ciencias (Ingeniera de Sistemas)


Materia dictada : Informtica Bsica ( nivelacin SBU) Proteccin de la informacin Matemticas Financiera Informtica Calculo Diferencial Estructura de Datos Programacin Visual .NET Programacin en Borland C Herramientas Case

Portoviejo Manab
Desde el periodo Octubre/2006- marzo/2007 hasta la actualidad

Cursos y Seminarios realizados

i.

Seminario de ASPECTOS PSICOPEDAGOGICOS DE LA DOCENCIA Centro de Estudios de POSGRADO de la Universidad Tcnica de Manab. 40 horas de duracin.

ii.

Seminario de EVALUACION EDUCATIVA Centro de Estudios de POSGRADO de la Universidad Tcnica de Manab.

Ing. Christian Ronald Torres Morn

PORTAFOLIO DE HERRAMIENTAS WEB PERIODO SEPTIEMBRE 2012 FEBRERO 2013

FACULTAD DE CIENCIAS INFORMTICAS CURRICULUM DEL DOCENTE

40 horas de duracin. iii. Seminario de PLANIFICACION EDUCATIVA Centro de Estudios de POSGRADO de la Universidad Tcnica de Manab. 40 horas de duracin. iv. Seminario de INVESTIGACIN FORMATIVA Vicerrectorado Acadmico de la Universidad Tcnica de Manab. 20 horas de duracin. v. Seminario Taller sobre Evaluacin Institucional sobre la base de los estndares del MINEDUC Universidad Laica Eloy Alfaro de Manab Extensin Chone. 30 horas de duracin. Desde el 27 hasta el 28 de julio de 2012 vi. Desarrollo de aplicaciones para dispositivos mviles con Android GENESIS Sistemas Informticos 30 horas de duracin Desde el 31 de agosto hasta el 02 de septiembre de 2012

vii.

Mdulo de Tutora de las Investigacin Centro de Estudios de Posgrado - Universidad Estatal del Sur de Manab. 48 horas de duracin. Durante 21 de octubre, 04 de noviembre y 18 de noviembre de 2011

viii.

Mdulo de Gerencia Educativa Centro de Estudios de Posgrado - Universidad Estatal del Sur de Manab. 48 horas de duracin. Durante 09 de septiembre, 23 de septiembre y 07 de octubre de 2011
4

Ing. Christian Ronald Torres Morn

PORTAFOLIO DE HERRAMIENTAS WEB PERIODO SEPTIEMBRE 2012 FEBRERO 2013

FACULTAD DE CIENCIAS INFORMTICAS CURRICULUM DEL DOCENTE

ix.

Mdulo de Evaluacin de Instituciones Educativas Centro de Estudios de Posgrado - Universidad Estatal del Sur de Manab. 48 horas de duracin. Durante 29 de julio, 12 de agosto y 26 de agosto de 2011

x.

Mdulo de Planificacin y Ejecucin de Eventos Educativos Centro de Estudios de Posgrado - Universidad Estatal del Sur de Manab. 48 horas de duracin. Durante 16 de junio, 30 de junio y 14 de julio de 2011

xi.

Mdulo de Planificacin Estratgica Centro de Estudios de Posgrado - Universidad Estatal del Sur de Manab. 48 horas de duracin. Durante 17 de junio, 01 de julio y 15 de julio de 2011

xii.

Curso de Aulas Virtuales bajo MOODDLE Facultad de Ciencias Informticas - Universidad Tcnica de Manab. 40 horas de duracin. Desde el 20 hasta el 24 de junio de 2011

xiii.

Mdulo de Diseo de Proyectos Educativos y Sociales Centro de Estudios de Posgrado - Universidad Estatal del Sur de Manab. 48 horas de duracin. Durante 06 de mayo, 20 de mayo y 03 de junio de 2011

xiv.

Mdulo de Diseo Curricular Centro de Estudios de Posgrado - Universidad Estatal del Sur de Manab.

Ing. Christian Ronald Torres Morn

PORTAFOLIO DE HERRAMIENTAS WEB PERIODO SEPTIEMBRE 2012 FEBRERO 2013

FACULTAD DE CIENCIAS INFORMTICAS CURRICULUM DEL DOCENTE

48 horas de duracin. Durante 25 de marzo, 08 de abril y 22 de abril de 2011 xv. Mdulo de Estrategias Metodolgicas para el aprendizaje significativo Centro de Estudios de Posgrado - Universidad Estatal del Sur de Manab. 48 horas de duracin. Durante 11 de febrero, 25 de febrero y 11 de marzo de 2011 xvi. Mdulo de Investigacin Socio Educativa Centro de Estudios de Posgrado - Universidad Estatal del Sur de Manab. 48 horas de duracin. Durante 31 de diciembre, 14 de enero y 28 de enero de 2011 xvii. Mdulo de Educacin Potencializadora Centro de Estudios de Posgrado - Universidad Estatal del Sur de Manab. 48 horas de duracin. Durante 19 de noviembre, 03 de diciembre y 17 de diciembre de 2010

xviii.

Mdulo de Realidad Educativa Nacional y los Nuevos escenarios Centro de Estudios de Posgrado - Universidad Estatal del Sur de Manab. 48 horas de duracin. Durante 08 de octubre, 22 de octubre y 05 de noviembre de 2010

xix.

Mdulo de Gestin de la Calidad Centro de Estudios de Posgrado - Universidad Estatal del Sur de Manab. 48 horas de duracin. Durante 27 de agosto, 10 de septiembre y 24 de septiembre de 2010

Ing. Christian Ronald Torres Morn

PORTAFOLIO DE HERRAMIENTAS WEB PERIODO SEPTIEMBRE 2012 FEBRERO 2013

FACULTAD DE CIENCIAS INFORMTICAS CURRICULUM DEL DOCENTE

xx.

Mdulo de Trabajo en equipo, negociacin y resolucin de conflictos Centro de Estudios de Posgrado - Universidad Estatal del Sur de Manab. 48 horas de duracin. Durante 16 de julio, 30 de julio y 13 de agosto de 2010

xxi.

1er Congreso Internacional de Software Libre Facultad de Ciencias Informticas - Universidad Tcnica de Manab. 30 horas de duracin. Desde el 20 hasta el 22 de enero de 2011

xxii.

Seminario de Alto Nivel sobre Calidad de Software CMMI Centro de Capacitacin y Emprendimiento informtico de la Facultad de Ciencias Informticas - Universidad Tcnica de Manab. 12 horas de duracin. Desde el 13 hasta el 14 de enero de 2011

xxiii.

Seminario sobre Introduccin a la Calidad de Software Centro de Certificacin de la calidad Software - Universidad del Pacfico. 12 horas de duracin. Desde el 13 hasta el 14 de enero de 2011

xxiv.

Mdulo de Liderazgo Educativo Centro de Estudios de Posgrado - Universidad Estatal del Sur de Manab. 48 horas de duracin. Durante 04 de junio, 18 de junio y 02 de julio de 2010

xxv.

1er Congreso de Ciencias y Tecnologas FCI-UTM 1010 Facultad de Ciencias Informticas - Universidad Tcnica de Manab. 20 horas de duracin.

Ing. Christian Ronald Torres Morn

PORTAFOLIO DE HERRAMIENTAS WEB PERIODO SEPTIEMBRE 2012 FEBRERO 2013

FACULTAD DE CIENCIAS INFORMTICAS CURRICULUM DEL DOCENTE

Desde el 7 hasta el 9 de julio de 2010 xxvi. Mdulo de Lectura Comprensiva del Idioma Ingls Centro de Estudios de Posgrado - Universidad Estatal del Sur de Manab. 48 horas de duracin. Durante 23 de abril, 07 de mayo y 21 de mayo de 2010 xxvii. Mdulo de Ofimtica y las Tics Centro de Estudios de Posgrado - Universidad Estatal del Sur de Manab. 48 horas de duracin. Durante 12 de marzo, 26 de marzo y 09 de abril de 2010 xxviii. Seminario de Desarrollo de Aplicaciones en Java Facultad de Ciencias Informticas - Universidad Tcnica de Manab. 30 horas de duracin. Durante los das viernes 21 y 28, sbados 22 y 29 de Mayo del 2010

xxix.

Primeras Jornadas Acadmicas sobre Sistemas de Informacin Geo referencial Universidad Tcnica de Manab y Escuela Superior Politcnica del Chimborazo 20 horas de duracin. Desde el 26 hasta el 27 de junio de 2009

xxx.

Curso de Fundamentos de UNIX SOL&TECH- Soluciones y Tecnologa. 50 horas de duracin. Desde el 11 hasta el 21 de diciembre de 2008

Seminario de PROCESAMIENTOS DE IMGENES Universidad Tcnica de Manab.

Ing. Christian Ronald Torres Morn

PORTAFOLIO DE HERRAMIENTAS WEB PERIODO SEPTIEMBRE 2012 FEBRERO 2013

FACULTAD DE CIENCIAS INFORMTICAS CURRICULUM DEL DOCENTE

Seminario de LABORATORIO DE REDES Universidad Tcnica de Manab. Seminario de PROTECCION DE LA INFORMACION Universidad Tcnica de Manab. Seminario de Oracle 9 i Universidad Tcnica de Manab Mdulos de Idioma INGLES Universidad Tcnica de Manab. Mdulos de Fundamentos de UNIX SOL&TECH- Soluciones y Tecnologa.

Ing. Christian Ronald Torres Morn

PORTAFOLIO DE HERRAMIENTAS WEB PERIODO SEPTIEMBRE 2012 FEBRERO 2013

FACULTAD DE CIENCIAS INFORMTICAS CURRICULUM DEL DOCENTE

CARTA DE PRESENTACIN
Este portafolio presenta el conocimiento adquirido a lo largo del curso de:
ESTRUCTURA DE DATOS, este curso tuvo como objetivo ensear a los

estudiantes las

destrezas

habilidades

que

como estudiantes

universitarios deben conocer y dominar, todo esto con el fin de enfrentarse a las adversidades de la vida diaria y que con ganas, esfuerzo y dedicacin puede llegar a alcanzar tal meta.

Ing. Christian Ronald Torres Morn

10

PORTAFOLIO DE HERRAMIENTAS WEB PERIODO SEPTIEMBRE 2012 FEBRERO 2013

FACULTAD DE CIENCIAS INFORMTICAS SYLLABUS

UNIVERSIDAD TCNICA DE MANAB


CARRERA DE INGENIERA EN SISTEMAS INFORMTICOS

FACULTAD DE CIENCIAS INFORMTICAS SYLLABUS

I.- INFORMACIN GENERAL FACULTAD/DEPARTAMENTO: FACULTAD DE CIENCIAS INFORMTICAS CARRERA: INGENIERA EN SISTEMAS INFORMTICOS ASIGNATURA/MDULO: ESTRUCTURA DE DATOS CDIGO: OF-0201 Nivel / Semestre: 2 N de Crditos:5 Modalidad : Presencial Paralelo: A,B, C Perodo Acadmico: Sept. 25/2012 Feb 14/2013 rea Acadmica: SOFTWARE PRERREQUISITO (S): CORREQUISITO (S):
CONTENIDOS DISCIPLINARES QUE DEBEN SER APROBADAS ANTES DE CURSAR ESTE CONTENIDO DISCIPLINAR CDIGO CONTENIDOS DISCIPLINARES QUE DEBEN SER CURSADOS AL MISMO TIEMPO QUE ESTE CONTENIDO DISCIPLINAR CDIGO

PROGRAMACIN I

OC-0100

DOCENTE: Ing. CHRISTIAN RONALD TORRES MORN Ttulo: MAGITER EN GERENCIA EDUCATIVA E-mail: crtorres@utm.edu.ec Datos personales: Profesor contratado a tiempo completo de la asignatura Estructura de Datos, y Herramientas Web
Director de Tesis de Ingeniera en Sistemas Informticos, miembro de los equipos de Vinculacin con la sociedad, Docente Tutor de pasantas pre profesionales, coautor del manual de Estructura de Datos junto a la Ing. Esthela San Andrs Lz, coautor del folleto de flujogramas para NBU.

II.- RUTA FORMATIVA a.- DEL PERFIL DE EGRESO: Competencia/Resultado de Aprendizaje: Competencia: Resultado de Aprendizaje:
3. Construye soluciones informticas de calidad que mejoren la eficiencia y eficacia de una organizacin haciendo uso correcto de la tecnologa. a. Capacidad de planificar, disear, conducir e interpretar resultados de experimentos orientados a la informtica.

b.- OBJETIVO GENERAL DE LA ASIGNATURA: c.- DESCRIPCIN DE LA ASIGNATURA:

Capacitar al estudiante con los conocimientos significativos en administracin de memoria dinmica y herramientas tiles en los diseos, construcciones y usos principales de algoritmos en la estructuracin de datos lineales y no lineales La materia introduce al estudiante a los conceptos y aplicacin en la administracin de memoria, aplicando programacin estructurada y orientada a objetos, permite conocer la estructura bsica operacional de la memoria RAM y de los grandes diseos de software, aplicando C++ el estudiante desarrollar proyectos cientficos tanto con interfaces en modo grfico y en modo texto, tomando como referencia aplicaciones en el campo general de otras carreras.

III.- RESULTADOS DE APRENDIZAJE DE LA ASIGNATURA


1

Ing. Christian Ronald Torres Morn

PORTAFOLIO DE HERRAMIENTAS WEB PERIODO SEPTIEMBRE 2012 FEBRERO 2013

FACULTAD DE CIENCIAS INFORMTICAS SYLLABUS

Resultados del Aprendizaje (Objetivos Especficos)

Formas de Evidenciarlos
(Apreciacin)

Niveles del resultado de aprendizaje

Ponderacin

Describir la definicin de la estructura de datos, los tipos de datos simples, bsicos y compuestos en un ensayo tcnico con: descripcin general del tema clara; ideas que tienen relacin, claridad y objetividad con el tema; y una conclusin clara con aporte personal.

NIVEL ALTO: 86-100

1.- Identificar los tipos estructurados de datos estticos y dinmicos empleados en la creacin de aplicaciones, considerando los lenguajes de programacin. (Nivel Taxonmico: Conocimiento)

1.- Pruebas escritas, orales (fotos), talleres, informes de ensayo, investigacin y Prcticas en el Lenguaje de programacin C++.

Describir la definicin de la estructura de datos, los tipos de datos simples, bsicos y compuestos en un ensayo tcnico con: descripcin general del tema confusa; pocas ideas que tienen relacin, claridad y objetividad con el tema; y una conclusin confusa con aporte personal.

NIVEL MEDIO 71-85

Describir la definicin de la estructura de datos, los tipos de datos simples, bsicos y compuestos en un ensayo tcnico con: descripcin general del tema confusa; poca o ninguna idea que tienen relacin, claridad y objetividad con el tema; y una conclusin confusa sin aporte personal.

NIVEL BSICO 70

2.- Elaborar aplicaciones dinmicas de estructura lineal, almacenamiento y recuperacin de los mismos en unidades de almacenamiento, aplicarn soluciones de administracin de memoria mediante el desarrollo de aplicaciones cientficas y comerciales. (Nivel Taxonmico: Aplicacin)

Comparar con la utilizacin de un cuadro comparativo tres semejanzas y tres diferencias entre los tipos de datos que permiten almacenar ms de un dato; reflejando las relaciones de las comparaciones con ideas claras.

NIVEL ALTO: 86-100

2.- Pruebas escritas, orales (fotos), talleres, informes de ensayo, investigacin y Prcticas en el Lenguaje de programacin C++.

Comparar con la utilizacin de un cuadro comparativo tres semejanzas y tres diferencias entre los tipos de datos que permiten almacenar ms de un dato; reflejando las relaciones de las comparaciones con ideas pocos claras.

NIVEL MEDIO 71-85

Comparar con la utilizacin de un cuadro comparativo dos semejanzas y dos diferencias entre los tipos de datos que permiten almacenar ms de un dato; reflejando las relaciones de las comparaciones con ideas confusas.

NIVEL BSICO 70

Ing. Christian Ronald Torres Morn

PORTAFOLIO DE HERRAMIENTAS WEB PERIODO SEPTIEMBRE 2012 FEBRERO 2013

FACULTAD DE CIENCIAS INFORMTICAS SYLLABUS

3.Implementar aplicaciones dinmicas de estructura Lineal, almacenamiento y recuperacin de los mismos en unidades de almacenamiento, aplicarn soluciones de administracin de memoria mediante el desarrollo de aplicaciones cientficas y comerciales (Nivel Taxonmico: Aplicacin)

Implementar aplicaciones dinmicas de estructura Lineal, almacenamiento y recuperacin de los mismos en unidades de almacenamiento, aplicarn soluciones de administracin de memoria mediante el desarrollo de aplicaciones cientficas y comerciales.

NIVEL ALTO: 86-100

3.- Pruebas escritas, orales (fotos), talleres, informes de ensayo, investigacin y Prcticas en el Lenguaje de programacin C++.

Implementar aplicaciones dinmicas de estructura Lineal, almacenamiento y recuperacin de los mismos en unidades de almacenamiento, aplicarn soluciones de administracin de memoria mediante el desarrollo de aplicaciones comerciales.

NIVELMEDIO 71-85

Implementar aplicaciones dinmicas de estructura No Lineal, almacenamiento y recuperacin de los mismos en unidades de almacenamiento.

NIVEL BSICO 70

4.Implementar aplicaciones dinmicas de estructura no Lineal, almacenamiento y recuperacin de los mismos en unidades de almacenamiento, aplicarn soluciones de administracin de memoria mediante el desarrollo de aplicaciones cientficas y comerciales (Nivel Taxonmico: Aplicacin)

Elaborar un programa con estructuras dinmicas no lineales bien detallado.

NIVEL ALTO: 86-100

4.- Pruebas escritas, orales (fotos), talleres, informes de ensayo, investigacin y Prcticas en el Lenguaje de programacin C++.

Elaborar un programa con estructuras dinmicas no lineales con poca claridad.

NIVEL MEDIO 71-85

Elaborar un programa con estructuras dinmicas no lineales de forma confusa.

NIVEL BSICO 70

Elaborar un programa que emplee estructuras arborescentes de forma AVL uso de forma clara.

NIVEL ALTO: 86-100

5.- Organizar la informacin en algoritmos y estructuras AVL y su relacin con los gestores de Base de Datos (Nivel Taxonmico: Aplicacin)

5.- Pruebas escritas, orales (fotos), talleres, informes de ensayo, investigacin y Prcticas en el Lenguaje de programacin C++.

Elaborar un programa que emplee estructuras arborescentes de forma AVL de forma poco clara.

NIVEL MEDIO 71-85

Elaborar un programa que emplee estructuras arborescentes de forma AVL de forma confusa.

NIVEL BSICO 70

Ing. Christian Ronald Torres Morn

PORTAFOLIO DE HERRAMIENTAS WEB PERIODO SEPTIEMBRE 2012 FEBRERO 2013

FACULTAD DE CIENCIAS INFORMTICAS SYLLABUS

IV.- PROGRAMACIN
PROGRAMA DEL CONTENIDO DISCIPLINAR (ASIGNATURA, UNIDAD, CURSO, TALLER, OTRO) POR TEMAS N TOT AL HOR AS P-A
46 23 Experiencia: Aplicando concretar lluvia de ideas

HORAS PRESENCIALES

HORAS AUTNOMAS

ESTRATEGIAS PARA EL TRABAJO AUTNOMO

1.

UNIDAD I: GENERALIDADES Y
DEFINICIONES DE ESTRUCTURA DE DATOS

conocimientos

Definicin Variables, Tipos de datos. Representacin Grfica de las estructura de datos Acceso a las estructura de Datos (Estticas) Tipos de Estructuras de Datos Diferencia Operaciones punteros Asignacin memoria Liberacin memoria La constante NULL Ventajas punteros y desventajas de dinmica de dinmica de entre con gestin varios Esttica y Dinmica

relativo a la memoria y sus diferentes importancias en el funcionamiento computador Reflexin: En equipos de trabajo, analizar el funcionamiento general del computador y de los programas, considerando las siguientes aplicaciones: Procesadores de texto, Hojas de clculo, Reproductores, Tareas del sistema operativo como Impresin, etc. Conceptualizacin: Elaboracin conceptuales, de la memoria. Aplicacin: Resolucin demostrativos de ejercicios y de de mapas de del

23 Tareas extraclases. Investigacin del tema de la unidad Tareas en el lenguaje de programacin C++. CD. interactivo libros PDF. Apoyo para el estudiante, Espacio virtual de la Universidad Tcnica de Manab, Internet. Guardar la evidencia en el Portafolio Digital.

-Formarn equipos de 2 estudiantes -Del taller o tarea respectivas se escogern ejercicios representativos de acuerdo al resultado de aprendizaje -Se aplicar la tcnica de procesos. -Al final de la tarea se interrogarn, as: Qu cosas fueron difciles? Qu cosas fueron fciles? Qu aprend hoy da? Qu aporte a mi equipo? -Aplicarn un ASAT. (Aporte Significativo de Aprendizaje de la Tarea o Taller). -Para el ensayo del tema respetivo se Tomarn lo lineamientos ms importantes de la introduccin llamativa, fundamentacin y conclusin crtica.

cuadros

funcionamiento y estructurales

planteamiento de problemas.

2.

UNIDAD II: ESTRUCTURAS SIMPLES


Y COMPUESTAS

60

30 Experiencia: Aplicando lluvia a de ideas

Listas Abiertas Definicin de listas abiertas Declaracin e implementacin de una lista

concretar relativo

conocimientos problemas

informticos planteados

Operaciones con Listas

Reflexin: En grupos de trabajo, analizar

30 Tareas extraclases. Investigacin del tema de la unidad Tareas en el lenguaje de programacin C++. CD. interactivo libros PDF. Apoyo para el estudiante,

-Formarn equipos de 2 estudiantes -Del taller o tarea respectivas se escogern ejercicios representativos de acuerdo al resultado de aprendizaje -Se aplicar la tcnica de procesos. -Al final de la tarea se interrogarn, as: Qu cosas fueron difciles? Qu cosas fueron fciles? Qu aprend hoy da? Qu aporte a mi equipo? -Aplicarn un ASAT. (Aporte Significativo de Aprendizaje de 4

Ing. Christian Ronald Torres Morn

PORTAFOLIO DE HERRAMIENTAS WEB PERIODO SEPTIEMBRE 2012 FEBRERO 2013


Insercin de un nodo Bsqueda de un nodo Recorridos de una lista Eliminacin de un nodo Listas y Archivos Variaciones de listas Pilas y Colas Conceptualizacin:

FACULTAD DE CIENCIAS INFORMTICAS SYLLABUS


el funcionamiento general de los diferentes las algoritmos diferentes considerando aplicaciones.

Espacio virtual de la Universidad Tcnica de Manab, Internet. Guardar la evidencia en el Portafolio Digital.

la Tarea o Taller). -Para el ensayo del tema respetivo se Tomarn lo lineamientos ms importantes de la introduccin llamativa, fundamentacin y conclusin crtica.

Elaboracin de conclusiones conceptuales, cuadros de funcionamiento y alternativas estructurales de solucin.

Listas circulares o cerradas Declaracin e implementacin de una lista circular

Aplicacin: Resolucin demostrativos de ejercicios y de

Operaciones con Listas Insercin de un nodo Bsqueda de un nodo Recorridos de una lista Eliminacin de un nodo

planteamiento de problemas.

Listas doblemente enlazadas abiertas y cerradas Declaracin e implementacin de una lista doblemente enlazada

Operaciones con Listas Insercin de un nodo Bsqueda de un nodo Recorridos de una lista Eliminacin de un nodo

3.

UNIDAD

III:

ESTRUCTURAS

26

13 Experiencia: Aplicando la debates de su

ARBORESCENTES

Definicin, implementacin

definir rboles

importancia binarios y

aplicar algoritmos generales de importancia en la agilidad y seguridad de los datos en el campo empresarial en general. Reflexin:

Tipos de PreOrden InOrden PostOrden

recorridos:

Operaciones con rboles Binarios de Bsqueda

En

grupos

de

13 Tareas extraclases. Investigacin del tema de la unidad Tareas en el lenguaje de programacin C++. CD. interactivo libros PDF. Apoyo para el estudiante, Espacio virtual de la Universidad

-Formarn equipos de 2 estudiantes -Del taller o tarea respectivas se escogern ejercicios representativos de acuerdo al resultado de aprendizaje -Se aplicar la tcnica de procesos. -Al final de la tarea se interrogarn, as: Qu cosas fueron difciles? Qu cosas fueron fciles? Qu aprend hoy da? Qu aporte a mi equipo? -Aplicarn un ASAT. (Aporte Significativo de Aprendizaje de la Tarea o Taller). -Para el ensayo del tema respetivo se Tomarn lo

Ing. Christian Ronald Torres Morn

PORTAFOLIO DE HERRAMIENTAS WEB PERIODO SEPTIEMBRE 2012 FEBRERO 2013


trabajo, Bsqueda de Insercin de Borrado de * Nodo hoja. *Nodo rama. Movimiento a travs del rbol. Comprobacin de rboles vacos. Comprobacin del nodo hoja. Clculo de: Nmero de nodos. Aplicacin: Altura del rbol. Altura de un nodo. Resolucin elementos. elementos. elementos. principales avance analizar

FACULTAD DE CIENCIAS INFORMTICAS SYLLABUS


el sistemas tecnolgico del

funcionamiento general de los informticos, considerando el software en la base de datos Conceptualizacin: Elaboracin de

Tcnica de Manab, Internet. Guardar la evidencia en el Portafolio Digital.

lineamientos ms importantes de la introduccin llamativa, fundamentacin y conclusin crtica.

propuestas resolucin.

algortmicas,

prcticas y de alternativas de

de

ejercicios demostrativos y de planteamiento de problemas. 28 14 Experiencia: Aplicando el planteamiento de problemas, dificultades y de necesidad identificar generar la encontrar

rboles degenerados.

4.

UNIDAD IV: TIPOS DE RBOLES


ESPECIALES rboles equilibrados. Definicin. Operaciones en AVL. Factor de equilibrio. Rotacin simple de nodos. Rotacin simple a la derecha. Rotacin simple a la izquierda. Rotacin doble de nodos a la derecha. Rotacin doble de nodos s la izquierda. Reequilibrados de rboles AVL. Reequilibrados en rboles AVL por insercin de un nodo. Reequilibrados en rboles AVL por borrado de un nodo.

soluciones algortmicas. Reflexin: En grupos de trabajo, analizar el funcionamiento de los diferentes propuestos. Conceptualizacin: Elaboracin de propuestas de funcionamiento y alternativas estructurales de solucin. Aplicacin: Resolucin demostrativos de ejercicios y de algoritmos

14 Tareas extraclases. Investigacin del tema de la unidad Tareas en el lenguaje de programacin C++. CD. interactivo libros PDF. Apoyo para el estudiante, Espacio virtual de la Universidad Tcnica de Manab, Internet. Guardar la evidencia en el Portafolio Digital.

-Formarn equipos de 2 estudiantes -Del taller o tarea respectivas se escogern ejercicios representativos de acuerdo al resultado de aprendizaje -Se aplicar la tcnica de procesos. -Al final de la tarea se interrogarn, as: Qu cosas fueron difciles? Qu cosas fueron fciles? Qu aprend hoy da? Qu aporte a mi equipo? -Aplicarn un ASAT. (Aporte Significativo de Aprendizaje de la Tarea o Taller). -Para el ensayo del tema respetivo se Tomarn lo lineamientos ms importantes de la introduccin llamativa, fundamentacin y conclusin crtica.

planteamiento de problemas.

V.- METODOLOGA Y RECURSOS


Se aplicar un PEA, Dinmica de integracin y socializacin, documentacin, presentacin de los temas de clase y objetivos, lectura de motivacin y video del tema, tcnica lluvia de ideas, para interactuar entre los receptores, aplicando el ciclo del aprendizaje. Se aplicaran talleres con ASAT (aporte significativos de los aprendizajes de tareas o talleres) Revisin de la clase programada antes del da sealado para la sesin correspondiente (blog-docente)

Ing. Christian Ronald Torres Morn

PORTAFOLIO DE HERRAMIENTAS WEB PERIODO SEPTIEMBRE 2012 FEBRERO 2013


FACULTAD DE CIENCIAS INFORMTICAS SYLLABUS

Consultas, tareas y talleres se entregarn en archivo escrito al docente y en archivo lgico al rea de contacto del curso. Los recursos disponibles para el curso sern: pizarra tiza lquida(4), proyector, internet inalmbrico, dispensador de agua, aire acondicionado, mesas de trabajo en equipo, proyector para equipos de trabajos en su lugar respectivo, sistema de audio, impresora de ltima generacin, computadores(2) del aula,1 porttiles por equipo del estudiante, libros-CD-interactivo- pdf., blog. del estudiante y del docente para interactividad y fortalecimiento contino.

Las evaluaciones estarn orientadas a los procesos, lo que conlleva a que ninguna evaluacin tenga una ponderacin determinante para la acreditacin. Durante el periodo acadmico, el estudiante de la Universidad Tcnica de Manab, se someter obligatoriamente a los siguientes parmetros de evaluacin de los aprendizajes: evaluacin de medio ciclo, evaluacin de final de ciclo, evaluacin de actividades varias y evaluaciones de investigaciones.

VI.- PLANEACIN DE LA EVALUACIN

ACREDITACIN
EXMENES (30%) ACT. EN EL AULA (40%) Tareas Ejercicios de aplicacin Lecciones orales Pruebas escritas Participacin Exposiciones ACTIVIDADES DE INVESTIGACIN PORTAFOLIO PROYECTO INFORME FINAL (30%) TOTAL

MEDIO CICLO
15 5 2.5 2.5 5 2.5 2.5 5 10 50%

FINAL DE CICLO
15 5 2.5 2.5 5 2.5 2.5 5 10 50%

EXAMEN DE RECUPERACIN

ASISTENCIA

100%

Ing. Christian Ronald Torres Morn

PORTAFOLIO DE HERRAMIENTAS WEB PERIODO SEPTIEMBRE 2012 FEBRERO 2013

FACULTAD DE CIENCIAS INFORMTICAS SYLLABUS

VI.- BIBLIOGRAFA a.- Bibliografa Bsica:


AUTOR

TTULO DE LIBRO

EDICIN

AO PUBLICACIN

EDITORIAL

MARTNEZ, Romn

TORRES, Christian

Estructura de Datos, Referencia practica con objetos orientados a objetos Manuales de estructura de Datos en C++
TTULO DE LIBRO EDICIN

7 1

2008 2010

Elda Quiroga Estudiantil-FCI-UTM. Ecuador


EDITORIAL

b.- Bibliografa Recomendada:


AUTOR

AO PUBLICACIN

Garrido Antonio

c.- Lecturas complementarias:


Abstraccin y Estructura de Datos en C++

2006

Delta Publicaciones S. L.

http://c.conclase.net/edd/. http//www.utm.edu.ec http://evirtual.utm.edu.ec/course/view.php?id=25 robotica.uv.es/pub/Libro/PDFs/CAPI5.pdf www.dc.uba.ar ... Algoritmos y Estructuras de Datos II http://www.programacion.com/articulo/estructuras_de_datos_y_algoritmos_en_java_309/2 http://www.youtube.com/watch?v=tOOEff1r-tk

VII.- COMPROMISO TICO


Escuchar y respetar democrticamente el criterio de los dems. Hacer silencio cuando alguien est haciendo uso de la palabra. Mantener el aula limpia, evitando botar basura en el piso No deteriorar ni rayar, las paredes, mesas y sillas. Procurar en todo momento la correcta manipulacin y utilizacin de los equipos informticos. La asistencia es obligatoria a todas las actividades programadas en esta asignatura. El estudiante ingresar a clase a la hora establecida y solo por una ocasin se aceptar el retraso de 10 minutos. El estudiante por ningn concepto utilizar celulares en el aula, igual comportamiento tendr el docente. El intento de copia de cualquier estudiante ser sancionado con la calificacin de cero y no habr oportunidad de recuperacin, independiente de las sanciones establecidas por la universidad. Los trabajos se entregarn en la fecha establecida y no se recibir en otra oportunidad. El estudiante ingresar al aula sin gorra y no consumir alimentos dentro del aula. El trabajo escrito ser realizado con las propias palabras e ideas del estudiante. Si se descubre la copia textual de un prrafo o un texto se calificar con cero.

Lugar y fecha: Portoviejo, 5 de Noviembre del 2012

Ing. Christian Ronald Torres Morn (f) Docente ANEXO. N 1

(f) Coordinador

RESULTADOS DE APRENDIZAJE DE LA CARRERA ESPECFICOS A LOS QUE APUNTA LA MATERIA (ABET).

Ing. Christian Ronald Torres Morn

PORTAFOLIO DE HERRAMIENTAS WEB PERIODO SEPTIEMBRE 2012 FEBRERO 2013

FACULTAD DE CIENCIAS INFORMTICAS SYLLABUS

a. b. c.

Capacidad de realizar anlisis, sntesis y aplicacin de las matemticas y ciencias bsicas en la solucin de problemas de ingeniera en sistemas informticos. Capacidad de planificar, disear, conducir e interpretar resultados de experimentos orientados a la informtica. La capacidad de disear sistemas, procesos, modelos y componentes informticos que cumplan los estndares nacionales o internacionales, tomando en cuenta las limitaciones econmicas, ambientales, sociales, polticas, de salud y seguridad del entorno, y cumpliendo satisfactoriamente con las especificaciones y restricciones existentes o indicadas por los interesados o por los criterios de sostenibilidad. Capacidad para funcionar como parte de un equipo de profesionales de distintas reas del conocimiento, demostrando una efectiva cooperacin, comunicacin, con habilidades para resolver conflictos y contribuyendo proactivamente en la propuesta de lneas estratgicas desde el punto de vista informtico, para la solucin de problemas. Capacidad para identificar, formular, evaluar y resolver tcnicamente ingeniera planteados de acuerdo a las necesidades del medio. problemas de

d.

e. f.

Capacidad para comprender, reconocer y aplicar valores y cdigos de tica profesional, que le permitan desenvolverse sin perjudicar a sus clientes y contribuyendo al desarrollo de la sociedad. Habilidad para presentar efectivamente, ideas, proyectos, informes de investigaciones, documentos de trabajo de manera escrita, oral y digital, utilizando las herramientas de las nuevas tecnologas de la informacin. Habilidad y capacidad para comprender el impacto de las soluciones informticas a la realidad local, nacional e internacional en un contexto econmico global, ambiental y social. Habilidad y aptitud para ser un profesional con el compromiso del aprendizaje continuo, con capacidad para reconocer las oportunidades para mejorar en su campo profesional. Habilidad para identificar temas y problemas de actualidad con respecto al entorno local, regional y global, con el fin de relacionarlos con propuestas de soluciones creativas y eficientes. Capacidad y destreza para utilizar tcnicas, habilidades y herramientas en el desarrollo de software y hardware para implementar soluciones a problemas de su profesin. Contribucin de la materia a los resultados de aprendizaje de la carrera: A: Alta M: Medio B: Baja a b A c d e M f B g h i j k

g.

h.

i. j.

k.

Ing. Christian Ronald Torres Morn

PORTAFOLIO DE HERRAMIENTAS WEB PERIODO SEPTIEMBRE 2012 FEBRERO 2013

FACULTAD DE CIENCIAS INFORMTICAS DIARIO METACOGNITIVO

Ing. Christian Ronald Torres Morn

10

A-B-C

Pgina 1

Misin. Formar acadmicos, cientficos y profesionales responsables, humanistas, ticos y solidarios, comprometidos con los objetivos del desarrollo nacional, que contribuyan a la solucin de los problemas del pas como universidad de docencia con investigacin, capaces de generar y aplicar nuevos conocimientos, fomentando la promocin y difusin de los saberes y las culturas, previstos en la constitucin de la repblica del ecuador. Visin: Ser institucin universitaria, lder y referente de la educacin superior en el ecuador, promoviendo la creacin, desarrollo, transmisin y difusin de la ciencia, la tcnica y la cultura, con reconocimiento social y proyeccin regional y mundial.

Misin: Ser una unidad con alto prestigio acadmico, con eficiencia, transparencia y calidad en la educacin, organizada en sus actividades, protagonistas del progreso regional y nacional.

Visin: Formar profesionales eficientes e innovadores en el campo de las ciencias informticas, que con honestidad, equidad y solidaridad, den respuestas a las necesidades de la sociedad elevando su nivel de vida.

Pgina 2

UNIVERSIDAD TECNICA DE MANABI FACULTAD DE CIENCIAS INFORMATICAS CARRERA DE INGENIERIA EN SISTEMAS INFORMATICOS DIARIO METACOGNITIVO
Clase N1: 25 de septiembre de 2012 TEMA DISCUTIDO: PROFESOR GUIA: Ing. Christian torres

INTRODUCCION DE LA MATERIA ESTRUCUTRA DATOS INTERESANTES DISCUTIDOS HOY


En el da de hoy vimos sobre lo que se llevara a cabo en la materia de estructura de datos as como reglamentos y formatos para trabajos y deberes Tipos de datos abstractos

ESTRUCTURA DE DATOS
En programacin, una estructura de datos es una forma de organizar un conjunto de datos elementales (un dato elemental es la mnima informacin que se tiene en el sistema) con el objetivo de facilitar la manipulacin de estos datos como un todo o individualmente. Una estructura de datos define la organizacin e interrelacionamiento de estos, y un conjunto de operaciones que se pueden realizar sobre l. Las operaciones bsicas son: Alta, adicionar un nuevo valor a la estructura. Baja, borrar un valor de la estructura. Bsqueda, encontrar un determinado valor en la estructura para realizar una operacin con este valor, en forma SECUENCIAL o BINARIO (siempre y cuando los datos estn ordenados) Otras operaciones que se pueden realizar son: Ordenamiento, de los elementos pertenecientes a la estructura. Apareo, dadas dos estructuras originar una nueva ordenada y que contenga a las apareadas. Tipos de datos abstractos Un tipo de datos abstracto TDA define una nueva clase de objeto o concepto que puede manejarse con independencia de la estructura de datos para representarlo. Para ello es necesario especificar: Las operaciones que se puede realizar con los objetos. El efecto que se produce al actuar con las operaciones sobre los mismos. Un TDA encapsula la definicin del tipo y todas las operaciones con este tipo.
Pgina 3

Los lenguajes de programacin entregan al programador ciertos tipos de datos bsicos o primitivos, especificando el conjunto de valores que una variable de uno de esos tipos puede tomar y el conjunto de operaciones realizables sobre los mismos. Por ejemplo, si se declara en C/C++ unsigned int x, y; La instruccin n = 9+10 de un programa donde = es el operador de asignacin, el contenido de la localidad de almacenamiento dado por n ser el valor 19. Cada tipo de datos: Es reconocido por los elementos de datos que puede tomar. Las operaciones asociadas a l. (su dominio) Ejemplo: en pascal Dominio entero D={0,1,2.max} Operaciones Los TDAs son generalizaciones de los tipos de datos bsicos y de las operaciones primitivas. Un TDA encapsula tipos de datos en el sentido que es posible poner la definicin del tipo y todas las operaciones con ese tipo en una seccin de un programa.

ARRAYS DE ESTRUCTURAS
La combinacin de las estructuras con los arrays proporciona una potente herramienta para el almacenamiento y manipulacin de datos. Ejemplo: struct Persona { char Nombre[65]; charDireccion[65]; intAnyoNacimiento; } Plantilla[200]; Vemos en este ejemplo lo fcil que podemos declarar el arrayPlantilla que contiene los datos relativos a doscientas personas. Podemos acceder a los datos de cada uno de ellos: cout<<Plantilla[43].Direccion; O asignar los datos de un elemento de la plantilla a otro: Plantilla[0] = Plantilla[99]; CLASIFICACIN DE LAS ESTRUCTURAS DE DATOS Se clasifican en: a) Por su almacenamiento b) Por su organizacin c) Por su comportamiento a) Por su almacenamiento.- Se clasifican en: Internas Externas Internas.- Son aquellas cuyas estructuras se almacena en la memoria principal. Externas.- Son aquellas que se almacenan en las memorias secundarias de un sistema de computadoras. b) Por su organizacin.- Se clasifican en: Estticas, Dinmicas.
Pgina 4

Estticas.- son aquellas cuya agrupacin de memoria no se disminuye o aumenta estas son: cadenas, conjuntos, escalares, entre otros. Dinmicas.- Son aquellas cuya agrupacin de memoria pueden aumentar o disminuir durante la ejecucin del programa, estas son: pila, colas, listas. c) Por su comportamiento.- Se clasifican en: Simples Compuesto o Estructurados Simples.-Son aquellas que almacenan un valor y son:

Compuesto.- Son aquellos que almacenan mltiples valores en su estructura y son los siguientes: Cadenas Arreglos Conjuntos Registros Listas Pilas Colas rboles Archivos Base de datos

Pgina 5

Los tipos de datos simples pueden ser organizados en diferentes estructuras de datos: Estticas y Dinmicas. Las estructuras de datos estticas: Son aquellas en las que el tamao ocupado en memoria se define antes de que el programa se ejecute y no puede modificarse dicho tamao durante la ejecucin del programa. Estas estructuras estn implementadas en casi todos los lenguajes. Su principal caracterstica es que ocupan sol o una casilla de memoria, por lo tanto una variable simple hace referencia a un nico valor a la vez , dentro de este gr upo de datos se encuentra: entero s, real es, caracteres, bolanos, enumerados y subrangos ( los ltimos no existen en algunos lenguajes de programacin) Las estructuras de datos dinmicas: No tienen las limitaciones o restricciones en el tamao de memoria ocupada que son propias de las estructuras estticas. Mediante el uso de un tipo de datos especifico, denominado puntero, es posible construir estructuras de datos dinmicas que no son soportadas por la mayora de los lenguajes, per o que en aquellos que si tienen estas caractersticas ofrecen soluciones eficaces y efectivas en la solucin de problemas complejos. Se caracteriza por el hecho de que con un nombre se hace referencia a un grupo de casillas de memoria. Es decir un dato estructurado tiene varios componentes.

Pgina 6

QU COSAS FUERON DIFCILES?, CULES FUERON FCILES?, QU APREND HOY? En realidad no hubo ningn tema de complejidad ya que se nos dio una pequea introduccin a lo que va ser la materia y algunos repasos de cdigos, ya que sern de mucha ayuda a lo largo de la materia de estructura de datos Quedo una consulta de tipos de datos abstractos

Pgina 7

UNIVERSIDAD TECNICA DE MANABI FACULTAD DE CIENCIAS INFORMATICAS CARRERA DE INGENIERIA EN SISTEMAS INFORMATICOS DIARIO METACOGNITIVO
Clase N2: 01 de octubre de 2012 PROFESOR GUIA: Ing. Christian torres

TEMA DISCUTIDO: ESTRUCTURAS ANIDADAS INTERNAS Y EXTERNAS

DATOS INTERESANTES DISCUTIDOS HOY


Hoy la clase trato de las estructuras anidadas que son de dos tipos las internas y las externas. Ejercicios de estructuras anidadas.

Definicin de una Estructura.


La sintaxis bsica de una estructura es en base a la palabra reservada struct, seguido del nombre que se le da a la misma y entre llaves se ubican los datos a utilizar ejemplo: struct empleados{ char nombre[20]; float sueldo; }; ANIDAMIENTO El cuerpo de cualquier estructura puede ser instrucciones simples u otras estructuras, que a su vez pueden contener a otras. Ejemplo: CLS INPUT "Valor entero para a:"; a INPUT "Valor entero para b:"; b IF a > b THEN

Pgina 8

REM hacer intercambio de variables auxiliar = a a= b b = auxiliar REM imprimir diferencia en escala de uno en uno DO WHILE auxiliar > a auxiliar = auxiliar Inicializacin de una Estructura. Ejemplo: struct control { charplaca[20]; intruedas; }; void main() { struct control vehiculo={"HGS-124",4}

-1 PRINT auxiliar LOOP ELSE REM no hacer nada END IF PRINT PRINT a; b

printf("%s es %d",vehiculo.placa,vehiculo.ruedas); getch(); } Inicializacin en una estructura con array: struct control { char placa[20]; int ruedas;}; void main() {struct control vehiculo[3]={"HGS-124",4,JKL-345,6,QWR-476,4} for(int i=0;i<3;i++) printf("%s es %d",vehiculo[i].placa,vehiculo[i].ruedas); getch(); }

Pgina 9

EJERCICIO HECHO EN CLASES SOBRE ESTRUCTURAS ANIDADAS


#include<conio.h> #include<stdio.h> #include<string.h> #include<stdlib.h> struct empresa{ char ruc[15] ; char nombre[20]; chardireccion[100]; chartelefono[18]; char ciudad[100]; intnproveedor; structempleados_ { char cedula[10]; char nombre[20]; chardireccion[100]; chartelefono[18]; char ciudad[100]; }empleado; struct vendedor_ { intcodigo[]; char nombre[20]; }vendedor;

struct proveedor_ { char ruc[13]; char ciudad[100]; char nombre[20]; chardireccion[100]; chartelefono[18]; }proveedor[100]; struct sucursal_ { char nombre[20]; chardireccion[100]; chartelefono[10]; char ciudad[100]; } sucursal[3]; struct datos_{ char ruc[10]; char nombre[20]; char direccion[100]; char telefono[10]; char ciudad[100];

QU COSAS FUERON DIFCILES?, CULES FUERON FCILES?, QU APREND HOY? Las cosas fciles de hoy fueron las estructuras anidadas externas y las que estuvieron un poco complicadas al inicio fueron las estructuras anidadas internas.

Pgina 10

UNIVERSIDAD TECNICA DE MANABI FACULTAD DE CIENCIAS INFORMATICAS CARRERA DE INGENIERIA EN SISTEMAS INFORMATICOS DIARIO METACOGNITIVO
Clase N3: 02 de Octubre de 2012 TEMA DISCUTIDO: PROFESOR GUIA: Ing. Christian Torres

INICIALIZACION Y ASIGNACIN DE ESTRUCTURA

Pgina 11

Programa en clase: Estructura de datos. Variable estructurada llamadamv Men o Ingrese estudiante o Consulta estudiante o Ingrese materia o Consulta materia o Ingrese documento o Consulta docente o Salir

Un ejemplo con array. Struct clase{char nom[50]; Struct lecciones_{int n_leccion; Int nota;}leccin[10]; Int nlecc;}; Void main() { Struct clase a; Scanf(%s,a.nom); a.nlecc=0; a.leccion[a.nlecc].n_lecc=1; a.leccion[a.nlecc].nota=10; a.nlecc++; }

Qu cosas fueron difciles? Las cosas que se me hiso difcil fueron cuando se estableci un ejercicio en clase ya que se deba aplicar todas las cosas explicadas hasta ese momento. Cules fueron fciles? Las cosas que se fueron fciles fueron cuando el docente explico la clase como se define una estructura ya que primero se debe aprender lo terico para despus aplicarlo. Qu aprend hoy? Las cosas que aprend fueron en definir una estructura y declaracin de aquella ya que por parte del docente fue muy entendible y razonable al momento de su explicacin.

Pgina 12

UNIVERSIDAD TECNICA DE MANABI FACULTAD DE CIENCIAS INFORMATICAS CARRERA DE INGENIERIA EN SISTEMAS INFORMATICOS DIARIO METACOGNITIVO
Clase N4: 08 de Octubre de 2012 TEMA DISCUTIDO: PASO DE PARAMETROS PROFESOR GUIA: Ing. Christian Torres

DATOS INTERESANTES DISCUTIDOS HOY Inicializar una variable estructurada Paso de campos estructurados a una funcin son 3: 1. 2. 3. Declaracin Invocacin Implementacin

Funciones en el interior de estructuras


C++, permite incluir funciones en el interior de las estructuras. Normalmente estas funciones tienen la misin de manipular los datos incluidos en la estructura, y su uso est muy relacionado con la programacin orientada a objetos. Aunque esta caracterstica se usa casi exclusivamente con las clases, como veremos ms adelante, tambin puede usarse en las estructuras. De hecho, en C++, las diferencias entre estructuras y clases son muy tenues. Dos funciones muy particulares son las de inicializacin, o constructor, y el destructor. Veremos con ms detalle estas funciones cuando asociemos las estructuras y los punteros. El constructor es una funcin sin tipo de retorno y con el mismo nombre que la estructura. El destructor tiene la misma forma, salvo que el nombre va precedido el smbolo "~". Nota: para aquellos que usen un teclado espaol, el smbolo "~" se obtiene pulsando las teclas del teclado numrico 1, 2, 6, mientras se mantiene pulsada la tecla ALT, ([ALT]+126). Tambin mediante la combinacin [Atl Gr]+[4] y un espacio (la tecla [4] de la zona de las letras, no del teclado numrico).

Pgina 13

Ejercicio: Struct paciente{ char nomb [50]; float peso; float talla;}; Struct paciente a={maria,180,160}; Void main () { Printf (%s,a.nombre); Printf (%s,a.peso); Printf (%s,a.talla); Getch(); } Estructura con vector Struct paciente{char nomb [50]; float peso;Float talla;}; Void main() { clrscr(); Struct paciente a={maria,180,160}; Struct paciente b[20]={carlos,1.85,170, eduardo,1.90,180, angelica,1.40,150, }; Int x=0; Printf(%s,b[x].nombre); Printf(%s,b[x].peso); Printf(%s,b[x].talla); Getch(); }

Funciones Dentro de las funciones encontramos prototipos. Invocacin es la llamada de la funcin. Int suma (int a1,int a2,int a3,int a4,int a5);
Pgina 14

Ejemplo #include<conio.h> #include<stdio.h> Int suma (int a1,int a2,int a3,int a4,int a5);
Void main() { int x=suma(10,20,30,40,50)//invocacion a la function suma. Printf(%i,x); Getch(); } //implementacin de la funcin

Int suma (int a1,int a2,int a3,int a4,int a5) { Return(a1+a2+ a3+a4+ a5); } Paso por parmetro por argumento es una funcin de campo estructurado. Qu cosas fueron difciles? Las cosas que se me hiso difcil fueron acerca de las funciones ya que no me acordaba como llamar a una funcin y desarrollarla. Cules fueron fciles? Las cosas que se me hiso fcil fueron acerca de un ejercicio que no se aplicaba funciones ya que era ms comprensible en manejarla. Qu aprend hoy?
lo que aprend fue acerca de la inicializacin de la variable estructurada y a utilizar vectores y funcione con una estructura ya que el docente explico la clase con claridad.

Pgina 15

UNIVERSIDAD TECNICA DE MANABI FACULTAD DE CIENCIAS INFORMATICAS CARRERA DE INGENIERIA EN SISTEMAS INFORMATICOS DIARIO METACOGNITIVO
Clase N5: 09 de octubre de 2012 TEMA DISCUTIDO: 1. PASO DE PARAMETROS DE FUNCIONES 2. TIPOS DE ARGUMENTOS EN FUNCIONES 3. PASO DE PARAMETROS POR REFERENCIA 4. PASO DE PARAMETROS POR VALOR PROFESOR GUIA: Ing. Christian torres

DATOS INTERESANTES DISCUTIDOS HOY


Paso de parmetros de funciones, tipos de argumentos en funciones, paso de

parmetros por referencia, paso de parmetros por valor

Funciones en C++
Una funcin es un conjunto de lneas de cdigo que realizan una tarea especfica y puede retornar un valor. Las funciones pueden tomar parmetros que modifiquen su funcionamiento. Las funciones son utilizadas para descomponer grandes problemas en tareas simples y para implementar operaciones que son comnmente utilizadas durante un programa y de esta manera reducir la cantidad de cdigo. Cuando una funcin es invocada se le pasa el control a la misma, una vez que esta finaliz con su tarea el control es devuelto al punto desde el cual la funcin fue llamada. <tipo> [clase::] <nombre> ( [Parmetros] ) { cuerpo; } Ejemplo de una funcin Para comenzar, vamos a considerar el caso en el cual se desea crear la funcin cuadrado(), que deber devolver el cuadrado de un nmero real (de punto flotante), es decir, cuadrado() aceptar nmeros de punto flotante y regresar una respuesta como nmero flotante.

Pgina 16

Nota: aunque para la funcin que veremos el tipo de retorno coincide con el tipo de parmetro pasado, algunas veces las cosas pueden cambiar, es decir, no es obligatorio que una funcin reciba un parmetro de un tipo y que tenga que regresar una respuesta de dicho tipo. // regresar el cuadrado de un nmero doublecuadrado(double n) { return n*n; } PARMETROS Normalmente, las funciones operan sobre ciertos valores pasados a las mismas ya sea como constantes literales o como variables, aunque se pueden definir funciones que no reciban parmetros. Existen dos formas en C++ de pasar parmetros a una funcin; por referencia o por valor. El hecho es que si en una declaracin de funcin se declaran parmetros por referencia, a los mismos no se les podr pasar valores literales ya que las referencias apuntan a objetos (variables o funciones) residentes en la memoria; por otro lado, si un parmetro es declarado para ser pasado por valor, el mismo puede pasarse como una constante literal o como una variable. Los parmetros pasados por referencia pueden ser alterados por la funcin que los reciba, mientras que los parmetros pasados por valor o copia no pueden ser alterados por la funcin que los recibe, es decir, la funcin puede manipular a su antojo al parmetro, pero ningn cambio hecho sobre este se reflejar en el parmetro original. PARAMETROS POR VALOR La funcin cuadrado() (ver arriba) es un clsico ejemplo que muestra el paso de parmetros por valor, en ese sentido la funcin cuadrado() recibe una copia del parmetro n. En la misma funcin se puede observar que se realiza un clculo ( n*n ), sin embargo el parmetro original no sufrir cambio alguno, esto seguir siendo cierto aun cuando dentro de la funcin hubiera una instruccin parecida a n = n * n; o n*=n;. PARAMETROS POR REFERENCIA Para mostrar un ejemplo del paso de parmetros por referencia, vamos a retomar el caso de la funcin cuadrado, salvo que en esta ocasin cambiaremos ligeramente la sintaxis para definir la misma. Veamos: // regresar el cuadrado de un nmero double cuadrado2(double &n) { n *= n;

Pgina 17

return n; } Al poner a prueba las funciones cuadrado() y cuadrado2() se podr verificar que la primera de estas no cambia el valor del parmetro original, mientras que la segunda s lo hace. LLAMAR A UNA FUNCIN para llamar a la funcin cuadrado() vista anteriormente, podemos emplear: cout<< cuadrado(25); cout<< cuadrado(X); R = cuadrado(X); // guardar en R el cuadrado de X FUNCIONES VOID Bajo ciertas circunstancias se desear escribir funciones que no regresen valor alguno (esto sera algo parecido a escribir procedures en Pascal) y para ello podemos declarar a la funcin como void. La palabra reservada void es utilizada para declarar funciones sin valor de retorno y tambin para indicar que una funcin especfica no requiere de parmetros. Por ejemplo, la funcin pausa() que se ver en seguida, no devolver valor alguno y la misma no requiere de parmetros. // esta funcin requiere de la librera iostream void pausa(void) {cout<< "Por favor presione <Enter> HOLA..."; cin.get(); cin.ignore(255, '\n'); // rechazar caracteres introducidos antes de <Enter>} Notas: se debe de aclarar que el uso de la palabra void dentro de los parentesis es opcional al momento de declarar una funcin. As, la funcin pausa() podra haberse declarado como void pausa(), y la misma puede invocarse como: pausa();. Qu cosas fueron difciles? Las cosa que no se me hiso difcil ya que se trataba de funciones. Cules fueron fciles? Las cosas que se me hiso fcil es la implementacin de funciones ya que era un recordatorio de cmo utilizar funciones pero aqu se trataba con estructura. Qu aprend hoy? Las cosas que aprend en esta clase es el funcionamiento de las funciones con estructura ya que el docente nos hiso un recordatorio de cmo se utilizaba y creaban .

Pgina 18

UNIVERSIDAD TECNICA DE MANABI FACULTAD DE CIENCIAS INFORMATICAS CARRERA DE INGENIERIA EN SISTEMAS INFORMATICOS DIARIO METACOGNITIVO
Clase N6: 15 de Octubre de 2012 PROFESOR GUIA: Ing. Christian Torres

Asignacin de memoria dinmica Mtodos de asignacin de memoria Programa: .cpp .obj .bak .exe

Ejercicio que nos permita crear un valor entero

#include<conio.h> #include<stdio.h> Void main() { Clrscr(); Int a;a=100; Printf(\nel valor almacenado en a es %i y esta alojado en la direccin %x,a;&a); Getch(); }
Puntero Puntero no es una variable y el espacio de la memoria, es el objeto que toma la direccin de otro objeto

Pgina 19

Qu cosas fueron difciles? Las cosas que se fueron difcil es acerca de los ejercicios ya que se me hiso un poco confuso de entenderlo. Cules fueron fciles? Las cosas fciles que se me hiso fcil es lo terico ya que se debe entender primero para despus poderlo aplicarlo en los ejercicio, Qu aprend hoy? Las cosas que aprend fueron acerca de los Mtodos de asignacin de memoria .Ya que se estableci ejercicios en clase ya comprender ms sobre este tema.

Pgina 20

UNIVERSIDAD TECNICA DE MANABI FACULTAD DE CIENCIAS INFORMATICAS CARRERA DE INGENIERIA EN SISTEMAS INFORMATICOS DIARIO METACOGNITIVO
Clase N7: 16 de octubre de 2012 TEMA DISCUTIDO: PROFESOR GUIA: Ing. Christian torres

1. Typedef 2. Introduccin a las listas simples

Pgina 21

TIPO DE LISTA SIMPLE o ABIERTAS o CERRADAS DOBLES o ABIERTAS o CERRADAS

LISTAS SIMPLE NODO CABECERA Y NODO DE FIN EL PUNTERO QUE ENLAZA ES NULL

CARACTERISTICA SOLO TIENE UN PUNTERO

Qu cosas fueron difciles? Las cosas que se me hiso difcil fueron bueno en esta clase no se me hiso difcil ya que era explicacin de listas y las sintaxis de typedef. Cules fueron fciles? Las cosas que se me hiso fcil fuero acerca de lo terico ya que primero hay que saber esto despus para ponerlo en prctica. Qu aprend hoy? Las cosas que aprend fueron acerca de las funciones typedef y cmo funcionaban las listas.

Pgina 22

UNIVERSIDAD TECNICA DE MANABI FACULTAD DE CIENCIAS INFORMATICAS CARRERA DE INGENIERIA EN SISTEMAS INFORMATICOS DIARIO METACOGNITIVO
Clase N8: 22 de Octubre de 2012 PROFESOR GUIA: Ing. Christian Torres

TEMA DISCUTIDO:

Listas abiertas

DATOS INTERESANTES DISCUTIDOS HOY Listas abiertas y nodos. Listas abiertas


La forma ms simple de estructura dinmica es la lista abierta. En esta forma los nodos se organizan de modo que cada uno apunta al siguiente, y el ltimo no apunta a nada, es decir, el puntero del nodo siguiente vale NULL. En las listas abiertas existe un nodo especial: el primero. Normalmente diremos que nuestra lista es un puntero a ese primer nodo y llamaremos a ese nodo la cabeza de la lista. Eso es porque mediante ese nico puntero podemos acceder a toda la lista. Cuando el puntero que usamos para acceder a la lista vale NULL, diremos que la lista est vaca. El nodo tpico para construir listas tiene esta forma: struct nodo { int dato; struct nodo *siguiente; }; En el ejemplo, cada elemento de la lista slo contiene un dato de tipo entero, pero en la prctica no hay lmite en cuanto a la complejidad de los datos a almacenar. Una lista lineal simplemente enlazada es una estructura en la que el cada elemento enlaza con el siguiente. El recorrido se inicia a partir de un puntero ubicado al comienzo de la lista. El ltimo elemento(nodo) de la lista apunta a una direccin vaca que indica el fin de la estructura.

Pgina 23

Normalmente se definen varios tipos que facilitan el manejo de las listas, en C, la declaracin de tipos puede tener una forma parecida a esta: typedefstruct _nodo { intdato; struct _nodo *siguiente; } tipoNodo; typedeftipoNodo *pNodo; typedeftipoNodo *Lista; tipoNodo es el tipo para declarar nodos, evidentemente. pNodo es el tipo para declarar punteros a un nodo. Lista es el tipo para declarar listas, como puede verse, un puntero a un nodo y una lista son la misma cosa. En realidad, cualquier puntero a un nodo es una lista, cuyo primer elemento es el nodo apuntado.

Es muy importante que nuestro programa nunca pierda el valor del puntero al primer elemento, ya que si no existe ninguna copia de ese valor, y se pierde, ser imposible acceder al nodo y no podremos liberar el espacio de memoria que ocupa. OPERACIONES BSICAS CON LISTAS: Con las listas tendremos un pequeo repertorio de operaciones bsicas que se pueden realizar: Aadir o insertar elementos. Buscar o localizar elementos. Borrar elementos. Moverse a travs de una lista, anterior, siguiente, primero.

Pgina 24

Cada una de estas operaciones tendr varios casos especiales, por ejemplo, no ser lo mismo insertar un nodo en una lista vaca, o al principio de una lista no vaca, o la final, o en una posicin intermedia. INSERTAR ELEMENTOS EN UNA LISTA ABIERTA: Veremos primero los casos sencillos y finalmente construiremos un algoritmo genrico para la insercin de elementos en una lista. INSERTAR UN ELEMENTO EN UNA LISTA VACA: Este es, evidentemente, el caso ms sencillo. Partiremos de que ya tenemos el nodo a insertar y, por supuesto un puntero que apunte a l, adems el puntero a la lista valdr NULL: El proceso es muy simple, bastar con que: 1. nodo->siguiente apunte a NULL. 2. Lista apunte a nodo.

Insertar un elemento en la primera posicin de una lista:

El proceso sigue siendo muy sencillo: 1. Hacemos que nodo->siguiente apunte a Lista. 2. Hacemos que Lista apunte a nodo. INSERTAR UN ELEMENTO EN LA LTIMA POSICIN DE UNA LISTA:
Este es otro caso especial. Para este caso partiremos de una lista no vaca:

El proceso en este caso tampoco es excesivamente complicado: 1. Necesitamos un puntero que seale al ltimo elemento de la lista. La manera de conseguirlo es empezar por el primero y avanzar hasta que el nodo que tenga como
Pgina 25

siguiente el valor NULL. 2. Hacer que nodo->siguiente sea NULL. 3. Hacer que ultimo->siguiente sea nodo.

BORRAR UN ELEMENTO ESPECFICO DE UNA LISTA ABIERTA void Borrar (Lista *lista, int v) {pNodo nodo, anterior; nodo*lista; anterior=NULL; while (nodo && nodo->dato < v) { anterior =nodo; nodo= nodo->siguiente; } If (!nodo || nodo->dato !=v) return; else { /* borra el nodo*/ If(!anterior) /* primer elemento*/*lista=nodo->siguiente; else /* un elemeto cualquiera*/ anterior->siguiente=nodo->siguiente; free(nodo);}} BORRAR UNA LISTA ABIERTA voidBorrar_Lista(Lista *lista) { pNodo nodo; While(*lista) { nodo=*lista; *lista=nodo->siguiente; free(nodo); } } MOSTRAR LA INFORMACIN DE UNA LISTA ABIERTA voidMostrarLista(Lista lista) {pNodo nodo=lista; if(ListaVacia(lista)) printf("Lista vacia \n"); else{ while(nodo) {

Pgina 26

printf("%d-> ",nodo->dato); nodo=nodo->siguiente;


Qu cosas fueron difciles? Se complic lo que son los enlaces debido a que esto fue una nueva explicacin para nosotros y tiende a confundir algunos de estos Cules fueron fciles? Las cosas que se me hiso fcil bueno en esta clase no se me hiso nada fcil ya que no entenda un poco el ejercicio y su aplicacin. Qu aprend hoy? Las cosas que aprend fue acerca del funcionamiento de la lista con un ejercicio aplicado en clase y explicado por el docente.

Pgina 27

UNIVERSIDAD TECNICA DE MANABI FACULTAD DE CIENCIAS INFORMATICAS CARRERA DE INGENIERIA EN SISTEMAS INFORMATICOS DIARIO METACOGNITIVO
Clase N9: 23 de octubre de 2012 TEMA DISCUTIDO: 1. FUNCION INGRESAR 2. FUNCION MOSTRAR 3. FUNCION BUSCAR PROFESOR GUIA: Ing. Christian torres

DATOS INTERESANTES DISCUTIDOS HOY Disear una lista que permita manipular los empleados de una fbrica con sus nombres, cedula, departamento y sueldo y luego mostrar toda la lista este es el ejercicio planteado en clase #include<conio.h> #include<stdio.h> #include<stdlib.h> #include<string.h> typedef struct empleado{char nombre[30]; long int cedula; char departamento[100]; float sueldo; struct empleado *sig; }tipoempleado; typedef tipoempleado *Lista; //tipo de dato puntero para manejar listas typedef tipoempleado *pnodo; //tipo de dato puntero para crear nodos void ingresarINI(Lista *l, char nom[],long int ced, char dep[],float suel); void ingresarFIN(Lista *l, char nom[],long int ced, char dep[],float suel); void mostrar(Lista l); void main() {clrscr(); Lista l=NULL; long int ced; char nom[30],dep[100]; float suel; int op; do{clrscr(); printf("\n1.- Ingreso al inicio de Empleados"); printf("\n2.- Ingreso al final de Empleados"); printf("\n3.- Mostrar Todos los empleados\n");
Pgina 28

printf("\n4.- Buscar un empleado con un determinado sueldo\n"); printf("\n5.- Buscar Todos los empledos con un determinado sueldo\n"); printf("\n6.- Salir\n"); scanf("%d",&op); if ((op==1) || (op==2)) { printf("\nINGRESO DE UN NUEVO EMPLEADO"); printf("\nNombre: "); fflush(stdin); gets(nom); printf("\nCedula: "); scanf("%ld",&ced); printf("\nDepartamento donde trabaja: "); fflush(stdin); gets(dep); printf("\nSueldo: "); scanf("%f",&suel); if (op==1) ingresarINI(&l,nom,ced,dep,suel); else ingresarFIN(&l,nom,ced,dep,suel); printf("\nEmpleado Registrado con exito..."); } else if(op==3) { printf("\nLISTA DE EMPLEADOS DE LA EMPRESA\n"); mostrar(l); } else if(op==4) { printf("\nBUSQUEDA DE UN EMPLEADO CON UN DETERMINADOSUELDO\n"); printf("\nIngrese el valor del sueldo a buscar: "); scanf("%f",&suel); // buscar(l,suel); } else if(op==5) { printf("\nBUSQUEDA DE UN EMPLEADO CON UN DETERMINADOSUELDO\n"); printf("\nIngrese el valor del sueldo a buscar: "); scanf("%f",&suel); // buscar_all(l,suel); } getch(); }while(op!=6); } void ingresarINI(Lista *l, char nom[],long int ced, char dep[],float suel) {pnodo nodo; nodo=(pnodo)malloc(sizeof(tipoempleado));//crear nodo solic. al S.O. strcpy(nodo->nombre,nom); strcpy(nodo->departamento,dep); nodo->cedula=ced; nodo->sueldo=suel; //enlaces de los nodos al inicio nodo->sig=*l; *l=nodo; } void ingresarFIN(Lista *l, char nom[],long int ced, char dep[],float suel) {pnodo nodo,aux; nodo=(pnodo)malloc(sizeof(tipoempleado));//crear nodo solic. al S.O. strcpy(nodo->nombre,nom);
Pgina 29

strcpy(nodo->departamento,dep); nodo->cedula=ced; nodo->sueldo=suel; //cambia la forma de enlazar de la funcion para ingresar al final if (*l==NULL) *l=nodo; else {aux=*l; while(aux->sig) aux=aux->sig; aux->sig=nodo; } nodo->sig=NULL; } void mostrar(Lista l) {pnodo nodo=l; if (!nodo) printf("Lista vacia..."); else {printf("\nEmpleado\t\tcedula\t\tDepartamento\t\tSueldo"); do{printf("\n%s\t\t%.2f",nodo->nombre,nodo->cedula,nodo->departamento,nodo>sueldo);

nodo=nodo->sig; }while (nodo); } }

Qu cosas fueron difciles? En esta clase no se me hiso tan difcil ya que era una complemento de la clase anterior. Cules fueron fciles? Las cosas que se me hiso fcil fueron en las funciones ya que era que el docente explico en otra clase. Qu aprend hoy? Las cosas que aprend fueron acerca del ejercicio planteado en clase y explicado por el docente.

Pgina 30

UNIVERSIDAD TECNICA DE MANABI FACULTAD DE CIENCIAS INFORMATICAS CARRERA DE INGENIERIA EN SISTEMAS INFORMATICOS DIARIO METACOGNITIVO
Clase N10: 29 de Octubre de 2012 PROFESOR GUIA: Ing. Christian Torres

TEMA DISCUTIDO: Pilas y colas

DATOS INTERESANTES DISCUTIDOS HOY En el da de hoy vimos sobre el uso de las pilas y colas su estructura y la forma de usarlas dentro de un programa

Pilas y Colas PILAS La pila es una lista de elementos caracterizada porque las operaciones de insercin y eliminacin se realizan solamente en un extremo de la estructura. El extremo donde se realizan estas operaciones se denomina habitualmente 'cima' (top en nomenclatura inglesa).

ALGORITMO APILAR voidInsertarPila(Pila *pila, int v) { pNodo nuevo; nuevo=(pNodo)malloc(sizeof(tipoNodo)); nuevo->dato=v; nuevo->sig=*pila; *pila=nuevo; }

Pgina 31

OPERACIN DE ELIMINACIN La operacin de borrado elimina de la estructura el elemento situado en la cima. Normalmente recibe el nombre de pop en la bibliografa inglesa. El algoritmo de borrado sera:

ALGORITMO DESAPILAR int Pop(Pila *pila) { pNodo nodo=*pila; int v=0; if(!nodo) cout<< "PilaVacias...\n"; else { *pila=nodo->sig; v=nodo->dato; free(nodo); } return v; } COLAS Las colas son secuencias de elementos caracterizadas porque las operaciones de insercin y borrado se realizan sobre extremos opuestos de la secuencia. La insercin se produce en el "final" de la secuencia, mientras que el borrado se realiza en el otro extremo, el "inicio" de la secuencia. Las restricciones definidas para una cola hacen que el primer elemento que se inserta en ella sea, igualmente, el primero en ser extrado de la estructura. Si una serie de elementos A, B, C, D, E se insertan en una cola en ese mismo orden, entonces los elementos irn saliendo de la cola en el orden en que entraron. Por esa razn, en ocasiones, las colas se conocen con el nombre de listas FIFO (First In FirstOut, el primero que entra es el primero que sale). Teniendo en cuenta que las operaciones de lectura y escritura en una cola hacen siempre en extremos distintos, lo ms fcil ser insertar nodos por el final, a continuacin del nodo que no tiene nodo siguiente, y leer desde el principio, hay que recordar que leer un nodo implica eliminarlo de la cola.

Pgina 32

INSERTAR UN ELEMENTO EN LA COLA: Void Aadir (Cola * primero, Cola *Ultimo, int V) {pNuevo nuevo; nuevo=(pNodo)malloc(sizeof(tipoNodo)); /* crear un nuevo nodo*/ nuevo->dato=v; nuevo->siguiente=Null; /*este ser el ultimo nodo, no debetener siguiente*/ /*Si la cola no estaba vacia, aadimo el nuevo a continuacion de ultimo*/ If(Cola_vacia(ultimo)) (*ultimo)->siguiente=nuevo; *ultimo=nuevo; /*Ahora, el ultmioelemento de la cola es el nuevo nodo*/ /*Si primero es Null, la cola estaba vacia, ahora primero apuntara tambin al nuevo nodo */} ELIMINAR UN ELEMENTO DE LA COLA: IntLeer(Cola * primero, Cola *ultimo) {pNodo nodo;/* variable para manipular nodo*/ int v; /*variable auxiliar para retorno*/ nodo=*primero; /*Nodo apunta al primer elemento de la cola*/ if(Cola_vacia(nodo)) return 0; /* Si no hay nodos en la pila retornamos*/ *primero=nodo->siguiente; /*Asignmam,os a primero la direccin del segundo nodo*/ v=nodo->valor; /*Guardamos el valor de retorno*/ free(nodo); /*Borra el nodo*/ if(Cola_vacia(primero))*ultimo=NULL; /*Si la cola quedo vacia, ultimo debe ser NULL*/ return v; } QU COSAS FUERON DIFCILES?, CULES FUERON FCILES?, QU APREND HOY? En realidad no se me hizo muy complejo esta clase ya que en el uso las pilas y colas solo hay pocas funciones al momentos de usarlas como son apilas desapilar encolar y desencolar

Pgina 33

UNIVERSIDAD TECNICA DE MANABI FACULTAD DE CIENCIAS INFORMATICAS CARRERA DE INGENIERIA EN SISTEMAS INFORMATICOS DIARIO METACOGNITIVO
Clase N11: 30 de Octubre de 2012 PROFESOR GUIA: Ing. Christian Torres

TEMA DISCUTIDO: PILA DATOS INTERESANTES DISCUTIDOS HOY EJERCICIO DE PILAS Se estableci un ejercicion en clase Nuevo=*p; Nuevo->sig=nuevo; Guardar=nuevo; Pop(nuevo); EJERCICIO #include<conio.h> #include<stdlib.h> #include<stdio.h> #include<string.h> typedef struct persona{long int cedula; char nombre[50]; int edad; struct persona *sig; }_persona; typedef _persona *Pila; //para manejar la cima typedef _persona *pnodo;//para crear nodos char mensaj[100]; //funciones prototipos void apilar(Pila *p, long int ced,char nom[],int ed); pnodo desapilar(Pila *p); void mostrar(Pila *p); int buscar(Pila *p, long int c); //implementacion de funciones void apilar(Pila *p, long int ced,char nom[],int ed) {pnodo nodo; if (buscar(p,ced)==1) {strcpy(mensaj,"Elemento ya registrado");
Pgina 34

return; } nodo=(pnodo) malloc(sizeof(_persona)); nodo->cedula=ced; strcpy(nodo->nombre,nom); nodo->edad=ed; nodo->sig=*p; *p=nodo; strcpy(mensaj,"Se apilo con exito..."); } pnodo desapilar(Pila *p)// *p representa a la cima {pnodo dato=NULL; if (*p) {pnodo aux=*p; //1- se ubica un puntero auxiliar en la cima dato->cedula=aux->cedula; // 2- sacamos la informacion dato->edad=aux->edad; strcpy(dato->nombre,aux->nombre); *p=aux->sig; //3- desplazamos a la cima free(aux); //4- destruir el nodo leido } return (dato); } void mostrar(Pila *p) {pnodo elemento; Pila Paux=NULL; if (!*p) {printf("\nPilaVacia.."); return ; } while (*p) {elemento=desapilar(p); printf("\n El elemento de la cima de la pila es:\ncedula=%ld\n nombre:%s\nedad:%d",elemento->cedula,elemento->nombre,elemento->edad); apilar(&Paux,elemento->cedula,elemento->nombre,elemento->edad); } while(Paux) { elemento=desapilar(&Paux); apilar(p,elemento->cedula,elemento->nombre,elemento->edad); } } int buscar(Pila *p, long int c) {pnodo aux; Pila Paux=NULL; int M=0; if (*p) { do{aux=desapilar(p); apilar(&Paux,aux->cedula,aux->nombre,aux->edad); }while((aux)&&(aux->cedula!=c)); if (aux->cedula==c)
Pgina 35

M=1; while(Paux) {aux=desapilar(&Paux); apilar(p,aux->cedula,aux->nombre,aux->edad); } } return (M); } void main() { Pila pA=NULL; pnodo elemento; long int c; char n[50]; int e,opc; do{clrscr(); printf("\n Registro de Cedulas"); printf("\n 1.Apilar una cedula"); printf("\n 2.Desapilar cedula de la cima"); printf("\n 3.Mostar Pila"); printf("\n 4. Salir"); scanf("%d",&opc); if (opc==1) {printf("Ingrese su cedula");fflush(stdin); scanf("%ld",&c); printf("Ingrese su nombre");fflush(stdin); scanf("%s",n); printf("Ingrese su edad");fflush(stdin); scanf("%d",&e); apilar (&pA,c,n,e); printf("%s",mensaj); } else if(opc==2) {if (pA) {elemento=desapilar(&pA); printf("\n El elemento de la cima de la pila es:\ncedula=%ld\n nombre:%s\nedad:%d",elemento->cedula,elemento->nombre,elemento->edad); } else printf("\nPila vacia..."); } else if(opc==3) {mostrar(&pA); } getch(); }while (opc!=4); }

Pgina 36

Qu cosas fueron difciles? Las cosas que se me hiso difcil fue en el ejercicio ya que en este se aplicaba todo. Cules fueron fciles? Las cosas que se me hiso fcil fueron las funciones ya explicadas en la otra clase ya que se me hiso fcil de aplicarla en este ejercicio. Qu aprend hoy? Las cosas que aprend fueron acerca de las pilas y su funcin que se puede aplicar en estas ya que el docente explico acerca de cada una de las funciones.

Pgina 37

UNIVERSIDAD TECNICA DE MANABI FACULTAD DE CIENCIAS INFORMATICAS CARRERA DE INGENIERIA EN SISTEMAS INFORMATICOS DIARIO METACOGNITIVO
Clase N12: 5 de Noviembre de 2012 PROFESOR GUIA: Ing. Christian Torres

ELIMINAR elemento en una lista abierta Saber que quieres eliminar Tienen elemento No tiene elemento Cuando existe nodo o elemento Primero nodo a la lista debe ser eliminado Aux =1; While((aux)&&(strcmp(aux->apellido,ape)!=0)) Aux =aux->sig; Aux=*l; *l=aux->sig; Free(aux); Mover a la cabecera 1 nodo despues Ultimo nodo de elmininar y que el penultimo apunte su punto siguiente tome el valor de NULL. Aux =1; While((aux)&&(strcmp(aux->apellido,ape)!=0)) Aux =aux->sig; Nodo=aux->sig; Aux->sig=NULL; Free(nodo); No es primero ni ultimo eliminar.realice un Puente de enlace entre el nodo anterior y posterior al nodo a eliminar. Aux =1; While((aux)&&(strcmp(aux->apellido,ape)!=0)) Aux =aux->sig; Nodo=aux->sig; Aux->sig=nodo->sig; Free(nodo);

Pgina 38

Qu cosas fueron difciles? Las cosas que se me hiso difcil fueron acerca de la funcin de eliminar ya que no se poda eliminar como cualquier cosa. Cules fueron fciles? Las cosas que se hiso fcil fueron cuando se realiz el ejercicio ya que se hiso tambin la funcin de la clase pasada. Qu aprend hoy?
Las cosa aprend fue acerca de la funcin de eliminar lista sea nodos de la lista ya que el docente explico acerca de esto

Pgina 39

UNIVERSIDAD TECNICA DE MANABI FACULTAD DE CIENCIAS INFORMATICAS CARRERA DE INGENIERIA EN SISTEMAS INFORMATICOS DIARIO METACOGNITIVO
Clase N13: 6 de Noviembre de 2012 PROFESOR GUIA: Ing. Christian Torres

TEMA DISCUTIDO: COLA DATOS INTERESANTES DISCUTIDOS HOY Definicin de cola

Colas
Una cola es un tipo especial de lista abierta en la que slo se pueden insertar nodos en uno de los extremos de la lista y slo se pueden eliminar nodos en el otro. Adems, como sucede con las pilas, las escrituras de datos siempre son inserciones de nodos, y las lecturas siempre eliminan el nodo ledo. Este tipo de lista es conocido como lista FIFO (First In First Out), el primero en entrar es el primero en salir. El smil cotidiano es una cola para comprar, por ejemplo, las entradas del cine. Los nuevos compradores slo pueden colocarse al final de la cola, y slo el primero de la cola puede comprar la entrada. El nodo tpico para construir pilas es el mismo que vimos en los captulos anteriores para la construccin de listas y pilas:

Qu cosas fueron difciles? Las cosas que se me hiso difcil es en el momento de aplicarla la cola ya que no entenda algunas cosas. Cules fueron fciles? Las cosas que se me hiso fcil fueron acerca de su funcionamiento y si estructura ya que estuvo muy clara la explicaciones de los compaeros y docente. Qu aprend hoy? Las cosas que aprend fue acerca del concepto de cola y ejercicio ya que por la parte del docente explico con una buena claridad.
Pgina 40

UNIVERSIDAD TECNICA DE MANABI FACULTAD DE CIENCIAS INFORMATICAS CARRERA DE INGENIERIA EN SISTEMAS INFORMATICOS DIARIO METACOGNITIVO
Clase N14: 12 de Noviembre de 2012 PROFESOR GUIA: Ing. Christian Torres

Ejercicio establecido en clase. If(cab) { *cab=nuevo; nuevo->sig=*cab;} Else Nuevo->sig=(*cab)->sig; Cab->sig=Nuevo;


Qu cosas fueron difciles? Las cosas que se me hiso fuer acerca de cmo funcionada ya que estaba muy confusa porque se necesitaba muchos enlace porque no era como cola ni pila. Cules fueron fciles? Las cosas que se me hiso fcil fue acerca del concepto de lista cerradas Y la diferencia que tiene con pilas y colas. Qu aprend hoy? Las cosas que aprend fueron acerca del funcionamiento de una lista cerrada y un ejercicio aplicadas en clase por medio del docente y explicada.

Pgina 41

UNIVERSIDAD TECNICA DE MANABI FACULTAD DE CIENCIAS INFORMATICAS CARRERA DE INGENIERIA EN SISTEMAS INFORMATICOS DIARIO METACOGNITIVO
Clase N15: 19 de Noviembre de 2012 TEMA DISCUTIDO: PROFESOR GUIA: Ing. Christian Torres

Listas cerradas

DATOS INTERESANTES DISCUTIDOS HOY En el da de hoy pudimos ver las ventajas que tenemos a usar listas cerradas sus aplicaciones y sus distintas funciones para poderlas utilizar Listas cerradas Una lista circular es una lista lineal en la que el ltimo elemento enlaza con el primero. Entonces es posible acceder a cualquier elemento de la lista desde cualquier punto dado. Las listas circulares evitan excepciones en las operaciones que se realicen sobre ellas. No existen casos especiales, cada nodo siempre tiene uno anterior y uno siguiente. En algunas listas circulares se aade un nodo especial de cabecera, de ese modo se evita la nica excepcin posible, la de que la lista est vaca. El nodo tpico es el mismo que para construir listas abiertas:

struct nodo { int dato; struct nodo *siguiente; Las operaciones sobre una lista circular resultan ms sencillas. Cuando recorremos una lista circular, diremos que hemos llegado al final de la misma cuando nos encontremos de nuevo en el punto de partida; suponiendo que en este punto se deja un puntero fijo. Otra solucin al problema anterior sera ubicar en cada lista circular un elemento especial identificable, como lugar de parada. Este elemento especial recibe el nombre de cabeza de la lista. Esto presenta la ventaja de que la lista circular no estar nunca vaca.

Pgina 42

DECLARACIONES DE TIPO PARA MANEJAR LISTAS: Los tipos que definiremos normalmente para manejar listas cerradas son l os mismos que para para manejar listas abiertas: typedefstruct _nodo { intdato; struct _nodo *siguiente; } tipoNodo; typedeftipoNodo *pNodo; typedeftipoNodo *Lista; tipoNodo es el tipo para declarar nodos, evidentemente. pNodo es el tipo para declarar punteros a un nodo. Lista es el tipo para declarar listas, tanto abiertas como circulares. En el caso de las circulares, apuntar a un nodo cualquiera de la lista. ALGORITMO DE LA FUNCIN "INSERTAR": 1. Si lista est vaca hacemos que lista apunte a nodo. 2. Si lista no est vaca, hacemos que nodo->siguiente apunte a lista->siguiente. 3. Despus que lista->siguiente apunte a nodo. ALGORITMO DE LA FUNCIN "BORRAR": 1. Tiene la lista un nico nodo? 2. SI: 1. Borrar el nodo lista. 2. Hacer lista = NULL. 3. NO: 1. Hacemos lista->siguiente = nodo->siguiente. 2. Borramos nodo. QU COSAS FUERON DIFCILES?, CULES FUERON FCILES?, QU APREND HOY? En realidad no se me hizo muy complejo este tema ya que pude ver varias funciones y operaciones de listas cerradas por medios de grficas, y adems se reforz muy bien ese tema con los ejercicios propuestos en clases

Pgina 43

UNIVERSIDAD TECNICA DE MANABI FACULTAD DE CIENCIAS INFORMATICAS CARRERA DE INGENIERIA EN SISTEMAS INFORMATICOS DIARIO METACOGNITIVO
Clase N16: 26 de Noviembre de 2012 PROFESOR GUIA: Ing. Christian Torres

Funciones para listas circulares o cerradas


Estructura *********************************************************************************************************** typedef struct nodo{ int dato; struct nodo *sig; }tipoNodo; typedef tipoNodo *pNodo; typedef tipoNodo *ListaC; Prototipos *********************************************************************************************************** void insertar_C(ListaC *lista,int v); void mostrarlista_C(ListaC lista); void borrarlista_C(ListaC *lista); void borrar_elemento_C(ListaC *lista,int v); void borrar_numero(ListaC *lista, int v); Funcin Insertar *********************************************************************************************************** void insertar_C(ListaC *lista,int v){ pNodo nuevo; nuevo=(pNodo)malloc(sizeof(tipoNodo)); nuevo->dato=v; if((*lista)==NULL) (*lista)=nuevo; else nuevo->sig=(*lista)->sig; (*lista)->sig=nuevo; } Funcin para Mostrar *********************************************************************************************************** void mostrarlista_C(ListaC lista){ pNodo aux=lista; do{ cout<<aux->dato<<"\n";

Pgina 44

aux=aux->sig; } while(aux!=lista); } Funcin para borrar toda la lista *********************************************************************************************************** void borrarlista_C(ListaC *lista){ pNodo temp; while((*lista)->sig!=(*lista)){ temp=(*lista)->sig; (*lista)->sig=temp->sig; free(temp); } free(*lista); (*lista)=NULL; } Funcin borrar un nodo *********************************************************************************************************** void borrar_elemento_C(ListaC *lista,int v){ pNodo temp=*lista,aux=*lista; int c=0; do{ if(temp->dato!=v) temp=temp->sig;} while((temp->dato!=v)&&(temp!=(*lista))); if(temp->dato==v){ do{ c++; aux=aux->sig;} while(aux!=(*lista)); if(c==1){ free(*lista); (*lista)=NULL;} else if(temp==(*lista)){ (*lista)=temp->sig; free(temp);} else{ while((*lista)->sig!=temp) (*lista)=(*lista)->sig; (*lista)->sig=temp->sig; free(temp);} } else cout<<"Elemento no encontrado\n";}

Pgina 45

Funcin para borrar un nodo repetido *********************************************************************************************************** void borrar_numero(ListaC *lista, int v){ pNodo temp=(*lista),aux; int c=1; aux=temp; while((c==1)&&((*lista)!=NULL)){ if(temp->dato==v){ while(temp->sig!=(*lista)){ temp=temp->sig;} temp->sig=temp->sig->sig; (*lista)=temp;} else{ do{ if(temp->dato==v){ aux->sig=temp->sig; free(temp); temp=aux->sig;} else{ aux=temp; temp=temp->sig;} }while(temp!=(*lista)); c=0; }}}

Pgina 46

UNIVERSIDAD TECNICA DE MANABI FACULTAD DE CIENCIAS INFORMATICAS CARRERA DE INGENIERIA EN SISTEMAS INFORMATICOS DIARIO METACOGNITIVO
Clase N17: 27 de Noviembre de 2012 PROFESOR GUIA: Ing. Christian Torres

TEMA DISCUTIDO: EXAMEN

Pgina 47

UNIVERSIDAD TECNICA DE MANABI FACULTAD DE CIENCIAS INFORMATICAS CARRERA DE INGENIERIA EN SISTEMAS INFORMATICOS DIARIO METACOGNITIVO
Clase N18: 3 de Diciembre de 2012 PROFESOR GUIA: Ing. Christian Torres

Definicin de las listas doblemente enlazadas Usan dos punteros que permiten direccionarse a otras dos direcciones La caracterstica de cada nodo es que se deben tener 2 enlaces de salida y de otros 2 nodos llegan 2 enlaces. Solo el nodo que est en el extremo tiene solo un enlace al nodo. Representacin Grfica ************ ************ ************ ************* * 100 *----->* 200 *----->* 300 *----->* 400 *-----> NULL NULL<---* *<-----* *<-----* *<-----* * ************ *********** ************ ************ <--- Enlace al nodo anterior ---> Enlace al nodo siguiente Observe como del nodo que tiene informacin 100 salen 2 enlaces(ant a NULL y *sig a el nodo con informacin 200 pero como NULL no es ninguna direccin no puede retornar ningn enlace mientras que del nodo que tienen informacin 200 si tiene retorno por su puntero *ant al nodo con informacin 100 y por su puntero *sig al 300. Eso es lo elemental de una lista doblemente enlazada abierta. La estructura bsica es: typedef struct nodo{int dato; struct nodo *sig; struct nodo *ant; }tiponodo; Tipos de Datos typedef tiponodo *listada; typedef tiponodo *pnodo;

Pgina 48

UNIVERSIDAD TECNICA DE MANABI FACULTAD DE CIENCIAS INFORMATICAS CARRERA DE INGENIERIA EN SISTEMAS INFORMATICOS DIARIO METACOGNITIVO
Clase N19: 04 de Diciembre de 2012 PROFESOR GUIA: Ing. Christian Torres

TEMA DISCUTIDO: Funciones de las listas doblemente enlazadas abiertas DATOS INTERESANTES DISCUTIDOS HOY Funciones
#include <conio.h> #include <stdio.h> #include <stdlib.h> typedef struct nodo{ int dato; struct nodo *sig; struct nodo *ant; }tiponodo; typedef tiponodo *listadc; typedef tiponodo *pnodo;

void ingresar(int lugar,listadc *l, int v) { pnodo nuevo; nuevo=(pnodo)malloc(sizeof(tiponodo)); nuevo->dato=v; if (!*l) {*l = nuevo; nuevo->sig =*l; nuevo->ant = *l; } else { nuevo->sig =*l; nuevo->ant = (*l)->ant; (*l)->ant->sig = nuevo; (*l)->ant = nuevo; if (lugar==0) *l=nuevo; } } Pgina 49

void mostrar(listadc l, int ord) {pnodo aux=l; if(aux) { if(ord==0) { printf("\n***DATOS DE LA LISTA DOBL.ENLAZ.CE. DE FORMA ASCENDENTE***"); do{printf("\n%d",aux->dato); aux=aux->sig; }while(aux!=l); } else if(ord==1) { printf("\***DATOS DE LA LISTA DOBL.ENLAZ.CE. DE FORMA DESCENDENTE***"); do{printf("\n%d",aux->ant->dato); aux=aux->ant; }while(aux!=l); } } else printf("\n Lista Doblemente enlazada cerrada esta vacia..."); getch(); } void borrar(listadc *l,int v) { pnodo aux=*l; if(*l) { //inicia la busqueda while((aux->dato!=v)&&(aux->sig!=*l)) aux=aux->sig; // Nos aseguramos de que se haya encontrado el nodo a eliminar if (aux->dato==v) { aux->ant->sig=aux->sig;//realizar el enlace desde el anterior aux->sig->ant=aux->ant;//realizar el enlace desde el siguiente if (*l==aux) *l=aux->sig;//Para no perder la cabecera de la lista if (*l==aux) *l=NULL;//Por si tiene nodos mas nodos free(aux); //eliminado printf("\n El nodo con informacin %d, fue localizado y eliminado",v); } else printf("\n No existe el nodo con informacin %d",v); } //*********************** getch(); } void borrartodosx(listadc *l,int v) { pnodo paux,aux=*l; int c=0; if(*l) { Pgina 50

//inicia la busqueda do{ // Nos aseguramos de que se haya encontrado el nodo a eliminar if (aux->dato==v) { aux->ant->sig=aux->sig;//realizar el enlace desde el anterior aux->sig->ant=aux->ant;//realizar el enlace desde el siguiente paux=aux; aux=paux->sig; if (*l==paux) *l=paux->sig; if (paux==aux) { *l=NULL;//Por si tiene nodos mas nodos aux=NULL; } free(paux); //eliminado c++; printf("\n El nodo con informacion %d, fue localizado y eliminado",v); } else aux=aux->sig; }while(aux!=*l); if (c==0) printf("\n No existe el nodo con informacion %d",v); } //*********************** getch(); } void borrarD(listadc *l) { pnodo paux,temp=*l,aux; int c=0; if(*l) { //inicia la busqueda while (temp->sig!=*l) {aux=temp->sig; do{ // Nos aseguramos de que se haya encontrado el nodo a eliminar if (aux->dato==temp->dato) { aux->ant->sig=aux->sig;//realizar el enlace desde el anterior aux->sig->ant=aux->ant;//realizar el enlace desde el siguiente paux=aux; aux=paux->sig; if (*l==paux) *l=paux->sig; if (paux==aux) { *l=NULL;//Por si tiene nodos mas nodos aux=NULL; } free(paux); //eliminado c++; printf("\n El nodo con informacion %d, fue localizado y eliminado",temp->dato); } Pgina 51

else aux=aux->sig; }while(aux!=*l); temp=temp->sig; }

if (c==0) printf("\n No existe el nodos con informacion duplicada"); } //*********************** getch(); }

void main() {listadc L1=NULL; clrscr(); int lugar=0; ingresar(lugar,&L1,100); ingresar(lugar,&L1,200); ingresar(lugar,&L1,300); ingresar(lugar,&L1,400); ingresar(lugar,&L1,600); ingresar(lugar,&L1,300); ingresar(lugar,&L1,300); ingresar(lugar,&L1,300); ingresar(lugar,&L1,300); ingresar(lugar,&L1,300); ingresar(lugar,&L1,300); ingresar(lugar,&L1,300); ingresar(lugar,&L1,300); ingresar(lugar,&L1,400); mostrar(L1,0); borrartodosx(&L1,300); borrar(&L1,600); borrar(&L1,100); borrar(&L1,200); borrar(&L1,300); borrarD(&L1); mostrar(L1,0) ; }

QU COSAS FUERON DIFCILES?, CULES FUERON FCILES?, QU APREND HOY? Esta clase se me hizo un poco confunza por las direcciones de los nodos.

Pgina 52

UNIVERSIDAD TECNICA DE MANABI FACULTAD DE CIENCIAS INFORMATICAS CARRERA DE INGENIERIA EN SISTEMAS INFORMATICOS DIARIO METACOGNITIVO
Clase N20: 10 de Diciembre de 2012 PROFESOR GUIA: Ing. Christian Torres

TEMA DISCUTIDO: Listas doblemente enlazadas cerradas DATOS INTERESANTES DISCUTIDOS HOY En el da de hoy pudimos ver las ventajas que tenemos a usar listas cerradas sus aplicaciones y sus distintas funciones para poderlas utilizar Declaraciones de tipos para manejar listas doblemente enlazadas en C Operaciones bsicas con listas doblemente enlazadas Aadir un elemento Aadir elemento en una lista doblemente enlazada vaca Insertar un elemento en la primera posicin de la lista Insertar un elemento en la ltima posicin de la lista Insertar un elemento a continuacin de un nodo cualquiera de una lista Aadir elemento en una lista doblemente enlazada, caso general

Listas doblemente enlazadas cerradas Una lista doblemente enlazada es una lista lineal en la que cada nodo tiene dos enlaces, uno al nodo siguiente, y otro al anterior. Las listas doblemente enlazadas no necesitan un nodo especial para acceder a ellas, pueden recorrerse en ambos sentidos a partir de cualquier nodo, esto es porque a partir de cualquier nodo, siempre es posible alcanzar cualquier nodo de la lista, hasta que se llega a uno de los extremos. El nodo tpico es el mismo que para construir las listas que hemos visto, salvo que tienen otro puntero al nodo anterior: struct nodo \{ int dato; struct nodo *siguiente; struct nodo *anterior;};

Pgina 53

Declaraciones de tipos para manejar listas doblemente enlazadas en C Para C, y basndonos en la declaracin de nodo que hemos visto ms arriba, trabajaremos con los siguientes tipos: typedef struct _nodo \{ int dato; struct _nodo *siguiente; struct _nodo *anterior; } tipoNodo; typedef tipoNodo *pNodo; typedef tipoNodo *Lista; tipoNodo es el tipo para declarar nodos, evidentemente. pNodo es el tipo para declarar punteros a un nodo. Lista es el tipo para declarar listas abiertas doblemente enlazadas. Tambin es posible, y potencialmente til, crear listas doblemente enlazadas y circulares.

El movimiento a travs de listas doblemente enlazadas es ms sencillo, y como veremos las operaciones de bsqueda, insercin y borrado, tambin tienen ms ventajas. Operaciones bsicas con listas doblemente enlazadas De nuevo tenemos el mismo repertorio de operaciones sobre este tipo listas:
Aadir o insertar elementos. Buscar o localizar elementos. Borrar elementos. Moverse a travs de la lista, siguiente y anterior.

Aadir un elemento Nos encontramos ahora ante un tipo de estructura algo diferente de las que hemos estado viendo, as que entraremos en ms detalles. Vamos a intentar ver todos los casos posibles de insercin de elementos en listas doblemente enlazadas.

Pgina 54

Aadir elemento en una lista doblemente enlazada vaca Partiremos de que ya tenemos el nodo a insertar y, por supuesto un puntero que apunte a l, adems el puntero que define la lista, que valdr NULL: El proceso es muy simple, bastar con que: 1. lista apunta a nodo. 2. lista->siguiente y lista->anterior apunten a null. Insertar un elemento en la primera posicin de la lista Partimos de una lista no vaca. Para simplificar, consideraremos que lista apunta al primer elemento de la lista doblemente enlazada:

El proceso es el siguiente: 1. nodo->siguiente debe apuntar a Lista. 2. nodo->anterior apuntar a Lista->anterior. 3. Lista->anterior debe apuntar a nodo.

Recuerda que Lista no tiene por qu apuntar a ningn miembro concreto de una lista doblemente enlazada, cualquier miembro es igualmente vlido como referencia. Insertar un elemento en la ltima posicin de la lista Igual que en el caso anterior, partiremos de una lista no vaca, y de nuevo para simplificar, que Lista est apuntando al ltimo elemento de la lista:

Pgina 55

El proceso es el siguiente: 1. nodo->siguiente debe apuntar a Lista->siguiente (NULL). 2. Lista->siguiente debe apuntar a nodo. 3. nodo->anterior apuntar a Lista.

Insertar un elemento a continuacin de un nodo cualquiera de una lista

El proceso sigue siendo muy sencillo: 1. Hacemos que nodo->siguiente apunte a lista->siguiente. 2. Hacemos que Lista->siguiente apunte a nodo. 3. Hacemos que nodo->anterior apunte a lista. 4. Hacemos que nodo->siguiente->anterior apunte a nodo.

Lo que hemos hecho es trabajar como si tuviramos dos listas enlazadas, los dos primeros pasos equivalen a lo que hacamos para insertar elementos en una lista abierta corriente. Los dos siguientes pasos hacen lo mismo con la lista que enlaza los nodos en sentido contrario. El paso 4 es el ms oscuro, quizs requiera alguna explicacin. Buscar o localizar un elemento de una lista doblemente enlazada

Pgina 56

Para recorrer una lista procederemos de un modo parecido al que usbamos con las listas abiertas, ahora no necesitamos un puntero auxiliar, pero tenemos que tener en cuenta que Lista no tiene por qu estar en uno de los extremos: 1. Retrocedemos hasta el comienzo de la lista, asignamos a lista el valor de lista>anterior mientras lista->anterior no sea NULL. 2. Abriremos un bucle que al menos debe tener una condicin, que el ndice no sea NULL. 3. Dentro del bucle asignaremos a lista el valor del nodo siguiente al actual. Por ejemplo, para mostrar todos los valores de los nodos de una lista, podemos usar el siguiente bucle en C: typedef struct _nodo \{ int dato; struct _nodo *siguiente; struct _nodo *anterior; } tipoNodo; typedef tipoNodo *pNodo; typedef tipoNodo *Lista; ... pNodo = indice; ... indice = Lista; while(indice->anterior) indice = indice->anterior; while(indice) \{ printf("%d\n", indice->dato); indice = indice->siguiente; } QU COSAS FUERON DIFCILES?, CULES FUERON FCILES?, HOY? Lo difcil de la clase de hoy fue insertar un nodo como tercer elemento. Lo fcil fue la funcin mostrar e ingresar nodos como primer y ltimo elemento QU APREND

Pgina 57

UNIVERSIDAD TECNICA DE MANABI FACULTAD DE CIENCIAS INFORMATICAS CARRERA DE INGENIERIA EN SISTEMAS INFORMATICOS DIARIO METACOGNITIVO
Clase N21: 11 de Diciembre de 2012 PROFESOR GUIA: Ing. Christian Torres

TEMA DISCUTIDO: Funciones de las listas doblemente enlazadas cerradas DATOS INTERESANTES DISCUTIDOS HOY Funciones

#include <conio.h> #include <stdlib.h> #include <stdio.h> #include <string.h> typedef struct cuenta{ long int cta; long int cedula; char cliente[100]; struct cuenta *ant; struct cuenta *sig; }tipocuenta; typedef tipocuenta *Ldabierta; typedef tipocuenta *pnodolda; //funciones prototipos void Ingreso(Ldabierta *l, long int cta,long int ced,char cli[]); void IngresoFIN(Ldabierta *l, long int cta,long int ced,char cli[]); int contarnodos(Ldabierta l); void Ingreso3ro(Ldabierta *l, long int cta,long int ced,char cli[]); void mostrar(Ldabierta l, int ord); void main() {Ldabierta C=NULL; IngresoFIN(&C,100,13145,"Velez Jose"); IngresoFIN(&C,200,13142,"Rodriguez Kelvin"); IngresoFIN(&C,230,13160,"Molina Frank"); mostrar(C,1); getch();
Pgina 58

} //Implementacion de funciones void Ingreso(Ldabierta *l,long int cta,long int ced, char cli[]) {pnodolda nuevo; nuevo=(pnodolda)malloc(sizeof(tipocuenta)); nuevo->cta=cta; nuevo->cedula=ced; strcpy(nuevo->cliente,cli); if (!*l) {nuevo->ant=*l; nuevo->sig=*l; *l=nuevo; } else { while( (*l)->ant) *l=(*l)->ant; nuevo->sig=*l; nuevo->ant=(*l)->ant; //nuevo->ant=NULL; (*l)->ant=nuevo; } } void IngresoFIN(Ldabierta *l,long int cta,long int ced, char cli[]) {pnodolda nuevo; nuevo=(pnodolda)malloc(sizeof(tipocuenta)); nuevo->cta=cta; nuevo->cedula=ced; strcpy(nuevo->cliente,cli); if (!*l) {nuevo->ant=*l; nuevo->sig=*l; *l=nuevo; } else { while( (*l)->sig) *l=(*l)->sig; nuevo->ant=*l; nuevo->sig=(*l)->sig; //nuevo->sig=NULL; (*l)->sig=nuevo; } } void mostrar(Ldabierta l, int ord) {pnodolda aux=l; if (l) {printf("\n NUMERO DE CUENTA \t CEDULA \t CLIENTE"); if (ord==1) { while (aux->ant) aux=aux->ant;
Pgina 59

while (aux) {printf("\n %ld \t %ld \t %s",aux->cta,aux->cedula,aux->cliente); aux=aux->sig; } }else if (ord==0) { while (aux->sig) aux=aux->sig; while (aux) {printf("\n %ld \t %ld \t %s",aux->cta,aux->cedula,aux->cliente); aux=aux->ant; } } } else printf("\nLista vacia"); } int contarnodos(Ldabierta l) {int c=0; pnodolda aux=l; while(aux->ant) aux=aux->ant; while(aux) {aux=aux->sig; c++; } return (c); } void Ingreso3ro(Ldabierta *l, long int cta,long int ced,char cli[]) {pnodolda nuevo, aux=*l; int c=0; if (contarnodos(*l)>=2) { nuevo=(pnodolda)malloc(sizeof(tipocuenta)); nuevo->cta=cta; nuevo->cedula=ced; strcpy(nuevo->cliente,cli); while(aux->ant) aux=aux->sig; while (c<2) {c++; aux=aux->sig; } } } QU COSAS FUERON DIFCILES?, CULES FUERON FCILES?, QU APREND HOY? Esta clase se me hizo un poco confunza por las direccione de los nodos y tambin un poco la funcin de contar nodos

Pgina 60

UNIVERSIDAD TECNICA DE MANABI FACULTAD DE CIENCIAS INFORMATICAS CARRERA DE INGENIERIA EN SISTEMAS INFORMATICOS DIARIO METACOGNITIVO
Clase N22: 17 de Diciembre de 2012 PROFESOR GUIA: Ing. Christian Torres

TEMA DISCUTIDO: Listas doblemente enlazadas cerradas DATOS INTERESANTES DISCUTIDOS HOY Eliminar un elemento de una lista doblemente enlazada Analizaremos cuatro casos diferentes: 1. Eliminar el nico nodo de una lista doblemente enlazada. 2. Eliminar el primer nodo. 3. Eliminar el ltimo nodo. 4. Eliminar un nodo intermedio. Eliminar un elemento de una lista doblemente enlazada Analizaremos tres casos diferentes: 5. Eliminar el nico nodo de una lista doblemente enlazada. 6. Eliminar el primer nodo. 7. Eliminar el ltimo nodo. 8. Eliminar un nodo intermedio. Para los casos que lo permitan consideraremos dos casos: que el nodo a eliminar es el actualmente apuntado por Lista o que no. Eliminar el nico nodo en una lista doblemente enlazada En este caso, ese nodo ser el apuntado por Lista. El proceso es simple: 1. Eliminamos el nodo. 2. Hacemos que Lista apunte a NULL.

Pgina 61

Eliminar el primer nodo de una lista doblemente enlazada Tenemos los dos casos posibles, que el nodo a borrar est apuntado por Lista o que no. Si lo est, simplemente hacemos que Lista sea Lista->siguiente.

1. Si nodo apunta a Lista, hacemos que Lista apunte a Lista->siguiente. 2. Hacemos que nodo->siguiente->anterior apunte a NULL 3. Borramos el nodo apuntado por nodo. El paso 2 depara el nodo a borrar del resto de la lista, independientemente del nodo al que apunte Lista.

Eliminar el ltimo nodo de una lista doblemente enlazada De nuevo tenemos los dos casos posibles, que el nodo a borrar est apuntado por Lista o que no. Si lo est, simplemente hacemos que Lista sea Lista->anterior.

1. Si nodo apunta a Lista, hacemos que Lista apunte a Lista->anterior. 2. Hacemos que nodo->anterior->siguiente apunte a NULL 3. Borramos el nodo apuntado por nodo. El paso 2 depara el nodo a borrar del resto de la lista, independientemente del nodo al que apunte Lista. Eliminar un nodo intermedio de una lista doblemente enlazada De nuevo tenemos los dos casos posibles, que el nodo a borrar est apuntado por Lista o que no. Si lo est, simplemente hacemos que Lista sea Lista->anterior o Lista>siguiente Se trata de un caso ms general de los dos casos anteriores.

Pgina 62

1. Si nodo apunta a Lista, hacemos que Lista apunte a Lista->anterior (o Lista->siguiente). 2. Hacemos que nodo->anterior->siguiente apunte a nodo->siguiente. 3. Hacemos que nodo->siguiente->anterior apunte a nodo->anterior. 4. Borramos el nodo apuntado por nodo

Eliminar un nodo de una lista doblemente enlazada, caso general De nuevo tenemos los dos casos posibles, que el nodo a borrar est apuntado por Lista o que no. Si lo est, simplemente hacemos que Lista sea Lista->anterior, si no es NULL o Lista->siguiente en caso contrario. 1. Si nodo apunta a Lista,
O O O

Si Lista->anterior no es NULL hacemos que Lista apunte a Lista->anterior. Si Lista->siguiente no es NULL hacemos que Lista apunte a Lista->siguiente. Si ambos son NULL, hacemos que Lista sea NULL.

2. Si nodo->anterior no es NULL, hacemos que nodo->anterior->siguiente apunte a nodo->siguiente. 3. Si nodo->siguiente no es NULL, hacemos que nodo->siguiente-> anterior apunte a nodo->anterior. 4. Borramos el nodo apuntado por nodo. Algoritmo de la funcin "Borrar"
1. Localizamos el nodo de valor v 2. Existe?

SI: Es el nodo apuntado por lista? Hacer que lista apunte a otro sitio. Es el primer nodo de la lista? Es el ltimo nodo de la lista?

SI:

NO: nodo->anterior->siguiente = nodo->siguiente

NO: nodo->siguiente->anterior = nodo->anterior Borrar nodo

QU COSAS FUERON DIFCILES?, CULES FUERON FCILES?, QU APREND HOY? Lo fcil de la clase de hoy fue recorrer la lista hacia adelante o hacia atrs y tambin la funcin de eliminar un elemento lo que se me hizo ms difcil fue eliminar un nodo intermedio
Pgina 63

UNIVERSIDAD TECNICA DE MANABI FACULTAD DE CIENCIAS INFORMATICAS CARRERA DE INGENIERIA EN SISTEMAS INFORMATICOS DIARIO METACOGNITIVO
Clase N23: 18 de Diciembre de 2012 PROFESOR GUIA: Ing. Christian Torres

TEMA DISCUTIDO: Funciones de las listas doblemente enlazadas cerradas DATOS INTERESANTES DISCUTIDOS HOY Funciones #include <conio.h> #include <stdlib.h> #include <stdio.h> #include <string.h> typedef struct cuenta{ long int cta; long int cedula; char cliente[100]; struct cuenta *ant; struct cuenta *sig; }tipocuenta; typedef tipocuenta *Ldabierta; typedef tipocuenta *pnodolda; //funciones prototipos void Ingreso(Ldabierta *l, long int cta,long int ced,char cli[]); void IngresoFIN(Ldabierta *l, long int cta,long int ced,char cli[]); int contarnodos(Ldabierta l); void Ingreso3ro(Ldabierta *l, long int cta,long int ced,char cli[]); void mostrar(Ldabierta l, int ord); void main() {Ldabierta C=NULL; IngresoFIN(&C,100,13145,"Velez Jose"); IngresoFIN(&C,200,13142,"Rodriguez Kelvin"); IngresoFIN(&C,230,13160,"Molina Frank"); mostrar(C,1); getch(); } //Implementacion de funciones void Ingreso(Ldabierta *l,long int cta,long int ced, char cli[]) {pnodolda nuevo;
Pgina 64

nuevo=(pnodolda)malloc(sizeof(tipocuenta)); nuevo->cta=cta; nuevo->cedula=ced; strcpy(nuevo->cliente,cli); if (!*l) {nuevo->ant=*l; nuevo->sig=*l; *l=nuevo; } else { while( (*l)->ant) *l=(*l)->ant; nuevo->sig=*l; nuevo->ant=(*l)->ant; //nuevo->ant=NULL; (*l)->ant=nuevo; } } void IngresoFIN(Ldabierta *l,long int cta,long int ced, char cli[]) {pnodolda nuevo; nuevo=(pnodolda)malloc(sizeof(tipocuenta)); nuevo->cta=cta; nuevo->cedula=ced; strcpy(nuevo->cliente,cli); if (!*l) {nuevo->ant=*l; nuevo->sig=*l; *l=nuevo; } else { while( (*l)->sig) *l=(*l)->sig; nuevo->ant=*l; nuevo->sig=(*l)->sig; //nuevo->sig=NULL; (*l)->sig=nuevo; } } void mostrar(Ldabierta l, int ord) {pnodolda aux=l; if (l) {printf("\n NUMERO DE CUENTA \t CEDULA \t CLIENTE"); if (ord==1) { while (aux->ant) aux=aux->ant; while (aux) {printf("\n %ld \t %ld \t %s",aux->cta,aux->cedula,aux->cliente); aux=aux->sig; } }else if (ord==0)
Pgina 65

{ while (aux->sig) aux=aux->sig; while (aux) {printf("\n %ld \t %ld \t %s",aux->cta,aux->cedula,aux->cliente); aux=aux->ant; } } } else printf("\nLista vacia"); } int contarnodos(Ldabierta l) {int c=0; pnodolda aux=l; while(aux->ant) aux=aux->ant; while(aux) {aux=aux->sig; c++; } return (c); } void Ingreso3ro(Ldabierta *l, long int cta,long int ced,char cli[]) {pnodolda nuevo, aux=*l; int c=0; if (contarnodos(*l)>=2) { nuevo=(pnodolda)malloc(sizeof(tipocuenta)); nuevo->cta=cta; nuevo->cedula=ced; strcpy(nuevo->cliente,cli); while(aux->ant) aux=aux->sig; while (c<2) {c++; aux=aux->sig; } } } QU COSAS FUERON DIFCILES?, CULES FUERON FCILES?, QU APREND HOY? Esta clase se me hizo un poco confunza por las direccione de los nodos y tambin un poco la funcin de contar nodos

Pgina 66

UNIVERSIDAD TECNICA DE MANABI FACULTAD DE CIENCIAS INFORMATICAS CARRERA DE INGENIERIA EN SISTEMAS INFORMATICOS DIARIO METACOGNITIVO
Clase N24: 7 de Enero de 2012 PROFESOR GUIA: Ing. Christian Torres

Leccin listas doblemente enlazadas cerradas #include<string.h> #include<conio.h> #include<stdlib.h> #include<stdio.h> typedef struct Materia{char materia[40]; struct Materia *sig; struct Materia *ant; }tipomateria; typedef tipomateria *listadc; typedef tipomateria *pnodo; void ingreso(listadc *l, char mat[]); void imprimir(listadc l); void ingreso(listadc *l, char mat[]) {pnodo nuevo; if (!*l) { nuevo=(pnodo)malloc(sizeof(tipomateria)); strcpy(nuevo->materia,mat); *l=nuevo; nuevo->ant=*l; nuevo->sig=*l; printf("\nMateria Ingresada"); } else {pnodo aux=*l; while((aux->sig!=*l) && (strcmp(aux->materia,mat)!=0)) {aux=aux->sig; } if (strcmp(aux->materia,mat)!=0) { nuevo=(pnodo)malloc(sizeof(tipomateria)); strcpy(nuevo->materia,mat);

Pgina 67

nuevo->ant=(*l)->ant; (*l)->ant->sig=nuevo; nuevo->sig=*l; (*l)->ant=nuevo; printf("\nMateria Ingresada"); } } getch();} void imprimir(listadc l) { pnodo aux=l; if(l) { do{printf("\n %s",aux->materia); aux=aux->sig; }while(aux!=l); } else printf("\n Lista Vacia.."); getch();} void main() {listadc A=NULL; int op; char m[40]; do{clrscr(); printf("\n EJERCICIO DE LISTAS DOBLEMENTE ENLAZADAS CERRADAS"); printf("\n\n1.- Ingresar Materia"); printf("\n\n2.- Imprimir Materia"); printf("\n\n3.- Salir"); scanf("%d",&op); if (op==1) {printf("\n Ingrese la materia: "); fflush(stdin);scanf("%s",m); ingreso(&A,m); } else if(op==2) } }while (op!=3); } {imprimir(A);

Pgina 68

UNIVERSIDAD TECNICA DE MANABI FACULTAD DE CIENCIAS INFORMATICAS CARRERA DE INGENIERIA EN SISTEMAS INFORMATICOS DIARIO METACOGNITIVO
Clase N25: 8 de Enero de 2012 PROFESOR GUIA: Ing. Christian Torres

TEMA DISCUTIDO: Recursividad DATOS INTERESANTES DISCUTIDOS HOY Que es recursividad Caractersticas Ventajas e inconvenientes Tipos de recursiones

Recursividad
El concepto de recursividad va ligado al de repeticin. Son recursivos aquellos algoritmos que, estando encapsulados dentro de una funcin, son llamados desde ella misma una y otra vez, en contraposicin a los algoritmos iterativos que hacen uso de bucles while, dowhile, for, entre otros C A RA C TE R S T I C A S . Un algoritmo recursivo consta de una parte recursiva, otra iterativa o no recursiva y una condicin de terminacin. La parte recursiva y la condicin de terminacin siempre existen. En cambio la parte no recursiva puede coincidir con la condicin de terminacin. Algo muy importante a tener en cuenta cuando usemos la recursividad es que es necesario asegurarnos que llega un momento en que no hacemos ms llamadas recursivas. Si no se cumple esta condicin el programa n o parar nunca. V E NT A J A S E I NC O NV E NI E N TE S. La recursividad es confusa y, ms an, peligrosa. No es difcil que una programa recursivo deje sin memoria a la mquina sobre la que se est ejecutando, debido a un algoritmo mal codificado. Incluso cuando el programa es correcto, su ejecucin con determinados parmetros de entrada puede requerir tantas llamadas recursivas que llegue a agotar los recursos del sistema (cada llamada implica el almacenamiento de variables de estado y otros parmetros).
Pgina 69

Otro inconveniente est en la velocidad. Las sucesivas llamadas a s misma que realiza la funcin recursiva ralentizan la ejecucin de todo el proceso. La nica gran ventaja de la recursividad est en la reduccin, en algunos casos notable, del tamao del cdigo. Sin embargo, este aspecto nunca pesa ms que la creacin de un cdigo seguro, rpido y estable. E J E MP L O IT E R A T I V O : Int F a cto ria l( int n ) { int i, re s = l; for(i = l; i<=n; i++) re s = re s * i; re tu rn (re s ) ; } RE CU RSIVO: int F a cto ria l ( int n ) { i f (n = = 0 ) re t u rn (1 ); re t u rn (n * F a cto ria l (n -1 )) ; }

Recursin directa e indirecta Se habla de recursin directa cuando la funcin se llama a s misma. Se habla de recursin indirecta cuando, por ejemplo, una funcin A llama a una funcin B, que a su vez llama a una funcin C, la cual llama a la funcin. De esta forma es posible crear largas cadenas y ramificaciones

QU COSAS FUERON DIFCILES?, CULES FUERON FCILES?, QU APREND HOY? Esta clase se me hizo fcil debido a que lo que debemos de saber es que la recursividad se trata de implementar una funcin muchas veces dentro de otra.

Pgina 70

UNIVERSIDAD TECNICA DE MANABI FACULTAD DE CIENCIAS INFORMATICAS CARRERA DE INGENIERIA EN SISTEMAS INFORMATICOS DIARIO METACOGNITIVO
Clase N26: 14 de Enero de 2012 PROFESOR GUIA: Ing. Christian Torres

TEMA DISCUTIDO: Arbol DATOS INTERESANTES DISCUTIDOS HOY Definicin Un rbol es una estructura no lineal en la que cada nodo puede apuntar a uno o varios nodos. Tambin se suele dar una definicin recursiva: un rbol es una estructura en compuesta por un dato y varios rboles. Esto son definiciones simples. Pero las caractersticas que implican no lo son tanto

Definiremos varios conceptos. En relacin con otros nodos: Nodo hijo: cualquiera de los nodos apuntados por uno de los nodos del rbol. En el ejemplo, 'L' y 'M' son hijos de 'G'. Nodo padre: nodo que contiene un puntero al nodo actual. En el ejemplo, el nodo 'A' es padre de 'B', 'C' y 'D'. Los rboles con los que trabajaremos tienen otra caracterstica importante: cada nodo slo puede ser apuntado por otro nodo, es decir, cada nodo slo tendr un padre. Esto hace que estos rboles estn fuertemente jerarquizados, y es lo que en realidad les da la apariencia de rboles. En cuanto a la posicin dentro del rbol: Nodo raz: nodo que no tiene padre. Este es el nodo que usaremos para referirnos al rbol.
Pgina 71

En el ejemplo, ese nodo es el 'A'. Nodo hoja: nodo que no tiene hijos. En el ejemplo hay varios: 'F', 'H', 'I', 'K','L', 'M', 'N' y 'O'. Nodo rama: aunque esta definicin apenas la usaremos, estos son los nodos que no pertenecen a ninguna de las dos categoras anteriores. En el ejemplo: 'B', 'C', 'D', 'E', 'G' y 'J'. Otra caracterstica que normalmente tendrn nuestros rboles es que todos los nodos contengan el mismo nmero de punteros, es decir, usaremos la misma estructura para todos los nodos del rbol. Esto hace que la estructura sea ms sencilla, y por lo tanto tambin los programas para trabajar con ellos. Tampoco es necesario que todos los nodos hijos de un nodo concreto existan. Es decir, que pueden usarse todos, algunos o ninguno de los punteros de cada nodo. Un rbol en el que en cada nodo o bien todos o ninguno de los hijos existe, se llama rbol completo. En una cosa, los rboles se parecen al resto de las estructuras que hemos visto: dado un nodo cualquiera de la estructura, podemos considerarlo como una estructura independiente. Es decir, un nodo cualquiera puede ser considerado como la raz de un rbol completo. Existen otros conceptos que definen las caractersticas del rbol, con relacin a su tamao: Orden: es el nmero potencial de hijos que puede tener cada elemento de rbol. De este modo, diremos que un rbol en el que cada nodo puede apuntar a otros dos es de orden dos, si puede apuntar a tres ser de orden tres, etc. Grado: el nmero de hijos que tiene el elemento con ms hijos dentro del rbol. En el rbol del ejemplo, el grado es tres, ya que tanto 'A' como 'D' tienen tres hijos, y no existen elementos con ms de tres hijos. struct nodo { int dato; struct nodo *rama1; struct nodo *rama2; struct nodo *rama3;}; O generalizando ms: #define ORDEN 5 struct nodo {int dato; struct nodo *rama[ORDEN]; }; Declaraciones de tipos para manejar rboles en C: Para C, y basndonos en la declaracin de nodo que hemos visto ms arriba, trabajaremos con los siguientes tipos: typedef struct _nodo {int dato; struct _nodo *rama[ORDEN];} tipoNodo; typedef tipoNodo *pNodo; typedef tipoNodo *Arbol; Al igual que hicimos con las listas que hemos visto hasta ahora, declaramos un tipo tipoNodo para declarar nodos, y un tipo pNodo para es el tipo para declarar punteros a un nodo. rbol es el tipo para declarar rboles de orden ORDEN .

Pgina 72

Nivel: se define para cada elemento del rbol como la distancia a la raz, medida en nodos. El nivel de la raz es cero y el de sus hijos uno. As sucesivamente. En el ejemplo, el nodo 'D' tiene nivel 1, el nodo 'G' tiene nivel 2, y el nodo 'N', nivel 3. Altura: la altura de un rbol se define como el nivel del nodo de mayor nivel. Como cada nodo de un rbol puede considerarse a su vez como la raz de un rbol, tambin podemos hablar de altura de ramas. El rbol del ejemplo tiene altura 3, la rama 'B' tiene altura 2, la rama 'G' tiene altura 1, la 'H' cero, etc. Los rboles de orden dos son bastante especiales, de hecho les dedicaremos varios captulos. Estos rboles se conocen tambin como rboles binarios. Frecuentemente, aunque tampoco es estrictamente necesario, para hacer ms fcil moverse a travs del rbol, aadiremos un puntero a cada nodo que apunte al nodo padre. De este modo podremos avanzar en direccin a la raz, y no slo hacia las hojas. Es importante conservar siempre el nodo raz ya que es el nodo a partir del cual se desarrolla el rbol, si perdemos este nodo, perderemos el acceso a todo el rbol. El nodo tpico de un rbol difiere de los nodos que hemos visto hasta ahora para listas, aunque slo en el nmero de nodos. Veamos un ejemplo de nodo para crear rboles de orden tres:

El movimiento a travs de rboles, salvo que implementemos punteros al nodo padre, ser siempre partiendo del nodo raz hacia un nodo hoja. Cada vez que lleguemos a un nuevo nodo podremos optar por cualquiera de los nodos a los que apunta para avanzar al siguiente nodo. En general, intentaremos que exista algn significado asociado a cada uno de los punteros dentro de cada nodo, los rboles que estamos viendo son abstractos, pero las aplicaciones no tienen por qu serlo. Un ejemplo de estructura en rbol es el sistema de directorios y ficheros de un sistema operativo. Aunque en este caso se trata de rboles con nodos de dos tipos, nodos directorio y nodos fichero, podramos considerar que los nodos hoja son ficheros y los nodos rama son directorios. Otro ejemplo podra ser la tabla de contenido de un libro, por ejemplo de este mismo curso, dividido en captulos, y cada uno de ellos en subcaptulos. Aunque el libro sea algo lineal, como una lista, en el que cada captulo sigue al anterior, tambin es posible acceder a cualquier punto de l a travs de la tabla de contenido. Tambin se suelen organizar en forma de rbol los organigramas de mando en empresas o en el ejrcito, y los rboles genealgicos.

Pgina 73

QU COSAS FUERON DIFCILES?, CULES FUERON FCILES?, QU APREND HOY? Esta clase no tuvo mayor complejidad ya que aprender a calcular los tipos de nodos de un arbol es fcil de comprender, en especial con la explicacin del docente

Pgina 74

UNIVERSIDAD TECNICA DE MANABI FACULTAD DE CIENCIAS INFORMATICAS CARRERA DE INGENIERIA EN SISTEMAS INFORMATICOS DIARIO METACOGNITIVO
Clase N27: 15 de Enero de 2012 PROFESOR GUIA: Ing. Christian Torres

TEMA DISCUTIDO: rboles en c DATOS INTERESANTES DISCUTIDOS HOY Operaciones bsicas y recorridos

Operaciones bsicas con rboles:


Salvo que trabajemos con rboles especiales, como los que veremos ms adelante, las inserciones sern siempre en punteros de nodos hoja o en punteros libres de nodos rama. Con estas estructuras no es tan fcil generalizar, ya que existen muchas variedades de rboles. De nuevo tenemos casi el mismo repertorio de operaciones de las que disponamos con las listas: Aadir o insertar elementos. Buscar o localizar elementos. Borrar elementos. Moverse a travs del rbol. Recorrer el rbol completo. Los algoritmos de insercin y borrado dependen en gran medida del tipo de rbol que estemos implementando, de modo que por ahora los pasaremos por alto y nos centraremos ms en el modo de recorrer rboles. Recorridos por rboles: El modo evidente de moverse a travs de las ramas de un rbol es siguiendo los punteros, del mismo modo en que nos movamos a travs de las listas. Esos recorridos dependen en gran medida del tipo y propsito del rbol, pero hay ciertos recorridos que usaremos frecuentemente. Se trata de aquellos recorridos que incluyen todo el rbol. Hay tres formas de recorrer un rbol completo, y las tres se suelen implementar mediante recursividad. En los tres casos se sigue siempre a partir de cada nodo todas las ramas una por una. Supongamos que tenemos un rbol de orden tres, y queremos recorrerlo por completo. Partiremos del nodo raz: RecorrerArbol(raiz); La funcin RecorrerArbol , aplicando recursividad, ser tan sencilla como invocar de nuevo a la funcin RecorrerArbol para cada una de las ramas:
Pgina 75

void RecorrerArbol(arbol a) {if(a == NULL) return; RecorrerArbol(a->rama[0]); RecorrerArbol(a->rama[1]); RecorrerArbol(a->rama[2]);}


Lo que diferencia los distintos mtodos de recorrer el rbol no es el sistema de hacerlo, sino el momento que elegimos para procesar el valor de cada nodo con relacin a los recorridos de cada una de las ramas.

Los tres tipos son: Pre-orden: En este tipo de recorrido, el valor del nodo se procesa antes de recorrer las ramas:

void PreOrden(arbol a){ if(a == NULL) return; Procesar(dato); RecorrerArbol(a->rama[0]); RecorrerArbol(a->rama[1]); RecorrerArbol(a->rama[2]);}
Si seguimos el rbol del ejemplo en pre-orden, y el proceso de los datos es sencillamente mostrarlos por pantalla, obtendremos algo as: ABEKFCGLMDHIJNO In-orden: En este tipo de recorrido, el valor del nodo se procesa despus de recorrer la primera rama y antes de recorrer la ltima. Esto tiene ms sentido en el caso de rboles binarios, y tambin cuando existen ORDEN-1 datos, en cuyo caso procesaremos cada dato entre el recorrido de cada dos ramas (este es el caso de los rboles-b):

void InOrden(arbol a){ if(a == NULL) return; RecorrerArbol(a->rama[0]); Procesar(dato); RecorrerArbol(a->rama[1]); RecorrerArbol(a->rama[2]);} Si seguimos el rbol del ejemplo en in-orden, y el proceso de los datos es sencillamente mostrarlos por pantalla, obtendremos algo as: KEBFALGMCHDINJO Post-orden: En este tipo de recorrido, el valor del nodo se procesa despus de recorrer todas las ramas: void PostOrden(arbol a){ if(a == NULL) return; RecorrerArbol(a->rama[0]);
Pgina 76

RecorrerArbol(a->rama[1]); RecorrerArbol(a->rama[2]); Procesar(dato);} Si seguimos el rbol del ejemplo en post-orden, y el proceso de los datos es sencillamente mostrarlos por pantalla, obtendremos algo as: KEFBLMGCHINOJDA Eliminar nodos en un rbol El proceso general es muy sencillo en este caso, pero con una importante limitacin, slo podemos borrar nodos hoja: El proceso sera el siguiente: 1. Buscar el nodo padre del que queremos eliminar. 2. Buscar el puntero del nodo padre que apunta al nodo que queremos borrar. 3. Liberar el nodo. 4. padre->nodo[i] = NULL;. Cuando el nodo a borrar no sea un nodo hoja, diremos que hacemos una "poda", y en ese caso eliminaremos el rbol cuya raz es el nodo a borrar. Se trata de un procedimiento recursivo, aplicamos el recorrido PostOrden, y el proceso ser borrar el nodo. El procedimiento es similar al de borrado de un nodo: 1. Buscar el nodo padre del que queremos eliminar. 2. Buscar el puntero del nodo padre que apunta al nodo que queremos borrar. 3. Podar el rbol cuyo padre es nodo. 4. padre->nodo[i] = NULL;. En el rbol del ejemplo, para podar la rama 'B', recorreremos el subrbol 'B' en postorden, eliminando cada nodo cuando se procese, de este modo no perdemos los punteros a las ramas apuntadas por cada nodo, ya que esas ramas se borrarn antes de eliminar el nodo. De modo que el orden en que se borrarn los nodos ser: KEFyB

QU COSAS FUERON DIFCILES?, CULES FUERON FCILES?, QU APREND HOY? Esta clase fue un poco confusa por aprender correctamente los recorridos de un arbol ya se en Pre-Orden, In-Orden, Post-Orden.

Pgina 77

UNIVERSIDAD TECNICA DE MANABI FACULTAD DE CIENCIAS INFORMATICAS CARRERA DE INGENIERIA EN SISTEMAS INFORMATICOS DIARIO METACOGNITIVO
Clase N28: 21 de Enero de 2012 PROFESOR GUIA: Ing. Christian Torres

TEMA DISCUTIDO: rboles en c DATOS INTERESANTES DISCUTIDOS HOY Comprobacin del nodo hoja. Comprobacin de rboles vacos. Altura del rbol. Movimiento a travs del rbol. Para movernos a travs del rbol usaremos punteros auxiliares, de modo que Clculo de: Nmero de nodos. Buscar un elemento Eliminar un nodo Insercin en un abb

Operaciones con rboles binarios


INSERCIN EN UN ABB 1. Padre = NULL 2. nodo = Raiz 3. Bucle: mientras actual no sea un rbol vaco o hasta que se encuentre el elemento. a. Si el valor del nodo raz es mayor que el elemento que buscamos, continuaremos la bsqueda en el rbol izquierdo: Padre=nodo, nodo=nodo->izquierdo. b. Si el valor del nodo raz es menor que el elemento que buscamos, continuaremos la bsqueda en el rbol derecho: Padre=nodo, nodo=nodo->derecho. 4. Si nodo no es NULL, el elemento est en el rbol, por lo tanto salimos. 5. Si Padre es NULL, el rbol estaba vaco, por lo tanto, el nuevo rbol slo contendr el nuevo elemento, que ser la raz del rbol. 6. Si el elemento es menor que el Padre, entonces insertamos el nuevo elemento como un nuevo rbol izquierdo de Padre. 7. Si el elemento es mayor que el Padre, entonces insertamos el nuevo elemento como un nuevo rbol derecho de Padre.
Pgina 78

ELIMINAR UN NODO 1. Padre = NULL 2. Si el rbol est vaco: el elemento no est en el rbol, por lo tanto salimos sin eliminar ningn elemento. 3. Si el valor del nodo raz es igual que el del elemento que buscamos, estamos ante uno de los siguientes casos: a. El nodo raz es un nodo hoja: i. Si 'Padre' es NULL, el nodo raz es el nico del rbol, por lo tanto el puntero al rbol debe ser NULL. ii. Si raz es la rama derecha de 'Padre', hacemos que esa rama apunte a NULL. iii. Si raz es la rama izquierda de 'Padre', hacemos que esa rama apunte a NULL. iv. Eliminamos el nodo, y salimos. b. El nodo no es un nodo hoja: i. Buscamos el 'nodo' ms a la izquierda del rbol derecho de raz o el ms a la derecha del rbol izquierdo. Hay que tener en cuenta que puede que slo exista uno de esos rboles. Al mismo tiempo, actualizamos 'Padre' para que apunte al padre de 'nodo'. ii. Intercambiamos los elementos de los nodos raz y 'nodo'. iii. Borramos el nodo 'nodo'. Esto significa volver a (3), ya que puede suceder que 'nodo' no sea un nodo hoja. 4. Si el valor del nodo raz es mayor que el elemento que buscamos, continuaremos la bsqueda en el rbol izquierdo. 5. Si el valor del nodo raz es menor que el elemento que buscamos, continuaremos la bsqueda en el rbol derecho. BUSCAR UN ELEMENTO 1. Si el rbol est vaco, terminamos la bsqueda: el elemento no est en el rbol. 2. Si el valor del nodo raz es igual que el del elemento que buscamos, terminamos la bsqueda con xito. 3. Si el valor del nodo raz es mayor que el elemento que buscamos, continuaremos la bsqueda en el rbol izquierdo. 4. Si el valor del nodo raz es menor que el elemento que buscamos, continuaremos la bsqueda en el rbol derecho.

Movimiento a travs del rbol. Para movernos a travs del rbol usaremos punteros auxiliares, de modo que desde cualquier puntero los movimientos posibles sern: moverse al nodo raz de la rama izquierda, moverse al nodo raz de la rama derecha o moverse al nodo Raiz del rbol.

Pgina 79

COMPROBACIN DE RBOLES VACOS. Un rbol est vaco si su raz es NULL COMPROBACIN DEL NODO HOJA. Esta funcin tambin es sencilla de implementar: ALTURA DEL RBOL. 1. Iniciamos un recorrido del rbol en postorden, con la variable de altura igual a cero. 2. Cada vez que empecemos a recorrer una nueva rama, incrementamos la altura para ese nodo. 3. Despus de procesar las dos ramas, verificamos si la altura del nodo es mayor que la variable que almacena la altura actual del rbol, si es as, actualizamos esa variable. QU COSAS FUERON DIFCILES?, CULES FUERON FCILES?, QU APREND HOY? Lo que se me hizo ms difcil fue calcular la altura de un arbol.

Pgina 80

UNIVERSIDAD TECNICA DE MANABI FACULTAD DE CIENCIAS INFORMATICAS CARRERA DE INGENIERIA EN SISTEMAS INFORMATICOS DIARIO METACOGNITIVO
Clase N29: 22 de Enero de 2012 PROFESOR GUIA: Ing. Christian Torres

TEMA DISCUTIDO: Tipos de rboles especiales (avl) DATOS INTERESANTES DISCUTIDOS HOY: ARBOLES AVL DEFINICION: OPERACIONES CON ARBOLES AVL Los AVL son tambin ABB, de modo que mantienen todas las operaciones FACTOR DE EQUILIBRIO PROCEDIMIENTO PARA EQUILIBRAR

ARBOLES AVL Definicin: Un rbol AVL (llamado as por las iniciales de sus inventores: Adelson-Velskii y Landis) es un rbol binario de bsqueda en el que para cada nodo, las alturas de sus subrboles izquierdo y derecho no difieren en ms de 1. No se trata de rboles perfectamente equilibrados, pero s son lo suficientemente equilibrados como para que su comportamiento sea lo bastante bueno como para usarlos donde los ABB no garantizan tiempos de bsqueda ptimos. El algoritmo para mantener un rbol AVL equilibrado se basa en reequilibrados locales, de modo que no es necesario explorar todo el rbol despus de cada insercin o borrado. OPERACIONES CON ARBOLES AVL Los AVL son tambin ABB, de modo que mantienen todas las operaciones que poseen stos. Las nuevas operaciones son las de equilibrar el rbol, pero eso se hace como parte de las operaciones de insertado y borrado. FACTOR DE EQUILIBRIO Cada nodo, adems de la informacin que se pretende almacenar, debe tener los dos punteros a los rboles derecho e izquierdo, igual que los ABB, y adems un miembro nuevo: el factor de equilibrio. El factor de equilibrio es la diferencia entre las alturas del rbol derecho y el izquierdo:
Pgina 81

Por definicin, para un rbol AVL, este valor debe ser -1, 0 1. PROCEDIMIENTO PARA EQUILIBRAR /* Equilibrar rbol AVL partiendo de un nodo*/ void Equilibrar(Arbol *a, pNodo nodo, int rama, int nuevo) { int salir = FALSE; /* Recorrer camino inverso actualizando valores de FE: */ while(nodo && !salir) { if(nuevo) if(rama == IZQUIERDO) nodo->FE--; /* Depende de si aadimos ... */ else nodo->FE++; else if(rama == IZQUIERDO) nodo->FE++; /* ... o borramos */ else nodo->FE--; if(nodo->FE == 0) salir = TRUE; /* La altura de las rama que empieza en nodo no ha variado, salir de Equilibrar */ else if(nodo->FE == -2) { /* Rotar a derechas y salir: */ if(nodo->izquierdo->FE == 1) RDD(a, nodo); /* Rotacin doble */ else RSD(a, nodo); /* Rotacin simple */ salir = TRUE; } else if(nodo->FE == 2) { /* Rotar a izquierdas y salir: */ if(nodo->derecho->FE == -1) RDI(a, nodo); /* Rotacin doble */ else RSI(a, nodo); /* Rotacin simple */ salir = TRUE; } if(nodo->padre) if(nodo->padre->derecho == nodo) rama = DERECHO; else rama = IZQUIERDO; nodo = nodo->padre; /* Calcular FE, siguiente nodo del camino. */ } } QU COSAS FUERON DIFCILES?, CULES FUERON FCILES?, QU APREND HOY? En esta clase se me hizo un poco complejo el entendimiento y procesos de los arboles AVL

Pgina 82

UNIVERSIDAD TECNICA DE MANABI FACULTAD DE CIENCIAS INFORMATICAS CARRERA DE INGENIERIA EN SISTEMAS INFORMATICOS DIARIO METACOGNITIVO
Clase N30: 28 de Enero de 2012 PROFESOR GUIA: Ing. Christian Torres

TEMA DISCUTIDO: Tipos de rboles especiales (avl) DATOS INTERESANTES DISCUTIDOS HOY: Rotaciones simples de nodos Rotacin simple a derecha Rotacin simple a izquierda Rotaciones en un rbol avl Rotaciones dobles de nodos ROTACIONES SIMPLES DE NODOS Los reequilibrados se realizan mediante rotaciones, en el siguiente punto veremos cada caso, ahora vamos a ver las cuatro posibles rotaciones que podemos aplicar. ROTACIN SIMPLE A DERECHA Esta rotacin se usar cuando el subrbol izquierdo de un nodo sea 2 unidades ms alto que el derecho, es decir, cuando su FE sea de -2. Y adems, la raz del subrbol izquierdo tenga una FE de -1 0, es decir, que est cargado a la izquierda o equilibrado.

Pgina 83

Procederemos del siguiente modo: llamaremos P al nodo que muestra el desequilibrio, el que tiene una FE de -2. Y llamaremos Q al nodo raz del subrbol izquierdo de P. Adems, llamaremos A al subrbol izquierdo de Q, B al subrbol derecho de Q y C al subrbol derecho de P. En el grfico que puede observar que tanto B como C tienen la misma altura (n), y A es una unidad mayor (n+1). Esto hace que el FE de Q sea -1, la altura del subrbol que tiene Q como raz es (n+2) y por lo tanto el FE de P es -2. 1. Pasamos el subrbol derecho del nodo Q como subrbol izquierdo de P. Esto mantiene el rbol como ABB, ya que todos los valores a la derecha de Q siguen estando a la izquierda de P. 2. El rbol P pasa a ser el subrbol derecho del nodo Q. 3. Ahora, el nodo Q pasa a tomar la posicin del nodo P, es decir, hacemos que la

entrada al rbol sea el nodo Q, en lugar del nodo P. Previamente, P puede que fuese un rbol completo o un subrbol de otro nodo de menor altura.

En el rbol resultante se puede ver que tanto P como Q quedan equilibrados en cuanto altura. En el caso de P porque sus dos subrboles tienen la misma altura (n), en el caso de Q, porque su subrbol izquierdo A tiene una altura (n+1) y su subrbol derecho tambin, ya que a P se aade la altura de cualquiera de sus subrboles.

Pgina 84

En el caso de que el subrbol izquierdo est equilibrado, el procedimiento es similar, pero los FE de los nodos P y Q en el rbol resultante son diferentes. En principio, parece poco probable que nos encontremos un rbol con esta estructura, pero es posible encontrarlos cuando se borran nodos.

Aplicamos el mismo algoritmo para la rotacin:

Pgina 85

En el rbol resultante se puede ver que tanto P como Q quedan equilibrados en cuanto altura. En el caso de P porque su subrbol izquierdo es una unidad ms alto que el derecho, quedando su FE en -1. En el caso de Q, porque su subrbol derecho una altura (n+1) y su subrbol izquierdo, una altura de n.

De modo que, aunque aplicamos el mismo algoritmo, ya que en ambos casos se trata de una rotacin simple, deberemos tener en cuenta estos detalles a la hora de ajustar los nuevos valores de FE en nuestro programa. ROTACIN SIMPLE A IZQUIERDA Se trata del caso simtrico del anterior. Esta rotacin se usar cuando el subrbol derecho de un nodo sea 2 unidades ms alto que el izquierdo, es decir, cuando su FE sea de 2. Y adems, la raz del subrbol derecho tenga una FE de 1 0, es decir, que est cargado a la derecha o est equilibrado.

Procederemos del siguiente modo: Llamaremos P al nodo que muestra el desequilibrio, el que tiene una FE de 2. Y llamaremos Q al nodo raz del subrbol derecho de P. Adems, llamaremos A al subrbol izquierdo de P, B al subrbol izquierdo de Q y C al subrbol derecho de Q. En el grfico que puede observar que tanto A como B tienen la misma altura (n), y C es
Pgina 86

una unidad mayor (n+1). Esto hace que el FE de Q sea 1, la altura del subrbol que tiene Q como raz es (n+2) y por lo tanto el FE de P es 2. 1. Pasamos el subrbol izquierdo del nodo Q como subrbol derecho de P. Esto mantiene el rbol como ABB, ya que todos los valores a la izquierda de Q siguen estando a la derecha de P. 2. El rbol P pasa a ser el subrbol izquierdo del nodo Q. 3. Ahora, el nodo Q pasa a tomar la posicin del nodo P, es decir, hacemos que la entrada al rbol sea el nodo Q, en lugar del nodo P. Previamente, P puede que fuese un rbol completo o un subrbol de otro nodo de menor altura.

En el rbol resultante se puede ver que tanto P como Q quedan equilibrados en cuanto altura. En el caso de P porque sus dos subrboles tienen la misma altura (n), en el caso de Q, porque su subrbol izquierdo A tiene una altura (n+1) y su subrbol derecho tambin, ya que a P se aade la altura de cualquiera de sus subrboles

Pgina 87

Rotaciones dobles de arboles Esta rotacin se usar cuando el subrbol izquierdo de un nodo sea 2 unidades ms alto que el derecho, es decir, cuando su FE sea de -2. Y adems, la raz del subrbol izquierdo tenga una FE de 1, es decir, que est cargado a la derecha. Este es uno de los posibles rboles que pueden presentar esta estructura, pero hay otras dos posibilidades. El nodo R puede tener una FE de -1, 0 1. En cada uno de esos casos los rboles izquierdo y derecho de R (B y C) pueden tener alturas de n y n-1, n y n, o n-1 y n, respectivamente. El modo de realizar la rotacin es independiente de la estructura del rbol R, cualquiera de las tres produce resultados equivalentes. Haremos el anlisis para el caso en que FE sea -1.

En este caso tendremos que realizar dos rotaciones. Llamaremos P al nodo que muestra el desequilibrio, el que tiene una FE de -2. Llamaremos Q al nodo raz del subrbol izquierdo de P, y R al nodo raz del subrbol derecho de Q. 1. Haremos una rotacin simple de Q a la izquierda. 2. Despus, haremos una rotacin simple de P a la derecha. Con ms detalle, procederemos del siguiente modo: 1. Pasamos el subrbol izquierdo del nodo R como subrbol derecho de Q. Esto mantiene el rbol como ABB, ya que todos los valores a la izquierda de R siguen estando a la derecha de Q.

Pgina 88

2. Ahora, el nodo R pasa a tomar la posicin del nodo Q, es decir, hacemos que la raz del subrbol izquierdo de P sea el nodo R en lugar de Q. 3. El rbol Q pasa a ser el subrbol izquierdo del nodo R.

4. Pasamos el subrbol derecho del nodo R como subrbol izquierdo de P. Esto mantiene el rbol como ABB, ya que todos los valores a la derecha de R siguen estando a la izquierda de P. 5. Ahora, el nodo R pasa a tomar la posicin del nodo P, es decir, hacemos que la entrada al rbol sea el nodo R, en lugar del nodo P. Como en los casos anteriores, previamente, P puede que fuese un rbol completo o un subrbol de otro nodo de menor altura. 6. El rbol P pasa a ser el subrbol derecho del nodo R

Esta rotacin se usar cuando el subrbol derecho de un nodo sea 2 unidades ms alto que el izquierdo, es decir, cuando su FE sea de 2. Y adems, la raz del subrbol derecho tenga una FE de -1, es decir, que est cargado a la izquierda. Se trata del caso simtrico del anterior. En este caso tambin tendremos que realizar dos rotaciones.

Pgina 89

Llamaremos P al nodo que muestra el desequilibrio, el que tiene una FE de 2. Llamaremos Q al nodo raz del subrbol derecho de P, y R al nodo raz del subrbol izquierdo de Q. 1. Haremos una rotacin simple de Q a la derecha. 2. Despus, haremos una rotacin simple de P a la izquierda. Con ms detalle, procederemos del siguiente modo: 1. Pasamos el subrbol derecho del nodo R como subrbol izquierdo de Q. Esto mantiene el rbol como ABB, ya que todos los valores a la derecha de R siguen estando a la izquierda de Q. 2. Ahora, el nodo R pasa a tomar la posicin del nodo Q, es decir, hacemos que la raz del subrbol derecho de P sea el nodo R en lugar de Q. 3. El rbol Q pasa a ser el subrbol derecho del nodo R. 4. Pasamos el subrbol izquierdo del nodo R como subrbol derecho de P. Esto mantiene el rbol como ABB, ya que todos los valores a la izquierda de R siguen estando a la derecha de P. 5. Ahora, el nodo R pasa a tomar la posicin del nodo P, es decir, hacemos que la entrada al rbol sea el nodo R, en lugar del nodo P. Como en los casos anteriores, previamente, P puede que fuese un rbol completo o un subrbol de otro nodo de menor altura. 6. El rbol P pasa a ser el subrbol izquierdo del nodo R.

QU COSAS FUERON DIFCILES?, CULES FUERON FCILES?, QU APREND HOY? Hoy aprend lo que son las rotaciones en los arboles especiales AVL y lo que se me hizo ms complicado fueron las rotaciones dobles.

Pgina 90

UNIVERSIDAD TECNICA DE MANABI FACULTAD DE CIENCIAS INFORMATICAS CARRERA DE INGENIERIA EN SISTEMAS INFORMATICOS DIARIO METACOGNITIVO
Clase N31: 29 de Enero de 2012 PROFESOR GUIA: Ing. Christian Torres

TEMA DISCUTIDO:
Defensa del proyecto de fin de ciclo MEJOR PROYECTO HECHO POR ANDRES ESCOBAR

#include<stdlib.h> #include<string.h> #include<dos.h> #include<ctype.h> #include<graphics.h> #include<fstream.h> #include<conio.h> #include<iostream.h> #include<stdio.h> FILE *pfile; char *fci={"fci.dat"}; typedef struct representante{ char nombre[20]; long int cedula; long int telefono; char direccion[100]; }; typedef struct matriculas { int nm; char nombre[20]; int curso; char paralelo[2]; struct matriculas *izq; struct matriculas *der; struct representante r; }matricula_; typedef matricula_ *arbol;

Pgina 91

//FUNCION INGRESO void ingreso(matriculas **s,int f) { if(*s==NULL) { (*s)=new(matriculas); (*s)->nm=f; textcolor(2); gotoxy(2,8); cprintf("Nombre:"); cin>>(*s)->nombre; gotoxy(2,10); cprintf("Curso:"); cin>>(*s)->curso; gotoxy(2,12); cprintf("Paralelo:"); cin>>(*s)->paralelo; gotoxy(2,14); cprintf("Datos Reprentante"); gotoxy(2,16); cprintf("Nombres:"); cin>>(*s)->r.nombre; gotoxy(2,18); cprintf("Cedula:"); cin>>(*s)->r.cedula; gotoxy(2,20); cprintf("Telefono:"); cin>>(*s)->r.telefono; gotoxy(2,22); cprintf("Direccion:"); cin>>(*s)->r.direccion; (*s)->izq=(*s)->der=NULL; } else if(f>(*s)->nm) ingreso(&(*s)->der,f); else if(f<(*s)->nm) ingreso(&(*s)->izq,f); else printf("\nIndice duplicado\n"); getch(); }; /*******************COPIAR*****************/ void copiar(arbol *a,matriculas su) { if((*a)==NULL) { (*a)=new (matriculas); (*a)->nm=su.nm; strcpy((*a)->nombre,su.nombre); (*a)->curso=su.curso; strcpy((*a)->paralelo,su.paralelo); (*a)->r.cedula=su.r.cedula; Pgina 92

(*a)->r.telefono=su.r.telefono; strcpy((*a)->r.nombre,su.r.nombre); strcpy((*a)->r.direccion,su.r.direccion); (*a)->izq=(*a)->der=NULL; } else if(su.nm<(*a)->nm) copiar(&(*a)->izq,su); else if(su.nm>(*a)->nm) copiar(&(*a)->der,su); }; /***************** GUARDAR ************/ void Guardar(matriculas *mat) { if(mat==NULL) return; Guardar(mat->izq); Guardar(mat->der); if((pfile=fopen(fci,"a+b"))!=NULL) fwrite(mat,sizeof(matricula_),1,pfile); fclose(pfile); }; /**************** ABRE EL ARCHIVO *******************/ void supermar(matriculas **arbol) { matriculas s; *arbol=NULL; if((pfile=fopen(fci,"rb"))==NULL) { gotoxy(15,10); cprintf("!Atencion: El archivo no existente creacion automatica..."); getch(); return; } rewind(pfile); while(!feof(pfile)) { //fputc(fgetc(pfile),stdout); fread(&s,sizeof(matricula_),1,pfile); copiar(&(*arbol),s); } fclose(pfile); }

Pgina 93

/*********************///////////// void guardar(matriculas *sup) {if((pfile=fopen(fci,"wb"))!=NULL) Guardar(sup); } /**************************BUSCAR******************/ void buscar(matriculas *supe,int b) { if(supe!=NULL) { if((supe)->nm==b) { printf("\nId_Matricula :%d\nAlumno :%s\nCurso :%d\nParalelo :%s\nRepresentante :%s\nCedula :%ld\nTelefono :%ld\nDireccion :%s\n\n",supe>nm,supe->nombre,supe->curso,supe->paralelo,supe->r.nombre,supe->r.cedula,supe>r.telefono,supe->r.direccion); cout<<"------------------------------------------------------------------"; } else { if(b<(supe)->nm) buscar((supe)->izq,b); else buscar((supe)->der,b); } } else printf("\nNUMERO DE MATRICULA NO EXISTE"); getch(); }; void mostrar(matriculas *supe) { if(!(supe->izq)==NULL && !(supe->der)==NULL) { return; } if(supe!=NULL) mostrar(supe->izq); printf("\nId_Matricula :%d\nAlumno :%s\nCurso :%d\nParalelo :%s\nRepresentante :%s\nCedula :%ld\nTelefono :%ld\nDireccion :%s\n\n",supe>nm,supe->nombre,supe->curso,supe->paralelo,supe->r.nombre,supe->r.cedula,supe>r.telefono,supe->r.direccion); mostrar(supe->der); }; Pgina 94

void cargando() { int i,v; char dec; int w=-3,x; textcolor(RED);gotoxy(30,16);cprintf(" CARGANDO ..."); gotoxy(16,16);cprintf("0%===================================="); textcolor(RED); for (x=19;x<=57;x++) { gotoxy(x,16);cprintf("");if (w==111){w=100;}else{w=w+3;} gotoxy(59,16);cprintf("%d%",w); if (x==30) delay(480); else if (x==48) delay(480); else delay(10); } }; /************** ELIMINAR ************/ arbol eliminar(arbol ar,int codi) { arbol a,b; if(ar==NULL) return NULL; else { if(codi==ar->nm) { if(ar->izq==ar->der) { delete(ar); return(NULL); } else if(ar->izq==NULL) { a=ar->der; delete(ar); return(a); } else if(ar->der==NULL) { a=ar->izq; delete(ar); return(a); } Pgina 95

else { b=ar->der; //b=ar->der; while(a->izq) a=a->izq; a->izq=ar->izq; delete(ar); return(b); } } if(ar->nm<codi) ar->der=eliminar(ar->der,codi); else ar->izq=eliminar(ar->izq,codi); return(ar); }} /**************** MODIFICAR ***************/ void modificar(matriculas *s,int bu) { if(s!=NULL) { if((s)->nm==bu) { gotoxy(2,8); cprintf("Nombre:"); cin>>(s)->nombre; gotoxy(2,10); cprintf("Curso:"); cin>>(s)->curso; gotoxy(2,12); cprintf("Paralelo:"); cin>>(s)->paralelo; gotoxy(2,14); cprintf("Datos Reprentante"); gotoxy(2,16); cprintf("Nombres:"); cin>>(s)->r.nombre; gotoxy(2,18); cprintf("Cedula:"); cin>>(s)->r.cedula; gotoxy(2,20); cprintf("Telefono:"); cin>>(s)->r.telefono; gotoxy(2,22); cprintf("Direccion:"); cin>>(s)->r.direccion; gotoxy(2,26); cprintf("Se modifico correctamente........"); } else { if(bu<(s)->nm) modificar((s)->izq,bu); else modificar((s)->der,bu); } } }; Pgina 96

void main() { arbol l=NULL; int k; supermar(&l); char decision,dec; matriculas c; clrscr(); textcolor(5); gotoxy(27,12);cprintf("PROYECTO DE ESTRUCTURA DE DATOS"); textcolor(3); gotoxy(26,14);cprintf("ESCOBAR PINARGOTE EDWIN ANDRES"); textcolor(3); cargando(); do { textcolor(9); textbackground(7); clrscr(); textcolor(18); gotoxy(22,2);cprintf("*********SISTEMA DE MATRICULACION***********"); textcolor(3); gotoxy(27,4);cprintf(" UNIVERSIDAD TECNICA DE MANABI "); textcolor(15); gotoxy(27,5);cprintf("CARRERA DE INGENIERIA EN SISTEMAS "); textcolor(15); gotoxy(27,6);cprintf("FACULTAD DE CIENCIAS INFORMATICAS "); textcolor(15); gotoxy(29,49);cprintf("PORTOVIEJO-MANABI-ECUADOR "); textcolor(10); gotoxy(2,8);cprintf("\nA.REGISTRAR"); textcolor(9); gotoxy(15,8);cprintf("\nB.MOSTRAR"); textcolor(12); gotoxy(30,8);cprintf("\nC.MODIFICAR"); textcolor(17); gotoxy(45,8);cprintf("\nD.ELIMINAR"); textcolor(8); Pgina 97

gotoxy(60,8);cprintf("\nE.BUSCAR"); textcolor(2); textcolor(1); gotoxy(73,8);cprintf("\nF.SALIR\n"); textcolor(1); textcolor(3); gotoxy(2,15);cprintf("\nPULSE UNA OPCION:"); do { do { decision=toupper(getch()); }while(!isalpha(decision)); }while(decision<'A'||decision>'F'); switch(decision) { case 'A': { clrscr(); cargando(); do{ clrscr(); textcolor(1); gotoxy(2,2);cprintf("INGRESE LOS DATOS ALUMNO\n"); gotoxy(2,6);cprintf("\nIngrese el numero de matricula: "); scanf("%d",&k); ingreso(&l,k); printf("\nIngrese (S) para seguir o (N) para salir "); do{ dec=toupper(getch()); }while(!isalpha(dec)); }while(dec!='N'); getch(); clrscr(); Guardar(l); break; } case 'B': { clrscr(); mostrar(l); getch(); break; } Pgina 98

case 'C': { clrscr(); gotoxy(2,2);cprintf("\nIngrese numero de matricula del estudiante a Modificar: "); scanf("%d",&k); modificar(l,k); getch(); guardar(l); break; } case 'D': {clrscr(); gotoxy(2,2);cprintf("\nIngrese numero de matricula del estudiante a Eliminar: "); scanf("%d",&k); l=eliminar(l,k); getch(); guardar(l); break; } case 'E': { clrscr(); gotoxy(2,2);cprintf("\nIngrese numero de matricula del estudiante a buscar: "); scanf("%d",&k); buscar(l,k); break; } } }while(decision!='F'); printf("\nPresione una tecla para salir"); getch(); }

Pgina 99

Ingresando al sistema

Menu Principal

Opcion A: Ingresa los datos del alumno y de su representante

Pgina 100

Opcion B: Muestra los datos que se encuentran registrados

Opcin C: Modifica el estudiante que uno desee, ingresando el nmero de matrcula a modificar

Mostramos que realmente se ha modificado

Pgina 101

Opcion D: Eliminaremos el estudiante que deseemos, ingresando el numero de matricula

Opcin E: Buscaremos el estudiante que deseemos encontrar

Opcion F: Salir, y presinamos cualquier tecla para abandonar el software

Pgina 102

Altas Medias Bajas

Pgina 103

Leccin del da Martes 25 de Septiembre de 2012 Calificacin Alta

Pgina 104

Calificacin Media

Pgina 105

Calificacin Baja

Pgina 106

Leccin del da Lunes 15 de Octubre de 2012

Calificacin Alta

Pgina 107

Calificacin Media

Pgina 108

Calificacin Baja

Pgina 109

Leccin del da Lunes 29 de Octubre de 2012 Calificacin Alta

Pgina 110

Calificacin Media

Pgina 111

Calificacin Baja

Pgina 112

Leccin del da Martes 20 de Noviembre 2012 Calificacin Alta

Pgina 113

Calificacin Media

Pgina 114

Calificacin Baja

Pgina 115

Leccin del da Lunes 10 de Diciembre de 2012 Calificacin Promedio

Pgina 116

Leccin del da Martes 11 de Diciembre de 2012 Calificacin Alta

Pgina 117

Calificacin Media

Pgina 118

Calificacin Baja

Pgina 119

Leccin del da Lunes 17 de Diciembre de 2012 Calificacin Alta

Pgina 120

Calificacin Media

Pgina 121

Calificacin Baja

Pgina 122

Leccin del da Lunes 07 de Enero de 2013 Calificacin Alta

Pgina 123

Calificacin Media

Pgina 124

Leccin del da Lunes 28 de Enero de 2013 Calificacin Alta

Pgina 125

Calificacin Media

Pgina 126

Calificacin Baja

Pgina 127

Potrebbero piacerti anche