Está en la página 1de 48

Subprogramas

Funciones y Procedimientos
2
ÍNDICE
• Introducción
• Tipos de subprogramas
• Procedimientos
• Funciones
• Declaración y llamada de subprogramas propios: conceptos básicos
• Declaración de subprogramas propios
• Declaración de Procedimientos
• Declaración de Funciones
• Identificadores locales y globales
• Parámetros
• Tipos de parámetros
• Parámetros formales y parámetros actuales
• Paso de Parámetros
• Criterios de selección
• Generación de números aleatorios
Introducción 3

• Subprograma:
parte autónoma del programa, que realiza una tarea específica y puede ser
llamada desde diferentes partes del programa

• Subprogramas escritos por otros:


ClrScr, WriteLn, Abs (x), Round (x), UpCase (c)…
• Subprogramas propios

• Ventajas:
• Reducción de código repetido a lo largo del programa
• Reutilización de código en múltiples programas
• División de un problema complejo en varios sencillos:
Programación Modular: divide y vencerás
• Mejor legibilidad

Subprogramas Informática 2022-2023


Introducción 4

Diseño de subprogramas
• Subprogramas claros y sencillos con una única misión
• Mostrar datos
• Leer datos correctos
• Realizar cálculos concretos sobre los datos. Ejemplo:
calcular la media
• …

Subprogramas Informática 2022-2023


Introducción 5

Formas de ver un de subprograma


• Desde Fuera LLAMADA
• Caja negra que realiza una tarea concreta
• Se necesita saber cómo utilizarlo
• Datos de Entrada y Salida – PARÁMETROS

• Desde Dentro DECLARACIÓN


• Cómo realiza la tarea para la que fue creado: Instrucciones

Subprogramas Informática 2022-2023


Introducción 6

CABECERA PROGRAM Nombre;

USES
(*Unidades*)
CONST
DECLARACIONES (*Constantes*)
Y DEFINICIONES FUNCTION/PROCEDURE
(*Declaración de Subprogramas*)
DATOS
VAR
(*Variables*)

BEGIN
SENTENCIAS: (*Sentencias*)
{Leer datos}
OPERACIONES CON LOS DATOS
{Llamadas a los subprogramas}
{Hacer operaciones}
{Mostrar resultados}
END.

Subprogramas Informática 2022-2023


7
ÍNDICE
• Introducción
• Tipos de subprogramas
• Procedimientos
• Funciones
• Declaración y llamada de subprogramas propios: conceptos básicos
• Declaración de subprogramas propios
• Declaración de Procedimientos
• Declaración de Funciones
• Identificadores locales y globales
• Parámetros
• Tipos de parámetros
• Parámetros formales y parámetros actuales
• Paso de Parámetros
• Criterios de selección
• Generación de números aleatorios
Tipos de subprogramas 8

Clasificación de los subprogramas:


• Procedimientos:
- Secuencia de instrucciones en función de unos parámetros (si existen)
- Cuando se utilizan o se llaman, aparecen como sentencias simples en los
programas

WriteLn (iValor); Procedimiento (escrito por otros)

• Funciones:
- Valor que se genera como resultado de la ejecución de una secuencia de
instrucciones en función de unos parámetros (si existen)
- Cuando se utilizan o se llaman, aparecen dentro de expresiones u operaciones

iRtdo := Abs (iValor); Función (escrita por otros)

Subprogramas Informática 2022-2023


9
ÍNDICE
• Introducción
• Tipos de subprogramas
• Procedimientos
• Funciones
• Declaración y llamada de subprogramas propios: conceptos básicos
• Declaración de subprogramas propios
• Declaración de Procedimientos
• Declaración de Funciones
• Identificadores locales y globales
• Parámetros
• Tipos de parámetros
• Parámetros formales y parámetros actuales
• Paso de Parámetros
• Criterios de selección
• Generación de números aleatorios
Declaración y llamada: conceptos básicos 10

DECLARACIÓN
• Se define el funcionamiento del subprograma
• Se indican los datos necesarios para su ejecución :
•Parámetros Formales
• Se compone de:
• Cabecera
• Sección de Declaraciones
• Sentencias

