Está en la página 1de 31

UNIVERSIDAD MILITAR NUEVA GRANADA

DEPARTAMENTO DE TECNOLOGÍAS DEL CONOCIMIENTO


PROGRAMACIÓN II
FUNCIONES

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.

1.1 BIBLIOTECA ESTÁNDAR DE FUNCIONES

Los compiladores de C++, proporcionan la biblioteca estándar de funciones, que contiene


una colección de funciones que facilitan el realizar cálculos matemáticos, manipulación de
cadenas, funciones de entrada y salida, manejo de archivos y muchas otras cosas, de uso
corriente.

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.

Las funciones de biblioteca, se utilizan normalmente en un programa, escribiendo el nombre


de la función y entre paréntesis el argumento o argumentos de la función.

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.

A continuación, se mencionarán algunas librerías con las funciones más usuales.

1. FUNCIONES MATEMÁTICAS DE BIBLIOTECA <cmath>

Las funciones matemáticas de biblioteca le permiten al programador ejecutar ciertos


cálculos matemáticos comunes. Para utilizar las funciones de la biblioteca de matemáticas
en los programas C++, debe incluir el archivo de cabecera <cmath>. Este archivo
remplaza a <math.h>.

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

exp(x) Función exponencial ex exp(1.0) es 2.718282

abs(x) Valor absoluto de x fabs(-3.0)=3.0

pow(x,y) x elevado a la potencia de y (xy) pow(2,7)=128


sin(x) Seno trigonométrico de x, en radianes sin(0.0)=0.0
cos(x) Coseno trigonométrico de x, en radianes cos(0.0)=1.0
tan(x) Tangente trigonométrica de x, en radianes tan(0.0)=0.0

Todas las funciones de la biblioteca de matemáticas devuelven datos en tipo double.

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>

Este archivo remplaza a <stdlib.h>.

Función Descripción

system("pause") Detiene la consola que muestra los resultados luego de ejecutar


un programa.
system("cls") borra la consola que muestra los resultados
Cuando se ejecuta el comando de sistema system("color 2");
system("color n") cambia el color de la fuente de la consola a verde. Otros colores:
0, negro; 1, azul; 4, roja; 5 morado; 6, amarillo; 7 blanco; A, B,
C, D, E F, produce los colores pero en tonos mas brillantes.
Genera números aleatorios, entre 0 y RAND_MAX, que es por lo
rand() menos el número 32767 o el valor máximo de un entero de dos
bytes (16 bits).

Algunos compiladores no exigen el uso de la librería para la utilización de funciones system.

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.

Para utilizar la función time() se requiere la librería <ctime>.

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>

Este archivo remplaza a <ctype.h>. Algunos compiladores no exigen el uso de esta


librería para hacer las operaciones.

Función Descripción

toupper() Convierte un carácter a mayúscula

tolower() Convierte un carácter a minúscula


Devuelve verdadero si c es una letra mayúscula o minúscula, falso
Isalpha(c)
si es otro carácter
Islower(c) Devuelve verdadero si c es una letra minúscula, falso si es otro
carácter
Devuelve verdadero si c es una letra mayúscula, falso si es otro
Isupper(c)
carácter
Devuelve verdadero si c es un dígito del 0 al 9, falso en caso
Isdigit(c)
contrario
Devuelve verdadero si c es un dígito del 0 al 9 o un caracter, falso
Isalnum(c)
en caso contrario

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.

1.2 FUNCIONES DE USUARIO

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.

La programación estructurada o modular, consiste en escribir programas por módulos


(funciones) para poder aislar mejor los problemas, entender con mayor facilidad el código
del programa y facilitar futuras modificaciones a los proyectos.

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()

//llamar la funcion para capturar los caracteres


capturarcaracteres();

//llamar la funcion para ordenar los caracteres


ordenarcaracteres();

//llamar la funcion para visualizar los caracteres


capturarcaracteres();

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.

Para utilizar en un programa funciones, se requiere tres pasos: Prototipo, llamada y


estructura. Que la función se defina antes de su uso (prototipo), que se haga la llamada de
la función y finalmente que se defina o escriba la función (estructura).

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.

/*PROGRAMA QUE CALCULA EL AREA DE UN TRIÁNGULO CUANDO SE CONOCE EL


VALOR DE

SUS TRES LADOS */


#include<iostream>

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

void AREA(float X1, float X2, float X3)


{
float S,A;
ES T R U C TU R A
S=(X1+X2+X3)/2;
A=sqrt(S*(S-X1)*(S-X2)*(S-X3));
cout<<"EL AREA DEL TRIANGULO ES "<<A<<endl;
}

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:

Tipo_de_retorno nombre_función (lista_de _parámetros);

En el ejemplo1 anterior, la línea del prototipo es:

int cuadrado(int);

Puede ser opcional incluir el nombre del parámetro:

int cuadrado(int y );

En el ejemplo2 anterior, la línea del prototipo es:

