Departamento de Informática Universidad Técnica Federico Santa María Tema 7: Subprogramas...

22
Departamento de Informática Universidad Técnica Federico Santa María Tema 7 : Subprogramas Programación de Computadores (IWI-131) Luis Pizarro Q. [email protected] www.labmc.inf.utfsm.cl/~lpizarro/IWI-131

Transcript of Departamento de Informática Universidad Técnica Federico Santa María Tema 7: Subprogramas...

Page 1: Departamento de Informática Universidad Técnica Federico Santa María Tema 7: Subprogramas Programación de Computadores (IWI-131) Luis Pizarro Q. Luis.Pizarro@inf.utfsm.cl.

Departamento de Informática

Universidad Técnica Federico Santa María

Tema 7:Subprogramas

Programación de Computadores (IWI-131)

Luis Pizarro Q.

[email protected]

www.labmc.inf.utfsm.cl/~lpizarro/IWI-131

Page 2: Departamento de Informática Universidad Técnica Federico Santa María Tema 7: Subprogramas Programación de Computadores (IWI-131) Luis Pizarro Q. Luis.Pizarro@inf.utfsm.cl.

Luis Pizarro Q. ©20032

Subprogramas Un programa con cierta complejidad

puede descomponerse en varios subprogramas de menor dificultad.

Estos subprogramas pueden ser de 2 tipos:

- Procedimientos

- Funciones El uso de procedimientos y funciones

ayuda a organizar y simplificar programas largos y complejos.

Page 3: Departamento de Informática Universidad Técnica Federico Santa María Tema 7: Subprogramas Programación de Computadores (IWI-131) Luis Pizarro Q. Luis.Pizarro@inf.utfsm.cl.

Luis Pizarro Q. ©20033

Entrada

Procesamiento

Salida

PROGRAM Estudio_Cilindro;CONST

pi = 3.14159;VAR

radio, altura, sup, vol: REAL;BEGIN

WRITELN(‘Ingrese radio y altura: ’);READLN(radio, altura);sup:=2*pi*radio*altura + 2*pi*SQR(radio);vol:=pi*SQR(radio)*altura;WRITELN(‘La superficie es: ’,sup:8:2);WRITELN(‘El volumen es: ’,vol:8:2)

END.

Ejemplo de Subprogramas Recordemos el programa que calcula la superficie y el

volumen de un cilindro. Podemos descomponerlo en varios subprogramas.

Subprograma 1

Subprograma 2

Subprograma 3

Page 4: Departamento de Informática Universidad Técnica Federico Santa María Tema 7: Subprogramas Programación de Computadores (IWI-131) Luis Pizarro Q. Luis.Pizarro@inf.utfsm.cl.

Luis Pizarro Q. ©20034

Estructura de un programa PascalPROGRAM nombre_del_programa;

CONST

{aquí se declaran las costantes}

VAR

{aquí se declaran las variables}

TYPE

{aquí se declaran las variables tipo}

PROCEDURE (FUNCTION)

{aquí se declaran procedimientos y/o funciones}

BEGIN

{aquí se escribe el cuerpo del programa}

END.

Page 5: Departamento de Informática Universidad Técnica Federico Santa María Tema 7: Subprogramas Programación de Computadores (IWI-131) Luis Pizarro Q. Luis.Pizarro@inf.utfsm.cl.

Luis Pizarro Q. ©20035

Subprogramas

Procedimiento: subprograma que realiza una tarea específica. Puede recibir cero o más valores del programa que lo llama y devuelve cero o más valores a éste.

Función: subprograma que puede recibir cero o más valores del programa que lo llama y devuelve un único resultado al programa que lo llama.

Page 6: Departamento de Informática Universidad Técnica Federico Santa María Tema 7: Subprogramas Programación de Computadores (IWI-131) Luis Pizarro Q. Luis.Pizarro@inf.utfsm.cl.

Luis Pizarro Q. ©20036

Procedimientos y Funciones Procedimiento

PROGRAM nombre_del_programa;CONST

{constantes}VAR

{Variables GLOBALES}PROCEDURE nom_proc(v1: tipo1; v2: tipo2; ... ; vN: tipoN); VAR

{Variables LOCALES} BEGIN

{Cuerpo del Procedimiento} END;BEGIN

{Cuerpo del Programa}END.

Page 7: Departamento de Informática Universidad Técnica Federico Santa María Tema 7: Subprogramas Programación de Computadores (IWI-131) Luis Pizarro Q. Luis.Pizarro@inf.utfsm.cl.

Luis Pizarro Q. ©20037

Procedimientos y Funciones Función

