Вы находитесь на странице: 1из 158

PROGRAMACION ORIENTADA A OBJETOS

FUNDAMENTOS DE LA PROGRAMACION ORIENTADA A OBJETOS

UNIVERSIDAD NACIONAL DE INGENIERA


FACULTAD DE INGENIERA MECNICA

2015
1

PROGRAMACION ORIENTADA A OBJETOS

CAPITULO I

2015

PROGRAMACION ORIENTADA A OBJETOS

FUNDAMENTOS DE LA PROGRAMACION ORIENTADA A OBJETOS

2015
3

CAPITULO I
LENGUAJE C CONCEPTOS BASICOS
1

Conceptos De La Programacin Orientada a Objetos.-La programacin orientada a objetos existe


desde la creacin de los primeros lenguajes de programacin. Los conceptos que se manejan de
abstraccin de datos, herencia y Polimorfismo se manejaban en estos lenguajes, pero con el desarrollo
del lenguaje C y la programacin visual se utiliza este tipo de programacin con mayor profusin.
Programacin estructurada, la programacin estructurada se basa en la creacin de una funcin
principal y una serie de rutinas(funciones) llamadas desde la funcin principal, que hacen que el
desarrollo sea horizontal contrastando con la programacin lineal cuyo desarrollo es vertical. Tambin
podemos indicar que la informtica en su parte de programacin era:
Programa = Algoritmo + Estructura de datos. La ventaja de este modelo era importante pero
todava se segua manejando por separado el estado del sistema que descansa en la estructura de
datos y los procedimientos que actan sobre el sistema, tampoco hay una consistencia de datos, esto
queda librado al criterio del programador, estas desventajas y otras ms se van a superar con la
programacin orientada a objetos.
1.1 Programacin orientada a objetos.- La programacin orientada a objetos es la ultima
modificacin, donde ya se incorporan algunos aspectos tomando como modelo la vida real.
Tipos de Datos Abstractos Algunos autores describen la programacin orientada a objetos
como programacin de tipos de datos abstractos y sus relaciones. Vamos a tratar de estudiar este
aspecto de modelo de la vida real con mas detalles en el concepto de Tipos de Datos
Abstractos
Creando modelos.- La informtica y la automatizacin en general trata de resolver o facilitar la
vida real creando programas y aplicaciones para esto. Sin embargo, los problemas de la vida real
no estn claramente definidos por qu primeramente hay que crear un modelo de las entidades
que actan en la vida real, entonces lo primero que se tiene que hacer es tratar de obtener tu

PROGRAMACION ORIENTADA A OBJETOS

2015

propia perspectiva abstracta, o modelo, del problema. Este proceso de modelado se llama
abstraccin y se ilustra en la Figura 1.1.
PROBLEMA

ABSTRACCION

MODELO

Figura 1.1
El modelo define una perspectiva abstracta del problema. Esto implica que el modelo se enfoca
solamente en aspectos relacionados con el problema y que t tratas de definir propiedades del
problema. Estas propiedades incluyen
Los datos que son afectados
Las operaciones que son identificadas por el problema.
Vamos a plantear un caso, deseamos manejar los alumnos de un instituto. Que informacin es
necesaria, que funciones necesitamos que trabajen: Algunas propiedades serian
DNI,
Nombre
Fecha de nacimiento,
Talla
Domicilio,
Color de ojos
Color de pelo,
Telfono
pero nosotros nos abstraeremos y tomaremos solo las propiedades necesarias para resolver el
problema. Este modelo solo implica propiedades que son necesarias para cumplir con los
requerimientos de la aplicacin, por ejemplo el nombre, fecha de nacimiento y el DNI. A estas

2015
5

PROGRAMACION ORIENTADA A OBJETOS

FUNDAMENTOS DE LA PROGRAMACION ORIENTADA A OBJETOS

propiedades se les llama los datos del modelo (de alumno). Ahora ya se tienen descritas a los
alumnos reales por medio de un alumno abstracto.
Definiremos algunas operaciones para manejar los alumnos:

Matricula de un alumno nuevo.

Evaluacin del alumno en un curso.

Para resumir, la abstraccin es la estructuracin de un problema en entidades bien definidas por


medio de la definicin de sus datos y operaciones. Consecuentemente, estas entidades combinan
datos y operaciones. No estn desacoplados unos de otras.
El modelo quedara:

Nombre
Fecha de Nacimiento
DNI

Matricula_Ingresantes
Directivas del PreProcesador
Include
Macros

Datos y funciones externas

Datos y Funciones Globales

void main( )
{.
...........
1.2. Organizacin
de un Programa C++:Se compone de los bloques:
}

Evaluacion

PROGRAMACION ORIENTADA A OBJETOS

2015

1.2.1. Directivas del Preprocesador:Permite que se realicen ciertas tareas antes que la
compilacin se efecte. Las directivas son normalmente #include y #define.
Ejemplo:
# include<math.h> // incluye el archivo fuente en C++ de las libreras matemticas
# include<conio.h> // incluye el archivo fuente de manejo de pantalla
# define PI 3.1416 // indica que PI es equivalente a 3.1416
Tambin:
# include<nombre_archivo> // Busca en directorio por defecto
# include nombre_archivo// Busca en directorio actual y luego en directorio por defecto
1.2.2. Declaraciones Globales: Indica que variables y funciones definidas por el usuario comunes
(accesibles) a todas las funciones del archivo fuente.
Ejemplo:#include <iostream.h>
int A,B; float C, D;
int media(int p1, int p2); // Prototipo
#include "stdafx.h"

1.2.3. La funcin
main(). Es el punto de inicio de la ejecucin de un programaEn programas
#include<iostream>
#include<conio.h>

simples
todonamespace
el cdigo se
coloca en el programa.
using
std;
Ejemplo :

void _tmain(int argc, _TCHAR* argv[])


{int a,b,c;
cout<< "ingrese a: ";
cin>>a;
cout<< "ingrese b: ";
cin>>b;
c=a+b;
cout<<"La suma es:"<<c<<endl;
getch();
//return 0;
}

PROGRAMACION ORIENTADA A OBJETOS

FUNDAMENTOS DE LA PROGRAMACION ORIENTADA A OBJETOS

2015
7

En programas ms complejos el cdigo va en las funciones


void main ( )
{ leer ( );
procesar_planilla( );
imprimir_planilla( );
}

Lo visualizamos as:
void main()
{
}

void leer( )
{
}

void procesar_planillar( )
{
#include "stdafx.h"
# include<iostream>
#}include<conio.h>
using namespace std;
/* Variables globales */
int operando1, operando2;
int resultado;
inprimir_planillar(
)
/*void
funciones
globales, declaracin
de prototipos */
{ leer( );
void
void sumar( );
void escribir( );
} _tmain(int argc, _TCHAR* argv[])
int
{leer ( );
sumar ( );
( ); General de un programa en Borland C++. 1.3.escribir
Estructura
return 0;
}1.3.1. Introduccin .- Un programa en C++ se compone de una o ms funciones. Por lo menos
/* desarrollo de las funciones */
debe
void leer
( ) existir la funcin main(), una funcin es un grupo de instrucciones que realizan una tarea
{ //clrscr();
(o tareas). Un programa nos permite incluir una serie de archivos de cabecera, que tambin
cout<< " Operando1= "; cin >> operando1;
cout<<
" Operando2=
"; ciny>>
operando2;
contiene
definiciones
otras
funciones.
}

Ejemplo : Programa que realiza una suma utilizando funciones y variables globales.

void sumar ( )
{ resultado = operando1 + operando2;
}
void escribir ( )
{7//clrscr();
cout<< " Suma = " << resultado ;
getch(); }

PROGRAMACION ORIENTADA A OBJETOS

1.3.2.

2015

Creacin de un Programa.- Para crear y ejecutar un programa hay que realizar las

siguientes etapas:
Utilizando un editor de texto escribimos el programa y lo grabamos, este programa grabado ser el
archivo fuente del programa.
Genera nombre.cpp
Traduccin del programa a lenguaje de maquina o un cdigo entendible por el computador, llamado
tambin compilacin, se genera el cdigo objeto.
Genera nombre.exe
1.3.3.

Compilacin, enlace y ejecucin.-

El editor, el compilador y la ejecucin estn

disponibles en el entorno integrado del Visual C++.


El editor y el compilador en el eid.
La ejecucin en el men debug (depuracin).
1.4. Elementos de un programa en C++.- Se compone de elementos llamados tokens, que pueden
ser identificadores, palabras reservadas, comentarios, signos de puntuacin, separadores y
archivos de cabecera.
Identificadores.-

Cadenas de caracteres sirven para identificar cualquier elemento de un

programa como constantes, variables, funciones etc. Ejemplo: lnea, leer_datos, valor, suelo, PI.
Todo identificador est compuesto por letras, dgitos y el carcter subrayado, el primer carcter
debe de ser una letra.

PROGRAMACION ORIENTADA A OBJETOS

FUNDAMENTOS DE LA PROGRAMACION ORIENTADA A OBJETOS

2015
9

Palabras reservadas.- Son identificadores que son utilizados por el sistema y no pueden ser
utilizados para otros fines. Ejemplo: char, return, break, if etc.
Comentarios.- Nos entregan informacin sobre el programa pero no son procesables. Existen
dos tipos en C
/* ........*/ Comentario se puede hacer por varias lneas
/* Realizado por: AAAAAAAAAA
Fecha: 99/99/99
Calcula aaaaa */
//

Comentario para el final de la lnea

contador = contador + 1; // Incremento unitario del contador


Signos de puntuacin: Los puntos y comas terminan una sentencia, las llaves agrupan
instrucciones, las comas separan elementos iguales etc.
{ leer(a1,a2,a3);
procesar(a1, a2, a3);
escribir(a3);}
Separadores.- Espacios en blanco, tabulaciones, retornos de carro y avances de lnea.
Archivos de cabecera.- Nos permiten incluir archivos al momento de compilacin.
1.5. Tipos de Variables estndar en C++.- Datos estndar quiere decir aceptados por todos, en C++
tenemos como en la mayora de lenguajes enteros, reales y carcter.

Entero
int 9 digitos
long 9 digitos

4 bytes
4 bytes

Real
float 3.4 x 10-38 a 3.4 x 1038 4 bytes
double 1.7 x 10-308 a 1.7 x 10308 8 bytes
long double 3.4 x 10-4932 a 3.4 x 103932 10bytes

char
Char
-128...... 127
Unsigned char 0..255

1 byte
1 byte

1.6. Constantes.- Se clasifican en:

Constantes literales. ( Escritas directamente en el programa)


Enteras. 125, 100, 0x372
Reales. 1.25E-4, 75.25
Carcter. A, n
Cadena. jose ruiz, ------------

Constantes definidas(Simblicas). Definidas mediante #define


#define linea ---------------
#define maximo 1000

PROGRAMACION ORIENTADA A OBJETOS


#define raiz2

2015

1.4142

Constantes enumeradas. Se utilizan para clarificar un programa, un ejemplo seria: enum


frutas { naranja, papaya, fresa, limn}, inmediatamente el compilador asocia un numero de
orden a cada elemento, el primero ser 0 (naranja)

Constantes declaradas. Se declara con el formato


const tipo nombre = valor;
ejemplo: const int dias_mes = 30;

const char[ ] titulo = MENU PRINCIPAL

1.7. Variables.- Se le asigna una posicin de memoria cuyo contenido si puede ser modificado, al
contrario de las constantes que no pueden ser modificadas. La variable tiene un identificador, un
tipo de valor que almacena y una direccin. Su forma general es:
Tipo nombre [= valor];

Ejemplo: int contador = 0, suma = 0; float raiz = 1.0; long factorial=1;


1.8. Entrada y salida simple en C++.- La entrada y salida bsica en C++ se realiza utilizando los flujos
cin y cout. El flujo cin(entrada) conecta el dispositivo por defecto de enatrada(teclado) con el
sistema. El flujo cout(salida) conecta el programa con el dispositivo asignado por defecto a la
salida(Pantalla). Para colocar informacin en cout se utiliza el operador sobrecargado << y para
tomar informacin en cin se utiliza el operador sobrecargado >>.
Veamos el ejemplo 1.PROGRAMA

// prog31.cpp: define el punto de entrada de la aplicacin de consola.


/*OBJETIVO: Mostrar la salida en pantalla utilizando el operador << y el flujo cout, considera
constantes y variables. */
#include "stdafx.h"
#include <iostream>
#include <conio.h>
using namespace std;
#define linea1 "|---------------------------------------------------|"
#define linea2 "|---------------------------------------------------|"
void main( )
{ int i;
//clrscr();
cout<<linea1<<endl;;
cout<<'|';
for (i=1;i<=20;i++)
cout<<i<<" ";
cout<<'|'<<endl;
//cout<<linea2;
prog41.cpp: define el punto de entrada de la aplicacin de consola.
/*
CODIGO:
getch();
}
FECHA: 19 de Enero de 2015
OBJETIVO: Mostrar las diferentes formas de leer valores y almacenarlos en las variables */
#include "stdafx.h"
EJECUCION
#include<iostream>
#include<conio.h>
using namespace std;
void main( )
{ int voltaje,corriente;
system("cls");
cout<<"Ingrese voltaje ==> ";cin>>voltaje;
corriente=>
En lacout<<"Ingrese
lectura se asignara
valores a";cin>>corriente;
las variables sea una por una o varias a la vez, como en el ejemplo 2.cout<<"Voltaje = "<<voltaje<<endl;
PROGRAMA
cout<<"Corriente = "<<corriente<<endl;
cout<<"Potencia ==> "<<voltaje*corriente<<endl;
cout<<"Ingrese voltaje y corriente separados por blancos ==> "; cin>>voltaje>>corriente;
10
cout<<"Potencia
==> "<<voltaje*corriente<<endl;
_getch();}

PROGRAMACION ORIENTADA A OBJETOS

FUNDAMENTOS DE LA PROGRAMACION ORIENTADA A OBJETOS

2015
11

EJECUCION

1.9. Secuencias de escape.- Las secuencias de caracteres en las que el primero es la barra invertida,
se denominaron secuencias de escape y nos permiten enviar ciertos caracteres a la pantalla. Por
ejemplo, \n se utiliza para representar el carcter nueva lnea (decimal 10) y \t ser tabulacin
horizontal. La tabla es:.
Secuencia Valor

Smbolo

Que hace

\a

0x07

BEL

Sonido audible (bell)

\b

0x08

BS

Retroceso (backspace)

\f

0x0C

FF

Salto de formato (formfeed)

\n

0x0A

LF

Saltar una lnea (linefeed)

// prog51.cpp:
define el punto
de la
de consola.
\r
0x0D
CR de entrada
Retorno
deaplicacin
carro (carriage
return)
/* CODIGO: cppcap01ejem03
\t
0x09
Tabulacin horizontal (H Tab)
FECHA:
19 de
Enero deHT
2015
OBJETIVO: MANEJO DE SECUENCIAS DE ESCAPE */
\v
0x0B
VT
Tabulacin vertical (V Tab)
#include "stdafx.h"
#include<iostream>
#include<conio.h>
using namespace std;
void main( )
Veamos
elDE
ejemplo
3.-PARA UNA FUNCION DE LA FORMA A*X^2+B*X+C
{ //
CALCULO
VALORES
PROGRAMA
float x,fx,dx;
int i,n,A,B,C;
cout<<"\n\t\t\t TABULANDO UNA FUNCION \n\n\n";
cout<<"\t Ingrese coeficientes A,B,C separados por blancos: ";
cin>>A>>B>>C;
cout<<"\t Ingrese valor inicial
: ";cin>>x;
cout<<"\t Ingrese cantidad de valores : ";cin>>n;
cout<<"\t Ingrese incremento de x
: ";cin>>dx;
cout<<"\n\n"; cout<<"\t\tx";
cout<<"\t\tf(x) \n"; cout<<"\t\t__";
cout<<"\t\t____ \n\n";
for(i=1;i<=n;i++)
{ fx= A*x*x+B*x+C;
cout<<"\t\t"<<x;
cout<<"\t\t"<<fx<<"\n";
11
x=x+dx;
}
_getch() ; }

PROGRAMACION ORIENTADA A OBJETOS

2015

EJECUCION

EJECUCION

Manipulacin y formato de datos de salida.- El precisar con cuantos decimales debe mostrarse
nuestros datos de salida y que ancho y otras caractersticas se llama dar formato a la salida. Cuando
deseamos manejar este formato lo podemos realizar de la siguiente manera:
1. Mediante el uso de funciones miembro de un objeto de flujo. Su sintaxis es la siguiente:
nombreObjetoInvocador.nombreFuncionMiembro(listaArgumentos );
cout.width( 5 );
cout.fill( '*' );
cout.precision( 3 );
2. Mediante el uso de funciones especiales llamadas manipuladores, con o sin
argumentos.
cout << flush;
cout << endl;
cout << setw( 6 ) << 12 << endl;
cout << seprecision( 2 ) << 12.325 << endl;
3. Mediante el uso de banderas (indicadores) como argumentos de la funcin miembro setf( ) del objeto
de flujo:
cout.setf( ios::fixed );
cout.setf( ios::showpoint );
Veamos la tabla de manipuladores de flujo de salida:
MANIPULADOR
dec

12

FUNCION QUE REALIZA


Establece la base decimal.

PROGRAMACION ORIENTADA A OBJETOS

FUNDAMENTOS DE LA PROGRAMACION ORIENTADA A OBJETOS


hex
oct
endl
ends
flush
setbase(int n)
resetiosflags(long f)
setiosflag( long f)
setfill(int c)
setprecision(int n)
setw(int n)

Establece la base hexadecimal


Establece la base octal.
Inserta nueva lnea y cambia de flujo
Inserta un cero nulo al final de la cadena.
Vaca el flujo
Establece la conversin de base.
Limpia el formato especificado por f.
Establece formato especificado por f.
Rellena con el carcter c.
Establece precisin de punto flotante a n.
Establece el ancho de campo a w.

Ejemplo 4.- Veamos un ejemplo de dec,oct y hex.


PROGRAMA
// prog61.cpp: define el punto de entrada de la aplicacin de consola.
// OBJETIVO: Utilizacion de manipuladores de flujo de salida
#include "stdafx.h"
#include<iostream>
#include<conio.h>
using namespace std;
void main( )
{ // Lee un valor y lo muestra en formato decimal, octal y hexadecimal
int numero;
system ("cls");
cout<<"Ingrese un numero : ";
cin>>numero;
cout<<"Numero decimal......"<<numero<<endl;//base decimal
cout<<"Numero octal........"<<oct<<numero<<endl;//base octal
cout<<"Numero hexadecimal.."<<hex<<numero<<endl;//base hexadecimal
getch();
}

Tabla de indicadores de formato:


INDICADOR
ios::left

LO QUE REALIZA
Justifica a la izquierda dentro de setw.

ios::rigth

Justifica a la derecha dentro de setw.

ios::scientific

Muestra nmeros en notacin cientfica.

ios::fixed

Muestra en formato de punto fijo.

ios::dec

Formatea a base 10.

ios::hex

Formatea a base 16.

ios::oct

Formatea a base 8.

13

2015
13

PROGRAMACION ORIENTADA A OBJETOS


ios::uppercase

Formatea la parte literal a mayscula.

ios::showbase

Imprime el prefijo de base.

Ios::showpos

Imprime signo

Ios::showpoint

Completa con ceros.

2015

Ejemplo 5.- Veamos un ejemplo que maneje la precisin de salida de un valor real.
PROGRAMA
// prog71.cpp: define el punto de entrada de la aplicacin de consola.
//OBJETIVO: Muestra el uso del manipulador setprecision( )
//para indicar el nmero de dgitos decimales del valor flotante.
#include "stdafx.h"
#include <iostream> //Para cout
#include <iomanip> //Para setprecision( )
#include <conio.h> //Para getch()
using namespace std;
void main( void )
{float valor = 3.1416;
cout<< setiosflags( ios::fixed );
cout<< setprecision( 0 ) << valor << endl;
cout<< setprecision( 1 ) << valor << endl;
cout<< setprecision( 2 ) << valor << endl;
cout<< setprecision( 3 ) << valor << endl;
cout<< setprecision( 4 ) << valor << endl;
cout<< setprecision( 5 ) << valor << endl;
cout<< setprecision( 6 ) << valor << endl;
getch(); }

PROBLEMAS
1. Dado un numero n se pide calcular la cantidad de cifras impares y de cifra pares que tiene n. Utilizar
variables globales.

// prog81.cpp: define el punto de entrada de la aplicacin de consola.

PROGRAMA
//OBJETIVO: Lee un numero y halla cuantos cifras impares y cifras pares componen el numero.

#include "stdafx.h"
int num,cifra;
int contp, conti; // contador de cifras pares y contador de cifras impares
#include<iostream>
# include<conio.h>
using namespace std;
void main( )
{ system("cls");
cout<<"Ingrese un numero: ";cin>>num;;
while( num!=0)
{ cifra = num%10;
if (cifra%2==0)
contp++;
else
conti++;
14
num=num/10;
}
cout<<"Cifras pares : "<<contp<<endl;;
cout<<"Cifras impares: "<<conti;getch(); }

PROGRAMACION ORIENTADA A OBJETOS

FUNDAMENTOS DE LA PROGRAMACION ORIENTADA A OBJETOS

2015
15

Nota: Observe algunos detalles, las variables son globales, por lo tanto los contadores se inicializan
automticamente desde cero. Adems num es una variable entera solo debe permitir valores de 5 cifras
pero se sobrepasa, quiere decir que el tipo entero ocupa ms de dos bytes (4 bytes).
2.- Escriba un programa que utilice la definicin del tipo enumerado color, e imprima el color escogido..
PROGRAMA
// prog10.cpp: define el punto de entrada de la aplicacin de consola.
//OBJETIVO: Maneja tipo enumerado
#include "stdafx.h"
# include<iostream>
# include<conio.h>
using namespace std;
void main( )
{ enum color {rojo,verde,amarillo,azul,negro};
color c1=rojo,c2 = amarillo, c3 = negro;
switch(c1)
{ case 0:cout<<"ROJO"<<endl;break;
case 1:cout<<"VERDE"<<endl;break;
case 2:cout<<"AMARILLO"<<endl;break;
case 3:cout<<"AZUL"<<endl;break;
case 4:cout<<"NEGRO"<<endl;break; }
switch(c2)
{ case 0:cout<<"ROJO"<<endl;break;
case 1:cout<<"VERDE"<<endl;break;
case 2:cout<<"AMARILLO"<<endl;break;
case 3:cout<<"AZUL"<<endl;break;
case 4:cout<<"NEGRO"<<endl;break;
}
switch(c3)
{ case 0:cout<<"ROJO"<<endl;break;
case 1:cout<<"VERDE"<<endl;break;
case 2:cout<<"AMARILLO"<<endl;break;
case 3:cout<<"AZUL"<<endl;break;
case 4:cout<<"NEGRO"<<endl;break;
}
getch();}

EJECUCION

3.- Elaborar

un programa que simule la accin de una calculadora de bolsillo: lee una secuencia de valores

numricos separados por operadores aritmticos (+, -, *, /), y calcula el valor de la expresin definida por
esta secuencia. El resultado del clculo se produce cuando se lee el operador =.
PROGRAMA

/* prog02.cpp: define el punto de entrada de la aplicacin de consola.


OBJETIVO: Simula la accin de una calculadora de bolsillo o sea lee un operando, luego el operador ,
a continuacin el operando realiza la operacin y lee un nuevo operando y as hasta que
el operador sea el signo igual y muestre el resultado */
#include "stdafx.h"
# include<iostream>

15

PROGRAMACION ORIENTADA A OBJETOS


# include<conio.h>
using namespace std;
void main( )
{ float operando,resultado;
char operador;
system("cls");
cout<<" Ingrese operando ==> "; cin>>resultado;
do {cout<< "Ingrese operador ==> ";
cin>>operador;
switch(operador)
{ case '+': cout<<" Ingrese operando ==> ";
cin>>operando;
resultado=resultado+operando;break;
case '-': cout<<" Ingrese operando ==> ";
cin>>operando;
resultado=resultado-operando;break;
case '*': cout<<" Ingrese operando ==> ";
cin>>operando;
resultado=resultado*operando;break;
case '/': cout<<" Ingrese operando ==> ";
cin>>operando;
resultado=resultado/operando;break; }
} while(operador!='=');
cout<<" Resultado = "<<resultado;
_getch();}
EJECUCION

16

2015

PROGRAMACION ORIENTADA A OBJETOS

FUNDAMENTOS DE LA PROGRAMACION ORIENTADA A OBJETOS

2015
17

CAPITULO II

CAPITULO II
INSTRUCCIONES DE CONTROL EN C
2. INTRODUCCION
2.2. EXPRESIONES Y OPERADORES
2.2.1.

Expresiones.- Una expresin es una secuencia de operadores y operandos, aunque

tambin podemos tener algunas expresiones que salen de este formato. Ejemplo : a = *c;
p1 = &c; numero ++.
2.2.2.

Operadores aritmticos.- Nos permiten realizar las operaciones aritmticas bsicas

sean del tipo real (float) o entero, considerando que en lenguaje C se define el tipo de
operacin
operandos, si al menos
un
Operador por los
Entero
Real
. operando es del tipo float la operacin se
+
Unitario mas
realizara
en el Unitario
modo mas
real.

17

+
*
/
%
++
--

Unitario menos
Suma
Resta
Producto
Cociente de divisin entera
Resto de divisin entera
Incremento
Decremento

Unitario menos
Suma
Resta
Producto
Cociente real

2015

PROGRAMACION ORIENTADA A OBJETOS

Ejemplo : 4%3 ser 1

y 3%4 ser 3 ;

10/4 ser 2

y 10/4.0 ser 2.5

En el primer caso la divisin es 1 y el resto 1.


En el segundo caso la divisin es 0 y el resto 3
En el tercer caso la divisin es 2 y en el cuarto caso la divisin es 2.5 (Modo real)
Operadores de incremento y decremento.- Los operadores ++ y - - suman o restan 1 a su
argumento. Por ejemplo a++ y ++a producen el mismo efecto. Sobre el argumento pero :
int numero, valor ;
valor = 6;
numero = valor++; //Asigna a numero 6 a numero y luego incrementa valor a 7
numero = ++valor; // Incrementa valor a 7 y luego asigna 7 a numero
Lo mismo sucede con cont - - y - - cont
Operadores de asignacin, relacin, lgicos y desplazamiento. Operadores de asignacin.- Consideramos el smbolo = operador de asignacin. Por ejemplo
podemos colocar cont1 = cont2 = cont3 = 0;

Le asignamos el valor cero a los tres contadores

pero esta operacin se realiza de izquierda a derecha. Tambin podemos abreviar c+=5 ; que es
equivalente a c = c +5, tenemos lasiguiente tabla
Operador
+=
-=
*=
/=
%=

Abreviatura
a+=b
a-=b
a*=b
a/=b
a%=b

Sentencia
a=a+b
a=a-b
a=a*b
a=a/b
a=a%b

Operadores relacionales.- Relacionan operandos enteros o reales pero su resultado es


booleano, estos son:
a == b uno si es verdadero y cero si a no es igual a b
a != b uno si es verdadero y cero si a es igual a b
a < b uno si es verdadero y cero si a es mayor o igual a b
a > b uno si es verdadero y cero si a es menor o igual a b
a <= b uno si es verdadero y cero si a es mayor que b
a >= b uno si es verdadero y cero si a es menor que b
Pero tambin podemos tener a = b > c en cuyo caso a valdr 1 si b es mayor que c y cero en
caso contrario.

Operadores lgicos.- Son el not el and y el or, Relacionan operandos booleanos y su resultado
es booleano, estos son:

18

Negacin ! el not lgico

And && el and para que sea verdadero sus dos operandos deben ser verdaderos.

PROGRAMACION ORIENTADA A OBJETOS

FUNDAMENTOS DE LA PROGRAMACION ORIENTADA A OBJETOS

Or ||

2015
19

el or para que sea verdadero basta que un operando sea verdadero.

Ejemplo 1 : Escriba un programa que lea un numero y lo muestre invertido


Si lee 2345 debe escribir 5432.
PROGRAMA

// prog12.cpp: define el punto de entrada de la aplicacin de consola.


/* FECHA: 02 de Setiembre de 2015
OBJETIVO: Lee un numero y lo invierte */
#include "stdafx.h"
#include<iostream>
#include<conio.h>
using namespace std;
void main( )
{ int numero, num_inv, digito ;
system("cls");
num_inv = 0;
cout<< " Ingrese un numero => "; cin >> numero;
while ( numero >0)
{ digito = numero % 10;
num_inv = num_inv*10 + digito;
numero = numero / 10; cout<<num_inv<<endl;
}
cout<< " El numero invertido sera = " << num_inv;
_getch(); }

OperadoresEspeciales.- Existen otros operadores que pasaremos a revisar


Operadores de Direccin.- Tenemos los siguientes

* accede el campo apuntado.

& Devuelve la direccin del operando

Ejemplo2:Escriba un programa que maneje punteros de forma bsica.


PROGRAMA

// prog22.cpp: define el punto de entrada de la aplicacin de consola.


/* FECHA: 02 Setiembre de 2015
OBJETIVO: Observar manejo de punteros en forma basica */
#include "stdafx.h"
#include<iostream>
#include<conio.h>
using namespace std;
void main( )
{ int *p1 ; // Declaramos una variable tipo puntero
int a, b ; //Declaramos las variables a y b del tipo entero
system("cls");
a = 17;
b = 18;
p1 = &a; // p1 apunta hacia a
cout<< "Valor apuntado por p1 ==> "<<*p1<<endl; // Se imprime el valor apuntado por p1
cout<< "Direccion de a almacenada en p1 ==> "<<hex << p1<< endl; // Imprime la direccin de a
contenida en p1
cout<< dec; // vuelve al formato decimal
p1 = &b; // p1 toma la direccin de b
cout<< "Nuevo valor apuntado por p1==> "<<*p1<<endl; // muestra valor almacenado en el campo
apuntado por p1(b)
cout<< "Direccion de b almacenada en p1 ==> "<<hex << p1<< endl; // Imprime la direccin de a
19
contenida en p1
_getch(); }

PROGRAMACION ORIENTADA A OBJETOS

2015

EJECUCION

.Accede a un miembro de un objeto o variable estructurada

Accede a un miembro de un objeto apuntado por el operando de la izquierda.

Operador Condicional.- Su forma es


expresion_c ? expresion_v : expresion_f
v1 >v2 ? v1 : v2
devuelve el mayor valor de v1 , v2

Operador Coma, Operador( ),Operador[ ], Operador :: .

Coma combina expresiones a> b , c > 10 // a mayor que b , c mayor que 10

( ) Llama a funciones y tambin altera prioridad

[ ] Acompaa a los arrays

:: Indica mbito

void empleado :: planilla ( ) // indica la funcin planilla perteneciente a

empleado.
Ejemplo 3.- Escriba un programa que simule un juego de dados. Las reglas son:
// prog32.cpp: define el punto de entrada de la aplicacin de consola.
a) En la primera jugada si obtiene una suma de los dados de
// OBJETIVO: Escribir un programa que simula un juego de dados */
#include "stdafx.h"
2,3 o 12 pierde el juego ; 7 u 11 gana el juego ; Otra suma vuelve a jugar
#include<iostream>
b) A partir de la segunda jugada el jugador sigue las reglas
#include<conio.h>
#include<stdlib.h>
Si repite la primera suma gana ; Obtiene 7 pierde
#include<time.h>
using namespace std;
PROGRAMA
void main( )
{ int juego1, juego, dado1,dado2;
system("cls");
srand(time(NULL));
dado1 = rand()%6 + 1; dado2 = rand()%6 + 1;
juego1 = dado1 + dado2;
cout<< juego1<<endl;
if ( (juego1 == 7 ) || ( juego1 == 11 ) )
cout<< " Gano juego" ;
else if ( (juego1 == 2) || (juego1 == 3 ) || ( juego1== 12))
cout<< " Perdio juego";
else
{ do {
dado1 = rand()%6 + 1; dado2 = rand()%6 + 1;
juego = dado1 + dado2;
cout<<juego<<endl;
} while ( ( juego != juego1) && ( juego != 7));
if ( juego == juego1)
cout<< "Gano juego";
else
cout<< "Perdio juego";
} 20
_getch();
}

