Sei sulla pagina 1di 46

Introduccin a la Programacin

Tema 4: La abstraccin procedimental

Profesor: Federico Peinado


Elaboracin del material:
- Mercedes Gmez
- Pablo Moreno
- Manuel Ortega
- Carlos Cervign
- Javier Arroyo
- Federico Peinado
Ingeniera Tcnica en Informtica de Gestin
Departamento de Ingeniera del Software e Inteligencia Artificial
Curso 2009-2010

Descomponer un problema
Problema: Dibujar esta figura

Tema 4

1. Dibujar el crculo
2. Dibujar el tringulo
1. Dibujar las dos lneas secantes
2. Dibujar la lnea horizontal
3. Dibujar las otras dos lneas secantes

Introduccin:
Subprogramas

Procedimientos

Funciones

Alcance y
visibilidad
Desarrollo con
subprogramas

Dibujar figura

Dibujar crculo

Dibujar tringulo

Dibujar lneas
secantes

Dibujar lneas
secantes

Dibujar lnea
horizontal
* En realidad son el mismo subproblema

Introduccin a la Programacin
Ingeniera Tcnica en Informtica de Gestin

4.2

Descomponer un problema de programacin


Tema 4
Introduccin:
Subprogramas

Procedimientos

Funciones

Alcance y
visibilidad
Desarrollo con
subprogramas

L
A

Y
O

Introduccin a la Programacin
Ingeniera Tcnica en Informtica de Gestin

*
*
*
*
* * *
*
*
*
*

Problema: Imprimir este mensaje


horizontal en la pantalla (formando
cada letra con asteriscos)
1. Imprimir HOLA
1. Imprimir H
2. Imprimir O
3. Imprimir L
4. Imprimir A
2. Imprimir dos lneas en blanco
3. Imprimir YO
1. Imprimir Y
2. Imprimir O

4.3

Descomponer un problema de programacin

Imprimir mensaje

Imprimir HOLA
Imprimir
H
Imprimir
O

Lneas en blanco

Imprimir
A
Imprimir L

Imprimir YO

Imprimir Y

Imprimir
O

* Mismo subproblema de programacin (= mismo cdigo)

4.4

Los subprogramas
Tema 4
Introduccin:
Subprogramas

Procedimientos

Funciones

Alcance y
visibilidad
Desarrollo con
subprogramas

Subprogramas: bloques de cdigo que llevan a cabo una


tarea concreta (= resuelven un subproblema concreto)
Tienen un propsito
Tienen unas precondiciones
Permiten reutilizar cdigo de manera sencilla y segura
Pueden ser usados ms de una vez en el programa
principal sin necesidad de reescribir todo (o copiar-pegar)
Ayudan a que el cdigo del programa principal sea
Legible: Resulta ms sencillo leer slo el nombre del
subprograma que todo su cdigo
Ordenado: Cada subprograma ocupa un lugar concreto
dentro de todo el cdigo

Introduccin a la Programacin
Ingeniera Tcnica en Informtica de Gestin

4.5

Ejemplos de subprogramas
Tema 4
Introduccin:
Subprogramas

Procedimientos

Funciones

Alcance y
visibilidad

Ejemplo: Podemos pensar en subprogramas para

Imprimir una letra con asteriscos en la consola


Mostrar un men de opciones
Pedirle datos al usuario
Calcular el mximo de 3 nmeros

Desarrollo con
subprogramas

De hecho, ya conocemos (y hemos utilizado) algunos


subprogramas que no hemos implementado nosotros

Para leer del teclado: readln, read,


Para escribir por pantalla: write, writeln,
Para operar con nmeros: sqr, sqrt, ln, exp, abs
Para limpiar la consola: clrscr

Introduccin a la Programacin
Ingeniera Tcnica en Informtica de Gestin

Datos en un subprograma
Tema 4
Introduccin:
Subprogramas

Procedimientos

Dos tipos de datos


Datos locales
Variables y constantes declaradas y usadas dentro del
subprograma

Funciones

Alcance y
visibilidad

Datos intercambiados con el exterior (= parmetros)


Datos de entrada (aceptados por el subprograma)

Desarrollo con
subprogramas

Datos de salida (devueltos por el subprograma)

Datos de entrada/salida (aceptados y devueltos,


posiblemente modificados por el subprograma)

