Sie sind auf Seite 1von 24

Funciones en C++.

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

//Funcin C++ para sumar dos nmeros


int suma(int a, int b)
{
int c;
c = a + b;
return c;
}
Esta funcin se llama suma y recibe dos nmeros enteros a y b. La funcin suma
los dos nmeros y guarda el resultado en c. Finalmente devuelve mediante la
instruccin return la suma calculada.
Una funcin tiene un nico punto de inicio, representado por la llave de inicio. La
ejecucin de una funcin termina cuando se llega a la llave final o cuando se
ejecuta la instruccin return. La instruccin return puede aparecer en cualquier
lugar dentro de la funcin, no tiene que estar necesariamente al final.
Con una funcin se deben realizar tres operaciones: declaracin, definicin y
llamada o invocacin.
Declaracin o prototipo de una funcin.
Declarar una funcin es el paso previo antes de definir el conjunto de sentencias
que la componen.
En la declaracin o prototipo de la funcin, indicamos el nombre de la misma, el
tipo de valor que devuelve y una lista parmetros separados por comas. La
declaracin acaba con punto y coma.
[tipo_devuelto] nombre_funcion([tipo parametro1][, tipo parametro2][, ....]);
La declaracin de una funcin sirve para comprobar que cuando se llame a la
funcin, los parmetros que se utilizan son correctos en cuanto a nmero y tipo,
adems de comprobar el tipo para el valor de retorno. El compilador dar mensajes
de error si se llama a una funcin con tipos de datos o con nmeros de parmetros
distintos a los declarados.
Por ejemplo, la funcin suma del punto anterior se declara as:
int suma(int a, int b);
En la declaracin de una funcin, no es necesario indicar los identificadores de los
parmetros. Solo es obligatorio poner el tipo. Adems, los identificadores usados en
la declaracin y en la definicin no es preciso que sean los mismos.
Segn esto, la funcin suma la podemos declarar as:
int suma(int, int);
Estamos indicando que suma recibe 2 enteros y devuelve un entero. No es
necesario poner el nombre de las variables.

Definicin de una funcin.


Definir una funcin consiste en escribir la cabecera de la misma y a continuacin,
entre llaves, el cuerpo de la funcin, es decir, sus instrucciones.
La cabecera de la funcin debe coincidir con la declaracin de la funcin y debe
incluir el nombre de los parmetros. La cabecera no acaba en punto y coma.
[tipo_devuelto] nombre_funcion([tipo parametro1][, tipo parametro2][, ....])
{
// instrucciones
[return valor;]
}
Los parmetros definidos en la cabecera de la funcin se llaman parmetros
formales. Son las variables que reciben los valores de los argumentos en la
llamada a la funcin.
El resultado de la funcin se devuelve a la instruccin que la ha llamado por medio
de la sentencia return. El tipo_devuelto indica de qu tipo es el dato devuelto por
la funcin. Puede ser cualquier tipo bsico, o definido por el usuario, pero no
puede ser un array o una funcin. Si no se indica, se supone que es int. La
sentencia return puede aparecer ms de una vez en el cuerpo de la funcin aunque
lo aconsejable es que aparezca slo una sentencia return. Si la funcin no devuelve
ningn valor, se puede omitir o poner simplemente return. La sentencia return
provoca la finalizacin inmediata de la funcin en el momento en que se ejecuta.

Llamar o invocar a una funcin.


