Conceptos Avanzados de Programación

Slides:



Advertisements
Presentaciones similares
Capítulo 2 Algoritmos.
Advertisements

Relaciones de recurrencia
Complejidad Computacional
Diseño y análisis de algoritmos
ESTRUCTURA DE DATOS Unidad 01 RECURSIVIDAD.
Estructura de Datos Unidad 4. Recursividad Dra. María Lucía Barrón Estrada Enero-Junio 2007.
INSTITUTO TECNOLOGICO DE MINATITLAN
Funciones. Programación, Algoritmos y Estructuras de Datos.
UNIVERSIDAD NACIONAL AUTÓNOMA DE MÉXICO
Abstracción de Datos La abstracción es un recurso fundamental en la programación orientada a objetos y está además fuertemente ligado a reusabilidad.
Estructuras de Repetición
Funciones “En C” Semestre de Otoño 2006 Claudio Gutiérrez-Soto.
2.1 Recursividad El hecho de que una función pueda llamarse a sí misma.
Funciones en lenguaje C
Funciones y procedimientos
CI TEORIA semana 8 Subprogramas o funciones Definición de funciones.
Programación I Teoría II
Programación I Teoría VI: Recursividad
FUNCIONES Y PROCEDIMIENTOS
Fundamentos de Programación
Tema 9 Estructuras.
LOGICA DE PROGRAMACION
EXPONENTES Y RADICALES
Semana 5 Subprogramas..
Características de “C”
Funciones1 PROGRAMACIÓN ESTRUCTURADA EN PSEUDÓCODIGO Profr. Miguel Rodríguez Hernández PROGRAMACIÓN MODULAR O FUNCIONAL.
Archivos.

Introducción al análisis de algoritmos
Algoritmos.
Capítulo 1 “Elementos de Programación”

Descomposición Modular. Funciones
Informática Tema 5 - Estructuras de Control Estructuras de Repetición.
Material de apoyo Unidad 4 Estructura de datos
Análisis de algoritmos
Figure: Algoritmos Conceptos básicos. Programación: 1.Establecer una secuencia de acciones que: puedan ser ejecutadas por el procesador realicen una.
EXPRESIONES Y SENTENCIAS
Estructuras de Control.
Laboratorio Análisis y Diseño de Algoritmos 2 Biblioteca estándar de templates de C++ Standard Template Library (STL)‏ Motivación Ejemplo: Lista + Iterador.
Recursividad (2 clases) 1. Nivelación Funciones Menú Vectores String
Elementos básicos del lenguaje
APUNTADORES.
Estructuras de control Resolución de problemas y algoritmos.
Ecuaciones Algebraicas
Programación I Técnico Universitario en Web Dpto. de Informática FCFMyN - UNSL -10-
Términos algoritmo diseñar algoritmo implementar algoritmo
Oscar Bedoya. Edificio 331, 2º piso, E.I.S.C. Estructuras de datos y algoritmos.
Introducción a la Programación Orientada a Objetos Una clase que modela los atributos y el comportamiento de una colección de objetos, define un tipo de.
INTRODUCCIÓN AL LENGUAJE C++. Instrucciones Temas.
INTRODUCCION A LA PROGRAMACION
ALGORITMOS Y ESTRUCTURAS DE DATOS Operaciones sobre cadenas de caracteres y Funciones LIA. Suei Chong Sol.
PRINCIPIOS DE PROGRAMACIÓN
LENGUAJE “C” Programación.
Unidad V Recursión. Objetivos del Aprendizaje Explicar el concepto de recursión. Discutir las diferentes condiciones que deben ser satisfechas para que.
Conalep Coacalco Algoritmos Recursivos
Estructuras de Decisión
Lic. Carla Aguirre Montalvo
Algoritmo.
75.41 Algoritmos y Programación II Cátedra Ing. Patricia Calvo Complejidad algorítmica.
 Las funciones son un conjunto de instrucciones que realizan una tarea específica. En general toman unos valores de entrada, llamados parámetros y proporcionan.
