Resolución de Problemas y Algoritmos Segundo cuatrimestre 2015 Clase 11: Construcción de primitivas (Funciones)

Documentos relacionados
Módulo 8: Primitivas en Pascal

Departamento de Ciencias e Ingeniería de la Computación Universidad Nacional del Sur 1

Universidad de Valladolid. Departamento de informática. Campus de Segovia. Estructura de datos Tema 1: Recursividad. Prof. Montserrat Serrano Montero

Apunte Laboratorio ALPI - El lenguaje de programación Pascal

Departamento de Informática Universidad de Valladolid Campus de Segovia TEMA 1: RECURSIÓN

Programación MODULAR: Subalgoritmos - funciones y procedimientos

Resolución de Problemas y Algoritmos Clase 6: Repetición (continuación)

Resolución de Problemas y Algoritmos Segundo cuatrimestre de 2015 Clase 18: Recursión - Problemas clásicos

Slide 1. ordenación de tres números en forma. creciente.

FUNDAMENTOS DE PROGRAMACIÓN LABORATORIO SESIÓN 2

Subrutinas. Subrutinas. Erwin Meza Vega

6. Estructuras básicas de control 1. Pseudocódigo

FUNDAMENTOS DE OBJECT PASCAL

TRABAJO PRÁCTICO N 6 LENGUAJE PASCAL

Componentes Básicos. InCo. InCo Componentes Básicos 1 / 28

Funciones y subrutinas

APUNTES DE CÁTEDRA: ARREGLOS MULTIDIMENSIONALES

Trabajo Práctico 6 Funciones, Procedimientos y División de Problemas

Subprogramas en Fortran 90. Seminario de Computación 2009

Declaración de Procedimientos

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

Unidad 1. Análisis de Algoritmos. Ing. Leonardo R. L. Estructura de datos - Generalidades Unidad I Pág 1

Introducción a Haskell. Cecilia Manzino

8.1.- FUNCIONES Y PROCEDIMIENTOS DEFINIDOS POR EL USUARIO EN TURBO PASCAL.

2.3 DEFINICIÓN DE LENGUAJES ALGORÍTMICOS

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

Manual de turbo pascal

Dra. Jessica Andrea Carballido

1. ESTRUCTURA DE UN PROGRAMA PASCAL Todo programa escrito en lenguaje Pascal, del más simple al más complejo, tiene la siguiente estructura:

Trabajo Práctico 7 Recursividad Versión 4

ESTRUCTURA SECUENCIAL ESTRUCTURA SELECTIVA

Ingeniería del software I 9 - Diseño detallado

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

Concepto de Recursión. Características de algoritmos recursivos. Ejemplos

EXAMENES RESUELTOS DE PROGRAMACION I

Módulo. = Asignación = = Comp. de igualdad!= Com. de desigualdad <= Comp. menor o igual >= Comp. mayor o igual AND lógico OR lógica.

Modularización en lenguaje C. Funciones

Lenguaje de Diseño. Primera Parte. Resolución de Problemas y Algoritmos. Primer Cuatrimestre Ing. En Informática e Ing.

Introducción a PL/SQL

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

Lenguaje de Diseño. Primera Parte. Segundo Cuatrimestre 2017

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:

Introducción rápida a la programación (estructurada ) con C++

Programación Estructurada

Programación modular en Pascal

Introducción al Lenguaje de Programación Ada

Trabajo Práctico N 9 Recursividad

Índice. Definición Objetivos Estructura de una unidad Ejemplo de creación y uso FAQs Opciones de compilación Unidades estándar de TurboPascal

Primer Parcial. Programación 1 Instituto de Computación Año 2011

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

14/03/2018. Problemas, Algoritmos y Programas. Problemas, Algoritmos y Programas. Programas y Lenguajes. Programas y Lenguajes. Programas y Lenguajes

FACULTADE DE INFORMÁTICA Departamento de Computación Estructura de Datos e da Información. Ejercicios de recursividad

Dra. Jessica Andrea Carballido

28/10/2016. Procesamiento de Secuencias. Procesamiento de Secuencias. Procesamiento de Secuencias. Procesamiento de Secuencias

UNIDAD IV Programación Funcional. Lic. Jesús Germán Andrés PAUTSCH - FCEQyN - UNaM

Análisis léxico. Formalización y desarrollo. Procesadores de Lenguajes. Ingeniería Técnica superior de Ingeniería Informática

5. Subprogramas Fundamentos de Informática

Guía práctica de estudio 05: Pseudocódigo

Primer Parcial. Programación 1 Instituto de Computación Año 2017

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

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

Enteros. Son los números que no contienen componentes fraccionarios y, por tanto, no contienen punto decimal.