LLAMADA
• Sentencia que dispara la ejecución del subprograma
• Se pasan al subprograma los datos necesarios para la ejecución actual:
•Parámetros Actuales

Subprogramas Informática 2022-2023


Declaración y llamada: conceptos básicos 11

PROGRAM Nombre;
USES
CONST
TYPE
VAR
{Declaración de procedimientos y/o funciones}
PROCEDURE NombreProcedimiento (lista de parámetros formales);
… {Declaraciones y Código del procedimiento}
FUNCTION NombreFunción (lista de parámetros formales) : Tipo valor devuelto;
… {Declaraciones y Código de la función}
BEGIN

{Utilización o Llamada de procedimientos y/o funciones}
NombreProcedimiento (lista de parámetros actuales);
Variable_Resultado := NombreFunción (lista de parámetros actuales);

END.

Subprogramas Informática 2022-2023


Declaración y llamada: conceptos básicos 12
PROGRAM EjemploFuncionProcedure;
Ejemplo: Realizar
FUNCTION un programa
fniValorLeido que{Declaración
: Integer; pida dos números enteros por teclado que se encuentren
de función}
entreVAR
-1000 y 1000. Posteriormente, deberán intercambiarse esos dos números.
iValorLeido : Integer;
BEGIN
REPEAT
Write (‘Introduzca un valor entre -1000 y 1000: ’ );
ReadLn (iValorLeido);
UNTIL (iValorLeido >= -1000) AND (iValorLeido <= 1000);
fniValorLeido := iValorLeido;
END;

PROCEDURE Intercambiar (VAR iNum1, iNum2 : Integer); {Declaración de procedimiento}


VAR
iAux : Integer;
BEGIN
iAux := iNum1;
iNum1 := iNum2;
iNum2 := iAux;
END;
VAR {Declaración de VARIABLES del PROGRAMA PRINCIPAL}
iValor1, iValor2 : Integer;
{-------------------------------------PROGRAMA PRINCIPAL------------------------------}
BEGIN
iValor1 := fniValorLeido; {Llamada a función fniValorLeido}
iValor2 := fniValorLeido; {Llamada a función fniValorLeido}
Intercambiar (iValor1, iValor2); {Llamada a procedimiento Intercambiar}
END.
Subprogramas Informática 2022-2023
13
ÍNDICE
• Introducción
• Tipos de subprogramas
• Procedimientos
• Funciones
• Declaración y llamada de subprogramas propios: conceptos básicos
• Declaración de subprogramas propios
• Declaración de Procedimientos
• Declaración de Funciones
• Identificadores locales y globales
• Parámetros
• Tipos de parámetros
• Parámetros formales y parámetros actuales
• Paso de Parámetros
• Criterios de selección
• Generación de números aleatorios
Declaración de subprogramas propios 14

Declaración de las funciones propias


Declaraciones locales:
PROCEDURE Identificador (lista de Parámetros Formales) ;
solamente son conocidas
CONST dentro del procedimiento
{Declaración de constantes, si es necesario} Estructura igual a la de un
TYPE programa, excepto USES
{Declaración de tipos, si es necesario}
VAR
{Declaración de variables LOCALES, si es necesario} Caso más habitual

{Declaración de procedimientos y/o funciones, si es necesario}


PROCEDURE …
FUNCTION … …
PROCEDURE Identificador (lista de Parámetros Formales) ;
BEGIN
Sentencias; VAR
END; {Declaración de variables LOCALES, si es necesario}

BEGIN
Sentencias;
END;

Subprogramas Informática 2022-2023


Declaración de subprogramas propios 15

Declaración de las funciones propias


FUNCTION Identificador (lista de Parám. Form.) : Tipo_del_valor_devuelto ; Declaraciones locales:
solamente son conocidas
CONST
dentro del procedimiento
{Declaración de constantes, si es necesario}
TYPE Estructura igual a la de un
{Declaración de tipos, si es necesario} programa, excepto USES
VAR
{Declaración de variables LOCALES, si es necesario} Caso más habitual

