Documentos de Académico
Documentos de Profesional
Documentos de Cultura
1.FUNCIONES
OBJETIVO DE LA UNIDAD
Utilizar las funciones de biblioteca y las funciones elaboradas por el programador en el desarrollo de una
solución con C++, para facilitar el diseño, implementación, operación y mantenimiento de programas.
INTRODUCCION
La gran mayoría de los programas que desarrolla normalmente un programador, son mucho más largos
que los desarrollados hasta el momento. La mejor forma de escribirlos y mantenerlos es a partir de piezas
menores, llamadas módulos, funciones o subprogramas; cada una de ellos resulta ser más fácil de
manipular que un proyecto extenso que contenga la totalidad del código del programa en la función
principal.
Las funciones se pueden agrupar en bibliotecas que contienen rutinas comprobadas para ser utilizadas
por el programador, entre estas la más importante es la biblioteca estándar ANSI (American
National Standards Institute), por lo que resulta de gran ayuda contar con el manual del
compilador para la consulta de las muchas funciones. En este manual se mencionarán
solo algunas.
Esta Unidad iniciará con el uso de las funciones de biblioteca Estándar ANSI que vienen incluidas con el
compilador C++ y a continuación el programador aprenderá a escribir sus propias funciones que le
permitirán dividir programas extensos en tareas sencillas para reutilizarlas en el mismo programa o en
otros.
Existen muchas de estas librerías, algunas tienen sus características definidas según el
estándar, ANSI C o C++; otras son específicas del compilador, otras del sistema operativo,
también las hay para plataformas Windows, LINUX u otras.
Cada biblioteca estándar tiene su archivo de cabecera que contiene los prototipos de todas
las funciones de dicha biblioteca y las definiciones de varios tipos de datos y de constantes
requeridas para dichas funciones. Este archivo de cabecera obligatoriamente se debe
1
mencionar antes de utilizar la función correspondiente.
En los compiladores la ayuda (F1), explica los parámetros y sintaxis para el uso de las
diferentes funciones de las librerías. La utilización o no de algunas de las funciones, depende
del compilador instalado; esto es, no todas las funciones se pueden utilizar en los diferentes
compiladores.
Para utilizar una función simplemente se escribe el nombre y entre paréntesis el argumento
Los argumentos de las funciones pueden ser constantes, variables o expresiones.
Algunos compiladores de C++, no requieren incluir esta librería para poder ejecutar
operaciones matemáticas.
Función
Descripción Ejemplo
Matemática
sqrt(x) Raiz cuadrada de x sqrt(900.0) es 30.0
Ejemplo:
2
CÓDIGO EN C++:
//Ejemplo de utilización de funciones matemáticas.
#include<iostream>
#include<cmath>
using namespace std;
int main()
{
double c1=13.0, d=3.0, f=4.0, r;
cout<<"raiz cuadrada de 9 igual a: "<<sqrt(9.0)<<endl;
cout<<"raiz de 13+3 igual a: "<<sqrt(c1+d)<<endl;
cout<<"4 elevado a la 2 igual a: "<<pow(f,2)<<endl;
cout<<"Ingrese los radianes para calcular el coseno \n (un numero entre 0 y 6.28)"<<endl;
cin>>r;
if(r>=0 && r<=6.28)
cout<<"El coseno de "<<r<<" es: "<<cos(r)<<endl;
else
cout<<"No se realizo el calculo por no estar en el rango
solicitado"<<endl;
system("pause");
return 0;
}
SALIDA:
INTERPRETACIÓN:
Muestra los resultados según los parámetros proporcionados.
3
2. FUNCIONES DE RUTINAS DE CONVERSIÓN ESTÁNDAR <cstdlib>
Función Descripción
Números Aleatorios:
Un número aleatorio es un resultado de una variable al azar especificada por una función
de distribución. En el computador es fácil simular la generación de números aleatorios,
mediante mecanismos de generación de números seudoaleatorios.
La función rand(), genera números seudoaleatorios, esto es, cada vez que el programa se
ejecuta genera la misma secuencia. La función srand() genera en el programa números
diferentes tomando un argumento entero como semilla. Si utilizamos la función time() o
reloj del computador como semilla, generaríamos números diferentes cada vez que se corra
el programa.
Ejemplo:
4
CÓDIGO EN C++:
#include<iostream>
#include <cstdlib>
#include<ctime>
using namespace
std; int main()
{ cout<<"EJEMPLO DE NUMEROS
ALEATORIOS"<<endl; system("pause");
system("cls"); system("color 2");
srand(time(NULL)); for(int
x=1;x<=10;x++){ cout<<"Estoy lanzando
un dado: "<<endl;
cout<<rand()%6+1<<endl;}
system("pause"); return 0;
}
SALIDA:
INTERPRETACIÓN:
Inicialmente imprime en la consola y a continuación la borra.
Seguidamente imprime 10 números aleatorios en color verde
5
3. FUNCIONES DE CONVERSIÓN Y CLASIFICACIÓN DE CARACTERES <cctype>
Función Descripción
Ejemplo:
CÓDIGO EN C++:
//Programa que da información de fechas de matrículas
#include<iostream>
#include <cctype>
using namespace std;
int main()
{ char Nombre[30];
char Codigo[10];
char Programa;
system("color 2");
cout<<"Escriba su Nombre
Completo"<<endl;
cin.getline(Nombre,32);
cout<<"Escriba su Codigo"<<endl;
cin>>Codigo;
cout<<"Escriba el Programa: A para administracin, D para derecho, I para
Ingenieria"<<endl;
cin>>Programa;
system("color 3");
cout<<Nombre<<endl;
cout<<Codigo<<endl;
Programa=toupper(Programa);
cout<<Programa<<endl;
switch(Programa){
case 'A':
cout<<"Matricula el 5 de diciembre"<<endl;
break;
case 'D':
cout<<"Matricula el 6 de diciembre"<<endl;
break;
case 'I':
cout<<"Matricula el 7 de diciembre"<<endl;
break;
default: cout<<"Dato erroneo"<<endl;
}
system("pause");
return 0;
}
5
7
SALIDA:
INTERPRETACIÓN:
Se capturan los datos en variables carácter. Con la instrucción toupper(Programa) aseguramos que la variable quede
en mayúscula para la correspondiente selección.
Ejemplo:
CÓDIGO EN C++:
//Programa que lee un caracter del teclado y comprueba que es una letra
#include<iostream>
#include <cctype>
using namespace std;
int main()
{ char letra;
cout<<"Escriba una letra, para terminar escriba algo que no lo
sea"<<endl; cin>>letra;
while (isalpha(letra))
{
cout<<"caracter valido"<<endl;
cout<<"Escriba nuevamente una letra"<<endl;
cin>>letra;
}
cout<<"Termino por que no escribio una
letra"<<endl; system("pause"); return 0;
}
SALIDA:
8
INTERPRETACIÓN:
Mientras que se ingresen letras, el programa solicita datos de entrada; cuando se ingresa un
número o un símbolo el programa termina.
Una función contiene las instrucciones que le permite realizar una tarea específica. Esta
tarea puede ser utilizada varias veces por el programa o puede ser reutilizada en otro
proyecto.
Por ejemplo:
Si se quiere escribir un programa para obtener una lista de caracteres por teclado y que el
computador los ordene alfabéticamente y los visualice en pantalla, en lugar de escribir todas
las tareas en el programa principal, se puede escribir funciones independientes para cada
tarea que se mandan a ejecutar desde el programa principal así:
int main()
La ventaja de usar funciones en un programa es que se escriben solamente una vez, pero
pueden ser referenciados para utilizarse desde diferentes puntos de un programa de modo
que se evita la duplicidad innecesaria de código.
Las funciones contienen varias sentencias bajo un mismo nombre, que un programa puede
utilizar una o más veces.
9
Un programa se puede componer de varias funciones, cada una de las cuales realiza una
tarea principal. Las funciones en general se llaman desde el programa principal pero se
pueden llamar desde cualquier parte del programa.
P r og rama P r i n c ip al
F un c io n 1 F un c io n 2 F un c io n 3
F un c io n A F un c io n B
Las funciones contienen las instrucciones que la tarea debe realizar, deben tener un nombre
y deben ser llamadas por su nombre para que se ejecuten, al finalizar la función debe
retornar el control al punto donde fue llamada.
A continuación se muestran dos ejemplos de programas que usan una función definida por
el programador para escribir el programa modularmente. Observe las tres partes que
conforman la función: Prototipo, Llamada y Estructura.
EJEMPLO 1:
/*programa que calcula los cuadrados de los números del 1 al 10 utilizando una funciones
del usuario*/
#include<iostream>
int cuadrado(int);
P R O T O T I PO
using namespace std;
int main()
{
int x;
for(x=1;x<=10;x++)
cout<<”\n”<<x<<” “<<cuadrado(x); //Llamado de la Función
system("pause");
return 0;
}
Llamada de la función
10
int cuadrado(int y)
{
return y*y; ES T R U C TU R A
}
EJEMPLO 2.
#include<cmath>
P R O T O T I PO
void AREA(float, float, float);
using namespace std;
int main()
float L1,L2,L3;
cout<<"INGRESE LA MEDIDA DE LOS TRES LADOS DEL TRIANGULO"<<endl;
cin>>L1>>L2>>L3;
AREA(L1,L2,L3);
Llamadade la función
system("pause");
return 0;
}
Las funciones no se pueden anidar, esto significa que una función no se puede declarar
dentro de otra función. Las funciones se pueden llamar desde cualquier parte del
programa.
11
PROTOTIPO DE LA FUNCIÓN
C++ requiere que una función se declare o defina antes de su uso. La declaración de la
función se denomina prototipo. Los prototipos se sitúan normalmente luego de las
instrucciones de preprocesador y terminan en punto y coma.
Un prototipo consta de los siguientes elementos: contiene inicialmente el tipo de dato que
retorna, observe que toda función solo puede retornar un dato, nombre de la función, una
lista de argumentos encerrados entre paréntesis y un punto y coma. La inclusión del nombre
de los parámetros es opcional.
Sintaxis de la instrucción:
int cuadrado(int);
int cuadrado(int y );
La lista de argumentos encerrados en paréntesis, esto es el tipo de dato de cada uno de los
componentes o información que se requiere enviar para que la función pueda operar, cuando
es más de uno se separan por comas. En caso de que no se requiera suministrar datos, se
12
dejan los paréntesis vacios.
LLAMADA DE LA FUNCIÓN
Sintaxis de la instrucción:
Nombre_de_la_función(parámetros);
c u a d rado( x )
AREA(L1,L2,L3);
Las funciones para ser ejecutadas, han de ser llamadas o invocadas, simplemente
escribiendo su nombre y entre paréntesis los datos que requiera para que la tarea pueda
llevarse a cabo.
Al llamar la función hace que el control del programa se dirija a la función llamada, hasta
tanto se encuentre la sentencia return o llave de cierre para retornar nuevamente el control
del programa al punto desde donde fue llamada.
Sintaxis de la instrucción:
13
Tipo_de_retorno nombre_función (lista_de _parámetros)
{
cuerpo de la función
return expresión
}
int cuadrado(int y)
{
return y*y;
}
float S,A;
S=(X1+X2+X3)/2;
A=sqrt(S*(S-X1)*(S-X2)*(S-X3));
cout<<"EL AREA DEL TRIANGULO ES "<<A<<endl;
}
La estructura de la función se escribe por fuera del programa principal, puede ser antes o
después de la función main().
Las variables que declaren en la estructura son locales a la misma y no perduran fuera de
ella. El valor devuelto por la función se hace mediante la palabra return, cuando no se
requiere devolver valores simplemente se hace su mención.
RETORNO DE LA FUNCIÓN
Tan pronto como el programa encuentra una de las sentencias return, devuelve el control a
la sentencia llamadora. La función retorna un valor único del tipo que se defina en el
prototipo.
Si el tipo de la función es void, esto es, que no devuelve valor, el retorno se escribe:
return;
o simplemente no se escribe nada, así:
14
void func1()
{
cout<<”MENSAJE DE AMISTAD”;
}
return y*y;
return ;
PARAMETROS DE LA FUNCIÓN
Los parámetros son los argumentos o datos que requiere la función sean transmitidos para
poder operar.
C++ utiliza dos métodos de parámetros para pasar datos entre funciones: parámetros por
valor y parámetros por referencia. También puede no tener parámetros.
La función recibe una copia de los valores de los parámetros que le permite hacer la tarea
para la cual fue creada.
cuadrado(x)
int cuadrado(int y)
15
En el ejemplo2 anterior, las variables de los parámetros de la llamada L1, L2, L3, son
copiadas por las variables X1, X2, X3, en la estructura de la función:
AREA(L1,L2,L3);
Cuando C++ compila la función y el código llama a la función, esta recibe una copia de los
valores de los parámetros por lo tanto estos corresponden exactamente en cantidad y tipo
para cuando se invocan, se definen o se declaran.
Cada vez que se llama una función se establece automáticamente una correspondencia
entre los parámetros formales de la función y los parámetros del programa principal.
Cuando una función debe modificar el valor del parámetro pasado y devolver este valor
modificado a la función llamadora, se ha de utilizar el método de paso de parámetro por
referencia.
Cuando una función tiene un parámetro por referencia, este no recibe un valor, sino que el
compilador pasa la dirección de memoria del valor del parámetro a la función. Al modificar
el valor del parámetro, este queda almacenado en la misma dirección de memoria, por lo
que al retornar a la función llamadora contendrá el valor modificado.
Los parámetros por referencia reciben la dirección de los argumentos pasados y cambian
los valores de los argumentos originales.
16
CÓDIGO EN C++:
//Ejemplo de parámetro por referencia.
#include<iostream>
using namespace std;
int n;
void aumentar(int &);
int main()
{
cout<<"Digite valor de n: ";
cin>>n;
aumentar(n);
cout<<"\nDespues de la funcion aumentar()\n";
cout<<"n= "<<n<<'\n';
system("pause");
return 0;
}
void aumentar(int&num)
{
cout<<"\nEn la funcion aumentar()\n";
cout<<"num= "<<num<<'\n';
cout<<"Aumentamos el valor num en 10\n";
num+=10;
cout<<"Nuevo valor para num= "<<num<<'\n';
cout<<"Fin de la funcion aumentar()\n";
}
SALIDA:
INTERPRETACION:
17
En el ejemplo anterior, la función recibe la dirección de la variable “n” en “&num”.
aumentar(n);
Variables Punteros:
Una variable puntero o puntero simplemente, es una variable que contiene direcciones de
memoria de otras variables donde se almacenan datos.
El siguiente ejemplo muestra que cuando una variable se declara, se asocia tres atributos
fundamentales: nombre, tipo y dirección de memoria
CÓDIGO EN C++:
#include<iostream>
using namespace std;
int main()
{
int a=4;
cout<<"a= "<<a<<endl;
cout<<"dirección de a: "<<&a<<endl;
system("pause");
return 0;
}
SALIDA:
18
INTERPRETACIÓN:
Cuando requerimos una variable para almacenar la dirección de otra variable, utilizamos una variable
puntero, para identificarla utilizamos el símbolo “*” asterisco.
CÓDIGO EN C++:
//Ejemplo depunteros.
#include<iostream>
using namespace std;
int main()
{
double a=14.5;
double* p=&a;
cout<<"a= "<<a<<endl;
cout<<"&a= "<<&a<<endl;
cout<<"p= "<<p<<endl;
cout<<"&p= "<<&p<<endl;
system("pause");
return 0;
}
SALIDA:
19
MANUAL DE PROGRAMACIÓN EN C++
INTERPRETACIÓN:
Ejemplos:
CÓDIGO EN C++:
intmaximo(int,int,int);
INTERPRETACIÓN:
La función maximo, tiene como tarea retornar el mayor de tres enteros. En la llamada a la función pasa como
parámetro los tres enteros a, b, c que son copiados en x, y, z.
INTERPRETACIÓN:
El programa principal tiene tres funciones que le permiten realizar las tareas de solicitud del dato,
cálculo del IVA e impresión de los datos solicitados.
Con la primera función el valor del artículo que tenía de valor inicial de 0, se solicita el valor del
artículo y queda almacenado en la misma dirección de memoria, por lo que al retornar a la función
llamadora imprime el valor del artículo digitado por el usuario.
Con la segunda función se pasa por valor el valor del artículo y por referencia el valor del IVA, para
que sea almacenado en la misma dirección de memoria una vez se realice el cálculo.
Finalmente se imprimen los datos con la función que recibe los datos como paso de parámetros por
valor
C++ reconoce el ámbito o alcance de una variable, según haya sido declarada como local
o global.
#include <iostream>
using namespace std;
int g=50,h;
int main()
{
}
Una variable que se declara fuera de cualquier función y cuya declaración tiene la palabra
reservada static tiene ámbito de archivo fuente. Ejemplo:
static int j;
void precio()
{
}
Cuando las variables locales, tienen ámbito de función, se pueden referenciar desde
cualquier parte de la función, pero por fuera de esta no existen. Cuando la función
no se está ejecutando, sus variables locales no ocupan espacio en memoria ya que
no existen.
#include<iostream>
using namespace std;
double a = 128; //variable global
int main ()
{
double a = 256; //variable local
double b=a+a;
double c=::a+::a;
cout << "Local a: " << a << endl;
cout << "Local b: " << b << endl;
cout << "Global a: " << ::a << endl;
cout << "Local c: " << c << endl;
return 0;
}
Una variable declarada en un bloque tiene ámbito de bloque y puede ser
referenciada en cualquier parte del bloque, estas no son visibles por fuera del
bloque. Ejemplo:
#include<iostream>
using namespace std;
int main()
{
float x;
cout<<"Ingrese un valor "<<endl;
cin>>x;
if(x>0)
{
for(int i=0;i<=10;i++)
cout<<i<<endl;
}
//Aqui ya no es visible i
// Si escribo en este sitio: cout<<i<<endl;
// Me arroja el compilador error
system("pause");
return 0; }
Un algoritmo típico que conduce a una implementación recursiva es el cálculo del factorial
de un número, así pues:
0!= 1
1!= 1
2!= 2*1
3!= 3*2*1
4!= 4*3*2*1
:
n!= n*(n-1)* (n-2)*…….4*3*2*1
#include <iostream>
using namespace std;
double Factorial(int);
int main()
{
int n; cout<<" escriba el numero al que le desea calcular el factorial: "<<endl;
cin>>n;
cout<<" el factorial del número es: "<<Factorial(n)<<endl;
system("pause");
return 0;
}
CÓDIGO EN C++:
#include <iostream>
using namespace std;
void pidebase(int &);
void pideexpo(int &);
int potencia(int,int);
voidmuestracum(int,int);
int main()
{
int base,ponente=0;
do{ pidebase(base);
pideexpo(ponente);
muestracum(base,ponente);
}while(base != 0);
return 0;
}
El programa principal tiene tres funciones que le permiten realizar las tareas de solicitud de la
base, el exponente e impresión de los datos, mientras no se digite cero como base.
La función muestracum, llama la función recursiva potencia donde base es la variable que lleva
el valor acumulado y ponente es la variable que se tiene en cuenta para salir de la función.
Con la segunda función se pasa por valor el valor del artículo y por referencia el valor del IVA,
para que sea almacenado en la misma dirección de memoria una vez se realice el cálculo.
RESUMEN
- Todo programa C++ tiene la función main() y por lo general varias funciones de
biblioteca y funciones definidas por el programador, cada una de las cuales realiza
una tarea.
- Las funciones no se pueden anidar, esto significa que una función no se puede
declarar dentro de otra función.
- Las funciones contienen varias sentencias bajo un mismo nombre, que un programa
puede utilizar una o más veces en varios puntos del programa.
- C++ reconoce el ámbito de una variable, según haya sido declarada como local o
global, las variables globales suelen definirse en las declaraciones globales del
programa, mientras que la variables locales se definen en los cuerpos de las
funciones iniciando como primeras instrucciones.