ALGORITMOS Y ESTRUCTURAS DE DATOS. Ejercicios Resueltos CUADERNILLO DE PRACTICA

Capítulo 3. Subprogramas. 3.1 Subprogramas FUNCTION

Estructuras de Datos y Algoritmos

Trabajo Práctico 8 División de Problemas en Subproblemas Uso de Procedimientos y Funciones

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

CURSO PROGRAMACIÓN BÁSICA. SEMANA 4 El diseño de un programa

Programación Funcional Lisp-DrScheme Primera Parte. Dr. Oldemar Rodríguez Rojas Escuela de Informática Universidad de Nacional

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

Asumiremos que se dispone de procedimientos para leer y escribir caracteres. Se desarrollan algunas funciones primitivas que nos serán útiles.

Esquemas repetitivos en Fortran 90

ALGORÍTMICA. Dpto. Ingeniería de Sistemas y Automática Facultad de Ciencias Universidad de Valladolid.

DATOS PROGRAMA PROCESADOR

TEMA 4: Programación estructurada

Departamento de Informática Universidad de Valladolid Campus de Segovia. TEMA 4: TIPOS ABSTRACTOS DE DATOS (TADs)

Inicio del programa. Entrada de datos. Proceso de datos. Salida de datos. Fin del programa

Estructuras de Repetición: Repita Mientras.

Resolución de Problemas y Algoritmos

Unidad de Competencia I Elementos de Competencia Requerimientos de información

ALGORITMOS Y ESTRUCTURAS DE DATOS EJERCICIOS RESUELTOS SEGUNDA PARTE

Repetición Condicional

Declaración. Introducción. Definición o implementación. Llamada. Un programa en C consta de una o más funciones.

TECNICO SUPERIOR EN INFORMÁTICA EMPRESARIAL MÓDULO INTRUCCIONAL

Instituto de Computación. Facultad de Ingeniería. Universidad de la República Examen de Programación 2 03 de Agosto de 2006 Generalidades:

Procesamiento de Lenguajes (PL) Curso 2015/2016. Práctica 5: traductor a código m2r

TEMA 5: Subprogramas, programación modular

PHP: Lenguaje de programación

Procedimientos, Funciones y Recursividad

PROGRAMACIÓN CONCURRENTE. Tema 5 Monitores

Tema: Funciones, Procedimientos y Recursividad en C#.

Tema: Funciones, Procedimientos y Recursividad en C#.

Análisis de algoritmos. Recursividad

Tema: Funciones, Procedimientos y Recursividad en C#.

Estructuras de Control. Secuencia y Selección

Funciones Tipos de funciones y Recursividad

RECURSIVIDAD. Prof. Ing. M.Sc. Fulbia Torres

Calidad del Software. Ejercicios Tema 4 Conceptos de pruebas

Tema: Funciones, Procedimientos y Recursividad en C#.

Informática I Fundamentos de Computadores

Transcripción:

Resolución de Problemas y Algoritmos Segundo cuatrimestre 2015 Clase 11: Construcción de primitivas (Funciones) Dr. Sergio A. Gómez http://cs.uns.edu.ar/~sag Departamento de Ciencias e Ingeniería de la Computación Universidad Nacional del Sur Bahía Blanca, Argentina

idea desarrollo Ciclo de Uso/mantenimiento vida del software análisis diseño (i.) implementación El software surge de una necesidad, problema o idea. Luego se desarrolla e implementa. Finalmente se usa durante un tiempo y de ser necesario se modifica (según la experiencia el 60-80% del ciclo de vida lo constituye esta etapa). Es importante utilizar metodologías y técnicas que simplifiquen el desarrollo y faciliten el mantenimiento.

Solución de problemas con primitivas Hemos visto cómo resolver problemas simples, escribiendo un algoritmo y luego implementándolo en Pascal utilizando asignaciones, condicionales y repeticiones. En lo que resta de la materia veremos: 1. Técnicas para resolver problemas complejos. 2. Cómo escribir algoritmos basados en primitivas y algoritmos que son primitivas. 3. Cómo implementar en Pascal primitivas y poder usar las dos técnicas anteriores. 3

Técnica: Descomposición de problemas. Cuando se intenta resolver un problema complejo, es conveniente descomponer el problema en partes (sub-problemas). Si los subproblemas también son complejos, entonces pueden a su vez descomponerse en otros subproblemas, y así siguiendo. 4

Técnica: descomposición de problemas. Comprar Ropa novio Comprar ropa Comprar vestido novia Organizar casamiento Contratar salón Organizar fiesta Diseñar Contr invitacion Contrat atar es ar DJ caterin g Enviar invitaciones Enviar Imprimir invitac invitacio iones nes Comprar traje Comprar zapatos Un problema complejo que puede dividirse en subproblemas... 5

