Fandom

Scratchpad

PLE:Unidad4

216,226pages on
this wiki
Add New Page
Discuss this page0 Share

Ad blocker interference detected!


Wikia is a free-to-use site that makes money from advertising. We have a modified experience for viewers using ad blockers

Wikia is not accessible if you’ve made further modifications. Remove the custom ad blocker rule(s) and the page will load as expected.

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:

#include <iostream>
using namespace std;

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

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:

#include <iostream>
using namespace std;

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.

#include <iostream>
using namespace std;

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.

Prototipos

El prototipo de una función es una declaración de la función en la que mostramos el tipo devuelto, el nombre de dicha función y los parámetros. El prototipo de una función sirve para informar al compilador de la existencia de una función que será definida mas adelante. El prototipo de una función puede aparecer dentro de un fichero fuente C++, o en un fichero de cabecera que será incluído mediante la directiva "#include". No es necesario especificar el nombre de los parámetros en la declaración del prototipo.

Ejemplo:

int prototipo(int, int);

Parámetros con valores por defecto

Es posible especificar valores por defecto para los parámetros de una función. Para ello basta indicar un valor mediante el operador de asignación "='.

Ejemplo:

int funcion(int x=1, int y=2);

Los parámetros por defecto permiten especificar el valor tomado por un parámetro en caso de que no se pase un valor durante la llamada.

...
n = función(1) // el segundo parámetro toma el valor 2
...


Sobrecarga de funciones

En C++ se permite que varias funciones compartan un mismo nombre (identificador), siempre y cuando el número o tipo de los argumentos sean distintos.

#include <iostream>
using namespace std;

int mayor(int a, int b)
{
	return a > b ? a : b;
}

char mayor(char a, char b)
{
	return a > b ? a : b;
}


El compilador sabe la función a la que debe llamar dependiendo del número y tipo de argumentos utilizado.

Funciones en linea (inline)

La declaración de una función en linea provoca que el compilador coloque el código de la función en el punto en el que se lleva a cabo la llamada. Esto no afecta en absoluto al comportamiento de la función, pero supone una mejora notable de rendimiento, puesto que no es necesario llevar a cabo el salto hasta el código de dicha función. En realidad una función en linea es equivalente a una macro. Se suelen utilizar para funciones con pocas líneas de código, con la intención de mejorar la velocidad de ejecución del programa.

Ejemplo:

inline tipo nombre( argumentos ... ) { instrucciones ... }


Para llamar a una función en linea lo hacemos del mimos modo que la llamada a cualquier otra función.

Recursividad

La recursividad consiste en la llamada de una función a sí misma. La recursividad es una herramienta muy poderosa, pero debe ser utilizada con cuidado. Al igual que ocurre con los bucles, cuando hacemos uso de la recursividad debemos prever la condición de salida. Veamos un ejemplo típico. La funció factorial, que hemos visto con antarioridad, puede ser definida de forma recursiva, tal como se muestra a continuación:

n! = n * (n-1) * (n-2) * (n-3) ... * 1

debemos tener en cuenta que el factorial de 0 es 1. Por lo tanto esta será la condición de salida de la función factorial.

// factorial
#include <iostream>
using namespace std;

long factorial(long a)
{
	if (a > 1)
		return (a * factorial (a-1));
	else
		return (1);
}

void main()
{
	long num;
	cout << "Introduzca un numero: ";
	cin >> num;
	cout << num << "! = " << factorial(num);
}

Parámetros en la función main

Es posible especificar parámetros en la función main. Los parámetros son especificados en la línea de llamada. Por ejemplo si disponemos de un programa que muestra en pantalla el contenido de un fichero de texto sería interesante pasarle el nombre del fichero a visualizar. Para ello usamos la singuiente sintáxis:

muestra fichero.txt

Para acceder a los argumentos debemos declararlo en la función main:

int main(int argc, char **argv);

El primero es de tipo entero y nos indica el número de parámetros de la linea de comandos. El segundo es un array de cadenas que contiene los parámetros especificados en la llamada. Debe tenerse en cuenta que el primer parámetro será el nombre del programa, en el ejemplo anterior el primer parámetro sería "muestra" y el segundo "fichero.txt".

Ejemplo:

#include <iostream>
using namespace std;
 
void main(int argc, char **argv) 
{ 
	for(int i = 0; i < argc; i++) 
		cout << "parameto " << i << '\t' << argv[i] << endl; 
}

Biblioteca estandar de C++

