funciones definidas por el programador prof. flor narciso departamento de computación escuela de...

32
Funciones Definidas por el Programador Prof. Flor Narciso Departamento de Computación Escuela de Ingeniería de Sistemas Facultad de Ingeniería Universidad de Los Andes

Upload: jose-maria-lozano-villanueva

Post on 23-Jan-2016

224 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Funciones Definidas por el Programador Prof. Flor Narciso Departamento de Computación Escuela de Ingeniería de Sistemas Facultad de Ingeniería Universidad

Funciones Definidas por el Programador

Prof. Flor NarcisoDepartamento de Computación

Escuela de Ingeniería de SistemasFacultad de Ingeniería

Universidad de Los Andes

Page 2: Funciones Definidas por el Programador Prof. Flor Narciso Departamento de Computación Escuela de Ingeniería de Sistemas Facultad de Ingeniería Universidad

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.

Page 3: Funciones Definidas por el Programador Prof. Flor Narciso Departamento de Computación Escuela de Ingeniería de Sistemas Facultad de Ingeniería Universidad

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.

Page 4: Funciones Definidas por el Programador Prof. Flor Narciso Departamento de Computación Escuela de Ingeniería de Sistemas Facultad de Ingeniería Universidad

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”.

Page 5: Funciones Definidas por el Programador Prof. Flor Narciso Departamento de Computación Escuela de Ingeniería de Sistemas Facultad de Ingeniería Universidad

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.

Page 6: Funciones Definidas por el Programador Prof. Flor Narciso Departamento de Computación Escuela de Ingeniería de Sistemas Facultad de Ingeniería Universidad

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

Page 7: Funciones Definidas por el Programador Prof. Flor Narciso Departamento de Computación Escuela de Ingeniería de Sistemas Facultad de Ingeniería Universidad

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

Page 8: Funciones Definidas por el Programador Prof. Flor Narciso Departamento de Computación Escuela de Ingeniería de Sistemas Facultad de Ingeniería Universidad

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)

Page 9: Funciones Definidas por el Programador Prof. Flor Narciso Departamento de Computación Escuela de Ingeniería de Sistemas Facultad de Ingeniería Universidad

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

Page 10: Funciones Definidas por el Programador Prof. Flor Narciso Departamento de Computación Escuela de Ingeniería de Sistemas Facultad de Ingeniería Universidad

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

Page 11: Funciones Definidas por el Programador Prof. Flor Narciso Departamento de Computación Escuela de Ingeniería de Sistemas Facultad de Ingeniería Universidad

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

Page 12: Funciones Definidas por el Programador Prof. Flor Narciso Departamento de Computación Escuela de Ingeniería de Sistemas Facultad de Ingeniería Universidad

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

Page 13: Funciones Definidas por el Programador Prof. Flor Narciso Departamento de Computación Escuela de Ingeniería de Sistemas Facultad de Ingeniería Universidad

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

Page 14: Funciones Definidas por el Programador Prof. Flor Narciso Departamento de Computación Escuela de Ingeniería de Sistemas Facultad de Ingeniería Universidad

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

Page 15: Funciones Definidas por el Programador Prof. Flor Narciso Departamento de Computación Escuela de Ingeniería de Sistemas Facultad de Ingeniería Universidad

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

Page 16: Funciones Definidas por el Programador Prof. Flor Narciso Departamento de Computación Escuela de Ingeniería de Sistemas Facultad de Ingeniería Universidad

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

Page 17: Funciones Definidas por el Programador Prof. Flor Narciso Departamento de Computación Escuela de Ingeniería de Sistemas Facultad de Ingeniería Universidad

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!!!!}

Page 18: Funciones Definidas por el Programador Prof. Flor Narciso Departamento de Computación Escuela de Ingeniería de Sistemas Facultad de Ingeniería Universidad

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;}

Page 19: Funciones Definidas por el Programador Prof. Flor Narciso Departamento de Computación Escuela de Ingeniería de Sistemas Facultad de Ingeniería Universidad

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

Page 20: Funciones Definidas por el Programador Prof. Flor Narciso Departamento de Computación Escuela de Ingeniería de Sistemas Facultad de Ingeniería Universidad

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

Page 21: Funciones Definidas por el Programador Prof. Flor Narciso Departamento de Computación Escuela de Ingeniería de Sistemas Facultad de Ingeniería Universidad

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);

}

Page 22: Funciones Definidas por el Programador Prof. Flor Narciso Departamento de Computación Escuela de Ingeniería de Sistemas Facultad de Ingeniería Universidad

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;

}

Page 23: Funciones Definidas por el Programador Prof. Flor Narciso Departamento de Computación Escuela de Ingeniería de Sistemas Facultad de Ingeniería Universidad

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;}

}

Page 24: Funciones Definidas por el Programador Prof. Flor Narciso Departamento de Computación Escuela de Ingeniería de Sistemas Facultad de Ingeniería Universidad

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);

Page 25: Funciones Definidas por el Programador Prof. Flor Narciso Departamento de Computación Escuela de Ingeniería de Sistemas Facultad de Ingeniería Universidad

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;}

Page 26: Funciones Definidas por el Programador Prof. Flor Narciso Departamento de Computación Escuela de Ingeniería de Sistemas Facultad de Ingeniería Universidad

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;

}

Page 27: Funciones Definidas por el Programador Prof. Flor Narciso Departamento de Computación Escuela de Ingeniería de Sistemas Facultad de Ingeniería Universidad

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;} }

Page 28: Funciones Definidas por el Programador Prof. Flor Narciso Departamento de Computación Escuela de Ingeniería de Sistemas Facultad de Ingeniería Universidad

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)!

Page 29: Funciones Definidas por el Programador Prof. Flor Narciso Departamento de Computación Escuela de Ingeniería de Sistemas Facultad de Ingeniería Universidad

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).

Page 30: Funciones Definidas por el Programador Prof. Flor Narciso Departamento de Computación Escuela de Ingeniería de Sistemas Facultad de Ingeniería Universidad

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.

Page 31: Funciones Definidas por el Programador Prof. Flor Narciso Departamento de Computación Escuela de Ingeniería de Sistemas Facultad de Ingeniería Universidad

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.

Page 32: Funciones Definidas por el Programador Prof. Flor Narciso Departamento de Computación Escuela de Ingeniería de Sistemas Facultad de Ingeniería Universidad

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.