Para que una funcin se ejecute es necesario llamarla o invocarla desde alguna
parte del programa.
La llamada a una funcin est formada por su nombre seguido de una lista de
argumentos entre parntesis y separados por comas (cero o ms argumentos) que
son los datos que se le envan a la funcin.
Los argumentos que aparecen en la llamada a una funcin se llaman parmetros
actuales, porque son los valores que se pasan a sta en el momento de la
ejecucin.
Los parmetros actuales y los formales deben coincidir en nmero, orden y tipo. Si
el tipo de un parmetro actual no coincide con su correspondiente parmetro
formal, el sistema lo convertir al tipo de este ltimo, siempre que se trate de tipos
compatibles. Si no es posible la conversin, el compilador dar los mensajes de
error correspondientes.
Si la funcin devuelve un valor, la llamada a la funcin puede estar incluida en una
expresin que recoja el valor devuelto.
Cuando se llama a una funcin, se crean en memoria las variables que aparecen en
la cabecera de la funcin. Las variables declaradas en la cabecera de una
funcin as como las que se declaran en el interior de la misma son
variables locales de la funcin. Esto significa que solo son accesibles dentro de
la funcin. Aunque tengan el mismo nombre que otras variables que puedan
aparecer en otras partes del programa se trata de variables distintas. La memoria
que ocupan las variables locales de una funcin se libera cuando acaba la ejecucin
de la funcin y dejan de estar accesibles.
Cuando se llama a una funcin, la ejecucin del programa pasa a la funcin y
cuando sta acaba, la ejecucin contina a partir del punto donde se produjo la
llamada.
Ejemplos de funciones en C++
Ejemplo 1:
El siguiente programa lee por teclado un ao y calcula y muestra si es bisiesto. Para
realizar el clculo utiliza una funcin llamada bisiesto.
La funcin bisiesto recibe el ao ledo por teclado, comprueba si es o no bisiesto y
devuelve 1 si lo es 0 si no lo es.
// Programa que lee un ao y muestra si es o no bisiesto
#include <iostream>
using namespace std;
int bisiesto(int); //declaracin o prototipo de la funcin
int main()
{
int anio;
cout<<"Introduce a"<<(char)164<<"o: "; //164 ascii de
cin >> anio;
if(bisiesto(anio)) //llamada a la funcin
cout << "Bisiesto" << endl;
else
cout << "No es bisiesto" << endl;
system("pause");
}
int bisiesto(int a) //definicin de la funcin
{
if(a%4==0 and a%100!=0 or a%400==0)
return 1;
else
return 0;
}
En la llamada a la funcin bisiesto, el valor de la variable anio (parmetro actual) se
copia en la variable a (parmetro formal) y la funcin trabaja con esta variable. El
valor 1 0 devuelto por return en la funcin pasa a ser el valor de la condicin:
Ejemplo 2
Programa que lee por teclado la fecha actual y la fecha de nacimiento de una
persona y calcula su edad.
El programa utiliza tres funciones:
fecha_valida: comprueba si la fecha leda es correcta.
bisiesto: comprueba si un ao es bisiesto. La llama la funcin fecha_valida
calcular_edad: recibe las dos fechas y devuelve la edad.

// Programa C++ que lee la fecha actual y la fecha de nacimiento


// de una persona y calcula su edad
#include <iostream>
using namespace std;
int bisiesto(int);
int fecha_valida(int , int, int);
int calcular_edad(int, int, int, int, int, int);
int main()
{
int diaa, mesa, anioa, dian, mesn, anion, edad;
do
{
cout << "Introduce fecha actual: " << endl;
cout << "dia : "; cin >> diaa;
cout << "mes : "; cin >> mesa;
cout << "a" << (char)164 << "o: "; cin >> anioa;
}while(!(fecha_valida(diaa, mesa, anioa)));
do
{
cout << endl << "Introduce fecha de nacimiento: " << endl;
cout << "dia : "; cin >> dian;
cout << "mes : "; cin >> mesn;
cout << "a" << (char)164 << "o: "; ; cin >> anion;
}while(!(fecha_valida(dian, mesn, anion)));
edad = calcular_edad(diaa, mesa, anioa, dian, mesn, anion);
cout << endl << "Edad : " << edad << endl << endl;
system("pause");
}

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;

int bisiesto(int a) // definicin de la funcin bisiesto


{
if(a%4==0 and a%100 !=0 or a%400==0)
return 1;
else
return 0;
}

int fecha_valida(int d, int m, int a) //definicin de fecha_valida


{
if(d < 1 or d > 31 or m < 1 or m > 12 or a < 1)
{
return 0;
}
switch(m)
{
case 4:
case 6:
case 9:
case 11: if(d > 30)
{
return 0;
}
break;
case 2: if(bisiesto(a))
{
if(d > 29)
{
return 0;
}
}
else if(d > 28)
{
return 0;
}
break;
}
return 1;
}
La funcin fecha_valida se llama dos veces en el programa, una para comprobar si
la fecha actual es correcta y otra para comprobar si la fecha de nacimiento es
correcta. Esta Funcin devuelve 1 si es correcta y 0 en caso contrario. La funcin
fecha_valida llama a la funcin bisiesto para comprobar si el ao es bisiesto.
La funcin calcular_edad recibe las dos fechas y calcula y devuelve la edad de la
persona. El valor de la variable edad que aparece en la sentencia return se copia en
la variable edad de la llamada.
16 comentarios:
1.

Annimo25 de marzo de 2014, 0:11

Excelentsima esta la informacin!, me sirvi de mucha ayuda.

Responder
2.

Annimo9 de febrero de 2015, 18:57

muy bueno me ayudo mucho mientras estaba en la escuela :)

Responder
Respuestas

1.

Enrique23 de abril de 2015, 21:05

Gracias, me alegro de que te haya servido de ayuda. Un saludo