void AREA(float, float, float);

Como no requiere dato que retorne se coloca la palabra void.

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.

Se finaliza el prototipo con punto y coma ( ; ).

LLAMADA DE LA FUNCIÓN

Sintaxis de la instrucción:

Nombre_de_la_función(parámetros);

En el ejemplo1 anterior, la llamada se hace así:

c u a d rado( x )

En el ejemplo2 anterior, la llamada se hace así:

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.

En caso de que no se requiera suministrar datos, se coloca el nombre de la función y los


paréntesis. Por ejemplo IMPRIMIR();

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.

DEFINICIÓN DE LA FUNCIÓN (ESTRUCTURA)


La estructura de la función es la que contiene las sentencias o el código para realizar la
tarea para la cual fue creada.

Sintaxis de la instrucción:

13
Tipo_de_retorno nombre_función (lista_de _parámetros)

{
cuerpo de la función
return expresión
}

En el ejemplo1 anterior, la estructura de la función:

int cuadrado(int y)
{
return y*y;
}

En el ejemplo2 anterior, la estructura de la función:

void AREA(float X1, float X2, float X3)

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().

La primera línea de la estructura se llama cabecera de la función y trae básicamente los


mismos elementos del prototipo. El cuerpo de la estructura se encierra entre llaves.

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

En el ejemplo1, retorna un entero producto de obtener el cuadrado del número, al punto


donde fue llamada la función en el programa principal.

return y*y;

En el ejemplo2, no retorna valores. Esta instrucción también se puede omitir.

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.

Paso de parámetros por valor:

La función recibe una copia de los valores de los parámetros que le permite hacer la tarea
para la cual fue creada.

En el ejemplo1 anterior la variable en la llamada X, es copiada por la variable y, en la


estructura de la función:

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

void AREA(float X1, float X2, float X3)

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.

Paso de parámetros por referencia:

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:

Se lee en main() , un valor para “n ”, en el ejemplo es de 25, luego se envía como


parámetro por referencia a la función aumentar, en la función lo recibe en la variable
“num”, le sumamos 10 al valor de “num”; al terminar la función aumentar y regresar a
main(), el valor de “n ”, se ve aumentado en 10.

17
En el ejemplo anterior, la función recibe la dirección de la variable “n” en “&num”.

aumentar(n);

void aumentar(int &num)

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++:

//Ejemplo de los atributos en una variable.

#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:

Inicialmente se imprime el valor de la variable que es 4.


Después se imprime la dirección de la variable 0012FF60, por medio de la utilización del símbolo “&”(ampersand).

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:

Inicialmente se imprime el valor de la variable a que es 14.5


Luego se imprime la dirección de la variable a que es 0012FF5C.
A continuación se imprime el valor de la variable p que es 0012FF5C
Finalmente se hace notar que las dos variables tienen direcciones diferentes.

Ejemplo de una función que implementa parámetros por referencia:

Ejemplos:

CÓDIGO EN C++:

//Ejemplo de funciones con Paso de parámetros por valor


//Programa que calcula el mayor de tres enteros
//Programador: Gladys Bautista Silva
#include<iostream>

intmaximo(int,int,int);

using namespace std;


int main()
{
int a,b,c;
cout<<"Digite tres enteros: "<<endl;
cin>>a>>b>>c; cout<<"El Maximo es:
"<<maximo(a,b,c)<<endl;
system("pause");
return 0;
}
int maximo(int x,int y,int z)
{
int max=z;
if (x>y&&x>z)
max=x;
if (y>x&&y>z)
max=y;
return max;
}
SALIDA:

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.

Programación II Cadena de Caracteres Página 122


CÓDIGO EN C++:

//Encontrar el IVA, a un precio dado


//Taller resuelto del profesor Luis Guerrero
#include <iostream>
using namespace std;
void pideprecio(double *p);
void calculaiva(double pp,double *v);
void imprimeiva(double ppp,double vv);
int main()
{
double precio=0,valiva=0;
pideprecio(&precio);
cout<<precio<<endl;
calculaiva( precio, &valiva);
cout<<precio<<" IVA: "<<valiva<<endl;
imprimeiva( precio, valiva);
return 0;
}
void pideprecio(double *p)
{
cout << "Escriba el precio del articulo ";
cin >> *p;
}
void calculaiva(double pp,double *v)
{
*v =pp * 0.16;
}

void imprimeiva(double ppp,double vv)


{
cout << "Para un precio de " << ppp << " su IVA es de "<< vv <<
endl;
system("pause");
}

Programación II Cadena de Caracteres Página 123


SALIDA:

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

1.3 VARIABLES LOCALES Y GLOBALES (ÁMBITO)

C++ reconoce el ámbito o alcance de una variable, según haya sido declarada como local
o global.

El ámbito de la variable es la parte del programa en que el compilador la reconoce. Si


una función reconoce una variable se dice que es visible en esa función. La posición en
donde se define la variable determina el ámbito.