PROGRAM nombre_del_programa;CONST

{Constantes}VAR

{Variables GLOBALES}FUNCTION nom_func(v1: tipo1; v2: tipo2; ... ; vN: tipoN): tipo_a_devolver; VAR

{Variables LOCALES} BEGIN

{Cuerpo del Procedimiento} END;BEGIN

{Cuerpo del Programa}END.

Page 8: Departamento de Informática Universidad Técnica Federico Santa María Tema 7: Subprogramas Programación de Computadores (IWI-131) Luis Pizarro Q. Luis.Pizarro@inf.utfsm.cl.

Luis Pizarro Q. ©20038

Procedimientos y Funciones

Variables Globales: se declaran en el programa principal, y pueden ser utilizadas por éste y por todos los subprogramas.

Variables Locales: se declaran en los procedimientos y funciones, y pueden ser utilizadas sólo en los subprogramas en que fueron declaradas.

Page 9: Departamento de Informática Universidad Técnica Federico Santa María Tema 7: Subprogramas Programación de Computadores (IWI-131) Luis Pizarro Q. Luis.Pizarro@inf.utfsm.cl.

Luis Pizarro Q. ©20039

Invocación de un Procedimiento

PROGRAM procedimientos;VAR {variables};

PROCEDURE Proc(lista_de_parametros); { Cuerpo del procedimiento }

BEGIN { Cuerpo Principal } ............. Proc(lista_de_parametros); .............END.

Invocación del procedimiento Proc.

Page 10: Departamento de Informática Universidad Técnica Federico Santa María Tema 7: Subprogramas Programación de Computadores (IWI-131) Luis Pizarro Q. Luis.Pizarro@inf.utfsm.cl.

Luis Pizarro Q. ©200310

Invocación de una Función

PROGRAM funciones;VAR x, y: INTEGER;

FUNCTION Fun(lista_de_parametros): INTEGER; { Cuerpo de la función }

BEGIN { Cuerpo Principal } ............. x:= Fun(lista_de_parametros); ............. IF (y+2*Fun(lista_de_parametros)) > 0 THEN ....... .............END.

Se asigna su resultado a una variable del mismo tipo.

Se utiliza su resultado en una expresión válida.

Page 11: Departamento de Informática Universidad Técnica Federico Santa María Tema 7: Subprogramas Programación de Computadores (IWI-131) Luis Pizarro Q. Luis.Pizarro@inf.utfsm.cl.

Luis Pizarro Q. ©200311

Procedimientos y Funciones

PROGRAM procedimientos;VAR {variables};FUNCTION A(p1: REAL; p2: BOOLEAN): REAL; { .... Cuerpo del procedimiento A; .... }PROCEDURE B; { .... Cuerpo del procedimiento B; .... Valor := 2*A(2.3,TRUE); }BEGIN ............. B; WRITELN(A(4.0,FALSE)); B; .............END.

Se llama a la función A.

En el cuerpo principal pueden entrelazarse las llamadas a los

procemientos y funciones.

Orden: si los procedimientos (funciones) A y B son definidos dentro del mismo programa, y el procedimiento B invoca al procedimiento A, entonces A debe estar declarado antes que B.

Page 12: Departamento de Informática Universidad Técnica Federico Santa María Tema 7: Subprogramas Programación de Computadores (IWI-131) Luis Pizarro Q. Luis.Pizarro@inf.utfsm.cl.

Luis Pizarro Q. ©200312

PROGRAM Estudio_Cilindro;CONST

pi = 3.14159;VAR

radio, altura, sup, vol: REAL;PROCEDURE entrada; BEGIN

WRITELN(‘Ingrese radio y altura: ’);READLN(radio, altura);

END;PROCEDURE procesamiento; BEGIN

sup:=2*pi*radio*altura + 2*pi*SQR(radio);vol:=pi*SQR(radio)*altura;

END;PROCEDURE salida; BEGIN

WRITELN(‘La superficie es: ’,sup:8:2);WRITELN(‘El volumen es: ’,vol:8:2)

END;BEGIN

entrada;procesamiento;salida;

END.

Ejemplo de Procedimiento

Variables Globales, pueden emplearse en cualquier

procedimiento.

Page 13: Departamento de Informática Universidad Técnica Federico Santa María Tema 7: Subprogramas Programación de Computadores (IWI-131) Luis Pizarro Q. Luis.Pizarro@inf.utfsm.cl.

Luis Pizarro Q. ©200313

Ejemplo de Función

PROGRAM EjemploFuncion;VAR numero: INTEGER;FUNCTION Funcion(n: INTEGER): INTEGER; BEGIN

