La descarga está en progreso. Por favor, espere

La descarga está en progreso. Por favor, espere

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

Presentaciones similares


Presentación del tema: "Departamento de Informática Universidad Técnica Federico Santa María Tema 7: Subprogramas Programación de Computadores (IWI-131) Luis Pizarro Q."— Transcripción de la presentación:

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 www.labmc.inf.utfsm.cl/~lpizarro/IWI-131

2 Luis Pizarro Q. ©2003 2 Subprogramas n Un programa con cierta complejidad puede descomponerse en varios subprogramas de menor dificultad. n Estos subprogramas pueden ser de 2 tipos: - Procedimientos - Funciones n El uso de procedimientos y funciones ayuda a organizar y simplificar programas largos y complejos.

3 Luis Pizarro Q. ©2003 3 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 n Recordemos el programa que calcula la superficie y el volumen de un cilindro. Podemos descomponerlo en varios subprogramas. Subprograma 1Subprograma 2Subprograma 3

4 Luis Pizarro Q. ©2003 4 Estructura de un programa Pascal PROGRAM 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.

5 Luis Pizarro Q. ©2003 5 Subprogramas n 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. n 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.

6 Luis Pizarro Q. ©2003 6 Procedimientos y Funciones n 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.

7 Luis Pizarro Q. ©2003 7 Procedimientos y Funciones n 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.

8 Luis Pizarro Q. ©2003 8 Procedimientos y Funciones n Variables Globales: se declaran en el programa principal, y pueden ser utilizadas por éste y por todos los subprogramas. n Variables Locales: se declaran en los procedimientos y funciones, y pueden ser utilizadas sólo en los subprogramas en que fueron declaradas.

9 Luis Pizarro Q. ©2003 9 n 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.

10 Luis Pizarro Q. ©2003 10 n 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.

11 Luis Pizarro Q. ©2003 11 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. n 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.

12 Luis Pizarro Q. ©2003 12 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.

13 Luis Pizarro Q. ©2003 13 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.

14 Luis Pizarro Q. ©2003 14 Parámetros por Valor y por Referencia n 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 Valor Las 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.

15 Luis Pizarro Q. ©2003 15 Parámetros por Valor y por Referencia n 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.

16 Luis Pizarro Q. ©2003 16 Ejercicio n 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 := d ELSE 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.

17 Luis Pizarro Q. ©2003 17 Tarea Nº1 1. 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.

18 Luis Pizarro Q. ©2003 18 Tarea Nº1 2. 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

19 Luis Pizarro Q. ©2003 19 Tarea Nº1 3. 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.

20 Luis Pizarro Q. ©2003 20 Tarea Nº1 4. 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)

21 Luis Pizarro Q. ©2003 21 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)

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 www.labmc.inf.utfsm.cl/~lpizarro/IWI-131


Descargar ppt "Departamento de Informática Universidad Técnica Federico Santa María Tema 7: Subprogramas Programación de Computadores (IWI-131) Luis Pizarro Q."

Presentaciones similares


Anuncios Google