Vous êtes sur la page 1sur 28

LENGUAJE DE

PROGRAMACION C++
UNIVERSIDAD PERUANA LOS ANDES
FACULTAD DE INGENIERÍA
ESPECIALIDAD DE INGENIERÍA DE SISTEMAS Y
COMPUTACIÓN

Funciones, Estructuras, Programas de Aplicación

Ing. Zenón Manuel LÓPEZ ROBLES


2014
UPLA

1.1. FUNCIONES
PROGRAMACIÓN MODULAR
La programación modular consiste en dividir un programa en módulos independientes, buscando
un sólo punto de entrada y uno de salida, proporciona módulos funcionales (todos los elementos
contribuyen a una sola tarea) y están organizados en niveles de jerarquía.

DEFINICIÓN DE FUNCIONES
Se compone de la cabecera de la función (prototipo de una función) seguido por el cuerpo de la
función. Cuyo formato es:
<Tipo> Nombre_f (t1 p1, t2 p2,…,tk pk)
{
<cuerpo de la función>
}

Si la función devuelve un valor debe utilizarse la sentencia return cuyo formato es:
return (expresión)

return puede situarse en cualquier punto del cuerpo de la función y provoca la salida inmediata de
la función retornando el valor evaluado en la expresión. Si se omite la expresión, return retorna a
la función que lo llamo y no devuelve ningún valor.

DECLARACIÓN DE PROTOTIPOS
El prototipo de una función tiene por finalidad indicar al compilador el tipo de valor que devuelve,
así como el número y tipo de sus parámetros.
En C++ por cada función definida por el usuario es necesario declarar su prototipo. Uno de sus
formatos es:
<Tipo> Nombre_f (t1 p1, t2 p2,…,tk pk);

a) Si en la definición o el prototipo de una función se omite el tipo de


dato que retorna entonces por defecto el compilador asume el tipo
int.
b) Si no se usa la sentencia return la función se ejecuta todo el cuerpo
de la función y retorna a la siguiente línea de donde fue llamado.
LLAMADA A UNA FUNCIÓN:
En cualquier lugar del programa se puede llamar a la función, incluso puede llamarse a si mismo.
Para llamar a una función se utiliza el siguiente formato:
Nombre_f(E1, E2,…, Ek)

Donde:

E1, E2, …,Ek Son expresiones que proporcionan los valores a los
28 parámetros, en el orden indicado.

La lista de parámetros debe estar de acuerdo al tipo y cantidad de


parámetros definidos en la función. El primer parámetro de la lista

Ing. Zenon Manuel LÓPEZ ROBLES


UPLA

corresponde al primer parámetro de la definición, el segundo parámetro


de la lista al segundo parámetro de la definición, así sucesivamente.

Ejemplo (01): Programa que imprime los números primos que existen desde 2 hasta 70.

#include <iostream.h>
#include <conio.h>
int primo(int n);
void main( ){
int n;
for(n=2;n<=70;n++)
if (primo(n))
cout<<n<<" es primo \n";
}
int primo(int n){
int r,d=2,flag=1;
while (1){
if (n==2)
break;
r=n%d;//halla el resto de n entre d
if(r==0){
flag=0;
break;
}
if ((n-1)==d)
break;
d++;
}
if (flag) return 1;
else return 0;
}

Ejemplo (02): Programa que utiliza a la función hipotenusa para calcular la hipotenusa de un
triángulo rectángulo si se proporcionan como parámetros los catetos.

#include <iostream.h>
#include <math.h>
float hipotenusa(float ,float );
void main(){
float x,y,h;
cout<<"ingrese los 2 catetos ";cin>>x>>y;
h= hipotenusa(x,y);
cout<<" hipotenusa= "<<h<<"\n";}
float hipotenusa(float a,float b){
28 float hi;
hi=sqrt(a*a+b*b);
return (hi);}

Ing. Zenon Manuel LÓPEZ ROBLES


UPLA

PARÁMETROS POR VALOR


Hasta al momento solo se han utilizado parámetros por valor. Se dice que los parámetros son
pasados por valor si estos son usados para suministrar datos de entrada. Esto significa que los
cambios que se hacen a las variables utilizadas como parámetros que son pasados por valor solo
pueden cambiar su valor momentáneamente dentro de la función y a la salida de la función
recuperan su valor de entrada. Cuando un parámetro es pasado por valor la función copia su valor
y lo utiliza dentro de la función.
Un parámetro pasado por valor puede ser una constante, una expresión, una llamada a una
función o una variable.

PARÁMETROS POR REFERENCIA


Se dice que los parámetros son pasados por referencia si estos se utilizan para suministrar datos de
entrada y/o salida indistintamente. Esto significa que la función puede alterar el valor de entrada
de las variables que son pasados por referencia. Por lo tanto, si la función debe modificar el valor
de la variable pasada como parámetro y que esta modificación retorne a la función llamadora,
entonces el parámetro debe ser pasado por referencia.

En este método, el compilador no pasa una copia del valor del argumento; en su lugar, pasa una
referencia, que indica a la función donde existe la variable en memoria. La referencia que una
función recibe es la dirección de la variable. Es decir, pasar un argumento o parámetro por
referencia es, simplemente, indicarle al compilador que “que pase la dirección del argumento”.

Una referencia se indica por el operador de dirección &.

Un parámetro pasado por referencia siempre tiene que ser una variable.