Introduccin a la Programacin
Ingeniera Tcnica en Informtica de Gestin

4.7

Datos en un subprograma
Tema 4
Introduccin:
Subprogramas

Programa

Procedimientos

Funciones

Subprogram
a

Alcance y
visibilidad
Desarrollo con
subprogramas

Introduccin a la Programacin
Ingeniera Tcnica en Informtica de Gestin

4.8

Ejemplos
Tema 4
Introduccin:
Subprogramas

Procedimientos

Ejemplo
Subprograma que, dado un nmero, lo muestra por pantalla
numero

Funciones

Alcance y
visibilidad
Desarrollo con
subprogramas

Subprograma que, dado un carcter, devuelve su cdigo ASCII


caracter

codig
o

Subprograma que, dado un nmero, lo devuelve multiplicado


por s mismo
numero
x
Introduccin a la Programacin
Ingeniera Tcnica en Informtica de Gestin

x2
4.9

Procedimientos en Pascal
Tema 4
Introduccin:
Subprogramas

Procedimientos

Funciones

Hay que distinguir entre la declaracin y la invocacin de


procedimientos.
La declaracin sirve para definir el procedimiento
La invocacin se utiliza para usar el procedimiento dentro del
programa principal (o de otro procedimiento).

Alcance y
visibilidad
Desarrollo con
subprogramas

Introduccin a la Programacin
Ingeniera Tcnica en Informtica de Gestin

4.10

Ejemplo de un procedimiento en Pascal


Tema 4
Introduccin:
Subprogramas

Ejemplo: Subprograma que, dado un nmero, calcula y


devuelve el nmero correspondiente a su cuadrado
Declaracin

Procedimientos

Funciones

Alcance y
visibilidad

{Calcula el cuadrado de un nmero}


procedure calcCuadrado (num: integer; var cuadrado: integer);
begin
cuadrado:= num * num;
end;

Desarrollo con
subprogramas

Invocacin
var
numero, resultado: integer;
begin
readln(numero);
calcCuadrado(numero, resultado);
writeln(El cuadrado es , resultado);
end.
Introduccin a la Programacin
Ingeniera Tcnica en Informtica de Gestin

Ejemplo de un programa con procedimientos


Tema 4
Introduccin:
Subprogramas

program figuras ;
procedure DibujaCirculo ;
begin {DibujaCirculo}
Writeln (
Writeln (*

Procedimientos

);

*);

Writeln ( * *);
end; {DibujaCirculo}

Funciones

procedure Dibujalineas ;
begin {Dibujalineas}

Alcance y
visibilidad

Writeln ( /\ );

Desarrollo con
subprogramas

Writeln (/

Writeln ( / \ );
\);

end; {Dibujalneas}
procedure Dibujabase ;
begin {Dibujabase}
Writeln (--------);
end; {Dibujabase}
begin {Programa principal}
DibujaCirculo;
Dibujalineas;
Dibujabase;
Dibujalineas;
end.

Introduccin a la Programacin
Ingeniera Tcnica en Informtica de Gestin

Declaracin de procedimientos en Pascal

p r o c e d im ie n to
c ab e c e ra
p r o c e d im ie n to

d e c la ra c io n e s
lo c a le s

b e g in

c u erp o

end

c a b e c e r a p r o c e d im ie n to

id e n t if ic a d o r

p ro c e d u re

lis ta
p a ra m e tro s

c u e rp o
s e n te n c ia

4.13

Declaracin de procedimientos en Pascal


Tema 4

lis ta p a r a m e tr o s

Introduccin:
Subprogramas

id e n tif ic a d o r

id e n tific a d o r
tip o

Procedimientos

Funciones

var

Alcance y
visibilidad
Desarrollo con
subprogramas

Para controlar el intercambio de informacin de un


subprograma con el exterior se usan los parmetros
Tipos de parmetros
Parmetros por valor Datos solo de entrada
Parmetros por referencia (o por variable) Datos de salida
o de entrada/salida
Normalmente sern modificados dentro del procedimiento

Introduccin a la Programacin
Ingeniera Tcnica en Informtica de Gestin

4.14

Declaracin de procedimientos en Pascal


Ejemplos :

Tema 4
Introduccin:
Subprogramas

Procedimientos