Técnicas top-down y bottom-up Top-down: División del problema principal en subproblemas más simples hasta llegar a problemas que no necesitan dividirse. Problema subproblemas Bottom-up: Por composición, resolviendo primero los subproblemas más simples hasta llegar a solucionar al problema principal. 6

Ejemplo de trabajo Problema: Escriba un algoritmo y luego un programa para calcular la suma hasta el término K-ésimo de la siguiente suma infinita: suma = 2/1 + 4/2 + 8/6 + 16/24 + 32/120 + 64/720... Técnica: Dar ejemplos particulares y luego generalizar. Ejemplos particulares: K=1,2,3 Término general: 2 N / N! K=6 Solución: sumar (2 N / N!) desde N=1 hasta N=k Técnica: Para escribir el algoritmo y el programa se sugiere descomponer el problema en sub-problemas. 7

Descomposición del problema SumaTérminos Algoritmo Suma-términos DISEÑO Término i-ésimo IMPLEMENTACIÓN Algoritmo Termino-iesimo Algoritmo Potencia Algoritmo Factorial Potencia Factorial 8

Algoritmos como primitivas Los Algoritmos: 1. Reciben datos (entrada) 2. Modifican los datos (acciones primitivas + estructuras de control) 3. Devuelven datos (salida) Veremos a continuación que un algoritmo puede ser usado como una primitiva por otro algoritmo a través de lo que se denomina invocación o llamada. La motivación para usar algoritmos para describir primitivas es que estas podrán ser utilizadas luego en otros algoritmos más complejos. 9

Flujo de control en la invocación de Algoritmo principal una primitiva (subprograma) Invocación a primitiva P argumentos resultado Primitiva P Código describiendo el algoritmo la primitiva P Nota: Sinónimos para primitiva son subprograma, subrutina, módulo (ojo: término más general) - Dr. Sergio A. Gómez 10

Conceptos a entender Cómo se definen los subprogramas? Cuándo se ejecutan los subprogramas? Cómo se le brinda información de entrada a los subprogramas? Cómo se retorna información de salida desde los subprogramas? Cómo interactúan las variables en subprogramas separados? - Dr. Sergio A. Gómez 11

Potencia SumaTérminos Término i-ésimo Factorial PRIMITIVA Potencia Datos Entrada : Base, Exponente Datos Salida : Pot COMIENZO Pot 1 REPETIR Exponente VECES Pot Pot * Base FIN ALGORITMO PRIMITIVA Factorial Datos Entrada : N {natural} Datos Salida : Fact COMIENZO Fact 1 mientras N>0 Fact Fact * N N N-1 FIN ALGORITMO 12

Algoritmos como primitivas PRIMITIVA Termino-i-esimo D. Entrada : i {posición del término en la sucesión} D. Salida : Termino {valor del término i-esimo} COMIENZO Termino Potencia(2,i) / Factorial(i) FIN ALGORITMO 13

Algoritmos como primitivas PRIMITIVA SumaTerminos D. Entrada : K {cant. términos a sumar} D. Salida : Suma {suma de primeros K términos} COMIENZO i 1 Suma 0 Repetir K veces Suma Suma + Término-i-esimo(i) i i + 1 FIN ALGORITMO 14

División del problema en subproblemas SumaTérminos Program suma; Término i-ésimo PRIMITIVAS en Pascal: 1. FUNCTION 2. PROCEDURE Potencia Factorial Termino-iesimo Suma-términos Potencia Factorial Begin End. 15

Pascal es estructurado por bloques PROGRAM MIPROGRAMA CONST... VAR... FUNCTION FACTORIAL( ) CONST... VAR.. BEGIN... END; FUNCTION POTENCIA( ) CONST... VAR.. BEGIN... END; BEGIN... END. En Pascal, un programa está definido por un bloque que tiene: constantes variables FUNCIONES sentencias Una función es también un bloque que tiene constantes, variables, sentencias, etc. 16

Primitivas en Pascal Cuando un algoritmo tiene un único dato de salida se puede invocarlo desde una expresión. Estas primitivas se pueden considerar como nuevas funciones a utilizar en los algoritmos. En Pascal se pueden construir funciones que tienen un número indeterminado de datos de entrada pero un único dato de salida. Se utiliza la palabra reservada FUNCTION. 17