PROGRAMACION ORIENTADA A OBJETOS

FUNDAMENTOS DE LA PROGRAMACION ORIENTADA A OBJETOS

2015
21

2.3. ESTRUCTURAS DE CONTROL EN LENGUAJE C


Son las siguientes:
Sentencia if else
Sentencia switch
Sentencia while
Sentencia do while
Sentencia for.
ESTRUCTURAS DE DESICION
2.3.1. Sentencia if .- Nos permite derivar el control hacia uno de dos puntos del programa.
Forma General
if ( condicin)
{......(1)............. ;
.....................; }
[else
{ .........(2)..........;

21

PROGRAMACION ORIENTADA A OBJETOS


...................;

2015

}]

ss
Funcionamiento:
Se evala la condicin, si esta se cumple se ejecuta el bloque 1, caso contrario se ejecuta el bloque 2, si
existe. Finalmente pasa el control de ejecucin a la siguiente sentencia(ss).
Ejemplos:
If(nota > 10)
cout<< Curso Aprobado;
If((numero%2)==0)
cout<< El numero es par;
else
cout<<El numero es impar;
Sentencia if anidada.- Se dice que una sentencia esta anidada dentro de otra cuando una de ellas (la
externa) contiene completamente las sentencias de la otra(la interna o anidada). Veamos esto:
if (condicion1)
{ .;
..;
if(condicion2)
{..;
.;
}
//.;
prog42.cpp: define el punto de entrada de la aplicacin de consola.
/* FECHA: 02 Setiembre del 2015
}
OBJETIVO:
Ejemplo de if anidado, programa determina si un numero es de 2, 3 o 4 cifras
y si es multiplo de 3 o no */
else
#include "stdafx.h"
#{include<iostream>
..;
# include<conio.h>
using
namespace std;
..;
void main( )
.;
{ int
numero;
system("cls");
} cout<< " ingrese un numero ==> ";
cin>>numero;
Podemos
observar que el if con condicion2 esta anidado en el if con condicion1.
if ((numero> 9) && (numero<10000))
Ejemplo
4.- Programa que lee un nmero y me muestra si es mltiplo de 3, 4 o 5.
{ if (numero>999)
if(numero%3==0)
cout<<" Numero de cuatro cifras y multiplo de 3";
else
cout<<" Numero de cuatro cifras y no es multiplo de 3";
else
if (numero >99)
if(numero %3==0)
cout<<" Numero de tres cifras y multiplo de 3";
else
cout<<" Numero de tres cifras y no es multiplo de 3";
else
if(numero%3==0)
cout<<" Numero de dos cifras y multiplo de 3";
else
cout<<" Numero de dos cifras y no es multiplo de 3";
}
else
22
cout<<"Numero
fuera del rango";
getch(); }

PROGRAMACION ORIENTADA A OBJETOS

FUNDAMENTOS DE LA PROGRAMACION ORIENTADA A OBJETOS

2015
23

// prog52.cpp: define el punto de entrada de la aplicacin de consola.


/* FECHA: 02 Setiembre de 2015
OBJETIVO: Ejemplo de if que lee tres notas y calcula mayor, menor y halla promedio,
duplica la mayor y elimina la menor */
#include "stdafx.h"
#include<iostream>
#include<conio.h>
using namespace std;
Ejemplo
5.- Programa
que lee tres notas y halla el promedio eliminando la menor y duplicando la mayor.
void main(
)
{ int nota1,nota2,nota3,menor,mayor,may1,men1;
PROGRAMA
float promedio;
system("cls");
cout<< " ingrese nota1 : "; cin>>nota1;
cout<< " ingrese nota2 : "; cin>>nota2;
cout<< " ingrese nota3 : "; cin>>nota3;
if (nota1<nota2)
men1 = nota1;
else
men1=nota2;
if (men1<nota3)
menor = men1;
else
menor=nota3;
if (nota1>nota2)
may1 = nota1;
else
may1=nota2;
if (may1>nota3)
mayor = may1;
else
mayor=nota3;
//Calculando promedio
promedio= (nota1+nota2+nota3+mayor-menor)/3.0;
23
cout<<"El promedio es : "<<promedio;
_getch(); }

PROGRAMACION ORIENTADA A OBJETOS

Ejemplo 6.- Escriba un programa que lea 20 edades y me indique cuantos son :

2015

// proy62.cpp: define el punto de entrada de la aplicacin de consola.


BebesEjemplo
(0-5aos)
/* OBJETIVO:
que lee 20 edades y me indique cuantos son :
Bebes (0-5aos),Nios (5-12 aos), Adolescentes (12-16 aos), Jvenes (16-25) , Adultos (25-50),
Nios
(5-12
Mayores
(50 a
mas)aos)
*/
#include "stdafx.h"
Adolescentes (12-16 aos)
# include<iostream>
# include<conio.h>

Jvenes (16-25)

using
std;
namespace
Adultos (25-50)
void main( )
{ Mayores
int edad,i;
(50 a mas)
int contb=0;//contador de bebes
int contn=0;//contador de nios
int conta=0;//contador de adolescentes
int contj=0;//contador de jovenes
int contd=0;//contador de adultos
PROGRAMA
int contm=0;//contador de mayores
system("cls");
for(i=1;i<=20;i++)
{cout<< " ingrese edad "<<i<< " : ";cin>>edad;
if ( edad>=0)
if (edad<=5)
contb=contb+1;
else if (edad<=12)
contn=contn+1;
else if(edad<=16)
conta=conta+1;
else if (edad <=25)
contj=contj+1;
else if (edad<=50)
contd=contd+1;
else
contm=contm+1; }
cout<<contb<< " bebes"<<endl;
cout<<contn<< " nios"<<endl;
cout<<conta<< " adolescentes"<<endl;
cout<<contj<< " jovenes"<<endl;
cout<<contd<< " adultos"<<endl;
cout<<contm<< " mayores"<<endl;
24
getch();
}

PROGRAMACION ORIENTADA A OBJETOS

FUNDAMENTOS DE LA PROGRAMACION ORIENTADA A OBJETOS

2015
25

2.3.2. Sentencia switch.- Deriva el control hacia uno de varios puntos del programa, permite
realizar una seleccin mltiple.
Forma General
switch ( expression)
{ case const1

: ................... ;
....................;
break;

case const2

: ................... ;
....................;
break;

case const3

: ................... ;
....................;
break;

case const4

: ................... ;
....................;
break;

[ default

: .....................;
.....................;]

}
Funcionamiento:
La expresin de control o selector se evala y se compara con cada una de las etiquetas de case.
La expresin selector debe ser un tipo ordinal (por ejemplo, int, char, pero no float o string). Cada
etiqueta es un valor nico, constante y cada etiqueta debe tener un valor diferente de los otros. Si el
valor de la expresin selector es igual a una de las etiquetas case por ejemplo, etiquetai- entonces la
ejecucin comenzar con la primera sentencia de la secuencia sentenciai y continuar hasta que se

25

PROGRAMACION ORIENTADA A OBJETOS

2015

encuentra el final de la sentencia control switch, o hasta encontrar la sentencia break. Lo normal es que
la sentencia break termine el bloque y despus que siga la ejecucin en la siguiente sentencia switch( ).
Ejemplo 7:Escriba un programa que lea un dia de semana del 1 al 7 y lo imprima en letras . Si lee 1 debe
escribir LUNES.
PROGRAMA

// prog72.cpp: define el punto de entrada de la aplicacin de consola.


//lee un dia de la semana y lo convierte a letras*/
#include "stdafx.h"
#include <iostream>
#include <conio.h>
using namespace std;
void main()
{ int dia;
system("cls");
cout<<"Introduce el dia: ";
cin>>dia;
switch(dia){
case 1: cout<<"Lunes"; break;
case 2: cout<<"Martes"; break;
case 3: cout<<"Miercoles"; break;
case 4: cout<<"Jueves"; break;
case 5: cout<<"Viernes"; break;
case 6: cout<<"Sabado"; break;
case 7: cout<<"Domingo"; break;
default:cout<<"No es un dia de semana";}
_getch();}
EJECUCION

Note que el default no tiene break y es que la salida en este caso es por trmino de la instruccin switch.
ESTRUCTURAS DE REPETICION
2.3.3. Sentencia while.-Nos permite ejecutar repetidamente un grupo de sentencias hasta que el
valor de la expresin se hace cero (condicin falsa)
Forma General
while ( expresin)
{................... ;
// prog82.cpp: define el punto de entrada de la aplicacin de consola.
.....................;
#include "stdafx.h"
#include<iostream>
.....................;
#include<conio.h>
#include<stdlib.h>
}
#include<time.h>
Funcionamiento:
using namespace std;
void main( )
La{ expresin
booleana o condicin se evala y el bucle se repite mientras la condicin es verdadera. El
int numero, suma = 0;
int cont
1;
bucle
while=nunca
puede iterar si la condicin comprobada es inicialmente falsa.
system("cls");
Ejemplo8:
srand(time(NULL));
while ( cont <= 1000 )
PROGRAMA
{numero=rand()%20;
cout<<"\t"<<numero<<endl;
suma = suma+ numero;
26 }
cont++;
cout<< "La media es = " << suma / 1000.0;
getch(); }

PROGRAMACION ORIENTADA A OBJETOS

FUNDAMENTOS DE LA PROGRAMACION ORIENTADA A OBJETOS

2015
27

Comentario: Como suma es un acumulador se inicializa en cero, en cambio en este caso cont va
contando por adelantado y su valor final ser 101. Con cont igual a 101 ya no se cumple la condicin y
por lo tanto se sale del bucle while, a esta variable denominada cont se le conoce tambincomo variable
de control del bucle while, esta variable necesariamente debe ser modificada dentro del rango del while
pues de no suceder esto estaramos en un lazo infinito.
2.3.4. Sentencia do-- while.- Las sentencias se ejecutan repetidamente hasta que el valor de la
expresin se hace cero (falso)
Forma General
do
{................... ;
.....................;
.....................;
} while ( expresin);
Funcionamiento:
Se ejecutan las sentencias y a continuacin se evala la expresin, y si es verdadero (distinto de cero), el
control se pasa de nuevo al principio de la sentencia do y el proceso se repite, hasta que la condicin
(expresin) sea falsa(cero) y el control pasa a la sentencia siguiente.
Ejemplo 9:
El siguiente ejemplo visualiza los nmeros, cuadrados y cubos de los 20 primeros nmeros:
PROGRAMA
// prog92.cpp: define el punto de entrada de la aplicacin de consola.
#include "stdafx.h"
/* FECHA: 02 Setiembrede 2015
OBJETIVO: Presenta cuadrados y cubos de los 20 primeros numeros.Usando el do while */
# include<iostream>
# include<conio.h>
# include<math.h>
using namespace std;
void main( )
{ float numero=1;
cout << " "<<"X"<< "\t" <<"X^2"<<"\t"<<"X^3"<< endl ;
cout << " "<<"=="<< "\t" <<"===="<<"\t"<<"===="<< endl ;
do
{cout <<" "<< numero << "\t" <<pow(numero,2)<<"\t"<<pow(numero,3) << endl ;
27
numero=numero
+1.0;
}while (numero < 21);
getch(); }

PROGRAMACION ORIENTADA A OBJETOS

2015

2.3.5. Sentencia for.- Las sentencias se ejecutan hasta que el valor de la expresion2 sea cero o
sea falso.
Forma General
for ( exp1 ; exp2 ; exp3)
{................... ;
.....................;
}
Funcionamiento:
Una sentencia for ejecuta la iteracin de un bucle un nmero determinado de veces. El lazo for
tiene tres componentes: exp1, inicializa las variables de control del bucle; exp2, es la condicin que
determina si el bucle realiza otra iteracin; la ltima parte del encabezado del for(exp3 ) es la
clusula que incrementa o decrementa las variables de control del bucle.
Exp1se utiliza para inicializar la variable de control de bucle; a continuacin exp2 se evala, si es
verdadera (distinta de cero), se ejecuta la sentencia y se ejecuta exp3 y el control pasa de nuevo al
principio del bucle. La iteracin contina hasta que exp2 es falsa (cero), en cuyo momento el control
pasa
a la sentencia
siguiente
al bucle.
// prog102.cpp:
define
el punto
de entrada de la aplicacin de consola.
/* FECHA:
08 Setiembre
dellos
2015
Ejemplo
10:Imprimir
todos
primos de dos dgitos.

OBJETIVO: Imprime los primos menores que 100 o sea dos digitos.
Usando el lazo repetitivo for */
#include "stdafx.h"
# include<iostream>
# include<conio.h>
using namespace std;
void main( )
{ int i,j , primo;
for(i=10; i<100; i++)
{primo = 1;// asume que es primo
for ( j=2;j<i ;j++)
if ( i%j==0)
{primo = 0;
break; }
if(primo == 1)
28
cout<<i<<endl;}
_getch(); }

PROGRAMACION ORIENTADA A OBJETOS

FUNDAMENTOS DE LA PROGRAMACION ORIENTADA A OBJETOS

2015
29

Sentencias break y continue


El flujo de control ordinario de un bucle se puede romper o interrumpir mediante las sentencias
break y continue.
La sentencia break produce una salida inmediata del bucle flor en que se encuentra situada:
for (i = 0; i < 100; i++)
{cin x;
if (x < 0.0)
{cout <<salir del bucle <<endl;
break;}
cout<< sqrt(x)<< endl;}
La sentencia break tambin se utiliza para salir de la sentencia switch.
La sentencia continue termina la iteracin que se est realizando y comenzar de nuevo la siguiente
iteracin:
Advertencia:
Una sentencia break puede ocurrir nicamente en el cuerpo de una sentencia for, while, do o switch.
Una sentencia continue slo puede ocurrir dentro del cuerpo de una sentencia for, while o do.

PROBLEMAS
ESTRUCTURAS DE CONTROL
1. Se tienen 6 datos que son los nombres y edades de tres personas, escriba un programa que lea los
tres nombres y edades e imprima los nombres considerando las edades en forma creciente.
SOLUCION:

A) PROGRAMA:
// cap3prob1.cpp: define el punto de entrada de la aplicacin de consola.
#include "stdafx.h"
/* OBJETIVO: LEE TRES NOMBRES Y EDADES E IMPRIME LOS NOMBRES EN FORMA CRECIENTEPOR EDAD */
# include<iostream>
# include<conio.h>
using namespace std;
void main( )
{
int edad1, edad2, edad3;
char nombre1[40], nombre2[40], nombre3[40];
system("cls");
cout<< " Ingrese nombre 1 ==> "; cin>> nombre1;
cout<< " Ingrese edad 1 ==> "; cin>> edad1;
cout<< " Ingrese nombre 2 ==> "; cin>> nombre2;
cout<< " Ingrese edad 2 ==> "; cin>> edad2;
cout<< " Ingrese nombre 3 ==> "; cin>> nombre3;

29

PROGRAMACION ORIENTADA A OBJETOS

2015

cout<< " Ingrese edad 3 ==> "; cin>> edad3;


cout<<endl<<endl<<endl;
cout<< "LOS NOMBRES POR EDADES SERA:"<<endl<<endl;
if ( edad1 < edad2)
if( edad2 < edad3)
cout<< nombre1<< " "<<nombre2<< " "<<nombre3<<endl;
else
if (edad1<edad3)
cout<< nombre1<< " "<<nombre3<< " "<<nombre2<<endl;
else
cout<< nombre3<< " "<<nombre1<< " "<<nombre2<<endl;
else
if (edad1 <edad3)
cout<< nombre2<< " "<<nombre1<< " "<<nombre3<<endl;
else
if(edad2<edad3)
cout<< nombre2<< " "<<nombre3<< " "<<nombre1<<endl;
else
cout<< nombre3<< " "<<nombre2<< " "<<nombre1<<endl;
_getch( );
}

B) RESULTADOS:

2. Escriba un programa que imprima todos los nmeros de tres cifras que sean capicas y cuya suma de
sus dgitos sea par.
Solucion:
// cap3prob2.cpp: define el punto de entrada de la aplicacin de consola.
#include "stdafx.h"
/*FECHA: 10 de agosto de 2012
OBJETIVO: MUESTRA TODOS LOS NUMEROS DE TRES DIGITOS CAPICUAS Y CUYASUMA DE ESTOS ES PAR */
# include<iostream>
# include<conio.h>
using namespace std;
void main( )
{ int i , num,numinv, sumadigitos, digito;
system("cls");
cout<< " Lista de numeros capicas y suma dgitos par"<<endl<<endl;
for (i=100; i<=999;i++)
{ num = i;
sumadigitos=0;
numinv=0;
while(num>=10)
{ digito= num%10;
numinv = numinv*10+digito;
sumadigitos=sumadigitos + digito;
num = num/10; }
numinv = numinv*10+num;
sumadigitos=sumadigitos + num;

30

PROGRAMACION ORIENTADA A OBJETOS

FUNDAMENTOS DE LA PROGRAMACION ORIENTADA A OBJETOS

2015
31

if( (i== numinv)&& ( (sumadigitos%2)==0))


cout<<"\t\t"<< i << endl;
} // FIN DEL FOR
_getch( ); }

3. En la UNI se rinde examen de admisin y de un grupo de 20 postulantes para cuatro facultades cuyos
codigos son:
Codigo

Facultad

Ing. De Sistemas

Ing. Mecnica

Ing. Qumica

Ing. Ambiental

La Universidad aplica tres tipos de exmenes a sus postulantes. Los postulantes que obtengan por lo
menos dos exmenes aprobados (mayor o igual a 11) son admitidos caso contrario son rechazados. En
base a esto se pide disear un algoritmo que permita:
a) Mostrar por cada postulante el mensaje admitido o rechazado.
b) Presentar el nmero de ingresantes pro facultad.
Solucin:
// cap2prob3.cpp: define el punto de entrada de la aplicacin de consola.
#include "stdafx.h"
// OBJETIVO: LISTA INGRESANTES POR FACULTAD DE UN EXAMEN DE ADMISION */
# include<iostream>
# include<conio.h>
# include<ctype.h>
# include<stdlib.h>
# include<time.h>
using namespace std;
void main( )
{ int i, conts=0,contm=0,contq=0,conta =0;
int exa1, exa2, exa3, numfac;
char facultad;
system("cls");
srand(time(NULL));
for (i=1; i<=20;i++)
{ numfac = rand()%4+1;
switch(numfac)
{ case 1 : facultad = 'S';break;
case 2 : facultad = 'M';break;
case 3 : facultad = 'Q';break;
case 4 : facultad = 'A';break;
}
exa1=rand()%20+1;
exa2=rand()%20+1;
exa3=rand()%20+1;
if(((exa1>=11)&&(exa2>=11))|| ((exa1>=11)&&(exa3>=11))||((exa2>=11)&&(exa3>=11)))
{ cout<<"Postulante Admitido"<<endl;
switch(facultad)
{ case 'S' : conts=conts+1;break;
case 'M' : contm=contm+1;break;
case 'Q' : contq=contq+1;break;
case 'A' : conta =conta+1;break;
}

31

PROGRAMACION ORIENTADA A OBJETOS

2015

}
else
cout<<"Postulante rechazado"<<endl;
}
cout<< " Ingresaron a Ing. Sistemas = "<<conts<<endl;;
cout<< " Ingresaron a Ing. Mecnica = "<<contm<<endl;
cout<< " Ingresaron a Ing. Qumica = "<<contq<<endl;
cout<< " Ingresaron a Ing. Ambiental= "<<conta<<endl;
getch( );
}

4. Se desea leer un conjunto de numeros enteros de tres cifras hasta encontrar un nmero negativo.
Luego mostrar la cantidad de veces que aparece el digito 3 en todos los nmeros positivos ledos.
Solucion:
PROGRAMA
// cap2prob4.cpp: define el punto de entrada de la aplicacin de consola.
#include "stdafx.h"
/* OBJETIVO: Muestra cuantas veces se aparece el digito 3 en todos los nmeros Ledos antes
de encontrar un negativo.*/
# include<iostream>
# include<conio.h>
# include<stdlib.h>
# include<time.h>
using namespace std;
void main( )
{
int numero,d1,d2,d3,contdigitos=0;
system("cls");
while ( 1 )
{
cout<<"Ingrese un numero : ";
cin>>numero;
if(numero < 0 ) break;
d1= numero%10;
numero=numero/10;
d2=numero%10;

32

PROGRAMACION ORIENTADA A OBJETOS

FUNDAMENTOS DE LA PROGRAMACION ORIENTADA A OBJETOS

2015
33

numero=numero/10;
d3 = numero;
if( d3==3) contdigitos = contdigitos+1;
if( d2==3) contdigitos = contdigitos+1;
if( d1==3) contdigitos = contdigitos+1;

}
cout<< "Numero de veces que aparece el digito 3 es = "<<contdigitos<<endl;
getch( ); }

EJECUCION

5. De un experimento de fsica se tienen que leer N temperaturas( entre positivas y negativas) luego
averiguar el numero de apariciones de la menor temperatura negativa.
Solucion:
PROGRAMA
/* CODIGO: cppcap2prob05
FECHA: 10 de agosto de 2012
OBJETIVO: Muestra la mayor de las temperaturas negativas y cuantas veces se presenta.*/
# include<iostream.h>
# include<conio.h>
# include<ctype.h>
# include<stdlib.h>
# include<time.h>
void main( )
{
int temperatura, tempmayorneg=-20,conttemp=1;
int i,n;
clrscr( );
cout<<"Ingrese el valor n= ";
cin >>n;
randomize();
for (i=1;i<=n;i++)

33

PROGRAMACION ORIENTADA A OBJETOS

2015

{ temperatura= random(41)-20;
cout<< temperatura<<endl;
if( temperatura < 0)
{
if (temperatura == tempmayorneg)
conttemp= conttemp+1;
if(temperatura > tempmayorneg)
{tempmayorneg =temperatura;
conttemp= 1; }
}
}
cout<<endl<<endl;
cout<<"La temperatura es = " << tempmayorneg<<endl;
cout<<" Se presento: "<< conttemp << " Veces";
getch( );
}

6. Escriba un programa que genere enteros entre 1 y 13, y nos indique si los 4 valores son iguales o tres
son iguales o 2 y 2 son o solamente dos iguales y finalmente si los 4 son diferentes.(4 iguales elimina
3 iguales y los otros casos y as).
En este caso siempre se considera la jugada de mayor peso. Por ejemplo: Si obtenemos 3 3 4 3 se
considera tres 3 y ya no dos 3.
SOLUCIN:
PROGRAMA
/* CODIGO: cppcap2prob06
FECHA: 10 de agosto de 2012
OBJETIVO: Genera valores e indica si los cuatro son iguales o si tres soniguales o si dos a dos o si dos*/
# include<iostream.h>
# include<conio.h>
# include<ctype.h>
# include<stdlib.h>
# include<time.h>
void main ()
{ int v1,v2, v3, v4;
int c0,c1,c2,c3,c4,c5,c6;
randomize();
v1 = random(13)+1;
v2 = random(13)+1;
v3 = random(13)+1;
v4 = random(13)+1;
cout<<v1<< " "<<v2<<" "<<v3<<" "<<v4<<endl;
c0 = ((v1==v3)&&(v3==v4));
c1 = ((v1==v2)&&(v2==v3));

34

PROGRAMACION ORIENTADA A OBJETOS

FUNDAMENTOS DE LA PROGRAMACION ORIENTADA A OBJETOS

2015
35

c2 = ((v1==v2)&&(v2==v4));
c3 = ((v2==v3)&&(v3==v4));
c4 = ((v1==v2)&&(v3==v4));
c5 = ((v1==v3)&&(v2==v4));
c6 = ((v1==v4)&&(v2==v3));
if ( (v1== v2)&&(v2==v3)&&(v3==v4))
cout<<"Las cuatro son iguales"<<endl;
else
if(c0||c1||c2||c3)
cout<<"Tres son iguales"<<endl;
else
if(c4||c5||c6)
cout<<" Hay dos pares"<<endl;
else
if((v1==v2)||(v1==v3)||(v1==v4)||(v2==v3)||(v2==v4)||(v3==v4))
cout<<" Hay un solo par"<<endl;
else
cout<<"Todas son distintas"<<endl;
getch(); }

7.-

Escribir un programa que visualice el manejo de punteros utilizndolos primero con variables simple y
despus con vectores numricos y char.(cadenas)

SOLUCIN:
PROGRAMA
/* CODIGO: cppcap02prob08
FECHA: 10 de agosto de 2012
OBJETIVO: PROGRAMA QUE MANEJA PUNTEROS CON VARIABLES SIMPLES Y VECTORES*/
#include<iostream.h>
#include<conio.h>
void main()

