Tema 6

Anuncio
FUNDAMENTOS DE INFORMÁTICA - APUNTES Y PRÁCTICAS
TEMA
6
SUBPROGRAMAS: PROCEDIMIENTOS Y FUNCIONES
DECLARACION DE TIPOS (TYPE)
En programación es frecuente que un determinado procedimiento de cálculo deba repetirse varias veces a lo
largo de un problema. Para reducir el trabajo de programación, todos los lenguajes disponen de la posibilidad de utilizar
subprogramas.
En general un subprograma es una parte autónoma del programa que realiza una misión perfectamente definida
y a la cual se puede ir desde cualquier parte del programa principal. Después de ejecutarse el subprograma el control
vuelve a la sentencia siguiente a la que llamó al subprograma. A un subprograma se le puede llamar cuantas veces sea
necesario.
La declaración de los subprogramas se hace después de la declaración de variables y antes del comienzo de
programa principal. Y la llamada a los subprogramas se hace desde el programa principal.
Los subprogramas no sólo tienen razón de ser cuando se está ante un procedimiento repetitivo, cada vez se
impone más la idea de que un programa es una cosa compleja de realizar y por tanto es importante que esté bien
estructurado y que sea lo más inteligible posible. Con este último enfoque, si un grupo de sentencias realiza una tarea
bien definida, entonces se justifica el aislarlas formando un subprograma aunque sólo se le llame una vez. Así es posible
ver el "programa principal" con esta forma:
BEGIN
Entrada_datos (
);
Calculos_matematicos (
Salida_datos (
);
);
END.
Cada subprograma cumple con una parte específica del programa principal, de modo que la corrección o
modificación del mismo sólo afecta a cada parte por separado y el mantenimiento del programa resulta más sencillo.
Existen dos tipos diferente de subprogramas, las funciones y los procedimientos . Los procedimientos son los
subprogramas en su sentido más general, mientras que las funciones son un tipo particular diferenciándose en la forma
de la llamada y en la forma de los parámetros que utiliza.
6.1.- FUNCIONES
Las funciones se diferencian de los procedimientos en lo siguiente:
1º
En la forma de la llamada; deben estar siempre dentro de una sentencia de salida o a la derecha de una
sentencia de asignación
2º
En la función pueden entrar tantos parámetros como sean necesario, pero la salida es siempre un solo dato. La
forma de declarar una función es la siguiente:
Montse Ferreira. Dpto. de Lenguajes y Sistemas Informáticos
TEMA 6 - pag.
1
FUNDAMENTOS DE INFORMÁTICA - APUNTES Y PRÁCTICAS
El cuerpo de la función se desarrolla como si de un
Function nombre ( parámetros:tipo ) : tipo_resultado ;
programa independiente se tratara, con su apartado de
<declaraciones locales de la función >
declaraciones si es necesario ( son declaraciones
begin
locales por lo tanto solo se podrán utilizar en esa
sentencia1;
función) y, encerradas en un bloque begin-end;, el
sentencia2;
conjunto de sentencias que la componen. El resultado
.............
que se obtiene en la parte ejecutable de la función y
sentenciaN;
que se desea enviar al programa principal debe ser
end;
asignado al nombre de la función. El nombre de la
función nunca podrá aparecer a la derecha de un sentencia de asignación o como componente de una expresión.
Ya hemos visto funciones incorporadas a la librería Pascal como pueden ser: abs(x), sin(x), cos(x), ln(x),
sqr(x) ... El ejemplo que se da a continuación es el desarrollo de una función no incorporada a la librería Pascal, como
es la función tangente.
function tang ( x:real) : real ;
begin
tang := sin(x) / cos(x) ;
end;
Veamos ahora como se realiza la llamada a una función desde el programa principal:
PROGRAM ejemplo1;
CONST k= 200;
VAR x,y,m,n,valor :real;
FUNCTION media ( a,b : real ) : real;
begin
media:= (a+b)/2;
end;
BEGIN {programa principal}
readln(x,y,m,n);
valor= k + media (x,y);
writeln(' El valor es = ' ,valor,' El nuevo valor es =' , media(m,n));
END.
6.2.- PROCEDIMIENTOS
Su diferencia con las funciones es que:
1º
Son llamados mediante sentencias de procedimiento, no como parte de otra sentencia.
2º
Pueden tener más de un resultado de salida o incluso ninguno.
La forma de declarar un procedimiento es la siguiente:
Procedure nombre ( parámetros:tipo ) ;
<declaraciones locales del procedimiento>
begin
sentencia1;
sentencia2;
.............
sentenciaN;
end;
Montse Ferreira. Dpto. de Lenguajes y Sistemas Informáticos
Los procedimientos, al igual que las funciones, se
declaran entre la declaración de variables y el comienzo
del programa principal.
El cuerpo del procedimiento se considera como un
programa autónomo pero ,a diferencia de las funciones,
el nombre del procedimiento no toma el valor de salida,
sino que serán los parámetros los que realicen esta tarea.
Los parámetros del procedimiento pueden ser de dos
TEMA 6 - pag.
2
FUNDAMENTOS DE INFORMÁTICA - APUNTES Y PRÁCTICAS
tipos, según su función de paso de información:
Parámetros valor, son los que únicamente se pueden utilizar para introducir datos en el procedimiento.
Parámetros variable, son los que podemos utilizar a la vez para entrada y salida de datos del procedimiento o
únicamente para salida de datos. Estos se diferencian de los anteriores porque en la declaración van precedidos de la
palabra VAR.
La forma de hacer la llamada a un procedimiento es invocando su nombre como si de una sentencia se tratara,
colocando entre paréntesis los parámetros correspondientes. En la llamada al procedimiento debe haber tantos
parámetros como en la ventana de la declaración del procedimiento. Cuando en la declaración del procedimiento
tengamos parámetros valor éstos podrán corresponderse en la llamada con constantes, variables o expresiones, pero
cuando en la declaración tengamos parámetros VAR éstos deberán corresponderse siempre en la llamada al
procedimiento con variables. Ejemplo:
Program ejemplo;
VAR xx:char; yy, zz, aa, bb: integer; cc:real;
PROCEDURE EjemploLlamadas (x:char; y,z:integer; VAR a,b:integer; VAR c:real );
begin
....................
end;
Posibles llamadas, desde el programa principal, al procedimiento EjemploLlamadas:
BEGIN {programa principal}
...........................
EjemploLlamadas (xx,yy,zz,aa,bb,cc);
EjemploLlamadas ( xx,2,124,aa,bb,cc):
EjemploLlamadas (‘T’,yy,81,aa,bb,cc);
.............................
END.
A los procedimientos no sólo se les puede llamar desde el programa principal. sino que la llamada se puede
hacer desde otro procedimiento siempre y cuando el procedimiento llamado esté declarado antes que el que efectúa la
llamada. Los procedimientos ofrecen dos ventajas:
1º.-
Mejoran la legibilidad del programa asignando un nombre a una tarea y, por tanto, clarificando su propósito.
2º.-
Acortan los programas (si es que el procedimiento se utiliza más de una vez), ya que evitan tener que escribir
repetidamente las correspondientes instrucciones.
CONCLUSIONES:
La diferencia esencial entre un procedimiento y una función es que la función obtiene un valor que puede ser
utilizado en una expresión, mientras que un procedimiento no tiene ningún valor asociado a su nombre.
Las funciones generalmente se utilizan para crear operaciones nuevas (o funciones) que no están incluidas en
el Pascal tradicional. Los procedimientos normalmente se utilizan para estructurar un programa y para mejorar su
claridad y generalidad.
Montse Ferreira. Dpto. de Lenguajes y Sistemas Informáticos
TEMA 6 - pag.
3
FUNDAMENTOS DE INFORMÁTICA - APUNTES Y PRÁCTICAS
PROGRAMAS EJEMPLO:
PROGRAM dibujo;
{Este programa dibuja un rectángulo de 10 columnas y 6 filas con el símbolo introducido por el usuario del
programa}
uses crt;
VAR caracter:char;
PROCEDURE rectangulo (simbolo:char; largo,ancho:integer);
var i,j:integer;
begin
for i:=1 to largo do
begin
for j:= 1 to ancho do
write( simbolo,' ');
writeln;
end; {for}
end; { fin del procedimient}
BEGIN {programa principal}
write ( 'Introduce un símbolo para dibujar el rectángulo ');
readln(caracter);
clrscr; {limpiar pantalla}
rectangulo (caracter, 6,10);
END.
PROGRAM multiplicar;
VAR
a :integer;
b,c,d : real;
PROCEDURE cubo ( dato: integer; VAR x,y,z : real);
begin
x:= x*x*x;
y:= y*y*y;
z := x*y*dato;
end;
BEGIN {programa principal}
write (' Introduce tres números');
readln(a,b,c);
cubo ( a,b,c,d);
writeln ('Los resultados son: ', b,c,d);
END.
6.3.- DECLARACION DE TIPOS
Existen dos tipos de datos: los predefinidos y los definidos por el usuario. Los tipos predefinidos son: enteros,
reales, carácter y booleano. Los tipos definidos por el usuario pueden ser: enumerados y subrango.
En la estructura general de un programa, la definición de tipos se realiza antes de la declaración de las
variables. El formato de la declaración es el siguiente:
TYPE
identificador = tipo ;
Montse Ferreira. Dpto. de Lenguajes y Sistemas Informáticos
TEMA 6 - pag.
4
FUNDAMENTOS DE INFORMÁTICA - APUNTES Y PRÁCTICAS
Los tipos enumerados se componen de una lista de identificadores encerrados entre paréntesis y separados por
comas. Las variables de tipo enumerado no pueden leerse desde teclado, ni escribirse en pantalla. Las únicas
operaciones que se pueden realizar con variables de tipo enumerado son las relacionales (de comparación) y las de
asignación. Se considera que un valor es mayor que otro si en la definición aparece más a la derecha que el otro.
Ejemplo:
PROGRAM ejemplo1;
TYPE diasemana = (lunes,martes,miercoles,jueves,viernes,sabado,domingo);
VAR
dia1,dia2: diasemana;
BEGIN
read(dia1); {MAL !!!}
dia1:= jueves;
dia2:=lunes;
write(dia2); {MAL !!!}
IF dia1> dia2 THEN
write(‘Mayor’)
ELSE
write(‘Menor’);
.....
END:
El tipo subrango es un subconjunto de un tipo ordinal1 que se declara indicando el primer y el último elemento
del conjunto. Ej.: TYPE dias = 1 . . 7 ;
letras = ‘A’ . . ‘L’ ;
VAR
d:dias; caracter: letra;
Utilidad de la declaración TYPE
En la declaración de un subprograma, los parámetros no pueden ser declarados directamente de tipo array,
string o de un tipo enumerado, sino que estos tipos deberán estar definidos globalmente
PROGRAM ejemplo2;
TYPE
d=array [1..10 ] of integer;
cadena= string[15 ];
VAR
datos : d;
nombre: cadena;
PROCEDURE empleado ( pdatos: d; VAR pnombre: cadena );
begin
..........
end; {fin del procedimiento}
BEGIN {programa principal }
.......
empleado ( datos,nombre );
.......
END.
1
Un tipo ordinal representa una secuencia ordenada de valores, a los que se les puede aplicar los conceptos de
predecesor y sucesor. Tipos ordinales son: entero, carácter, booleano y enumerado.
Montse Ferreira. Dpto. de Lenguajes y Sistemas Informáticos
TEMA 6 - pag.
5
FUNDAMENTOS DE INFORMÁTICA - APUNTES Y PRÁCTICAS
EJERCICIOS:
6.1.- La empresa DEFECTOS S.A., que fabrica cuatro tipos diferentes de piezas (A,B,C, y D), realiza cada día ocho
muestreos para controlar su producción. En cada muestreo determina, para cada tipo de pieza, el número de
defectos críticos, principales y secundarios encontrados.
Realizar un programa que, una vez leídos los datos de los muestreos realizados durante un día, nos permita obtener
los siguientes resultados:
1.- Tipo de pieza con mayor número total de defectos críticos. Idem para defectos principales y secundarios.
2.- Tipo de pieza y número del muestreo en el que se ha encontrado el mayor número de defectos críticos. Idem
para los defectos principales y secundarios.
3.- Para cada tipo de pieza número total de defectos encontrados al finalizar los ocho muestreos.
4.- Tipo de pieza con mayor número total de defectos.
5.- Para cada tipo de pieza , % de defectos críticos , % de defectos principales y % de defectos secundarios
encontrados en el conjunto de los ocho muestreos.
6.2.- Una empresa, que fabrica 10 tipos distintos de herramientas de corte, desea realizar un análisis de sus gastos y
beneficios correspondientes a un año. Los datos de que se dispone son los siguientes:
- Por cada mes y por cada tipo de herramienta, número de unidades fabricadas.
- Para cada tipo de herramienta, coste total de fabricación y precio de venta (suponemos que el coste de
fabricación y el precio de venta no varia durante todo el año).
Realizar un programa que, después de leer estos datos, nos calcule:
1.- Por cada mes, beneficios obtenidos con cada tipo de herramienta.
2.- Por cada mes, beneficio total obtenido.
3.- Beneficio total del año y media de los beneficios mensuales.
4.- Por cada tipo herramienta, número total de unidades producidas al año
5.- Tipo de herramienta de la que se han producido más unidades al año.
6.- Herramienta que más beneficios ha dado en total y herramienta de la que se ha obtenido menos beneficios.
6.3.- La Regresión Lineal es una técnica para determinar la “mejor” línea recta que pasa entre una serie de puntos que
siguen un comportamiento lineal. La ecuación para una línea recta puede expresarse como: y = a0 + a1 x
Determinar la línea recta nos permitirá predecir valores de y (variable dependiente) en función de x (variable
independiente).
Ecuación para determinar la pendiente : a1
a1 =
n∑n
i = 1
xiy i -
n∑n
i = 1
x
∑n
i = 1
xi
∑n
i = 1
Ecuación para calcular la ordenada al origen: a0
yi
ao =
2
2
- ( ∑n x i )
i
i = 1
∑n
i = 1
y i - a ∑n
x
1 i =1 i
n
Realizar un programa que :
1.- Utilice la regresión lineal para ajustar una línea recta a un conjunto de 6 pares de datos introducidos por teclado
y muestre en pantalla la ecuación resultante.
2.- Que permita estimar el valor de la variable dependiente (y), para una serie de valores introducidos por teclado
(máximo 4 ), y presente en pantalla una tabla con los resultados.
*El siguiente ejemplo puede ser utilizado para probar el programa:
Se realiza un experimento para definir la relación entre el esfuerzo aplicado y el tiempo de fractura para un acero
inoxidable, obteniéndose los siguientes resultados:
Esfuerzo aplicado xi , kg/mm2
Tiempo de fractura yi , h.
5
40
10
30
15
25
20
32
25
18
30
20
Mediante la regresión lineal se obtiene la línea recta:
y = 40,4 - 0,737 x
Por lo tanto el tiempo de fractura estimado para un esfuerzo aplicado de 33 kg/mm2 sería de 16,07 horas.
Montse Ferreira. Dpto. de Lenguajes y Sistemas Informáticos
TEMA 6 - pag.
6
FUNDAMENTOS DE INFORMÁTICA - APUNTES Y PRÁCTICAS
PRACTICA
UTILIZAR:
- SUBPROGRAMAS: PROCEDIMIENTOS Y FUNCIONES
- DECLARACIÓN DE TIPOS ( TYPE)
EJERCICIOS:
6.4.- Realizar un programa que ordene una secuencia de números enteros de menor a mayor por el método de la burbuja.
6.5.- Chafarín es una ciudad en la que las calles forman una red rectangular de 10 x 15 y se quiere averiguar cuál es el
cruce en el que se producen más accidentes. Para ello se cogen todos los partes de accidentes del último año y se
meten al ordenador (dándole las coordenadas de los cruces donde se han producido los accidentes (nº de calle, nº
de avenida)). El fin de accidentes se introduce con (0,0) como coordenadas del cruce. Los accidentes sólo se
producen en los cruces.
6.6.- Dada una frase que termina en un punto y con menos de 100 caracteres, realizar un programa que determine si es o
no palíndrome.
Ejemplo : Dabale arroz a la zorra el abad
6.7.- Los cabecillas de dos organizaciones de espionaje han descubierto que cierto número de sus agentes están en la
nómina de ambos grupos. Se va a llevar a cabo una reunión secreta para determinar las acciones a tomar contra los
dobles agentes. A la reunión están invitados los agentes que están en una única organización.
Diseñar un programa que, con los nombres de los agentes en nómina de cada una de las organizaciones, prepare
una lista de invitados a dicha reunión.
Cada lista de agentes acaba con un falso agente ZZZ.
6.8.- Preparar un programa que, conocida una lista de primeros platos, segundos platos y postres, con sus respectivas
calorías, genere diferentes menús de, a lo sumo 1.200 calorías. ( Se supone que todo menú ha de estar compuesto
de 1er plato, 2º plato y postre).
Montse Ferreira. Dpto. de Lenguajes y Sistemas Informáticos
TEMA 6 - pag.
7
FUNDAMENTOS DE INFORMÁTICA - APUNTES Y PRÁCTICAS
6.9. Confeccionar un programa que calcule el número de escaños que correspondería a cada partido de los que
intervienen en una confrontación electoral. Consultados los resultados electorales de las últimas elecciones, el
máximo número de partidos que concurrió, en una sola circunscripción electoral fue de 20. Este valor será definido
como constante al principio del programa. El programa deberá mostrar el porcentaje de votos y de escaños de cada
partido, por ejemplo:
PARTIDO
A
B
C
D
E
VOTOS
2.700
800
9.000
117
6.300
%VOTOS
14,27
4,23
47,57
0,62
33,30
ESC.
0
0
3
0
2
%ESC.
0
0
60
0
40
Para calcular el número de escaños de cada partido se procederá de la siguiente forma:
(Método D'HONT)
Se eliminarán los partidos cuyo porcentaje de votos sea inferior al 3%. Se dividirá el número de votos de
todos y cada uno de los partidos restantes, por los números naturales comprendidos entre 1 y el número de escaños
asignados a la circunscripción. De este modo se obtiene una serie de cocientes. Los escaños se asignan uno a uno y
sucesivamente a los partidos poseedores de los cocientes mayores, hasta asignar todos los escaños disponibles.
Ver el siguiente ejemplo:
En una circunscripción electoral hay que repartir 5 escaños entre los partidos A, B, C, D y E que han obtenido,
respectivamente, 2.700, 800, 9.000, 117, 6.300 votos. Seguiremos paso a paso las instrucciones anteriores:
DIVISOR
1
2
3
4
5
A
2.700
1.350
900
675
540
B
800
400
266
200
160
C
9.000 (1º)
4.500 (3º)
3.000 (5º)
2.250
1.800
D
-
E
6.300 (2º)
3.150 (4º)
2.100
1.575
1.260
De esta forma el partido C recibe 3 escaños (1º,3º y 5º) y el E recibe 2 escaños (2º y 4º).
Esquema para la resolución del programa:
1º
2º
3º
Leer datos: nº de escaños, nombres de los partidos, nº de votos obtenidos por cada partido.
Calcular el nº de escaños de cada partido: calcular los cocientes y asignar los escaños.
Presentar los resultados.
Montse Ferreira. Dpto. de Lenguajes y Sistemas Informáticos
TEMA 6 - pag.
8
Descargar