2.

Andrs Martnez17 de octubre de 2015, 3:38

falto ponerle la libreria stdlib.h para el system("PAUSE")

Programacin en C++/Funciones
< Programacin en C++

Estructuras Streams

Contenido
[ocultar]
1Definiendo una funcin

2Parmetros

3Llamar a una funcin

4Funciones anidadas

5Funciones de tipo puntero (*)

6Variables estticas y automticas

7Parmetros constantes

8Parmetros con valor por defecto

9Parmetros de tipo puntero

10Parmetros estructurados

11Funciones sobrecargadas

12Nmero variable de parmetros

Definiendo una funcin[editar]

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

Ejemplo de una funcin

Para comenzar, vamos a considerar el caso en el cual se desea crear la


funcin cuadrado(), que deber devolver el cuadrado de un nmero real (de punto
flotante), es decir, cuadrado() aceptar nmeros de punto flotante y regresar una
respuesta como nmero flotante.

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.

// regresar el cuadrado de un nmero


double Cuadrado(double n)
{
return n*n;
}

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.

Parmetros por valor

La funcin cuadrado() (ver arriba) es un clsico ejemplo que muestra el paso de


parmetros por valor, en ese sentido la funcin cuadrado() recibe una copia del
parmetro n. En la misma funcin se puede observar que se realiza un calculo ( n*n ), sin
embargo el parmetro original no sufrir cambio alguno, esto seguir siendo cierto an
cuando dentro de la funcin hubiera una instruccin parecida a n = n * n; o n*=n;.

Parmetros por referencia


Para mostrar un ejemplo del paso de parmetros por referencia, vamos a retomar el caso
de la funcin cuadrado, salvo que en esta ocasin cambiaremos ligeramente la sintaxis
para definir la misma. Veamos:

// regresar el cuadrado de un nmero


double cuadrado2(double &n)
{
n *= n;
return n;
}

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.

Llamar a una funcin[editar]


para llamar a la funcin cuadrado() vista anteriormente, podemos emplear:

cout << cuadrado(25);


cout << cuadrado(X);
R = cuadrado(X); // guardar en R el cuadrado de X

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.

// esta funcin requiere de la librera iostream void pausa(void) {

cout << "Por favor presione <Enter> HOLA...";


cin.get();
cin.ignore(255, '\n'); // rechazar caracteres introducidos antes
de <Enter>

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.

Funciones de tipo puntero (*)[editar]


En muchas ocasiones se desea que ciertas funciones regresen una referencia o puntero
hacia un tipo (sea este estructurado o no) especfico de dato en lugar de un valor
especfico. En tales casos, la funcin se deber declarar como para que regrese un
puntero. Por ejemplo, supongamos que deseamos crear una funcin para convertir un
nmero entero en notacin decimal a una cadena de caracteres en forma de nmeros
binarios, luego, la funcin mencionada podra escribirse para que reciba el nmero entero
como parmetro y regrese un puntero a una cadena de caracteres conteniendo la
conversin. Para ser ms puntuales, vamos a escribir un programa en donde se ver la
funcin binstr(), y cuyo objetivo ser precisamente convertir nmeros decimales en
cadenas binarias.

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>

using namespace std;

// declaracin de prototipo
char *binstr(unsigned int);

// punto de prueba
int main()
{
int n = 128;
cout << "decimal = " << n << ", binario = " << binstr(n) << endl;
cin.get();
}

// definicin de funcin binstr()