PRIMITIVA Potencia D. Entrada : Base, Exponente D. Salida : Pot COMIENZO Pot 1 REPETIR Exponente VECES Pot Pot * Base FIN ALGORITMO Parámetros formales Tipo del Resultado Variables Locales FUNCTION Potencia ( Base, Exponente : integer) : integer; VAR aux, P : integer; BEGIN P := 1; FOR aux := 1 TO Exponente DO P := P * Base; Potencia := P; END; Asignación del resultado 18

En Pascal toda función tiene: 1. Un nombre (con el cual se la invocará desde una expresión). 2. Parámetros (entre los cuales estarán los datos de entrada). 3. Tipo del resultado (que será el tipo de la función y determinará en que expresión usarla) 4. Variables locales (para uso interno solamente). 5. Sentencias. 6. Asignación del valor de salida al nombre de la función (es la forma de devolver un valor). FUNCTION Potencia (Base, Exponente:integer) : integer; VAR aux,p : integer; BEGIN P := 1; FOR aux:= 1 TO Exponente DO P := P * Base; Potencia:= P; END; 19

Funciones en Pascal Para llamar (invocar o usar) a una función debe: 1) Utilizarse su nombre en una expresión. 2) Coincidir la cantidad de parámetros y tipo de cada uno. 3) El tipo del resultado debe coincidir con el tipo de la expresión en la que se lo llama. 20

La llamada a FUNCTION debe realizarse desde una expresión: PROGRAM Prueba_potencia; VAR B,E, Pot :Integer; FUNCTION Potencia (Base, Exponente:integer) : integer; VAR aux,p: integer; BEGIN Parámetros formales por valor: reciben una P := 1; copia de los valores de los actuales FOR aux:= 1 TO Exponente DO P := P * Base; Potencia:= P; END; BEGIN write( Ingrese base y exponente: ); readln(b, E); Pot:=Potencia(B,E); B := B+1; E := E+1; writeln( pot, <>, potencia(b,e)); END. Parámetros actuales (o efectivos) 21

Invocación a funciones (en expresiones) FUNCTION EsVocal (letra :char): boolean; BEGIN CASE letra OF A, E, I, O, U, a, e, i, o, u, : EsVocal := true; ELSE EsVocal := false; END; END; Algunos ejemplos de invocación: VAR ch: char; es_letra_voc:boolean; read(ch); es_letra_vocal := EsVocal(ch); writeln(esvocal(ch)); IF (EsVocal(ch) or (ch= @ )) THEN WHILE not EsVocal(ch) and not EOF(archi) DO 22

Problema propuesto Realizar la implementación y la traza completa del programa propuesto para la serie. 23

Problema: Mínimo entre dos números Program PruebaMinimo; Var a, b : integer; {------------------------------------------------------} Function Minimo2( x, y : integer ) : integer; Begin if x < y then Minimo2 := x else Minimo2:= y; end; {------------------------------------------------------} Begin WriteLn( Ingrese dos numeros: ); ReadLn( a, b ); WriteLn( El minimo es:, Minimo2( a, b ); End. - Dr. Sergio A. Gómez 24

Problema: Mínimo entre tres números Program PruebaMinimo; Var a, b, c : integer; Function min3( a, b, c : integer ) : integer; Begin if (a<=b) and (a<=c) then min3 := a else if (b<=c) then min3 := b else min3 := c; end; Begin WriteLn( Ingrese tres numeros: ); ReadLn( a, b, c ); WriteLn( El minimo es:, min3( a, b, c ) ); End. - Dr. Sergio A. Gómez 25

Mínimo entre tres números (de nuevo) Program PruebaMinimo; Var a, b, c : integer; Function min2( x, y : integer ) : integer; Begin if x<y then min2 := x else min2 := y end; Function min3( x, y, z : integer ) : integer; Begin min3 := min2( x, min2( y, z ) ); end; Begin WriteLn( Ingrese tres numeros: ); ReadLn( a, b, c ); WriteLn( El minimo es:, min3( a, b, c ); End. - Dr. Sergio A. Gómez 26

Problema: Convertir a minúscula Program ConvertirAMinuscula; Var car : char; Function Minuscula( c : char ) : char; Begin if ( A <= c) and (c <= Z ) then Minuscula := Chr( Ord(c) Ord( A ) + Ord( a ) ) else Minuscula := c; end; Begin WriteLn( Ingrese un carácter: ); ReadLn( car ); WriteLn( car, en mayuscula es, Minuscula( car ) ); end. - Dr. Sergio A. Gómez 27

Sumario de temas Diseño top-down versus diseño bottom-up Primitivas (subprogramas, subrutinas) Notación en pseudocódigo Dos clases: Funciones y procedimientos Invocación Parámetros (formales y actuales) Retornar un valor de la función Ejemplos - Dr. Sergio A. Gómez 28