Módulo 8: Primitivas en Pascal Tecnologías en la Educación Matemática Dr. Carlos Gonzalía DCIC - UNS Técnologías en la educación matemática Dr. Carlos Gonzalía 1 de
Copyright Copyright 2010, 2012 M. Capobianco, C. Gonzalía Se asegura la libertad para copiar, distribuir y modificar este documento de acuerdo a los términos de la GNU Free Documentation License, Versión 1.2 o cualquiera posterior publicada por la Free Software Foundation, sin secciones invariantes ni textos de cubierta delantera o trasera. Una copia de esta licencia está siempre disponible en la página http://www.gnu.org/copyleft/fdl.html. Técnologías en la educación matemática Dr. Carlos Gonzalía 2
Primitivas en Pascal Cuando dividimos el problema en subproblemas, nos quedan varios algoritmos que trabajan en conjunto. Potencia Cubo Suma Técnologías en la educación matemática Dr. Carlos Gonzalía 3
Primitivas en Pascal En Pascal podemos escribir estos algoritmos en bloques separados. Program Serie; Potencia Cubo Subprogramas Suma Begin... End. Técnologías en la educación matemática Dr. Carlos Gonzalía 4
Subprogramas Existen dos tipos de subprogramas en Pascal, las funciones y los procedimientos. Dijimos que 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 cierto número de datos de entrada pero un único dato de salida. Se utiliza la palabra reservada FUNCTION Técnologías en la educación matemática Dr. Carlos Gonzalía 5
Ejemplo Algoritmo Potencia ALGORITMO Potencia D. Entrada : Base, Exp {naturales} D. Salida : Pot {Base Exp } COMIENZO REPETIR Exp VECES Pot Pot Base FIN ALGORITMO Técnologías en la educación matemática Dr. Carlos Gonzalía 6
Ejemplo Función Potencia 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; Técnologías en la educación matemática Dr. Carlos Gonzalía 7
Ejemplo Función Potencia Parámetros Tipo de Resultado FUNCTION Potencia (Base,Exponente:integer): integer; VAR aux,p: integer; BEGIN variables locales P := 1; FOR aux:= 1 TO Exponente DO P := P * Base; Potencia:= P; END; asignación del resultado Técnologías en la educación matemática Dr. Carlos Gonzalía 8
Funciones en Pascal Toda función tiene: un nombre cero o más parámetros tipo del resultado posiblemente variables locales sentencias asignación del valor de salida al nombre de la función Para llamar (invocar) 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 Técnologías en la educación matemática Dr. Carlos Gonzalía 9
Ejercicios Escribir una función Cuadrado que dado un número real R devuelva el cuadrado de R. Escribir una función CuartaPot que devuelva R a la 4ta. potencia. Técnologías en la educación matemática Dr. Carlos Gonzalía 10
Ejercicios Escribir una función Cuadrado que dado un número real R devuelva el cuadrado de R. FUNCTION Cuadrado ( R : Real ) : Real ; BEGIN Cuadrado := R * R ; END ; Escribir una función CuartaPot que devuelva R a la 4ta. potencia. FUNCTION CuartaPot ( R : Real ) : Real; BEGIN CuartPot := Cuadrado(R) * Cuadrado(R) ; END ; Técnologías en la educación matemática Dr. Carlos Gonzalía 11
Ejercicios Escriba una función en Pascal que dado un número N, determine si es o no un número par. Técnologías en la educación matemática Dr. Carlos Gonzalía 12
Ejercicios Escriba una función en Pascal que dado un número N, determine si es o no un número par. FUNCTION EsPar (N :Integer ):Boolean ; var aux:boolean; BEGIN IF N mod 2 = 0 THEN aux := TRUE ELSE aux := FALSE; EsPar := aux; END ; FUNCTION EsPar (N :Integer ):Boolean ; BEGIN EsPar := ( (N mod 2)=0 ); END ; Técnologías en la educación matemática Dr. Carlos Gonzalía 13
Ejercicios Realice los siguientes ejercicios. Recuerde dividir el problema en subproblemas si es necesario. 1) Escriba como función de Pascal los ejercicios algorítmicos realizados anteriormente. 2) Escriba una función en Pascal que dado un número N, indique si N es o no número primo. 3) Escriba una función en Pascal que dado un número N y un dígito d, indique si d está presente en N. 4) Escriba una función en Pascal que dados dos números N y M indique si existe algún número primo entre N y M. Técnologías en la educación matemática Dr. Carlos Gonzalía 14
Ejercicios Realice los siguientes ejercicios. Recuerde dividir el problema en subproblemas si es necesario. 1. Escriba una función en Pascal que dados dos números M y N indique si la suma de los dígitos de M es igual al producto de los dígitos de N. 2. Escriba una función en Pascal que dados cuatro números N,M,P y Q calcule el promedio de los dígitos de cada uno de ellos y devuelva el mayor. Técnologías en la educación matemática Dr. Carlos Gonzalía 15
Ejercicio Realice una primitiva para multiplicar fracciones. ALGORITMO MultiplicarFracciones DATOS DE ENTRADA: Num1,Den1,Num2,Den2 DATOS DE SALIDA : NumRes, DenRes COMIENZO NumRes Num1 * Num2 DenRes Den1 * Den2 FIN ALGORITMO Este algoritmo no puede implementarse mediante una (? qué FUNCION ( por Técnologías en la educación matemática Dr. Carlos Gonzalía 16
Procedimientos en Pascal Si un algoritmo tiene varios datos de salida, vimos que se podía invocarlo indicando su nombre y los datos de entrada y los de salida. En Pascal se pueden construir procedimientos que tienen un número cualquiera de datos de entrada (cero o más), y un número cualquiera de datos de salida (cero o más). Se utiliza la palabra reservada PROCEDURE Técnologías en la educación matemática Dr. Carlos Gonzalía 17
Procedimientos en Pascal ALGORITMO MultiplicarFracciones DATOS DE ENTRADA: Num1, Den1, Num2, Den2 DATOS DE SALIDA : NumRes, DenRes COMIENZO NumRes Num1 * Num2 DenRes Den1 * Den2 FIN ALGORITMO Técnologías en la educación matemática Dr. Carlos Gonzalía 18
Procedimientos en Pascal PROCEDURE MultiplicarFracciones ( Num1, Den1, Num2, Den2: INTEGER; VAR NumRes, DenRes: INTEGER); BEGIN NumRes := Num1 * Num2; DenRes := Den1 * Den2; END; Técnologías en la educación matemática Dr. Carlos Gonzalía 19
Procedimientos en Pascal PROCEDURE MultiplicarFracciones ( Num1, Den1, Num2, Den2: INTEGER; VAR NumRes,DenRes: INTEGER); BEGIN NumRes := Num1 * Num2; DenRes := Den1 * Den2; END; Parámetros La llamada a un PROCEDURE se realiza como una sentencia: MultiplicarFracciones ( 1, 4, 3, 5, Num, Den); Técnologías en la educación matemática Dr. Carlos Gonzalía 20
Programa y procedimiento PROGRAM Prueba; VAR N1, D1, N2, D2, Nresul, Dresul :Integer; PROCEDURE MultiplicarFracciones (Num1, Den1, Num2, Den2: Integer; VAR NumRes, DenRes: Integer); BEGIN... END; BEGIN write( Ingrese dos fracciones: ); readln(n1,d1,n2,d2); MultiplicarFracciones (N1,D1,N2,D2,Nresul,Dresul); writeln( Fraccion resultado:,nresul, /,DResul); END. Técnologías en la educación matemática Dr. Carlos Gonzalía 21
Programa y procedimiento PROGRAM Prueba; VAR N1,D1,N2,D2, Nresul,Dresul :Integer; PROCEDURE MultiplicarFracciones (Num1,Den1,Num2,Den2:Integer; VAR NumRes,DenRes:Integer); BEGIN... Parámetros Formales END; BEGIN write( Ingrese dos fracciones: ); Parámetros Efectivos readln(n1,d1,n2,d2); MultiplicarFracciones (N1,D1,N2,D2,Nresul,Dresul); writeln( Fraccion resultado:,nresul, /,DResul); END. Técnologías en la educación matemática Dr. Carlos Gonzalía 22
Ejercicios 1. Escriba un procedimiento en Pascal que dados un número M y un dígito d, imprima por pantalla si el dígito d está en M. Por ejemplo, si N=5432 y d=4 debe imprimir El dígito 4 está en 5432. Si N=7235 y d=1 debe imprimir El dígito 1 no está en 7235 2. Escriba un procedimiento en Pascal que permita ingresar por teclado dos números N y M y un dígito d, e imprima para todos los números entre N y M, si el dígito d se encuentra en ellos, usando el procedimiento anterior. Técnologías en la educación matemática Dr. Carlos Gonzalía 23
Parámetros Parámetros formales: (formal parameters) son los que figuran en la cabecera del procedimiento PROCEDURE CUANTOS DIGITOS (NUM, DIGITO:INTEGER; VAR CANTIDAD: INTEGER); Parámetros efectivos (o actuales): (actual parameters) son los que figuran en la llamada al procedimiento NUMERO:= 32342; CUANTOS DIGITOS(NUMERO, 3, CANTIDAD); WRITELN(CANTIDAD); Técnologías en la educación matemática Dr. Carlos Gonzalía 24
Invocación a procedimientos Un procedimiento se identifica por su nombre, y sus parámetros formales (datos de entrada y de salida). Para usar (invocar o llamar) un procedimiento como una primitiva : debe invocarse su nombre. deben indicarse los parámetros efectivos, los cuales deben coincidir en cantidad y tipo con los parámetros formales. Técnologías en la educación matemática Dr. Carlos Gonzalía 25
Invocación a procedimientos Los parámetros formales antecedidos por la palabra VAR se denominan parámetros por variable o parámetros por referencia. Son datos de entrada-salida Los parámetros formales que no están antecedidos por la palabra VAR se denominan parámetros por valor. Son datos de entrada. Técnologías en la educación matemática Dr. Carlos Gonzalía 26
Parámetros formales Los parámetros formales definen la interfaz del subprograma: aquellos datos que ingresarán al subprograma y aquellos que nos devolverá el subprograma. Procedimiento Parámetros formales Parámetros por valor Parámetros por referencia ( variable ( o por Técnologías en la educación matemática Dr. Carlos Gonzalía 27
Parámetros formales Parámetros por valor PROCEDURE CUANTO_SDIGITOS (NUM, DIGITO:INTEGER; VAR CANTIDAD: INTEGER); Parámetros por referencia Técnologías en la educación matemática Dr. Carlos Gonzalía 28
Parámetros efectivos Los parámetros efectivos son aquellos que figuran en la invocación al procedimiento PROCEDURE CUANTOSDIGITOS ( NUM, DIGITO:INTEGER; VAR CANTIDAD: INTEGER); CUANTOSDIGITOS( N, Dig, CantDig ) Parámetros efectivos Técnologías en la educación matemática Dr. Carlos Gonzalía 29
Parámetros efectivos CUANTOSDIGITOS( N,Dig, CantDig ) CuantosDigitos 4341 4 2 NUM DIGITO CANTIDAD N Dig CantDig 2 Técnologías en la educación matemática Dr. Carlos Gonzalía 30
Parámetros efectivos Si el parámetro formal correspondiente es por valor entonces el parámetro efectivo puede ser: un valor una expresión una variable con valor CUANTOSDIGITOS( N, Dig, CantDig ) CUANTOSDIGITOS( 12232, Dig, CantDig ) CUANTOSDIGITOS( 12+43+Aux, 4, CantDig ) Técnologías en la educación matemática Dr. Carlos Gonzalía 31
Parámetros efectivos Si el parámetro formal es por referencia, entonces debe ser llamado UNICAMENTE con una variable en ese lugar... CUANTOSDIGITOS( A, B, CantDig ) CUANTOSDIGITOS( A, B, 23 ) Técnologías en la educación matemática Dr. Carlos Gonzalía 32
Resumen de Parámetros Formales Por valor : <nombre>: <tipo> Por referencia: VAR <nombre>: <tipo> Parámetros si corresponde a un parámetro formal por valor, puede ser... un valor una expresión una variable Efectivos si corresponde a un parám. formal por referencia, debe ser... una variable Técnologías en la educación matemática Dr. Carlos Gonzalía 33
Invocaciones VAR N1, D1, N2, D2, NResul, DResul: Integer; PROCEDURE MultiplicarFracciones (Num1, Den1, Num2, Den2: Integer; VAR NumRes, DenRes: Integer); BEGIN... END; BEGIN... MultiplicarFracciones (N1,D1,N2,D2,Nresul,Dresul);... MultiplicarFracciones (3,4,2,5,Nresul,Dresul);... MultiplicarFracciones (2*1,2+2,2,4,Nresul,Dresul);... END Técnologías en la educación matemática Dr. Carlos Gonzalía 34
Ejercicios Escriba un procedimiento en Pascal que dados dos números M y N, intercambie sus valores. Escriba un procedimiento en Pascal que dados tres números M,N y P, intercambie sus valores de la siguiente forma: M quedará con el valor de P, P quedará con el valor de N y N quedará con el valor de M. Escriba un procedimiento en Pascal que devuelva la cantidad de números primos entre 1 y 1000 y el último primo encontrado. Técnologías en la educación matemática Dr. Carlos Gonzalía 35
Procedimientos y parámetros Puede haber procedimientos sin parámetros? Ejemplo PROCEDURE PAUSA; Puede haber procedimientos con solo datos de entrada? PROCEDURE LINEAS_EN_BLANCO(CANTIDAD:INTEGER); Puede haber procedimientos con sólo datos de salida? PROCEDURE LEER_LETRA(VAR L: CHAR); Puede haber procedimientos con un solo dato de salida? PROCEDURE CUANTAS_VECES(NUM,DIGITO:INTEGER VAR CUANTOS:INTEGER); Técnologías en la educación matemática Dr. Carlos Gonzalía 36
PROGRAM MIPROGRAMA CONST... TYPE... VAR... PROCEDURE Proc1 CONST... TYPE... VAR... BEGIN... END; FUNCTION Fun1 CONST... TYPE... VAR BEGIN... END; BEGIN... END. Bloques en Pascal No hay limitación en la cantidad de bloques. En Pascal, un bloque puede a su vez tener otros bloques Un procedimiento o función puede incluir una declaración interna de otro procedimiento o función Se denominan bloques anidados Técnologías en la educación matemática Dr. Carlos Gonzalía 37
PROGRAM MIPROGRAMA CONST... TYPE... VAR... PROCEDURE Proc1 FUNCTION Fun1 CONST... TYPE... VAR BEGIN... END; BEGIN... END; BEGIN... END. Bloques en Pascal Como los bloques están anidados, sólo pueden usarse datos y subprogramas declarados en el mismo bloque, o en uno que lo contenga. En el ejemplo, desde MiPrograma no puede invocarse a Fun1. Puede invocarse a Proc1 porque es declarado en ese bloque. Desde Proc1 puede invocarse a Fun1 porque es declarado en ese bloque Técnologías en la educación matemática Dr. Carlos Gonzalía 38
PROGRAM MIPROGRAMA PROCEDURE Proc1 FUNCTION Fun1 BEGIN... END; BEGIN... END; FUNCTION Fun2 BEGIN... END; BEGIN... END. Nivel 1 Nivel 2 Nivel 1 Nivel 0 Bloques en Pascal Podemos enumerar el nivel de profundidad de los bloques. Desde el nivel 0 (el programa principal) puede usarse aquello declarado en el nivel 0 Desde el nivel 1 (el procedimiento proc1) puede usarse aquello declarado en el nivel 1 o nivel 0 Desde el nivel 2 (la función fun1) puede usarse aquello declarado en el nivel 2, en el nivel 1 o en el nivel 0. Técnologías en la educación matemática Dr. Carlos Gonzalía 39