TIPOS DE DATOS Estructuras de control y repetición PARCIAL III.
PROGRAMACIÓN Grupo de Modelamiento de Sistemas
Solución a Ecuaciones de Recurrencia Dr. Rogelio Dávila Pérez División de Posgrado Universidad Autónoma de Guadalajara
Recursividad.
Ing. Barros Rodriguez D. Ronald Introducción a la Programacón.
Paso de parámetros Diseño de programas iterativos Fundamentos de Programación Departamento de Lenguajes y Sistemas Informáticos Unidad Didáctica 7 Versión.
Estructuras Repetitivas Consideraciones. Estructuras Repetitivas  Son aquellas que van a ejecutar un número determinado de veces una instrucción o un.
LOS NÚMEROS ¿Existe algún número que multiplicado por 2 sea 1? ENTEROS
Programación Orientada a Objetos
Transcripción de la presentación:

Conceptos Avanzados de Programación Presentación C y C++ Conceptos Avanzados de Programación :: Prof. Yeniffer Peña

Unidad I: Conceptos Avanzados de Programación Recursividad: El concepto de recursividad va ligado al de repetición. Son recursivos aquellos algoritmos que, estando encapsulados dentro de una función, son llamados desde ella misma una y otra vez, en contraposición a los algoritmos iterativos, que hacen uso de bucles while, do-while, for, etc. Algo es recursivo si se define en términos de sí mismo (cuando para definirse hace mención a sí mismo). Para que una definición recursiva sea válida, la referencia a sí misma debe ser relativamente más sencilla que el caso considerado.

Utilidad de la Recursividad: Cuando la solución de un problema se puede expresar en términos de la resolución de problemas de la misma naturaleza, aunque de menor complejidad. Formas de Recursividad: La recursividad en los subprogramas puede darse de dos maneras diferentes: a) Directa El subprograma se llama directamente a sí mismo. b) Indirecta El subprograma llama a otro subprograma, y éste a su vez llama al primero.

Recursividad Basada en el Criterio: Divide y Vencerás Un problema complejo se divide en uno mas sencillo Solo se debe conocer la solución no recursiva para algún caso sencillo (denominado caso base) y hacer que la división del problema termine recurriendo a los casos bases que se hayan definido. Se puede considerar que se “tiene resuelto” el problema mas complejo (sin tener que definir la secuencia exacta de pasos necesarios para resolver el problema)

Sintaxis de una Función Recursiva: Recursividad Sintaxis de una Función Recursiva: Se debe recordar que siempre que se completa la llamada a una función, el control regresa al punto en el cual ésta fue invocada. Se aplica la misma regla a las llamadas recursivas. Una función recursiva debe tener: - La llamada recursiva. - Condición de parada ó de terminación.

Recursividad Casos Base: En toda definición recursiva de un problema, se debe establecer un estado básico, es decir un estado en el cual la solución no se presente de manera recursiva sino directamente. Además, la entrada (datos) del problema debe ir acercándose al estado básico.  Es decir, para que las llamadas recursivas no continúen indefinidamente, el cuerpo de un subprograma recursivo debe incluir por lo menos un caso terminal, es decir, un caso que no contiene más llamadas al subprograma.

Ejemplo de una función recursiva: Recursividad Ejemplo de una función recursiva: int potencia (int x, int n) { if(n==0) return 1; else return x * potencia(x,n-1); } potencia(b,n)= 1 si n=0 b * potencia(b,n-1) si n>0

Ejemplo de una función recursiva: Recursividad Ejemplo de una función recursiva: return 1 return 5*Potencia(0) return 5*Potencia(1) return 5*Potencia(2)

