Dra. Jessica Andrea Carballido

Documentos relacionados
Dra. Jessica Andrea Carballido

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

Resolución de Problemas y Algoritmos

Dra. Jessica Andrea Carballido

Dra. Jessica Andrea Carballido

Dra. Jessica Andrea Carballido

Dra. Jessica Andrea Carballido

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

Dra. Jessica Andrea Carballido

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

09/05/2018. Pasaje de Parámetros. Dra. Jessica Andrea Carballido. Manejo de memoria. Función o procedimiento?

Dra. Jessica Andrea Carballido

Dra. Jessica Andrea Carballido

21/03/2018. Variables y Constantes. Los datos de un programa están representados por variables o constantes y tienen asociado un tipo.

Nombre. Nombre. físico. Nombre lógico. lógico. a 12. program Archivos; var a: file of integer; begin assign(a, arch.dat ); end.

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

Tipos y Estructuras de Control. Dpto. de Ciencias e Ingeniería de la Computación UNIVERSIDAD NACIONAL DEL SUR

Apunte Laboratorio ALPI - El lenguaje de programación Pascal

Iteración Diagrama de SINTAXIS: IF

FUNDAMENTOS DE PROGRAMACIÓN LABORATORIO SESIÓN 2

Trabajo Práctico N 9 Recursividad

Iteración Diagrama de SINTAXIS: IF

Nombre. lógico. físico. Nombre lógico. a 12. Nombre. program Archivos; var a: file of integer; begin assign(a, arch.dat ); end.

28/08/2018. Dra. Jessica Andrea Carballido. cuota monto/cantcuotas

Módulo 4: Algoritmos como primitivas

Trabajo Práctico 7 Recursividad Versión 4

Resolución de Problemas y Algoritmos

Módulo 8: Primitivas en Pascal

Recursión. Recursión continuación

Resolución de Problemas y Algoritmos

Resolución de Problemas y Algoritmos

Módulo 7: Sentencias de control en Pascal

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

LENGUAJE FORTRAN. FUNCIONES Y SUBRUTINAS

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

FUNDAMENTOS DE OBJECT PASCAL

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

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

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

Problema 3: Mercado. Dividir y conquistar

Trabajo Práctico Nº 4 Iteración

Resolución de Problemas y Algoritmos

Arreglos y Subrangos

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

1. Lenguaje Pascal. 2. Módulos de un Programa. 3. Tipos de Datos más utilizados. 4. Declaración de Variables

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

Estructura de Datos: Archivos

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

24/8/2018. cuota monto/cantcuotas

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

FICHEROS EN PASCAL. Ficheros

05/06/2018. Repaso. Dra. Jessica Andrea Carballido. Repaso. El Software. Repaso. Repaso. El Software. El Hardware

Ordinales, Enumerados y Conjuntos

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

Resolución de Problemas y Algoritmos

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

Java Avanzado. Guía 1. Java Avanzado Facultad de Ingeniería. Escuela de computación.

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

Programación MODULAR: Subalgoritmos - funciones y procedimientos

Informática General 2016 Cátedra: Valeria Drelichman, Pedro Paleo, Leonardo Nadel, Norma Morales

LABORATORIO DE PROCESADORES DE LENGUAJE Curso: Práctica 2: Analizador léxico/sintáctico/semántico con Flex y Bison

Subrutinas. Subrutinas. Erwin Meza Vega

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

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

Arreglos y Subrangos

Primer Cuatrimestre 2018 Resolución de Problemas y Algoritmos

EXAMENES RESUELTOS DE PROGRAMACION I

Autoestudio 2: Variables y Operadores

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

Introducción a la Programación

Manual de turbo pascal

Programación Unidad 4. Modularidad. Programación TIG - TUP. Sede Regional Orán UNIVERSIDAD NACIONAL DE SALTA

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

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

Estructuras de Programación

LENGUAJE FORTRAN. ESTRUCTURAS Y SENTENCIAS

Multiplicación de matrices simétricas

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

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

Declaración de Procedimientos

Sintaxis de PSeInt Tutorial

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

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

