Tecnología de la Programación
|
|
|
- Lorena Santos Espejo
- hace 9 años
- Vistas:
Transcripción
1 Título de Grado en Ingeniería Informática Curso 2009/10 Fernando Jiménez Barrionuevo Gracia Sánchez Carpena Mari Carmen Garrido Carrera Departamento de Ingeniería de la Información de las Comunicaciones Universidad de Murcia
2 Temario 1.1 Definición de recursividad 1.2 Recursividad en C 1.3 Esquemas recursivos 1.4 Tiempo de ejecución de los algoritmos recursivos 1.5 Recursión vs iteración 2
3 1.1 Definición de Recursividad Se dice que un objeto es recursivo si forma parte de sí mismo o se define en función de sí mismo. Técnica particularmente potente en las definiciones matemáticas. La potencia de la recursión reside evidentemente en la posibilidad de definir un número infinito de objetos mediante un enunciado finito. De igual forma, un número infinito de operaciones de cálculo puede describirse mediante un programa recursivo finito. En general, un programa recursivo P puede expresarse como una composición de instrucciones básicas S i (que no contienen a P) y el propio P. P [S i,p] 3
4 1.1 Definición de Recursividad Ejemplos: Números naturales: 1 es un número natural El siguiente de un número natural es un número natural Función factorial, n! (para números enteros no negativos): 0! = 1 Si n>0 entonces n! = n (n 1)! 3! = 3 (3-1)! = 3 2! = 3 2 (2-1)! = 3 2 1! = (1-1)! = ! = = 6 4
5 1.1 Definición de Recursividad Un algoritmo es recursivo si se invoca a sí mismo al menos una vez. Recursividad directa: El algoritmo contiene una llamada explícita a sí mismo, es decir, A invoca a A. Recursividad indirecta: El algoritmo se invoca a sí mismo de forma indirecta, es decir, A invoca a B y B invoca a A. Recursividad de cola o extremo final: La llamada recursiva es la última instrucción que ejecuta el algoritmo. 5
6 1.1 Definición de Recursividad Un algoritmo recursivo está bien construido si: 1. Contiene, al menos, un caso base, en el cual el algoritmo no se llama a sí mismo. 2. Los valores de los parámetros del algoritmo en las sucesivas llamadas recursivas están más cerca del caso base que el valor con el que se llamó inicialmente al algoritmo, garantizando que el caso base se alcanza. 6
7 1.2 Recursividad en C Multiplicación n m (m 0) Caso Base: (m = 0) n 0 = 0 Caso General: (m > 0) n m = n + n (m - 1) // m>=0 int multiplica(int n, int m) if (m==0) return 0; return n+multiplica(n,m-1); // m>=0 (version comprimida) int multiplica(int n, int m) return(m==0?0:n+multiplica(n,m-1)); 7
8 1.2 Recursividad en C División entera n / m (n 0 y m>0) Caso Base: (n < m) n / m = 0 Caso General: (n m) n / m = 1 + ( n m ) / m // n>=0, m>0 int divide(int n, int m) if (n<m) return 0; return 1+divide(n-m,m); // n>=0 y m>0 (version comprimida) int divide(int n, int m) return (n<m?0:1+divide(n-m,m)); 8
9 1.2 Recursividad en C Módulo n % m (n 0 y m > 0) Caso Base: Caso General: (n < m) n % m = n (n m) n % m = ( n m ) % m // n>=0, m>0 int modulo(int n, int m) if (n<m) return n; return modulo(n-m,m); // n>=0 y m>0 (version comprimida) int modulo(int n, int m) return (n<m?n:modulo(n-m,m)); 9
10 1.2 Recursividad en C Potencia n m (m 0) Caso Base: (m = 0) n 0 = 1 Caso General: (m > 0) n m = n n m - 1 // m>=0 int potencia(int n, int m) if (m==0) return 1; return n*potencia(n,m-1); // m>=0 (version comprimida) int potencia(int n, int m) return(m==0?1:n*potencia(n,m-1)); 10
11 1.2 Recursividad en C Factorial n! (n 0) Caso Base: (n = 0) 0! = 1 Caso General: (n > 0) n! = n ( n 1 )! // n>=0 int factorial(int n) if (n==0) return 1; return n*factorial(n-1); // n>=0 (version comprimida) int factorial(int n) return(n==0?1:n*factorial(n-1)); 11
12 1.2 Recursividad en C Fibonacci fib(n) (n 0) Caso Base: Caso General: (n 1) fib(n) = n (n > 1) fib(n) = fib(n-2) + fib(n-1) // n>=0 int fibonacci(int n) if (n<=1) return n; return fibonacci(n-2)+fibonacci(n-1); // n>=0 (version comprimida) int fibonacci(int n) return(((n<=1))?n:fibonacci(n-2)+fibonacci(n-1)); 12
13 1.2 Recursividad en C Hanoi h(n,a,b,c) (n 1) Caso Base: (n = 1) h(1,a,b,c): a c Caso General: (n > 1) h(n,a,b,c): h(n-1,a,c,b), a c, h(n-1,b,a,c) // n>=1 void hanoi(int n, char a, char b, char c) if (n>1) hanoi(n-1,a,c,b); printf( Mover de %d a %d\n,a,c); if (n>1) hanoi(n-1,b,a,c); 13
14 1.3 Esquemas recursivos Divide y Vencerás función DV(x) devuelve solución si x es suficientemente pequeño o sencillo entonces (Caso Base): devolver ad hoc (x) en otro caso (Caso General): descomponer x en casos más pequeños x 1,x 2,...,x n para i=1 hasta n hacer y i = DV(x i ) combinar los y i para obtener una solución y de x devolver y 14
15 1.3 Esquemas recursivos Divide y Vencerás: Búsqueda Binaria Busca un elemento e en un vector v ordenado. Devuelve el índice de una ocurrencia del elemento e en del vector v. Si el vector v no contiene ninguna ocurrencia del elemento e, devuelve -1. // v está ordenado int buscabin(int v[], int ini, int fin, int e) if (ini>fin) return -1; int med = (ini+fin)/2; if (v[med]==e) return med; if (v[med]>e) return buscabin(v,ini,med-1,e); if (v[med]<e) return buscabin(v,med+1,fin,e); // v está ordenado, tam es el numero de elementos de v int buscabin(int v[], int tam, int e) return buscabin(v,0,tam,e); 15
16 1.3 Esquemas recursivos Divide y Vencerás: Ordenación por Mezcla Ordena un vector v desde el índice ini hasta el índice fin. void mergesort(int v[], int ini, int fin) if ((fin-ini)>0) int med = (ini+fin)/2; mergesort(v,ini,med); mergesort(v,med+1,fin); mezcla(v,ini,fin,med); // tam es el numero de elementos de v void mergesort(int v[], int tam) mergesort(v,0,tam); 16
17 1.3 Esquemas recursivos Vuelta Atrás: Una solución Devuelve cierto si encuentra una solución a partir de un paso, y falso en caso contrario. Si encuentra una solución la devuelve en el parámetro solucion. funcion VA(entrada: paso, salida: solución) devuelve booleano si solución completa entonces devolver cierto fin si para cada posibilidad de solución si posibilidad aceptable en solución entonces anotar posibilidad en solución si VA(siguiente paso, solución) entonces devolver cierto fin si cancelar posibilidad en solución fin si fin para devolver falso 17
18 1.3 Esquemas recursivos Vuelta Atrás: Una solución Solución compuesta por n pasos y m posibilidades para cada paso. El parámetro solucion debe pasarse como apuntador porque es de salida. bool VA(int i, solucion * s) if (i==n) return true; for(int j=0;j<m;j++) if (aceptable(s,i,j)) anotar(s,i,j); if (VA(i+1,s)) return true; cancelar(s,i,j); return false; LLamada inicial al método VA: solucion * s = new solucion(); inicia(s); if (VA(0,s)) imprime(s); 18
19 1.3 Esquemas recursivos Vuelta Atrás: Todas las soluciones Obtiene todas las soluciones posibles a partir de un paso. funcion VA(entrada: paso, salida: solución) si solución completa entonces anotar solución en otro caso para cada posibilidad de solución si posibilidad aceptable en solución entonces anotar posibilidad en solución VA(siguiente paso, solución) cancelar posibilidad en solución fin si fin para fin si 19
20 1.3 Esquemas recursivos Vuelta Atrás: Todas las soluciones Solución compuesta por n pasos y m posibilidades para cada paso. void VA(int i, solucion * s) if (i==n) imprime(s); else for(int j=0;j<m;j++) if (aceptable(s,i,j)) anotar(s,i,j); VA(i+1,s); cancelar(s,i,j); LLamada inicial al método VA: solucion s = new solucion(); inicia(s); VA(0,s)); 20
21 1.3 Esquemas recursivos Vuelta Atrás: Ocho Reinas n = 8 (8 pasos, un paso por cada reina) m = 8 (8 posibilidades para cada reina) x[i]: indica la posición en columna de la reina en la fila i-ésima a[i]: true si la columna i-ésima está libre b[i]: true si la diagonal derecha i-ésima está libre c[i]: true si la diagonal izquierda i-ésima está libre struct solucion int x[8]; bool a[8]; bool b[15]; bool c[15]; ; 21
22 1.3 Esquemas recursivos Vuelta Atrás: Ocho Reinas void inicia(solucion * s) for(int j=0;j<8;j++) s->a[j] = true; for(int j=0;j<15;j++) s->b[j] = true; s->c[j] = true; void imprime(solucion * s) for(int j=0;j<8;j++) printf("%d ",s->x[j]); printf("\n"); bool aceptable(solucion * s,int i,int j) return s->a[j]&&s->b[i+j]&&s->c[i-j+7]; void anotar(solucion * s, int i, int j) s->x[i]=j; s->a[j]=false; s->b[i+j]=false; s->c[i-j+7]=false; void cancelar(solucion * s, int i, int j) s->a[j]=true; s->b[i+j]=true; s->c[i-j+7]=true; 22
23 1.4 Tiempo de ejecución de los algoritmos recursivos Expansión de recurrencias Utiliza la recurrencia misma para sustituir m<n por cualquier T(m) en la derecha, hasta que todos los términos T(m) para m>1 se hayan reemplazado por fórmulas que impliquen sólo T(1). Como T(1) siempre es constante, se tiene una fórmula para T(n) en función de n y de algunas constantes. A esta fórmula se le denomina forma cerrada para T(n). 23
24 1.4 Tiempo de ejecución de los algoritmos recursivos Ejemplo: Factorial Ecuación de recurrencia: T(0) = c 1 T(n) = T(n-1) + c 2 si n>0 Expansión de recurrencias: T(n) = T(n-1)+c 2 = [T(n-2)+c 2 ]+c 2 = T(n-2)+2c 2 = [T(n-3)+c 2 ]+2c 2 = T(n-3)+3c 2 Forma cerrada para T(n) (por inducción en i): T(n) = T(n-i) + i c 2 La expansión terminará cuando se alcance T(0) en lado derecho de la forma cerrada, es decir, cuando n-i=0, por tanto i=n. Sustituyendo en la forma cerrada i por n se obtiene: T(n) = T(0) + n c 2 = c 1 + n c 2 Esto demuestra que T(n) es O(n). 24
25 1.4 Tiempo de ejecución de los algoritmos recursivos Ejemplo: Búsqueda Binaria Ecuación de recurrencia: T(1) = c 1 T(n) = T(n/2) + c 2 si n>1 Expansión de recurrencias: T(n) = T(n/2)+c 2 = [T(n/4)+c 2 ]+c 2 = T(n/4)+2c 2 = [T(n/8)+c 2 ]+2c 2 = T(n/8)+3c 2 Forma cerrada para T(n) (por inducción en i): T(n) = T(n/2 i ) + ic 2 La expansión terminará cuando se alcance T(1) en lado derecho de la forma cerrada, es decir, cuando n/2 i =1, por tanto i=log n. Sustituyendo en la forma cerrada i por n se obtiene: T(n) = T(1) + log n c 2 = c 1 + log n c 2 Esto demuestra que T(n) es O(log n). 25
26 1.4 Tiempo de ejecución de los algoritmos recursivos Ejemplo: Mergesort Ecuación de recurrencia: T(1) = c 1 T(n) = 2 T(n/2) + n c 2 si n>1 Expansión de recurrencias: T(n) = 2T(n/2)+nc 2 = 2[2T(n/4)+(n/2)c 2 ]+nc 2 = 4T(n/4)+2nc 2 = 8T(n/8)+3nc 2 Forma cerrada para T(n) (por inducción en i): T(n) = 2 i T(n/2 i ) + i n c 2 La expansión terminará cuando se alcance T(1) en lado derecho de la forma cerrada, es decir, cuando n/2 i =1, por tanto i=log n. Sustituyendo en la forma cerrada i por n se obtiene: T(n) = nt(1) + (log n) n c 2 = nc 1 + n log n c 2 Esto demuestra que T(n) es O(n log n). 26
27 1.5 Recursión vs Iteración La recursión implica múltiples llamadas y el uso de la pila interna para almacenar, en cada llamada recursiva, los parámetros de llamada, variables locales y dirección de retorno, lo que hace que en general sea más ineficiente que el diseño iterativo. Siempre es posible sustituir un algoritmo recursivo por un algoritmo iterativo que utilice una pila. Casos en los que no se debe utilizar la recursión: 1. Recursividad de cola 2. Árbol de recursión lineal (ejemplo, factorial) 3. Árbol de recursión ramificado, pero con nodos repetidos (ejemplo Fibonacci) Conclusión: la recursión se deberá utilizar cuando, además de facilitar el diseño del algoritmo, genere un árbol de recursión ramificado y con nodos no repetidos. 27
28 1.5 Recursión vs Iteración Multiplicación n m (m 0) Caso Base: (m = 0) n 0 = 0 Caso General: (m > 0) n m = n + n (m - 1) // m>=0 (versión recursiva) int multiplica(int n, int m) if (m==0) return 0; return n+multiplica(n,m-1); // m>=0 (versión iterativa) int multiplica(int n, int m) int res = 0; for(;m>0;m--) res+=n; return res; 28
29 1.5 Recursión vs Iteración División entera n / m (n 0 y m > 0) Caso Base: (n < m) n / m = 0 Caso General: (n m) n / m = 1 + ( n m ) / m // n>=0, m>0 (versión recursiva) int divide(int n, int m) if (n<m) return 0; return 1+divide(n-m,m); // n>=0, m>0 (versión iterativa) int divide(int n, int m) int res = 0; for(;n>=m;n-=m) res++; return res; 29
30 1.5 Recursión vs Iteración Módulo n % m (n 0 y m > 0) Caso Base: Caso General: (n < m) n % m = n (n m) n % m = ( n m ) % m // n>=0, m>0 (versión recursiva) int modulo(int n, int m) if (n<m) return n; return modulo(n-m,m); // n>=0, m>0 (versión iterativa) int modulo(int n, int m) for(;n>=m;n-=m); return n; 30
31 1.5 Recursión vs Iteración Potencia n m (m 0) Caso Base: (m = 0) n 0 = 1 Caso General: (m > 0) n m = n n m - 1 // m>=0 (versión recursiva) int potencia(int n, int m) if (m==0) return 1; return n*potencia(n,m-1); // m>=0 (versión iterativa) int potencia(int n, int m) int res = 1; for(;m>0;m--) res*=n; return res; 31
32 1.5 Recursión vs Iteración Factorial n! (n 0) Caso Base: (n = 0) 0! = 1 Caso General: (n > 0) n! = n ( n 1 )! // n>=0 (versión recursiva) int factorial(int n) if (n==0) return 1; return n*factorial(n-1); // n>=0 (version iterativa) int factorial(int n) int res = 1; for(;n>0;n--) res*=n; return res; 32
33 1.5 Recursión vs Iteración Fibonacci fib(n) (n 0) Caso Base: Caso General: (n 1) fib(n) = n (n > 1) fib(n) = fib(n-2) + fib(n-1) // n>=0 (versión recursiva) int fibonacci(int n) if ((n<=1)) return n; return fibonacci(n-2)+fibonacci(n-1); // n>=0 (version iterativa) int fibonacci(int n) if (n<=1) return n; int * aux = (int *)malloc((n+1)*sizeof(int)); aux[0] = 0; aux[1] = 1; for(int i=2; i<=n; i++) aux[i] = aux[i-2] + aux[i-1]; int res = aux[n]; free(aux); return res; 33
34 1.5 Recursión vs Iteración Búsqueda Binaria // v está ordenado (versión recursiva) int buscabin(int v[], int ini, int fin, int e) if (ini>fin) return -1; int med = (ini+fin)/2; if (v[med]==e) return med; if (v[med]>e) return buscabin(v,ini,med-1,e); if (v[med]<e) return buscabin(v,med+1,fin,e); // v está ordenado (versión iterativa) int buscabin(int v[], int ini, int fin, int e) while(ini<=fin) int med = (ini+fin)/2; if (v[med]==e) return med; if (v[med]>e) fin = med-1; else ini = med+1; return -1; 34
35 Ejercicios Propuestos Máximo Común Divisor mcd(n,m) (n 0, m 0) Caso Base: (m == 0) mcd(n,m) = n Caso General: (m > 0) mcd(n,m) = mcd(m,n%m) Monedas: Calcular el número mínimo de monedas necesarias para una determinada cantidad. Suponemos que tenemos monedas de 1, 5, 10, 20 y 50 céntimos y que la cantidad es menor de 1 euro. 35
UNIVERSIDAD DE LOS ANDES NUCLEO UNIVERSITARIO RAFAEL RANGEL (NURR) DEPARTAMENTO DE FISICA Y MATEMATICA AREA COMPUTACION TRUJILLO EDO.
UNIVERSIDAD DE LOS ANDES NUCLEO UNIVERSITARIO RAFAEL RANGEL (NURR) DEPARTAMENTO DE FISICA Y MATEMATICA AREA COMPUTACION TRUJILLO EDO. TRUJILLO Recursividad: La recursividad es una técnica de programación
Metodología de la Programación II. Recursividad
Metodología de la Programación II Recursividad Objetivos Entender el concepto de recursividad. Conocer los fundamentos del diseño de algoritmos recursivos. Comprender la ejecución de algoritmos recursivos.
Algoritmos Recursivos de Búsqueda y Ordenación y sus tiempos
Estructura de Datos y Algoritmos Algoritmos Recursivos de Búsqueda y Ordenación y sus tiempos 1. Algoritmos de ordenación recursivos 1.1. Mergesort, Ordenamiento por fusión Mergesort se ejecuta en un tiempo
Temario. Tema 2. Tecnología de Desarrollo Software. 2.1 Excepciones en C Prueba y Depuración. 2.3 Documentación
Temario 2.1 Excepciones en C++ La sentencia throw La sentencia try - catch Control de Flujo 2.2 Prueba y Depuración Concepto de Prueba Pruebas de Caja Blanca Pruebas de Caja Negra Diseño de casos de prueba
Universidad de Valladolid. Departamento de informática. Campus de Segovia. Estructura de datos Tema 4: Ordenación. Prof. Montserrat Serrano Montero
Universidad de Valladolid Departamento de informática Campus de Segovia Estructura de datos Tema 4: Ordenación Prof. Montserrat Serrano Montero ÍNDICE Conceptos básicos Elección de un método Métodos directos
Tema 2. Recursividad. Fundamentos de Programación II. Luís Rodríguez Baena ([email protected])
Fundamentos de Programación II Tema 2. Recursividad Luís Rodríguez Baena ([email protected]) Universidad Pontificia de Salamanca (campus Madrid) Escuela Superior de Ingeniería y Arquitectura Naturaleza
Alonso Ramírez Manzanares Computación y Algoritmos 10.03
Recursividad mat-151 1 Ejercicio de recursión: dibujando una regla Queremos dibujar las marcas de diferentes tamaños de una regla. Marcas grandes cada 1/2 cm, marcas más pequeñas cada 1/4 cm... hasta una
Recursión Directa. Una función es de recursión directa si contiene una llamada explícita a si misma. return foo (y 1); Recursión Indirecta
Recursión Directa Una función es de recursión directa si contiene una llamada explícita a si misma int foo (int x) { if ( x
Metodología y Tecnología de la Programación
Tema 4. Abstracción procedimental y de datos 1. Cuál es el error del siguiente programa? import java.util.scanner; class Respuesta{ static Scanner leer=new Scanner(System.in); int valor = lectura(); System.out.println(valor);
Capítulo 2: Recursividad.
Capítulo 2: Recursividad. 2.1.- Introducción. La recursividad consiste en realizar una definición de un concepto en términos del propio concepto que se está definiendo. Ejemplos: Los números naturales
Agradecimientos. Nota de los autores. 1 Problemas, algoritmos y programas 1
Prologo Agradecimientos Nota de los autores Índice general I III V VII 1 Problemas, algoritmos y programas 1 1.1 Programas y la actividad de la programación.................... 4 1.2 Lenguajes y modelos
Tema 6. Reutilización de código. Programación 2015-2016. Programación - Tema 6: Reutilización de código
Tema 6 Reutilización de código Programación 2015-2016 Programación - Tema 6: Reutilización de código 1 Tema 6. Reutilización de código Modularidad. Implementación de métodos. Uso de métodos. Programación
Bloque 4. La descomposición funcional y el diseño descendente
Bloque 4 La descomposición funcional y el diseño descendente Cómo afrontar un problema complejo Dividir cada una de las dificultades que se examinen en tantos fragmentos como sea posible y que se requieran
El concepto de función en programación se fundamenta en el concepto de función matemática 1
FUNCIONES Y PROCEDIMIENTOS OBJETIVOS Aprender a resolver problemas grandes y complejos dividiendo un problema en subproblemas a través del uso de procedimientos y funciones. Distinguir entre parámetros
1. Manejo de memoria estática 2. Manejo de memoria dinámica
1. Manejo de memoria estática 2. Manejo de memoria dinámica *La administración de memoria de una computadora es una tarea fundamental debido a que la cantidad de memoria es limitada. *El sistema operativo
Ejemplo: El problema de la mochila. Algoritmos golosos. Algoritmos y Estructuras de Datos III. Segundo cuatrimestre 2013
Técnicas de diseño de algoritmos Algoritmos y Estructuras de Datos III Segundo cuatrimestre 2013 Técnicas de diseño de algoritmos Algoritmos golosos Backtracking (búsqueda con retroceso) Divide and conquer
Escuela Politécnica Superior de Ingeniería Departamento de Ingeniería Informática
Escuela Politécnica Superior de Ingeniería Departamento de Ingeniería Informática Fundamentos de la informática 2. Algoritmos, diagramas de flujo y pseudocódigo Contenido Algoritmos Diagramas de flujo
#include <stdio.h> /* Factorial de un número - versión 1- */
Ejemplo 1: Programa que calcula el factorial de 'n' números introducidos desde teclado. Primera versión: /* Factorial de un número - versión 1- */ long int factorial (int x) /*definición de función*/ int
A = A n. = {a n. Georges E. Alfaro Salazar 1
UNICIENCIA 26 pp. 99-111 2012 Cálculo de funciones por recursión de cola y sustitución de parámetros Evaluating functions using tail recursion and parameter substitution Georges E. Alfaro Salazar 1 Resumen
CI 2125, Computación I
Universidad Simón Bolívar Dpto. de Computación y Tecnología de la Información CI 2125, Computación I Práctica 5: ESTRUCTURAS DE REPETICIÓN Como ya hemos visto, el procedimiento desarrollado para resolver
Estructuras de Repetición (Hacer-Mientras)
Estructuras de Repetición (Hacer-Mientras) Material Original: Prof. Flor Narciso Modificaciones: Prof. Andrés Arcia Departamento de Computación Escuela de Ingeniería de Sistemas Facultad de Ingeniería
El programa que permite el manejo de la base de datos tiene la siguiente funcionalidad:
El TAD Diccionario Cuando se usa un conjunto en el diseño de un algoritmo podría no ser necesario contar con operaciones de unión o intersección. A menudo lo que se necesita es simplemente manipular un
ARBOLES ARBOLES BINARIOS ORDENADOS. REPRESENTACIÓN Y OPERACIONES
ARBOLES ARBOLES BINARIOS ORDENADOS. REPRESENTACIÓN Y OPERACIONES Características ARBOLES - CONCEPTOS Cada elemento del árbol se relaciona con cero o más elementos a quienes llama hijos. Si el árbol no
Tema: FUNCIONES, PROCEDIMIENTOS Y RECURSIVIDAD.
Programación I, Guía 6 1 Facultad : Ingeniería Escuela : Computación Asignatura: Programación I Tema: FUNCIONES, PROCEDIMIENTOS Y RECURSIVIDAD. Objetivos Utilizar la sintaxis de las funciones definidas
<tipo> Tipo de dato de los elementos del vector
Vectores y matrices Declaración Vector (array unidimiensional): []; Tipo de dato de los elementos del vector Identificador de la variable.
8. Sentencia return y métodos
92 A. García-Beltrán y J.M. Arranz 8. Sentencia return y métodos Objetivos: a) Describir el funcionamiento de la sentencia return b) Interpretar el resultado de una sentencia return en el código fuente
Temario detallado. Conceptos generales de lenguajes y compiladores. Proceso de compilación de un programa en C++ bajo Code::Blocks
Temario detallado Programación básica en C++ Conceptos generales de lenguajes y compiladores Proceso de compilación de un programa en C++ bajo Code::Blocks Estructura básica de un programa en C++ Análisis
Examen Principios de Programación Febrero 2012
Por favor siga las siguientes indicaciones: Escriba con lápiz. Escriba su nombre y número de documento en todas las hojas que entregue. Numere las hojas e indique el total de hojas en la primera de ellas.
Presentación. Programación I. Conceptos Avanzados de Programación. :: Prof. Yeniffer Peña
Presentación 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
Análisis de algoritmos
Tema 09: Programación dinámica Solicitado: Ejercicios 06: Programación dinámica de Fibonacci y Coeficientes Binomiales M. en C. Edgardo Adrián Franco Martínez http://www.eafranco.com [email protected] @edfrancom
Práctica 3: Vectores y matrices en C.
Práctica 3: Vectores y matrices en C. Objetivos En esta práctica el objetivo principal es el de poner en práctica los principios básicos de algoritmia (bucles y bifurcaciones) empleando vectores y matrices.
FUNDAMENTOS DE INFORMÁTICA
FUNDAMENTOS DE INFORMÁTICA Tema 2 Expresiones, operadores y estructuras de control Departamento de Ingeniería de Sistemas y Automática Universidad de Vigo Fundamentos de Informática. Departamento de Ingeniería
Notación Asintótica 2
Notación Asintótica 2 mat-151 1 Éxamen Rápido (6 minutos) Cada operación fundamental usa c milisegundos, cuánto tiempo toma contar hasta 1,000,000? Cuál es el valor de N? Cuál es el órden de complejidad
Problemas de Recursividad
Problemas de Recursividad Problema 1. El factorial de un número entero n 0, denotado como n!, se define! como!!! i = 1 2 n cuando n > 0, y 0! = 1. Por ejemplo 6! = 1 2 3 4 5 6 = 720 Diseñad una método
Algoritmos de Ordenación
Algoritmos de Ordenación Pedro Corcuera Dpto. Matemática Aplicada y Ciencias de la Computación Universidad de Cantabria [email protected] Algoritmos comunes - Ordenación Ordenación o clasificación es
Mostrar Números Ascendentemente. Soluciones Ejercicios Tema 5. tostring Recursivo de LEG. Suma Recursiva de un Vector (1/3)
Mostrar Números Ascendentemente Soluciones Ejercicios Tema 5 Germán Moltó [email protected] Estructuras de Datos y Algoritmos Escuela Técnica Superior de Ingeniería Informática Universidad Politécnica
DEFINICION. Ing. M.Sc. Fulbia Torres Asignatura: Estructuras de Datos Barquisimeto 2006
ARBOLES ESTRUCTURAS DE DATOS 2006 DEFINICION Un árbol (tree) es un conjunto finito de nodos. Es una estructura jerárquica aplicable sobre una colección de elementos u objetos llamados nodos; uno de los
PROBLEMAS DEL TEMA 7: Subprogramas y Modularidad
PROBLEMAS DEL TEMA 7: Subprogramas y Modularidad EJERCICIOS RESUELTOS 1. Escribe una función que calcule el factorial de un número, dado como parámetro. A continuación realiza un programa que lea por teclado
Multiplicación de enteros Algoritmo clásico 1234*5678 = 1234* (5*1000 + 6*100+7*10+8) = 1234*5*1000 + 1234*6*100 + 1234*7*10 + 1234*8 Operaciones bási
Algoritmos Divide y Vencerás Análisis y Diseño de Algoritmos Algoritmos Divide y Vencerás Ejemplo: Multiplicación de enteros grandes La técnica divide y vencerás Características Método general divide y
3. Técnicas de diseño de algoritmos
3. Técnicas de diseño de algoritmos 1. Métodos Generales de Soluciones de Problemas 2. Técnicas de diseño de algoritmos 1. ecursividad básica 2. Divide y vencerás 3. Backtracking Bibliografía Aho, Hopcroft
Algoritmos. Diseño de algoritmos por inducción. Alberto Valderruten. [email protected]. Dept. de Computación, Universidade da Coruña
Divide y Vencerás Diseño de algoritmos por inducción Dept. de Computación, Universidade da Coruña [email protected] Contenido Divide y Vencerás 1 Divide y Vencerás 2 Índice Divide y Vencerás 1
EJERCICIOS DE COMPLEJIDAD ALGORÍTMICA
EJERCICIOS DE COMPLEJIDAD ALGORÍTMICA 1. Calcula la complejidad del siguiente procedimiento: PROCEDIMIENTO intercambia(ref x : ENTERO, REF y : ENTERO) ES aux : ENTERO; aux := x; x := y; y := aux; 2. Calcular
Analisis de algoritmos
Analisis de algoritmos Eficiencia Es la capacidad de disponer de un recurso. En el caso de los algoritmos, la eficiencia se logra haciendo el mejor uso posible de los recursos del sistema. Recursos Qué
INTRODUCCIÓN. Estructura de Datos Tipos Abstractos de Datos (TAD S) Profs. Lorna Figueroa M. Mauricio Solar F. UTFSM 1 / 2008
INTRODUCCIÓN Estructura de Datos Tipos Abstractos de Datos (TAD S) Para poder obtener un programa que resuelva un problema dado, son necesarios varios pasos : La formulación y especificación del problema
MATEMATICA GRADO 9 II PERIODO PROF. LIC. ESP. BLANCA NIEVES CASTILLO R. CORREO: cel
GUIA DE TEORIA NO. 1 LO QUE DEBO SABER Regla de Cramer Un sistema de ecuaciones lineales se dice de Cramer cuando cumple las siguientes condiciones: Es un sistema cuadrado, con igual número de ecuaciones
Funciones. Parámetros por valor
Funciones I Parámetros por valor Fundamentos de Programación Fundamentos de Programación I Llamada a la función definición subprograma Subprogramas en C++ Funciones 1 Una función es un subprograma que
324 MR Versión 1 Prueba Integral 1/3 Semana 10 Lapso 2015-2
324 MR Versión 1 Prueba Integral 1/3 UNIVERSIDAD NACIONAL ABIERTA VICERRECTORADO ACADÉMICO ÁREA INGENIERÍA MODELO DE RESPUESTA ASIGNATURA: Computación II CÓDIGO: 324 MOMENTO: Prueba Integral FECHA DE APLICACIÓN:
Sorting++ Herman Schinca. Clase 21. 10 de Junio de 2011
Sorting++ Herman Schinca Clase 21 10 de Junio de 2011 Recordando Ya vimos 3 algoritmos de ordenamiento basados en la comparación entre elementos: Selection, Insertion y Bubble. Los 3 en peor caso (cuando
Tecnólogo Informático- Estructuras de Datos y Algoritmos- 2009
Árboles Ejemplos de estructuras arborescentes: con forma de árbol Regla de Alcance: los objetos visibles en un procedimiento son aquellos declarados en él mismo o en cualquier ancestro de él (cualquier
Examen escrito de Programación 1. Jueves 5 de febrero de Problema 1 o (3.5 puntos)
Examen escrito de Programación 1. Jueves 5 de febrero de 2015 Se debe disponer de un documento de identificación con fotografía sobre la mesa. Se debe comenzar a resolver cada uno de los dos problemas
Algoritmos y programas. Algoritmos y Estructuras de Datos I
Algoritmos y programas Algoritmos y Estructuras de Datos I Primer cuatrimestre de 2012 Departamento de Computación - FCEyN - UBA Programación funcional - clase 1 Funciones Simples - Recursión - Tipos de
1. NUMEROS REALES a. Los Números Reales
1. NUMEROS REALES a. Los Números Reales Los números reales comprenden todo el campo de números que utilizamos en las matemáticas, a excepción de los números complejos que veremos en capítulos superiores.
Java para programadores
Java para programadores Java y Servicios Web I Master en Ingeniería Matemática Manuel Montenegro Dpto. Sistemas Informáticos y Computación Desp. 467 (Mat) [email protected] Contenidos Variables. Tipos
Árboles. Cursos Propedéuticos 2015. Dr. René Cumplido M. en C. Luis Rodríguez Flores
Árboles Cursos Propedéuticos 2015 Dr. René Cumplido M. en C. Luis Rodríguez Flores Contenido de la sección Introducción Árbol genérico Definición y representación Árboles binarios Definición, implementación,
Lenguaje C Bucles, Condicionales, operadores y Algoritmos.
Lenguaje C Bucles, Condicionales, operadores y Algoritmos. Omar Andrés Zapata Mesa Grupo de Fenomenología de Interacciones Fundamentales, (Gfif) Universidad de Antioquia Operadores Los operadores son aquellos
1. + 1 + fib(0) + fib (1) + fib (5) = 2. + 0 + 1 + fib(5) = 3 + fib (3) + fib (4) = 3. + fib (1) + fib (2) + fib (4) =
Recursividad 1. Introducción. 2. Recursividad. 3. Propiedades de las definiciones o algoritmos recursivos. 4. Cadenas recursivas. 5. Definición recursiva de expresiones algebraicas. 6. Programación Recursiva.
Datos y tipos de datos
Datos y tipos de datos Dato Representación formal de hechos, conceptos o instrucciones adecuada para su comunicación, interpretación y procesamiento por seres humanos o medios automáticos. Tipo de dato
Principios de Computadoras II
Departamento de Ingeniería Electrónica y Computadoras Operadores y Expresiones [email protected] Primer programa en Java 2 Comentarios en Java Comentario tradicional (multi-línea) Comentario de línea Comentario
INTELIGENCIA EN REDES DE COMUNICACIONES PRÁCTICA FINAL. Ignacio Ribas Ramos Miguel Flecha Lozano Ingeniería de Telecomunicaciones
INTELIGENCIA EN REDES DE COMUNICACIONES PRÁCTICA FINAL BLACKJACK Ignacio Ribas Ramos Miguel Flecha Lozano Ingeniería de Telecomunicaciones 1. Explicación del juego de cartas del Blackjack El Blackjack
La segunda observación permite reformular el problema de una manera más simple:
Problema partición Enunciado A: dados N enteros positivos, N>1, decir si estos pueden dividirse en dos grupos cuya suma sea la misma. Ejemplo: si el conjunto es {1,2,3,9,2,11,4}, una forma de partirlo
TEMA 4. ESTRUCTURAS DE CONTROL
M.P. Sesmero, P. de Toledo, F.J. Ordoñez, J. Gómez-Romero, J.A. Iglesias, J.L. Mira Programación TEMA 4. ESTRUCTURAS DE CONTROL Grado en Ingeniería en Tecnologías Industriales Programación CONTENIDOS 4.1.
Algoritmos. Medios de expresión de un algoritmo. Diagrama de flujo
Algoritmos En general, no hay una definición formal de algoritmo. Muchos autores los señalan como listas de instrucciones para resolver un problema abstracto, es decir, que un número finito de pasos convierten
Lenguaje C. Tipos de Datos Simples y Estructuras de Control
Lenguaje C Tipos de Datos Simples y Estructuras de Control Lenguaje C C es un lenguaje de programación creado en 1972 por Dennis M. Ritchie en los Laboratorios Bell como evolución del anterior lenguaje
Resolución de Problemas
Resolución de Problemas con algoritmos Colaboratorio de Computación Avanzada (CNCA) 2015 1 / 27 Contenidos 1 Introducción 2 Elementos de algoritmos Elementos Variables Estructuras de Control Condicionales
Ciclos. Recordando Estructuras de Control Básicas: SELECCIÓN (condición) SECUENCIAL
Ciclos Fundamentos de Programación Recordando Estructuras de Control Básicas: Una secuencia es una serie de estatutos que se ejecutan uno después de otro. Selección (condición) ejecuta diferentes estatutos
Semana de las Matemáticas e Ingeniería. Desarrollo de algoritmos recursivos empleando la aplicación PseInt
Semana de las Matemáticas e Ingeniería Desarrollo de algoritmos recursivos empleando la aplicación PseInt 21 de Noviembre de 2013 Agenda Desarrollo de algoritmos recursivos empleando la aplicación PSeInt
Apuntadores (Punteros)
Apuntadores (Punteros) x9ff10 X int 209 SESION 7 *ptr Definición Llamados también punteros. Un Apuntador es una variable que contiene una dirección de memoria, la cual corresponderá a un dato o a una variable
Para las ecuaciones diferenciales ordinarias no lineales no existen métodos generales.
Unidad IV: Sistemas continuos (continuación) Objetivo específico: Entender ampliamente el fenómeno del comportamiento de los modelos matemáticos para la resolución de problemas enfocados a las ecuaciones
Tema 5.- Recursividad
Apuntes elaborados por: Raquel López, Eduardo Quevedo y Aaron Asencio Revado por: Javier Miranda el???? Tema 5.- Recursividad NOTA Todos los ejemplos que se exponen en este tema se pueden realizar utilizando
Datos y tipos de datos
Datos y tipos de datos Dato Representación formal de hechos, conceptos o instrucciones adecuada para su comunicación, interpretación y procesamiento por seres humanos o medios automáticos. Tipo de dato
Lección 2 Introducción al lenguaje C
Lección Introducción al lenguaje C Decimal Binario Hexadecimal A B C D E F Octal Equivalencia entre decimal, binario, hexadecimal y octal. Código ASCII (American Standard Code for Information Interchange)
Diseño de compiladores. Representación intermedia Ambientes de ejecución
Diseño de compiladores Representación intermedia Ambientes de ejecución Generación de la RI Es la ultima etapa del frontend de un compilador El objetivo es traducir el programa en el formato que espera
Algoritmos: Diseño de algoritmos por inducción
Algoritmos: Diseño de algoritmos por inducción Alberto Valderruten LFCIA - Departamento de Computación Facultad de Informática Universidad de A Coruña, España www.lfcia.org/alg www.fi.udc.es Contenido
Guía práctica de estudio 05: Diagramas de flujo
Guía práctica de estudio 05: Diagramas de flujo Elaborado por: M.C. Edgar E. García Cano Ing. Jorge A. Solano Gálvez Revisado por: Ing. Laura Sandoval Montaño Guía práctica de estudio 05: Diagramas de
Distinguir las diferentes estructuras de repetición utilizadas en problemas con bucles: mientras, repetir mientras, para.
ESTRUCTURAS ITERATIVAS 1 ESTRUCTURAS ITERATIVAS OBJETIVOS Aprender a resolver problemas mediante la ejecución repetida de una secuencia de proposiciones llamados bucle o estructuras repetitivas o iterativas.
Primer Parcial de Programación 3 (1/10/2009)
Primer Parcial de Programación (/0/009) Instituto de Computación, Facultad de Ingeniería Este parcial dura horas y contiene carillas. El total de puntos es 0. En los enunciados llamamos C* a la extensión
LA ESTRUCTURA DE DATOS PILA EN JAVA. CLASE STACK DEL API JAVA. EJEMPLO Y EJERCICIOS RESUELTOS. (CU00923C)
APRENDERAPROGRAMAR.COM LA ESTRUCTURA DE DATOS PILA EN JAVA. CLASE STACK DEL API JAVA. EJEMPLO Y EJERCICIOS RESUELTOS. (CU00923C) Sección: Cursos Categoría: Lenguaje de programación Java nivel avanzado
El lenguaje C. 1. Identificadores, constantes y variables
Principios de Programación El lenguaje C 1. Identificadores, constantes y variables 1.1. Conceptos de memoria Los nombres de variable como x, y, suma corresponden a localizaciones o posiciones en la memoria
!MATRICES INVERTIBLES
Tema 4.- MATRICES INVERTIBLES!MATRICES INVERTIBLES!TÉCNICAS PARA CALCULAR LA INVERSA DE UNA MATRIZ REGULAR 1 Hemos hablado anteriormente de la matriz cuadrada unidad de orden n (I n ).. Es posible encontrar
Laboratorio de Paralelismo OpenMP: ejemplos y ejercicios
Laboratorio de Paralelismo OpenMP: ejemplos y ejercicios > Máquinas y directorios Vamos a trabajar con el siguiente multiprocesador SMP: PowerEdge 6850 (DELL) 4 procesadores Intel Xeon 7100 de doble núcleo
Tema 2. El lenguaje JAVA
Tema 2. El lenguaje JAVA Nomenclatura habitual Variables Tipos de variables Tipos primitivos Referencias Arrays Operadores Operadores de Java Precedencia de operadores Sentencias de control Sentencias
RESUMEN DE CONCEPTOS BASICOS DE PROGRAMACION JAVA
UNED Centro Asociado de Cádiz RESUMEN DE CONCEPTOS BASICOS DE PROGRAMACION JAVA 1. OBJETOS Cualquier elemento del programa es un objeto. Un programa es un conjunto de objetos que se comunican entre sí
CONCEPTOS BASICOS DEL LENGUAJE JAVA
CONCEPTOS BASICOS DEL LENGUAJE JAVA NOMENCLATURA GENERAL En Java se distinguen las letras mayúsculas y minúsculas. Las reglas del lenguaje respecto a los nombres de variables son muy amplias y permiten
Algoritmos de Ordenamiento
Algoritmos de Ordenamiento Fernando A. Lagos B. Copyleft 2007 INDICE 1 Introducción Pág. 3 2 Tipos de Algoritmos Pág. 4 2.1 Algoritmos iterativos Pág. 5 2.2 Algoritmos recursivos Pág. 6 3 Método de la
ALGORITMICA Y PROGRAMACION POR OBJETOS I
ALGORITMICA Y PROGRAMACION POR OBJETOS I Nivel 2 Definiendo situaciones y manejando casos Marcela Hernández Hoyos Qué vamos a aprender en este nivel: Diferencia entre clase y objeto Modelar características
Tema 6: Generación de código (parte 2)
Tema 6: Generación de código (parte 2) Procesamiento de Lenguajes Dept de Lenguajes y Sistemas Informáticos Universidad de Alicante Procesamiento de Lenguajes Tema 6: Generación de código (parte 2) 1 /
1. Ejemplo de clase : La clase Cuenta 2. Uso de la clase Cuenta. 3. Métodos y objetos receptores de mensajes (Importante)
1. : La clase Cuenta. Uso de la clase Cuenta 3. Métodos y objetos receptores de mensajes (Importante) 1 Una clase para cuentas de un banco Vamos a modelar con una clase, un nuevo tipo de datos, donde los
Por ejemplo, el factorial puede definirse de manera recursiva de la siguiente manera:
RECURSIVIDAD Existen muchas funciones matemáticas cuyos argumentos son números naturales, que pueden definirse de manera recursiva. Esto quiere decir que el valor de la función para el argumento n puede
UNIVERSIDAD NACIONAL AUTÓNOMA DE MÉXICO. Introducción FACULTAD DE INGENIERÍA. Ordenación
Introducción Uno de los procedimientos más comunes y útiles en el procesamiento de datos, es la clasificación u ordenación de los mismos. Se considera ordenar al proceso de reorganizar un conjunto dado
Análisis de Algoritmos
Análisis de Algoritmos Amalia Duch Barcelona, marzo de 2007 Índice 1. Costes en tiempo y en espacio 1 2. Coste en los casos mejor, promedio y peor 3 3. Notación asintótica 4 4. Coste de los algoritmos
Java Básico. Métodos estáticos
Java Básico Métodos estáticos Agregando métodos estáticos En un programa es deseable separar los algoritmos y asignarles un nombre. Cada algoritmo separado será llamado método. Cuando no necesitamos crear
NIVEL 15: ESTRUCTURAS RECURSIVAS BINARIAS
1 NIVEL 15: ESTRUCTURAS RECURSIVAS BINARIAS Árboles Binarios y Árboles Binarios Ordenados 2 Contenido Árboles binarios Iteradores Árboles binarios ordenados 3 Árboles binarios Algunas definiciones para
Programación Orientada a Objetos Métodos Guía de Ejercicios v9.7
Programación Orientada a Objetos Métodos Guía de Ejercicios v9.7 1, Escriba un método llamado puntoscalidad que reciba como entrada el promedio de un estudiante y devuelva 4 si el promedio se encuentra
Llamamos potencia a todo producto de factores iguales. Por ejemplo: 3 4 =
1. NÚMEROS NATURALES POTENCIAS DE UN NÚMERO NATURAL Llamamos potencia a todo producto de factores iguales. Por ejemplo: 3 4 = 3 3 3 3 El factor que se repite es la base, y el número de veces que se repite
TIPO DE DATO ABSTRACTO (TDA)
TIPO DE DATO ABSTRACTO (TDA) Ing. Eduard Antonio Lozano Córdoba Nota: Toda la información fue copiada de: Libros físicos e Internet Actividad Extra Clases #include #include int binario(int
Programación n Orientada a Objetos Sentencias Java Parte I. Ing. Julio Ernesto Carreño o Vargas MsC.
Programación n Orientada a Objetos Sentencias Java Parte I Ing. Julio Ernesto Carreño o Vargas MsC. Variables y expresiones aritméticas Variables Conceptos de Memoria Una variable es un espacio en la memoria
Programación de Computadores 4 Iteraciones y Decisiones. Prof. Javier Cañas. Universidad Técnica Federico Santa María Departamento de Informática
Programación de Computadores 4 Iteraciones y Decisiones Prof. Javier Cañas Universidad Técnica Federico Santa María Departamento de Informática Contenido 1 Introducción 2 Operadores Relacionales y Lógicos
Centro Asociado Palma de Mallorca. Antonio Rivero Cuesta
Centro Asociado Palma de Mallorca Antonio Rivero Cuesta La Sintaxis de Java I... 5 Tipos de datos... 6 Tipos de datos simples... 7 Operadores... 11 Operadores Aritméticos... 12 Operadores relacionales...
Programación de Sistemas
Programación de Sistemas Algoritmos de Ordenación Índice Por qué es importante la ordenación? Un par de ejemplos InsertionSort QuickSort Para cada uno veremos: En qué consisten, Casos extremos Eficiencia