Ejemplo (03): El siguiente programa intenta cambiar el valor de dos números si el primero es
mayor que el segundo, pero fracasa porque el parámetro pasado es por valor.

#include <iostream.h>
void intercambiar(int x,int y);
void main(){
int x,y;
cout<<"ingrese x: ";cin>>x;
cout<<"ingrese y: ";cin>>y;
if (x>y) intercambiar(x,y);
cout<<" x= "<<x<<" y= "<<y<<"\n";}
void intercambiar(int a,int b){
int aux;
aux=a; a=b; b=aux;}

Ejemplo (04): El siguiente programa si logra intercambiar los valores de las dos variables. Observe
su implementación de la función intercambiar.

28 #include <iostream.h>
void intercambiar(int &x,int &y);
void main(){
int x,y;
cout<<"ingrese x: ";cin>>x;

Ing. Zenon Manuel LÓPEZ ROBLES


UPLA

cout<<"ingrese y: ";cin>>y;
if (x>y) intercambiar(x,y);
cout<<" x= "<<x<<" y= "<<y<<"\n";}
void intercambiar(int &a,int &b){
int aux;
aux=a; a=b; b=aux;}

ÁMBITO DE UNA VARIABLE


El ámbito de una variable son los lugares donde una variable es conocida. En C++ el ámbito esta
definido por los bloques y la ubicación de las declaraciones.

Ejemplo (05): Programa que permite sumar los n números ingresados.


#include <iostream.h>
void main(){
int n;
cout<<"Nro de elementos : ";
cin>>n;
if (n>0){
int i,num,s=0;
for(i=1;i<=n;i++){
cout<<"Elemento"<<i<<": ";
cin>>num;
s+=num;
}
cout<<"La suma es :"<<s<<"\n";
}
else
cout<<"Error: Sin ingresos";
}

En el programa se ha definido una variable "n" de tipo int, que puede ser utilizada por cualquier
bloque de la función main(), pero en el siguiente bloque:

if (n>0){
int i,num,s=0;
for(i=1;i<=n;i++){
cout<<"Elemento"<<i<<": ";
cin>>num;
s+=num;
}
cout<<"La suma es :"<<s<<"\n";
}
else
cout<<"Error: Sin ingresos";
28
se ha definido tres variables: i, num y s; que sólo pueden ser usadas dentro de este bloque. En
conclusión el ámbito de "n" es toda la función main(), el ámbito de i, num y s es sólo el bloque de
la sentencia if.

Ing. Zenon Manuel LÓPEZ ROBLES


UPLA

VARIABLES LOCALES
Se dice que un variable es local cuando sólo es conocido en un bloque determinado. Un bloque
comienza con { y termina con }.

PÁRAMETROS FORMALES Y REALES


Los parámetros formales son variables locales usadas para definir de la función; por ejemplo: en la
función máximo los parámetros formales son las variables a, b y c.

#include <iostream.h>
int maximo(int a,int b,int);
void main(){
int a,b,c;
cout<<"Ingrese tres números:";
cin>>n1>>n2>>n3;
cout<<"Máximo : " << maximo(n1,n2,n3);
}
int maximo(int a,int b,int c){
int max;
if(a>b) max=a;
else max=b;
if(c>max) max=c;
return max;
}

Los parámetros reales son los datos que son enviados a la función y son utilizados en la llamada a
la función; por ejemplo: en la llamada a la función máximo los parámetros reales son n1, n2 y n3.

Los parámetros reales tienen que coincidir con el número y el tipo de los parámetros formales,
correspondiendo el primer parámetro real al primer parámetro formal, el segundo parámetro real
al segundo parámetro formal, así sucesivamente.

VARIABLES GLOBALES
Se dice que una variable es global cuando es conocido en más de dos funciones. Es recomendable
minimizar el uso de variables globales porque accidentalmente puede ser modificado por una
función produciendo resultados inesperados.

Ejemplo (0): El programa solicita un ángulo en grados sexagesimales en forma decimal, luego
llama a la función radian() que convierte el ángulo a radianes.

Función radian()

Para la conversión se utiliza la siguiente relación:

radianes=sexagesimales*(3.1416/180)
28
#include <math.h>
#include <iostream.h>
void sexag(void);
void radian(void);

Ing. Zenon Manuel LÓPEZ ROBLES


UPLA

// Variable global
float angulo;
void main(){
// Variables locales a main()
char resp;
do{
cout<<"Angulo (en sexagesimales): ";
cin>>angulo;
radian();
cout<<"Continuar? (S/N)\n";
cin>>resp;
}while(resp!='N' && resp!='n');
}
void radian(void){
// Variable local a radian()
float rad;
rad=3.1416/180*angulo;
cout<<"En radianes es:"<<rad<<"\n";
}

PROGRAMAS DE APLICACIÓN
Ejemplo (07): Programa que halla la hipotenusa de un triángulo.
#include <iostream.h>
#include <math.h>
void hipotenusa(float a,float b,float &hi);
main(){
float x,y,h;
cout<<"ingrese los 2 catetos ";cin>>x>>y;
hipotenusa(x,y,h);
cout<<" hipotenusa= "<<h<<"\n";
}
// a y b son parámetros pasados por valor y hi es pasado por referencia
void hipotenusa(float a,float b,float &hi){
hi=sqrt(a*a+b*b);
}

Ejemplo (08): La función distancia() calcula la distancia de dos puntos cuyas coordenadas son
(x1,y1) y (x2,y2). La distancia es igual a:

 x1  x 2  2   x1  x 2  2

