Introducción a la Programación
Tema 4: La abstracción procedimental
Profesor: Federico Peinado
Elaboración del material:
- Mercedes Gómez
- Pablo Moreno
- Manuel Ortega
- Carlos Cervigón
- Javier Arroyo
- Federico Peinado
Ingeniería Técnica en Informática de Gestión
Departamento de Ingeniería del Software e Inteligencia Artificial
Curso 2009-2010
Descomponer un problema
 Problema: Dibujar esta figura
Tema 4
Introducción:
Subprogramas
1. Dibujar el círculo
2. Dibujar el triángulo
1. Dibujar las dos líneas secantes
2. Dibujar la línea horizontal
3. Dibujar las otras dos líneas secantes
Procedimientos
Funciones
Alcance y
visibilidad
Desarrollo con
subprogramas
Dibujar figura
Dibujar círculo
Dibujar triángulo
Dibujar líneas secantes
Dibujar líneas secantes
Dibujar línea horizontal
* En realidad son el mismo “subproblema”
Introducción a la Programación
Ingeniería Técnica en Informática de Gestión
4.1
Descomponer un problema de programación
Tema 4
Introducción:
Subprogramas
Procedimientos
H
Funciones
O
Alcance y
visibilidad
Desarrollo con
subprogramas
L
A
Y
O
Introducción a la Programación
Ingeniería Técnica en Informática de Gestión
*
*
*
*
* * *
*
*
*
*
…
 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 líneas en blanco
3. Imprimir YO
1. Imprimir Y
2. Imprimir O
4.2
Descomponer un problema de programación
Imprimir mensaje
Imprimir HOLA
Imprimir H
Imprimir O
Líneas en blanco
Imprimir A
Imprimir YO
Imprimir Y
Imprimir O
Imprimir L
* Mismo subproblema de programación (= mismo código)
4.3
Los subprogramas
Tema 4
Introducción:
Subprogramas
Procedimientos
Funciones
Alcance y
visibilidad
Desarrollo con
subprogramas
 Subprogramas: bloques de código que llevan a cabo una
tarea concreta (= resuelven un subproblema concreto)
 Tienen un propósito
 Tienen unas precondiciones
 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 copiar-pegar)
 Ayudan a que el código del programa principal sea
 Legible: Resulta más sencillo leer sólo el nombre del
subprograma que todo su código
 Ordenado: Cada subprograma ocupa un lugar concreto
dentro de todo el código
Introducción a la Programación
Ingeniería Técnica en Informática de Gestión
4.4
Ejemplos de subprogramas
Tema 4
Introducción:
Subprogramas
Procedimientos
Funciones
 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 máximo de 3 números
…
Alcance y
visibilidad
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 números: sqr, sqrt, ln, exp, abs…
Para limpiar la consola: clrscr
…
Introducción a la Programación
Ingeniería Técnica en Informática de Gestión
Datos en un subprograma
Tema 4
Introducción:
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 (= parámetros)
 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)
Introducción a la Programación
Ingeniería Técnica en Informática de Gestión
4.6
Datos en un subprograma
Tema 4
Introducción:
Subprogramas
Programa
Procedimientos
Funciones
Subprograma
Alcance y
visibilidad
Desarrollo con
subprogramas
Introducción a la Programación
Ingeniería Técnica en Informática de Gestión
4.7
Ejemplos
Tema 4
Introducción:
Subprogramas
 Ejemplo
 Subprograma que, dado un número, lo muestra por pantalla
numero
Procedimientos
Funciones
Alcance y
visibilidad
 Subprograma que, dado un carácter, devuelve su código ASCII
Desarrollo con
subprogramas
caracter
codigo
 Subprograma que, dado un número, lo devuelve multiplicado
por sí mismo
numero
x
Introducción a la Programación
Ingeniería Técnica en Informática de Gestión
x2
4.8
Procedimientos en Pascal
Tema 4
Introducción:
Subprogramas
Procedimientos
Funciones
 Hay que distinguir entre la declaración y la invocación de
procedimientos.
 La declaración sirve para definir el procedimiento
 La invocación se utiliza para usar el procedimiento dentro del
programa principal (o de otro procedimiento).
Alcance y
visibilidad
Desarrollo con
subprogramas
Introducción a la Programación
Ingeniería Técnica en Informática de Gestión
4.9
Ejemplo de un procedimiento en Pascal
Tema 4
Introducción:
Subprogramas
 Ejemplo: Subprograma que, dado un número, calcula y
devuelve el número correspondiente a su cuadrado
 Declaración