Funcion:= n MOD 2; END;BEGIN

REPEAT WRITELN(‘Ingrese número: ’); READLN(numero); IF Funcion(numero) = 0 THEN

WRITELN(‘El número ’, numero, ‘ es par’) ELSE

WRITELN(‘El número ’, numero, ‘ es impar’);UNTIL numero = 0

END.

Indicar al usuario si los números que ingresa por pantalla son pares o impares, hasta que ingrese el cero.

Page 14: Departamento de Informática Universidad Técnica Federico Santa María Tema 7: Subprogramas Programación de Computadores (IWI-131) Luis Pizarro Q. Luis.Pizarro@inf.utfsm.cl.

Luis Pizarro Q. ©200314

Parámetros por Valor y por Referencia Parámetros por Valor: estas variables sólo

reciben información. No devuelven valores.

PROGRAM ejemplo;VAR x, y: REAL;PROCEDURE suma(a,b: REAL); VAR aux:REAL; BEGIN

aux := a + b;WRITELN(‘La suma es ’, aux);

END;BEGIN REPEAT

WRITELN(‘Ingrese 2 números: ’);READLN(x, y);suma(x, y);

UNTIL (x=0) OR (y=0)END.

Parámetros por ValorLas variables a y b reciben una copia de los valores de las variables x e y, respectivamente.

Por lo que las variables x e y no sufren modificación.

Page 15: Departamento de Informática Universidad Técnica Federico Santa María Tema 7: Subprogramas Programación de Computadores (IWI-131) Luis Pizarro Q. Luis.Pizarro@inf.utfsm.cl.

Luis Pizarro Q. ©200315

Parámetros por Valor y por Referencia Parámetros por Referencia: estas variables se

utilizan para recibir información y para transmitir valores de vuelta. Se antepone la palabra VAR en la definición de estas variables.

PROGRAM ejemplo;VAR x, y, z: REAL;PROCEDURE mayor(a,b: REAL; VAR max: REAL); BEGIN

max := b;IF a > b THEN max := a;

END;BEGIN REPEAT

WRITELN(‘Ingrese 2 números: ’);READLN(x, y);mayor(x, y, z);WRITELN(‘El mayor es ’, z);

UNTIL (x=0) OR (y=0)END.

Parámetro por Referencia Las variables a y b están definidas por valor. En cambio, la variable max está definida por referencia, la cual no recibe una copia del valor de la variable z, sino que recibe la variable misma, por lo que cualquier cambio que se realice en la variable max se efectúa directamente en la variable z.

Page 16: Departamento de Informática Universidad Técnica Federico Santa María Tema 7: Subprogramas Programación de Computadores (IWI-131) Luis Pizarro Q. Luis.Pizarro@inf.utfsm.cl.

Luis Pizarro Q. ©200316

Ejercicio Utilizando funciones, escriba un programa que tome un número

entero y entregue el dígito en la posición k. Ejemplo, el dígito en la posición 4 del entero 18573 es 8.

PROGRAM Ejercicio;VAR num, pos, valor: INTEGER; FUNCTION digito(n, k: INTEGER): INTEGER; VAR d: INTEGER {para guardar el dígito} i: INTEGER {para contar posiciones} BEGIN

i := 0;REPEAT d := n MOD 10; {devuelve el último dígito} n := n DIV 10; {devuelve la parte entera de la división} i := i + 1;UNTIL (i = k) OR (n = 0)IF i = k THEN digito := dELSE digito := -1;

END;BEGIN

WRITELN(‘Ingrese número: ’);READLN(num);WRITELN(‘Ingrese posición: ’);READLN(pos);valor := digito(num, pos)IF valor = -1 THEN WRITELN(‘Posición fuera de rango’)ELSE WRITELN(‘El dígito en la posición ’,pos, ‘ es ’,valor)

END.

Page 17: Departamento de Informática Universidad Técnica Federico Santa María Tema 7: Subprogramas Programación de Computadores (IWI-131) Luis Pizarro Q. Luis.Pizarro@inf.utfsm.cl.

Luis Pizarro Q. ©200317

Tarea Nº11. Si una cantidad de dinero P se coloca en una cuenta de ahorros para la

que el interés se calcula Q veces por año, entonces la cantidad de intereses ganados después de N años viene dada por la siguiente fórmula (I es el porcentaje del interés decimal):

Cantidad = P * (1 + I/Q)N * Q

Escribir un programa que lea los valores P, I, Q y N y dé como salida los intereses ganados por cada año a lo largo de N años. Se debe utilizar una función que calcule la cantidad de los intereses. El programa debe solicitar los datos de forma apropiada al usuario, etiquetar los valores de salida y escribirse con buen estilo de programación.