{Declaración de procedimientos y/o funciones, si es necesario}


PROCEDURE …
FUNCTION …

BEGIN FUNCTION Identificador (lista de Parámetros Formales) : Tipo_del_valor_devuelto ;
Sentencias;
VAR
Identificador := valor; Identificador:=Valor;
END; {Declaración de variables LOCALES, si es necesario}

BEGIN
Sentencias;
Identificador:=Valor;
END;

Subprogramas Informática 2022-2023


Declaración de subprogramas propios 16

Declaración de las funciones propias


• El resultado de la función OBLIGATORIAMENTE debe asignarse al identificador de la función.
• Para no olvidarse de ello, declarar siempre una variable local del mismo tipo que Tipo_del_valor_devuelto
• La última sentencia de la función será: fnNombreFuncion := ValorDevolver;

NOTA: El identificador de la función solamente se puede utilizar para asignarle valores  ESCRITURA


FUNCTION fnNombreFuncion (lista de Parámetros Formales) : Tipo_del_valor_devuelto ;

VAR
{Declaración de variable LOCAL para almacenar el valor devuelto}
ValorDevolver : Tipo_del_valor_devuelto;

BEGIN

Sentencias donde se calcula y asigna valor a la variable ValorDevolver;

fnNombreFuncion := ValorDevolver; {Última sentencia de la función}

END;

Subprogramas Informática 2022-2023


17
ÍNDICE
• Introducción
• Tipos de subprogramas
• Procedimientos
• Funciones
• Declaración y llamada de subprogramas propios: conceptos básicos
• Declaración de subprogramas propios
• Declaración de Procedimientos
• Declaración de Funciones
• Identificadores locales y globales
• Parámetros
• Tipos de parámetros
• Parámetros formales y parámetros actuales
• Paso de Parámetros
• Criterios de selección
• Generación de números aleatorios
Identificadores locales y globales 18

Ámbito de un identificador
Región del programa en el que está definido dicho identificador y, por tanto, se puede
utilizar. Hay dos tipos de ámbitos:
• Global: identificadores definidos en la zona de declaraciones del programa principal.
Pueden ser referenciados tanto en el programa principal como en los subprogramas
definidos dentro de él.
• Local: identificadores definidos en la zona de declaraciones del subprograma. Pueden ser
referenciados tanto en el subprograma como en los subprogramas definidos dentro de él.

Aplicable a:
• Variables
• Funciones y procedimientos

Subprogramas Informática 2022-2023


Identificadores locales y globales 19
Variables locales y parámetros de los subprogramas
En cada llamada al subprograma, las variables y los parámetros solo tienen
memoria reservada asociada a dichos identificadores durante el tiempo de
ejecución de los subprogramas donde están declarados:
1. Creación de las variables locales y de las “variables” asociadas a los
parámetros formales.
2. Ejecución de las sentencias del subprograma
3. Destrucción de las variables locales
PROGRAM EjemploPasoValor;
{Declaración de función}
FUNCTION fnRdoSuma (iSumando1, iSumando2 : Integer) : Integer;
VAR
iRdoSuma : Integer;
BEGIN
iRdoSuma := iSumando1 + iSumando2; BEGIN
fnRdoSuma := iRdoSuma; WriteLn (‘Introducir 2 sumandos’);
END; ReadLn (iValor1, iValor2);
Write (‘El resultado de la suma es ‘);
VAR WriteLn ( fnRdoSuma (iValor1, iValor2));
iValor1, iValor2 : Integer; END.

Subprogramas Informática 2022-2023