Funciones

procedure escribeH;
procedure prueba1 (var num: integer);

Alcance y
visibilidad
Desarrollo con
subprogramas

procedure prueba2 (num1: integer;


var num2: integer);

procedure prueba3 (p2,


Aunque el orden no es relevante,
p5,
mejor acostumbrarse a poner los
var
parmetros de entrada/salida siempre
var
al principio o al final de la lista

Introduccin a la Programacin
Ingeniera Tcnica en Informtica de Gestin

p3:
p6:
p1:
p4:

real;
boolean;
char;
integer);

4.15

Invocacin de procedimientos
Tema 4

Llamada (o invocacin) a procedimientos

Introduccin:
Subprogramas

lla m a d a p r o c e d im ie n to
Procedimientos

Funciones

id e n tific a d o r

a rg u m e n to

Alcance y
visibilidad

Desarrollo con
subprogramas

a rg u m e n to
c o n s ta n te

v a r ia b le

e x p r e s io n

Introduccin a la Programacin
Ingeniera Tcnica en Informtica de Gestin

Para aquellos parmetros del


procedimiento que son por
variable, el argumento slo
puede ser una variable

4.16

Invocacin de procedimientos
Tema 4
Introduccin:
Subprogramas

Procedimientos

Funciones

Alcance y
visibilidad
Desarrollo con
subprogramas

En la invocacin de un procedimiento debe existir una


correspondencia entre los argumentos usados en al
invocacin y los parmetros definidos en la declaracin
La invocacin debe tener tantos argumentos como parmetros
tiene la declaracin
Y en el mismo orden!
A un parmetro por valor le puede corresponder un argumento
en forma de constante, variable o expresin
Debe haber compatibilidad en la asignacin
A un parmetro por variable le puede corresponder nicamente
un argumento en forma de variable del mismo tipo

La llamada a un procedimiento es una sentencia


NOTA: Observar la diferencia en este punto con las funciones
que veremos ms adelante

Introduccin a la Programacin
Ingeniera Tcnica en Informtica de Gestin

4.17

Invocacin de procedimientos
Tema 4
Introduccin:
Subprogramas

Procedimientos

Funciones

Alcance y
visibilidad
Desarrollo con
subprogramas

Ejemplos
var
ch1: char;numReal: real;
numEntero: integer;
incognita: boolean;
escribeH;
prueba1 (num);
prueba1 (numEntero);

Qu llamadas son
correctas?

prueba2 (5, numEntero);


prueba3 (ch1, numReal, numEntero, incognita, false);
prueba3 (a, numReal, 3 * numReal, numEntero,
incognita, false);
prueba3 (ch1, numReal, 3 * numReal, numEntero,
incognita, true);
Introduccin a la Programacin
Ingeniera Tcnica en Informtica de Gestin

4.18

Parmetros: ejemplo
Tema 4
Introduccin:
Subprogramas

Procedimientos

program paso;
var
X,Y : Real ;
sum, med : Real;
procedure SumayMedia (num1, num2 :Real; Var Suma, media : Real);

Funciones

Alcance y
visibilidad
Desarrollo con
subprogramas

begin { SumayMedia }
suma := num1 + num2 ;
media := suma / 2.0
end; { SumayMedia }
begin
X :=8 ;
Y :=10 ;
...
SumayMedia(X,Y,sum,med);
writeln(sum);
writeln(med);
end.

Introduccin a la Programacin
Ingeniera Tcnica en Informtica de Gestin

Traza
Tema 4
Introduccin:
Subprogramas

Procedimientos

Funciones

Alcance y
visibilidad

Prog.
principal
8.0 X
10.
0
?
?

Procedimiento sumaYMedia(X,Y,sum,med)

Y
sum
med

8.0

num1

10.
0

num2

antes

suma
media

Desarrollo con
subprogramas

8.0

8.0

num1

10.
0
18.
0

10.
0

num2

sum
suma
med

9.0

despus

media

El programa usa correctamente los parmetros


de entrada y salida
Introduccin a la Programacin
Ingeniera Tcnica en Informtica de Gestin

Parmetros por valor


program paso;
Tema 4
Introduccin:
Subprogramas

var
A : integer;

Procedimientos

procedure incrementa (X:integer);


Funciones

Alcance y
visibilidad

begin