Procedimientos
Funciones
Alcance y
visibilidad
{Calcula el cuadrado de un número}
procedure calcCuadrado (num: integer; var cuadrado: integer);
begin
cuadrado:= num * num;
end;
Desarrollo con
subprogramas
 Invocación
var
numero, resultado: integer;
begin
readln(numero);
calcCuadrado(numero, resultado);
writeln(‘El cuadrado es ’, resultado);
end.
Introducción a la Programación
Ingeniería Técnica en Informática de Gestión
Ejemplo de un programa con procedimientos
program figuras ;
Tema 4
Introducción:
Subprogramas
procedure DibujaCirculo ;
begin {DibujaCirculo}
Writeln (‘
Procedimientos
’);
*
Writeln (‘*
*’);
Writeln (‘ * *’);
end; {DibujaCirculo}
Funciones
procedure Dibujalineas ;
begin {Dibujalineas}
Alcance y
visibilidad
Desarrollo con
subprogramas
Writeln (‘ /\ ’);
Writeln (‘ / \ ’);
Writeln (‘/
\’);
end; {Dibujalíneas}
procedure Dibujabase ;
begin {Dibujabase}
Writeln (‘--------‘);
end; {Dibujabase}
begin {Programa principal}
DibujaCirculo;
Dibujalineas;
Dibujabase;
Dibujalineas;
end.
Introducción a la Programación
Ingeniería Técnica en Informática de Gestión
Declaración de procedimientos en Pascal
imie
d
e
c
o
r
p
o
t
n
a
r
e
c
b
d
e
c ie
o
r
p
im
o
t
n
s
n
io
r
la
c
e
d
be
gn
i
s
e
a
c
lo
o
p
r
e
u
c
d
n
e
m
id
e
c
o
r
p
a
bo
t
n
e
i
e
r
u
d
c
o
p
r
o
a
c
f
t
n
e
id
(
l
a
t
is
me
r
a
p
s
o
r
t
)
;
o
p
r
e
u
c
a
ic
n
e
t
s
;
4.12
Declaración de procedimientos en Pascal
Tema 4
p
a
t
s
i
l
a
m
r
o
r
t
e
s
Introducción:
Subprogramas
d
i
e
n
d
a
c
f
i
t
o
r
:
Procedimientos
Funciones
r
a
v
p
i
to
,
Alcance y
visibilidad
Desarrollo con
subprogramas
d
i
n
e
d
a
c
f
i
t
o
r
;
 Para controlar el intercambio de información de un
subprograma con el exterior se usan los parámetros
 Tipos de parámetros
 Parámetros por valor  Datos solo de entrada
 Parámetros por referencia (o por variable)  Datos de salida
o de entrada/salida
 Normalmente serán modificados dentro del procedimiento
Introducción a la Programación
Ingeniería Técnica en Informática de Gestión
4.13
Declaración de procedimientos en Pascal
 Ejemplos :
Tema 4
Introducción:
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,
p5,
Aunque el orden no es relevante,
mejor acostumbrarse a poner los
var
parámetros de entrada/salida siempre
var
al principio o al final de la lista
Introducción a la Programación
Ingeniería Técnica en Informática de Gestión
p3:
p6:
p1:
p4:
real;
boolean;
char;
integer);
4.14
Invocación de procedimientos
Tema 4
 Llamada (o invocación) a procedimientos
Introducción:
Subprogramas
t
no
i ie
cm
d
a oe
dpr
ma
la
Procedimientos
Funciones
t or
d
a
e ifc
idn
(
t
no
gume
r
a
)
Alcance y
visibilidad
,
Desarrollo con
subprogramas
t
no
gume
r
a
t
ne
ta
ons
c
l
ibe
r
a
v
Para aquellos parámetros del
procedimiento que son por
variable, el argumento sólo
puede ser una variable
rn
io
s
pe
x
e
Introducción a la Programación
Ingeniería Técnica en Informática de Gestión
4.15
Invocación de procedimientos
Tema 4
Introducción:
Subprogramas
Procedimientos
Funciones
Alcance y
visibilidad
Desarrollo con
subprogramas
 En la invocación de un procedimiento debe existir una
correspondencia entre los argumentos usados en al
invocación y los parámetros definidos en la declaración
 La invocación debe tener tantos argumentos como parámetros
tiene la declaración
 ¡Y en el mismo orden!
 A un parámetro por valor le puede corresponder un argumento
en forma de constante, variable o expresión
 Debe haber compatibilidad en la asignación
 A un parámetro 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 más adelante