Identificadores locales y globales 20
Ámbito de un identificador
Normas de acceso a las variables del programa:
1. Un subprograma tiene acceso a sus variables y a las de los subprogramas (o el programa
principal) que lo contienen*  EVITAR
2. Si entre las variables accesibles coinciden los nombres de algunas de las variables, el
subprograma tendrá acceso a la primera variable visible (desde el subprograma hacia los
subprogramas que lo contienen), es decir, las declaraciones internas o locales prevalecen
sobre las globales
PROGRAM P1; …
VAR FUNCTION SP3: Tipo_devuelto;
V1:Tipo_variable; V4: Tipo_variable;
FUNCTION SP1: Tipo_devuelto; BEGIN
VAR …;
V2: Tipo_variable; END; {Fin SP3}
PROCEDURE SP2; BEGIN
VAR …;
V1: Tipo_variable; END; {Fin SP1}
BEGIN BEGIN
…; …;
END; {Fin SP2} END; {Fin P1}

Subprogramas Informática 2022-2023
Identificadores locales y globales 21

Ámbito de un identificador
Acceso a las variables del programa:
Las variables accedidas dentro de un subprograma deben:
• o bien encontrarse en la zona de declaración local VAR
• o bien encontrarse definidas como parámetro formal

PROGRAM EjemploPasoValor;
VAR
iValor1, iValor2 : Integer;
{Declaración de función}
FUNCTION fnRdoSuma (iSumando1, iSumando2 : Integer) : Integer;
VAR
iRdoSuma : Integer; …
BEGIN BEGIN
iRdoSuma := iSumando1 + iSumando2; WriteLn (‘Introducir 2 sumandos’);
fnRdoSuma := iRdoSuma; ReadLn (iValor1, iValor2);
END; Write (‘El resultado de la suma es ‘);
… WriteLn ( fnRdoSuma (iValor1, iValor2));
END.

Subprogramas Informática 2022-2023


Identificadores locales y globales 22

Ámbito de un identificador
Normas de acceso a los subprogramas:
1. Un subprograma puede llamarse a sí mismo (llamada recursiva) y a los
subprogramas que lo engloban.
2. Un subprograma puede llamar a los subprogramas de su mismo nivel que
hayan sido declarados antes que él.
3. Un subprograma puede llamar a los subprogramas internos (declarados
dentro de él).

Subprogramas Informática 2022-2023


23
ÍNDICE
• Introducción
• Tipos de subprogramas
• Procedimientos
• Funciones
• Declaración y llamada de subprogramas propios: conceptos básicos
• Declaración de subprogramas propios
• Declaración de Procedimientos
• Declaración de Funciones
• Identificadores locales y globales
• Parámetros
• Tipos de parámetros
• Parámetros formales y parámetros actuales
• Paso de Parámetros
• Criterios de selección
• Generación de números aleatorios
Parámetros: tipos de parámetros 24
• Los subprogramas se comunican con el exterior (es decir, con otros subprogramas y/o con
el programa principal) mediante los PARÁMETROS
• Los parámetros pueden existir o no (según la labor que se quiera realizar en el subprograma
concreto)
PROGRAM Nombre;
USES
CONST
TYPE
VAR
{Declaración de procedimientos y/o funciones}
PROCEDURE nombreProcedure (lista de parámetros formales);
… {Declaraciones y Código del procedimiento}
FUNCTION nombreFunción (lista de parámetros formales) : Tipo valor devuelto;
… {Declaraciones y Código de la función}
BEGIN

{Llamada de procedimientos y/o funciones}
nombreProcedure (lista de parámetros actuales);
Variable_Resultado := nombreFunción (lista de parámetros actuales);

END.

Subprogramas Informática 2022-2023


Parámetros: tipos de parámetros 25

Clasificación de los PARÁMETROS:


• Entrada
- Datos que el subprograma necesita para poder hacer su labor
- Los recibe del programa que le llama o utiliza (de otro subprograma o del programa
principal)
- Las funciones solo deben tener parámetros de entrada
- Ejemplo: Write(‘Hola’, iValor, PI) ‘Hola’,iValor y PI son parámetros de entrada.

• Salida
- Variables donde se guardan resultados de la ejecución del subprograma
- Al hacer la llamada, el programa que le ha llamado le indica al subprograma en qué variable
o variables debe dejar el resultado de su ejecución.
- Ejemplo: ReadLn (iValor1)  iValor1 es parámetro de salida

Subprogramas Informática 2022-2023


Parámetros: tipos de parámetros 26