Prog. principal

Procedimiento

X:=X+1;
end;

antes

Desarrollo con
subprogramas

A5

X
Por
valor

begin
A:=5;
incrementa(A);
writeln(A);
end.

despus

A5

Aunque el valor de la X cambia, la A no se ve


afectada!
Introduccin a la Programacin
Ingeniera Tcnica en Informtica de Gestin

Luego en este caso el procedimiento incrementa


es en realidad inutil porque no tiene ningn

Parmetros por referencia o variable


program paso;
Tema 4
Introduccin:
Subprogramas

var
A : integer;

En la invocacin incrementa(A) se asocia la


variable A del programa principal con el
parmetro X de la declaracin del procedimiento

incrementa

Procedimientos

procedure incrementa (var X:integer);


Funciones

Alcance y
visibilidad

begin

Prog. principal

X:=X+1;

Procedimiento

end;

A5

Desarrollo con
subprogramas

begin

antes

X
Por
variabl
e

A:=5;
incrementa(A);
writeln(A);
end.

Introduccin a la Programacin
Ingeniera Tcnica en Informtica de Gestin

despus

A6

Como el paso de parmetros es por variable, al


incrementarse la X se est incrementando en
realidad la A declarada en el programa principal.

No se debe acceder a variables globales (I)


{Mostrar un nmero varias veces}
program muestraRepetida;
var
num, veces: integer;
procedure mostrar;
var
cont: integer;
begin
for cont:= 1 to veces do
writeln(num)
end;

begin
write(Introduzca el nmero: );
readln(num);
write(Introduzca las veces: );
readln(veces);
mostrar
end.

Este programa funciona, pero


El procedure mostrar est
accediendo a las variables
veces y num que estn definidas
en el programa principal
A eso se le llama acceder a una
variable global
4.23

No se debe acceder a variables globales (II)


begin
write(Introduzca el nmero: );
readln(num);
write(Introduzca las veces: );
readln(veces);
mostrar
end.

{Mostrar un nmero varias veces}


program muestraRepetida;
var
num, veces: integer;
procedure mostrar;
var
cont: integer;
begin
for cont:= 1 to veces do
writeln(num)
end;

Uso de VARIABLE
GLOBAL!!!

Uso de VARIABLE
GLOBAL!!!

Un procedimiento slo debe acceder a sus parmetros y a las variables que


tiene definidas localmente en su zona de declaraciones.
La idea es que el procedimiento encapsule los datos que necesita utilizar y,
por tanto, NO debe acceder a variables de otros procedimientos o del
4.24
programa principal

No se debe acceder a variables globales (y III)

{Mostrar un nmero varias veces}


program muestraRepetida;
var
num, veces: integer;

procedure mostrar (n, v:


integer);
var
cont: integer;

begin
write(Introduzca el nmero: );
readln(num);
write(Introduzca las veces: );
readln(veces);
mostrar(num, veces)
end.

begin
for cont:= 1 to v do
writeln(n)
end;
En este caso, mostrar solo utiliza sus
parmetros n y v y a su variable local
cont, lo cual es correcto
4.25

Ejercicios
Tema 4
Introduccin:
Subprogramas

Procedimientos

Subprograma que intercambia dos valores reales dados


Subprograma que, dado un nmero entero positivo N,
calcula y devuelve la suma y la media de los N primeros
enteros positivos

Funciones

Subprograma que calcula el factorial de un nmero entero N


Alcance y
visibilidad
Desarrollo con
subprogramas

Introduccin a la Programacin
Ingeniera Tcnica en Informtica de Gestin

4.26

Funciones
Tema 4
Introduccin:
Subprogramas

Procedimientos

Funciones

Alcance y
visibilidad
Desarrollo con
subprogramas

Son un tipo especial de subprogramas que se pueden


emplear dentro de expresiones
La declaracin se realiza en el mismo sitio que las de los
procedimientos
Su invocacin puede realizarse en cualquier punto donde se
pueda utilizar un literal
Es decir, pueden emplearse dentro de expresiones o en la
parte derecha de una asignacin
Cada llamada a una funcin se comporta como su
valor resultante
Y no como una sentencia normal de Pascal (como
pasaba con los procedimientos)

Introduccin a la Programacin
Ingeniera Tcnica en Informtica de Gestin

