Post on 23-Jan-2016
Funciones Definidas por el Programador
Prof. Flor NarcisoDepartamento de Computación
Escuela de Ingeniería de SistemasFacultad de Ingeniería
Universidad de Los Andes
Funciones Definidas por el Programador
• Nuestra primera función!!!!!
void main ( ){
cout << “Yo soy una funcion y mi nombre es main!!” << endl;
}
• Un programa en C++ consta de una o varias funciones.• Un programa siempre debe contener la función main.• La ejecución de un programa siempre comienza por la
función main.
Definición de una Función
tipo_resultado función nombre_función (lista_parámetros_formales)
Declaración_variables_locales
InicioConjunto de sentenciasdevolver expresión
fin_función
• El tipo del resultado (tipo de la función), la lista de parámetros formales, la declaración de variables locales y la sentencia devolver son opcionales.
• Una definición de una función no puede estar incluida en otra.
Sentencia Devolver
• Sentencia devolver expresión devuelve el valor del resultado de la ejecución de la función.
• El tipo de esta expresión debe ser el mismo que el tipo de la función definida en tipo_resultado.
• Si la función no tiene asociado un tipo_resultado entonces se omite la sentencia devolver. En otros lenguajes de programación a este tipo de funciones se les llama “procedimiento”.
Recordar!!!!
• Cuando se llama a una función desde alguna parte específica del programa, se ejecutan sus sentencias. Una vez ejecutada la función completa, se devuelve el control a la parte del programa desde donde se realizó la llamada.
• Generalmente una función devuelve un sólo valor, aunque se pueden escribir funciones que no devuelven ningún valor o que devuelven varios valores.
Definición de una Función: Ejemplo 1
Calcular el cuadrado de un número entero
entero función cuadrado (entero e)
Inicio devolver e * e
fin_función
tipo_resultado: entero
nombre_función: cuadrado
lista_parámetros_formales: e de tipo entero (parámetro de entrada)
Declaración_variables_locales: No hay variables locales
devolver: valor de e * e
Definición de una Función: Ejemplo 2
Dados tres números enteros, determinar cuál es el mayor
entero función mayor (entero x, entero y, entero z)
entero max
Inicio max = x Si (y > max) entonces
max = y fin_si
Si (z > max) max = z
fin_si devolver max
fin_función
tipo_resultado: entero
nombre_función: mayor
lista_parámetros_formales: x de tipo entero, y de tipo entero y z de tipo entero(parámetros de entrada)
Declaración_variables_locales: max de tipo entero
devolver: valor de max
Llamada a una Función
• Si la función es de un tipo determinado<var> = <nombre_función> (<lista de parámetros actuales>)
x = mayor(a, b + 1, 2)
• Si la función no tiene tipo asociado<nombre_función> (<lista de parámetros actuales>)
ordenar(x, y, z1)
• Dentro de una expresión<var> = E(x + <nombre_función>(<lista de parámetros actuales>))
y = mayor(a + factorial(b), b, c)
Llamada a una Función que no tiene Tipo Asociado
0. Inicio1. MiFuncion()2. OtraFuncion()3. Fin
MiFuncion ()
0. Inicio
……
n. fin_función
OtraFuncion ()
0. Inicio
……
m. fin_función
Llamadas a Funciones: Ejemplos
• F = factorial(5); // Funcion de un tipo determinado
• F = factorial(a)/factorial(a - b); // Funcion de un tipo
// determinado
• if (esBisiesto(anyo) == cierto) // Dentro de una condición
• MiFuncion(); // Funcion que no tiene tipo asociado
Llamadas a Funciones: Ejemplo 1
Calcular x2 + y2/(x-y)2
entero función cuadrado (entero e)
Inicio devolver e * efin_función
0. Inicio1. Escribir (“Introduzca los valores de x y y”)2. Leer (x, y)3. Resultado = (cuadrado(x) + cuadrado(y))/cuadrado(x - y)4. Escribir (“Resultado =”, Resultado)5. Fin
Llamadas a Funciones: Ejemplo 1
Calcular x2 + y2/(x-y)2
Para x = 5, y = 4Resultado = (cuadrado(5) + cuadrado(4))/cuadrado(1)
1) entero cuadrado (entero e) devolver 5 * 5 = 25Resultado = (25 + cuadrado(4))/cuadrado(1)
2) entero cuadrado (entero e) devolver 4 * 4 = 16Resultado = (25 + 16)/cuadrado(1)
3) entero cuadrado (entero e) devolver 1 * 1 = 1Resultado = (25 + 16)/1 = 41
5
4
1
Llamadas a Funciones: Ejemplo 2
entero función mayor (entero x, entero y, entero z)
entero maxInicio max = x Si (y > max) entonces
max = y fin_si
if (z > max) max = z
fin_si devolver max;fin_función
0. Inicio1. Escribir (“Introduzca los valores
de a, b y c”)2. Leer (a, b, c)3. P = mayor (3, 4, 6)4. Q = mayor (a, b, c);5. R = mayor (a + 1, b, 1)6. S = mayor (P, Q, R)7. Escribir (“mayor =”, S)8. Fin
Definición de una Función en C++
<tipo_función> <nombre_función> (<lista_parámetros_formales>)
{
<Declaración_variables_locales>
<Sentencias>
return <expresión>
}
Cuerpo de la función
Encabezado de una Función en C++
<tipo_función> <nombre_función> (<lista_parámetros_formales>)
void main ( )
Tipo_función (no tiene)
Nombre_función
No hay parámetros formales
Encabezado de una Función en C++
• El tipo void se usa para indicar que la función no devuelve ningún valor, o que no existen parámetros formales.
void function (void) // No devuelve valor y no // tiene parámetros formales
• Cada parámetro formal debe ser declarado.
int F2 (int a, int b, char c) // La funcion F2 devuelve un valor entero// Tiene tres parametros formales// Dos enteros a y b, uno caracter c
Cuerpo de una Función en C++
• Declaración de variables locales.• Código ejecutable (conjunto de sentencias).
Ejemplo int F2 (int a, int b){ // Declaración de variables locales int c; // Codigo ejecutable c = a*a; c += b; return c; // Sentencia muy importante!!!!}
Sentencia Return
Sentencia que devuelve el valor obtenido como resultado de la ejecución de una función.
Ejemploint cuadrado (int e) {
return e * e;}
Funciones en C++: Ejemplo 1
entero función mayor (entero x, entero y, entero z)
entero max
Inicio max = x Si (y > max) entonces
max = y fin_si
Si (z > max) max = z
fin_si devolver maxfin_función
int mayor (int x, int y, int z) {
int max = x;
if (y > max)max = y;
if (z > max)max = z;
return max;}
Algoritmo Codificación
Funciones en C++: Ejemplo 2
// Funcion factoriallong int factorial (int n) {
long int f;int i;
f = 1;i = 0;while (i < n){
i++;f = f * i;
}return f;
}
x = factorial(4)
n = 4 2 < 4 ?f = 1 n = 4i = 0 f = 6
0 < 4 ? i = 3n = 4 3 < 4 ?f = 1 n = 4i = 1 f = 24
1 < 4 ? i = 4n = 4 4 < 4 ? f = 2 return 24i = 2
Codificación Corrida en frío
Funciones en C++: Ejemplo 3#include <iostream.h>
int a; // a es global
void f1 (int b, int c){ int k; // k es local
k = b * b;cout << “k = ” << k << endl;a = k + c; // a es globalcout << “a = “ << a << endl;
}
void f2 (int b, int c)// b y c diferentes a las de f1{ int k; // k local diferente
// a la de f1k = b + 2;cout << “k = “ << k << endl;a = k * a * c; // a globalcout << “a = ” << a << endl;
}void main () {
f1(1,2);a++;f2(3,4);
}
Funciones en C++: Ejemplo 4
// Calcular los cuadrados de los enteros del 1 al 10
#include <iosream.h>
int cuadrado (int e) {return e * e;
}
void main () {int x;
for (x = 1; x <= 10; x++)cout << cuadrado(x) << endl;
}
Funciones en C++: Ejemplo 5
// Convertir un caracter en minuscula a // mayuscula
#include <iosream.h>#include <ctype.h>
int minusc_mayusc (int c1) {
int c2;c2 = toupper(c1);return c2;
}
void main () {
int may, min, x;
for (x = 1; x <= 10; x++){ cout << “Introduzca una
letra minuscula” << endl; cin >> min; may = minusc_mayusc(min); cout << may << end;}
}
Prototipos de Funciones en C++
• En los ejemplos descritos anteriormente, las funciones definidas por el programador siempre han precedido a la función main.
• Cuando la función main precede a las funciones definidas por el programador se utilizan prototipos.
<tipo_función> <nombre_función> (tipo_param_1, … , tipo_param_n);
Funciones en C++: Ejemplo 1
#include <iostream.h>
void Pas( void ); // Prototipo de la
// funcion Pasvoid EscribirMiVar( void );// Prototipo// de la funcion EscribirMiVar
int gMiVar = 10; //gMiVar es global
void main( ){
// Llamada a una funcion dentro// de otraPas();
}
void Pas( void ){
// Llamada a una funcion dentro// de otraEscribriMiVar();
}void EscribirMiVar( void ){
cout << "gMiVar = " << gMiVar << endl;}
Funciones en C++: Ejemplo 2
#include <iostream.h>
void Pas(int); // Prototipo de la funcion // Pas
void EscribirMiVar(int); // Prototipo // de la funcion EscribirMiVar
void main( ){
int miVar = 10;
// Llamada a una funcion dentro// de otraPas(miVar);
}
void Pas(int miVar){
// Llamada a una funcion dentro// de otraEscribriMiVar(miVar);
}
void EscribirMiVar(int miVar){
cout << ”miVar = " << miVar << endl;
}
Ejercicios
• Explicar el significado de cada uno de los siguientes prototipos de funciones:
int f(int);double f1(double, int);char f2(void)
• Escribir una llamada a apropiada para cada una de las siguientes funciones:float formula(float x) void escribir(int a, int b){ { float y; int c; y = 3 * x - 1; c = sqrt(a * a + b * b); return (y); cout << “c = “ << c << end;} }
Ejercicios
• Escribir una función (algoritmo y codificación) que reciba como parámetro un número y devuelva como resultado un valor de tipo lógico que indique si el número es o no par.
• Escribir una función (algoritmo y codificación) que reciba como parámetro dos números y devuelva como resultado un valor de tipo lógico que indique si el primer número es múltiple del segundo.
• Utilizando la función factorial, escribir una función (algoritmo y codificación) que calcule el número combinatorio dado por la fórmula siguiente: n!
m! x (n - m)!
Ejercicios
• Escribir una función (algoritmo y codificación) que reciba los valores de x y n como parámetros de entrada y devuelva el valor de xn como salida.
• Escribir una función (algoritmo y codificación) que imprima la pirámide 1
121 12321 1234321
La declaración de la función será la siguiente:void piramide (int niveles)
Siendo niveles el número de filas de la pirámide (en el ejemplo 4).
Ejercicios• Escribir una función de nombre Siguiente tal que, recibiendo un
número primo mayor que uno, devuelva el número primo inmediatamente siguiente y superior a dicho número primo. Por ejemplo, si se invoca Siguiente(7), la función devolverá el número 11.
• Escriba una función que reciba como parámetros las dos coordenadas cartesianas (x, y) de un punto del plano y devuelva como resultado un número del 1 al 4 que indique el cuadrante al cual pertenece al punto (no considere los ejes de coordenadas).
• Escribir una función que reciba como parámetros de entrada dos instantes de tiempo expresados en horas, minutos y segundos y devuelva como resultado un 1 o un 2según el primer instante de tiempo sea anterior al segundo o viceversa.
Ejercicios• Sea el siguiente programa incompleto:
#include <iostream.h>
void main (void){ int x1, x2, suma; cout << “Introduce dos valores: ” << endl;
cin >> x1 >> x2;suma = suma_intervalo (x1, x2);cout << “La suma de los valores del intervalo es:” << suma << endl;
}
Completar el programa escribiendo la función suma_intervalo que calcula la suma de todos los números enteros comprendidos entre los dos parámetros de entrada, ambos inclusive.
Ejercicios
• Escribir una funciónvoid maxmin (int x1, int x2, Pint max, Pint min);
que reciba como parámetros de entrada dos números enteros x1 y x2 y devuelva a través de los parámetros de salida max y min el máximo y el mínimo, respectivamente, de ambos números.
• Modificar la función anterior para que calcule también el valor medio de ambos números. El nuevo prototipo de la función será ahora el siguiente:
void maxmin (int x1, int x2, Pint max, Pint min, Pint media);
• Escribir una función cuyo prototipo es:Logico esLetra (char c);
que reciba como parámetro de entrada un carácter y devuelva un valor lógico Cierto si dicho carácter es una letra del alfabeto, y Falso en caso contrario.