PROBLEMAS DE RECORRIDO

Documentos relacionados
Programación 2. Lección 1. Introducción a la especificación formal de algoritmos

Operadores. Java es un lenguaje rico en operadores, que son casi idénticos a los de C/C++.

UE#03 PROBLEMAS DE SOLUCIÓN DIRECTA FUNCIONES

UE#04 PROBLEMAS DE ANÁLISIS DE CASOS CONTROL DE ALTERNATIVAS

TEMA 4: Programación estructurada

Centro Asociado Palma de Mallorca. Antonio Rivero Cuesta

Curso de Java Introducción a la Programación III

ESTRUCTURAS DE CONTROL

VGOC"6<"Rtqitcocekôp"guvtwevwtcfc

Esquemas repetitivos en Fortran 90

Funciones II. Fundamentos de Programación Fundamentos de Programación I

Programación 1 Tema 5. Instrucciones simples y estructuradas

Estructuras de control Agosto de Facultad de Ingeniería. Universidad del Valle

Tipos de Datos de python (2ª parte):

Paradigmas de lenguajes de programación. Introducción a la programación imperativa. Lenguaje C. Programación imperativa

Esquemas repetitivos en Fortran 90. Esquemas repetitivos en Fortran 90. Esquemas repetitivos en Fortran 90. Tipos de Esquema

GLOSARIO 1. Qué es bit y byte? Bit: Es la unidad mínima de información. Puede ser 0 o 1. Byte: Es el conjunto de 8 bits. Ejemplo:

Java. Introducción a la Programación Orientada a Objetos

Programación Orientada a Objetos Sentencias Java Parte I Ing. Julio Ernesto Carreño Vargas MsC.

Sentencias iterativas

Dra. Jessica Andrea Carballido

Programación 1 Tema 5. Instrucciones simples y estructuradas

JavaScript Básico. Elementos Básicos: Comentarios: Literales: Valores que puede tomar una variable o una constante.

Tema 2. El lenguaje JAVA

Guía 1: Funciones, precedencia y tipado

PHP: Lenguaje de programación

Programación n Orientada a Objetos Sentencias Java Parte I. Ing. Julio Ernesto Carreño o Vargas MsC.

Lección 3 Sentencias de control

Operadores aritméticos

La resolución de problemas es una tarea únicamente humana comprobable en todos los casos con los mismos resultados.

Control de Flujo. Estructuras de Control! Experiencia Educativa de Algorítmica CONTROL DE FLUJO

VARIABLES, CONSTANTES Y EXPRESIONES ASIGNACIÓN. TIPOS ELEMENTALES. PRECEDENCIA DE LOS ESTRUCTURAS DE CONTROL. CONDICIONAL E

Informática. JavaScript: Lenguaje de programación. Fco J. Martín Mateos Carmen Graciani

Programación 2. Lección 4. Metodología de diseño de algoritmos recursivos

Ciclos. Recordando Estructuras de Control Básicas: SELECCIÓN (condición) SECUENCIAL

Recursividad Definición

Sentencias de Procesamiento Iterativo: while y do-while

5. ESTRUCTURAS DE REPETICIÓN

SESIÓN DE EJERCICIOS E1

INTRODUCCIÓN A LA PROGRAMACIÓN. 1º Bachillerato

Conceptos. Generales ALGORITMOS

Programación Estructurada. Sesión 4:Estructuras de control

Tema: Estructuras de Selección en C#.

Donde Condicion es una expresión booleana, es decir, que puede tomar el valor verdadero (true) o falso (false).

Tema 4. Control de flujo. Programación Programación - Tema 4: Control de Flujo

Operadores de comparación

Guía práctica de estudio 06: Estructuras de repetición

Centro Asociado Palma de Mallorca. Antonio Rivero Cuesta

ESTRUCTURAS DE CONTROL REPETITIVAS

Estructura de datos y Programación

JavaScript: Lenguaje de programación

Funciones: Pasos por Referencia Recursividad

Recursividad. Definición de Recursividad: Técnica de programación muy potente que puede ser usada en lugar de la iteración.

Programación Estructurada

Instrucciones de control

FUNDAMENTOS PARA LA CONSTRUCCIÓN DEL CÓDIGO A PARTIR DEL ALGORITMO

Programación I. Ingeniería Técnica Informática. Ejercicios de los Temas 4, 5, 6 y 7

