Beruflich Dokumente
Kultur Dokumente
Una funcin est formada por un conjunto de sentencias que realizan una
determinada tarea y que podemos invocar mediante un nombre.
Un programa C++ est formado por una o ms funciones.
Utilizando funciones podemos construir programas modulares. Adems consiguen
que no se repita el mismo cdigo en varias partes del programa: en lugar de
escribir el mismo cdigo cuando se necesite, por ejemplo para validar una fecha, se
hace una llamada a la funcin que lo realiza.
Todo programa C++ tiene una funcin llamada main. La funcin main es el punto
de entrada al programa y tambin el punto de salida.
La estructura general de una funcin es la siguiente:
[tipo_devuelto] nombre_funcion([tipo parametro1][, tipo parametro2][, ....])
{
// instrucciones
[return valor;]
}
Los elementos que aparecen entre corchetes son opcionales.
Despus del nombre de la funcin y siempre entre parntesis puede aparecer una
lista de parmetros, tambin llamados argumentos, separados por comas. Estos
parmetros se conocen como parmetros formales.
Los parmetros formales son los datos que recibe la funcin para operar con
ellos. Una funcin puede recibir cero o ms parmetros. Se debe especificar para
cada parmetro su tipo.
Una funcin puede devolver un dato a quien la ha llamado. Esto se realiza mediante
la instruccin return. El tipo del dato devuelto debe coincidir con el tipo_devuelto
que se ha indicado antes del nombre de la funcin.
Ejemplo de funcin C++ : funcin que sume dos nmeros enteros
int calcular_edad(int da, int ma, int aa, int dn, int mn, int an)
{
int edad = aa - an;
if(ma < mn)
edad--;
else if(ma == mn and da < dn)
edad--;
return edad;
Responder
2.
Responder
Respuestas
1.
2.
Programacin en C++/Funciones
< Programacin en C++
Estructuras Streams
Contenido
[ocultar]
1Definiendo una funcin
2Parmetros
4Funciones anidadas
7Parmetros constantes
10Parmetros estructurados
11Funciones sobrecargadas
Una funcin es un conjunto de lneas de cdigo que realizan una tarea especfica y puede
retornar un valor. Las funciones pueden tomar parmetros que modifiquen su
funcionamiento. Las funciones son utilizadas para descomponer grandes problemas en
tareas simples y para implementar operaciones que son comnmente utilizadas durante un
programa y de esta manera reducir la cantidad de cdigo. Cuando una funcin es invocada
se le pasa el control a la misma, una vez que esta finaliz con su tarea el control es
devuelto al punto desde el cual la funcin fue llamada.
<tipo> [clase::] <nombre> ( [Parmetros] )
{
cuerpo;
}
Nota: aunque para la funcin que veremos el tipo de retorno coincide con el tipo de
parmetro pasado, algunas veces las cosas pueden cambiar, es decir, no es obligatorio
que una funcin reciba un parmetro de un tipo y que tenga que regresar una respuesta de
dicho tipo.
Parmetros[editar]
Normalmente, las funciones operan sobre ciertos valores pasados a las mismas ya sea
como constantes literales o como variables, aunque se pueden definir funciones que
reciban parmetros. Existen dos formas en C++ de pasar parmetros a una funcin; por
referencia o por valor. El hecho es que si en una declaracin de funcin se declaran
parmetros por referencia, a los mismos no se les podr pasar valores literales ya que las
referencias apuntan a objetos (variables o funciones) residentes en la memoria; por otro
lado, si un parmetro es declarado para ser pasado por valor, el mismo puede pasarse
como una constante literal o como una variable. Los parmetros pasados por referencia
pueden ser alterados por la funcin que los reciba, mientras que los parmetros pasados
por valor o copia no pueden ser alterados por la funcin que los recibe, es decir, la funcin
puede manipular a su antojo al parmetro, pero ningn cambio hecho sobre este se
reflejar en el parmetro original.
Al poner a prueba las funciones cuadrado() y cuadrado2() se podr verificar que la primera
de estas no cambia el valor del parmetro original, mientras que la segunda s lo hace.
Bajo ciertas circunstancias se desear escribir funciones que no regresen valor alguno
(esto sera algo parecido a escribir procedures en Pascal) y para ello podemos declarar a
la funcin como void. La palabra reservada void es utilizada para declarar funciones sin
valor de retorno y tambin para indicar que una funcin especfica no requiere de
parmetros. Por ejemplo, la funcin pausa() que se ver en seguida, no devolver valor
alguno y la misma no requiere de parmetros.
Notas: se debe de aclarar que el uso de la palabra void dentro de los parentesis es
opcional al momento de declarar una funcin. As, la funcin pausa() podra haberse
declarado como void pausa(), y la misma puede invocarse como: pausa();.
Funciones anidadas[editar]
A diferencia de Pascal, el lenguaje C, C++ no permite anidar funciones, sin embargo,
dentro de una funcon puede existir la llamada a una o ms funciones declaradas
previamente, que determinara en cierto punto un resultado para que sea ejecutado cuando
el programador lo desee.
Nota: observe que en la sintaxis para declarar funciones tipo puntero se debe de poner el
smbolo * despues del tipo y antes del nombre de la funcin que se est declarando. Esto
se puede ver en el programa, ya que la funcin binstr se declara como: char
*binstr(unsigned int);
#include <iostream>
#include <string.h>
// declaracin de prototipo
char *binstr(unsigned int);
// punto de prueba
int main()
{
int n = 128;
cout << "decimal = " << n << ", binario = " << binstr(n) << endl;
cin.get();
}
strcpy(buffer, "0");
if (n > 0) {
while (n > 0) {
buffer[i] = ( n & 1 ) + '0';
i++;
n >>= 1;
}
buffer[i] = '\0';
strrev(buffer);
} // fin (n > 0)
return buffer;
}
Parmetros constantes[editar]
Los parmetros usados por una funcin pueden declararse como constantes ( const ) al
momento de la declaracin de la funcin. Un parmetro que ha sido declarado como
constante significa que la funcin no podr cambiar el valor del mismo ( sin importar si
dicho parmetro se recibe por valor o por referencia ).
Ejemplo:
Para ver un ejemplo ms, vamos a considerar el caso de la funcin binstr() del programa
funciones01. Ahora, vamos modificar dicha funcin, salvo que esta ocasin nos interesa
que la misma sirva para convertir nmeros decimales en cadenas numricas y cuya base
de conversin sea pasada como parmetro. Es decir, la funcin de la que estamos
hablando podr convertir nmeros decimales a: binario, octal, decimal, hexadecimal, etc.; y
la nica condicin ser que la base indicada est entre el 2 y el 36, inclusive.
#include <iostream>
#include <stdlib.h>
// declaracin de prototipo
char *numstr(unsigned int, const int base = 10);
// punto de prueba
int main()
{
int n = 128;
cout << "decimal = " << n << ", binario = " << numstr(n, 2) <<
endl;
cout << "decimal = " << n << ", octal.. = " << numstr(n, 8) <<
endl;
cin.get();
}
// definicin de funcin numstr()
// nota: esta funcion requiere de la librera stdlib.h
char *numstr(unsigned int n, const int base)
{
static char buffer[65];
itoa(n, buffer, base);
return buffer;
}
ambas reciben un puntero o referencia a un objeto de tipo entero, por lo tanto cualquiera
de las funciones del ejemplo puede cambiar el valor de la variable entera apuntada por X,
la diferencia radica en la forma en que cada una de las mismas lleva cabo la tarea. Si en la
funcin puntero() en lugar de usar *X = 100; se usara X = 100; se le asignara 100 al
puntero X, ms no al objeto apuntado por X, y esto podra ser la causa de que el programa
se terminara de manera abrupta.
Parmetros estructurados[editar]
Al igual que cualquier otro tipo los parmetros de tipo estruturado pueden pasarse por
valor o por referencia, sin embargo, podra ser que si una estructura es pasada por valor el
compilador mostrara una advertencia ( warning ) indicando que se pasado por valor una
estructura, puesto que el paso de estructuras por valor es permitido usted puede ignorar la
advertencia, pero lo mejor es pasar estructuras por referencia. Si una estructura es pasada
por valor y si esta es muy grande podria ser que se agotara la memoria en el segmento de
pila ( Stack Segment ), aparte de que la llamada a la funcin sera ms lenta.
struct empleado {
char nombre[32];
int edad;
char sexo;
};
Ahora, pensemos que deseamos escribir una funcin para imprimir variables del
tipo empleado. As, la funcin puede escribirse de las tres maneras siguientes:
Funciones sobrecargadas[editar]
C++, a diferencia del C estndar, permite declarar funciones con el mismo nombre y a esto
se conoce como sobrecarga de funciones. Las funciones sobrecargadas pueden
coincidir en tipo, pero al menos uno de sus parmetros tiene que ser diferente. En todo
caso, si usted trata de declarar funciones sobrecargadas que coincidan en tipo y nmero
de parmetros el compilador no se lo permitir. Para poner un ejemplo vamos a considerar
el caso de dos funciones cuyo nombre ser divide, ambas regresarn el cociente de dos
nmeros, salvo que una de ellas operar sobre nmeros enteros y la otra lo har sobre
nmeros reales ( de punto flotante ).
Nota: cuando en los programas se hace una llamada a una funcin sobrecargada, el
compilador determina a cual de las funciones invocar en base al tipo y nmero de
parmetros pasados a la funcin.
#include <iostream.h>
#include <stdlib.h>
// divide enteros
int divide(int a, int b)
{
cout << "divisin entera" << endl;
return ( (b != 0) ? a/b : 0);
}
// divide reales
double divide(double a, double b)
{
cout << "divisin real" << endl;
return ( (b != 0) ? a/b : 0);
}
// punto de prueba
int main()
{
cout << divide(10, 3) << endl;
cout << divide(10.0, 3.0) << endl;
cin.get();
}
La sintaxis que usaremos para declarar funciones con lista de parmetros variables es:
1) tipo nombrefuncion(...)
2) tipo nombrefuncion(int num, ...)
donde:
4. ... esta notacin se emplea para indicar que el nmero de parmetros es variable
En el siguiente programa, por ejemplo, se define una funcin ( printstr ) que despliega una
lista variable de cadenas de caracteres.
#include <iostream.h>
#include <stdarg.h>
int main()
{
printstr("Hola, ", "Esta es\n", "una prueba\n", NULL);
cin.get();
return 0;
}
En el programa que se listar en seguida, se define la funcin suma(), misma que operar
sobre listas de nmeros enteros, la funcin devolver la suma de dichos nmeros.
va_end( argptr );
return( total );
}
int main()
{
cout << suma(4, 100, 200, 300, 400) << endl;
cin.get();
return 0;
}
Funciones y procedimientos:
87. Escribir un programa que incremente un nmero usando una funcin.
88. Escribir un programa que calcule la potencia usando una funcin propia (no debe
usar la funcin pow).
89. Escribir un programa que calcule el factorial de un numero ledo desde el teclado
usando funciones.
93. Escribir un programa que mediante funciones obtenga la distancia entre dos puntos
que se encuentran en el plano a partir de la lectura de sus coordenadas.
94. Escribir un programa que reciba un numero del 1 al 12 desde el teclado y muestre el
nmero de das correspondiente al mes que corresponda con ese da (usar funciones).
95. Escribir un programa que transforme nmeros entre 0 y 999 a nmeros romanos
(usar funciones).
P U B L I C A D O P O R W I L L I A M D AVI D L E O N S A C R I S TAN
FICHEROS
#include <iostream>
#include <fstream>
using namespace std;
int main() {
char cadena[128];
// Crea un fichero de salida
ofstream fs("nombre.txt");
return 0;
}