Clasificación de los PARÁMETROS:


• Entrada-Salida
- Variables cuya información necesita el subprograma para poder hacer su labor, y que es
posible que sean modificados dentro del subprograma, dando lugar a nuevos resultados
- Los recibe del programa que le llama (de otro subprograma o del programa principal), y se los
devuelve posiblemente modificados a ese mismo programa (subprograma o programa
principal)
- Ejemplo: Inc (cCar, 2);  cCar es un parámetro de entrada-salida; 2 es un parámetro de
entrada

Subprogramas Informática 2022-2023


Parámetros: tipos de parámetros 27

Posibilidades Parámetros de Parámetros de


entrada salida

Parámetros de Valor devuelto


entrada- salida por función
PROCEDIMIENTOS

FUNCIONES
Procedimiento

Procedimiento
Procedimiento Función

Procedimiento

Procedimiento

Procedimiento
Procedimiento Procedimiento Función

Subprogramas Informática 2022-2023


28
ÍNDICE
• Introducción
• Tipos de subprogramas
• Procedimientos
• Funciones
• Declaración y llamada de subprogramas propios: conceptos básicos
• Declaración de subprogramas propios
• Declaración de Procedimientos
• Declaración de Funciones
• Identificadores locales y globales
• Parámetros
• Tipos de parámetros
• Parámetros formales y parámetros actuales
• Paso de Parámetros
• Criterios de selección
• Generación de números aleatorios
Parámetros: formales y actuales 29

• Parámetros formales
• Parámetros que se indican en la cabecera de la DECLARACIÓN del subprograma
• Sirven para declarar CUÁNTOS DATOS de ENTRADA y/o SALIDA debe tener el
subprograma cuando se utilice, así como los TIPOS de cada uno de estos datos.
• Hay que indicar para cada parámetro: el modo, el nombre y el tipo de dato

PROCEDURE Nom_Proc (modo NombreFormal1 : Tipo1; …; modo NombreFormalN : TipoN) ;

FUNCTION Nom_Func (modo NombreFormal1 : Tipo1;…; modo NombreFormalN : TipoN) : TipoDevuelto;

• Modo*: paso por valor (-), paso por referencia (VAR) o paso por constante (CONST)

• Si los parámetros coinciden en modo y tipo se pueden agrupar:


PROCEDURE Nom_Proc (modo NombreFormal1, NombreFormal2 : Tipo12; …);

Subprogramas Informática 2022-2023


Parámetros: formales y actuales 30

• Parámetros actuales

• Parámetros de ENTRADA y/o SALIDA que deben pasarse y/o ser devueltos por el
subprograma en la LLAMADA a dicho subprograma, es decir, cuando se utiliza
dicho subprograma desde el programa principal o desde otro subprograma.
• NO hay que indicar el MODO ni el TIPO de dato
• Los parámetros actuales y formales deben coincidir en:
NÚMERO, POSICIÓN y TIPO

LLAMADA PROC nombreProcedure (Param_Actual1 , … , Param_ActualN);

LLAMADA FUNCIÓN Variable := nombreFunción (Param_Actual1 , … , Param_ActualN);

Subprogramas Informática 2022-2023


31
ÍNDICE
• Introducción
• Tipos de subprogramas
• Procedimientos
• Funciones
• Declaración y llamada de subprogramas propios: conceptos básicos
• Declaración de subprogramas propios
• Declaración de Procedimientos
• Declaración de Funciones
• Identificadores locales y globales
• Parámetros
• Tipos de parámetros
• Parámetros formales y parámetros actuales
• Paso de Parámetros
• Criterios de selección
• Generación de números aleatorios
Parámetros: paso de parámetros MODOS 32

Paso por Valor (-)


- Tipo de parámetro que se puede pasar por valor:
PARÁMETROS DE ENTRADA
- Parámetro formal: durante la ejecución del programa, el valor del parámetro
actual se copia en el parámetro formal. Dentro del subprograma, se permite
modificar el valor almacenado en el parámetro formal.

- Parámetro actual: expresión (constante, variable, función u operación) del mismo