Page 18: Departamento de Informática Universidad Técnica Federico Santa María Tema 7: Subprogramas Programación de Computadores (IWI-131) Luis Pizarro Q. Luis.Pizarro@inf.utfsm.cl.

Luis Pizarro Q. ©200318

Tarea Nº12. Escribir un programa para jugar al juego de niños “roca, papel o tijeras”.

Considere dos jugadores, los cuales jugarán un máximo de 11 veces. El programa debe imprimir quien es el ganador en cada juego; al final, la cantidad de juegos ganados por cada jugador, el número de empates y quién es el ganador global.

Considere la lectura de una jugada como un carácter:

R: roca

P: papel

T: tijeras

Page 19: Departamento de Informática Universidad Técnica Federico Santa María Tema 7: Subprogramas Programación de Computadores (IWI-131) Luis Pizarro Q. Luis.Pizarro@inf.utfsm.cl.

Luis Pizarro Q. ©200319

Tarea Nº13. La distancia del punto de caída de un proyectil que es lanzado con un

ángulo A (en radianes) y una velocidad inicial V (en pies/seg), ignorando la resistencia al aire, viene dada por la fórmula:

Distancia = SQR(V) * SIN(2*A) / 32.2

Escribir un programa pascal que implemente un juego en el que el usuario introduce primero la distancia a un objetivo. Luego el usuario introduce el ángulo y la velocidad de lanzamiento del proyectil. Si éste cae dentro de un 10% de la distancia al objetivo, el usuario gana el juego. Si el proyectil no se acerca lo suficiente, se le dice al usuario cuánto se ha alejado el proyectil y se le permite intentarlo de nuevo. Si después de cinco intentos no ha introducido ninguna entrada ganadora, entonces el usuario pierde el juego.

Para simplificar las entradas del usuario; el programa debe permitir que el ángulo sea ingresado en grados. La fórmula para convertir los ángulos en radianes es: Radianes = Grados * PI / 180.

Cada fórmula debe implementarse como una función. El programa debe solicitar las entradas adecuadas al usuario, etiquetar los valores de salida y escribirse con un buen estilo de programación.

Page 20: Departamento de Informática Universidad Técnica Federico Santa María Tema 7: Subprogramas Programación de Computadores (IWI-131) Luis Pizarro Q. Luis.Pizarro@inf.utfsm.cl.

Luis Pizarro Q. ©200320

Tarea Nº14. Implementar un calculador de números romanos. En el Imperio Romano

rara vez se utilizaba la notación sustractiva (tal como que IV significa 4), sino que por facilidad utilizaban la notación adivita (IIII es 4). El programa introducirá dos números romanos y un operador aritmético (+, -, *, /) e imprimirá el resultado de la operación, también como un número romano. Una forma de enfocar el problema es convertir los números romanos a enteros, ejecutar la operación requerida y luego convertir el resultado de nuevo a números romanos para imprimirlos. Por ejemplo, el siguiente puede ser el resultado de una ejecución del programa en un sistema interactivo:

Introduzca el primero número:

MCCXXVI

El primero número es 1226

Introducir el segundo número:

LXVIIII

El segundo número es 69

Introducir la operación aritmética deseada:

+

La suma de MCCXXVI y LXVIIII es MCCLXXXXV (1295)(sigue)

Page 21: Departamento de Informática Universidad Técnica Federico Santa María Tema 7: Subprogramas Programación de Computadores (IWI-131) Luis Pizarro Q. Luis.Pizarro@inf.utfsm.cl.

Luis Pizarro Q. ©200321

Tarea Nº1

4. El programa debe hacerse con buen estilo, comentarios apropiados, identificadores con significado y buena identació. También deben comprobarse los errores de entrada, tales como dígitos u operadores aritméticos no legales y tomar acciones apropiadas cuando se encuentran a éstos. También debe comprobarse que los números están de una forma aditiva pura: los dígitos van seguidos sólo de dígitos del mismo o menor valor.

Entrega: Miércoles 15 de Abril.

(continuación)

Page 22: Departamento de Informática Universidad Técnica Federico Santa María Tema 7: Subprogramas Programación de Computadores (IWI-131) Luis Pizarro Q. Luis.Pizarro@inf.utfsm.cl.

Departamento de Informática

Universidad Técnica Federico Santa María

Tema 7:Subprogramas

Programación de Computadores (IWI-131)

Luis Pizarro Q.

[email protected]

www.labmc.inf.utfsm.cl/~lpizarro/IWI-131