Fundamentos PHP. El término puntuación nos referimos a la sintaxis usada en PHP para la terminación de una línea de código (;)

Programación 2. Lección 3. Introducción a la recursividad

PRÁCTICA DE PROCESADORES DE LENGUAJE EVALUACIÓN ORDINARIA CURSO 2009/2010 OBJETIVO DE LA PRÁCTICA

Curso Informática Lección 4. Instrucciones de control

Laboratorio 4 Tema 6. Procedimientos: Acciones, Funciones y Pase de Parámetros

Estructuras de Control

Palabras reservadas de C++ y C. Una palabra reservada no puede declararse como un identificador, esto haría un conflicto entre conectores y funciones.

Estructuras de Decisión Simples y Dobles. Programación digital I Escuela de Sistemas Facultad de Ingeniería Gilberto Diaz

Introducción a la computación. Carlos Lopez Pombo

fundamentos de programación (unidad 4) programación estructurada en Java

Control de Flujo. Estructuras de Control! Experiencia Educativa de Algorítmica CONTROL DE FLUJO

Tema 2. Funciones Lógicas. Algebra de Conmutación. Minimización de funciones Lógicas. Introducción al VHDL.

Funciones I. Fundamentos de Programación Fundamentos de Programación I

Estructuras de Repetición

Programación. Test Autoevaluación Tema 4

Programación.Net Lenguaje C#

Conceptos básicos de álgebra relacional

Tema 3. Estructuras de control

Programación 1. Tema II. Diseño de programas elementales. Lección 7. Diseño modular y descendente de programas

Tema 1 INTRODUCCIÓN A LOS LENGUAJES DE PROGRAMACIÓN

Introducción a Java. Introducción a Java. Programación I

Un calculadora avanzada... y algo más!

ESTRUCTURAS DE REPETICIÓN AREA PROGRAMACIÓN 1

Lenguaje C Bucles, Condicionales, operadores y Algoritmos.

Lenguaje de Programación: C++ Repaso de Material C++

Laboratorio de Arquitectura de Redes. Sentencias de control en lenguaje C

Funciones. Parámetros por valor

Tema 3. Estructuras de Datos

Java para programadores

Informática Ingeniería en Electrónica y Automática Industrial

Todo programa en 'C' consta de una o más funciones, una de las cuales se llama main.