35

PROGRAMACION ORIENTADA A OBJETOS


{ int a,b,c,i; int x[4];
int *p1,*p2;
char cadena1[10],cadena2[10];
char *ptc1,*ptc2;
a=10;b=9;c=19;
cout<<"USO DE PUNTEROS CON VALORES ENTEROS "<<endl;
cout<<"Valor 1: "<<a<<endl;
cout<<"Valor 2: "<<b<<endl;
cout<<"Valor 3: "<<c<<endl;
cout<<"

"<<endl;

p1=&a;
cout<<" Direccion de p1

: "<<&p1<<endl;

cout<<" Direccion almacenada por p1: "<<p1<<endl;


cout<<" Hacia donde apunta p1 (a) : "<<*p1<<endl;
cout<<endl<<" HAGO EL CAMBIO DE P++"<<endl;
p1++;
cout<<" Direccion de p1

: "<<&p1<<endl;

cout<<" Direccion almacenada por p1++: "<<p1<<endl;


cout<<" Hacia donde apunta p1++

: "<<*p1<<endl<<endl;

cout<<" USO DE PUNTEROS CON VECTORES "<<endl;


for(i=1;i<=3;i++)
x[i]=i;
cout<<" Valores almacenados en el vector"<<endl;
for(i=1;i<=3;i++)
cout<<" x["<<i<<"]= "<<x[i]<<endl;
cout<<endl;
p2=x;
cout<<" Direccion de p2

: "<<&p2<<endl;

cout<<" Direccion almacenada por p2: "<<p2<<endl;


cout<<" Direccion del vector x

: "<<x<<endl;

cout<<" Contenido del campo apuntado por p2: "<<*p2<<endl;


cout<<" Hacia donde apunta p2 (x[1]): "<<p2[1]<<endl;
cout<<" Hacia donde apunta p2 (x[2]): "<<p2[2]<<endl;
p2=p2+1; cout<<endl;
cout<<" CAMBIO p2=p2++"<<endl;
cout<<" Direccion de p2

: "<<&p2<<endl;

cout<<" Direccion almacenada por p2 : "<<p2<<endl;


cout<<" Hacia donde apunta p2

: "<<*p2<<endl;

cout<<" Hacia donde apunta p2 (x[1]): "<<p2[1]<<endl;


cout<<" Hacia donde apunta p2 (x[2]): "<<p2[2]<<endl;
strcpy(cadena1,"abcdefghi");
strcpy(cadena2,"123456789");
ptc1=cadena1;

36

2015

PROGRAMACION ORIENTADA A OBJETOS

FUNDAMENTOS DE LA PROGRAMACION ORIENTADA A OBJETOS

2015
37

ptc2=cadena2;
cout<<" Contenido del campo apuntado por ptc1: "<<*ptc1<<endl;
cout<<" Contenido del campo apuntado por ptc2: "<<*ptc2<<endl;
for(i=0;i<=8;i++)
{ cout<<(*ptc1)<<endl;
ptc1= ptc1+1; }
getch(); }

EJERCICIOS PROPUESTOS
1.

Escriba un programa que simule un juego de dados como en el ejemplo de este captulo pero en cada caso debe ganar o
perder una suma, si inicialmente usted fija un pozo o sea una cantidad, el juego terminara cuando pierda todo el pozo inicial o
lo duplique.

2.

Escriba un programa que genere 5 valores al azar entre 1 y 13 (cinco cartas de una baraja de casinos) y me indique si
tenemos un par, 2 pares , un tro , un full (3 iguales y dos iguales) o pker ( cuatro iguales)

3.

Escriba un programa que me permita descubrir una clave de cuatro dgitos realizando todas las combinaciones posibles hasta
dar con la clave.

4.

Escriba un programa que lea 5 practicas de 10 alumnos halle el promedio de cada uno de ellos y me indique cual es el mejor
promedio.

#include "stdafx.h"
#include<iostream>
#include<conio.h>
#include<stdlib.h>
#include<time.h>
using namespace std;
void main( )
{ int nota, suma ;
float promedio,mayor_prom;
int i,j;
system("cls");
srand(time(NULL));
for (i=1;i<=10;i++)//Controla alumnos
{ suma=0;
for(j=1;j<=5;j++)//Controla notas(5) por alumno
{ nota=rand()%20+1;
suma =suma +nota;
}
promedio =suma/5.0;
cout<<"\t"<<"Alumno " <<i<< " Promedio = "<<promedio<<endl;
if(i==1)
mayor_prom = promedio;
else
if(promedio>mayor_prom)
mayor_prom=promedio;
}
cout<<"El mayor promedio sera==> "<<mayor_prom;
_getch(); }
5.

Escriba un programa que me permita hallar el maximo comn divisor y el mnimocomnmltiplo de dos valores enteros.

6.

Se realizan elecciones entre tres partidos politicos,escribaun programa que me permita indicar el ganador y si adems supera
el 50% ser el ganador oficial en primera vuelta.

37

PROGRAMACION ORIENTADA A OBJETOS

CAPITULO III

38

2015

PROGRAMACION ORIENTADA A OBJETOS

FUNDAMENTOS DE LA PROGRAMACION ORIENTADA A OBJETOS

2015
39

CAPITULO III
FUNCIONES EN LENGUAJE C + +
3

Definicin.- Es un conjunto de instrucciones agrupadas que tienen un nombre comn y que realizan
un clculo (o proceso) especifico. Todo programa en lenguaje C se desarrolla basndose en
funciones, estas posteriormente pueden formar una librera particular.

3.1

Funciones Predefinidas (De biblioteca)Aqu tenemos una serie de funciones, debemos considerar
que al invocarlas debemos seguir las siguientes reglas:
Consideremos la Funcin sqrt
Syntax
#include <math.h>
double sqrt(double x);

La funcin sqrt est incluida en la librera math.h


La invocacin debe ser con el nombre o sea sqrt y el parmetro indicado o sea un valor ,
variable o expresin de tipo double. O sea sqrt(num), siendo habido sido declarado num como
doble precision.
El valor devuelto ser el indicado en el prototipo o sea double precision por ejemplo un caso
sera:
double r, x ;
x= 5.0;
r=sqrt(x);
En este caso tanto la variable que servir como argumento, como la variable que recibir el
resultado son del tipo indicado.
A) Funciones de la librera math.h
Funcin abs
#include <math.h>
#include <stdlib.h>
int abs(int x);

Retorna el valor absoluto de una variable entera, y cuando se incluye la librera stdlib.h
tambien considera valores bcd. La funcin fabs(double x) considera valores reales.
Ejemplo 1.- escriba un programa que lee tres valores y me imprime el mayor valor absoluto.
PROGRAMA
/* CODIGO: cppcap03ejem01

39

PROGRAMACION ORIENTADA A OBJETOS

2015

FECHA: 15 de agosto 2007


OBJETIVO: ejemplo DE LA FUNCION ABS() Y FABS()*/
#include <iostream.h>
#include <conio.h>
#include <stdlib.h>
#include <math.h>
void main()
{ int valor1;
float valor2;
double valor3,x,y z,mayor;
clrscr();
cout<<"Ingrese valor 1 ==> "; cin >>valor1;
cout<<"Ingrese valor 2 ==> "; cin >>valor2;
cout<<"Ingrese valor 3 ==> "; cin >>valor3;
x = abs(valor1);
y = abs(valor2);
z = abs(valor3);
if (x>y)
mayor= x;
else
mayor=y;
if (z>mayor)
mayor= z;
cout<<"El mayor ser: "<<mayor;
getch(); }
EJECUCION

Funciones ceil y floor

#include <math.h>
double ceil(double x);
long double ceill(long double x);
double floor(double x);
long double floorl(long double x);

Ceil retorna el entero no menor que x, o sea redondea hacia arriba y floor redondea hacia abajo.

40

PROGRAMACION ORIENTADA A OBJETOS

FUNDAMENTOS DE LA PROGRAMACION ORIENTADA A OBJETOS

2015
41

Ejemplo 2.- Escriba un programa que calcule un promedio de 5 edades y me indique entre que
edades consecutivas se encuentra.
PROGRAMA
// prog13.cpp: define el punto de entrada de la aplicacin de consola.
#include "stdafx.h"
/* OBJETIVO: Ejemplo de las funciones ceil() y floor().*/
#include <iostream>
#include <conio.h>
#include <stdlib.h>
#include <math.h>
#define n 5
using namespace std;
void main()
{ int edad,i;
float promedio=0,edadprom1,edadprom2;
system("cls");
for (i=1;i<=n;i++)
{cout<<"Ingrese edad "<<i<<" : ";
cin >>edad;
promedio=promedio + edad;
}
promedio=promedio/n;
edadprom1=floor(promedio);
edadprom2=ceil(promedio);
cout<<"La edad promedio se encuentra entre "<<edadprom1<< " y "<<edadprom2;
_getch(); }
EJECUCION

Funciones sin() y cos()

#include <math.h>
double cos(double x);
long double cosl(long double x);
double sin(double x);
long double sinl(long double x);

Retornan el seno y coseno de un argumento que debe estar dado en radianes, argumento y retorno
son double.
Ejemplo 3.- Escriba un programa que calcule un el seno y coseno de un triangulo
rectngulonotable y compruebe que seno y coseno de los ngulos complementarios de un triangulo
rectngulo son iguales.
PROGRAMA
// prog23.cpp: define el punto de entrada de la aplicacin de consola.
/*OBJETIVO: Ejemplo de las funciones SIN() y COS().*/
#include"stdafx.h"

41

PROGRAMACION ORIENTADA A OBJETOS


#include<iostream>
#include<conio.h>
#include<math.h>
using namespace std;
void main()
{ double anga,angb,senoa,cosenob;
system("cls");
anga=37*3.1416/180;
senoa=sin(anga);
angb=53*3.1416/180;
cosenob=cos(angb);
cout<<"El seno de a= "<<senoa<<endl;
cout<<"El coseno de b= "<<cosenob;
_getch();
}
EJECUCION

Funcin exp()

#include <math.h>
double exp(double x);
long double expl(long double x);

Exp() calcula el valor e elevado a la x.


Ejemplo 4.- Escribir un programa con exp(x)
PROGRAMA
// prog33.cpp: define el punto de entrada de la aplicacin de consola.
/* OBJETIVO: Ejemplo de las funciones exp()*/
#include "stdafx.h"
#include <iostream>
#include <conio.h>
#include <stdio.h>
#include <math.h>
using namespace std;
void main()
{ double expx;
double x ;
system("cls");
cout<<"Ingrese x ==> "; cin>>x;
expx = exp(x);
printf("'e' elevado a la potencia \de %8.3f (e ^ %8.3f) = %8.3f\n", x, x, expx);
_getch();
}

EJECUCION

Funcin log()

Syntax
#include <math.h>

42 log(double x);
double
long double logl(long double x);

2015

PROGRAMACION ORIENTADA A OBJETOS

FUNDAMENTOS DE LA PROGRAMACION ORIENTADA A OBJETOS

Retorna el logaritmo natural de x

Funcin log10()

Syntax
#include <math.h>
double log10(double x);
long double log10l(long double x);

Retorna el logaritmo en base 10 de x

Funcin pow()

Syntax
#include <math.h>
double pow(double x, double y);
long double powl(long double x, long double y);

Retorna x elevado a la y.
Ejemplo 5.- Escribir un programa y calcule una raiz cuadrada usando pow() y
usando sqrt(), comprelas.
PROGRAMA
// prog33.cpp: define el punto de entrada de la aplicacin de consola.
/* OBJETIVO: Utiliza pow() y sqrt() para calcular raiz cuadrada*/
#include "stdafx.h"
#include <iostream>
#include <conio.h>
#include <math.h>
using namespace std;
void main()
{ double x,raiz1,raiz2 ;
system("cls");
cout<<"Ingrese x ==> "; cin>>x;
raiz1 = pow(x,0.5);
raiz2= sqrt(x);
cout<<" Utilizando pow el resultado sera = "<<raiz1<<endl;
cout<<" Utilizando sqrt el resultado sera= "<<raiz2;
_getch();
}

EJECUCION

43

2015
43

PROGRAMACION ORIENTADA A OBJETOS

B) Funciones de la librera stdio.h

Funcin gets()
Syntax
#include <stdio.h>
char *gets(char *s);

Captura una cadena que puede contener espacio en blanco del flujo estndar.

Funcin printf()
Syntax
#include <stdio.h>
int printf(const char *format[, argument, ...]);

Ejemplo 6.- Escribe una salida formateada en el flujo estndar de salida.


PROGRAMA
// prog53.cpp: define el punto de entrada de la aplicacin de consola.
#include "stdafx.h"
/*OBJETIVO: Utilizar la funcio gets() y la funcin printf().*/
#include <iostream>
#include <conio.h>
#include <stdio.h>
#include <math.h>
using namespace std;
void main()
{ char nombre[30];
float nota;
system("cls");
cout<<"Ingrese nombre ==> "; gets(nombre);
cout<<"Ingrese nota ==> "; cin>>nota;
printf("El alumno %s tiene %5.1f de nota \n",nombre,nota);
//printf("Tiene %6.2f de nota",nota);
_getch();
}
EJECUCION

44

2015

PROGRAMACION ORIENTADA A OBJETOS

FUNDAMENTOS DE LA PROGRAMACION ORIENTADA A OBJETOS

Funcin clock()
Syntax
#include <time.h>
clock_t clock(void);

Ejemplo 7.- Escribe un programa que nos permita trabajar con la funcin clock.
PROGRAMA
/* CODIGO: cppcap03ejem07
FECHA: 15 de julio del 2012
OBJETIVO: Maneja la funcin clock*/
#include <iostream.h>
#include <conio.h>
#include <time.h>
#include <stdio.h>
#include <dos.h>
main(void)
{ int i,a=0;
clock_t inicio, fin;
inicio = clock();
for(i=1;i<=100000;i++)
{ if(i>1)
a=i;
cout<<a<<" "; }
clrscr();
fin = clock();
printf("El tiempo de inicio fue : %f\n", inicio / CLK_TCK);
printf("El tiempo de fin fue : %f\n", fin

/ CLK_TCK);

printf("El tiempo transcurrido fue: %f\n", (fin -inicio ) / CLK_TCK);


getch();
}
EJECUCION

45

2015
45

PROGRAMACION ORIENTADA A OBJETOS

2015

Funcintime()
Syntax
#include <time.h>
time_t time(time_t *timer);

Ejemplo 8.- Escribe un programa que nos permita trabajar con la funcin time.
Explicar.
PROGRAMA
/* CODIGO: cppcap03ejem08
FECHA: 15 de julio del 2012
OBJETIVO: Maneja la funcin time*/
#include <time.h>
#include <stdio.h>
#include <dos.h>
#include <conio.h>
#include <iostream.h>
void main(void)
{
time_t t;
t = time(NULL);
cout<<"El numero de segundos transcurridos desde el Enero 1, 1970 es "<<t;
getch();}
EJECUCION

La funcin cuenta los segundos transcurridos desde 1 enero 70 hasta el da actual.


Funciones que generan nmeros aleatorios
Son las funciones randomize(), rand() y random (num).. Veamos su sintaxis de cada una de ellas.

Funcin rand()

46

PROGRAMACION ORIENTADA A OBJETOS

FUNDAMENTOS DE LA PROGRAMACION ORIENTADA A OBJETOS


Syntax
#include <stdlib.h>
int rand(void);

Genera nmeros aleatorios entre 0 y RAND_MAX, constante definida en stdlib.h

Funcin randomize()
Syntax
#include <stdlib.h>
#include <time.h>
void randomize(void);

Inicializa el generador de nmeros.

Funcin random(n)
Syntax
#include <stdlib.h>
int random(int num);

Retorna valores entre 0 y num 1.


Ejemplo 9.- Generar nmeros aleatorios entre un cota mnima y una cotamxima.
PROGRAMA
/* CODIGO: cppcap03ejem09
FECHA: 16 de julio del 2012
OBJETIVO: Genera valores aleatorios entre dos valores dados */
#include <stdlib.h>
#include <iostream.h>
#include <time.h>
#include <conio.h>
int main(void)
{
int cota_minima,cota_maxima, i ,nro_terminos;
clrscr();
cout<<"Ingrese cota mnima: ";cin>>cota_minima;
cout<<"Ingrese cota mxima: ";cin>>cota_maxima;
cout<<"Ingrese Nro. Trminos: ";cin>>nro_terminos;
randomize();
for(i=0; i<=nro_terminos; i++)
cout<<(cota_minima+random(cota_maxima+1-cota_minima))<<endl;
getch();
return 0;
}

C) Funciones de la librera stdlib.h

47

2015
47

PROGRAMACION ORIENTADA A OBJETOS

2015

Funcin atof()
Syntax
#include <math.h>
double atof(const char *s);
long double _atold(const char *s);

Convierte de cadena a nmero de punto flotante.

Funcin atoi()
Syntax
#include <stdlib.h>
int atoi(const char *s);

Convierte de cadena a nmeroentero.

Funcin atol()
Syntax
#include <stdlib.h>
long atol(const char *s);

Convierte de cadena a numero long (entero largo).

Funcin itoa()
Syntax
#include <stdlib.h>
char *itoa(int value, char *string, int radix);

Convierte un entero a cadena.

Funcin ecvt()
Syntax
#include <stdlib.h>
char *ecvt(double value, int ndig, int *dec, int *sign);

Convierte una cadena a punto flotante..


3.2

Funciones Definidas por el Usuario.- Tambin podemos crear nuestras propias funciones y como
mencionamos al inicio de este captulo posteriormente podemos formar nuestra librera partcula. La
estructura de una funcin definida por el usuario es :
Forma General
Tipo nombrefuncion ( lista de parmetros)
{................... ;
.....................;
.....................;
[return(.....);]
.....................;

48

PROGRAMACION ORIENTADA A OBJETOS

FUNDAMENTOS DE LA PROGRAMACION ORIENTADA A OBJETOS

}
Donde:
Tipo

.............. Tipo de valor que devuelve la funcin en algunos


casos no devuelven ningn valor y el tipo ser
void (vacio).

nombrefuncion

......Identificador de la funcin

Lista de parmetros...Establecen la comunicacin entre la funcin que


realiza la llamada y nuestra funcin
return(

.....Permite retornar un valor a la funcin que realizo la


llamada, si la funcin es de tipo void no retorna valor.

Ejemplo:
int primo( int p1)
{ int i, sw=1; //asumo que es primo
for( i=2; i <= (p1/2) ; i++)
if ( (p1 % i) == 0)
{ sw = 0;// si es divisible no es primo
break; }
return(sw);
}
La llamada ser
If ( primo(a))// a necesariamente es entero
cout<< a << Es primo<< endl;

Ejemplo:
void leer ( long *cdigo, char nombre[40], char direccin[50])
{ // programa de lectura
clrscr();
cout << ingrese cdigo: ; cin>>*codigo;
cout << Ingrese nombre: ;gets(nombre); //Funcin de lectura
cout << Ingrese direccin: ; gets(direccion);
}
La llamada ser leer( &code, name, dire);

Si las declaraciones han sido:


long code;
char name[40];
char dire[50];
3.2.1

Ubicacion del prototipo, la llamada y la function en Lenguaje C++

/* CODIGO: cppcap03ejem10
FECHA: 16 de julio del 2015*/
#include <iostream.h>
#include <conio.h>
// PROTOTIPO DE LA FUNCION (ES EL ENCABEZADO)

49

2015
49

PROGRAMACION ORIENTADA A OBJETOS

2015

int suma(int operando1, int operando2);


// LA LLAMADA SE REALIZA DE LA FUNCION MAIN
void main( )
{ int valor1, valor2;
;
.;
S = suma( valor1, valor2);
;
..;
..;

}
// LA FUNCION SUMA DESARROLLADA
int suma ( int operando1, int operando2)
{
int resultado;
resultado = operando1+operando2;
return (resultado) ;
}

3.2.2

Comunicacin entre funciones.- La comunicacin se puede realizar de dos maneras:

Va variables Globales

Va argumentos parmetros

a)Va variables globales.- Se realiza cuando declaranms variables en unrea de acceso pblico o
sea que todas las funciones pueden acceder estas variables. Un esquema de esto seria
/* CODIGO: cppcap03ejem11
FECHA: 16 de julio del 2012
#include <iostream.h>
#include <conio.h>
// VARIABLES GLOBALES
int a,b,c;
// PROTOTIPO DE LAS FUNCIONES
void leer(void);
void multiplicar(void);
void escribir(void);

void main( )
{ // La function main no utiliza variables
leer ( );
multiplicar( );
escribir( );}

50

PROGRAMACION ORIENTADA A OBJETOS

FUNDAMENTOS DE LA PROGRAMACION ORIENTADA A OBJETOS

2015
51

// LAS FUNCIONES QUE TRABAJAN CON VARIABLES GLOBALES


void leer( )
{cout<< Ingrese a: ;
cin>> a;
cout<< Ingrese b: ;
cin>> b;}
void multiplicar( )
{ c = a*b ;}
void escribir( )
{ clrscr( );
cout<< c<<endl;
getch( );

La comunicacin es a travs de las variables a, b y c. El problema es que las funciones son


dependientes de las variables. Y para cada grupo de variables hay que desarrollar funciones, para
independizar las funciones de las variables se utiliza comunicacin argumentos parmetros, que
independiza las variables de los procedimientos.

b) Va argumentos y parmetros. Esto se establece como explicamos a continuacin:


Llamada por valor y llamada por referencia.- Cuando una funcin es llamada se le debe enviar una
lista de argumentos que son los que establecen la comunicacin entre los dos mdulos. La pregunta
es, Que argumentos enviar?

Los argumentos enviados pueden ser valores o direcciones

dependiendo del parmetro:Si el encabezado es void f1(int p1, int p2, float *p3)Supongamos que los
argumentos son a1, a2 y a3; entonces a1 y a2 deben necesariamente generar valores simples de tipo
entero y a3 ser obligatoriamente variable simple de tipo float, pero el primer parmetro y el segundo
al ser variables solamente piden valores enteros pero el tercer parmetro al ser tipo puntero pide una
direccin de una variable simple de tipo float. Entonces la llamada ser:
f1 ( a1, a2, &a3);
O sea se enva el contenido de a1 y de a2 pero la direccin de a3, entonces

a1 y a2 ha sido llamadas por valor

a3 ha sido llamada por referencia

Funcionamiento de un subprograma tipo funcin.- Cuando aparecen el nombre de una funcin


seguido de una lista de argumentos f2(a1, a2, &a3, &a4) los siguientes eventos tienen lugar:

Se realiza una transferencia de valores y direcciones hacia sus respectivos parmetros. Como
lo visualizamos en el siguiente grfico(Suponiendo que la llamada se realizo desde main):

51

PROGRAMACION ORIENTADA A OBJETOS


main()

2015

f2()_
a1

a2

p1

35

p2

40

a3

p3

a4

p4

MEMORIA ASIGNADA A main ()

MEMORIA ASIGNADA A f2()

Se ejecuta la funcin hasta que la primera sentencia return es alcanzada o termina la funcin.

Cuando termina la ejecucin de la funcin sucede lo siguiente:

El control retorna al punto siguiente desde donde se realizo la llamada

Sigue la ejecucin de main (En este caso).


EJEMPLO

// prog13.cpp: define el punto de entrada de la aplicacin de consola.


//ejemplo basico de funciones
#include "stdafx.h"
#include "iostream"
#include "conio.h"
using namespace std;
float promedio(int p1,int p2,int p3,int p4,int *menor,int *mayor);
int _tmain(int argc, _TCHAR* argv[])
{ int a1, a2,a3,a4;
float prom;
int min,max;
cout <<"Ingrese primer valor => ";cin>>a1;
cout <<"Ingrese segundo valor => ";cin>>a2;
cout <<"Ingrese tercer valor => ";cin>>a3;
cout <<"Ingrese cuarto valor => ";cin>>a4;
prom = promedio(a1,a2,a3,a4,&min,&max);
cout<<"Promedio = "<<prom<<endl;
cout<<"menor = "<<min<<endl;
cout<<"mayor = "<<max<<endl;
_getch();
return 0;
}
float promedio(int p1,int p2,int p3,int p4,int *menor,int *mayor)
{ int m1,m2;
if(p1<p2)
m1=p1;
else
m1=p2;
if(p3<p4)

52

PROGRAMACION ORIENTADA A OBJETOS

FUNDAMENTOS DE LA PROGRAMACION ORIENTADA A OBJETOS

2015
53

m2=p3;
else
m2=p4;
if(m1<m2)
*menor=m1;
else
*menor=m2;
if(p1>p2)
m1=p1;
else
m1=p2;
if(p3>p4)
m2=p3;
else
m2=p4;
if(m1>m2)
*mayor=m1;
else
*mayor=m2;
return((p1+p2+p3+p4)/4.0);
}

3.3

Funciones Inline.-Este tipo de funciones que se insertan directamente le dan mayor velocidad a la
ejecucin, la forma de indicar una function de este tipo es colocando el especificador inline antes de
la definicin de la funcin. Veamos el formato:

inline tipo_devuelto nombre_funcion (parmetros)


{.;
.;
Instrucciones;
}
La llamada ser normal como a las otras funciones, pero en el cuerpo de la funcin no podr
haber:
Variables de tipo static
Sentencias de bucle.
Sentencia switch
Go to

Ejemplo 12.-veamos un ejemplo de uso de una funcin inline


PROGRAMA
/ prog63.cpp: define el punto de entrada de la aplicacin de consola.
// OBJETIVO: UTILIZA FUNCIONES INLINE.
#include "stdafx.h"
#include <iostream>
#include <conio.h>
#include <math.h>
using namespace std;
inline float fi (float x)
{float ff;
ff= pow(x,2)-x-2;
return (ff);}
void main(void)

53

PROGRAMACION ORIENTADA A OBJETOS

2015

{ float xmin,xmax,deltax,fx,x;
system("cls");
cout<<"Ingrese x mnimo: ";cin>>xmin;
cout<<"Ingrese x mximo: ";cin>>xmax;
cout<<"Ingrese variacin de x: ";cin>>deltax;
x=xmin;
while( x<=xmax)
{fx=fi(x);
cout<<"x= "<<x<<" f(x)= "<<fx<<endl;
x=x+deltax;}
_getch(); }

Fjense que es una funcin con un clculo simple pues retorna el valor de la funcin para un argumento
3.4

Funciones Recursivas.- Una funcin recursiva es una funcin que se llama as misma para resolver
un clculo o proceso.
Las caractersticas de la recursividad son :
En cada llamada recursiva el grado de dificultad del clculo o proceso disminuye.
Cada llamada tendr su propio espacio de memoria.
Habr una llamada no recursiva en algn instante a partir del cual se solucionara el problema
a resolver.
Si tenemos el clculo de factorial:
!N = N*!(N-1).. calcular el factorial de (N-1) es ms sencillo que calcular el factorial de N.
Adems ! 1 = 1 y ! 0 = 1 que son llamadas no recursivas y que nos permite calcular el factorial a
partir de esto.

Ejemplo 13.- Escriba un programa que halle el factorial de un numero positivo en forma recursiva.
PROGRAMA
// prog73.cpp: define el punto de entrada de la aplicacin de consola.
#include "stdafx.h"
/*OBJETIVO: Halla factorial en forma recursiva */
# include<iostream>
# include<conio.h>
using namespace std;
int facto (int num);
void main( )
{ int n;
system("cls");
cout<< " NUMERO = "; cin>> n;
cout<< " FACTORIAL = "<<facto(n);
getch();}
/* Funcion recursiva */
int facto ( int num)
{ cout<<" Llamada"<<endl;
if (num <= 1)
return(1);
else
return(num * facto(num-1)); }
// prog73.cpp: define el punto de entrada de la aplicacin de consola.
//OBJETIVO: Halla serie de fibbonacci
#include "stdafx.h"
# include<iostream>
# include<conio.h>
using namespace std;
int cont=0;

54

PROGRAMACION ORIENTADA A OBJETOS

FUNDAMENTOS DE LA PROGRAMACION ORIENTADA A OBJETOS

2015
55

int fib (int num);


void main( )
{ int n;
//clrscr();
cout<< " NUMERO = "; cin>> n;
cout<< " FIBBONACCI = "<<fib(n);
getch();}
/* Funcion recursiva */
int fib ( int num)
{ cont++;
cout<<num<<endl;
if (num <= 2)
return(1);
else
return(fib(num-1)+fib(num-2));
}