// nota: esta funcion requiere de la librera estndar string
char *binstr(unsigned int n)
{
static char buffer[65];
int i = 0;

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

Variables estticas y automticas[editar]


Dentro de una funcin, las variables y/o constantes pueden ser declaradas
como: auto (por omisin) o como static. Si una variable dentro de una funcin es
declarada como esttica significa que la misma retendr su valor entre las llamadas a la
funcin. Por otro lado, la variables automticas pierden su valor entre las llamadas. En el
programa anterior puede verse que el arreglo de caracteres (buffer[65]) se ha declarado
como esttico para garantizar que dicho buffer retenga los datos an despues de que la
funcin termine. En el mismo ejemplo, si el buffer no se declara como esttico, el
contenido del mismo podra ser destruido al salir de la funcin y los resultados obtenidos
podran ser no deseados.

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:

int funcionX( const int n );


void printstr( const char *str );
Parmetros con valor por defecto[editar]
Los parmetros usados por una funcin pueden declararse con un valor por defecto. Un
parmetro que ha sido declarado con valor por defecto es opcional a la hora de hacer la
llamada a la funcin. Ejemplo: Dada la funcin:

void saludo( char* mensaje = "Hola Copa America 2015" );

la misma puede ser invocada como:

saludo(); // sin parmetro


saludo("Sea usted bienvenido a C++"); // con parmetro

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.

Nota: Ya que la funcin servir para convertir nmeros a cualquier representacin la


nombraremos como numstr() en lugar de binstr(). Si la funcin es invocada sin el
parmetro base regresar una cadena de digitos decimales.

#include <iostream>
#include <stdlib.h>

using namespace std;

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

Parmetros de tipo puntero[editar]


Anteriormente se mencion que en C++ los parmetros a una funcin pueden pasarse por
valor o por referencia, al respecto, podemos agregar que los parmetros tambin pueden
pasarse como punteros. El paso de parmetros de punteros es bastante parecido al paso
de parmetros por referencia, salvo que el proceso de los datos dentro de la funcin es
diferente. Por ejemplo, las funciones:

void referencia( int &X ) { X = 100; }


void puntero( int *X ) { *X = 100; }

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.

Para ver un ejemplo, consideremos el caso del siguiente tipo estructurado:

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:

void ImprimeEmpleadoV( empleado e)


{
cout << "Nombre: " << e.nombre << endl;
cout << "Edad: " << e.edad << endl;
cout << "Sexo: " << e.sexo << endl;

// Parametro empleado pasado por referencia


void ImprimeEmpleadoR( empleado &e )
{
cout << "Nombre: " << e.nombre << endl;
cout << "Edad: " << e.edad << endl;
cout << "Sexo: " << e.sexo << endl;

// Parametro empleado pasado como puntero


void ImprimeEmpleadoP( empleado *e )
{
cout << "Nombre: " << e->nombre << endl;
cout << "Edad: " << e->edad << endl;
cout << "Sexo: " << e->sexo << endl;
}

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>

using namespace std;

// 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();
}

Nmero variable de parmetros[editar]


En C,C++ se pueden crear funciones que operen sobre una lista variable de parmetros,
es decir, en donde el nmero de parmetros es indeterminado. En esta seccin se
mostrar un ejemplo de la manera en que podemos crear funciones para manejar tales
asuntos, y para ello haremos uso de tres macros soportadas por C++:

1. va_list puntero de argumentos

2. va_start inicializar puntero de argumentos

3. va_end liberar puntero de argumentos

La sintaxis que usaremos para declarar funciones con lista de parmetros variables es:

1) tipo nombrefuncion(...)
2) tipo nombrefuncion(int num, ...)
donde:

1. tipo es el tipo regresado por la funcin

2. nombrefuncion es el nombre de la funcin

3. int num es el nmero de parmetros que la funcin procesar

4. ... esta notacin se emplea para indicar que el nmero de parmetros es variable

Nota: observe que la primera forma de declaracin es realmente variable el nmero de


parmetros a procesar y en estos casos se debe establecer el mecanismo para determinar
cuando se ha procesado el ltimo de los argumentos, en el segundo tipo de declaracin el
nmero total de parmetros a procesar es igual al valor del parmetro num.

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>

// despliega una lista de cadenas, la ultima debe ser NULL


void printstr(...)
{
va_list ap;
char *arg;
va_start(ap, 0);
while ( (arg = va_arg(ap, char*) ) != NULL) {
cout << arg;
}
va_end(ap);
}

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.

#include <iostream>//entrada y salida


#include <stdarg.h>

using namespace std;

// Esta funcin opera sobre una lista variable de nmeros enteros


int suma( int num, ... )
{
int total = 0;
va_list argptr;
va_start( argptr, num );

while( num > 0 ) {


total += va_arg( argptr, int );
num--;
}

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.

90. Escribir un programa, que con funciones, verifique si un caracter introducido es un


nmero o no.
91. Escribir un programa que, mediante una funcin, calcule el resultado de restar el
doble de un numero a su cuadrado.
92. Escribir un programa que, utilizando funciones con parmetros, lea desde el teclado
las unidades y el precio que quiere comprar, y en funcin de las unidades introducidas le
haga un descuento o no (cuando las unidades excedan media docena se aplicar 4% y el
10% cuando excedan la docena).

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

// Enviamos una cadena al fichero de salida:


fs << "Hola, mundo" << endl;
// Cerrar el fichero,
// para luego poder abrirlo para lectura:
fs.close();

// Abre un fichero de entrada


ifstream fe("nombre.txt");

// Leeremos mediante getline, si lo hiciramos


// mediante el operador << slo leeramos
// parte de la cadena:
fe.getline(cadena, 128);

cout << cadena << endl;

return 0;
}

Das könnte Ihnen auch gefallen