#include <iostream.h>
#include <math.h>
28 double distancia(double,double,double,double);
void main(){
double a1,a2,b1,b2;
cout<<"Coordenadas del primer punto :";

Ing. Zenon Manuel LÓPEZ ROBLES


UPLA

cin>>a1>>b1;
cout<<"Coordenadas del segundo punto :";
cin>>a2>>b2;
cout<<"La distancia es: ";
cout<<distancia(a1,b1,a2,b2)<<"\n";
}
double distancia(double x1, double y1,double x2, double y2){
double x;
x=sqrt(pow(x1-x2,2)+pow(y1-y2,2));
return(x);
}
Ejemplo (09):
#include <iostream.h>
#include<conio.h>
#include<math.h>
float LAdosAngulos(float, float, float);
void main(void){
float a,b,c,alfa;
clrscr();
cout<<"Soluciona un triangulo"<<endl;
cout<<"Caso Lado - angulo - lado"<<endl;
cout<<"Ingrese lado b:";cin>>b;
cout<<"Ingrese lado c";cin>>c;
cout<<"Angulo formado(en rad):";cin>>alfa;
a=LAdosAngulos(b,c,alfa);
cout<<"El tercer lado mide"<<a;
}
float LAdosAngulos(float b,float c,float alfa){
float a;
clrscr();
a=sqrt(b*b+c*c-2/b/c*cos(alfa));
return a;
getch();
}

Ejemplo (10):
#include <iostream.h>
#include<conio.h>
int esprimo(int);
void main (void){
int n;
clrscr();
cout<<"ingrese numero";cin>>n;
28 if(esprimo(n))
cout<<"el numero es primo";
}
int esprimo(int n){

Ing. Zenon Manuel LÓPEZ ROBLES


UPLA

int i=n/2;
clrscr();
while(i>1)
if (n%i==0)
return 0;
i=i-1;
return 1;
getch ();
}

Ejemplo (11):
#include<stdio.h>
#include<conio.h>
long int fibonacci ();
int main (){
int n, i;
clrscr();
printf("\n cuantos n´´umeros de fibonacci ?:");
scanf("%d", &n);
printf("\n secuencia de fibonacci : 0,1");
for (i=2; i<n; i++)
printf (",%ld", fibonacci ());
return 0;
}
long int fibonacci (){
static int x=0;
static int y=1;
y=y+x;
x=y-x;
return y;
getch();
}

Ejemplo (12):
#include<stdio.h>
#include<conio.h>
double media (double x1, double x2){
return(x1+x2)/2;
}
int main (){
double num1, num2, med;
clrscr();
28 printf ("introducir dos numeros reales:");
scanf(" %lf %lf", &num1, &num2);
med = media (num1, num2);
printf("el valor medio es %.41f \n",med);

Ing. Zenon Manuel LÓPEZ ROBLES


UPLA

return 0; getch(); }

Ejemplo (13):
#include <iostream.h>
#include<conio.h>
void tablamult(int,int);
void main(void){
int n,m;
clrscr();
cout<<"cual tabla desea?"; cin>>n;
cout<<"cuantos multiplos desea?"; cin>>m;
tablamult(n,m);
}
void tablamult(int n, int m){
int i;
clrscr();
cout<<"tabla de multiplicar del"<<n<<"*"<<endl;
for (i=1; i<=m; i++)
cout<<i<<"*"<<n<<"="<<i*n<<endl;
getch();
}

Ejemplo (14):
#include<conio.h>
#include<iostream.h>
#include<stdio.h>
void primo(int n);
void main(){
int num;
clrscr();
cout<<"ingrese numero :";cin>>num;
primo(num);
getch();
}
void primo(int numx){
int i,variable;
i=numx/2;
variable=1;
while(i>1){
if(numx%i==0)
variable=0;
i=i-1;
}
28 if (variable==1)
cout<<"el numero es primo";
else
cout<<"el numero no es primo";

Ing. Zenon Manuel LÓPEZ ROBLES


UPLA

getch(); }
Ejemplo (15):
#include<conio.h>
#include<iostream.h>
#include<stdio.h>
void primos(int n);
void main(){
int num,j,i,ct,terlim;
clrscr();
cout<<"INGRESE TERMINO FINAL DE LOS NUMEROS PRIMOS : ";cin>>terlim;
primos(terlim);
getch();
}
void primos(int terlim){
int j,i,ct;
for(j=1;j<=terlim;j++){
ct=0;
for(i=1;i<=j;i++){
if(j%i==0){
ct=ct+1;
}
}
if(ct<=2)
cout<<"\n\n\t"<<i-1<<"\n";
}
getch();
}

Ejemplo (16):
//dessarrollar una función que devuelva el mayor de 5 números
#include<conio.h>
#include<iostream.h>
#include<iomanip.h>
float mayor(float a,float b,float c,float d,float e);
void main(){
float a,b,c,d,e,mayornumero;
clrscr();
cout<<"Ingrese 5 numeros separados por un espacio :";
cin>>a>>b>>c>>d>>e;
mayornumero=mayor(a,b,c,d,e);
cout<<"El mayor numero ingresado fue :"
<<mayornumero<<endl;
28 getch();
}
float mayor(float a,float b,float c,float d,float e) {
float auxiliar;
auxiliar=a;
Ing. Zenon Manuel LÓPEZ ROBLES
UPLA

if(auxiliar<b)
auxiliar=b;
if(auxiliar<c)
auxiliar=c;
if(auxiliar<d)
auxiliar=d;
if(auxiliar<e)
auxiliar=e;
return auxiliar;
}