3.5

Punteros a funciones.- Tambin podemos devolver la direccin de una funcin, veamos int (*fpun)
(int )ser la declaracin de un puntero a funcin que recibe un int y devuelve un int; en cambio int
*fp(int ) ser el prototipo de una funcin que recibe un int y devuelve puntero a int.

Ejemplo 14.- Escriba un programa usando el concepto de puntero a funcin.


PROGRAMA
/* CODIGO: cppcap03ejem14
FECHA: 16 de agosto de 2012
OBJETIVO: Ejemplo de puntero a funcin. */
# include<iostream.h>
# include<conio.h>
int* funcion1 ( int num)
{ cout <<num<<endl;
return(&num); }
int funcion2 (int num)
{ cout<<num<<endl;
return(num*2); }
void main( )
{ int i,j ;
clrscr();
i=4;
j = funcion2(i); // Imprime 4
funcion2(funcion2(j));// Primera llamada imprime 8 y en la segunda imprime 16
int (*pf1)(int)=&funcion2;
pf1(i);

//Imp rime 4

int* (*pf2)(int)=&funcion1;
pf2(j);

//Imp rime 8

getch(); }
EJECUCION

55

PROGRAMACION ORIENTADA A OBJETOS

2015

PROBLEMAS
Problema 1.- EJEMPLO DE FUNCIONES QUE SE COMUNICAN MEDIANTE VARIABLES GLOBALES.
1.- Suponga que tiene un numero num y una aproximacin a su raz cuadrada. Para obtener una
aproximacin ms exacta a la raz cuadrada real se puede utilizar la formula: aproximacinnueva = (n/
aproximacinanterior)+aproximacinanterior)/2. Utilizando esta informacin, escriba un programa que
solicite al usuario un nmero y una suposicin inicial de su raz cuadrada. Con los datos el programa
calculara una aproximacin de la raz cuadrada que sea exacta hasta 0.00001.
PROGRAMA
// prog63.cpp: define el punto de entrada de la aplicacin de consola.
// OBJETIVO: Halla raz cuadrada por aproximacin*/
#include "stdafx.h"
#include<iostream>
#include<conio.h>
#include<math.h>
using namespace std;
#define ERROR 0.00001
float num,raiz,aprox;//VARIABLES GLOBALES
void leer();
void procesar();
void mostrar();
void main()
{ leer();
procesar();
mostrar();
}
void leer( )
{ //clrscr();
cout<<"Ingrese el numero cuya raiz cuadrada desea ";
cin>>num;
cout<<"Ingrese un valor aproximado de la raz ";
cin>>aprox; }
void procesar( )
{ do{ raiz=aprox;//almacenar la aproximacin
aprox=(num/raiz + raiz)/2.0;//calcular nueva aproximacin
cout<<"Nueva Aproximacion "<<aprox<<endl;
}while(fabs(aprox-raiz)>ERROR);
_getch();
}
void mostrar()
{ cout<<endl<<endl;
cout<<"La Raiz cuadrada es "<<aprox<<endl;
_getch(); }

2.- Escriba un programa que utilizando comunicacin va argumentos y parmetros, pueda calcular la nota
final, considerando que el promedio de prcticas se halla eliminando la menor nota de las cuatro
prcticas, la nota final se hallara

56

PROGRAMACION ORIENTADA A OBJETOS

FUNDAMENTOS DE LA PROGRAMACION ORIENTADA A OBJETOS

2015
57

Promedio de prcticas = (practica 1+practica 2 + practica 3 + practica 4 menor)/3.0


Nota Final = (promedio practicas+ examen parcial + 2*examen parcial)/4.0
SOLUCION:
PROGRAMA
// PROG73.cpp: define el punto de entrada de la aplicacin de consola.
// OBJETIVO: Halla nota final con el sistema F
#include "stdafx.h"
#include<iostream>
#include<conio.h>
#include<math.h>
using namespace std;
void leer(float &n1,float &n2,float &n3, float &n4);
float menor(float n1,float n2,float n3, float n4 );
void main()
{float EXP, EXF, PFIN,EXS;
float a,b,c,d,PP,MEN;
leer(a,b,c,d);
cout<<"\n La menor practica es = "<<menor(a,b,c,d);
MEN=menor(a,b,c,d);
PP=((a+b+c+d)-MEN)/3.0;
cout<<"\n Ingrese la nota del parcial :";cin>>EXP;
cout<<"\n Ingrese la nota del FINAL :";cin>>EXF;
cout<<"\n El promedio de prcticas es :"<<PP;
PFIN=(PP+EXP+2*EXF)/4.0;
cout<<"\n El Promedio Final es :"<<PFIN<<endl;//redondea por exceso
if(PFIN>=10)
cout<<"Su promedio final es: "<<PFIN<<endl;
else
if(PP>6.0)
{cout<<"Ingrese el Examen Sustitutorio: ";cin>>EXS;
if(EXP)
PFIN=(PP+EXS+2*EXF)/4.0;
if(EXF)
PFIN=(PP+EXP+2*EXS)/4.0;
cout<<"Su promedio final es: "<<PFIN<<endl;
}
getch();}
void leer(float &n1,float &n2,float &n3, float &n4)
{cout<<"\nIngrese las practicas dejando espacio :";
cin>>n1>>n2>>n3>>n4; }
float menor(float n1,float n2,float n3, float n4 )
{ float men;
men=n1;
if(n2<men)
men=n2;
if(n3<men)
men=n3;
if(n4<men)
men=n4;
return ( men); }

3.-

3
2
Este programa halla una raz positiva de la ecuacin cubica x x x 1 0 , en el intervalo [0,5]

con un error menor que 0.001.


PROGRAMA

57

PROGRAMACION ORIENTADA A OBJETOS

2015

// prog83.cpp: define el punto de entrada de la aplicacin de consola.


//metodo de biseccion
#include "stdafx.h"
# include<iostream>
# include<math.h>
# include<conio.h>
using namespace std;
#define error 0.0001
//# define x0 0.0
//# define x1 5.0
float fcub(float x);
float bisecar(float a, float b);
/*Programa principal*/
void main( )
{ float x0,x1;
//clrscr();
cout<<"Ingrese intervalo donde se encuentra la raiz"<<endl;
cout<<"Ingrese xmin : ";cin>>x0;
cout<<"Ingrese xmax : ";cin>>x1;
cout<< " RAIZ = "<< bisecar( x0,x1);
getch(); }
/* Funciones*/
float fcub(float x)
{ return( pow(x,3) - pow(x,2) - x -1);}
float bisecar(float a, float b)
{float r ,medio ;
while ( fabs(a-b)>= error)
{cout<<fabs(a-b)<<endl;
medio = (a+b)/2.0;
if ((fcub(a) * fcub(medio))<= 0)
b= medio;
else
a= medio;
}
r = a;
return( r ); }

4.- Escriba un programa que calcule la planilla para un trabajador, los datos que tienen que considerarse
son:
Nombre : Nombre del empleado es una cadena de 40 caracteres.
Cdigo : Cdigo del empleado es una cadena de 11 caracteres.

58

PROGRAMACION ORIENTADA A OBJETOS

FUNDAMENTOS DE LA PROGRAMACION ORIENTADA A OBJETOS

2015
59

Sueldo bruto : Sueldo mensual que percibe el empleado.


Faltas

: Se le descontara 1/30 del sueldo bruto por cada falta.

Horas extras : Se le pagara (1/(30*8))*1.5 por cada hora extra.


Seguro

: Por afp (1) ser 13 % de descuento del total a percibir

Por ssp(2) ser 11% de descuento del total a percibir.


Por ninguna(0)ser 7% de descuento del total a percibir.
Bonificaciones: Tiempo de servicio (0=no,1=si), 5% del bruto.
PROGRAMA
// prog93.cpp: define el punto de entrada de la aplicacin de consola.
// OBJETIVO: CALCULO DE PLANILLA PARA UN TRABAJADOR.
#include "stdafx.h"
# include<iostream>
# include<stdio.h>
# include<conio.h>
using namespace std;
void leer( char nombre[40], char cdigo[11],float *sueldob,int *faltas,int *horase,int *seguro,int *bonif);
float calcular_neto(float sueldob,int faltas,int horase,int seguro,int bonif,float *descuento);
void imprimir_boleta(char n[40],char c[11],float descuento,float sueldon);
void main( )
{ char name[40],code[11];
float sb,de,sn;
int fa,he,seg,bon;
//clrscr();
leer(name,code,&sb, &fa,&he,&seg,&bon);
sn= calcular_neto(sb,fa,he,seg,bon,&de);
imprimir_boleta(name,code,de,sn);
_getch(); }
/* Funciones*/
void leer( char nombre[40], char codigo[11],float *sueldob,int *faltas,int *horase,int *seguro,int *bonif)
{ //clrscr;
cout<<"Ingrese nombre ==> ";gets(nombre);
cout<<"Ingrese codigo ==> ";gets(codigo);
cout<<"Ingrese sueldo bruto ==> ";cin>> (*sueldob);
cout<<"Ingrese faltas
==> ";cin>> (*faltas);
cout<<"Ingrese horas extras ==> ";cin>> (*horase);
cout<<"Ingrese seguro (0=ninguno,1=afp,2=ssp) ==> ";cin>> (*seguro);
cout<<"Ingrese bonificaciones(0=No,1=Si)==> ";cin>> (*bonif);
}
float calcular_neto(float sueldob,int faltas,int horase,int seguro,int bonif,float *descuento)
{ float neto,sumabonif,des;
//calculo de bonificaciones
sumabonif=0;
sumabonif=sumabonif+horase*(sueldob/240)*1.5;
if(bonif==1)
sumabonif=sumabonif+sueldob*0.05;
//calculo de descuentos
des=0;
des = des + (sueldob/30)* faltas;
if (seguro==1)
(*descuento)= (sueldob+sumabonif-des)*0.13;
else
if(seguro==2)
(*descuento)= (sueldob+sumabonif-des)*0.11;
else
(*descuento)= (sueldob+sumabonif-des)*0.07;
(*descuento)=(*descuento)+des;
neto = sueldob - (*descuento)+ sumabonif;
return (neto);
}

59

PROGRAMACION ORIENTADA A OBJETOS


void imprimir_boleta(char n[40],char c[11],float descuento,float sueldon)
{ //clrscr();
cout<<" Nombre : "<<n<<endl;
cout<<" Codigo : "<<c<<endl;
cout<<" Descuento: "<<descuento<<endl;
cout<<" Neto a >Recibir : "<<sueldon<<endl; }

EJECUCION

5- Escriba un programa que halle los factores primos de un nmero en forma recursiva.
PROGRAMA
/* CODIGO: CPPCAP03PROB06
FECHA: 16 DE AGOSTO DE 2012
OBJETIVO: Halla factores primos en forma recursiva */

# include<iostream.h>
# include<math.h>
# include<conio.h>
void fprimo(int num);
void main( )
{ int n;
clrscr();
do{
cout<< " NUMERO = ";
cin>> n;
}while(n<1);
fprimo(n);

60

2015

PROGRAMACION ORIENTADA A OBJETOS

FUNDAMENTOS DE LA PROGRAMACION ORIENTADA A OBJETOS

2015
61

getch();
}
void fprimo( int num)
{
int nr, k =1;
if (num > 1)
{do {
k = k +1;
} while( (num % k) != 0);
cout<< " "<< k <<" ";
nr = num / k;
fprimo( nr);
}
}

EJERCICIOS PROPUESTOS
1. Escriba un programa que utilizando funciones pueda realizar operaciones con nmeros complejos:
Suma, Resta, Multiplicacin y Divisin. Cada operacin debe realizarse con funciones adems de la
lectura y escritura. Debe trabajar con un men.
2. Escriba un programa que calcule reas, debe calcular reas para cuadrados, rectngulos, tringulos y
crculos; cada calculo debe realizarse con una funcin.
3. Escriba un programa que resuelva el mismo problema de planilla (problema 4)pero considere que hay
tres tipos de bonificaciones.
Tiempo de servicio (5%)
Carga familiar (5%)
Remuneracin por direccin (10%)
4. Escriba un programa que utilizando el concepto de puntero a funciones evale una funcin para un
argumento variando en un rango de valores determinado.
5. Escriba un programa que me permita hallar la nota final de un alumno que rindi 4 practicas y 2
exmenesconsidere, que el sistema de evaluacin puede ser:
Sistema A : promedio de prcticas es el promedio de las cuatro practicas y el promedio final es la
suma de los dos exmenes mas el promedio de prcticas divididos entre tres.
Sistema B : promedio de prcticas es el promedio de tres practicas eliminando la menor y el
promedio final es la suma del primer examen ms el segundo examen duplicado el promedio de
prcticas divididos entre cuatro.
6. Escriba un programa que resuelva el problema de las torres de Hani para n discos utilizando una
funcin recursiva. En las torres de Hani se trata de pasar n discos de un eje Origen a un eje
Destino utilizando un eje auxiliar. Las reglas son :

61

PROGRAMACION ORIENTADA A OBJETOS


Solo se puede mover un disco a la vez.
Nunca un disco de mayor dimetro puede estar sobre un disco de menor dimetro.

CAPITULO IV

62

2015

PROGRAMACION ORIENTADA A OBJETOS

FUNDAMENTOS DE LA PROGRAMACION ORIENTADA A OBJETOS

2015
63

CAPITULO IV
ARREGLOS EN LENGUAJE C
4.1 Definicin.- Un arreglo es una coleccin de elementos del mismo tipo; por lo tanto es una estructura
homognea. Su declaracin se realiza indicando al compilador sus caractersticas que son tipo,
nombre y tamao. Ejemplo:
int datos[10];la informacin que se entrega al compilador ser:

63

Nombre del arreglo: datos

Tipo de componente: variable simple entera

Tamao 10 elementos

Nombre de las componentes:

datos[0]

datos[1]

datos[2]

datos[3]

datos[4]

datos[5]

datos[6]

datos[7]

datos[8]

datos[9]

PROGRAMACION ORIENTADA A OBJETOS

2015

4.2 Acceso a elementos.- Los elementos de un arreglo se designan con un subndice que comienza en
cero: int a[4] : a[0], a[1], a[2], a[3].
Un arreglo se puede inicializar as : int a[4] = { 20, 25, 35, 40}
a[0]
a[1]

4.3

20

25

a[2]

35

a[3]

40

Operaciones con Arrays unidimensionales (vectores).- Las operaciones inciales son las de lectura
y escritura, las cuales vamos a ver en el siguiente programa ejemplo:

4.4

Ejemplo 1.- Lee e imprime un vector de n elementos.

PROGRAMA
// prog14.cpp: define el punto de entrada de la aplicacin de consola.
//OBJETIVO: Entrada y salida de un vector
#include "stdafx.h"
# include<iostream>
# include<conio.h>
using namespace std;
void main( )
{ int a[50],n,i;
system("cls");
//Lectura
cout << " Ingrese n => "; cin >> n;
for (i=1;i<=n;i++)
{ cout<< " Ingrese valor "<< i<<" : ";
cin>> a[i]; }
system("cls");
//Escritura
cout<<" SALIDA "<<endl<<endl;
for ( i=1; i<=n;i++)
{ cout<< a[i]<< endl;}
_getch(); }
// prog14a.cpp: define el punto de entrada de la aplicacin de consola.
//OBJETIVO: Entrada y salida de un vector
#include "stdafx.h"
#include<iostream>
#include<conio.h>
#include<stdlib.h>
#include<time.h>
using namespace std;
void main( )
{ int nota[50],n,i;
system("cls");
//Lectura
srand(time(NULL));
cout << " Ingrese n => "; cin >> n;
for (i=1;i<=n;i++)
{ nota[i] =rand()%20+1; }
system("cls");
//Escritura
cout<<" SALIDA "<<endl<<endl;
for ( i=1; i<=n;i++)

64

2015
65

PROGRAMACION ORIENTADA A OBJETOS

FUNDAMENTOS DE LA PROGRAMACION ORIENTADA A OBJETOS


{ cout<<"\t"<< nota[i]<< endl;}
_getch(); }

Operaciones con arreglos: Las dems operaciones las analizaremos algortmicamente y despus los
presentaremos en un men en los problemas desarrollados.
Las operaciones ms importantes con arreglos unidimensionales son :
Adicin
Eliminacin
Bsqueda
Ordenamiento
ADICION: La operacin de adicin nos permite ingresar un elemento al vector de n componentes que
estn siendo utilizadas.
Inicialmente tenemos: Vector A
N=6
A [1]

A [2]

A [3]

12

A [4]

A [5]

20

15

A[6]

A[7]

25

J= 4
X

14

Vamos a insertar el valor x = 14 en la posicin j=4


Tener en cuenta que al insertar un nuevo valor el vector crecer en un elemento.
Al finalizar los valores deberan estar en las siguientes posiciones:
A[1] = 3, A[2] = 5, A[3] = 12, A[4] = 14, A[5] = 20, A[6] = 15, A[7] = 25.
Para realizar esta operacin necesitamos tres pasos:
a) Realizar un corrimiento de una posicin hacia la derecha de todos los valores desde la posicin N
(N=6) hasta la posicin J (J=4), el resultado sera:
N=6
A [1]

A [2]

El algoritmo es:
Para i = N,J,-1
A[i+1] A[i]

65

A [3]

A [4]

A [5]

12

20

20

A[6]
15

A[7]
25

2015

PROGRAMACION ORIENTADA A OBJETOS


Fin Para
b) Adicionar el elemento X en la posicin J
A[J] X
El resultado seria
N=6
A [1]

A [2]

A [3]

A [4]

12

14

A [5]
20

A[6]
15

A[7]
25

c) Actualizar N
N = N +1
N=7
A [1]

A [2]

A [3]

A [4]

12

14

A [5]
20

Las instrucciones en Visual C++ sern:


cout<<"Ingrese posicin de insercin: ";
cin>> j;
cout<<"Ingrese valor a insertar : ";
cin>> x;
for( i=n; i>=j; i--)
v[i+1] = v[i];
v[j] = x;
n = n +1;

PROGRAMA
// prog24.cpp: define el punto de entrada de la aplicacin de consola.
//OBJETIVO: adicion por insercin a un vector
#include "stdafx.h"
#include<iostream>
#include<conio.h>
using namespace std;
void main( )
{ int a[50],n,i;
int x,j;
system("cls");
//Lectura
cout << " Ingrese n => "; cin >> n;
for (i=1;i<=n;i++)
{ cout<< " Ingrese valor "<< i<<" : ";
cin>> a[i]; }
system("cls");
//Escritura
cout<<" SALIDA "<<endl<<endl;
for ( i=1; i<=n;i++)
{ cout<<" "<< a[i]<< endl;}

66

A[6]
15

A[7]
25

PROGRAMACION ORIENTADA A OBJETOS

FUNDAMENTOS DE LA PROGRAMACION ORIENTADA A OBJETOS

2015
67

//insercion del valor x en posicion j


cout<<"Ingrese posicion de insercion: ";cin>> j;
cout<<"Ingrese valor a insertar
: "; cin>> x;
for( i=n; i>=j; i--)
a[i+1] = a[i];
a[j] = x;
n = n +1;
//Escritura
cout<<" SALIDA CON INSERCION"<<endl<<endl;
for ( i=1; i<=n;i++)
{ cout<<" "<< a[i]<< endl;}
_getch(); }

EJECUCION

ELIMINACION: La operacin de eliminacin nos permite sacar un elemento del


componentes que estn siendo utilizadas.
Inicialmente tenemos: Vector A
N=6
A [1]

A [2]

A [3]

A [4]

A [5]

12

20

15

A[6]
25

J= 3
Vamos a eliminar el tercer elemento del vector.
Finalmente deberamos tener A[1] = 3, A[2] = 5, A[3] = 20, A[4] = 15, A[5] = 25.
Y N decrecera y seria 5.
Para realizar esta operacin necesitamos dos pasos:
a) Realizar un corrimiento de una posicin hacia la izquierda todos los valores desde la
posicin J+1 (J=3) hasta la posicin N (N=6).:
N=6
A [1]

A [2]

El algoritmo es:
Para i = J+1,N
A[i-1] A[i]
Fin Para

67

A [3]

A [4]

A [5]

20

15

25

A[6]
25

vector de n

2015

PROGRAMACION ORIENTADA A OBJETOS


b) Actualizar N.
NN-1
El resultado seria
N=5
A [1]
3

A [2]

A [3]

20

A [4]
15

A [5]
25

Las instrucciones en Visual C++ sern:


cout<<"Ingrese posicin de valor a eliminar : ";
cin>> j;
for( i=j+1 ; i<=n;i++)
v[i-1] = v[i];
n = n - 1;
// prog34.cpp: define el punto de entrada de la aplicacin de consola.
//OBJETIVO: Eliminacion
#include "stdafx.h"
#include<iostream>
#include<conio.h>
using namespace std;
void main( )
{ int a[50],n,i;
int j;
system("cls");
//Lectura
cout << " Ingrese n => "; cin >> n;
for (i=1;i<=n;i++)
{ cout<< " Ingrese valor "<< i<<" : ";
cin>> a[i]; }
system("cls");
//Escritura
cout<<" SALIDA "<<endl<<endl;
for ( i=1; i<=n;i++)
{ cout<<"\t"<< a[i]<< endl;}
//Eliminacion del valor en posicion "j"
cout<<"Ingrese posicion del valor a eliminar: ";cin>> j;
for( i=j+1; i<=n; i++)
a[i-1] = a[i];
n = n -1;
//Escritura
cout<<" SALIDA ELIMINACION"<<endl<<endl;
for ( i=1; i<=n;i++)
{ cout<<"\t"<< a[i]<< endl;}
_getch(); }

BUSQUEDA: La operacin de bsqueda es una de las ms importantes. En todo proceso real siempre se
buscara un elemento dentro de un conjunto, o sea buscaremos informacin dentro de la data, labor
fundamental en informtica.
La operacin buscara un elemento X en un vector A de N elementos.
N=6
A [1]

A [2]

A [3]

12

68

A [4]

A [5]

20

15

A[6]
25

A[7]

PROGRAMACION ORIENTADA A OBJETOS

FUNDAMENTOS DE LA PROGRAMACION ORIENTADA A OBJETOS

X=A[1]? X=A[2]?

2015
69

X=A[i]?

19

Tenemos que tener en cuenta que la bsqueda terminara cuando encontremos el elemento buscado o
cuando llegamos al final de la estructura.
Algortmicamente seria:
1.- Leer (x)
2.- Para i= 1,n
2.1 Si (A[i]==x)
Entonces
2.1.1 pos i
2.1. 2 break;
Fin si
Fin Para
3.- Si ( x == A[i])
Entonces
3.1Escribir( Valor hallado en posicin , pos)
Sino
3.2 Escribir( Valor no hallado)
Fin si
Las instrucciones en Visual C++ sern:
cout<<"Ingrese valor a buscar : ";
cin>> x;
for( i=1;i<=n;i++)
if ( v[i]== x)
{ pos = i;
break ; }
if ( v [i ]== x)
cout<< " Valor hallado en posicin: "<<pos;
else
cout<< " Valor no hallado ";
PROGRAMA

// prog44.cpp: define el punto de entrada de la aplicacin de consola.


//OBJETIVO: Operacion de bUSQUEDA
#include "stdafx.h"
# include<iostream>

69

PROGRAMACION ORIENTADA A OBJETOS

2015

# include<conio.h>
using namespace std;
void main( )
{ int a[50],n,i;
int x,pos;
system("cls");
//Lectura
cout << " Ingrese n => "; cin >> n;
for (i=1;i<=n;i++)
{ cout<< " Ingrese valor "<< i<<" : ";
cin>> a[i]; }
system("cls");
//Escritura
cout<<" SALIDA "<<endl<<endl;
for ( i=1; i<=n;i++)
{ cout<<"\t"<< a[i]<< endl;}
//Busqueda de un valor "x"
cout<<"Ingrese valor a buscar : "; cin>> x;
for( i=1;i<=n;i++)
if ( a[i]== x)
{ pos = i; break ; }
if ( a[i ]== x)
cout<< " Valor hallado en posicion: "<<pos<<endl;
else
cout<< " Valor no hallado "<<endl;
_getch(); }

EJECUCION

ORDENAMIENTO: La operacin de ordenamiento se realiza por etapas, en nuestro algoritmo por


comparacin trataremos de poner el menor valor en la posicin superior, pero en cada etapa ya no
participa el menor ya encontrado en la etapa anterior.
El mtodo busca colocar el primer menor en la posicin 1 en la etapa 1.
Colocar el segundo menor en la posicin 2 en la etapa 2.
colocar el tercer menor en la posicin 3 en la etapa 3.
En general se trata de colocar el iesimo menor en la posicin i en la etapa i.
Veamos
ETAPA 1
OBJETIVO. Llevar el menor 1(menor total) a la primera posicin.
A[1] > A [2]? Si la respuesta es s, se intercambian posiciones entre A[1] y A[2], como en este caso
A [1]
9

70

A [2]

A [3]

A [4]

A [5]

A[6]

A[7]

PROGRAMACION ORIENTADA A OBJETOS

FUNDAMENTOS DE LA PROGRAMACION ORIENTADA A OBJETOS

2015
71

Despus del intercambio tenemos


A [1]
3

A [2]

A [3]

A [4]

A [5]

A[6]

A[7]

A [5]

A[6]

A[7]

A[1] > A [3]?. Si entonces.


A [1]
2

A [2]

A [3]

A [4]

A[1] > A [4]?. No


A[1] > A [5]?. No
A[1] > A [6]?. No
A[1] > A [7]?. No
ETAPA 2
OBJETIVO. Llevar el menor 2(segundo menor ) a la segunda posicin
Verificar que en la segunda etapa ya no participa el primer menor , pues ya encontr su posicin final.

A [2]

A [3]

A [4]

A [5]

A[6]

A[7]
5

A[2] > A [3]?. Si


A [2]

A [3]

A [4]

A [5]

A[6]

A[7]

A[2] > A [4]?. No


A[2] > A [5]?. No
A[2] > A [6]?. No
A[2] > A [7]?. No
ETAPA 3

OBJETIVO. Llevar el menor 3(tercer menor ) a la tercera posicin


Verificar que en la tercera etapa ya no participa el primer menor y el segundo menor, pues ya alcanzaron
su posicin final.
A [3]

A [4]
9

A [5]
7

A[6]
6

A[7]
4

A[3] > A [4]?. Si. Intercambiar entre A[3] y A[4]


A [3]

A [4]
7

71

A [5]
9

A[6]
6

A[7]
4

PROGRAMACION ORIENTADA A OBJETOS


A[3] > A [5]?. Si. Intercambiar entre A[3] y A[5]
A [3]

A [4]

A [5]

A[6]

A[7]

A[3] > A [6]?. Si. Intercambiar entre A[3] y A[6]


A [3]

A [4]

A [5]

A[6]

A[7]

A[3] > A [7]?. No.


ETAPA 4
OBJETIVO. Llevar el menor 4 (Cuarto menor ) a la cuarta posicin
A [4]

A [5]
9

A[6]
7

A[7]
5

A[4] > A [5]?. Si


A [4]

A [5]
7

A[6]
9

A[7]
5

A[4] > A [6]?. Si


A [4]

A [5]
6

A[6]
9

A[7]
5

A[4] > A [6]?. Si


A [4]

A [5]
5

A[6]
9

A[7]
6

ETAPA 5
OBJETIVO. Llevar el menor 5 (Quinto menor ) a la quinta posicin
A [5]

A[6]

A[7]

9
A[5] > A [6]?. Si
A [5]

A[6]
7

A[7]

A[5] > A [7]?. Si


A [5]

A[6]

A[7]
7

ETAPA 6 Se ordenan n (7) valores en n-1 etapas (6)


OBJETIVO. Llevar el menor 6 (Sexto menor ) a la sexta posicin
A[6]

A[7]

72

2015

PROGRAMACION ORIENTADA A OBJETOS

FUNDAMENTOS DE LA PROGRAMACION ORIENTADA A OBJETOS

A[5] > A [6]?. Si


A[6]

A[7]

Volvemos a verificar el vector y tendremos


A [1]

A [2]

A [3]

A [4]

A [5]

A[6]

A[7]