Introducción a la Programación
Ingeniería Técnica en Informática de Gestión
4.16
Invocación de procedimientos
Tema 4
Introducción:
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);
Introducción a la Programación
Ingeniería Técnica en Informática de Gestión
4.17
Parámetros: ejemplo
Tema 4
Introducción:
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.
Introducción a la Programación
Ingeniería Técnica en Informática de Gestión
Traza
Tema 4
Prog. principal
Procedimiento sumaYMedia(X,Y,sum,med)
Introducción:
Subprogramas
Procedimientos
Funciones
8.0
X
8.0
num1
10.0
Y
10.0
num2
?
?
sum
antes
suma
med
media
Alcance y
visibilidad
Desarrollo con
subprogramas
8.0
10.0
18.0
X
8.0
num1
Y
10.0
num2
sum
suma
med
9.0
después
media
El programa usa correctamente los parámetros de
entrada y salida
Introducción a la Programación
Ingeniería Técnica en Informática de Gestión
Parámetros por valor
program paso;
Tema 4
Introducción:
Subprogramas
Procedimientos
Funciones
var
A : integer;
procedure incrementa (X:integer);
begin
Prog. principal
X:=X+1;
Alcance y
visibilidad
end;
A
5
Procedimiento
5
antes
Desarrollo con
subprogramas
X
Por valor
begin
A:=5;
incrementa(A);
A
writeln(A);
end.
5
6
X
después
¡Aunque el valor de la X cambia, la A no se ve afectada!
Luego en este caso el procedimiento incrementa es en
realidad inutil porque no tiene ningún efecto
Introducción a la Programación
Ingeniería Técnica en Informática de Gestión
Parámetros por referencia o variable
program paso;
Tema 4
Introducción:
Subprogramas
Procedimientos
Funciones
var
A : integer;
En la invocación incrementa(A) se asocia la variable A
del programa principal con el parámetro X de la
declaración del procedimiento incrementa
procedure incrementa (var X:integer);
begin
X:=X+1;
Alcance y
visibilidad
Prog. principal
Procedimiento
end;
A
Desarrollo con
subprogramas
begin
5
X
antes
Por
variable
A:=5;
incrementa(A);
writeln(A);
end.
después
Introducción a la Programación
Ingeniería Técnica en Informática de Gestión
A
6
X
Como el paso de parámetros 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 número 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 número: ‘);
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 están definidas en el
programa principal
A eso se le llama acceder a una
variable global
4.22
No se debe acceder a variables globales (II)
{Mostrar un número 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 número: ‘);
readln(num);
write(‘Introduzca las veces: ‘);
readln(veces);
mostrar
end.
Uso de VARIABLE GLOBAL!!!
Uso de VARIABLE GLOBAL!!!
Un procedimiento sólo debe acceder a sus parámetros 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 programa principal
4.23
No se debe acceder a variables globales (y III)
{Mostrar un número varias veces}
program muestraRepetida;
var
num, veces: integer;
procedure mostrar (n, v:
integer);
var
cont: integer;
begin
for cont:= 1 to v do
writeln(n)
end;
begin
write(‘Introduzca el número: ‘);
readln(num);
write(‘Introduzca las veces: ‘);
readln(veces);
mostrar(num, veces)
end.

En este caso, mostrar solo utiliza sus
parámetros n y v y a su variable local cont,
lo cual es correcto
4.24
Ejercicios
Tema 4
Introducción:
Subprogramas
Procedimientos
 Subprograma que intercambia dos valores reales dados
 Subprograma que, dado un número 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 número entero N
Alcance y
visibilidad
Desarrollo con
subprogramas
Introducción a la Programación
Ingeniería Técnica en Informática de Gestión
4.25
Funciones
Tema 4
Introducción:
Subprogramas
Procedimientos
Funciones
Alcance y
visibilidad
Desarrollo con
subprogramas
 Son un tipo especial de subprogramas que se pueden
emplear dentro de expresiones
 La declaración se realiza en el mismo sitio que las de los
procedimientos
 Su invocación 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 asignación
 Cada llamada a una función se comporta como su valor
resultante
 Y no como una sentencia normal de Pascal (como pasaba
con los procedimientos)
Introducción a la Programación
Ingeniería Técnica en Informática de Gestión
4.26
Funciones
 ¿Cuándo usar funciones?
Tema 4
Introducción:
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
expresión compatible)
 En la parte derecha de una sentencia de asignación
 Como argumento de procedimientos u otras funciones
Funciones
Alcance y
visibilidad
Desarrollo con
subprogramas
 Es recomendable que el subprograma no tenga interacción con