tipo o tipo compatible con el del parámetro formal correspondiente.
* si el parámetro ACTUAL es una VARIABLE, el subprograma NO
puede modificar su valor

Subprogramas Informática 2022-2023


Parámetros: paso de parámetros MODOS 33

Paso por Valor (-)

PROGRAM EjemploPasoValor;
{Declaración de función}
FUNCTION fniRdoSuma (iSumando1, iSumando2 : Integer) : Integer;
VAR
iRdoSuma : Integer;
BEGIN
iRdoSuma := iSumando1 + iSumando2;
fniRdoSuma := iRdoSuma;
END;

VAR
iValor1, iValor2 : Integer;
{Programa Principal}
BEGIN
WriteLn (‘Introducir 2 sumandos’);
ReadLn (iValor1, iValor2);
WriteLn (‘El resultado de la suma es ‘, fniRdoSuma (iValor1, iValor2));
END.

Subprogramas Informática 2022-2023


Parámetros: paso de parámetros MODOS 34

Paso por Referencia VAR


-Tipo de parámetro que se puede pasar por referencia:
PARÁMETROS DE SALIDA
PARÁMETROS DE ENTRADA/ SALIDA
-Parámetro formal: durante la ejecución del programa, la dirección en
memoria del parámetro actual se copia en el parámetro formal.

-Parámetro actual: variable del mismo tipo del parámetro formal


correspondiente.
* el subprograma PUEDE modificar su valor

Subprogramas Informática 2022-2023


Parámetros: paso de parámetros MODOS 35

Paso por Referencia VAR


PROGRAM EjemploFuncionProcedure;

{Declaración de procedimiento}
PROCEDURE Intercambiar (VAR iNum1, iNum2 : Integer);
VAR
iAux : Integer;
BEGIN
iAux := iNum1;
iNum1 := iNum2;
iNum2 := iAux;
END;

VAR
iNumero1, iNumero2: Integer;
{Programa Principal}
BEGIN

Intercambiar(iNumero1, iNumero2);

END.

Subprogramas Informática 2022-2023


Parámetros: paso de parámetros MODOS 36

Paso por Constante CONST


- Tipo de parámetro que se puede pasar por constante:
PARÁMETROS DE ENTRADA*
- Parámetro formal: durante la ejecución del programa, la dirección en memoria del parámetro
actual se copia en el parámetro formal. Sin embargo, dentro del subprograma, NO se permite
modificar el valor almacenado en el parámetro formal ya que lo utiliza como si se tratase de una
constante.
-Parámetro actual: expresión (constante, variable, función u operación) del mismo tipo o tipo
compatible con el del parámetro formal correspondiente.
* si el parámetro ACTUAL es una VARIABLE, el subprograma NO puede
modificar su valor
- más eficiente que el PASO POR VALOR con datos de gran tamaño (arrays, registros)

Subprogramas Informática 2022-2023


Parámetros: paso de parámetros MODOS 37

Paso por Constante CONST

PROGRAM EjemploPasoValor;
{Declaración de función}
FUNCTION fniRdoSuma (CONST iSumando1, iSumando2 : Integer) : Integer;
VAR
iRdoSuma : Integer;
BEGIN
iRdoSuma := iSumando1 + iSumando2;
fniRdoSuma := iRdoSuma;
END;

VAR
iValor1, iValor2 : Integer;

BEGIN
WriteLn (‘Introducir 2 sumandos’);
ReadLn (iValor1, iValor2);
WriteLn (‘El resultado de la suma es ‘, fniRdoSuma (iValor1, iValor2));
END.

Subprogramas Informática 2022-2023


Parámetros: paso de parámetros MODOS 38

Resumen

Valor Referencia Constante


Indicador - VAR CONST
Tipo de Entrada Salida Entrada
Parámetr Entrada/Salida
o
Par. Se copia el contenido Se copia la dirección del En el subprograma el
Formal del p.actual en el p.actual en el p.formal. p.formal se considera una
p.formal Al operar sobre el constante por lo que no se
Las modificaciones del p.formal, realmente se puede modificar su valor
p.formal no se reflejan está operando sobre el
en el p.actual. p.actual
Par. Expresión Variable Expresión
Actual