Planteando la iesima etapa dentro de las n-1 etapas, en forma algortmica tenemos.
1.- Para i= 1, n-1 // Numero de etapas
1.1.- Para j= i+1, n
1.1.1 Si ( A[i] > A[j])
Entonces
Temp A[i]
A[i] A(j)
A[j] temp
Fin si
Fin para
Fin Para
Programando en Visual C++:
int i,j,temp;
for ( i=1; i<n ;i++)
for (j=i+1;j<=n;j++)
if( v[i]> v[j])
{ temp = v[i];
v[i] = v[j];
v[j] = temp ;}

PROGRAMA
// prog54.cpp: define el punto de entrada de la aplicacin de consola.
//OBJETIVO: Operacion de ORDENAMIENTO
#include "stdafx.h"
# include<iostream>
# include<conio.h>
using namespace std;
void main( )
{ int a[50],n;
int i,j,temp;
system("cls");
//Lectura
cout << " Ingrese n => "; cin >> n;
for (i=1;i<=n;i++)
{ cout<< " Ingrese valor "<< i<<" : ";
cin>> a[i]; }
system("cls");
//Escritura

73

2015
73

PROGRAMACION ORIENTADA A OBJETOS


cout<<" SALIDA "<<endl<<endl;
for ( i=1; i<=n;i++)
{ cout<<" "<< a[i]<< endl;}
//ORDENAMIENTO DEL VECTOR a
for ( i=1; i<n ;i++) //Maneja etapas
for (j=i+1;j<=n;j++) //Maneja comparaciones en cada etapa
if( a[i]> a[j])
{ temp = a[i];
a[i] = a[j];
a[j] = temp ;}
//Escritura
cout<<" SALIDA VECTOR ORDENADO "<<endl<<endl;
for ( i=1; i<=n;i++)
{ cout<<" "<< a[i]<< endl;}
_getch(); }

EJECUCION

PROGRAMAS BASICOS CON ARREGLOS UNIDIMENSIONALES


Ejemplo 2.- Realizar una adicin al final del vector
PROGRAMA
Ejemplo 3.- Realizar una eliminacin en cualquier lugar del vector
// prog24.cpp: define el punto de entrada de la aplicacin de consola.
// OBJETIVO: ADICIONAR UN ELEMENTO AL FINALIZAR EL VECTOR
#include "stdafx.h"
# include<iostream>
# include<conio.h>
using namespace std;
void main( )
{ int vector[50],n,i,x,j;
system("cls");
//Lectura
cout << " Ingrese n => "; cin >> n;
for (i=1;i<=n;i++)
{ cout<< " Ingrese valor "<< i<<" : ";
cin>> vector[i];}
system("cls");
//Escritura
cout<<" SALIDA "<<endl<<endl;
for ( i=1; i<=n;i++)
{ cout<< vector[i]<< endl;}
_getch();

74

2015

PROGRAMACION ORIENTADA A OBJETOS

FUNDAMENTOS DE LA PROGRAMACION ORIENTADA A OBJETOS


system("cls");
cout<<" Ingrese el valor para adicionar==> ";cin>>x;
cout<<" Ingrese la posicion de adicion ==> ";cin>>j;
for ( i=n; i>=j;i--)
vector[i+1]=vector[i];
vector[j]=x;
n=n+1;
cout<<" NUEVA SALIDA "<<endl<<endl;
for ( i=1; i<=n;i++)
{ cout<< vector[i]<< endl;}
_getch();}

PROGRAMA
// prog34.cpp: define el punto de entrada de la aplicacin de consola.
// OBJETIVO: Eliminar un elemento de un vector(En la posicin j) */
#include "stdafx.h"
# include<iostream>
# include<conio.h>
using namespace std;
void main( )
{ int vector[50],n,i,j;
system("cls");
//Lectura
cout << " Ingrese n => "; cin >> n;
for (i=1;i<=n;i++)
{ cout<< " Ingrese valor "<< i<<" : ";
cin>> vector[i]; }
system("cls");
//Escritura
cout<<" SALIDA "<<endl<<endl;
for ( i=1; i<=n;i++)
{ cout<< vector[i]<< endl;}
_getch();
system("cls");
cout<<" Ingrese posicin del valor a eliminar ";cin>>j;
for( i=j+1 ; i<=n;i++)
vector[i-1] = vector[i];
n=n-1;
cout<<" NUEVA SALIDA "<<endl<<endl;
for ( i=1; i<=n;i++)
{ cout<< vector[i]<< endl;
}
_getch(); }

Ejemplo 4.- Realizar una bsqueda binaria sobre un vector ordenado.


PROGRAMA
// prog44.cpp: define el punto de entrada de la aplicacin de consola.
// OBJETIVO: Realizar una bsqueda binaria sobre un vector ordenado */
#include "stdafx.h"
# include<iostream>
# include<conio.h>
using namespace std;
void main( )
{ int vector[50],n,i,x;
int inicio,final,medio,encontrado=0;
system("cls");
//Lectura
cout << " Ingrese n (Para vector ordenado) => "; cin >> n;
for (i=1;i<=n;i++)
{ cout<< " Ingrese valor "<< i<<" : ";
cin>> vector[i];}
int j,temp;
for ( i=1; i<n ;i++)
for (j=i+1;j<=n;j++)
if( vector[i]> vector[j])

75

2015
75

PROGRAMACION ORIENTADA A OBJETOS


{ temp = vector[i];
vector[i] = vector[j];
vector[j] = temp ;}
system("cls");
//Escritura
cout<<" SALIDA VECTOR ORDENADO "<<endl<<endl;
for ( i=1; i<=n;i++)
{ cout<< vector[i]<< endl;}
_getch();
system("cls");
inicio = 1;
final = n;
cout<<"Ingrese numero a buscar ==> ";cin>>x;
while((inicio<=final)&&(!encontrado))
{medio = (inicio+final)/2;
if(x==vector[medio])
encontrado = 1;
else
if(x>vector[medio])
inicio =medio;
else
final = medio;
}
cout<<endl;
cout<<"MENSAJE "<<endl;
if (encontrado)
cout<<"El numero esta en posicin: "<<medio<<endl;
else
cout<<"Valor no hallado ... ";
_getch(); }

Ejemplo 5.- Realizar un ordenamiento usando la definicin de vector


ordenado.x1<=x2<=x3<=x4.<=xn.
PROGRAMA
// prog54.cpp: define el punto de entrada de la aplicacin de consola.
//OBJETIVO: Ordenamiento x1<=x2<=x3.... */
#include "stdafx.h"
#include<iostream>
#include<conio.h>
using namespace std;
void main( )
{ int vector[50],n,i;
int cambio,temp;
system("cls");
//Lectura
cout << " Ingrese n => "; cin >> n;
for (i=1;i<=n;i++)
{ cout<< " Ingrese valor "<< i<<" : ";
cin>> vector[i];}
system("cls");
//Escritura
cout<<" SALIDA "<<endl<<endl;
for ( i=1; i<=n;i++)
{cout<< vector[i]<< endl; }
_getch();
system("cls");
cambio=1;
while (cambio)
{ cambio=0;
for(i=1;i<n;i++)
if (vector[i]>vector[i+1])
{ temp=vector[i];
vector[i]=vector[i+1];
vector[i+1]= temp;
cambio=1;

76

2015

PROGRAMACION ORIENTADA A OBJETOS

FUNDAMENTOS DE LA PROGRAMACION ORIENTADA A OBJETOS

2015
77

cout<<"cambio"<<endl;}
}
cout<<" SALIDA ORDENADA"<<endl<<endl;
for ( i=1; i<=n;i++)
{ cout<< vector[i]<< endl;}
_getch(); }

DE DOS DIMENSIONES( MATRICES)


4.5

Definicin.- Una matriz es un arreglo de 2 dimensiones donde el primer subndice indica fila y el
segundo subndice indica columna. Consideremos la siguiente declaracin:
const float maxf=10;
const float maxc=20;
float matriz[maxf][maxc];
Estamos declarando una matriz de 10 filas por 20 columnas. La primera fila ser: matriz[0] [[0],
matriz[0][1], matriz[0][2],......................, matriz[0][19]

4.6 Operaciones con matrices: Ejemplo 6.- El procedimiento para leer una matriz ser:
PROGRAMA
// prog64.cpp: define el punto de entrada de la aplicacin de consola.
// OBJETIVO: Lectura y Escritura de una matriz
#include "stdafx.h"
#include<iostream>
#include<conio.h>
#include <stdlib.h>
#include <time.h>
using namespace std;
void leer(int x[20][20],int *nf, int *nc);
void mostrar(int x[20][20], int nf, int nc);
void main( )
{ int mat[20][20],nf,nc;
leer(mat,&nf,&nc);
mostrar(mat,nf,nc);
}
void leer(int x[20][20],int *nf, int *nc)
{ int i, j ;
system("cls");
srand(time(NULL));
cout<<"Ingrese # filas de la matriz: "; cin>> *nf;
cout<<"Ingrese # columnas de la matriz: "; cin>> *nc;
//randomize();
for(i = 1; i<=(*nf); i++)
for(j =1;j<=(*nc); j++)
{ //cout<<"x["<<i<<"]["<<j<<"]= ";cin>>x[i][j];
x[i][j]= rand()%20+1;}
}
void mostrar(int x[20][20], int nf, int nc)
{int i, j ;
for(i=1; i<=nf; i++)
{for(j=1; j<=nc; j++)
cout<<x[i][j] << " ";
cout<<endl; }
_getch( ); }

Ejemplo: Halla promedios por fila


// prog84.cpp: define el punto de entrada de la aplicacin de consola.
// OBJETIVO: Lectura y Escritura de una matriz
#include "stdafx.h"
#include<iostream>
#include<conio.h>
#include <stdlib.h>
#include <time.h>

77

PROGRAMACION ORIENTADA A OBJETOS


using namespace std;
void leer(int x[20][20],int *nf, int *nc);
void mostrar(int x[20][20], int nf, int nc);
void main( )
{ int mat[20][20],nf,nc;
int i,j;
float prom[20];
leer(mat,&nf,&nc);
mostrar(mat,nf,nc);
for(i = 1; i<=(nf); i++)
{prom[i]=0;
for(j =1;j<=(nc); j++)
{ prom[i]=prom[i]+float(mat[i][j]);}
prom[i] = prom[i]/nc;}
cout<<" "<< "PROMEDIO POR FILA"<<endl;
for(i=1;i<=nf;i++)
cout<<"Fila "<<i<< "= "<<prom[i]<<endl;
_getch();
}
void leer(int x[20][20],int *nf, int *nc)
{ int i, j ;
system("cls");
srand(time(NULL));
cout<<"Ingrese # filas de la matriz: "; cin>> *nf;
cout<<"Ingrese # columnas de la matriz: "; cin>> *nc;
//randomize();
for(i = 1; i<=(*nf); i++)
for(j =1;j<=(*nc); j++)
{
x[i][j]= rand()%20+1;}
}
void mostrar(int x[20][20], int nf, int nc)
{int i, j ;
for(i=1; i<=nf; i++)
{for(j=1; j<=nc; j++)
cout<<x[i][j] << " ";
cout<<endl; }
_getch( ); }

Ejemplo 7.-Procedimiento para multiplicar una matriz


PROGRAMA
// prog74.cpp: define el punto de entrada de la aplicacin de consola.
//OBJETIVO: MULTIPLICACION DE MATRICES */
#include "stdafx.h"
#include<iostream>
#include<conio.h>
#include<stdlib.h>
#include<time.h>
using namespace std;
void leer(int x[20][20],int *n);
void m_mat(int a[20][20],int n1,int b[20][20],int n2,int c[20][20], int *n3);
void mostrar(int x[20][20],int n);
void main()
{ int n1,n2,n3;
int a[20][20],b[20][20],c[20][20];
leer(a,&n1);
leer(b,&n2);
m_mat(a,n1,b,n2,c,&n3); }
void leer(int x[20][20],int *n)
{ int i,j;
cout<<"Ingrese el orden de la matriz: ";cin>>*n;
srand(time(NULL));
for(i=1;i<=(*n);i++)
for(j=1;j<=(*n);j++)
{ x[i][j]= rand()%20+1;
}
mostrar(x,*n); }
void m_mat(int a[20][20],int n1,int b[20][20],int n2,int c[20][20], int *n3)

78

2015

PROGRAMACION ORIENTADA A OBJETOS

FUNDAMENTOS DE LA PROGRAMACION ORIENTADA A OBJETOS

2015
79

{ int i,j,k;
cout<<"\nEl producto de las matrices es:"<<endl;
if(n1==n2)
{ for(i=1;i<=n1;i++)
for(j=1;j<=n2;j++)
{ c[i][j]=0;
for(k=1;k<=n1;k++)
c[i][j]=c[i][j]+a[i][k]*b[k][j];}
}
mostrar(c,n1);
} prog84.cpp: define el punto de entrada de la aplicacin de consola.
//
void
mostrar(int
x[20][20],
// OBJETIVO:
Halla
la modaint
den)un conjunto de nmeros enteros
{int i, j "stdafx.h"
;
#include
cout<<Salida<<endl;
# include
<iostream>
for(i=1;<conio.h>
i<=n; i++)
# include
j<=n;
j++)
using{for(j=1;
namespace
std;
cout<<x[i][j]
<< " ";
void lectura (int
a[50], int *n);
cout<<endl;
} int n);
void orden(int
a[50],
); }
int _getch(
moda (int
a[50], int n);
void mostrar(int a[50], int n);
PROBLEMAS
escritura(int mo);
1.-void
Dado un vector de nmeros enteros escriba un programa que me permita hallar el nmero que ms veces se repite (MODA).
void main( )
{ int a[50];
int n,mo;
system("cls");
lectura (a, &n);
mostrar(a,n);
orden(a,n);
mostrar(a,n);
mo=moda (a,n);
escritura(mo); }
// Funcin que realiza la lectura
void lectura(int a[50], int *n)
{ int i;
system("cls");
cout << " Ingrese n => "; cin>>(*n);
for ( i=1; i<=(*n);i++)
{ cout<< " Ingrese valor "<< i<<" : "; cin>>a[i]; }}
// Funcion que ordena el vector
void orden(int a[50], int n)
{ int i,j,temp;
for ( i=1; i<n ;i++)
for (j=i+1;j<=n;j++)
if( a[i]> a[j])
{ temp = a[i];
a[i] = a[j];
a[j] = temp ;} }
// Funcion que halla la moda
int moda(int a[50], int n)
{ int b[50],rep[50],nsr,i,j,k;
int nmoda,mayor;
system("cls");
nsr=1;
b[1]=a[1];
rep[1]=1;
for( i=2;i<=n;i++)
{if(a[i-1]==a[i])
rep[nsr]=rep[nsr]+1;
else
{ nsr=nsr+1;
b[nsr]=a[i];
rep[nsr]=1; }
}
mayor=rep[1];
k=1;
for(j=2;j<=nsr;j++)
if (rep[j] > mayor)
{mayor = rep[j]; k=j ;}
nmoda= b[k];
mostrar(b,nsr);
mostrar(rep,nsr);
return(nmoda); }
void escritura(int mo)
{ system("cls");
cout<< " La moda es ="<< mo;
_getch(); }
void mostrar(int a[50], int n)
{int i;
cout<<endl;
cout<<"
Vector"<<endl;
for(i=1; i<=n; i++)
cout<<a[i] <<endl;
_getch( ); }

79

PROGRAMACION ORIENTADA A OBJETOS

EJECUCION

2.- Escriba

Un Programa Que Maneje Un Menu De Operaciones Con Arreglos

El programa debe tener el siguiente men:

MENU ARREGLOS
1.- Lectura
2.- Adicin
3.- Eliminacin
4.- Bsqueda
5.- Ordenar
6.- Escritura
7.- Salir

Ingrese opcin ==> __

PROGRAMA

// prog94.cpp: define el punto de entrada de la aplicacin de consola.


//OBJETIVO: Programa que crea un men para manejo de operaciones con arreglos */
#include "stdafx.h"
#include<iostream>

80

2015

PROGRAMACION ORIENTADA A OBJETOS

FUNDAMENTOS DE LA PROGRAMACION ORIENTADA A OBJETOS


#include<conio.h>
using namespace std;
void lectura(int v[50], int *n);
void adicion(int v[50], int *n);
void eliminacion(int v[50], int *n);
void busqueda(int v[50], int n);
void sorteo(int v[50], int n);
void escritura(int v[50], int n);
void main( )
{ int vector[50];
int n;
char opcion;
system("cls");;
do {
system("cls");
cout<< "MENU ARREGLOS"<<endl;
cout<< "1.- Lectura"<<endl;
cout<< "2.- Adicion"<<endl;
cout<< "3.- Eliminacion"<<endl;
cout<< "4.- Busqueda"<<endl;
cout<< "5.- Ordenar"<<endl;
cout<<"6.- Escritura"<<endl;
cout<< "7.- Salir"<<endl<<endl;
cout<< "Ingrese opcion ==> ";
cin>>opcion;
switch(opcion)
{ case '1' : lectura(vector, &n);break;
case '2' : adicion(vector, &n);break;
case '3' : eliminacion(vector, &n);break;
case '4' : busqueda(vector, n);break;
case '5' : sorteo(vector, n);break;
case '6' : escritura(vector, n);break;
}
}while(opcion != '7');
}
void lectura(int v[50], int *n)
{ int i; system("cls");
cout << " Ingrese n => ";
cin >> *n;
for ( i=1; i<=(*n);i++)
{ cout<< " Ingrese valor "<< i<<" : "; cin>> v[i]; }
}
void adicion(int v[50], int *n)
{ int i,j,x;
system("cls");
cout<<"Ingrese posicin de insercin: "; cin>> j;
cout<<"Ingrese valor a insertar : ";
cin>> x;
for( i=(*n);i>=j;i--)
v[i+1] = v[i];
v[j] = x;
(*n)=(*n) +1; }
void eliminacion(int v[50], int *n)
{ int i,j;
system("cls");
cout<<"Ingrese posicin de valor a eliminar : ";
cin>> j;
for( i=j+1 ; i<=(*n);i++)
v[i-1] = v[i];
(*n)=(*n) - 1; }
void busqueda(int v[50], int n)
{ int i,x, pos;
system("cls");
cout<<"Ingrese valor a buscar : ";
cin>> x;
for( i=1;i<=n;i++)
if ( v[i]== x)
{ pos = i; break ; }

81

2015
81

PROGRAMACION ORIENTADA A OBJETOS

2015

if ( v [i ]== x)
cout<< " Valor hallado en posicin: "<<pos;
else
cout<< " Valor no hallado ";
_getch(); }
void sorteo(int v[50], int n)
{ int i,j,temp;
for ( i=1; i<n ;i++)
for (j=i+1;j<=n;j++)
if( v[i]> v[j])
{ temp = v[i];
v[i] = v[j];
v[j] = temp ; } }
void escritura(int v[50], int n)
{int i;
system("cls");
for ( i=1; i<=n;i++)
{ cout<< v[i]<< endl; }
_getch(); }
3.-

Escriba un programa que lea un conjunto de n nombres y n notas y me muestre en una pantalla los
nombres de los tres primeros alumnos por orden de mrito las tres mejores notas

SOLUCIN
PROGRAMA
// prog37.cpp: define el punto de entrada de la aplicacin de consola.
// OBJETIVO: HALLA LAS TRES MEJORES NOTAS DE UN GRUPO DE ALUMNOS Y LAS MUESTRA CON LOS
NOMBRES
#include "stdafx.h"
#include<iostream>
#include<conio.h>
#include<stdio.h>
#include<string.h>
using namespace std;
void lectura(int vectornot[50], char vectornom[50][40], int *n);
void orden(int vectornot[50],char vectornom[50][40], int n);
void escritura(int vectornot[50],char vectornom[50][40], int n);
void main( )
{ int vectornot[50];
char vectornom[50][40];
int n;
system("cls");
lectura(vectornot,vectornom,&n);
orden(vectornot,vectornom, n);
escritura(vectornot, vectornom,n); }
void lectura(int vectornot[50],char vectornom[50][40], int *n)
{ int i;
system("cls");
cout << " Ingrese n => "; cin >> *n;
for ( i=1; i<=(*n);i++)
{ cout<< " Ingrese nota "<< i<<" : "; cin>> vectornot[i];
cout<< " Ingrese nombre "<< i<<" : "; cin>>vectornom[i]; } }
void orden(int vectornot[50],char vectornom[50][40], int n)
{ int i,j,temp1;
char temp2[40];
for ( i=1; i<n ;i++)
for (j=i+1;j<=n;j++)
if( vectornot[i]< vectornot[j])
{ temp1 = vectornot[i];
vectornot[i] = vectornot[j];
vectornot[j] = temp1 ;
strcpy(temp2,vectornom[i]);
strcpy(vectornom[i],vectornom[j]);
strcpy(vectornom[j],temp2) ; } }
void escritura(int vectornot[50],char vectornom[50][40],int n)

82

PROGRAMACION ORIENTADA A OBJETOS

FUNDAMENTOS DE LA PROGRAMACION ORIENTADA A OBJETOS


{int i;
system("cls");
cout<<"LISTA DE MERITO"<<endl<<endl;
for ( i=1; i<=3;i++)
{ cout<< vectornot[i]<<" "<<vectornom[i]<<endl; } getch();

2015
83

Nota: Este programa trabaja con el concepto de vectores paralelos o sea que la informacin de los
vectores est relacionada por el subndice esto significa que la nota 5 pertenece al alumno que tiene el
nombre 5, por lo tanto la informacin se debe manejar en paralelo para que siga siendo consistente.

EJERCICIOS PROPUESTOS
1)

Escribir un programa que inserte un elemento dentro de un vector ordenado, considere el programa utilizando para su
solucin la estructura while.

2)

Escribir un programa que realice una bsqueda dentro de un vector ordenado, este programa debe detenerse cuando el valor
es hallado, cuando se llegue al final o cuando el valor buscado es superado.

3)

Escribir el cdigo necesario para rotar un vector en sentido antihorario o sea al revs de lo hecho en el problema 9.

4)

Se tiene una matriz de letras, escriba usted un programa para que realice la bsqueda de una cadena ingresada dentro de la
matriz(PUPILETRAS), la bsqueda debe ser de izquierda a derecha y de arriba hacia abajo en la matriz, los mensajes de
salida ser Hallado y No hallado.

5)

Escriba un programa que lea una matriz de n filas por m columnas y me imprima la transpuesta de dicha matriz.

6)

Escriba un programa que me permita hallar la inversa de una matriz.

83

PROGRAMACION ORIENTADA A OBJETOS

CAPITULO V

84

2015

PROGRAMACION ORIENTADA A OBJETOS

FUNDAMENTOS DE LA PROGRAMACION ORIENTADA A OBJETOS

2015
85

CAPITULO V
REGISTROS EN LENGUAJE C
5 Definicin.- Un registro o una estructura en lenguaje C es una coleccin de variables simples que
pueden contener diferentes tipos de datos. Es un tipo de dato definido por el usuario.
5.1 Modelamiento de un registro de acuerdo a las entidades del mundo real: Cuandose crea un
registro se utilizalas entidades(elementos relevantes del proceso) del mundo real para crear la
estructura del registro. Veamos un ejemplo. Supongamos que el proceso matricula se automatiza,
entonces cuales serian las entidades del mundo real que participan en este proceso, algunas de
ellas serian:
Alumno
Profesor
Curso
Aulas
Escuelas
Etc,
Tomemos la entidad alumno y la entidad curso y veamos como estas entidades dan origen a sus
respectivos registros.
ENTIDAD REGISTRO
ALUMNO

REGALU

CODIGO

codalu

entero largo

NOMBRE

nomalu

carcter de longitud 30

DIRECCION

diralu

carcter de longitud 40

ESCUELA

escalu

carcter de longitud 2

TELEFONO

telalu

entero largo

Vemos que cada caracterstica de la entidad alumno se convierte en un campo del registro regalu.
Continuemos con la entidad curso:
ENTIDAD REGISTRO
CURSO

REGCUR

CODIGO

codcur

carcter de longitud 5

NOMBRE

nomcur

carcter de longitud 30

NOTAFIN

notcur

real

85

PROGRAMACION ORIENTADA A OBJETOS

2015

Vemos claramente que los campos son las caractersticas que definen a la entidad y almacenaran
estos datos de una entidad particular.
Si nosotros visualizamos un registro, seria de la siguiente forma:
Estructura de REGALU
codalu

nomalu

diralu

escalu telalu

Estructura de REGCUR
codcur

nomcur

notcur

Un arreglo de estos registros se vera as


codalu

nomalu

diralu

escalu

telalu