4.27

Funciones
Cundo usar funciones?
Tema 4
Introduccin:
Subprogramas

Procedimientos

Si se necesita un subprograma que calcule y devuelva un nico


valor
Se pueden usar de manera similar a un literal
Dentro de expresiones (siendo el valor devuelto por la
expresin compatible)
En la parte derecha de una sentencia de asignacin
Como argumento de procedimientos u otras funciones

Funciones

Alcance y
visibilidad
Desarrollo con
subprogramas

Es recomendable que el subprograma no tenga interaccin con


el usuario mediante sentencias de entrada o de salida

Algunas cosas a tener en cuenta


Slo utilizarn parmetros de entrada (de paso por valor)
Un solo parmetro de salida de tipo simple o string
NO se define en la lista de parmetros
Tiene como nombre el mismo nombre de la funcin

Introduccin a la Programacin
Ingeniera Tcnica en Informtica de Gestin

4.28

Sintaxis de las funciones en Pascal

Tipo de
la
funcin

fu n c io n
c a b e c era
fu n c io n

d e c la r a c io n e s
lo c a le s

b e g in

c u e rp o

end

c a b e c e r a fu n c io n

f u n c t io n

id e n tif ic a d o r

lis ta
p a ra m e tro s

id e n t ific a d o r
tip o

lis ta p a r a m e tr o s
c u erp o

id e n tific a d o r
s e n te n c ia

id e n tific a d o r
t ip o

,
;
;

4.29

Sintaxis de las funciones en Pascal


Llamada (o invocacin) a funciones
lla m a d a fu n c io n

id e n tific a d o r

a rg u m e n to

a rg u m e n to
c o n s ta n te

v a r ia b le

e x p r e s io n

Tantos argumentos como


parmetros
Cada uno de los argumentos se
corresponde con el parmetro
situado en la misma posicin
que l
4.30

Ejemplo de una funcin en Pascal


Tema 4
Introduccin:
Subprogramas

Procedimientos

Funciones

Alcance y
visibilidad

Ejemplo: funcin que, dado un carcter, devuelve un valor


booleano indicando si se trata de un dgito o no
function esDigito (ch: char): boolean;
begin
esDigito:= (ch >= 0) and (ch <= 9)
end;

Desarrollo con
subprogramas

Cdigo para devolucin del valor de la


funcin:
identificadorFuncion:= valor

Introduccin a la Programacin
Ingeniera Tcnica en Informtica de Gestin

4.31

Ejemplo
Tema 4
Introduccin:
Subprogramas

Procedimientos

Funciones

Alcance y
visibilidad
Desarrollo con
subprogramas

{Comprobar si un carcter es un dgito o no}


program prueba;
var
mi_char: char;
function esDigito (ch: char): boolean;
begin
esDigito:= (ch >= 0) and (ch <= 9)
end;
begin (* p.p. *)
writeln(Introduzca un carcter: );
readln(mi_char);
En este punto se ejecuta
if esDigito(mi_char) then
la funcin esDigito y se le
writeln(Es un dgito)
pasa el valor de mi_char.
else
writeln(No es un dgito) Al final, esDigito(mi_char)
ser un valor booleano, que
end. (* p.p. *)
es compatible con lo que
espera la instruccin IF en
ese punto

Introduccin a la Programacin
Ingeniera Tcnica en Informtica de Gestin

4.32

Otro ejemplo
Tema 4
Introduccin:
Subprogramas

Procedimientos

Funciones

Alcance y
visibilidad
Desarrollo con
subprogramas

{Mostrar los das del mes}


program diasDelMes;
var
mes: integer;
function diasMes (m: integer): integer;
begin
case m of
1,3,5,7,8,10,12: diasMes:= 31;
4,6,9,11: diasMes:= 30;
2: diasMes:= 28
end
end;
begin (* p.p. *)
write(Introduzca el mes: );
readln(mes);
if (mes >= 1) and (mes <= 12) then
writeln(Das: , diasMes(mes))
end. (* p.p. *)

Introduccin a la Programacin
Ingeniera Tcnica en Informtica de Gestin

4.33

Usando bien la variable de salida


Tema 4
Introduccin:
Subprogramas

function producto (X, Y : integer) : integer;


{Calcula X * Y mediante sumas}