Procedimientos, Funciones y Recursividad

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

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

Introducción a la Algorítmica Transparencias correspondientes a las clases impartidas por los profesores: Lourdes Miró Amarante Ignacio García Vargas

3. Conceptos elementales de programación 1. léxico. cadenas literales: cualquier cosa dentro de una línea

Funciones y subrutinas

Prefacio 25 Organización de la Unidad Didáctica Cómo utilizar el libro Objetivos docentes... 27

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

EXAMENES RESUELTOS DE PROGRAMACION I

UNIDAD III. TÉCNICA DE PROGRAMACIÓN ESTRUCTURADA

Una clasificación de los tipos de datos existentes en los diferentes lenguajes de programación se presenta a continuación:

ALGORITMOS Y ESTRUCTURAS DE DATOS EJERCICIOS RESUELTOS SEGUNDA PARTE

Introducción al Lenguaje de Programación Ada

TRABAJO PRÁCTICO N 6 LENGUAJE PASCAL

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

Transcripción:

Dra. Jessica Andrea Carballido jac@cs.uns.edu.ar Dpto. de Ciencias e Ingeniería de la Computación UNIVERSIDAD NACIONAL DEL SUR

Cuando la complejidad de los problemas aumenta, la tarea de hallar una solución se torna más difícil. Una metodología para reducir la complejidad consiste en plantear la solución del problema a partir de la solución de una serie de subproblemas más sencillos que forman parte del problema original. La estrategia de diseño dividir para conquistar consiste en dividir un problema complejo en dos o más subproblemas más simples. Cada subproblema puede resolverse directamente o volver a dividirse en subproblemas más simples. La estrategia se complementa con el refinamiento paso a paso. Las soluciones de los subproblemas se integran para resolver el problema original.

Bottom-up: De los subproblemas al problema principal Problema Top-down: Del problema principal a los subproblemas Sub-problemas

La técnica bottom-up consiste en ir resolviendo en primer lugar los problemas más elementales, usando esas soluciones para resolver problemas mayores. La técnica top-down resuelve primeramente el problema mayor, dejando pendiente la solución de los problemas más elementales para más adelante.

Programación modular La programación modular es una metodología de programación que consiste en organizar un programa en módulos. En la etapa de diseño de un programa se aplica la estrategia de Dividir para Conquistar. En la etapa de implementación, cada uno de los sub-problemas se implementa a través de un módulo. Los lenguajes de programación brindan diferentes mecanismos para implementar módulos. En Pascal los módulos más simples son los procedimientos y funciones.

Problema: Dibujar esta figura 1. Dibujar el círculo 2. Dibujar el triángulo 1. Dibujar las dos líneas diagonales 2. Dibujar la línea horizontal 3. Dibujar otras dos líneas diagonales Dibujar figura Dibujar círculo Dibujar triángulo Dibujar líneas diagonales Dibujar líneas diagonales Dibujar línea horizontal En realidad resuelven el mismo sub-problema

Dibujar figura Dibujar círculo Dibujar triángulo Dibujar líneas diagonales Dibujar líneas diagonales Dibujar línea horizontal En realidad resuelven el mismo sub-problema Dibujar círculo, dibujar líneas diagonales y dibujar línea horizontal son acciones primitivas que se implementan como subprogramas.