7.2 Creacin y manejo de registrosEl proceso de crear una estructura o registro tiene dos etapas.
Crear un modelo de estructura
Crear la variable estructurada
Ejemplo:
struct ciudadano
{ long dni; // dato miembro dni
char nombre[40];// dato miembro nombre
char direccin[50]; // dato miembro direccin}

86

2015
87

PROGRAMACION ORIENTADA A OBJETOS

FUNDAMENTOS DE LA PROGRAMACION ORIENTADA A OBJETOS

Posteriormente las variables persona1 y persona2 se definen como cualquier otra variable, en este caso
del tipo de nombre de la estructura.
ciudadano persona1, persona2; // se declaran dos variables tipo registro.
7.3 Acceso a miembros del registro.- Se realiza utilizando el nombre del registro seguido del nombre
del campo con un punto intermedio.
persona1.dni = 08234101;
persona2.dni = 91012345;
strcpy( persona1.nombre, Luis Rojas);
strcpy( persona2.nombre, Jose Castaeda);
strcpy( persona1.direccion, San Borja, Los alamos 257);
strcpy( persona2.direccion, Surco, leoncio Prado 820);
7.4 Inicializacin de estructuras.- Los campos de un registro se pueden iniciar individualmente o
todos a la vez :
Ejemplo:
struct caja
{ int largo;
int ancho;
int altura;};
Caja c1 = {4, 5,2}
caja c2, c3;
c2.largo = 3;
c3.ancho = 1;
7.5 Asignacin

de

estructuras.-

Podemos

intercambiar

informacin

entre

dos

estructuras

directamente de registro a registro.


Ejemplo: De los casos anteriores es vlido decir:
persona2 = persona1;
c1 = c3;
Los contenidos de los correspondientes campos de persona1 se copiaran en persona2, los de
c3 en c1.
Estructuras anidadas.- Se pueden anidar estructuras dentro de otras estructuras.
Ejemplo:struct fecha
{ int dia;
int mes;
int ao; }
struct empleado
{ fecha dia_ingreso;
char nombre[50]; }
EJEMPLO 1.-Vamos a desarrollar un programa que lea y escriba un arreglo de n registros, cuya
estructura es :

87

PROGRAMACION ORIENTADA A OBJETOS


Dni

cadena de 10 caracteres

Nombre

cadena de 30 caracteres

2015

Direccin cadena de 40 caracteres


PROGRAMA
// prog15.cpp: define el punto de entrada de la aplicacin de consola.
/* PROGRAMA QUE LEE Y ESCRIBE UN ARREGLO DE REGISTROS*/
#include "stdafx.h"
#include<iostream>
#include<conio.h>
#include<stdio.h>
#include<iomanip>
using namespace std;
struct persona
{ char dniper[10]; // DNI DE LA PERSONA
char nomper[30]; // NOMBRE DE LA PERSONA
char dirper[40]; // DIRECCION DE LA PERSONA
};
void main( )
{ int i,n;
persona p[50];//p[i].dniper,p[i].nomper,p[i].dirper
system("cls");
cout<< " Cuantos registros va a procesar ==> ";cin >>n;
for(i=1;i<=n;i++)
{cout<< " REGISTRO "<<i<<" :"<<endl;
cout<< " DNI
= ";cin>>p[i].dniper; fflush( stdin );
cout<< " NOMBRE = ";gets(p[i].nomper);//getsgetstring(stdio.h)
cout<< " DIRECCION= ";gets(p[i].dirper);cout<<endl;
}
cout<<setiosflags(ios::left);
// Salida de resultados
system("cls");
cout<< " LISTA DE REGISTROS "<<endl;
cout<< "==================== "<<endl;
cout<<setw(10)<<"DNI";
cout<<setw(20)<<"NOMBRE";
cout<<setw(30)<<"DIRECCION"<<endl;
cout<< "======================================================
"<<endl;
for(i=1;i<=n;i++)
{cout<<setw(10)<<p[i].dniper;
cout<<setw(20)<< p[i].nomper;
cout<<setw(30)<<p[i].dirper<<endl;}
_getch(); }

EJECUCION

88

PROGRAMACION ORIENTADA A OBJETOS

FUNDAMENTOS DE LA PROGRAMACION ORIENTADA A OBJETOS

2015
89

EJEMPLO 2.-Se tiene un arreglo de registros, cuya estructura es :


codigo

cadena de 8 caracteres Codigo de alumno

nombre

cadena de 30 caracteres Nombre del alumno

examen1

entero

Nota del examen parcial

examen2

entero

Nota del examen final

promediop

real

Promedio de practicas

notafinal

real

Nota final

Primero debe ingresar los datos de cada alumno, lanota final ser calculada,
Considerando examenn1 (peso 1), examen2 (peso2) y promediop(peso2).
El codigo no puede ser repetido, esta condicin debe ser probada en cada ingreso. Finalmente presentar
resultados.
PROGRAMA

// prog29.cpp: define el punto de entrada de la aplicacin de consola.


/*OBJETIVO: Ingresa registros sin codigo repetido */
#include "stdafx.h"
#include<iostream>
#include<conio.h>
#include<stdio.h>
#include<iomanip>
using namespace std;
struct notas
{ char codalu[9]; // Codigo de alumno
char nomalu[30]; // Nombre del alumno
int examen1;
int examen2;
float promediop;
float notafinal;
};
void main( )
{ int i,nr,m,j;
notas n[50];
int swr;
system("cls");
cout<< " Cuantos registros va a leer ==> ";
cin >>nr;
for(i=1;i<=nr;i++)
{ swr=1;
while (swr)
{ swr=0;
system("cls");
cout<<"INGRESO DE REGISTRO DE NOTAS";
89

PROGRAMACION ORIENTADA A OBJETOS

2015

cout<<" Ingrese codigo


==> ";
fflush(stdin);gets(n[i].codalu);
m=i-1;
for (j=1;j<=m;j++)
if (strcmp(n[i].codalu,n[j].codalu)==0)
{swr=1;
break;
}
if(swr==1)
{cout<<"Error codigo repetido..........";
_getch();
}
else
{ cout<<"Por favor ingrese datos...." ;
cout<<" Ingrese nombre
==> ";gets(n[i].nomalu);
cout<<" Ingrese examen parcial ==> ";cin>>n[i].examen1;
cout<<" Ingrese examen final ==> ";cin>>n[i].examen2;
cout<<" Ingrese Promedio Prac. ==> ";cin>>n[i].promediop;
n[i].notafinal=(n[i].examen1+2*n[i].examen2+2*n[i].promediop)/5.0;
}
}
}
cout<<setiosflags(ios::left);
// Salida de resultados
system("cls");
cout<< " LISTADO DE ALUMNOS "<<endl;
cout<< "==================== "<<endl;
cout<<setw(10)<<"CODIGO";
cout<<setw(20)<<"NOMBRE";
cout<<setw(11)<<"EX.PARCIAL";
cout<<setw(11)<<"EX.FINAL ";
cout<<setw(11)<<"PROM.PRAC.";
cout<<setw(11)<<"NOTA FINAL"<<endl;
cout<<
"============================================
============================= "<<endl;
for(i=1;i<=nr;i++)
{cout<<setw(10)<<n[i].codalu;
cout<<setw(20)<< n[i].nomalu;
cout<<setw(11)<< n[i].examen1;
cout<<setw(11)<< n[i].examen2;
cout<<setw(11)<< n[i].promediop;
cout<<setw(11)<< n[i].notafinal<<endl;
} getch();
90

PROGRAMACION ORIENTADA A OBJETOS

FUNDAMENTOS DE LA PROGRAMACION ORIENTADA A OBJETOS

2015
91

}
EJECUCION

PROBLEMAS
1. Desarrollar un programa que maneje todos los productos que una tienda de abarrotes vende, siendo
nuestro objetivo principal el automatizar el proceso de una tienda de abarrotes que nos permitir
realizar las siguientes operaciones de manera eficiente:
Tener un listado actualizado del stock en todo momento
Eliminar los productos que ya no se venden.
Adicionar productos nuevos.
Consultar datos sobre un producto particular.

Realizar balances mensuales de la tienda de abarrotes para manejar la contabilidad eficientemente.


SOLUCION:
PROGRAMA
/* CODIGO: PROGCPP0501
FECHA: 27 DE FEBRERO DE 2012
OBJETIVO:Pograma que crea un men para manejo de registros que procesan stock de una tienda de abarrotes */
#include<iostream.h>
#include<conio.h>
#include<string.h>

91

PROGRAMACION ORIENTADA A OBJETOS


#include<stdio.h>
#include<ctype.h>
struct item
{ int codite; // cdigo del producto
char desite[20]; // descripcin del producto
char ubiite[4]; // ubicacin del producto
float nunite; // nmero de unidades del producto
int tunite;// tipo de unidades kilo(1), litro(2), c/u(3)
float pruite; // precio por cada unidad del producto
};
void lectura(item prod[50], int *n);
void adicion(item prod[50], int *n);
void eliminacion(item prod[50], int *n);
void busqueda(item prod[50], int n);
void orden1(item prod[50], int n);
void escritura(item prod[50], int n);
void main( )
{ item vprod[50];
int num;
char opcion;
do {clrscr();
gotoxy(30,2); cout<< "MENU ARREGLOS";
gotoxy(30,5); cout<< "1.- Lectura";
gotoxy(30,6); cout<< "2.- Adicion";
gotoxy(30,7); cout<< "3.- Eliminacion";
gotoxy(30,8); cout<< "4.- Bsqueda";
gotoxy(30,9); cout<< "5.- Ordenamiento ";
gotoxy(30,10);cout<< "6.- Escritura";
gotoxy(30,11);cout<< "7.- Salir ";
gotoxy(30,16);cout<< "Ingrese Opcion ==> ";cin >> opcion;
switch(opcion)
{ case '1' : lectura(vprod, &num);break;
case '2' : adicion(vprod, &num);break;
case '3' : eliminacion(vprod, &num);break;
case '4' : busqueda(vprod, num);break;
case '5' : orden1(vprod, num);break;
case '6' : escritura(vprod, num);break;}
}while(opcion != '7');
}
void lectura(item prod[50], int *n)
{ int i;
clrscr();

92

2015

PROGRAMACION ORIENTADA A OBJETOS

FUNDAMENTOS DE LA PROGRAMACION ORIENTADA A OBJETOS


cout << " Ingrese n => ";
cin >> (*n);
for ( i=1; i<=(*n);i++)
{cout<< " Ingrese codigo "<< i<<" : "; cin>> prod[i].codite;
cout<< " Ingrese descripcion "<< i<<" : "; gets(prod[i].desite);
cout<< " Ingreseubicacin

"<< i<<" : "; cin>> prod[i].ubiite;

cout<< " Ingrese # de unidades"<< i<<" : "; cin>> prod[i].nunite;


cout<< " Tipo de unidad kilo(1),litro(2),c/u(3) "<< i<<" : ";
cin>> prod[i].tunite;
cout<< " Ingrese precio por unidad del producto"<< i<<" : ";
cin>> prod[i].pruite; }
}
void adicion(item prod[50], int *n)
{ int codx,i;
item reg1;
clrscr();
cout<<"Ingrese codigo : ";
cin>> codx;
for( i=1;i<=(*n);i++)
if(prod[i].codite == codx)
break;
if(prod[i].codite == codx)
{cout<< "error codigo ya existe "; getch();}
else
{ reg1.codite = codx;
cout<< " Ingrese descripcion : "; gets(reg1.desite);
cout<< " Ingrese ubicacin

: "; cin>> reg1.ubiite;

cout<< " Ingrese # de unidades : "; cin>> reg1.nunite;


cout<< " Tipo de unidad kilo(1),litro(2),c/u(3): ";
cin>> reg1.tunite;
cout<< " Ingrese precio por unidad del producto: ";
cin>> reg1.pruite;
prod[(*n)+1] = reg1;
(*n)=(*n) +1; cout<< " Registro adicionado..."; getch();}
}
void eliminacion(item prod[50], int *n)
{ int codx,i,j;char rpta;
clrscr();
cout<<"Ingrese codigo : ";
cin>> codx;
for( i=1;i<=(*n);i++)
if(prod[i].codite == codx)
{ j=i;

93

2015
93

PROGRAMACION ORIENTADA A OBJETOS


break; }
if(prod[i].codite != codx)
{cout<< " Registro no existe... "; getch();}
else
{cout<< " Descripcin : "<<prod[i].desite<<endl;
cout<< " Ubicacin

: "<<prod[i].ubiite<<endl;

cout<< " # de unidades : "; prod[i].nunite<<endl;


cout<< " Tipo de unidad kilo(1),litro(2),c/u(3): "<<prod[i].tunite<<endl;
cout<< " Ingrese precio por unidad del producto: "<<prod[i].pruite<<endl<<endl;
cout<<"Desea eliminar s/n"; cin>>rpta;
if (toupper(rpta)=='S')
{ for( i=j+1 ; i<=(*n);i++)
prod[i-1] = prod[i];
(*n)=(*n) - 1; }
getch();
}}
void busqueda(item prod[50], int n)
{ int codx,i;
clrscr();
cout<<"Ingrese codigo : ";
cin>> codx;
for( i=1;i<=n;i++)
if(prod[i].codite == codx)
break;
if(prod[i].codite != codx)
{cout<< " Registro no existe... "; getch();}
else
{cout<< " Descripcin : "<<prod[i].desite<<endl;
cout<< " Ubicacin

: "<<prod[i].ubiite<<endl;

cout<< " # de unidades : "; prod[i].nunite<<endl;


cout<< " Tipo de unidad kilo(1),litro(2),c/u(3): "<<prod[i].tunite<<endl;
cout<< " Ingrese precio por unidad del producto: "<<prod[i].pruite<<endl;
getch(); }

void orden1(item prod[50], int n)


{ int i, j;item temp;
for ( i=1; i<n ;i++)
for (j=i+1;j<=n;j++)
if( prod[i].codite> prod[j].codite)
{ temp = prod[i];
prod[i] = prod[j];
prod[j] = temp ; }

void escritura(item prod[50], int n)

94

2015

PROGRAMACION ORIENTADA A OBJETOS

FUNDAMENTOS DE LA PROGRAMACION ORIENTADA A OBJETOS


{ int i;
clrscr();
cout<<" CODIGO PRODUCTO UBICACION # UNIDADES TIPO PRECIO/U ";
cout<<endl
cout<<endl;
for ( i=1; i<=n;i++)
{ cout<< prod[i].codite<<" ";
cout<< prod[i].desite<<" ";
cout<< prod[i].ubiite<<" ";
cout<< prod[i].nunite<<" ";
cout<< prod[i].tunite<<" ";
cout<< prod[i].pruite<<endl;
}
getch();
}
EJECUCION

95

2015
95

PROGRAMACION ORIENTADA A OBJETOS

96

2015

PROGRAMACION ORIENTADA A OBJETOS

FUNDAMENTOS DE LA PROGRAMACION ORIENTADA A OBJETOS

97

2015
97

PROGRAMACION ORIENTADA A OBJETOS

2. Dada la siguiente estructura(registro)

codigo

nombre

char 40

nivel

char //solo existe A,B,C

sueldo

real

entero

a) Declarar la estructura.
b) Escribir el men
Leer
Adicionar
Eliminar
Escribir
Salir
c) Escribir las funciones Leer, adicionar, eliminar y escribir.
SOLUCIN
PROGRAMA
/* CODIGO: cppcap05prob02
FECHA: 20 de agosto de 2012
OBJETIVO: Programa que crea un men con registros de empleados */
#include<iostream.h>
#include<conio.h>
#include<string.h>
#include<stdio.h>
#include<iomanip.h>
struct empleado
{ int codemp; // cdigo del empleado
char nomemp[40]; // nombre del empleado
char nivemp; // nivel remunerativo del empleado A,B,C
float sueemp; // sueldo del empleado
};
void leer(empleado p[50], int *n);
void adicionar (empleado p[50], int *n);
void eliminar (empleado p[50], int *n);
void escribir(empleado p[50], int n);
void main( )

98

2015

PROGRAMACION ORIENTADA A OBJETOS

FUNDAMENTOS DE LA PROGRAMACION ORIENTADA A OBJETOS


{ empleado v[50];
int num;
char opcion;
clrscr();
do { clrscr();
gotoxy(26,2); cout<< "MANTENIMIENTO EMPLEADOS";
gotoxy(30,5); cout<< "1.- Leer";
gotoxy(30,6); cout<< "2.- Adicionar";
gotoxy(30,7); cout<< "3.- Eliminar";
gotoxy(30,8); cout<< "4.- Escribir";
gotoxy(30,9); cout<< "5.- Salir ";
gotoxy(26,16); cout<< "Ingrese Opcion ==> ";

cin >> opcion;

switch(opcion)
{ case '1' : leer(v, &num);break;
case '2' : adicionar(v, &num);break;
case '3' : eliminar(v, &num);break;
case '4' : escribir(v, num);break; }
}while(opcion != '5');
}
void leer(empleado p[50], int *n)
{ int i;
clrscr();
cout << " Ingrese n => ";
cin >> (*n);
clrscr();
gotoxy(30,2); cout<< "LECTURA";
gotoxy(30,3); cout<< "=======";
cout<<endl<<endl;
for ( i=1; i<=(*n);i++)
{ cout<< " Ingrese Codigo del Empleado "<< i<<" : "; cin>> p[i].codemp;
cout<< " Ingrese Nombre y Apellido "<< i<<" : "; gets(p[i].nomemp);
cout<< " Ingrese Nivel Remunerativo "<< i<<" : "; cin>> p[i].nivemp;
cout<< " Ingrese Sueldo del Empleado "<< i<<" : "; cin>> p[i].sueemp;
}
}
void adicionar (empleado p[50], int *n)
{ int codx,i;
empleado aux;
clrscr();
gotoxy(30,2); cout<< "ADICION";
gotoxy(30,3); cout<< "=======";
cout<<endl<<endl;
cout<<"Ingrese codigo : "; cin>> codx;

99

2015
99

PROGRAMACION ORIENTADA A OBJETOS


for( i=1;i<=(*n);i++)
if(p[i].codemp == codx)
break;
if(i==((*n)+1)) i--;
if(p[i].codemp == codx)
{cout<< "Error Codigo ya existe "; getch();}
else
{ aux.codemp = codx;
cout<< " Ingrese nombre

: "; gets(aux.nomemp);

cout<< " Ingrese nivel remunerativo: "; cin>> aux.nivemp;


cout<< " Ingrese sueldo

: "; cin>> aux.sueemp;

(*n)=(*n) +1; cout<< " Registro adicionado...";


p[*n] = aux;
getch();
}
}
void eliminar(empleado p[50], int *n)
{ int i,j, codx;
char rpta;
clrscr();
gotoxy(30,2); cout<< "ELIMINACION";
gotoxy(30,3); cout<< "===========";
cout<<endl<<endl;
cout<<"Ingrese Codigo a Buscar : ";
cin>> codx;
for( i=1;i<=(*n);i++)
if ( p[i].codemp == codx)
{ j = i;
break ;
}
if ( p[i].codemp == codx)
{cout<< " Registro Hallado "<<endl;
cout<< p[j].nomemp<<" ";
cout<< p[j].nivemp<<" ";
cout<< p[j].sueemp<<endl;
cout<<"Desea eliminar s/n => "; cin>> rpta;
if((rpta == 's') || (rpta == 'S'))
{ if ( j!=(*n))
for( i=j+1 ; i<=(*n);i++)
p[i-1] = p[i];
(*n)=(*n) - 1; }// Se elimina registro
}
else

100

2015

PROGRAMACION ORIENTADA A OBJETOS

FUNDAMENTOS DE LA PROGRAMACION ORIENTADA A OBJETOS


{cout<< " Registro no Hallado ";
getch();
}
}
void escribir(empleado p[50], int n)
{int i;
clrscr();
cout<<setiosflags(ios::left);
cout<<setw(10)<<"|CODIGO |";
cout<<setw(20)<<"NOMBRE

|";

cout<<setw(6)<<"NIVEL|";
cout<<setw(8)<<"SUELDO |";
cout<<endl;
cout<<"==========================================="<<endl;
for ( i=1; i<=n;i++)
{ cout<<setw(10)<<p[i].codemp;
cout<<setw(20)<<p[i].nomemp;
cout<<setw(5)<<p[i].nivemp;
cout<<setw(8)<<p[i].sueemp<<endl;
}
getch(); }
EJECUCION

101

2015
101

PROGRAMACION ORIENTADA A OBJETOS

102

2015

PROGRAMACION ORIENTADA A OBJETOS

FUNDAMENTOS DE LA PROGRAMACION ORIENTADA A OBJETOS

3.

Dada la siguiente estructura(registro)

item

entero

nombre

char 40

cantidad entero

precio

real

a)

Declarar la estructura.

b)

Escribir el men

Leer

Adicionar

Eliminar

Escribir

Salir

c)

Escribir las funciones Leer, adicionar, eliminar y escribir.

SOLUCION:
PROGRAMA
/* CODIGO: cppcap07prob03
PROGRAMA CREADO POR RICARDO CASTAEDA DE LA ROSA
FECHA: 23 de agosto de 2007
OBJETIVO:Programa que crea un men con registros de almacn */
#include<iostream.h>

103

2015
103

PROGRAMACION ORIENTADA A OBJETOS


#include<conio.h>
#include<string.h>
#include<stdio.h>
#include<iomanip.h>
struct almacn
{int itealm;// codigo del item
char nomalm[40];//nombre o descripcin del item
int canalm;

//cantidad del item

float prealm; //precio del item


};
void leer(almacen s[50] , int *n );
void adicionar(almacen s[50] , int *n );
void eliminar(almacen s[50] , int *n );
void escribir(almacen s[50] , int n );

//ya no se modifica n

void main()
{ almacen stock[50];
int n;
char opc;
do{

clrscr();
gotoxy(30,5);cout<<"MENU DE ALMACEN ";

gotoxy(30,8);cout<<"1.-Leer";
gotoxy(30,9);cout<<"2.-Adicionar";
gotoxy(30,10);cout<<"3.-Eliminar";
gotoxy(30,11);cout<<"4.-Mostrar";
gotoxy(30,12);cout<<"5.-Salir";
gotoxy(35,16);cout<<"Opcion==>";
cin>>opc;
switch(opc)
{case '1': leer( stock , &n ); break;
case '2': adicionar ( stock , &n ); break;
case '3': eliminar ( stock , &n ); break;
case '4': escribir ( stock , n ); break;
}
}while(opc!='5');
}
void leer(almacen s[50] , int *n )
{ int n1;
clrscr();
gotoxy(30,5);cout<<"INGRESO DE DATOS AL ALMACEN";
gotoxy(30,8);cout<<"Ingrese el valor de n:";
cin>>n1;
*n=n1;
for(int i=1;i<=n1;i++)
{clrscr();
gotoxy(30,5);cout<<"INGRESO DE DATOS AL ALMACEN";
gotoxy(30,6);cout<<"===========================";
gotoxy(30,9);cout<<"Item: ";cin>>s[i].itealm;
gotoxy(30,10);cout<<"Nombre: ";gets(s[i].nomalm);

104

2015

PROGRAMACION ORIENTADA A OBJETOS

FUNDAMENTOS DE LA PROGRAMACION ORIENTADA A OBJETOS


gotoxy(30,11);cout<<"Cantidad: ";cin>>s[i].canalm;
gotoxy(30,12);cout<<"Precio: ";cin>>s[i].prealm;
}
}
void escribir(almacen s[50] , int n )
{ clrscr();
int i;
cout<<setiosflags(ios::fixed);
cout<<setiosflags(ios::showpoint);
cout<<setprecision(2);
cout<<setiosflags(ios::left);
gotoxy(30,5);cout<<"DATOS DE ALMACEN";
gotoxy(30,6);cout<<"================";
gotoxy(30,9);cout<<setw(6)<<"|Item";cout<<setw(20)<<"|Nombre

";

cout<<setw(9)<<"|Cantidad";cout<<setw(8)<<"|Precio|";
gotoxy(30,10);cout<<"===========================================";
for(i=1;i<=n;i++)
{gotoxy(30,10+i);
cout<<setiosflags(ios::left);
cout<<"|";cout<<setw(5)<<s[i].itealm;
cout<<"|";cout<<setw(19)<<s[i].nomalm;
cout<<setiosflags(ios::right);
cout<<"|";cout<<setw(8)<<s[i].canalm;
cout<<"|";cout<<setw(7) <<s[i].prealm;}
getch();}
void eliminar(almacen s[50] , int *n )
{ int j,i;
clrscr();
cout<<"Posicion a eliminar: ";
cin>>j;
for(i=j+1;i<=*n;i++)
s[i-1]=s[i];
*n=*n-1;
}
void adicionar(almacen s[50] , int *n )
{int i,j;almacen regx;
clrscr();
cout<<"Ingrese datos de registro a adicionar: "<<endl;
cout<<"Item: ";cin>>regx.itealm;
cout<<"Nombre: ";gets(regx.nomalm);
cout<<"Cantidad: ";cin>>regx.canalm;
cout<<"Precio: ";cin>>regx.prealm;
cout<<"Ingrese posicin de insercin " ;cin>>j;
for(i=*n;i>=j;i--)
s[i+1]=s[i];
s[j]=regx;
*n=*n+1;}
EJECUCION

105

2015
105

PROGRAMACION ORIENTADA A OBJETOS

106

2015

PROGRAMACION ORIENTADA A OBJETOS

FUNDAMENTOS DE LA PROGRAMACION ORIENTADA A OBJETOS

EJERCICIOS PROPUESTOS

107

2015
107

PROGRAMACION ORIENTADA A OBJETOS

2015

1. Se desea realizar un mantenimiento de registros de los alumnos de COMPUTACION I, para esto


vamos a utilizar la siguiente estructura:
struct alumno{
int cdigo;
char nombre [40];
int exampar; //Examen Parcial
int examfin; //Examen Final
float pp; // Promedio de Practicas
};
En el mantenimiento considere:
a) Adicionar Registros
b) Eliminar Registros.
c) Modificar Registros.
2. Se desea escribir un programa que procese el examen sustitutorio de n alumnos, considerar el
siguiente registro.
struct notas
{ char codalu [10]; // Cdigo del alumno
char codcur [7]; // Cdigo del curso
float pp ;

// Promedio de practicas

int ep ;

// Examen parcial

int ef ;

// Examen final

int es ;

// Examen sustitutorio

float pf ;

// Promedio final

}
para hallar el promedio final (pf) debe considerarse lo siguiente:
a. Si no se ha rendido un examen (ep,ef) la nota que figura es 99(OJO).
b. El promedio final se halla

pf

pp ep 2 * ef
4

c. El examen sustitutorio solo se considera si pp 6.0