La biblioteca estandar de C++ es una colección de funciones, clases, constantes, objetos y plantillas que extienden la funcionalidad del lenguaje. La bilioteca estandar de C++ incluye a la de C con algunoa variaciones, pero además agrega biliotecas nuevas. Las biliotecas se encuentran almacenadas en varios ficheros y para su uso se necesita incluir los ficheros de cabecera correspondientes.


Biblioteca de Entrada y Salida mediante streams

Esta bilioteca permite llevar a cabo operaciones de entrada y/o salida mediante el uso de strems. Esta bilioteca proporciona un conjunto de clases que nos permitira efectuar entrada y salida a y desde un dispositivo tal como un disco, el taclado o la pantalla. Dentro de esta bibioteca nos encontramos nos encontramos los objetos cin y cout.

Biblioteca estandar de C

Como hemos mencionado antes, C++ incluye la biblioeca estandar de C que provee infinidad de funciones y macros para diversas propositos, desde entrada y salida de datos, memoria dinamica, covension de tipo, cadenas etc... Los ficheros de cabecera a incliur se han cambiado de nombre en C++ agregándoles la letrace y omitiendo la extensión; así , por ejemplo el fichero de cabecera <stdio.h>, pasa a denominarse <cstdio>

cassert Funcion de diagnóstico
cctypeFunciones de caracteres
cerrnoErrores
cfloatLimites y rangos de números reales
climitsLimites y rangos de numeros enteros
clocaleParámetros locales
cmathFunciones numéricas
csetjmpSaltos no locales
csignalSeñales
cstdargSoporte de argumentos variables
cstddefMacros y definiciones de tipos
cstdioEntrada y salida estandar
cstdlibUtilidades general
cstringCadenas de C
ctimeFunciones para hora y fecha

cctype - Funciones de caracteres

isalnumNos indica si un caracter es alfanumerico
isalphaNos indica si un caracter es alfabetico
iscntrlNos indica si un caracter es un caracter de control
isdigitNos indica si un caracter es un dígito decimal
isgraphNos indica si un caracter tiene representación gráfica
islowerNos indica si un caracter es minúscula
isprintNos indica si un caracter es imprimible
ispunctNos indica si un caracter es caracte de puntuación
isspaceNos indica si un caracter es un espacio en blanco
isupperNos indica si un caracter es mayúscula
isxdigitNos indica si un caracter es un dígito hexadecimal
tolowerConvierte un carácter a minúscula
toupperConvierte un carácter a mayúscula

climits - Limites y rangos de números enteros

NombreDescripciónValor
CHAR_BITNúmero de bis pos caracter8
SCHAR_MINValor mínimo de un caracter-127
SCHAR_MAXValor máximo de un caracter127
UCHAR_MAXValor máximo de un caracter sin signo255
CHAR_MINValor mínimo de un caracterSCHAR_MIN o 0
CHAR_MAXValor máximo de un caracterSCHAR_MAX o UCHAR_MAX
MB_LEN_MAXMáximo número de bytes de un caracter multibyte1
SHRT_MINValor mínimo de un entero sin signo-32767
SHRT_MAXValor máximo de un entero sin signo32767
USHRT_MAXValor máximo de un entero corto sin signo65535
INT_MINValor mínimo de un entero-32767
INT_MAXValor máximo de un entero32767
UINT_MAXValor máximo de un entero sin signo65535
LONG_MINValor mínimo de un entero largo-2147483647
LONG_MAXValor máximo de un entero largo2147483647
ULONG_MAXValor máximo de un entero largo sin signo4294967295

cmath - Funciones numéricas

Funciones trigonométricas
cosCoseno
sinSeno
tanTangente
acosArco coseno
asinArco seno
atanArco tangente
atan2Arco tangente (dos parámetros)
Trigonometría hiperbólica
coshCoseno hiperbólico
sinhSeno hiperbólico
tanhTangente hiperbólica
Logaritmos y exponentes
expExponencial de x (e^x)
frexpValor normalizado de un real
ldexpGenera un número real a partir de uno normalizado
logLogaritmo natural
log10Logaritmo en base 10
modfPArte en dos un número real, extrayendo la parte entera y la decimal
Potencia
powPotencia
sqrtRaíz cuadrada
Redondeo
ceilRedondea un real por arriba
fabsValor absoluto
floorRedondea por abajo un real
fmodResto de la división

cstdio -Entrada y salida estandar.

printfSalida estandar formateada
scanfEntrada estandar formateada
getchar Lee una caracter
getsLee una cadena
putcharEscribe un caracter
putsEscribe una cadena

cstdlib - Utilidades general