Ejemplo (17):
/*desarrollo de una función que devuelva la suma de los n primeros
numeros enteros*/
#include<conio.h>
#include<iostream.h>
#include<iomanip.h>
long sumaenteros(int n);
void main(){
int numero;
long suma;
clrscr();
cout<<"ingrese un numero entero :";cin>>numero;
suma=sumaenteros(numero);
cout<<"\n la suma de los "<<numero
<<" primeros numeros es :"<<suma<<endl;
getch();
}
long sumaenteros(int n){
int suma;
suma=n*(n+1)/2;
return suma;
}

Ejemplo (18):
*declarar una funcion que convierta un numero real que presenta horas ,ahoras
minutos,segundos y decimos de segundos.*/
#include<conio.h>
#include<iostream.h>
#include<iomanip.h>
void equivalente(float h,float&m,float&s);
void convierte(float x, int&hor,int&min,int&seg,int&dseg);
28 void sumafibonacci(int n,long&suma);
void main(){
//ejecucion de la funcion equivalente
float minutos,segundos;

Ing. Zenon Manuel LÓPEZ ROBLES


UPLA

clrscr();
equivalente(6,minutos,segundos);
cout<<"\n 6 horas equivalente a"<<minutos<<" minutos "<<endl;
cout<<"\n 6 horas equivalente a"<<segundos<<" segundos "<<endl;
getch();
//otra forma de ejecucion de la funcion equivalente
float horas;
cout<<"\n Ingrese numero de horas :";cin>>horas;
equivalente(horas,minutos,segundos);
cout<<horas<<"horas equivalente a"
<<minutos<<"minutos"<<endl;
cout<<horas<<"horas equivalente a"
<<segundos<<"segundos"<<endl;
getch();
// ejecucion de la funcion equivalente()
int hh,mm,ss,ds;
clrscr();
convierte(18.47,hh,mm,ss,ds);
cout<<"el numero 18.47 representa"
<<hh<<" horas :"<<endl
<<mm<<" minutos :"<<endl
<<ss<<" segundos :"<<endl
<<ds<<" decimos de segundo : "<<endl;
getch();
}
/*otra forma de ejecucion de la funcion convierte
float numero;
cout<<"ingrese un numero :";cin>>numero;
convierte(numero,hh,mm,ss,ds);
cout<<"el numero"<<numero<<"representa"
<<hh<<"horas"<<endl
<<hh<<"minutos"<<endl
<<hh<<"segundos"<<endl
<<hh<<"decimos de segundo"<<endl;
getch();
} */
//desarrollo de las funciones propias
void equivalente(float h,float&m,float&s){
int sxm=60;
int sxh=3600;
m=h*sxm;
s=h*sxh;
}
//desarrollo de la funcion convierte
28
void convierte(float x, int&hor,int&min,int&seg,int&dseg){
hor=int(x);
x =(x-hor)*60;
min=int(x);

Ing. Zenon Manuel LÓPEZ ROBLES


UPLA

x =(x-min)*60;
seg=int(x);
x =(x-seg)*60;
dseg=int(x);
}

Ejemplo (19):
#include<conio.h>
#include<iostream.h>
int suma(int a,int b);
int resta(int a,int b);
int multiplicacion(int a,int b);
float divicion(float a,float b);
void main(){
clrscr();
int x,y,op;
cout<<" MENU PRINCIPAL ";
cout<<"\n 1. suma :";
cout<<"\n 2.resta :";
cout<<"\n 3.multiplicacion:";
cout<<"\n 4.divicion :";
cout<<"\n 5.salir";
cout<<"\n elija opcion .............";cin>>op;
cout<<"INGRESE NUMERO 1 :";cin>>x;
cout<<"INGRESE NUMERO 2 :";cin>>y;
switch(op){
case 1:clrscr();
cout<<"\n suma:"<<suma( x,y);break;
case 2:clrscr();
cout<<"\n resta:"<<resta( x,y);break;
case 3:clrscr();
cout<<"\n multiplicacion:"<<multiplicacion( x,y);break;
case 4:clrscr();
cout<<"\n divicion:"<<divicion(x,y);break;
default:clrscr();
cout<<"\n opcion salir.................... ";break;
}
getch();
}
int suma(int a,int b)
{ int sum;
sum=a+b;
return sum;
28 }
int resta(int a,int b)
{ int rest;
rest=a-b;

Ing. Zenon Manuel LÓPEZ ROBLES


UPLA

return rest;}
int multiplicacion(int a,int b)
{ int multipl;
multipl=a*b;
return multipl;
}
float divicion(float a,float b)
{ float divic;
divic=a/b;
return divic;
}