Programación II Cadena de Caracteres Página 124


Existen cuatro tipos de ámbitos: programa, archivo fuente, función y bloque.

En C++ las variables globales, tienen ámbito de programa y suelen definirse en


las declaraciones globales del programa. Pueden ser referenciadas por cualquier
función en el desarrollo del programa. Ejemplo:

#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.

Al utilizar variables locales tenga en cuenta lo siguiente:

- Preferiblemente se definen iniciando como primeras instrucciones.


- Solo se puede cambiar el valor de la variable en el interior de la función.
- Los nombres de las variables locales no son únicos en el programa, dos o más
funciones pueden definir la misma variable, evite esto al máximo.
- En caso de que una variable global tenga el mismo nombre que la variable local,
el programa reconocerá el ámbito de la variable local. Si el programador
requiere el dato de la variable global, deberá utilizar un juego de doble dos
puntos (::), antes de la variable para utilizarla.

Programación II Cadena de Caracteres Página 125


Ejemplo:

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

Programación II Cadena de Caracteres Página 126


1.4 RECURSIVIDAD

Un subprograma puede llamar otro subprograma y éste a otro, y así sucesivamente;


esto significa que los subprogramas se pueden anidar.

La recursividad es la característica que tiene una función de llamarse a sí misma directa


o indirectamente, esto es:

A llamar a B, B llamar a C, C llamar a A.


A llamar a B, B
llamar a A. A
llamar a A.

En el lenguaje C++, se presenta la facilidad de que una función se llame a sí


misma, con el fin de realizar un cálculo repetitivo y específico. La escritura de un
procedimiento o función recursiva es similar a sus equivalentes no recursivos; sin
embargo, para evitar que la recursión continúe indefinidamente es preciso incluir
una condición de terminación.

Otras características son:

- Una función recursiva debe retornar un valor.


- En el caso de tener ramificaciones, es necesario retornar un valor por cada una.
- Al menos debe tener un parámetro.
- La utilidad primordial está para los tipos de procesos en pilas y memorias
dinámicas.

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

Escrito de otra manera:

Programación II Cadena de Caracteres Página 127


4!= 4*3!
3!= 3*2!
2!= 2*1!
1!= 1*0!
:
n!= n*(n-1)!

Implementándolo en C++, sería:

//Encontrar el factorial de un número dado

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

double Factorial(int numero)


{
if (numero>1)
return numero*Factorial(numero-1);
else
return 1;
}

Programación II Cadena de Caracteres Página 128


Ejemplo:

CÓDIGO EN C++:

//cálculo repetitivo de un número elevado a una potencia


//Para terminar digite 0 como base
//Programador:profesor Luis Antonio Guerrero

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

void pidebase(int &base)


{
cout << "Numero base (para terminar digite 0) "<<endl;
cin >> base;
}

void pideexpo(int &ponente)


{
cout << "Exponente";
cin >> ponente;
}

Programación II Cadena de Caracteres Página 129


int potencia(int base,int ponente)
{
if(ponente>1)
return base *
potencia(base,ponente-1);
return base;

void muestracum(int base, int ponente)


{
cout << "La potencia "<<ponente<<" del numero " << base<< "
es " << potencia(base,ponente) << endl;
system("pause");
}
SALIDA:

Programación II Cadena de Caracteres Página 130


INTERPRETACIÓN:

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.

return base * potencia(base,ponente – 1) retorna el valor de la función mientras la variable


ponente sea mayor de uno. return base retorna el valor cuando se ha cumplido el cálculo de la
potencia.

RESUMEN

- C++ permite realizar programas estructurados o modulares, con la utilización de


funciones.

- Las funciones de usuario son mini programas dentro de un programa.

- 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.

- Para utilizar en un programa funciones, se requiere de tres pasos: Que la función


se defina antes de su uso (prototipo), que se haga la llamada de la función y
finalmente que se defina o escriba la función (estructura).

- La estructura de una función se puede escribir antes o después de la función main().

- La llamada de una función hace referencia al nombre de la misma y los parámetros


que proporcionan la información que la función necesita a fin de llevar a cabo la
tarea designada.

- Una función que no devuelve valores, inician con la palabra void.

Programación II Cadena de Caracteres Página 131


- Cuando una función tiene un parámetro por valor esta recibe una copia de los
valores de los parámetros, Los parámetros son los argumentos o datos que requiere
la función sean transmitidos para poder operar.

- Una variable puntero o puntero simplemente, es una variable que contiene


direcciones de memoria de otras variables donde se almacenan datos.

- Los parámetros por referencia reciben la dirección de los argumentos pasados y


cambian los valores de los argumentos originales. Se utilizan cuando una función
debe modificar el valor del parámetro pasado y devolver este valor modificado a la
función llamadora.

- 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.

- La recursividad es la característica que tiene una función de llamarse a sí misma


directa o indirectamente.

Programación II Cadena de Caracteres Página 132

También podría gustarte