d. Al considerar el examen sustitutorio este reemplazara al examen no rendido o al mas
desfavorable de haber rendido los dos.
e. Ordenar los promedios finales por merito y a quien corresponde.
3. Se desea escribir un programa que procese la planilla de n trabajadores, considerar el registro
dado.
struct empleado
{ int codemp;

108

// Cdigo del empleado

PROGRAMACION ORIENTADA A OBJETOS

FUNDAMENTOS DE LA PROGRAMACION ORIENTADA A OBJETOS

char nomemp [40]; // Nombre del empleado


float sb ;

// Sueldo Bruto

int diasf;

// Das faltos

int horase ;

// Horas extras

float descuentos ;
float sn;

// Descuentos
// Sueldo Neto }

Para hallar los descuentos y el sueldo neto de cada trabajador debe


considerar lo siguiente:

13% de descuento del sueldo bruto por seguro social.

Descuento por cada da falto.

50% de bonificacin por cada hora extra.

109

2015
109

PROGRAMACION ORIENTADA A OBJETOS

CAPITULO VI

110

2015

PROGRAMACION ORIENTADA A OBJETOS

FUNDAMENTOS DE LA PROGRAMACION ORIENTADA A OBJETOS

2015
111

CAPITULO VI
PROGRAMACION ORIENTADA A OBJETOS
6

Introduccion.-La programacin orientada a objetos existe desde la creacin de los primeros lenguajes
de programacin. Los conceptos que se manejan de abstraccin de datos, herencia y Polimorfismo se
manejaban en estos lenguajes, pero con el desarrollo del lenguaje C y la programacin visual se
utiliza este tipo de programacin con mayor profusin.
6.1

Programacin orientada a objetos.- La programacin orientada a objetos es la ultima


modificacin, donde ya se incorporan algunos aspectos tomando como modelo la vida real.
Tipos de Datos Abstractos
Algunos autores describen la programacin orientada a objetos como programacin de tipos de
datos abstractos y sus relaciones. Vamos a tratar de estudiar este aspecto de modelo de la vida
real con mas detalles en el concepto de Tipos de Datos Abstractos Propiedades de los Tipos de
Datos Abstractos
El ejemplo de la seccin anterior muestra que por medio de la abstraccin t creas una entidad
bien definida que puede ser adecuadamente manejada. Estas entidades definen la estructura de
datos de un conjunto de elementos. Por ejemplo para cada alumno del Instituto un nombre, fecha
de nacimiento y DNI.
La estructura de los datos puede ser accesada solamente por medio de operaciones definidas.
Este conjunto de operaciones es llamada interface y es exportada por la entidad. Una entidad con
las propiedades recin descritas se conoce como un tipo de datos abstracto (TDA).

TIPO DE DATOS ABSTRACTO

ESTRUCTURA DE DATOS

OPERACIONES CON EL TDA

Figura 6.1 Un tipo de datos abstracto (TDA)


La Figura 6.1 muestra un TDA que consiste en una estructura de datos abstracta y operaciones.
Solamente las operaciones son visibles desde afuera y definen la interface.

111

PROGRAMACION ORIENTADA A OBJETOS

2015

Definicin (Tipo de Datos Abstracto) Un tipo de datos abstracto (TDA) se caracteriza por que
tiene dos elementos diferenciados:

La interfaz de utilizacin.

La representacin

La representacin debe permanecer oculta y solo utilizaremos sus operaciones para trabajar con
los elementos.
Para construir un tipo abstracto debemos:
1. Exponer una definicin de tipo.
2.Definir las operaciones (funciones) que permitan operar con instancias de ese tipo.
3.Ocultar la representacin de los elementos del tipo de modo que solo se pueda actuar sobre
ellos con las operaciones proporcionadas..
4. Poder hacer instancias mltiples del tipo..
Tipos bsicos de operaciones en un TDA.
Las operaciones bsicas que deberamos tener pueden ser:

Constructores: Crean una nueva instancia del tipo.

Transformacin: Cambian el valor de uno o ms elementos de una instancia del tipo.

Observacin:Accesamos sin modificarlos.

Iteradores: Procesa componentes en forma secuencial.

Tipos Genricos de Datos Abstractos


Los TDAs se usan para definir un nuevo tipo a partir del cual se pueden crear instancias. Como se
mostr en el ejemplo de la lista, algunas veces estas instancias deberan operar del mismo modo
sobre otros tipos de datos. Por ejemplo, uno puede pensar en listas de manzanas, carros o an
listas. La definicin semntica de una lista siempre es la misma. Solamente el tipo de los
elementos de datos cambia de acuerdo al tipo sobre el cul deba operar la lista..
Esta informacin adicional podra ser especificada por un parmetro genrico que es especificado
al momento de la creacin de la instancia. As, una instancia de un TDA genrico es en la prctica
una instancia de una variante particular del TDA. Una lista de manzanas puede ser por lo tanto
declarada como sigue :

112

PROGRAMACION ORIENTADA A OBJETOS

FUNDAMENTOS DE LA PROGRAMACION ORIENTADA A OBJETOS

2015
113

List<Apple> listOfApples;
Los corchetes angulares encierran ahora el tipo de datos para el cul una variante del TDA
genrico List sera creada. listOfApples ofrece la misma interface que cualquiera otra lista, pero
opera en instancias del tipo Apple.
Conceptos de Orientacin a Objetos
Las secciones anteriores introducen ya algunos conceptos "de orientacin a objetos". Sin
embargo, stos fueron aplicados de una manera terica, ahora pasemos ya a visualizar las
caractersticas del C++ y les damos nombres tal y como se usan en los lenguajes de
programacin orientada a objetos existentes.
Las caractersticas de C++ como lenguaje orientado a objetos son:
o

Abstraccin

Variables de instancia

Mtodos de instancia

Variables de clase

Mtodos de clase

Encapsulacin

De variables: privada, pblica y protegida.

De mtodos: privada, pblica y protegida

Herencia

Sencilla y mltiple

Unidades genricas

Polimorfismo

Teniendo en cuenta los conceptos de herencia y Polimorfismo tenemos todo el panorama de la


programacin orientada a objetos. La comunicacin entre objetos es por medios de mensajes que
viene a ser la forma de invocar a un objeto. Hemos dicho que un objeto tiene caractersticas
llamadas atributos y procedimientos llamados mtodos. Los mensajes tienen un mtodo
(procedimiento) que se ejecutara cuando es invocado.

Mensaje (Se Invoca Mtodo)

Objeto Emisor

Resultado De La Ejecucin Del Mtodo

113

Objeto Receptor

PROGRAMACION ORIENTADA A OBJETOS

2015

Figura 6.2

6.2

Clases.- Un programa utiliza un grupo de objetos y estos objetos se crean utilizando un tipo de
dato denominado clase. Podemos decir que la clase es un registro (struct) evolucionado que ha
encapsulado los datos y las funciones incorporndoles adems niveles de visibilidad. En la clase
los datos son las propiedades de la entidad que este representa y las funciones son las tareas
representativas de la entidad. De esta manera las clases representan las entidades del mundo real
de una manera ms precisas que los registros. Adems las clases tienen dos caractersticas que la
hacen elementos muy eficientes en la programacin, estas son:

Herencia

Polimorfismo

6.3

Objeto.- Son las instancias de una clase, pues esta es la plantilla que nos permite crear los
objetos de acuerdo a la declaracin de clase.

Ejemplo: Dada la siguiente declaracin de clase:


class rectangulo
{ private:
{int largo;
int ancho;
public:
void asignar( int l, int a)
{ largo = l;
ancho = a;
}
int calcular_rea( )
{ int A;
A = largo * ancho;
return ( A);
}};
Representacin Grfica
Clase Rectngulo

Largo
Ancho

Datos

Asignar()
Mtodos

Calcular _area()

Figura 6.3

Posteriormente nosotros podemos declarar un objeto de la clase rectngulo de la siguiente manera:


rectangulo R1;

114

PROGRAMACION ORIENTADA A OBJETOS

FUNDAMENTOS DE LA PROGRAMACION ORIENTADA A OBJETOS

2015
115

Esto significa que R1 tendr 4 componentes


R1.largo

dato miembro de tipo entero.

R1.ancho

dato miembro de tipo entero

R1.asignar(int l, int a)

funcin miembro que nos permite asignar valores a los dos datos miembro.

R1.calcular_area( )

funcin miembro que calcula el rea y devuelve el valor.

PROGRAMA

// prog39.cpp: define el punto de entrada de la aplicacin de consola.


#include "stdafx.h"
#include<iostream>
#include<conio.h>
using namespace std;
class rectangulo
{//datos privados
private:
int largo;
int ancho;
//metodos de acceso publicos
public:
void set_largo(int l)
{ largo = l;}
void set_ancho(int a)
{ ancho= a;}
int get_largo()
{return largo;}
int get_ancho()
{return ancho;}
int calcular_area( )
{ return (largo*ancho); }
};
void main()
{ int L,A;
rectangulo r1;
system("cls");
cout<<"Ingrese largo: ";cin>>L;
cout<<"Ingrese ancho: ";cin>>A;
r1.set_largo(L);
r1.set_ancho(A);
cout<<"Largo = "<<r1.get_largo()<<endl;
cout<<"Ancho = "<<r1.get_ancho()<<endl;
cout<<"El rea es : "<<r1.calcular_area()<<endl;
_getch(); }
EJECUCION

115

PROGRAMACION ORIENTADA A OBJETOS

6.4

2015

Herencia: Caracterstica mediante la cual podemos reutilizar una declaracin de una clase y
crear otra clase. Por ejemplo: Creamos la clase estudiante hereda a la clase
estudiante_universitario hereda de la clase estudiante y adiciona. La clase
estudiante_universitario_uni hereda de la anterior y tambin adiciona.Ver ejemplo 4.

6.5

Polimorfismo: Caracterstica que nos permite crear funciones que utilizando un mismo nombre
respondern de forma diferente de acuerdo a la clase a la cual pertenecen.

6.6

Secciones .- Los miembros de una clase que son variables y mtodos (datos y funciones)
pueden ser pblicos (public), protegidos (protected) y privados(private). Las secciones privadas y
protegidas tienen como objetivo el ocultamiento de datos. A los miembros de la seccin privada se
puede acceder solo por las funciones miembro de esa clase, o por otras funciones declaradas
amigas (friend) de la clase. A los miembros pblicos de una clase se pueden acceder desde fuera
de la clase, pero no se puede acceder desde una clase derivada de la clase base. Los miembros
protegidos son accesibles dentro de la clase en que estn definidas y en cualquier clase derivada de
la clase original. De acuerdo alo dicho la declaracin de una clase en forma general sera:

class nombre_clase
{
private:
datos miembroprivados
funciones miembro privadas
..

protected:
datos miembro protegidos
funciones miembro protegidos
..

public:
datos miembro publicos
funciones miembro publicos

EJEMPLO 2:

El primer cout imprimir 20 y el segundo cout imprimir 16.

116

PROGRAMACION ORIENTADA A OBJETOS

FUNDAMENTOS DE LA PROGRAMACION ORIENTADA A OBJETOS

2015
117

// prog49.cpp: define el punto de entrada de la aplicacin de //consola.


#include "stdafx.h"
#include "iostream"
#include "conio.h"
using namespace std;
class rectangulo
{ private:
int largo;
int ancho;
public:
void set_largo( int l)
{ largo = l;}
void set_ancho(int a)
{ancho = a; }
int get_largo()
{return(largo);}
int get_ancho()
{return(ancho);}
int area( )
{ int A;
A = largo * ancho;
return ( A); }
};
class cuadrado
{ private:
int lado;
public:
void set_lado( int l )
{ lado = l; }
int get_lado()
{return(lado);}
int area( )
{ int A;
A = lado * lado;
return ( A);}
};
void main( )
{ rectangulo R1;
cuadrado C1;
R1.set_largo(5);
R1.set_ancho( 4);
cout<<"Largo = "<<R1.get_largo()<<endl;
cout<<"Ancho = "<<R1.get_ancho()<<endl;
cout <<"Area= "<<R1.area( )<< endl;
C1.set_lado(6);
117

PROGRAMACION ORIENTADA A OBJETOS

2015

cout<<"Lado = "<<C1.get_lado()<<endl;
cout <<"Area = "<<C1.area( )<< endl;
_getch();
}

EJECUCION

EJEMPLO 3:Escriba un ejemplo de una clase con datos pblicos. Indicando el acceso directo a los
datos miembro.
PROGRAMA
/* CODIGO: cppcap06ejem03
FECHA: 27 de agosto de 2012
OBJETIVO: Desarrollar un ejemplo bsico con datos pblicos*/
#include<iostream.h>
#include<conio.h>
class grupo
{public:
int v1;
int v2;
int v3;
public:
float promedio( )
{ return(v1+v2+v3)/3.0;}
int menor( )
{ int m,men;
if (v1<v2)
m=v1;
else
m=v2;
if(m<v3)
men=m;
else
men = v3;
return(men);}
int mayor( )
{ int m,may;
if (v1>v2)

118

PROGRAMACION ORIENTADA A OBJETOS

FUNDAMENTOS DE LA PROGRAMACION ORIENTADA A OBJETOS

2015
119

m=v1;
else
m=v2;
if(m>v3)
may=m;
else
may = v3;
return(may);}
};
void main( )
{ grupo g1;
clrscr();
cout<<"Ingrese valor 1==> ";cin>>g1.v1;
cout<<"Ingrese valor 2==> ";cin>>g1.v2;
cout<<"Ingrese valor 3==> ";cin>>g1.v3;
cout <<" El promedio es = "<<g1.promedio()<<endl;
cout <<" El menor es = "<<g1.menor()<<endl;
cout <<" El mayor es = "<<g1.mayor();
getch();
}
EJECUCION

EJEMPLO 4:Escriba un ejemplo simple de utlizacion de herencia, defina la clase alumno y derive de
esta clase, una nueva clase llamada nota, que almacenar la nota final de un alumno en un curso
determinado.
PROGRAMA

// prog59.cpp: define el punto de entrada de la aplicacin de consola.


#include "stdafx.h"
#include "iostream"
#include "conio.h"
#include<stdio.h>
#include<string.h>
using namespace std;
class alumno
{ protected:
char codigo[9];
char nombre[40];
119

PROGRAMACION ORIENTADA A OBJETOS

2015

public:
void asignar(char c[9],char n[40])
{ strcpy(codigo,c);
strcpy(nombre,n);}
void mostrar()
{ cout<<"Codigo= "<<codigo<<endl;
cout<<"Nombre= "<<nombre<<endl;
getch(); }
};
class nota : public alumno
{ private:
char curso [7];
float pf;
public:
void asignar(char c[9],char n[40], char cur[7],float prom)
{ strcpy(codigo,c);
strcpy(nombre,n);
strcpy(curso,cur);
pf= prom; }
void mostrar()
{ cout<<"Codigo= "<<codigo<<endl;
cout<<"Nombre= "<<nombre<<endl;
cout<<"Curso= "<<curso<<endl;
cout<<"Promedio Final= "<<nombre<<endl;
_getch(); }
};
void main( )
{ alumno a1;
nota n1;
char code[9],name[40],curse[7];
float promedio_fin;
system("cls");
cout<<"Procesando datos de clase base "<<endl;
cout<<"Ingrese codigo del alumno: ";cin>>code;fflush(stdin);
cout<<"Ingrese nombre del alumno: ";gets(name);
a1.asignar(code,name);
a1.mostrar();
cout<<endl<<"Procesando datos de clase derivada (Herencia)"<<endl;
cout<<"Ingrese codigo del alumno: ";cin>>code;fflush(stdin);
cout<<"Ingrese nombre del alumno: ";gets(name);
cout<<"Ingrese codigo del curso : ";cin>>curse;
cout<<"Ingrese promedio final : ";cin>>promedio_fin;
n1.asignar(code,name,curse,promedio_fin);
n1.mostrar();
}
120

PROGRAMACION ORIENTADA A OBJETOS

FUNDAMENTOS DE LA PROGRAMACION ORIENTADA A OBJETOS

2015
121

EJECUCION

Ventajas de la programacin orientada a objetos.- Son las siguientes:

Facilidad de Mantenimiento: Los programas son ms fciles de leer y de entender.

Facilidad de modificacin: Se pueden modificar los objetos al modificar rpidamente la herencia.

Reusabilidad: Se pueden utilizar varias veces.

Fiabilidad: Se utilizan modelos ya comprobados.

PROBLEMAS
1.-

Desarrollar 3 programas de aplicacin para ver la evolucin desde la primera etapa deregistro (struct)
hasta el objeto. Los programas son:
A) Programa con registros lee 2 notas y calcula el promedio con una funcin externa al registro.
B) Programa con registros lee 2 notas y calcula el promedio con una componente funcin.
C) Programa con objetos lee 2 notas y calcula el promedio con una funcin miembro.

PROGRAMA(A)
/* CODIGO: cppcap06prob01a
FECHA: 28 de agosto de 2012
OBJETIVO: Primer programa ejemplo de una estructura clsica*/
#include<iostream.h>
#include<conio.h>
struct notas
{ float nota1;
float nota2; };
float calcula_prom (float p1, float p2);
void main ( )
{notas n;

121

PROGRAMACION ORIENTADA A OBJETOS


clrscr( );
cout << "ingrese 1ra. Nota => "; cin >> n.nota1;
cout << "ingrese 2da. Nota => "; cin >> n.nota2;
cout << " El promedio es = " << calcula_prom ( n.nota1, n.nota2);
getch( ); }
float calcula_prom (float p1, float p2)
{ float prom ;
prom = (p1 + p2)/2.0;
return(prom); }
EJECUCION

PROGRAMA(B)
/* CODIGO: cppcap06prob01b
FECHA: 28 DE MARZO DE 2012
OBJETIVO: Segundo programa ejemplo tenemos la estructura pero ya tenemos
una componente funcin miembro de la estructura tiende a una clase*/
#include <iostream.h>
#include<conio.h>
struct notas
{ float nota1;
float nota2;
float calcula_prom (float p1, float p2)
{return( (p1 + p2) / 2.0);}
};
void main ( )
{ notas n;
clrscr( );
cout << "ingrese 1ra. Nota => ";
cin >> n.nota1;
cout << "ingrese 2da. Nota => ";
cin >> n.nota2;
cout << " El promedio es = " << n.calcula_prom ( n.nota1, n.nota2);
getch( );
}
EJECUCION

122

2015

PROGRAMACION ORIENTADA A OBJETOS

FUNDAMENTOS DE LA PROGRAMACION ORIENTADA A OBJETOS

2015
123

PROGRAMA(C)

/* CODIGO: cppcap06prob01c
FECHA: 28 de agosto de 2012
OBJETIVO: Tercer programa realiza lo mismo que los anteriores pero usando clases y objetos*/
# include <iostream.h>
# include<conio.h>
class notas
{ private:
float nota1;
float nota2;
public:
void asignar (float n1, float n2)
{ nota1 = n1;
nota2 = n2;}
float calcula_prom ( )
{ return( (nota1 + nota2) / 2.0); }
};
void main ( )
{ float a1, a2;
notas n;
clrscr( );
cout << "ingrese 1ra. Nota => "; cin >> a1;
cout << "ingrese 2da. Nota => "; cin >> a2;
n.asignar( a1, a2);
cout << " El promedio es = " << n.calcula_prom ( );
getch( ); }
EJECUCION

2.- Escriba

un programa que nos permita leer un conjunto de notas (dos notas por alumno ) de n alumnos y muestre el promedio

de cada alumno y el promedio total.


// pro19.cpp: define el punto de entrada de la aplicacin de consola.
#include "stdafx.h"
/*OBJETIVO: Programa que trabaja con un vector de objetos*/
#include <iostream>
#include<conio.h>
using namespace std;

123

PROGRAMACION ORIENTADA A OBJETOS

2015

class notas
{ private:
float nota1;
float nota2;
public:
void set_nota1 (float n1)
{ nota1 = n1;}
void set_nota2 (float n2)
{ nota2 = n2;}
float get_nota1 ( )
{ return nota1 ;}
float get_nota2 ( )
{ return nota2;}
float calcula_prom ( )
{ return( (nota1 + nota2) / 2.0);}
};
void main ( )
{ int i,m;
float prac1, prac2,promedio_total;
notas alu[50];
system("cls");
cout<<"Ingrese nmero de alumnos--> ";cin>>m;
promedio_total=0;
for(i=1; i<=m; i++)
{cout<<" Alumno "<<i<<": "<<endl;
cout << "ingrese 1ra. Nota => "; cin >> prac1;
cout << "ingrese 2da. Nota => "; cin >> prac2;
alu[i].set_nota1( prac1);
alu[i].set_nota2( prac2);
promedio_total = promedio_total + alu[i].calcula_prom();
}
// salida de resultados
system("cls");
cout<< "
PROMEDIOS DE N ALUMNOS Y PROMEDIO GENERAL"<<endl;
cout<< " ==============================================="<<endl;
for(i=1; i<=m; i++)
{ cout<<" Promedio ["<<i<<"]: "<<alu[i].calcula_prom()<<endl;}
promedio_total= promedio_total/m;
cout<<" PROMEDIO GENERAL: "<<promedio_total<<endl;
_getch( ); }
EJECUCION

124

PROGRAMACION ORIENTADA A OBJETOS

FUNDAMENTOS DE LA PROGRAMACION ORIENTADA A OBJETOS

3.- Escriba

2015
125

un programa que defina la clase cuadrado y cubo adems debe calcular el rea del cuadrado, el

rea del cubo y el volumen.


SOLUCIN
PROGRAMA
/* CODIGO: cppcap06prob03
FECHA: 23 de agosto de 2012
OBJETIVO: Programa que define la clase cuadrado y cubo, calcula rea del cuadrado, el rea del cubo y el volumen. */
#include <iostream.h>
#include<conio.h>
class cuadrado
{ private:
int lado;
public:
void asignar( int l )
{ lado = l; }
int area( )
{ int A;
A = lado * lado;
return ( A); }
};
class cubo
{ private:
int lado;
public:
void asignar( int l )
{ lado = l; }
int area( )
{ int A;
A = 6*lado * lado;
return ( A); }
int volumen( )
{ int V;
V = lado*lado * lado;
return (V); }

125

PROGRAMACION ORIENTADA A OBJETOS

2015

};
void main( )
{ cuadrado C1;
cubo

C2;

int LADO;
clrscr();
cout<< "Ingrese Lado del cuadrado: ";
cin>> LADO;
C1.asignar(LADO);
cout<< "Ingrese Lado del Cubo: ";
cin>> LADO;
C2.asignar(LADO);
cout<<"Resultados del Cuadrado: "<<endl;
cout<<" Area = "<<C1.area()<<endl;
cout<<"Resultados del Cubo: "<<endl;
cout<<" Area = "<<C2.area()<<endl;
cout<<" Volumen = "<<C2.volumen()<<endl;
getch(); }
EJECUCION

EJERCICIOS PROPUESTOS
1) Escribir un programa que me permita crear la clase persona, considerando, dni,nombre, fecha de
nacimiento , distrito donde vive y telfono. El programa debe crear la clase y declarando objetos de
esta clase ingreasr datos y despus mostrarlos.
2) Escribir un programa que considere la clase anterior y declare un vector de objetos de esa clase,
adems debe poder consultar este vector de objetos y listar los dni y nombres que viven en un
determinado distrito.
3) Se tiene la clase empleado con cdigo, sueldo, nombre y categora, escribir las declaraciones de
datos miembros y crear las funciones miembro, de lectura, mostrar_datos y asignacin de sueldos,
esta ultima debe realizarse de la siguiente manera:

Categora A sueldo de 4500 mensual

Categora B sueldo de 4000 mensual

Categora C sueldo de 3000 mensual

Categora D sueldo de 2000 mensual

126

PROGRAMACION ORIENTADA A OBJETOS

FUNDAMENTOS DE LA PROGRAMACION ORIENTADA A OBJETOS

2015
127

4) Escriba un programa que trabaje con la clase anterior pero con vectores de objetos y que visualize
todos los empledaos por categora..
5) Escriba un programa que me permita ingresar varios cursos creando la clase curso y finalmente me
entrege un listado. La clase curso debe considerar cdigo, nombre, costo y duracin en horas.

CAPITULO VII
127

PROGRAMACION ORIENTADA A OBJETOS

2015

CAPITULO VII
CONSTRUCTORES Y DESTRUCTORES
7
7.1

CLASES Y CONSTRUCTORES.// prog19.cpp:


definemiembro.el punto deLas
entrada
de la miembro
aplicacincon
de consola.
Funciones
funciones
componentes de una clase y normalmente
#include "stdafx.h"
se definen
dentroPrograma
de la clase
como funciones
de lnea(inline).
tambin
/* OBJETIVO:
de funciones
que utilizan
el operador Pero
de ambito
*/ podemos definir el cuerpo de
#include <iostream>
la funcin
fuera
de la clase. El mbito de una funcin se debe indicar por el operador mbito (:: ) con el
#include
<conio.h>
usingdenamespace
std;
nombre
la clase. Ej:
class nota
PROGRAMA
{ private:
int practica1;
int practica2;
public:
void asignar( int p1, int p2);
float promedio( );
};
void nota :: asignar( int p1, int p2)
{ practica1 = p1;
practica2 = p2;}
float nota :: promedio(void)
{ float prom;
prom = (practica1+practica2)/2.0;
return( prom); }
void main ( )
{ int prac1, prac2;
nota practicas;
system("cls");
cout<< "Primera practica: "; cin >>prac1;
cout<< "Segunda practica: "; cin >>prac2;
practicas.asignar(prac1,prac2);
cout<< " El promedio sera = "<< practicas.promedio( );
_getch();
128
}

PROGRAMACION ORIENTADA A OBJETOS

FUNDAMENTOS DE LA PROGRAMACION ORIENTADA A OBJETOS

2015
129

7.2 Constructores y Destructores.-Cuando se menciono a los punteros se dijo que se puede crear
variables apuntadas en forma dinmica(en ejecucin), para crear estas se utiliza el operador new y para
liberarlas el operador delete, en la POO existen mecanismos similares. Cuando se crea un objeto es
llamado un mtodo que se denomina constructor y al terminar(salir) se llama a otro mtodo conocido
como destructor. Esto es lo que veremos a continuacin.
7.2.1

Constructor.- Es un mtodo especial que construye objetos. Un constructor es llamado para crear
una instancia de ese objeto asignando espacio a un objeto puede tambin asignar valores a sus
miembros datos. El constructor realiza una inicializacin automtica y no devuelve ningn valor.
Tiene el mismo nombre que la clase con la cual est asociada. Puede tener parmetros como
cualquier otra funcin y tener por lo tanto distintas formas. Si no se define para una clase, el
compilador generara un constructor por defecto.

Ejemplo:
class circulo
{ private:
int c_x, c_y;
double radio;
public:
// constructor
circulo( int x, int y, double r)
{ radio = r;
c_x = x;

129

PROGRAMACION ORIENTADA A OBJETOS


c_y = y; }
};

Tipos de constructores: Los constructores pueden ser:

Constructores sin argumento

Constructores con argumento

Constructores de copia

Esto lo veremos en el ejemplo:


class nota
{ private : int dato;
public:
nota( )
{
}
nota(int d )
{ dato = d; }
nota( nota &y )
{ dato = y.dato; }
};

Ejemplo 2.- De un ejemplo de constructores con la estructura indicada


PROGRAMA
// prog29.cpp: define el punto de entrada de la aplicacin de consola.
#include "stdafx.h"
/* OBJETIVO: Programa que muestra los diferentes tipos de constructores*/
#include <iostream>
#include<conio.h>
#include<stdio.h>
#include<string.h>
using namespace std;
class nota
{ private :
int dato;
public:
nota( ) //CONSTRUCTOR SIN ARGUMENTOS
{
}
nota(int d )//CONSTRUCTOR CON ARGUMENTOS
{ dato = d; }
nota( nota &y )//CONSTRUCTOR DE COPIA
{ dato = y.dato; }
void set_dato(const int val)
{dato=val;}
int get_dato()
{ return dato; }
};
void main()
{ nota d1;
nota d2(8);
nota d3(d2);
d1.set_dato(7);
d3.set_dato(9);
cout<<"dato1 = "<<d1.get_dato()<<endl;
cout<<"dato2 = "<<d2.get_dato()<<endl;
cout<<"dato3 = "<<d3.get_dato()<<endl;

130

2015

PROGRAMACION ORIENTADA A OBJETOS

FUNDAMENTOS DE LA PROGRAMACION ORIENTADA A OBJETOS

2015
131

_getch();
}

EJECUCION

Destructores: Un destructores lo opuesto a un constructor, as como el constructor separa memoria, el


destructor libera esa memoria que fue asignada al objeto por el constructor. El destructor es una funcin
miembro con el mismo nombre que la clase mas una tilde que se aade al principio. Una clase puede
poseer un destructor que no tiene argumentos y no devuelve valores. Ejemplo:
class punto
{ private :
int x;
int y;
public:
punto( )
{ x= 0;
y=0
}
~punto( )
{ }
};

Ejemplo 3.- De un ejemplo de constructores y de destructores, definiendo la clase complejo , que tiene
componente real y componente imaginaria.
PROGRAMA

// prog39.cpp: define el punto de entrada de la aplicacin de consola.


#include "stdafx.h"
/* OBJETIVO: Programa que muestra los diferentes tipos de constructores y el destructor */
#include <iostream>
#include<conio.h>
#include<stdio.h>
#include<string.h>
using namespace std;
class complejo
{ private:
int r, i;
public:
complejo()//constructor sin argumentos
{ r = i = 0; }
complejo(const int re, const int im)//constructor con argumentos
{ r = re;
i = im;}
complejo(const complejo &comp)//constructor de copia
{
r = comp.r;
i = comp.i;}
~complejo() { cout<<"El destructor ha sido llamado"<<endl;
_getch(); }//destructor
void leer(const int val);
void leei(const int val);
int muestrar() { return r; }
int muestrai() { return i; }

131

PROGRAMACION ORIENTADA A OBJETOS

2015

};
void main()
{complejo c1(5,7);
complejo c2;
complejo c3(c1);
cout<<"Parte real de c1= "<<c1.muestrar()<<endl;
cout<<"Parte imaginaria de c1= "<<c1.muestrai()<<endl;
cout<<"Parte real de c2= "<<c2.muestrar()<<endl;
cout<<"Parte Imaginaria de c2= "<<c2.muestrai()<<endl;
cout<<"Parte Real de c3= "<<c3.muestrar()<<endl;
cout<<"Parte Imaginaria de c3= "<<c3.muestrai()<<endl;
_getch();
}

EJECUCION

Constructor new y destructor deleteEstos dos operadores tambinconstruyen y destruyen, que es una
forma de decir tambin reservan y liberan memoria.
El operador new obtiene memoria del sistema operativo, y proporciona un puntero a su punto inicial. Su
sintaxis es: tipo *p ;
p = new tipo;
El operador delete libera memoria reservada con new
Ejemplo 3:De un ejemplo de manejo de new y delete
PROGRAMA
// prog49.cpp: define el punto de entrada de la aplicacin de consola.
#include "stdafx.h"
/* OBJETIVO: Programa ejemplo de new y delete */
#include <iostream>
#include <conio.h>
using namespace std;
void main( )
{int *p1, *p2;
p1 = new int;//asigna la direccin de un campo entero a p1 que es puntero
cout << " Ingrese valor = > ";
cin >> (*p1);// almacena un valor en el campo apuntado por p1
p2=p1;//p2 toma la direccin de p1
p1 = new int;
cout << " Ingrese valor = > ";
cin >> (*p1);// almacena un valor en el campo apuntado por p1
cout<<(*p1)<<endl;
cout<<(*p2)<<endl;
delete p1;//libera memoria de p1
delete p2;//libera memoria de p2
_getch ( ); }
EJECUCION

132

PROGRAMACION ORIENTADA A OBJETOS

FUNDAMENTOS DE LA PROGRAMACION ORIENTADA A OBJETOS

2015
133

Analizando el ejemplo que hemos ejecutado:


Primero: podemos ver que el operador new busca un campo o estructura del tipo indicado, en nuestro
caso entero y cuando lo encuentra asigna la direccin al puntero respectivo y despus bloquea el
acceso de otra variable a ese campo,
Segundo: el campo no tiene nombre propio sino que se le llama campo apuntado por, en nuestro
caso, p1 y esto se indica con *p1.
Tercero: El intercambio de informacin puede ser de puntero a puntero (p2=p1) o de campo apuntado
a campo apuntado (*p1) = (p2), sera un error lo siguiente: p1 = *p2.
Cuarto: La forma correcta de liberar a la memoria es delete p1 o delete p2.

133

PROGRAMACION ORIENTADA A OBJETOS

2015

PROBLEMAS
1.- Desarrollar un programa que maneje la clase empleado utilizando funciones fuera de la clase y que nos
permitan manejar el operador mbito. La clase empleado tendr los siguientes datos miembro y las
funciones indicadas.
class empleado
{ private:
int codemp;
char nomemp[40];
float hotemp;
float phoemp;
float pagemp;
public:
void ingreso_datos( int c, char[40], flota h, flota p);
float pago_neto( );
};
SOLUCION