Ejemplo (20):
//Escribir un programa para hallar la suma y promedio de los N términos de
//la serie de FIBONACCI(usar funciones para cada caso
#include<iostream.h>
#include<conio.h>
#define H 100
float suma(float X[],float M);
float promedio(float X[],float M);
void main()
{float T[H],i,S;
clrscr(),
gotoxy(32,2);
cout<<"PROGRAMA Nø3"<<endl;
cout<<" -------- ---"<<endl;
cout<<endl<<"Ingrese el número de elementos de la serie de FIBONACCI: ";
cin>>S;
//inicializaci¢n siempre en 0 y 1 de los dos primeros elementos
T[0]=0;
T[1]=1;
cout<<endl;
for(i=0;i<S;i++)
{T[i+2]=T[i]+T[i+1];
cout<<T[i]<<"\t";}
suma(T,S);
promedio(T,S);
getch();
}
//funci¢n para hallar la suma de los elementos de la serie
float suma(float X[],float M)
{float i,S=0;
for(i=0;i<M;i++)
S+=X[i];
28
cout<<endl<<endl<<"La suma de los elementos es: "<<S;
return 0;
}
//funci¢n para hallar el promedio de los elementos de la serie

Ing. Zenon Manuel LÓPEZ ROBLES


UPLA

float promedio(float X[],float M)


{float i,S=0,P;
for(i=0;i<M;i++)
S+=X[i];
P=S/M;
cout<<endl<<endl<<"El promedio de los elementos es: "<<P;
return 0;
}

Ejemplo (21):
/*declarar una funcion que determine la suma de los n primeros términos
de la serie fibonacci */
#include<conio.h>
#include<iostream.h>
#include<iomanip.h>
void sumafibonacci(int n,long&suma);
void main(){
long sumaserie,terminos;
clrscr();
cout<<"INGRESE CANTIDAD DE TERMINOS :";cin>>terminos;
sumafibonacci(terminos,sumaserie);
cout<<"LA SUMA DE LA SERIE DE FIBONNACCI ES :"<<sumaserie<<endl;
getch();
}
//desarrollo de la funcion fibonacci
void sumafibonacci(int n,long&suma){
unsigned int nactual,nanterior,nsiguiente,cont;
nanterior=0;
nactual=1;
suma=0;
cont=2;
while(cont<=n){
suma+=nactual;
nsiguiente=nanterior=nactual;
nanterior=nactual;
nactual=nsiguiente;
cont++;
}
}

Ejemplo (22):
//Escribir un programa para determinar el mayor, menor, suma, promedio
// y producto de un array de N elementos
28 //Usar una funci¢n para realizar el Ingreso, Reporte, Mayor, Menor, Suma y Promedio
#include<conio.h>
#include<iostream.h>
#define M 100

Ing. Zenon Manuel LÓPEZ ROBLES


UPLA

float ingreso(float X[],float N);


float reporte(float X[],float N);
float mayor(float X[],float N);
float menor(float X[],float N);
float suma(float X[],float N);
float promedio(float X[],float N);
void main()
{float N[M];
float m;
clrscr();
gotoxy(32,2);
cout<<"PROGRAMA Nø4"<<endl;
cout<<" -------- ---"<<endl;
cout<<"Ingrese el numero de elementos que tendr su arreglo: ";
cin>>m;
ingreso(N,m);
reporte(N,m);
mayor(N,m);
menor(N,m);
suma(N,m);
promedio(N,m);
getch();
}
//funci¢n para el ingreso de elementos del arreglo
float ingreso(float X[],float N)
{float i;
for(i=0;i<N;i++)
{cout<<"N["<<i+1<<"]="; cin>>X[i];}
return 0;
}
//función para el reporte de los elemetnos del arreglo
float reporte(float X[],float N)
{float i;
cout<<"Los elementos del arreglo son:"<<endl;
for(i=0;i<N;i++)
{cout<<"N["<<i+1<<"]=";
cout<<X[i]<<endl;}
return 0;
}
//función para calacular cual es el mayor de ellos
float mayor(float X[],float N)
{float i;
float mayor=X[0];
for(i=0;i<N;i++)
28
{if(mayor<X[i])
mayor=X[i];}
cout<<"El mayor de los elementos es: "<<mayor;
return 0;

Ing. Zenon Manuel LÓPEZ ROBLES


UPLA

}
//funci¢n para clacular el menor de los elementos
float menor(float X[],float N)
{float i;
float menor=X[0];
for(i=0;i<N;i++)
{if(menor>X[i])
menor=X[i];}
cout<<endl<<"El menor de los elementos es: "<<menor;
return 0;
}
//funci¢n para calcular la suma de los elementos del arreglo
float suma(float X[],float N)
{float i,S=0;
for(i=0;i<N;i++)
S+=X[i];
cout<<endl<<"La suma de elementos es: "<<S;
return 0 ;
}
//funci¢n para calcular el promedio de los elementos
float promedio(float X[],float N)
{float P,i,S=0;
for(i=0;i<N;i++)
S+=X[i];
P=S/N;
cout<<endl<<"El promedio de los elementos es: "<<P;
return 0;
}

REGISTROS
Frecuentemente en nuestras actividades diarias empleamos datos que guardan alguna relación
entre ellos, por ejemplo si soy un vendedor y tengo la necesidad de ubicar a un cliente
determinado entre los tantos que pueda tener para ofrecerle algún producto, me importaría
determinar quién es mi cliente, lo puedo hacer a través de su nombre, si le asigné un código
también podría identificarlo a través de este, para visitarlo necesito su dirección y si deseo llamarlo
pues necesito su número telefónico; adicionalmente podría también tener otros datos relativos a
este cliente, como podría ser la fecha de su cumpleaños para enviarle una tarjeta, etcétera. Al
juntar todos los datos de este cliente, pues se tiene un conjunto de datos de este cliente, se ha
registrado a este cliente. De igual forma se puede registrar a otros clientes.

