PLE:Unidad3

=Funciones= Una función es un conjunto de sentencias que puede ser ejecutado mediante una llamada desde la función "main" o desde otra función. El uso de funciones nos permite crear programas estructurados mas fáciles de entender y mantener relegando a las funciones determinadas tareas que de otro modo deberían ser resueltas en la función main.

La sintaxis de una función es:

tipo nombre( parametro1, parametro2, ...) { 	sentencia; }

Dónde:


 * tipo: Es el tipo de dato devuelto por la función, y que es opcional.
 * nombre: Es el identificador de la función.
 * parámetros: Los parámetros nos permiten pasar argumentos a una función y se definen indicando el tipo y un identificador. Los parámetros se separan mediante comas.
 * sentencia: Bloque de sentencias que forman el cuerpo de la función

Veamos un ejempo:

using namespace std;
 * 1) include

int suma(int a, int b) { int res; res = a + b; return r; }

void main { int n;  n = suma(5,3); cout << "La suma de " << n; }

Explicación: Como ya sabemos todo programa en C++ debe incluir una función llamada main. La ejecución del programa comienza siempre en la función main. En este ejemplo tenemos definida una segunda función llamada "suma". Desde la función main se produce una llamada en la siguiente línea:

n = suma(5,3);

En la llamada a la función se deben especificar entre paréntesis los argumentos pasados a la función. Los argumentos se deben corresponder en posición y tipo de datos con los declarados en la función. A continuación los valores de los argumentos (5 y 3) son copiados en sobre los parámetros de la función (a y b)

n = suma(   5 ,   3  );

|     |             |      |             v      v

int suma(int a, int b);

A continuación se ejecuta el código contenido dentro de la función. La última sentencia ejecutada dentro de la función es "return", que lleva a cabo el retorno de la función hasta el punto en el que se produjo la llamada. La sentencia "return" viene acompañada por un expresión cuyo valor es devuelto por la función.

return (8); |       |        v    _________ n = suma(5,3);

En este caso el resultado devuelto por la función será asignado a la variable n, luego será equivalente a:

n = 8;

=Paso de parámetros por valor y por referencia= En los ejemplo contemplados hasta ahora el paso de parámetros se lleva a cabo por valor. Esto significa que cuando se produce la llamada, el valor de los argumentos se copia sobre los parámetros de la función.

int x=5, y=3, z; z = suma(x,y);

Cualquier modificación que llevemos a cabo sobre los parámetros no afectará a los argumentos que le hemos pasado en la llamada, afectando exclusivamente a los parámetros.

Veamos el siguiente ejemplo:

using namespace std;
 * 1) include

int incrementa(int a) { int res; res = ++a; cout << "El valor de a es = " << a; return res; }

void main { int x = 3, y;  y = incremento(x); cout << "El valor de x es = " << x; cout << "El valor de y es = " << y; }

En este caso cuando se produce la llamada tenemos:

y = incrementa( x  );

|                |                 v

int incrementa(int a);

Sobre el parámetro "a" se copia el valor de "x", que es "3". A continuación se incrementa en uno el valor de a y se le asigna a "res", con lo que tenemos:

a = 4; res = 4;

Por último se lleva a cabo el retorno de la función:

return res; |       |        v     __________ y = incremento(x);

Finalmente a "y" se le asigna el valor 4, pero x sigue manteniendo su anterior valor (3).

Sin embargo hay situaciones en las que es deseable que desde la propia funciñon podamos modificar la variable original. En este caso utilizamos el paso de parámetros por referencia.

using namespace std;
 * 1) include

int incrementa(int &a) { int res; res = ++a; cout << "El valor de a es = " << a; return res; }

void main { int x = 3, y;  y = incremento(x); cout << "El valor de x es = " << x; cout << "El valor de y es = " << y; }

Todo lo que debemos hacer es anteponer al identificador de la variable el símbolo ampersand "&". En este caso el parámetro es una referencia de la variable pasada como argumento por lo que cualquier modificación sobre el argumento afecta a la variable original.

=Ejercicios=
 * 1) Crea una función que calcule X elevado a Y (Calcula X^Y)
 * 2) Crea una función que calcule el mayor de dos números enteros introducidos por teclado
 * 3) Crea una función que calcule el menor de dos números enteros introducidos por teclado
 * 4) Escribir una función que tome como argumento un valor entero y devuelva ese número pero con sus dígitos al revés (Ej. 1234 y devuelve 4321)
 * 5) La función floor también sirve para redondear números a cierta posición decimal. La instrucción:   y = floor( X * 10 + .5 ) / 10; redondea x a la posición de décimas (la primera posición a la derecha del punto decimal). La instrucción y = floor( x * 100 + .5 ) / 100; redondea x a la posición de centésimas (es decir, la segunda posición a la derecha del punto decimal). Escriba un programa que defina cuatro funciones que redondeen x de las siguientes maneras:
 * 6) roundToInteger ( number)
 * 7) roundToTentha ( number)
 * 8) roundTOHundredtho ( number)
 * 9) roundToThousandths ( number)
 * 10) Por cada valor que lea, su programa deberá imprimir la cifra original y el número redondeado al entero más próximo, a la décima más próxima, a la centésima más próxima y a la milésima más próxima.
 * 11) Escriba una función que presente en el margen izquierdo de la pantalla un cuadrado de asteriscos cuyo lado esté especificado en el parámetro entero side.
 * 12) Modifique la función del ejercicio anterior para formar el cuadrado con el carácter contenido en el de parámetro fillCharacter. Mover el cuadrado por la pantalla utilizando las teclas del cursor.
 * 13) Aceptar un número decimal por teclado y visualizar el número en binario.