Estructura de un programa en Java. Tipos de datos básicos. class miprimerprograma{ // comentario, no es parte del programa

Práctica 4. Contenido: Estructuras de control iterativas (while, do-while, for). Sentencias break y continue.

Preliminares: programación con C++

Sentencias de control de flujo

TEMA 5. CONTROL DE FLUJO DEL PROGRAMA. Sentencia Instrucción Expresión Operadores + Operandos Sintaxis: Sentencia ;

Java para no Programadores

INTRODUCCIÓN A LOS LENGUAJES

Algoritmos y Estructuras de Datos Tema 2: Diseño de Algoritmos

abril de 2017 Desarrollo de aplicaciones en Java Tipos de datos primitivos Tipos de datos Elementos de aplicaciones simples

Repetición Condicional

Unidad Didáctica 2. Elementos básicos del lenguaje Java Tipos, declaraciones, expresiones y asignaciones

Estatutos de Control C# Estatutos de Decisión (Selección)

Transcripción:

UE#08 PROBLEMAS DE RECORRIDO BUCLES

Índice Problemas de recorrido. Características. Especificación. Taxonomía de problemas. Mecanismos de cómputo. Recursividad. Bucles. Bucles en Java. MIENTRAS-HACER HACER-MIENTRAS FOR

PROBLEMAS DE RECORRIDO Aquellos para los que se necesita recorrer un dominio. Se precisa realizar cálculos para algunos o para todos los elementos del dominio. Estos problemas presentan dos frentes: El propio recorrido del dominio. Los cálculos efectuados sobre los elementos.

PROBLEMAS DE RECORRIDO Ejemplo: Recolectar todos los níscalos de una zona del bosque Sobre el dominio: Saber entrar en esa zona del bosque Saber ir de una seta en otra, sin saltarnos ninguna. Distinguir el níscalo. Saber salir de esa zona del bosque. Sobre los cálculos: Cortar el níscalo. Colocarlo en la cesta.

CARACTERÍSTICAS DE LOS PROBLEMAS DE RECORRIDO Qué parámetros? La zona del bosque. Qué resultado? La cesta con níscalos. Hay un filtro (la capacidad de distinguir níscalos). Hay un cálculo (el que construye la cesta con los níscalos). El cortar es más bien, literario. El recorrido del bosque precisa de una cierta pericia para no perder hongos y para no perdernos.

CARACTERÍSTICAS DE LOS PROBLEMAS DE RECORRIDO Para recorrer un dominio hay que contestar a estas 3 preguntas: Con qué elemento empiezo? Cómo avanzo de uno en otro sin dejarme ninguno? Con qué elemento acabo? Los filtros sirven para descartar ciertos elementos sobre los que no tienen que recaer los cálculos.

ESPECIFICACIÓN DE LOS PROBLEMAS DE RECORRIDO Cuantificadores (macro operadores que actúan sobre muchos operandos). Cada cuantificador está asociado a una operación. En matemáticas existen: El sumatorio ( ) asociado a la suma. El productorio ( ), a la multiplicación. El existencial (Ǝ), a la disyunción. Etc.

ESPECIFICACIÓN DE LOS PROBLEMAS DE RECORRIDO En general, toda expresión cuantificada se puede expresar como: ζ α є Đ φ(α) ρ(α) Cuyos elementos son: El cuantificador ( ζ ) que lleva oculta su operación asociada. Su variable ligada ( α ). El dominio de actuación de la variable ( Đ ). Un filtro (opcional) sobre los elementos del dominio ( φ ). Una propiedad sobre los elementos ( ρ ).

ESPECIFICACIÓN DE LOS PROBLEMAS DE RECORRIDO Una expresión cuantificada se lee: Efectúa sucesivamente, con la operación asociada a ζ, la propiedad ρ(α) de los elementos α del dominio Đ que cumplan el filtro φ(α)

EJEMPLOS DE ESPECIFICACIÓN Problema1: Ser un número múltiplo de otro FUNCIÓN EsMultiplo ( N m, n) ----- B PRE: (m>0) /\ (n>0) POST: res = ALGUN i IN N+. (m = i*n) Problema2: Cuántos 7 tiene un número FUNCIÓN CuantosSietes ( N n) ----- N PRE: cierto POST: res = SUM i IN [1,NC(n)] (Cifra(i,n)=7). 1 DONDE: NC(m) es el número de cifras del número m Cifra(j,m) es el dígito de m que ocupa el j -ésimo lugar.

EJERCICIOS DE ESPECIFICACIÓN Ejercicio 1: Suma de los números de un intervalo Ejercicio 2: Ser par un número Ejercicio 3: Suma de los números pares de un intervalo

EJERCICIOS DE ESPECIFICACIÓN FUNCIÓN SumaTodosIntervalo ( N m, n) ----- N PRE: m >= n POST: res = SUM i IN [m,n]. i FUNCIÓN EsPar ( N n) ----- B PRE: n > 0 POST: res = ALGUN i IN N+. (n = 2*i) FUNCIÓN SumaParesIntervalo ( N m, n) ----- N PRE: m >= n POST: res = SUM i IN [m,n] EsPar (i). i

TAXONOMÍA DE PROBLEMAS Clasificación y características CLASE PROBLEMA CUANTIFICADOR OPERACIÓN ELEMENTO NEUTRO PROPIEDADES Acumulación Sumatorio (SUM) Suma ( + ) 0 Conmutativa, Asociativa Acumulación Productorio (MUL) Multiplicación ( * ) 1 Conmutativa, Asociativa Búsqueda ExisteAlgún(ALGÚN) Disyunción ( \/ ) Falso Conmutativa, Asociativa Búsqueda ParaTodo (TODOS) Conjunción ( /\ ) Cierto Conmutativa, Asociativa Extremales Máximo (MAX) Mayor2 (x,y) - Asociativa Extremales Mínimo (MIN) Menor2 (x,y) - Asociativa Construcción Filtrar (FIL) Construir (x, Đ) Vacío - Construcción Aplicar (MAP) Construir (x, Đ) Vacío -

PROBLEMAS DE ESPECIFICACIÓN Problema1: Ser número con todos los dígitos iguales FUNCIÓN TodosIguales ( N n) --- B PRE: cierto POST: res = TODOS i IN [1,NC(n)-1]. (Cifra(i,n) = Cifra(i+1,n)) Problema2: Máximo común divisor de dos números FUNCIÓN MCD ( N m, n) --- N PRE: (m>0) /\ (n>0) POST: res = MAX i IN [1,Menor2(m,n)] (Divide (i,m) /\ Divide (i,n)). i

MECANISMOS DE CÓMPUTO La recursividad es un mecanismo de definición implícita donde en la definición, cabe lo definido. Se especifica con al menos, dos reglas: una en la que se aplica la recursividad y otra en la que no (se termina el proceso). Ejemplo del factorial de un número. 1 si n = 0 n! = n (n-1)! si n > 0

MECANISMOS DE CÓMPUTO Los bucles son construcciones sintácticas que permiten la repetición de un bloque de sentencias. Su especificación es muy dependiente del lenguaje de programación. Ejemplo del factorial de un número en notación cuantificada. n! = α є [1,n] α

MECANISMOS DE CÓMPUTO Elementos del esquema general de un bucle. 2 Variables: elemento: la que contendrá al elemento actual del dominio. resultado: la que contendrá el valor calculado por la recombinación. 4 Fases: Iniciación: de elemento (el primero del dominio) y resultado (el elemento neutro de la operación de recombinación). Condición: expresión lógica sobre lo que queda del dominio. Recombinación: lo que se hace en resultado con los elementos del dominio. Modificación: del elemento actual del dominio para pasar al siguiente.

BUCLES EN Java Bucle MIENTRAS-HACER Esquema +--------------------------+ Iniciación; +--------------------------+ while (Condición) +---+---------------------+ Recombinación; +---------------------+ Modificación; +---------------------+

BUCLES EN Java Bucle MIENTRAS-HACER while (<<expresión_booleana>>) <<Bloque de sentencias>>; Funcionamiento: Se evalúa la expresión booleana. Si el resultado es falso, se ignora el bloque y se sale del bucle. Si el resultado es cierto, se ejecuta el bloque y vuelve a evaluarse la expresión booleana.

BUCLES EN Java Factorial de un número int factorial (int n) { int resultado = 1; int i = 1; while (i <= n) { resultado = resultado * i; i = i + 1; } return resultado; }

BUCLES EN Java Bucle HACER-MIENTRAS Esquema +--------------------------+ Iniciación; +-------------------------+ do +--+---------------------+ Recombinación; +---------------------+ Modificación; +--+---------------------+ while (Condición); +-------------------------+

BUCLES EN Java Bucle HACER-MIENTRAS do <<Bloque de sentencias>>; while (<<expresión_booleana>>); Funcionamiento: Se ejecuta el bloque Y se evalúa la expresión booleana. Si el resultado es falso, se sale del bucle. Si el resultado es cierto, vuelve a ejecutarse el bloque y la expresión booleana.

BUCLES EN Java Factorial de un número int factorial (int n) { int resultado = 1; int i = 1; do { resultado = resultado * i; i = i + 1; } while (i <= n) return resultado; }

BUCLES EN Java Bucle FOR Esquema +-------------------------------------------------+ Iniciación; (solo del resultado) +-------------------------------------------------+ for (Iniciación; Condición; Modificación) +---+--------------------------------------------+ Recombinación; +--------------------------------------------+

BUCLES EN Java Bucle FOR for (<<declaración/iniciación>>; <<expresión_booleana>>; <<modificación>>) <<Bloque de sentencias>>; Funcionamiento: Como el del bucle MIENTRAS- HACER.

BUCLES EN Java Factorial de un número int factorial (int n) { int resultado = 1; for (int i = 1; i <= n; i++) resultado = resultado * i; return resultado; }

EJERCICIOS DE BUCLES int sumatodosintervalo (int m, int n) { int res = 0; for (int i = m; i <= n; i++) res = res + i; return res; } int sumaparesintervalo (int m, int n) { int res = 0; for (int i = m; i <= n; i++) if (espar (i)) res = res + i; return res; }

EJERCICIOS DE BUCLES boolean todosiguales (int n) { boolean todoscumplen = true; int i = 1; int totalcifras = numerocifras(n); while ((i < totalcifras) && todoscumplen) if (cifrai(i,n)!= cifrai(i+1,n)) todoscumplen = false; else i = i + 1; return todoscumplen; }

EJERCICIOS DE BUCLES int mcd (int uno, int otro) { int m = uno; int n = otro; while (m!= n) if (m > n) m = m - n; else n = n - m; return m; }