Subprogramas Informática 2022-2023


39
ÍNDICE
• Introducción
• Tipos de subprogramas
• Procedimientos
• Funciones
• Declaración y llamada de subprogramas propios: conceptos básicos
• Declaración de subprogramas propios
• Declaración de Procedimientos
• Declaración de Funciones
• Identificadores locales y globales
• Parámetros
• Tipos de parámetros
• Parámetros formales y parámetros actuales
• Paso de Parámetros
• Criterios de selección
• Generación de números aleatorios
Criterios de selección 40

CRITERIOS DE SELECCIÓN

La selección depende de los Tipos de parámetros:

• SUBPROGRAMA QUE DEVUELVE UN ÚNICO VALOR


FUNCTION
• Puede necesitar o no parámetros de ENTRADA

• SUBPROGRAMA:
• sin parámetros (ni recibe ni devuelve)
• solo con parámetros de ENTRADA
• con más de un parámetro de SALIDA PROCEDURE
• con parámetros de ENTRADA y más de un parámetro de SALIDA
• con más de un parámetro ENTRADA-SALIDA
• con parámetros de ENTRADA, SALIDA y ENTRADA-SALIDA

Subprogramas Informática 2022-2023


41
ÍNDICE
• Introducción
• Tipos de subprogramas
• Procedimientos
• Funciones
• Declaración y llamada de subprogramas propios: conceptos básicos
• Declaración de subprogramas propios
• Declaración de Procedimientos
• Declaración de Funciones
• Identificadores locales y globales
• Parámetros
• Tipos de parámetros
• Parámetros formales y parámetros actuales
• Paso de Parámetros
• Criterios de selección
• Generación de números aleatorios
Generación de números aleatorios 42

RANDOM Y RANDOMIZE

• Subprogramas predefinidos en Pascal


• Permiten generar números aleatorios

RANDOMIZE
• PROCEDIMIENTO que inicializa el generador de números aleatorios
RANDOM
• FUNCIÓN que devuelve un número aleatorio
• Random; devuelve número aleatorio de tipo real entre 0.0 y 1.0
• Random (N);
• devuelve número aleatorio de tipo entero entre 0 y N-1
• N es de tipo Word (0..65535)

Subprogramas Informática 2022-2023


Generación de números aleatorios 43

RANDOM Y RANDOMIZE

{Generación de números aleatorios enteros entre 0 y 9}

PROGRAM EjemploAleatorios;

VAR
i: Integer;

BEGIN
Randomize;
FOR i := 1 TO 10 DO
Write (Random(10), ‘ , ‘);
END;

Subprogramas Informática 2022-2023


Generación de números aleatorios 44

RANDOM Y RANDOMIZE

{Número aleatorio entero entre 0 y 99}


iNumAleatorio := Random (100);

{Número aleatorio real en el intervalo [0.0, 1.0)}


rNumAleatorio := Random;

{Número aleatorio entero entre 1900 y 2006}


iNumAleatorio := 1900 + Random (2006 - 1900 + 1);

{Número aleatorio real entre -5 y 28.5}


rNumAleatorio := (28.5 - (-5)) * Random - 5;

{Letra aleatoria entre ‘a’ y ‘z’}


cLetraAleatoria := Chr(Random(Ord(‘z’) - Ord(‘a’) + 1) + Ord(‘a’));

Subprogramas Informática 2022-2023


Ejemplo 1 Subprogramas 45

