Descargar la presentación
La descarga está en progreso. Por favor, espere
1
2 Acciones y funciones 2.1 Concepto
Una acción o una función es un conjunto de instrucciones agrupadas a las que se da un nombre que permite referirse a ellas globalmente. La utilización de acciones y funciones hace que los programas sean mucho más cortos y sencillos. Suele ser útil construir acciones y funciones para representar frag- mentos de un algoritmo que se usan más de una vez dentro de un mismo algoritmo o que se repiten en distintos algoritmos.
2
2.2. Acciones y funciones Ejemplo de definición de una función:
función distancia(x, y: real): real devuelve (x2 + y2)1/2; ffunción Cuando un algoritmo utiliza una acción o una función decimos que el algoritmo llama (o invoca) a la acción o a la función correspondiente. Tanto las definiciones de las acciones y funciones como las llamadas a éstas en los algoritmos deben especificar sus parámetros. Los parámetros representan los da- tos que manipula el algoritmo implementado por la acción o la función correspon- diente. Ejemplos de llamadas: x := distancia(1,2); y := distancia(3,4);
3
El orden de los parámetros es importante
El orden de los parámetros es importante. Los parámetros utilizados en las llamadas a una función o a una acción deben escribirse en el mismo orden que los parámetros de su definición. f(x,y) = (x2 – y2)1/ f(3,2) = 51/ f(2,3) = (-5)1/2 Vamos a distinguir dos tipos de parámetros: Parámetros formales o simplemente parámetros: son los que se utilizan en la definición de una función o de una acción. Parámetros reales o argumentos: son los utilizados en las llamadas a una función o a una acción. En el ejemplo anterior “x” e “y” son parámetros formales, mientras 3 y 2 son parámetros reales. Cada llamada a una función o a una acción tiene unos parámetros reales distintos. z := f(3,2) los parámetros reales de esta llamada a la función f son 3 y 2. z := f(5,4) los parámetros reales de esta llamada a la función f son 5 y 4.
4
Los parámetros pueden clasificarse de acuerdo con otros criterios
Los parámetros pueden clasificarse de acuerdo con otros criterios. A continuación introducimos una segunda clasificación: Parámetros de entrada (ent): representan datos que necesita conocer el algo- ritmo. Su valor no se modifica durante la ejecución del algoritmo. Parámetros de salida (sal): representan los resultados del algoritmo. El algo- ritmo modifica su valor durante la ejecución de manera que reflejen los resul- tados obtenidos. Parámetros de entrada y salida (ent/sal): representan datos cuyo valor ini- cial es necesario para el algoritmo, pero cuyo valor queda modificado duran- te la ejecución de éste. Las acciones utilizan parámetros de estos tres tipos: entrada, entrada/salida y salida. Las funciones sólo utilizan parámetros de entrada y se caracterizan porque siempre devuelven un valor.
5
2.3. Definición de funciones
Las funciones se caracterizan porque sólo tienen parámetros de entrada y siempre devuelven un valor. En la definición de las funciones se especifica el tipo de valores que puede tomar cada parámetro y el tipo de valor que devuelve la función. Toda definición de una función contiene al menos una instrucción del tipo “devuelve expresión”. función Mínimo(x, y: entero): entero var r: entero fvar si x < y entonces r := x; si no r := y; fsi devuelve r; ffunción
6
función Factorial(n: entero): entero
var r, i: entero fvar r:=1; si n > 1 entonces para i:=2 hasta n hacer r := r*i; fpara fsi devuelve r; ffunción Ejemplos de llamadas correctas a estas funciones: algoritmo Minimo y tabla de factoriales var x, y, k, n: entero fvar Escribir(“Introduzca dos enteros: “); LeerEntero(x); LeerEntero(y); Escribir(“El mínimo es: “); EscribirEntero(Mínimo(x,y)); Escribir(“Introduzca un entero: “); LeerEntero(n); para k:=0 hasta n hacer Escribir(“El factorial de “); Escribir(k); Escribir(“ es “); Escribir(Factorial(k)); Escribir(‘\n’); falgoritmo
7
2.4. Definición de acciones
En la definición de las acciones se indica para cada parámetro si es de entrada (ent), salida (sal) o entrada/salida (ent/sal), el nombre del parámetro y el tipo de valores que puede tomar. acción saludo( ) Escribir(“Hola. ¿Qué tal?“); facción acción escribir_resultado(ent resultado: real) Escribir(“El resultado es “); EscribirReal(resultado); acción leer_real_positivo(sal x: real) LeerReal(x); mientras ( x < 0 ) hacer fmientras
8
acción intercambiar(ent/sal x, y: real)
var auxiliar: real fvar auxiliar := x; x := y; y := auxiliar; facción Ejemplos de llamadas correctas a estas acciones: algoritmo var x, y: real fvar x=2; y=3; saludo( ); escribir_resultado(x+y); leer_real_positivo(y); Escribir(“x = “); EscribirReal(x); Escribir(“ y = “); EscribirReal(y); intercambiar(x,y); falgoritmo
9
Ejemplo: Algoritmo que utiliza acciones y funciones.
algoritmo Máximo par de una lista de N números positivos. const N: entero = 10 fconst var x, máximo: real; i, contador : entero fvar máximo:=0.0; contador=0; para i:=1 hasta N hacer leer_real_positivo(x); si par(x) entonces contador := contador + 1; máximo := max(máximo,x) fsi fpara si (contador > 0) entonces Escribir(“El máximo número par introducido es “); Escribir(máximo); si no Escribir(“No se ha introducido ningún número par.”); falgoritmo
10
acción leer_real_positivo(sal número: real)
LeerReal(número); mientras número < 0 hacer fmientras facción función max(a, b: real): real var resultado: entero fvar si a > b entonces resultado := a; si no resultado := b; fsi devuelve resultado; ffunción función par(a: real): booleano devuelve ( RealAEntero(a) mod 2 = 0);
11
Acciones y funciones en C
Las acciones y funciones se definen después del programa principal (i.e., main). En C se distinguen dos tipos de parámetros, en lugar de los tres tipos (entrada, salida y entrada-salida) que se consideran en la notación algorítmica. Parámetros que se pasan por valor: la función o acción trabaja con una copia de ellos y no modifica su valor. Parámetros que se pasan por variable o referencia: la acción trabaja con una referencia (tipo&) a la variable original y modifica realmente su valor. Estos parámetros se marcan con el símbolo & detrás del tipo en la primera línea de la definición de una acción y en su prototipo. El prototipo de una acción o función se coloca en la cabecera del programa, antes de la definición de main. Los prototipos de las distintas acciones y funciones que se usan en un programa se escriben en líneas separadas y se recomienda que apa- rezcan en el mismo orden que las definiciones de las acciones y funciones.
12
Definición de funciones
Es necesario preceder la definición de una función con una declaración del tipo de valor que devuelve la función. La expresión “devuelve exp;” que aparece siempre en el cuerpo de una función, se traduce por “return exp;”. Las variables locales se definen en primer lugar, antes que las instrucciones de la función. función Mínimo(x, y: real): real var resultado: real fvar si x < y entonces resultado := x si no resultado := y fsi devuelve resultado ffunción double Minimo(double x, double y) { double resultado; if (x < y) {resultado = x;} else {resultado = y;} return resultado; } El prototipo de una funcción se obtiene sustituyendo “{“ por “;” en la primera línea de su definición: double Minimo(double x, double y);
13
función Factorial(n: entero): entero
var r, i: entero fvar r:=1; si n > 1 entonces para i:=2 hasta n hacer r:=r*i; fpara fsi devuelve r; ffunción int Factorial(int n) { int r=1, i; if (n > 1) { for (i=2; i <= n; i++) { r = r*i; } return r;
14
#include <stdlib.h>
#include <iostream> using namespace std; int factorial(int n); /* Prototipo*/ int main (void) { int i, N; cout << “Este programa escribe la tabla de los N primeros factoriales” << endl; cout << “Introduzca N: “; cin >> N; for (i=0; i<N; i++) { cout << “El factorial de “ << i << “ es “ << factorial(i) << endl; } /* Llamada */ system(“pause”); } int factorial(int n) { /* Definición */ int r=1, i; if (n > 1) { for (i=2; i <= n; i++) { r = r*i; } return r;
15
Definición de acciones
En la definición de una acción se utiliza la palabra clave void para indicar que no devuelve ningún valor. acción escribir_resultado(ent resultado: real) Escribir(“El resultado es “); EscribirReal(resultado); facción void escribir_resultado(double resultado) { cout << “ El resultado es “ << resultado; } Los parámetros que se pasan por variable o referencia se indican utilizando el sím- bolo & después de su tipo en la cabecera de la acción y en su prototipo, pero no en el cuerpo de la acción ni en las llamadas a ésta. acción leer_real_positivo(sal x: real) Escribir(“Numero positivo: ”); Leer(x); mientras ( x < 0 ) hacer fmientras facción void leer_real_positivo(double& x) { cout << “Numero positivo: ”; cin >> x; while (x<0) { cout << “Numero positivo: “; cin << x; }
16
Los parámetros que se pasan por variable o referencia se indican utilizando el sím-
bolo & después de su tipo en la cabecera de la acción y en su prototipo, pero no en el cuerpo de la acción ni en las llamadas a ésta. acción intercambiar(ent/sal x, y: entero) var auxiliar: entero fvar auxiliar := x; x := y; y := auxiliar; facción void intercambiar(int& x, int& y) { int auxiliar; auxiliar = x; x = y; y = auxiliar; } Las variables locales se definen en primer lugar, antes que las instrucciones de la ac- ción. El prototipo de una acción se obtiene sustituyendo “{“ por “;” en la primera línea de su definición: void intercambiar(int& x, int& y);
17
Si una acción no tiene parámetros se indica colocando la palabra clave void en lugar
de éstos en su definición. acción saludo( ) Escribir(“Hola. ¿Qué tal?“); facción void hello(void) { cout << “Hola!”; }
18
Utilización de las acciones y funciones
Las funciones o acciones pueden ser utilizadas en la función principal (i.e., main) de un programa o en otras acciones y funciones definidas dentro del programa siempre que sus prototipos se hayan declarado antes de la definición de main. Cuando esto ocurre se dice que existe una llamada a la función o acción correspon- diente. Una llamada a una función o acción simplemente contiene el nombre de la función o acción seguido de los parámetros reales a los que se quiere aplicar. Ilustramos la utilización de acciones y funciones con una implementación en C del algoritmo que calcula el máximo número par de una lista de N números positivos. #include <stdlib.h> #include <iostream> #define N 10 using namespace std; /* Prototipos de las funciones y acciones utilizadas en el programa. */ void leer_real_positivo(double& x); bool par(double x); double max(double x, double y);
19
int main(void) { double numero, maximo=0.0; int i, contador=0; for (i=1; i <= N; i++) { leer_real_positivo(numero); if ( par(numero) ) { contador++; maximo = max(maximo, numero); } if (contador > 0) { cout << “El maximo numero par introducido es “ << maximo << endl; } else { cout << “No se ha introducido ningún número par.” << endl; system(“pause”);
20
void leer_real_positivo(double& x) {
cout << endl << “Introduzca un numero positivo: “; cin >> x; while ( x<0 ) { } bool par(double x) { return ( (int)x % 2 == 0 ); double max(double x, double y) { double resultado; if ( x>y ) { resultado=x; } else { resultado=y; return resultado;
Presentaciones similares
© 2025 SlidePlayer.es Inc.
All rights reserved.