program dibujo; procedure dibujacirculo; writeln(' * '); writeln(' * * '); writeln(' * '); procedure dibujadiagonales; writeln(' /\ '); writeln(' / \ '); writeln('/ \'); Programa Principal procedure dibujalinea; writeln(' '); dibujacirculo; dibujadiagonales; dibujalinea; dibujadiagonales; readln; end. Subprogramas

Bloques de código que llevan a cabo una tarea concreta (resuelven un sub-problema, no necesariamente es un bucle) Se crea una nueva primitiva Tienen un propósito bien definido. Permiten reutilizar código de manera sencilla y segura Pueden ser usados más de una vez en el programa principal sin necesidad de reescribir todo (o copiarpegar). Ayudan a que el código del programa principal sea: Más Legible: Resulta más sencillo leer sólo el nombre del subprograma que todo su código. Más Ordenado: Cada subprograma ocupa un lugar concreto dentro de todo el código. 4.9

program dibujosinprimitivas; writeln(' * '); writeln(' * * '); writeln(' * '); writeln(' /\ '); writeln(' / \ '); end. writeln('/ \'); writeln(' '); writeln(' /\ '); writeln(' / \ '); writeln('/ \');

Hay que distinguir entre la declaración y la invocación de subprogramas. La declaración sirve para definir el subprograma La invocación sirve para usar el subprograma dentro del programa principal (o de otro subprograma). Hasta ahora, habíamos invocado procedimientos y funciones predefinidas. Hoy vamos a aprender a definirlos!

program dibujo; procedure dibujacirculo; writeln(' * '); writeln(' * * '); writeln(' * '); procedure dibujadiagonales; writeln(' /\ '); writeln(' / \ '); writeln('/ \'); procedure dibujalinea; writeln(' '); Declaraciones Invocaciones dibujacirculo; dibujadiagonales; dibujalinea; dibujadiagonales; readln; end.

program dibujo; var i: integer; procedure dibujacirculo; writeln(' * '); writeln(' * * '); writeln(' * '); procedure dibujadiagonales; writeln(' /\ '); writeln(' / \ '); writeln('/ \'); procedure dibujalinea; writeln(' '); readln; end. Declaraciones for i:=1 to 3 do dibujacirculo; dibujacirculo; dibujadiagonales; dibujalinea; Y cómo quedaría este programa sin primitivas? Invocaciones

En Pascal, los subprogramas (primitivas) son implementados mediante procedimientos o funciones. Procedimientos predefinidos: write, writeln, read, readln Funciones predefinidas: sqr, abs, chr, ord, eof, eoln FUNCION La invocación se realiza desde una expresión. En general constituye un cálculo numérico o la determinación de un valor de verdad Program p; var n: integer; writeln( Ingrese un número: ); readln(n); if (abs(n)=n) then writeln( El numero es positivo. ) else writeln( El numero es negativo. ); end. PROCEDIMIENTO La invocación constituye en sí misma una instrucción.

Un programa en Pascal puede incluir procedimientos y funciones definidos por el programador. En la declaración se establece su nombre y la lista de parámetros (datos que se intercambian con el exterior). Cuando un procedimiento o función ha sido declarado puede ser usado mediante una instrucción de invocación.

Datos locales Variables y constantes declaradas y usadas solamente dentro del subprograma Datos intercambiados con el exterior (parámetros) Datos de entrada y datos de salida Datos de entrada Datos locales Datos de salida Parámetros

FUNCIÓN: subprograma con un único dato de salida de tipo simple, cuyo resultado es utilizado en el contexto de una expresión. Datos de entrada Datos locales Parámetros UN Dato de salida entero, real, lógico o caracter

Una función (predefinida o definida por el programador) se caracteriza porque se invoca desde una expresión. Definiremos funciones que pueden ser invocadas desde expresiones aritméticas, lógicas o de caracter. Tienen un único dato de salida, de un tipo simple.

Una función es una instrucción compuesta que tiene un nombre, puede tener parámetros, puede contener declaraciones y debe retornar un único valor de un tipo simple. Algoritmo minimo DE: n, m {enteros} DS: minimo {entero} Comienzo Si (n<m) entonces minimo<- n sino minimo<-m Fin Datos de entrada Datos locales Dato de salida Tipo: entero

El nombre la función es minimo. Los parámetros de la función son dos enteros n y m. El resultado es de tipo integer y se liga a través de una asignación usando el nombre de la función. function minimo (n, m: integer): integer; if (n < m) then minimo := n else minimo := m Representa al Dato de salida Siempre tiene que haber al menos una asignación donde se establece el valor del nombre de la función

program pruebamin; var n1, n2, min: integer; function minimo(n, m: integer): integer; if (n < m) then minimo := n else minimo := m write ( Ingrese dos números ); readln (n1,n2); min := minimo(n1, n2); writeln ( El minimo es,min); end. Por el momento, el nombre de la función solo podrá aparecer del lado izquierdo de una asignación (en el bloque ejecutable de la misma). writeln( El minimo es, minimo(n1, n2));

program pruebamin; var n1, n2, min: integer; Parámetros formales function minimo (n, m: integer): integer; if (n < m) then minimo := n else minimo := m end. n y m son los parámetros formales de la función, los datos que la función va a utilizar para computar el resultado. EN LA DEFINICION DE LA FUNCION, el nombre funciona como una variable del tipo de la función que se usa SOLAMENTE del lado izquierdo de una asignación (por ahora) para almacenar el dato de salida.

program pruebamin; var n1,n2,min : integer; function minimo(n, m: integer): integer; if (n < m) then minimo := n else minimo := m end. Cuando en la parte izquierda de una asignación aparece el nombre de la función, estamos indicando cuál va a ser el resultado de computar la función.

Bloque ejecutable program pruebamin; var n1, n2, min: integer; function minimo ( n, m : integer): integer; min := minimo( n1, n2 ); end. En la declaración Parámetros formales Parámetros reales Datos de entrada En la invocación En el bloque ejecutable del programa principal invocamos a la función a través de su nombre. n1 y n2 son los parámetros reales de la función. Los parámetros formales y reales tienen que coincidir en tipo, orden y número.

Problema: Leer un archivo de tipo text conteniendo una secuencia pares de números enteros y mostrar por pantalla el mínimo de cada par. Se asume que en el archivo se escribieron dos números enteros por línea. 2 40 21 2

program minimosecuencia; var f: text; n1, n2: integer; assign (f, archivos\paresent.txt ); reset(f); while not eof(f) do readln(f, n1, n2); writeln(minimo(n1, n2)); close(f); end. Esta primitiva solo queda definida para ser usada (invocada) dentro de este programa. No puede usarse desde otro programa (para eso están las unidades que no se ven en esta materia).

Problema: Determinar si un caracter dado es una vocal minúscula. function esvocalmin(car:char): boolean; if (car = a or car = e or car = i or car = o or car = u ) esvocalmin := TRUE; Si la letra no es vocal minúscula, la función no retorna ningún resultado!!! Definición de funciones: El nombre de la función aparece por lo menos dos veces, en el encabezamiento (definición) y a la izquierda de al menos una asignación.

Problema: Determinar si un caracter dado es una vocal minúscula. function esvocalmin(car:char): boolean; if (car = a or car = e or car = i or car = o or car = u ) esvocalmin := TRUE else esvocalmin := FALSE;

Problema: Determinar si un caracter dado es una vocal minúscula. function esvocalmin(car:char): boolean; esvocalmin := car = a or car = e or car = i or car = o or car = u ; car in [ a, e, í, o, u ]; Definición de funciones: El nombre de la función aparece por lo menos dos veces, en el encabezamiento (definición) y a la izquierda de al menos una asignación.

La variable car de tipo char es el parámetro formal de la función. Cuando la función se invoque debe hacerse con un parámetro real de tipo char. La función computa un resultado de tipo boolean. La invocación debe aparecer en un contexto que requiera un valor de tipo boolean. Por ejemplo en la expresión lógica de un while o de un if.

Problema: Leer dos números enteros y determinar si ambos tienen igual cantidad de dígitos. Primitiva: Contar la cantidad de dígitos de un número entero n. Algoritmo cantdigitos DE: n {entero} DS: cantdigitos {entero} Comienzo cantdigitos<-0 repetir mientras (n<>0) hacer n<-n div 10 cantdigitos<- cantdigitos+1 Fin EN LA DEFINICION DE LA FUNCION, su nombre funciona como una variable del tipo de la función que se usa SOLAMENTE del lado izquierdo de una asignación (por ahora) para almacenar el dato de salida.

function cantdigitos( num : integer ): integer; var contador: integer; contador := 0; while (num<>0) do contador := contador + 1; num := num div 10; cantdigitos := contador; Variable local: almacena temporalmente el dato de salida Por ahora, el dato de salida se guarda en una variable local y se asigna al nombre de la función solamente al final de la misma. Observemos que hemos usado una variable auxiliar para el contador y al terminar el procesamiento de la secuencia asignamos la variable auxiliar al nombre la función.

program igualcantdigitos; var n1, n2: integer; function cantdigitos( num : integer): integer; Parámetros reales Parámetro formal write ( Ingrese dos números enteros ); readln(n1, n2); if (cantdigitos(n1)=cantdigitos(n2)) then writeln ( Ambos nros tienen = cant de digitos ) else writeln( Los nros no tiene = cant de digitos ); end. Cuando la función cantdigitos termina, tanto n1 como n2 conservan su valor

Problema: Leer de un archivo enteros.txt una secuencia de números enteros y mostrar en consola cada número, seguido de su cantidad de dígitos. Al final debe mostrar la cantidad total de números leídos y la mayor cantidad de dígitos encontrada. 12 2 134 21 5 <eof> 12 2 2 1 134 3 21 2 5 1 Total Nros: 5 Mayor cant digitos: 3

program secuenciaenteros;

while not eof(fent) do read(fent, n); cantdig:= cantdigitos(n); writeln(n, ' ', cantdig); if (cantdig > max) then max := cantdig; cantnum := cantnum + 1; Realizo la invocación UNA UNICA VEZ writeln ('La cantidad de números es ', cantnum); writeln ('La cantidad máxima de digitos es ', max); end.

program secuenciaenteros; var n, cantdig, cantnum, max: integer; fent: text; assign(fent, 'c:\archivos\enteros.txt'); reset(fent); max:=0; cantnum:=0; close(fent); end.

Errores De compilación En el bloque ejecutable del programa, usar la variable contador que esta definida dentro de la función. De aplicación En el cuerpo de la función, utilizar en expresiones el nombre de la función cantdigitos en lugar de usar la variable auxiliar contador (ya que el objetivo no es realizar una invocación). No asignar un valor a cantdigitos como resultado de la función.

Problema: Determinar si un caracter dado es una vocal minúscula. function esvocalmin(car:char): boolean; if (car = a or car = e or car = i or car = o or car = u ) esvocalmin := TRUE else esvocalmin := FALSE;

Problema: Determinar si un caracter dado es una vocal minúscula. function esvocalmin(car:char): boolean; esvocalmin := car = a or car = e or car = i or car = o or car = u ; car in [ a, e, í, o, u ]; Definición de funciones: El nombre de la función aparece por lo menos dos veces, en el encabezamiento (definición) y a la izquierda de al menos una asignación.

Problema: Determinar si un caracter dado es una letra minúscula. function esminuscula(car:char) : boolean; if (car >= a ) and (car <= z ) then esminuscula := true else esminuscula := false;

Problema: Determinar si un caracter dado es una consonante minúscula. function esconsonantemin(car: char): boolean; if (esminuscula(car) and not (esvocalmin(car)) then esconsonantemin := true else esconsonantemin:= false; esconsonantemin := esminuscula(car) and not (esvocalmin(car);

function esvocalmin(car: char): boolean; if (car = a ) or (car = e ) or (car = i ) or (car = o ) or (car = u ) then esvocalmin := true else esvocalmin := false; function esminuscula(car: char): boolean; if (car >= a ) and (car <= z ) then esminuscula := true else esminuscula := false; function esconsonantemin(car: char): boolean; if (esminuscula(car)) and not (esvocalmin(car)) then esconsonantemin := true else esconsonantemin:= false; Quedan definidas 3 primitivas: esvocalmin(char) boolean esminuscula(char) boolean esconsonantemin(char) boolean

Problema: Leer una secuencia de caracteres terminada en punto y contar la cantidad de vocales minúsculas, consonantes minúsculas y otros caracteres que contiene la secuencia.

contv := 0; contc := 0; conto := 0; fin:=false; write('ingrese una frase terminada en punto '); while (fin=false) do read(ch); if (ch=. ) then fin:=true else if esvocalmin(ch) then contv:= contv+1 else if esconsonantemin(ch) then contc := contc + 1 else conto := conto + 1 // mostrar los resultados

program secuencia; contv := 0; contc := 0; conto := 0; fin:=false; write('ingrese una frase terminada en punto '); while (fin=false) do read(ch); if (ch=. ) then fin:=true else if esvocalmin(ch) then contv:= contv+1 else if esconsonantemin(ch) then contc := contc + 1 else conto := conto + 1 // mostrar los resultados end.

program secuencia; var ch: char; fin: boolean; contv, contc, conto: integer;... // mostrar los resultados writeln ('Vocales ', contv); writeln ('Consonantes ', contc); writeln ('Otros Caracteres ', conto); end.

PROCEDIMIENTOS Pueden tener desde 0 hasta varios datos de salida. procedure NOMBRE(..); procedure NOMBRE(datos de entrada y de salida); var {variables locales};

Procedimientos Un procedimiento es una instrucción compuesta que tiene un nombre, puede contener declaraciones, se comunica con su entorno a través de parámetros y es invocado por una instrucción. Pascal incluye algunos procedimientos predefinidos como read, readln, write, writeln, assign, reset, rewrite, etc. El programador puede definir nuevos procedimientos y usarlos tal como si hubieran sido provistos por el lenguaje. Puede tener desde 0 hasta cualquier cantidad de datos de salida.

program dibujo; procedure dibujacirculo; writeln(' * '); writeln(' * * '); writeln(' * '); procedure dibujadiagonales; writeln(' /\ '); writeln(' / \ '); writeln('/ \'); Las tres primitivas: - No tienen datos de entrada. - No tienen datos de salida. procedure dibujalinea; writeln(' '); dibujacirculo; dibujadiagonales; dibujalinea; dibujadiagonales; readln; end.

Procedimientos En el ejemplo anterior los procedimientos no tenían parámetros. Problema: Dibujar una pirámide como la que se muestra a continuación, donde la cantidad de filas depende de un entero n. 1 22 333 4444 procedure dibujapiramide(filas: integer); var i, j: integer; for i:=1 to filas do for j:=1 to i do write(i); writeln; - Un dato de entrada. - Sin datos de salida.

Procedimientos program piramide; var n: integer; procedure dibujapiramide(filas: integer); var i, j: integer; for i:=1 to filas do Variables locales for j:=1 to i do write(i); writeln; Dato de entrada = parámetro por valor Se obtiene el valor de n (parámetro real) y ese valor es asignado a filas (parámetro formal). writeln('ingrese la cantidad de filas de la piramide: '); readln(n); dibujapiramide(n); end.

Procedimientos Problema: A partir de un archivo de enteros MAYORES QUE CERO, se desea mostrar para cada uno de ellos, el menor y el mayor de sus dígitos. Sub-problema: obtener el mayor y menor dígitos de un número. Archivo 10 251 592 9 7264 <eof> Pantalla

TOP-DOWN Procedimientos Dato de entrada parámetro por valor Datos de salida parámetros por variable Dos datos de salida

Procedimientos Parámetros formales Parámetros reales

Procedimientos Primitiva P DE: n (entero), m (real) DS: a (entero), b y c (reales), d (lógico) Cuatro datos de salida Procedure P (n: integer; m: real; var a: integer; var b, c: real; var d: boolean); Por valor Por referencia Parámetros formales

Procedimientos PARAMETROS Formales Por valor (datos de entrada) Por referencia (datos de entrada-salida) Reales

Procedimientos Se podría implementar la primitiva que cuenta la cantidad de dígitos de un número, con un procedimiento? Cuál de las dos opciones es más adecuada? De qué depende la decisión cuando las dos opciones son factibles? FUNCION o PROCEDIMIENTO?????

Función o procedimiento? No tiene datos de salida: Procedimiento Tiene dos o más datos de salida: Procedimiento Tiene un dato de salida de un tipo estructurado: Procedimiento Tiene un único dato de salida de un tipo simple (número, lógico o char) REFLEXIONAR SOBRE CÓMO VA A SER USADA LA PRIMITIVA! Y si tiene efectos colaterales! Lo veremos la próxima clase.