Procedimientos

var
Funciones

Alcance y
visibilidad
Desarrollo con
subprogramas

I, prod : integer ;
begin
prod:=0;

Si se van a realizar clculos


intermedios, es recomendable
trabajar primero sobre una
variable local

for I:=1 to X do
prod : = prod + Y; {sumamos Y X veces}
producto := prod;
end;

Introduccin a la Programacin
Ingeniera Tcnica en Informtica de Gestin

Al final se realiza la asignacin de la variable


local a la variable de salida (que tiene como
identificador del nombre de la funcin)

Procedimientos anidados
Tema 4
Introduccin:
Subprogramas

Dentro de los subprogramas se pueden definir otros


subprogramas
Imprimir mensaje

Procedimientos

Funciones

Imprimir HOLA

Lneas en blanco

Imprimir YO

Alcance y
visibilidad
Desarrollo con
subprogramas

Imprimir H
Imprimir O

Imprimir A

Imprimir Y

Imprimir O

Imprimir L

En Pascal, un procedimiento puede llamar a cualquier otro


procedimiento que est declarado previamente
Pero no puede llamar a procedimientos declarados
posteriormente (es decir, ms abajo en el cdigo)
Introduccin a la Programacin
Ingeniera Tcnica en Informtica de Gestin

4.35

Visibilidad de Procedimientos
program miPrograma;
var
x, y: real;
procedure externo (var x: real);
var
m, n: integer;
procedure interno (x: real);
var
n, p: integer;
begin (* interno *)
...
end; (* interno *)

procedure otro;
const
blanco = ;
begin (* otro *)
...
end; (* otro *)
begin (* p.p. *)
...
end. (* p.p. *)

begin (* externo *)
...
end; (* externo *)

4.36

Alcance y visibilidad de variables y constantes


Tema 4
Introduccin:
Subprogramas

Procedimientos

Tipos de identificadores
Locales a bloque Declarados en el bloque
No locales a bloque Declarados en un nivel de anidamiento
superior al del bloque

Funciones

Alcance y
visibilidad
Desarrollo con
subprogramas

Regla de alcance
El alcance de un identificador son las sentencias posteriores del bloque
en el que se declara y las de los bloques anidados posteriores a su
declaracin

Regla de visibilidad
Si dos identificadores con igual nombre tienen alcance en una
determinada zona del programa, en dicha zona slo es visible el de
menor alcance
La visibilidad de un identificador incluye todas las sentencias posteriores
del bloque en el que se declara y las de los bloques anidados
posteriores a su declaracin en los que el identificador no se redeclara
Introduccin a la Programacin
Ingeniera Tcnica en Informtica de Gestin

4.37

Ejercicio
program miPrograma;
var
x, y: real;
procedure externo (var x: real);
var
m, n: integer;
procedure interno (x: real);
var
n, p: integer;
begin (* interno *)
...
end; (* interno *)
begin (* externo *)
...
end; (* externo *)
begin (* p.p. *)
...
end. (* p.p. *)

m? n? p? x? y?
4.38

Estilo de programacin
Tema 4
Introduccin:
Subprogramas

Procedimientos

Funciones

Alcance y
visibilidad
Desarrollo con
subprogramas

Los subprogramas deben documentarse igual que debe


hacerse con el resto del programa:
Documentacin de programas
Objetivo
Entrada/salida (interaccin con el usuario)
Puede incluir tambin otra informacin relevante, tal como
algoritmos que implementa, fecha de creacin, fecha de la
ltima modificacin, nombre del/de los programador(es), etc.
Documentacin de subprogramas
Objetivo
Entrada/salida (interaccin con el usuario)
Datos aceptados, devueltos y aceptado y devueltos
posiblemente modificados

Introduccin a la Programacin
Ingeniera Tcnica en Informtica de Gestin

4.39

Estilo de programacin
Tema 4
Introduccin:
Subprogramas

Procedimientos

Funciones

Alcance y
visibilidad
Desarrollo con
subprogramas

function diasMes (m: integer): integer;


{------Objetivo: Obtiene el nmero de das de un mes
Acepta: El nmero entero que representa al mes (m); m [1,12]
Devuelve: El nmero de das del mes
-------}
begin
...
end;

procedure mostrar (n, v: integer);