el usuario mediante sentencias de entrada o de salida
 Algunas cosas a tener en cuenta
 Sólo utilizarán parámetros de entrada (de paso por valor)
 Un solo parámetro de salida de tipo simple o string
 NO se define en la lista de parámetros
 Tiene como nombre el mismo nombre de la función
Introducción a la Programación
Ingeniería Técnica en Informática de Gestión
4.27
Sintaxis de las funciones en Pascal
Tipo de la
función
o
i
c
n
u
f
a
r
e
c
b
i
c
u
f
n
o
d
s
n
o
i
r
a
l
c
e
l
a
c
o
s
e
in
g
e
b
o
p
r
e
u
c
d
n
e
n
o
i
c
u
f
a
r
e
b
t
c
u
f
n
o
i
d
i
f
t
n
e
r
o
a
c
l
a
t
s
i
s
o
t
e
m
r
a
p
(
)
:
r
o
a
c
f
t
n
e
d
i
o
p
i
t
;
o
e
m
r
p
a
t
s
i
l
o
p
r
e
u
c
r
o
a
c
f
t
n
e
d
i
:
a
i
c
n
e
t
s
r
o
a
c
f
t
n
e
d
i
o
p
i
t
,
;
;
4.28
Sintaxis de las funciones en Pascal
 Llamada (o invocación) a funciones
md
la
a fu
a nc
ion
idn
e ifc
d
a
t or
(
gume
r
a
no
t
)
,
gume
r
a
no
t
ons
c
ne
ta
t


ibe
r
a
v
l
Tantos argumentos como parámetros
Cada uno de los argumentos se
corresponde con el parámetro situado
en la misma posición que él
pe
x
e
io
s
rn
4.29
Ejemplo de una función en Pascal
Tema 4
Introducción:
Subprogramas
Procedimientos
Funciones
Alcance y
visibilidad
 Ejemplo: función que, dado un carácter, devuelve un valor
booleano indicando si se trata de un dígito o no
function esDigito (ch: char): boolean;
begin
esDigito:= (ch >= ‘0’) and (ch <= ‘9’)
end;
Desarrollo con
subprogramas
Código para devolución del valor de la función:
identificadorFuncion:= valor
Introducción a la Programación
Ingeniería Técnica en Informática de Gestión
4.30
Ejemplo
Tema 4
Introducción:
Subprogramas
Procedimientos
Funciones
Alcance y
visibilidad
Desarrollo con
subprogramas
{Comprobar si un carácter es un dígito 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 carácter: ‘);
readln(mi_char);
En este punto se ejecuta
if esDigito(mi_char) then
la función esDigito y se le
writeln(‘Es un dígito’)
pasa el valor de mi_char.
else
writeln(‘No es un dígito’) Al final, esDigito(mi_char)
será un valor booleano, que
end. (* p.p. *)
es compatible con lo que
espera la instrucción IF en
ese punto
Introducción a la Programación
Ingeniería Técnica en Informática de Gestión
4.31
Otro ejemplo
Tema 4
Introducción:
Subprogramas
Procedimientos
Funciones
Alcance y
visibilidad
Desarrollo con
subprogramas
{Mostrar los días 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(‘Días: ’, diasMes(mes))
end. (* p.p. *)
Introducción a la Programación
Ingeniería Técnica en Informática de Gestión
4.32
Usando bien la variable de salida
Tema 4
Introducción:
Subprogramas
function producto (X, Y : integer) : integer;
{Calcula X * Y mediante sumas}
Procedimientos
Funciones
Alcance y
visibilidad
Desarrollo con
subprogramas
var
I, prod : integer ;
Si se van a realizar cálculos
intermedios, es recomendable
trabajar primero sobre una
variable local
begin
prod:=0;
for I:=1 to X do
prod : = prod + Y; {sumamos Y X veces}
producto := prod;
end;
Al final se realiza la asignación de la variable local a
la variable de salida (que tiene como identificador del
nombre de la función)
Introducción a la Programación
Ingeniería Técnica en Informática de Gestión
Procedimientos anidados
Tema 4
Introducción:
Subprogramas
 Dentro de los subprogramas se pueden definir otros
subprogramas
Imprimir mensaje
Procedimientos
Funciones
Imprimir HOLA
Líneas 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, más abajo en el código)
Introducción a la Programación
Ingeniería Técnica en Informática de Gestión
4.34
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.35
Alcance y visibilidad de variables y constantes
Tema 4
Introducción:
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
declaración
 Regla de visibilidad
 Si dos identificadores con igual nombre tienen alcance en una