Un registro es una colección de datos o campos (código, nombre, dirección, número telefónico,
fecha de nacimiento, etc.) acerca de una entidad (cliente), estos en conjunto pueden ser tratados
como una unidad de información. Cada dato de un cliente (por ejemplo el nombre) es un campo.
28
Los registros en conjunto, uno por cada cliente hace una tabla de datos de la entidad cliente. Si
manejamos adicionalmente tablas de datos acerca de los vendedores, productos, etcétera,
tenemos una Base de Datos.

Ing. Zenon Manuel LÓPEZ ROBLES


UPLA

REPRESENTACIÓN DE REGISTROS
En el C++ para representar los registros empleamos en muchas ocasiones las estructuras y las
uniones. La estructura es básica para la representación de los registros de una tabla de una base
de datos y las uniones en una celda de una hoja de cálculo.
Una estructura a diferencia de un array o arreglo permite mantener datos de distintos tipos. Así
para mantener los registros acerca de los alumnos de una clase donde queramos mantener su
nombre, edad en años y talla; es necesario un arreglo de caracteres para su nombre, un dato tipo
entero para su edad y un dato tipo real para su talla.

char Nombre[20];
int Edad;
float talla;

Una unión permite almacenar diferentes tipos de datos en una misma posición de memoria. Si por
ejemplo tenemos cierto componente electrónico que podamos identificarlo a través de un número
que tiene asignado o a través de su color (para cada color existe un equivalente numérico),
entonces sería lo mismo identificarlo por su color o por su equivalente numérico (sería ilógico
hacerlo por ambos); en consecuencia se puede utilizar una unión para ello, donde empleamos
alternadamente el equivalente numérico o su color, pero no ambos.

ESTRUCTURAS
La estructura es una unidad que agrupa a una o más variables del mismo tipo o de tipos diferentes.
La sintaxis para crear una estructura es la siguiente

struct identificador{
tipo1 miembro1;
tipo2 miembro2;
.
.
tipoN miembroN;
};

Como se puede observar para definir una estructura disponemos de la palabra reservada struct, y
entre llaves se definen todos los miembros de la estructura. Para hacer referencia a un miembro de
una estructura se emplea el punto (.).

Ejemplo : Desarrolle un programa que permita almacenar un registro en


una estructura, acerca de un alumno de una clase donde se
almacene el nombre, edad en años y talla de este alumno.
Luego el programa debe mostrar los datos de dicho alumno.

//Registra a un alumno empleando una //estructura


28 #include<stdio.h>
#include<conio.h>
#include<iostream.h>

Ing. Zenon Manuel LÓPEZ ROBLES


UPLA

struct estalumno{
char nombre[38];
int edad;
float talla;
};

main(){
struct estalumno alumno;
clrscr();
cout<<"Ingrese el nombre: ";
gets(alumno.nombre);
cout<<"\nIngrese la edad (años): ";
cin>>alumno.edad;
cout<<"\nIngrese la talla (metros): ";
cin>>alumno.talla;
clrscr();
cout<<"El alumno "<<alumno.nombre
<<" tiene "<<alumno.edad
<<" años de edad y "
<<"mide "<<alumno.talla
<<" metros";
return 0;
}

El lector debe advertir que a pesar de haber definido la estructura, a la variable alumno se le
asigna el tipo estructura estalumno empleando la palabra struct, así tenemos:
struct estalumno alumno;

Si ingresamos los siguientes datos al programa:


Ingrese el nombre: Fidel Fernández
Ingrese la edad (años): 20
Ingrese la talla (metros): 1.78

La salida será:
El alumno Fidel Fernández tiene 20 años de edad y mide 1.78 metros.
Note que para ingresar la cadena empleamos la función gets(). Esta función permite ingresar una
cadena de caracteres hasta que se ingrese el equivalente a nueva línea (retorno de carro).

UNIONES
28 La unión en una misma posición de memoria de memoria puede almacenar diferentes tipos de
datos, pero en un momento dado puede ser de un solo tipo, el tamaño de la unión es el mismo
que se tiene para el tipo de dato mayor entre los diferentes tipos de la unión.
La sintaxis para crear una unión es la siguiente:

Ing. Zenon Manuel LÓPEZ ROBLES


UPLA

union identificador{
tipo1 ide1;
tipo2 ide2;
.
.
tipoN ideN;
};

Como podemos observar, para definir la unión disponemos de la palabra reservada union, y entre
las llaves se definen todos los tipos alternativos de la unión.

Ejemplo : Desarrolle un programa que demuestre que una unión puede manejar un solo tipo
de dato a la vez. Tome como base para este programa el registro de un
componente electrónico que se puede identificar a través de un número que tiene
asignado o a través de su color (para cada color existe un equivalente numérico),
es lo mismo identificarlo por su color o por su equivalente numérico.

//Registra la identificación de un
//componente empleando una unión
#include<stdio.h>
#include<conio.h>
#include<iostream.h>

union unicomp{
char color[20];
int numero;
};
main(){
union unicomp componente;
clrscr();
cout<<
"Ingrese color del componente: ";
gets(componente.color);
cout<<"\nColor del componente: ";
cout<<componente.color;
cout<<"\nNúmero del componente: ";
cout<<componente.numero;
cout<<
"\n\nIngrese número del componente: ";
cin>>componente.numero;
cout<<"\nColor del componente: ";
cout<<componente.color;
28 cout<<"\nNúmero del componente: ";
cout<<componente.numero;
getch();
return 0;
}