PROGRAM EjemploWhile;
FUNCTION fniSeguir: Integer;
VAR
PROGRAM EjemploWhile;
iSeguir: Integer;
VAR
BEGIN
iSeguir : Integer;sumar números? Pulse 1 en caso afirmativo, y 0 en caso negativo: ' );
Write ('¿Desea
rSuma,
ReadLnrValor:
(iSeguir);Real;
Ejemplo: BEGIN
fniSeguir := iSeguir;
rSuma := 0;
Realizar un programa que sume los números END;
Write ('¿Desea sumar números? Pulse 1 en caso afirmativo, y 0 en caso negativo: ' );
VAR
(reales) introducidos por teclado. Para ello, se ReadLn
iSeguir : (iSeguir);
Integer;
deberá preguntar al usuario si desea seguir rSuma, rValor: Real;
sumando números en cada iteración. Al WHILE iSeguir = 1 DO
BEGIN
finalizar, deberá mostrarse el resultado en la BEGIN:= 0;
rSuma
pantalla. Write:=
iSeguir ('Introduzca
fniSeguir; nuevo valor a sumar ');
ReadLn
WHILE (rValor);
iSeguir = 1 DO
rSuma
BEGIN := rSuma + rValor;
Write ('¿Desea
('Introduzcasumar números?
nuevo 1 en caso afirmativo, y 0 en caso negativo: ’ ');
Pulse ');
valor a sumar
(iSeguir);
ReadLn (rValor);
END;
rSuma := rSuma + rValor;
WriteLn
iSeguir('El
:=resultado
fniSeguir;de la suma es ', rSuma : 0 : 2);
END.
END;
WriteLn ('El resultado de la suma es ', rSuma : 0 : 2);
END.
Ejemplo 2 Subprogramas 46

Ejemplo:
Realizar un programa que muestra un menú y
PROGRAM EjemploRepeat;
se asegure que un usuario introduce una opción
PROCEDURE ElegirOpcion (VAR iOpc: Integer);
válida
BEGIN
REPEAT
PROGRAM EjemploRepeat;
Write ('Introduzca su Opcion: ');
ReadLn (iOpc);
VAR
UNTIL (iOpc>= 1) AND (iOpc<= 3);
iOpc : Integer;
END;
VAR
BEGIN
iOpc : Integer;
WriteLn('----------MENU-------------');
BEGIN
WriteLn('1. Hacer una Suma');
WriteLn('----------MENU-------------');
WriteLn('2. Hacer una Resta');
WriteLn('1. Hacer una Suma');
WriteLn('3. Hacer una Multiplicación');
WriteLn('2. Hacer una Resta');
WriteLn;
WriteLn('3. Hacer una Multiplicación');
REPEAT
WriteLn;
Write ('Introduzca su Opcion: ');
ElegirOpcion (iOpc);
ReadLn (iOpc);
WriteLn('Ha elegido la opcion ',iOpc);
UNTIL (iOpc>= 1) AND (iOpc<= 3);
END.
WriteLn('Ha elegido la opcion ',iOpc);
END.
Ejemplo 3 Subprogramas 47

Ejemplo: Ejemplo:
Realizar una función que permita hacer el Realizar una función que permita elevar un número a
factorial de cualquier número. cualquier otro.

PROGRAM ElevarNumero;
PROGRAM Factorial;
FUNCTION fniElevar (iNum, iElevacion: Integer): Integer;
FUNCTION fniFactorial (iNum: Integer): Integer;
VAR
VAR
PROGRAM Factorial;
iResultado: LongInt;
iResultado, i: Integer;
VAR
i: Integer;
BEGIN
i, iResultado : Integer;
BEGIN
iResultado := 1;
BEGIN
iResultado := 1;
FOR i:= 1 TO
iResultado iNum DO
:= 1;
FOR i:= 1 TO iElevacion DO
FORiResultado
i := 1 TO 5:=DO iResultado*i;
iResultado := iResultado*iNum;
fniFactorial
iResultado:=:=iResultado;
iResultado*i;
fniElevar := iResultado;
END;
END.
END;
VAR
VAR
iResultado : Integer;
iResultado : LongInt;
BEGIN
BEGIN
iResultado := fniFactorial(5);
iResultado := fniElevar(5,5);
END.
END.
REFERENCIAS 48

 Apuntes de la asignatura Fundamentos de Informática, Fabián López.


 Transparencias de la asignatura Fundamentos de Informática, Isidro
Calvo
 Transparencias de la asignatura Informática, Eva Portillo

Subprogramas Informática 2022-2023

También podría gustarte