determinada zona del programa, en dicha zona sólo 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 declaración en los que el identificador no se redeclara
Introducción a la Programación
Ingeniería Técnica en Informática de Gestión
4.36
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.37
Estilo de programación
Tema 4
Introducción:
Subprogramas
Procedimientos
Funciones
Alcance y
visibilidad
Desarrollo con
subprogramas
 Los subprogramas deben documentarse igual que debe
hacerse con el resto del programa:
 Documentación de programas
 Objetivo
 Entrada/salida (interacción con el usuario)
 Puede incluir también otra información relevante, tal como
algoritmos que implementa, fecha de creación, fecha de la
última modificación, nombre del/de los programador(es),
etc.
 Documentación de subprogramas
 Objetivo
 Entrada/salida (interacción con el usuario)
 Datos aceptados, devueltos y aceptado y devueltos
posiblemente modificados
Introducción a la Programación
Ingeniería Técnica en Informática de Gestión
4.38
Estilo de programación
Tema 4
Introducción:
Subprogramas
Procedimientos
Funciones
function diasMes (m: integer): integer;
{------Objetivo: Obtiene el número de días de un mes
Acepta: El número entero que representa al mes (m); m  [1,12]
Devuelve: El número de días del mes
-------}
begin
...
end;
Alcance y
visibilidad
Desarrollo con
subprogramas
procedure mostrar (n, v: integer);
{------Objetivo: Visualiza un número entero un cierto número de veces
Acepta: El número entero a mostrar (n) y el número de veces que se
muestra (v)
Salida (pantalla): Tantas líneas como veces se quiere mostrar el
número; cada línea contiene el número
-------}
var
...
begin
...
end;
Introducción a la Programación
Ingeniería Técnica en Informática de Gestión
4.39
Diseño descendente
Tema 4
Introducción:
Subprogramas
 Tratamiento de los problemas mediante refinamientos
sucesivos (descomposición del problema en subproblemas
cada vez más pequeños)
Procedimientos
Funciones
Alcance y
visibilidad
Desarrollo con
subprogramas
 Ejemplo: Diseñar y escribir un programa que haga
operaciones de conversión de cantidades hasta que el
usuario decida que no quiere hacer más transformaciones




Centímetros a pulgadas (e inversa)
Kilogramos a libras (e inversa)
Euros a pesetas (e inversa)
Grados centígrados a grados Fahrenheit (e inversa)
Introducción a la Programación
Ingeniería Técnica en Informática de Gestión
4.40
Primer diseño
Tema 4
Introducción:
Subprogramas
Procedimientos
Funciones
 Programa principal
 Repetir
 Elegir opción
 Ejecutar opción elegida
 Mostrar resultado
 Hasta que la opción elegida se distinta de cero
Alcance y
visibilidad
Desarrollo con
subprogramas
Introducción a la Programación
Ingeniería Técnica en Informática de Gestión
4.41
Primer refinamiento
Tema 4
Introducción:
Subprogramas
Procedimientos
Funciones
Alcance y
visibilidad
Desarrollo con
subprogramas
 Subprograma elegir_opcion
 Repetir
 Mostrar menú con las opciones
 Leer la opción elegida
 Hasta que la opción sea válida
 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 opción
 Ejecutar opción elegida
 Mostrar resultado
 Hasta que la opción elegida se distinta de cero
Introducción a la Programación
Ingeniería Técnica en Informática de Gestión
4.42
Segundo refinamiento
Tema 4
Introducción:
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 opción elegida con readln
 Hasta que la opción sea válida
Introducción a la Programación
Ingeniería Técnica en Informática de Gestión
4.43
Segundo refinamiento (cont)
Tema 4
Introducción:
Subprogramas
Procedimientos
Funciones
Alcance y
visibilidad
 Subprograma traducir_cms_pulgadas
 Pedir tipo de conversión (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
Introducción a la Programación
Ingeniería Técnica en Informática de Gestión
4.44
Tercer refinamiento
Tema 4
Introducción:
Subprogramas
Procedimientos
Funciones
Alcance y
visibilidad
Desarrollo con
subprogramas
 Subprograma pedir_tipo_conversion_cms_pulgadas
…
 Función calcular_pulgadas(cent: real) : real;
…
 Función calcular_cms(pulgadas: real) : real;
…
 Subprograma traducir_cms_pulgadas
 Pedir tipo de conversión (cms->pulgadas, pulgadas->cms)
 Pedir la cantidad original con readln
 Si cms->pulgadas
 Calcular_pulgadas
 Si no
 Calcular_cms
Introducción a la Programación
Ingeniería Técnica en Informática de Gestión
4.45
Descargar

Tema 4