Ing. Zenon Manuel LÓPEZ ROBLES


UPLA

La forma de definir una unión es similar a la de una estructura. Si al programa ingresamos los
siguientes datos tenemos:
Ingrese color del componente: AZUL

Color del componente: AZUL


Número del componente: 23105

Ingrese número del componente: 560

Color del componente: 0UL


Número del componente: 560

A la primera petición de ingreso acerca del color del componente respondemos con la palabra
AZUL, en este caso tenemos la salida correcta para el color y en el caso del número obtenemos un
valor no predecible.
A la segunda petición de ingreso acerca del número del componente respondemos con el número
560, ahora tenemos la salida correcta para el número y en el caso del color obtenemos un valor no
predecible.
Esto es debido a que en un momento dado solo podemos emplear uno de los tipos propuestos
para esta variable.
OPERACIONES CON ESTRUCTURAS

PASO DE ESTRUCTURAS A FUNCIONES

El paso de las estructuras lo podemos hacer de 2 formas, por valor y por


variable (o referencia).

El paso de parámetros por valor se tiene en la definición de la función la


siguiente forma:

nom_funcion(struct tipo_estru par_var);

donde nom_function es el nombre que le damos a la función, struct es la


palabra reservada para las estructuras, tipo_estru es variable tipo
estructura que hemos creado y par_valor es un parámetro que se pasa
por valor.

Para llamar a la función se aplica:

nom_funcion(var_estru);

28 donde var_estru es la variable tipo estructura que se pasa por valor.

Ejemplo : Desarrolle un programa que permita almacenar un registro en una estructura,


acerca de un alumno de una clase donde se almacene el nombre, edad en

Ing. Zenon Manuel LÓPEZ ROBLES


UPLA

años y talla de este alumno. Luego el programa debe mostrar los datos de
dicho alumno empleando para ello una función.

//Registra a un alumno empleando


//una estructura y la pasa a
//una función para su salida
#include<stdio.h>
#include<conio.h>
#include<iostream.h>

struct estalumno{
char nombre[38];
int edad;
float talla;
};

void
impr_alu(struct estalumno cual_alu);

void main(){
struct estalumno alumno;
clrscr();
cout<<"Ingrese el nombre: ";
gets(alumno.nombre);
cout<<"\nIngrese la edad (años): ";
cin>>alumno.edad;
cout<<"\nIngrese la talla (metros): ";
cin>>alumno.talla;
clrscr();
impr_alu(alumno);
}

void
impr_alu (struct estalumno cual_alu){
cout<<"El alumno "<<cual_alu.nombre;
cout<<" tiene "<<cual_alu.edad
<<" años de edad y "
<<"mide "<<cual_alu.talla
<<" metros";
}

Para el paso de parámetros por variable o referencia se tiene en la


28 definición de la función la siguiente forma:

nom_funcion(struct tipo_estru &par_ref);

Ing. Zenon Manuel LÓPEZ ROBLES


UPLA

donde nom_function es el nombre que le damos a la función, struct es la


palabra reservada para las estructuras, tipo_estru es variable tipo
estructura que hemos creado y par_ref es un parámetro que se pasa por
referencia.

Para llamar a la función se aplica:

nom_funcion(var_estru);

donde var_estru es la variable tipo estructura que se pasa por valor.

Ejemplo : Modifique el ejemplo anterior de tal manera que el almacenamiento del


registro se haga a través de una función.

//Registra a un alumno empleando una estructura en una función y la pasa a otra función para su
salida
#include<stdio.h>
#include<conio.h>
#include<iostream.h>

struct estalumno{
char nombre[38];
int edad;
float talla;
};

void ingr_alu(struct estalumno &cual_alu);

void impr_alu(struct estalumno cual_alu);

void main(){
struct estalumno alumno;
clrscr();
ingr_alu(alumno);
clrscr();
impr_alu(alumno);
}
void ingr_alu(struct estalumno &cual_alu){
cout<<"Ingrese el nombre: ";
gets(cual_alu.nombre);
cout<<"\nIngrese la edad (años): "; cin>>cual_alu.edad;
cout<<"\nIngrese la talla (metros): "; cin>>cual_alu.talla;
}
void impr_alu(struct estalumno cual_alu){
28 cout<<"El alumno "<<cual_alu.nombre;
cout<<" tiene "<<cual_alu.edad<<" años de edad y ";
cout<<"mide "<<cual_alu.talla<<" metros";
}

Ing. Zenon Manuel LÓPEZ ROBLES


UPLA

ANIDAMIENTO DE ESTRUCTURAS

El anidamiento de una estructura significa que una estructura forma


parte de otra estructura.

Ejemplo : Defina un algoritmo que permita registrar la fecha y hora de nacimiento de una
persona. Respecto a la fecha se desea saber el día, mes y año de nacimiento.
Sobre la hora se desea registrar la hora, los minutos y los segundos.

//Almacena fecha y hora de nacimiento en una estructura anidada


#include<stdio.h>
#include<conio.h>
#include<iostream.h>

struct estruFecha {
int dia;
int mes;
int anno;
};

struct estruTiempo {
int hora;
int minuto;
int segundo;
};

struct fechaTiempo{
struct estruFecha LaFecha;
struct estruTiempo ElTiempo;
};