PROGRAMA
/* CODIGO: PROGCPP07001
FECHA: 10 DE MARZO DE 2012
OBJETIVO: Programa que calcula pagos considerando funciones construidas
fuera de la clase pero que trabajan con el operador mbito :: */
#include <iostream.h>
#include <conio.h>
#include <string.h>
#include <stdio.h>
class empleado
{ private:
int codemp;
char nomemp[40];
float hotemp;
float phoemp;
float pagemp;
public:
void ingreso_datos( int c, char n[40], float h, float p);
float pago_neto( );
};
void empleado:: ingreso_datos( int c, char n[40], float h, float p)
{ codemp=c;
strcpy(nomemp,n);

134

PROGRAMACION ORIENTADA A OBJETOS

FUNDAMENTOS DE LA PROGRAMACION ORIENTADA A OBJETOS

2015
135

hotemp=h;
phoemp=p;
}
float empleado:: pago_neto( )
{
float pg;
pg = hotemp*phoemp;
pg = pg*0.89;//considerando un 11% de descuento
return(pg);
}
void main()
{ int codigo;
char nombre[40];
float horas_trabajadas;
float pago_hora;
float sueldo_neto;
empleado emp1;
clrscr();
cout<<"Ingrese codigo del trabajador --> "; cin>>codigo;
cout<<"Ingrese nombre del trabajador --> "; gets(nombre);
cout<<"Ingrese Horas trabajadas

--> "; cin>>horas_trabajadas;

cout<<"Ingrese Pago por Hora

--> "; cin>>pago_hora;

emp1.ingreso_datos(codigo,nombre,horas_trabajadas,pago_hora);
sueldo_neto= emp1.pago_neto();
cout<<"Neto a pagar = "<<sueldo_neto;
getch();
}

EJECUCION

2.-Desarrollar un programa que maneje constructores y destructores de la clase caja que tiene las
caractersticas indicadas.
class caja
{ private:
int alto;
int ancho;
int largo;

135

PROGRAMACION ORIENTADA A OBJETOS

2015

..
SOLUCION
PROGRAMA
/* CODIGO: PROGCPP07002
FECHA: 10 DE MARZO DE 2012
OBJETIVO: Programa que maneja constructores de la clase caja. */
#include <iostream.h>
#include <conio.h>
class caja
{ private:
int alto;
int ancho;
int largo;
public:
// constructor
caja ( int al, int an, int l)
{ alto = al;
ancho = an;
largo = l; }
// destructor
~caja ( )
{

// funcin inline
int volumen ( )
{ return ( alto*ancho*largo);
}
};
void main ( )
{ caja caja1(2,3,4);
caja caja2(5,6,7);
clrscr( );
cout << "El volumen de la primera caja sera => " << caja1.volumen( )<<endl;
cout << "El volumen de la segunda caja sera => " << caja2.volumen( )<<endl;
getch( ); }
EJECUCION

3.-Desarrollar un programa que trabaje con aritmetica de punteros y maneje polinomiospudiendo desarrollar
operaciones simples con estos polinomios.

136

PROGRAMACION ORIENTADA A OBJETOS

FUNDAMENTOS DE LA PROGRAMACION ORIENTADA A OBJETOS

SOLUCION
PROGRAMA
/* CODIGO: PROGCPP07003
PROGRAMA CREADO POR RICARDO CASTAEDA DE LA ROSA
FECHA: 10 DE MARZO DE 2012
OBJETIVO: Programa que maneja la Aritmtica de punteros*/
#include<iostream.h>
#include<conio.h>
#include<math.h>
void main( )
{ int a[10],b[10],n,i;
float pola,polb,x;
int *p1,*p2;
clrscr( );
cout<<"Ingrese valor n: ";cin>>n;
for(i=1;i<=n;i++)
{ cout<<"Ingrese valor de a["<<i<<"]= ";cin>>a[i];
cout<<"Ingrese valor de b["<<i<<"]= ";cin>>b[i]; }
cout<<"Ingrese x: ";cin>>x;
p1=&a[1];
p2=&b[1];
//hallando polinomios
pola=0;
polb=0;
for(i=1;i<=n;i++)
{ pola=pola+(*p1)*pow(x,n+1-i);
polb=polb+(*p2)*pow(x,n+1-i);
p1++;

//en aritmtica de punteros se asigna p1++ para

p2++;

//suma 1 CAMPO!! al puntero no una unidad

}
cout<<pola<<endl;
cout<<polb<<endl;
cout<<pola+polb;
getch();
}

EJECUCION

137

2015
137

PROGRAMACION ORIENTADA A OBJETOS

CAPITULO VIII

138

2015

PROGRAMACION ORIENTADA A OBJETOS

FUNDAMENTOS DE LA PROGRAMACION ORIENTADA A OBJETOS

2015
139

CAPITULO VIII
HERENCIA Y CLASES DERIVADAS
8. CLASES DERIVADAS
a.

Definicin.-La forma sintctica para indicar que una clase


es derivada de otra clase existente ser:
class nombre_clase: [(public| private)] clase_base
{
declaraciones de miembros
};
La palabra reservada class puede ser sustituida por la palabra reservada struct, con la
implicacin de que los miembros son pblicos por defecto.
Una de las dos palabras, public y private, en la clase derivada son opcionales, para especificar
como los miembros de la clase base tienen que ser accesibles a la clase derivada:

b.

Clases derivadas: Mediante la propiedad de la herencia


podemos derivar una clase de otra ya existente. Podemos entonces indicar que las clases
derivadas heredan los miembros de las clases que les dan origen, a estas ltimas se les llama
clases bases

Ejemplo 1:
class persona

// CLASE BASE

{ protected:
char nombre[30];
char dni[9];
public:
void asignar (char n[30], char d[9])
{ strcpy (nombre, n);
strcpy (dni, d); }
void mostrar ( )
{ clrscr();
gotoxy(30,3);
cout<<"DATOS

139

DE LA PERSONA - CLASE BASE";

PROGRAMACION ORIENTADA A OBJETOS

2015

gotoxy(35,6);
cout <<"Nombre = "<<nombre;
gotoxy(35,8);
cout <<" DNI = "<<dni;
getch(); }
};
class empleado : public persona //CLASE

DERIVADA

{ private:
int codigo;
float sueldo;
public:
void asignar (char N[30], char D[9], int c, int s)
{ strcpy (nombre, N);
strcpy (dni, D);
codigo = c;
sueldo = s; }
void mostrar ( )
{ clrscr();
gotoxy(30,3);
cout<<"DATOS

DEL EMPLEADO - CLASE DERIVADA";

gotoxy(35,6);
cout << "Nombre = "<<nombre;
gotoxy(35,8);
cout <<" DNI = "<<dni;
gotoxy(35,10);
cout <<"Codigo = "<<codigo;
gotoxy(35,12);
cout <<"Sueldo = "<<sueldo<<endl;
getch();
}
};
c.

Herencia mltiple.- Este concepto nos indica que una clase puede
derivarse de ms de una clase, un ejemplo es el siguiente:
class base1
{ protected:
int dato1;
public:
void asignar (int d1)
{ dato1 = d1;
}
};
class base2
{ private:
int dato2;

public:
void asignar (int d2)

140

PROGRAMACION ORIENTADA A OBJETOS

FUNDAMENTOS DE LA PROGRAMACION ORIENTADA A OBJETOS

2015
141

{ dato2 = d2;
}
int leer ( )
{ return(dato2);
}
};
class derivada12 : public base1, private base2
{ public:
void imprimir ( )
{ cout << b1<<leer( );
}
};
d.

Funciones amigas (friend)


Sabemos que a un dato privado se puede acceder desde la misma clase o desde una funcin amiga. El concepto de
funcin amiga se refiere a una funcin que no es miembro de esa clase, pero que necesita acceder a los miembros
privados de una clase. Estas se declaran colocando su prototipo en la clase que son amigas, indicando esto don la
palabra reservada friend.
class empleado
{ private:
int code;
char nombre[40];
float sueldo;
public:
friend void planilla (empleado e1, int valor);
};
void planilla (empleado e1, int valor)
{
e1.code =.....;
e1.sueldo;
}

e.

Funciones virtuales.- Esta caracterstica permite a una funcin estar


definida en una clase base y su clase derivada bajo el mismo nombre.
La declaracin de virtual solo debe hacerse en la clase base, la funcin ser llamada de acuerdo al objeto al cual est
asociada.
class cuadrado
{ protected:
int lado;
public:
virtual int area ( )
{ return (lado * lado);
}
};
class cubo: public cuadrado
{ public:

141

PROGRAMACION ORIENTADA A OBJETOS

2015

int area ( )
{ return ( lado * lado * lado);
}
};

PROBLEMAS
1.- Construya un programa orientado a objetos que utilice la clase base persona, con su datos miembro nombre y DNI, adems de
considerar las funciones miembro asignar y mostrar; derivada de esta clase se manejara la clase empleado que aade datos
miembro cdigo y sueldo, y redefina las funciones de la clase base.
SOLUCION

PROGRAMA

// prog59.cpp: define el punto de entrada de la aplicacin de consola.


#include "stdafx.h"
/* OBJETIVO: PROGRAMA QUE CREA LA CLASE EMPLEADO QUE ES DERIVADA DE LA CLASE BASE PERSONA*/
#include<iostream>
#include<conio.h>
#include<string.h>
#include<stdio.h>
using namespace std;
class persona
{ protected:
char nombre[30];
char dni[9];
public:
void asignar (char n[30], char d[9])
{ strcpy (nombre, n);
strcpy (dni, d); }
void mostrar ( )
{system("cls");
cout<< "DATOS DE LA PERSONA - CLASE BASE"<<endl;
cout <<"Nombre = "<<nombre<<endl;
cout <<" DNI = "<<dni<<endl;
_getch(); }
};
class empleado : public persona
{ private:
int codigo;
float sueldo;
public:
void asignar (char N[30], char D[9], int c, int s)
{ strcpy (nombre, N);
strcpy (dni, D);
codigo = c;
sueldo = s;
}
void mostrar ( )
{ system("cls");

142

PROGRAMACION ORIENTADA A OBJETOS

FUNDAMENTOS DE LA PROGRAMACION ORIENTADA A OBJETOS


cout<< "DATOS DEL EMPLEADO - CLASE DERIVADA"<<endl;
cout << "Nombre = "<<nombre<<endl;
cout <<" DNI = "<<dni<<endl;
cout <<"Codigo = "<<codigo<<endl;
cout <<"Sueldo = "<<sueldo<<endl;
_getch();
}

};
void main ( )
{ persona p1;
empleado e1;
char name[30];
char di[9];
int code;
float sb;
system("cls");
cout << " Ingrese Nombre => "; gets(name);
cout << " Ingrese DNI
=> "; cin >> di;fflush(stdin);
p1.asignar( name, di);
cout << " Ingrese Nombre => "; gets(name);
cout << " Ingrese DNI
=> "; cin >> di;
cout << " Ingrese Codigo => "; cin >> code;
cout << " Ingrese sueldo bruto => "; cin >> sb;
e1.asignar( name, di, code, sb);
p1.mostrar();
e1.mostrar();
_getch( );
}

EJECUCION

143

2015
143

PROGRAMACION ORIENTADA A OBJETOS

2015

2.- Escriba un programa que simule un procesamiento de notas con dos sistemas de evaluacin diferentes, el sistema A :
promedio de prcticas = (p1+p2+p3)/3.0. Nota final = (exapar + exafin + propra)/3.0y el sistema B : promedio de prcticas =
(p1+p2+p3+p4)/4.0;Nota final = (exapar + 2*exafin +2* propra)/5.0.
Use clases derivadas para este fin.
SOLUCION:

PROGRAMA
/* CODIGO: PROGCPP09002
PROGRAMA CREADO POR RICARDO CASTAEDA DE LA ROSA
FECHA: 12 DE MARZO DE 2007
OBJETIVO: PROGRAMA QUE TRABAJA CON DOS CLASES DERIVADAS SIMULANDO DOS SISTEMAS DE EVALUACION
DE NOTAS*/

#include<iostream.h>
#include<conio.h>
#include<stdio.h>
#include<string.h>
#include<ctype.h>
class notas
{ protected:
char code[10];
char name[40];
int exapar;
int exafin ;
float propra;
float notafin;
public:
void asignar( char c[10], char n[40], int ep, int ef)
{ strcpy(code, c);
strcpy( name,n);
exapar = ep;
exafin = ef;
}

144

PROGRAMACION ORIENTADA A OBJETOS

FUNDAMENTOS DE LA PROGRAMACION ORIENTADA A OBJETOS


void mostrar( )
{ clrscr( );
gotoxy(30,2);
cout << "BOLETA DE NOTAS";
gotoxy(31,6);
cout << " Codigo : "<<code;
gotoxy(31,8);
cout << " Nombre : "<<name;
gotoxy(31,10);
cout << " Examen Parcial : "<<exapar;
gotoxy(31,12);
cout << " Examen Final

: "<<exafin;

gotoxy(31,14);
cout << " Promedio Pract. : "<<propra;
gotoxy(31,16);
cout << " Nota Final

: "<<notafin;

getch();
}
};
class sistemaA : public notas
{ public:
int p1, p2 , p3;
public :
void calcula_nf ( )
{ propra = (p1+p2+p3)/3.0;
notafin = (exapar + exafin + propra)/3.0;
}
};
class sistemaB : public notas
{ public:
int p1, p2 , p3, p4;
public :
void calcula_nf ( )
{ propra = (p1+p2+p3+p4)/4.0;
notafin = (exapar + 2*exafin +2* propra)/5.0;
}
};
void main ( )
{ char a1[10];

// almacena cdigo

char a2[40]; //almacena nombre


int a3;

//almacena examen parcial

int a4;

//almacena examen final

char sistema;
sistemaA al1;
sistemaB al2;
clrscr( );

145

2015
145

PROGRAMACION ORIENTADA A OBJETOS


gotoxy(30,3);cout<<"INGRESO DE DATOS";
gotoxy(31,6);
cout<< " CODIGO : "; cin >> a1;
gotoxy(31,8);
cout<< " NOMBRE : "; gets(a2);
gotoxy(31,10);
cout<< " Examen Parcial

: "; cin >> a3 ;

gotoxy(31,12);
cout<< " Examen Final

: "; cin >> a4;

gotoxy(31,14);
cout<< " Sistema de evaluacin A/B: "; cin >> sistema;
sistema = toupper( sistema);
// calculo de promedio de prcticas y nota final
if ( sistema == 'A')
{ cout << "

Practica 1 : "; cin>>al1.p1;

cout << "

Practica 2 : "; cin>>al1.p2;

cout << "

Practica 3 : "; cin>>al1.p3;

al1.asignar(a1,a2,a3,a4);
al1.calcula_nf( );
al1.mostrar( ); }
if ( sistema == 'B')
{ cout << "

Practica 1 : "; cin>>al2.p1;

cout << "

Practica 2 : "; cin>>al2.p2;

cout << "

Practica 3 : "; cin>>al2.p3;

cout << "

Practica 4 : "; cin>>al2.p4;

al2.asignar(a1,a2,a3,a4);
al2.calcula_nf( );
al2.mostrar( );
}
}

EJECUCION

146

2015

PROGRAMACION ORIENTADA A OBJETOS

FUNDAMENTOS DE LA PROGRAMACION ORIENTADA A OBJETOS

2015
147

3.-Desarrolle un programa que nos muestre claramente el concepto de Herencia mltiple, esto debe hacerlo derivando una nueva
clase de dos clases bases.
SOLUCION:

PROGRAMA
/* CODIGO: PROGCPP09003
PROGRAMA CREADO POR RICARDO CASTAEDA DE LA ROSA
FECHA: 17 DE MARZO DE 2007
OBJETIVO: PROGRAMA QUE TRABAJA CON HERENCIA DE DOS CLASES BASES */

#include<iostream.h>
#include<conio.h>
#include<stdio.h>
#include<string.h>
class alumno
{ protected:
char codalu[10];
char nomalu[40];
};
class curso
{ protected:
char codcur[7];
char nomcur[30];
float notcur;
};
class matricula: public alumno, public curso
{ private:
float pagoma;
int ok;//1 matriculado 0 no matriculado
public:
void asignar( char ca[10], char na[40],char cc[7], char nc[30],float nt, float pm, int sm)
{strcpy(codalu,ca);
strcpy(nomalu,na);
strcpy(codcur,cc);

147

PROGRAMACION ORIENTADA A OBJETOS


strcpy(nomcur,nc);
notcur =nt;
pagoma=pm;
ok=sm;
}

void mostrar()
{ clrscr();
gotoxy(30,2); cout<< "DATOS DE MATRICULA ";
gotoxy(31,6); cout<< "Codigo

: "<<codalu;

gotoxy(31,8); cout<< "Nombre

: "<<nomalu;

gotoxy(31,10); cout<< "Cod. Curso


gotoxy(31,12); cout<< "Curso

: "<<nomcur;

gotoxy(31,14); cout<< "Nota

: "<<notcur;

: "<<codcur;

gotoxy(31,16); if (ok ==1)


cout<<"MATRICULADO";
else
cout<<"MATRICULA PENDIENTE";
getch();
}
};

void main ( )
{ matricula alu1;
char codigo[10],nombre[40], ccurso[7],ncurso[30];
float nota,pago;
int sm;
clrscr();
//Ingreso de Datos
gotoxy(30,2); cout<<"INGRESO DE DATOS";
gotoxy(31,6); cout<<"COIDGO
gotoxy(31,8); cout<<"NOMBRE

: ";gets(codigo);
: ";gets(nombre);

gotoxy(31,10); cout<<"COD. CURSO : ";gets(ccurso);


gotoxy(31,12); cout<<"CURSO

: ";gets(ncurso);

gotoxy(31,14); cout<<"NOTA

: ";cin>>nota;

gotoxy(31,16); cout<<"PAGO

: ";cin>> pago;

gotoxy(31,18); cout<<"MATRICULA SI=1 NO=0 : ";cin>>sm;


alu1.asignar(codigo,nombre,ccurso,ncurso,nota,pago,sm);
alu1.mostrar();
}

EJECUCION

148

2015

PROGRAMACION ORIENTADA A OBJETOS

FUNDAMENTOS DE LA PROGRAMACION ORIENTADA A OBJETOS

4.- Escribir un programa que maneje el concepto de funciones amigas:

PROGRAMA
// prog69.cpp: define el punto de entrada de la aplicacin de consola.
#include "stdafx.h"
/* OBJETIVO: PROGRAMA QUE TRABAJA CON FUNCIONES AMIGAS */
#include<iostream>
#include<conio.h>
#include<string.h>
using namespace std;
class empleado
{ private:
char nombre[20];
int codigo;
public :
empleado( char *nomb, int cod) // constructor
{ strcpy (nombre,nomb);
codigo = cod;}
friend void imprime_dat_emp(empleado c); // declaracin de funcin amiga
};
void imprime_dat_emp(empleado c)
{ cout << "Nombre del cliente : " << c.nombre<< endl;
cout << "Codigo del cliente : " << c.codigo << endl;}

149

2015
149

PROGRAMACION ORIENTADA A OBJETOS


void main ( )
{system("cls");
empleado J ("Pedro Juarez", 1282015);
imprime_dat_emp(J);
empleado R ("Jose Ruiz", 1232014);
imprime_dat_emp(R);
_getch( ); }

CAPITULO XI

150

2015

PROGRAMACION ORIENTADA A OBJETOS

FUNDAMENTOS DE LA PROGRAMACION ORIENTADA A OBJETOS

2015
151

CAPITULO XI
SOBRECARGA
9.

POLIMORFISMO Es la capacidad de los objetos de responder de manera diferente a las mismas ordenes, dependiendo a la
clase a la cual pertenecen. El Polimorfismo se implementa de dos maneras:

Va funciones virtuales

Por sobrecarga.
f.

VIA FUNCIONES VIRTUALES El concepto de funcin virtual ya lo vimos


anteriormente, veamos ahora un ejemplo

Ejemplo:
/ * Ejemplo de Polimorfismo con funciones virtuales * /
# include<iostream.h>
# include<conio.h>
class figura
{ protected:
float par1;
public:
void asignar ( float p1)
{
par1 = p1;
}
virtual float area( )
{ return (0);}
};
class circulo : public figura
{ public:
virtual float area( )
{ return (3.1416*par1*par1);}
};
class cuadrado : public figura
{ public:
virtual float area( )
{ return (par1*par1);}
};
g.

151

SOBRECARGA DE OPERADORES Y FUNCIONES

PROGRAMACION ORIENTADA A OBJETOS


i.

2015

Introduccin.- La sobrecarga de operadores, nos permite definir un operador de diferente forma, es


una forma de realizar el Polimorfismo. La sobrecarga es la tcnica de redefinir un existente para que trabaje con otro
tipo de datos. Como sabemos no podemos crear un operador nuevo pero aquellos que ya existen podemos
sobrecargarlos.

ii.

Sobrecarga de Operadores.- Un operador puede ser sobrecargado. Los operadores sobrecargados


cumplen las siguientes propiedades.

Sobrecargados, no cambiaran su nmero de operandos (unitarios o binarios).

Sobrecargados, no cambiaran su prioridad.

No se pueden inventar operadores que no existan en C++.

La palabra reservada operator.- Para hacer que un operador de C++ acte como un operador definido por el usuario,
se debe utilizar la palabra reservada operator. El formato de sobrecarga es:

Tipooperator<op> ( lista de argumentos)


Los operadores que se pueden sobrecargar son:

Operadores Unarios.

Operador * (Indireccion)
Operador -> (Indireccion)

Operador +
Operador -

Operador ++

Operador --

Operadores Binarios.

Operador +
Operador -

Operador *
Operador /

Operador %
Operador <<

Operador >>
Operador &

Operador ^
Operador |

Operador []

Operadores De Asignacin

152

Operador =
Operador +=

Operador -=
Operador *=

Operador /=
Operador %=

Operador <<=
Operador >>=

Operador &=
Operador ^=|

Operador |=

PROGRAMACION ORIENTADA A OBJETOS

FUNDAMENTOS DE LA PROGRAMACION ORIENTADA A OBJETOS

2015
153

Adems de los operadores: , (coma), new y delete

Ejemplo de sobrecarga.#include <iostream.h>


#include <conio.h>
class duplicado
{public:
int x;
duplicado operator++ ()
{ x = x + x;
return *this; }};
void main () {

// (Comprobacin)

/ * Ejemplo
sobrecarga
de funciones * /
duplicado
e1 =de{5},
e2;
# include<iostream.h>
e2#=include<conio.h>
++e1;
// M.2 uso de operador ++ sobrecargado
cout << "e1 == " << e1.x << endl;
class vector
{ private:
cout
<< "e2 == " << e2.x << endl;
float xm, ym;
getch();
public:}
vector ( float x = Sobrecarga
0, float y = 0)de funciones.- Cuando una funcin tiene ms de una definicin decimos que es una
iii.
{
funcin sobrecargada. Sabemos que dos o ms funciones pueden tener el mismo nombre pero para estar sobrecargadas
xm = x;
den
ymdiferir
= y; en el tipo de sus argumentos o el nmero de sus argumentos.
}
( );
Esvoid
muyvervector
importanteconsiderar
que bastante comn es sobrecargar las funciones constructoras.
void leervector ( float &x, float &y)
Ejemplo de sobrecarga de funciones
{
x = xm;
y = ym;
}
};
void vector :: vervector( )
{
cout<< xm << <<ym<<endl;
}
vector operator+ ( vector &a, vector &b)
{
float xa, ya, xb, yb;
leervector (xa, ya);
leervector (xb, yb);
return vector ( xa+ xb, ya+ yb);
}
void main ( )
{
vector u(3,1), v(4,2),s;
s = u + v;
s.vervector ( ); // debe salir 7,3
153getch();
}

PROGRAMACION ORIENTADA A OBJETOS

PROBLEMAS
1.- Construya un programa orientado a objetos desarrolle el polimorfismo utilizando el concepto de funcin virtual.
SOLUCION

PROGRAMA
/* CODIGO: PROGCPP010001
PROGRAMA CREADO POR RICARDO CASTAEDA DE LA ROSA
FECHA: 20 DE MARZO DE 2007
OBJETIVO: Ejemplo de Polimorfismo con funciones virtuales */
#include<iostream.h>
#include<conio.h>
class figura
{ protected:
float par1;
public:
void asignar ( float p1)
{ par1 = p1; }
virtual float area( )
{

return (0) ; }

};
class circulo : public figura
{ public:
virtual float area( )
{
return (3.1416*par1*par1);
}

154

2015

PROGRAMACION ORIENTADA A OBJETOS

FUNDAMENTOS DE LA PROGRAMACION ORIENTADA A OBJETOS

2015
155

};
class cuadrado : public figura
{ public:
virtual float area( )
{
return (par1*par1);
}
};
void main ( )
{ circulo cir1;
cuadrado cua1;
float a1;
clrscr();
cout<<"Ingrese radio circulo=> "; cin>> a1;
cir1.asignar(a1);
cout<< " rea = "<< cir1. area()<< endl;
cout<<"Ingrese lado cuadrado=> "; cin>> a1;
cua1.asignar(a1);
cout<< " Area = "<< cua1. area();
getch();
}

EJECUCION

2.- Construya un programa que sobrecargue un operador realizando una operacin para un objeto.
SOLUCION

PROGRAMA
/* CODIGO: PROGCPP010002
PROGRAMA CREADO POR RICARDO CASTAEDA DE LA ROSA
FECHA: 12 DE MARZO DE 2007
OBJETIVO: Sobrecarga de operadores es la facultad que tiene un operador defuncionar de forma diferente segn el
tipo de dato con el que se utilice,
Es decir, hacer que el operador funcione con los datos que el usuario cree.
En el cuerpo de la funcinhabr que poner las operaciones que queramos
Querealice el operador */

155

PROGRAMACION ORIENTADA A OBJETOS

2015

#include<iostream.h>
#include<conio.h>
class clase
{
int x,y;
public:
clase(int x=0,int y=0);
clase operator +(clase &);
void visualizar( );
~clase(){cout<<"\nDestruyendo el Objeto ";}
};
clase ::clase(int m,int n)
{ x=m;y=n;}
clase clase::operator +(clase &obj) //pasa un objeto de tipo clase
{

clase aux;
aux.x=x+obj.x; //x del objeto ms x que pasa

aux.y=y+obj.y;
return(aux); }
void clase::visualizar()
{

cout<<"\nx= "<<x<<' '<<"y= "<<y; }

main( )
{ clase a(5,7); clase b(3,4); clase c;
c=a+b; //x de a ms x de b ; y de a ms y de b
c.visualizar( ); //c=operator +b;
getch(); }

EJECUCION

3.- Construya un programa que sobrecargue una funcin utilizando dos tipos de datos diferentes, la funcindebe ser simple.
SOLUCION

PROGRAMA
/* CODIGO: PROGCPP010003
PROGRAMA CREADO POR RICARDO CASTAEDA DE LA ROSA

156

PROGRAMACION ORIENTADA A OBJETOS

FUNDAMENTOS DE LA PROGRAMACION ORIENTADA A OBJETOS

2015
157

FECHA: 20 DE MARZO DE 2007


OBJETIVO: Funcin fecha recargada */
#include<iostream.h>
#include<conio.h>
#include<stdio.h>
void fecha(char *fecha);
void fecha(int anno,int mes, int dia);
void main()

{ clrscr();
fecha("20/3/2007");
fecha(07,3,21);
getch();
}
void fecha(char *fecha)
{cout <<"Fecha: "<<fecha<<endl;}
void fecha(int anno,int mes, int dia)
{cout<<"Fecha: "<<dia<<"/"<<mes<<"/"<<anno;}

EJECUCION

4.- Construya un programa que sobrecargue un constructor y que nos permita inicializar un arreglo y otro constructor que no
inicialice
SOLUCION

PROGRAMA
/* CODIGO: PROGCPP01004
PROGRAMA CREADO POR RICARDO CASTAEDA DE LA ROSA
FECHA: 20 DE MARZO DE 2007
OBJETIVO: Vamos a trabajar sobrecargando un constructor para permitir que tanto los objetos como los arrays de objetos
aparezcan dentro de un programa, como se sabe es comn inicializar variables que inicializar arrays, de modo que para admitir
arrays de objetos sin inicializar, junto con objetos inicializados debe incluirse un constructor que permita la inicializacin y otro que
no. */
#include<iostream.h>
#include<conio.h>

157

PROGRAMACION ORIENTADA A OBJETOS


class base
{ protected:
int j;
public:
base();//sin inicializador
base(int n);//con inicializador
int getx();
};
base::base()
{j=0;}
base::base(int n)
{j=n;}
base::getx()
{return j;}
main()
{ int i;
base v1[10];//declaracion del array sin inicializacin
base v2[10]={1,2,3,4,5,6,7,8,9,10}; //declaracion del Array con Inicializaciones
for(i=0;i<10;i++)
{ cout<<"v1["<<i<<"]-> "<<v1[i].getx()<<' ';cout<<endl;
cout<<"\t v2["<<i<<"]-> "<<v2[i].getx()<<" ";}
getch();
}

EJECUCION

158

2015

Вам также может понравиться