Funcionamiento de un Algoritmo Recursivo: Recursividad Funcionamiento de un Algoritmo Recursivo: Se descompone el problema en problemas de menor complejidad (de la misma naturaleza que el problema inicial) Se resuelve el problema para, al menos, un caso base. Se compone la solución final a partir de las soluciones parciales que se han obtenido

Otro Ejemplo de Función Recursiva: Recursividad Otro Ejemplo de Función Recursiva: int factorial (int n) { if(n==0) return 1; else return (n * factorial(n-1)); } factorial(n)= 1 si n=0 n * factorial(n-1) si n>0

Recursividad Otro Ejemplo de Función Recursiva:

Recursividad Otro Ejemplo de Función Recursiva:

Notas Importantes sobre Recursividad: Siempre se debe avanzar hacia un caso base. Las llamadas recursivas simplifican el problema, y en última instancia los casos bases nos ayudan a encontrar la solución. Los casos bases corresponden a situaciones que se pueden resolver con facilidad. Los demás casos se resuelven recurriendo, antes o después a alguno (s) de los casos bases.

Recursividad Vs. Iteratividad: Aspectos que hay que considerar al momento de decidir como se va a implementar la solución de un problema: La Carga Computacional: Tiempo de CPU y llamadas a memoria asociadas a las llamadas recursivas. La Redundancia: Algunas soluciones recursivas resuelven el mismo problema en repetidas ocasiones. La Complejidad de la Solución: En ocasiones las soluciones iterativas son más difíciles de encontrar. La Legibilidad y la Elegancia del Código: La solución recursiva puede ser más sencilla.

Ejemplo de Aplicación de la Recursividad: Dado un vector de enteros de n posiciones, que se encuentra totalmente pre-cargado, encontrar una solución recursiva que permita obtener el elemento mayor de dicho vector. int mayor (int * vec){ int i, may=0; for(i=0;i<MAX;i++) { if (vec[i]>may) may = vec[i]; } return may; Solución Iterativa

Recursividad Solución Recursiva Mayor(V, n) = V [0] si n = 0 V [n] ó Mayor(V, n-1) si n > 0 void main(){ int vector[]={8,3,9,1}; printf(“El Mayor es: %d”, mayor(vector,3) ); getch(); } int mayor (int vec[], int n){ int aux; if(n==0) return vec[0]; else { aux = mayor(vec, n-1); if(vec[n]>aux) return vec[n]; return aux; }

Recursividad void main(){ int vector[]={8,3,9,1}; printf(“El Mayor es: %d”, mayor(vector,3) ); getch(); } int mayor (int vec[], int n){ int aux; if(n==0) return vec[0]; else { aux = mayor(vec, n-1); if(vec[n]>aux) return vec[n]; return aux; } mayor(vector,0) {8,3,9,1} 0 mayor(vector,1) {8,3,9,1} 1 mayor(vector,2) {8,3,9,1} 2 mayor(vector,3) {8,3,9,1} 3 LLAMADAS vec n return 8  aux=8 if (vec[1]>aux) 3>8 return 8  aux=8 if (vec[2]>aux) 9>8 return 9  aux=9 if (vec[3]>aux) 1>9 return 9  aux=9 RETORNOS

Ejemplo de Aplicación de la Recursividad: Dado una palabra revisar cuántas veces aparece determinada letra. int enc(char *v,int n,int elem){ int aux=0; if(n==0) return 0; else{ aux=enc(v,n-1,elem); if(v[n]==elem) return ++aux; return aux; } Solución recursiva #include <stdio.h> #include <conio.h> #include <string.h> int enc(char *,int,int); void main(){ char cadena[11]="universidad"; char letra='d'; int aux=-1; clrscr(); if((aux=enc(cadena,strlen(cadena),(int)letra))!=-1) printf(“Numero de veces encontrada %d",aux); else printf("\nLetra no encontrada"); getch(); }

Operaciones y Manejo de Bits Conceptos Avanzados de Programación C y C++ Conceptos Avanzados de Programación Continuará . . .