Conversiones de cadena
atofConvierte cadena a real
atoiConvierte cadena a entero
atolConvierte cadena a entero largo
strtodConvierte cadena a entero
strtolConvierte cadena a entero largo
strtoulConvierte cadena a entero largo sin signo
Números aleatorios
randGenera número aleatorios
srandIinicializa el generador de números aleatorios
Entorno
abortAborta la ejecución del progrma
atexitFija una función de salida que será llamada al finalizar el programa
exitTermina la ejecución del programa
getenvObtiene una cadena con el valor de una variable de entorno
systemEjecuta un comando

cstring - Cadenas de C

strlenLongitud de una cadena
strcpyCopia una cadena
strcatConcatena dos cadenas
strcmpCompara dos cadenas
strchrLocaliza una carácter en una cadena

ctime - Funciones para hora y fecha

clockTics trasnscurridos desde el inicio de la ejecución del programa
difftimeDiferencia en segundos entre dos variables de tiempo
timeNúmero de segundos transcurridos desde las 00:00 del 1/1/1970
ctimeConvierte time a cadena

Biblioteca de cadenas (C++)

Esta bilioteca provee una clase para manipular cadenas agregando funcionalidad y simplificando su uso con respecto a las cadenas de c.

Biclioteca estandar de plantillas - Standard Template Library (STL)

La STL proporciona un conjunto de clases parametrizadas (plantillas) para el almacenamiento y maniupulación de datos. Se incluyen contenedores, iteradores y algoritmos que simplifican el trabajo con tipos de daros diversos. Entrelos contenedores se incluyen:

  • Vectores
  • Listas
  • Pilas
  • Colas
  • Conjuntos y multiconjuntos
  • Mapas y multimapas


Ejercicios

  1. Crea una función que calcule X elevado a Y (Calcula X^Y).Solución.
  2. Crea una función que calcule el mayor de dos números enteros.Solución.
  3. Crea una función que calcule el menor de dos números enteros.
  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). Solución.
  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:
    1. roundToInteger ( number)
    2. roundToTenth ( number)
    3. roundTOHundredth ( number)
    4. roundToThousandth ( number)
    5. 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.
  6. Escriba una función que presente en el margen izquierdo de la pantalla un cuadrado de asteriscos cuyo lado esté especificado por un parámetro de tipo entero. Solución.
  7. Modifique la función del ejercicio anterior para formar el cuadrado con el carácter contenido en un parámetro de tipo caracter.
  8. Modifica la función anterior para que permita desplazar el cuadrado por la pantalla utilizando las teclas de movimiento cursor.
  9. Crea un programa que muestre la tabla de multiplicar de todos los numeros comprendidos entre dos cantidades. Solución.
  10. Dadas dos cantidades especificadas por teclado muestra en cada fila las x primeras potencias.
  11. Dadas dos cantidades especificadas por teclado muestra en cada fila la lista de divisores de cada número.
  12. Dadas dos cantidades especificadas por teclado muestra en cada fila los numeros primos inferiores a él.
  13. Dadas dos cantidades especificadas por teclado muestra en cada fila los numeros pares inferiores a él.
  14. Crea un programa que simule el funcionamiento de una calculadora.
  15. Crea una función que intercambie el valor de dos variables.
  16. Crea un programa que lea un caracter y nos informe del tipo de caracter que se trata, haciendo uso de las funciones de la bilioteca estandar <ctype> Solución.
  17. Crea un programa que permita convertir caracteres en minusculas y en mayúsculas.
  18. Crea un programa que muestre el resultado de las funciones trigonométricas incluídas en la bilioteca estándar <cmath> Solución.
  19. Usando la función para generar números aleatorios, muestra en pantalla una secuencia de caractéres aleatorios. Solución.
  20. Crea un programa quinielístico que genere 15 resultados aleatorios con la siguiente proporción: 1 (48%), X (26%), 2 (26%)
  21. Simula un cielo estrellado en la pantalla del ordenador mediante la mediante los símbolos "." (punto) * (asterisco) " " (blanco)
  22. Crea un programa que mediante un menú nos permita ejecutar: La calculadora, El bloc de notas y Paint.
  23. Crea un programa que lea un caracter de teclado y mida el tiempo transcurrido en la lectura.
  24. Crea un programa que visualice una reloj digital mostrando la hora actual a intervalos regulares de 1 segundo.
  25. Crea un programa que permita leer una cadena, un entero y un real usando las funciones de entrada y salida de la biblioteca estandar de entrada y salida de c (stdio). Solución.
  26. Juego adivina un numero entre 1..100 en 10 intentos.
  27. Versión recursiva de la multiplicación a*b = a+(a*(b-1)).
  28. Versión recursia de la suma a+b = a+(a+(b-1)).

Also on Fandom

Random wikia