main(){
struct fechaTiempo Nacimiento;
clrscr();
cout<<"Ingrese dia de nacimiento: "; cin>>Nacimiento.LaFecha.dia;
cout<<"Ingrese mes de nacimiento: "; cin>>Nacimiento.LaFecha.mes;
cout<<"Ingrese a¤o de nacimiento: "; cin>>Nacimiento.LaFecha.anno;
cout<<"Ingrese durante que hora nacio: "; cin>>Nacimiento.ElTiempo.hora;
cout<<"Cuantos minutos? "; cin>>Nacimiento.ElTiempo.minuto;
cout<<"Cuantos segundos? "; cin>>Nacimiento.ElTiempo.segundo;
clrscr();
28 cout<<"La fecha de nacimiento es el dia "<<Nacimiento.LaFecha.dia<<"/"
<<Nacimiento.LaFecha.mes<<"/"<<Nacimiento.LaFecha.anno;
cout<<"\nLa hora de nacimiento es: "<<Nacimiento.ElTiempo.hora<<" horas, "
<<Nacimiento.ElTiempo.minuto

Ing. Zenon Manuel LÓPEZ ROBLES


UPLA

<<" minutos y "


<<Nacimiento.ElTiempo.segundo
<<" segundos";
return 0;
}

ARREGLOS DE REGISTROS
La forma más adecuada de aprovechar las estructuras es empleándolo dentro de arreglos
Para un arreglo de estructuras, se define la variable estructura como un arreglo. Así por ejemplo
tenemos:

struct persona
{ char[10] nom;
float sueldo;
};

main()
{ struct persona empleado[10];
//arreglo de estructuras
//empleado de 10 elementos
.............
}

Se accede a un elemento del arreglo de estructuras usando el índice del arreglo para la variable
empleado y el operador punto (.)
empleado[indice].sueldo=500;

Ejemplo : Desarrolle un programa que permita leer el nombre y la edad de 10 empleado


y luego imprima los datos ingresados

//Programa que lee e imprime el contenido de un arreglo de estructuras

#include <iostream.h>
#include <conio.h>
#include <stdio.h>

#define max 10

struct datos
{ char nomb[20]; //nombre
int edad;
};

28 void leer(struct datos pe[max]);


void escribir(struct datos pe[max]);
void main(){
struct datos p[max];

Ing. Zenon Manuel LÓPEZ ROBLES


UPLA

clrscr();
leer(p);
escribir(p);
}
void leer(struct datos pe[max]){
int i;
for(i=0;i<max;i++)
{ cout << "Ingrese nombre:==> ";
gets(pe[i].nomb);
cout << "Ingrese edad ==> ";
cin >> pe[i].edad;
}
}
void escribir(struct datos pe[max]){
int i;
for(i=0;i<max;i++)
{ cout << "Nombre ==> "
<< pe[i].nomb<<"\n";
cout << "Edad ==> "
<< pe[i].edad<<"\n";
}
}

Advierta como en este programa se leen los registros, como es un arreglo por defecto se tiene que
el paso de parámetros es por variable o referencia.

PROGRAMAS DE APLICACIÓN

EJEMPLO 1 : Escribir un programa que permita registrar a las personas que visitan una
empresa. Se debe registrar el nombre y la edad de la persona; el día, mes y año
de la visita, así como también la hora, minuto y segundos en la que se realizó la
visita. El programa debe mostrar luego un reporte de las visitas.

#include <iostream.h>
#include <conio.h>
#include <stdio.h>
#define max 20
struct estruFecha {
int dia;
int mes;
int anno; };
struct estruTiempo {
28 int hora;
int minuto;
int segundo;
};
struct datos

Ing. Zenon Manuel LÓPEZ ROBLES


UPLA

{ char nomb[20]; //nombre


int edad;
struct estruFecha LaFecha;
struct estruTiempo ElTiempo;
};
void leer(struct datos pe[max]);
void escribir(struct datos pe[max]);
void main(){
struct datos p[max];
clrscr();
leer(p);
escribir(p);
getch();
}
void leer(struct datos pe[max]){
int i;
for(i=0;i<max;i++) {
flushall(); //limpia el buffer
//del teclado
cout<<"Ingrese nombre: ";
gets(pe[i].nomb);
cout<<"Ingrese edad: "; cin>>pe[i].edad;
cout<<"Ingrese dia: "; cin>>pe[i].LaFecha.dia;
cout<<"Ingrese mes: "; cin>>pe[i].LaFecha.mes;
cout<<"Ingrese a¤o: "; cin>>pe[i].LaFecha.anno;
cout<<"Ingrese la hora: "; cin>>pe[i].ElTiempo.hora;
cout<<"minutos? "; cin>>pe[i].ElTiempo.minuto;
cout<<"segundos? "; cin>>pe[i].ElTiempo.segundo;
cout<<"\n";
}
}
void escribir(struct datos pe[max]){
int i;
for(i=0;i<max;i++) {
cout<<pe[i].nomb
<<" de "<<pe[i].edad<<" a¤os \n"
<<"visit¢ la empresa el dia "
<<pe[i].LaFecha.dia<<"/"
<<pe[i].LaFecha.mes<<"/"
<<pe[i].LaFecha.anno;
cout<<"\na las: "
<<pe[i].ElTiempo.hora<<" horas, "
<<pe[i].ElTiempo.minuto <<" minutos y "
<<pe[i].ElTiempo.segundo<<" segundos" <<"\n\n\n";
28
}}

Ing. Zenon Manuel LÓPEZ ROBLES

Vous aimerez peut-être aussi