{------Objetivo: Visualiza un nmero entero un cierto nmero de veces
Acepta: El nmero entero a mostrar (n) y el nmero de veces que se
muestra (v)
Salida (pantalla): Tantas lneas como veces se quiere mostrar el
nmero; cada lnea contiene el nmero
-------}
var
...
begin
...
end;

Introduccin a la Programacin
Ingeniera Tcnica en Informtica de Gestin

4.40

Diseo descendente
Tema 4
Introduccin:
Subprogramas

Tratamiento de los problemas mediante refinamientos


sucesivos (descomposicin del problema en subproblemas
cada vez ms pequeos)

Procedimientos

Funciones

Alcance y
visibilidad
Desarrollo con
subprogramas

Ejemplo: Disear y escribir un programa que haga


operaciones de conversin de cantidades hasta que el
usuario decida que no quiere hacer ms transformaciones

Centmetros a pulgadas (e inversa)


Kilogramos a libras (e inversa)
Euros a pesetas (e inversa)
Grados centgrados a grados Fahrenheit (e inversa)

Introduccin a la Programacin
Ingeniera Tcnica en Informtica de Gestin

4.41

Primer diseo
Tema 4
Introduccin:
Subprogramas

Procedimientos

Funciones

Alcance y
visibilidad

Programa principal
Repetir
Elegir opcin
Ejecutar opcin elegida
Mostrar resultado
Hasta que la opcin elegida se distinta de cero

Desarrollo con
subprogramas

Introduccin a la Programacin
Ingeniera Tcnica en Informtica de Gestin

4.42

Primer refinamiento
Tema 4
Introduccin:
Subprogramas

Procedimientos

Subprograma elegir_opcion
Repetir
Mostrar men con las opciones
Leer la opcin elegida
Hasta que la opcin sea vlida

Funciones

Alcance y
visibilidad
Desarrollo con
subprogramas

Subprograma ejecutar_opcion
Si el valor de la opcion es:
1 traducir_cms_pulgadas
2 traducir_kgs_libras
3 traducir_euros_pts
4 traducir_cent_fahr
0 No hacer nada

Programa principal
Repetir
Elegir opcin
Ejecutar opcin elegida
Mostrar resultado
Hasta que la opcin elegida se distinta de cero
Introduccin a la Programacin
Ingeniera Tcnica en Informtica de Gestin

4.43

Segundo refinamiento
Tema 4
Introduccin:
Subprogramas

Subprograma mostrar_menu
Escribir la estructura del men con writeln

Procedimientos

Subprograma elegir_opcion
Funciones

Alcance y
visibilidad
Desarrollo con
subprogramas

Repetir
Mostrar men con las opciones
Leer la opcin elegida con readln
Hasta que la opcin sea vlida

Introduccin a la Programacin
Ingeniera Tcnica en Informtica de Gestin

4.44

Segundo refinamiento (cont)


Tema 4
Introduccin:
Subprogramas

Procedimientos

Funciones

Alcance y
visibilidad

Subprograma traducir_cms_pulgadas
Pedir tipo de conversin (cms->pulgadas, pulgadas->cms)
Pedir la cantidad original
Si cms->pulgadas
Calcular_pulgadas
Si no
Calcular_cms

Desarrollo con
subprogramas

Subprograma ejecutar_opcion
Si el valor de la opcion es:
1 traducir_cms_pulgadas
2 traducir_kgs_libras
3 traducir_euros_pts
4 traducir_cent_fahr
0 No hacer nada
Introduccin a la Programacin
Ingeniera Tcnica en Informtica de Gestin

4.45

Tercer refinamiento
Tema 4
Introduccin:
Subprogramas

Subprograma pedir_tipo_conversion_cms_pulgadas

Procedimientos

Funcin calcular_pulgadas(cent: real) : real;


Funciones

Alcance y
visibilidad
Desarrollo con
subprogramas

Funcin calcular_cms(pulgadas: real) : real;

Subprograma traducir_cms_pulgadas
Pedir tipo de conversin (cms->pulgadas, pulgadas->cms)
Pedir la cantidad original con readln
Si cms->pulgadas
Calcular_pulgadas
Si no
Calcular_cms
Introduccin a la Programacin
Ingeniera Tcnica en Informtica de Gestin

4.46

Potrebbero piacerti anche