Você está na página 1de 153

PROGRAMACION ORIENTADA A OBJETOS 2015 1

FUNDAMENTOS DE LA PROGRAMACION ORIENTADA A OBJETOS

UNIVERSIDAD NACIONAL DE INGENIERÍA


FACULTAD DE INGENIERÍA MECÁNICA

1
PROGRAMACION ORIENTADA A OBJETOS 2015

CAPITULO I

2
PROGRAMACION ORIENTADA A OBJETOS 2015 3
FUNDAMENTOS DE LA PROGRAMACION ORIENTADA A OBJETOS

CAPITULO I
LENGUAJE “C” CONCEPTOS BASICOS
1 Conceptos De La Programación Orientada a Objetos.-La programación orientada a objetos existe
desde la creación de los primeros lenguajes de programación. Los conceptos que se manejan de
abstracción de datos, herencia y Polimorfismo se manejaban en estos lenguajes, pero con el desarrollo
del lenguaje “C” y la programación visual se utiliza este tipo de programación con mayor profusión.
Programación estructurada, la programación estructurada se basa en la creación de una función
principal y una serie de rutinas(funciones) llamadas desde la función principal, que hacen que el
desarrollo sea horizontal contrastando con la programación lineal cuyo desarrollo es vertical. También
podemos indicar que la informática en su parte de programación era:
Programa = Algoritmo + Estructura de datos. La ventaja de este modelo era importante pero
todavía se seguía manejando por separado el estado del sistema que descansa en la estructura de
datos y los procedimientos que actúan sobre el sistema, tampoco hay una consistencia de datos, esto
queda librado al criterio del programador, estas desventajas y otras más se van a superar con la
programación orientada a objetos.
1.1 Programación orientada a objetos.- La programación orientada a objetos es la ultima
modificación, donde ya se incorporan algunos aspectos tomando como modelo la vida real.
Tipos de Datos Abstractos Algunos autores describen la programación orientada a objetos
como programación 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 informática y la automatización 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 están claramente definidos por qué primeramente hay que crear un modelo de las entidades
que actúan en la vida real, entonces lo primero que se tiene que hacer es tratar de obtener tu
propia perspectiva abstracta, o modelo, del problema. Este proceso de modelado se llama
abstracción y se ilustra en la Figura 1.1.

PROBLEMA

ABSTRACCION

MODELO

Figura 1.1

3
PROGRAMACION ORIENTADA A OBJETOS 2015
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 información es
necesaria, que funciones necesitamos que trabajen: Algunas propiedades serian
 DNI,
 Nombre
 Fecha de nacimiento,
 Talla
 Domicilio,
 Color de ojos
 Color de pelo,
 Teléfono
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 aplicación, por ejemplo el nombre, fecha de nacimiento y el DNI. A estas
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.
 Evaluación del alumno en un curso.
Para resumir, la abstracción es la estructuración de un problema en entidades bien definidas por
medio de la definición de sus datos y operaciones. Consecuentemente, estas entidades combinan
datos y operaciones. No están desacoplados unos de otras.
El modelo quedara:

Nombre

Fecha de Nacimiento

DNI

Matricula_Ingresantes

Evaluacion

4
PROGRAMACION ORIENTADA A OBJETOS 2015 5
FUNDAMENTOS DE LA PROGRAMACION ORIENTADA A OBJETOS

1.2. Organización de un Programa C++:Se compone de los bloques:

Directivas del PreProcesador


 Include
 Macros

Datos y funciones externas

Datos y Funciones Globales

void main( )
{……….
...........
…………
}

1.2.1. Directivas del Preprocesador:Permite que se realicen ciertas tareas antes que la
compilación se efectúe. Las directivas son normalmente #include y #define.
Ejemplo:
# include<math.h> // incluye el archivo fuente en C++ de las librerías matemáticas
# include<conio.h> // incluye el archivo fuente de manejo de pantalla
# define PI 3.1416 // indica que PI es equivalente a 3.1416
También:
# 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

1.2.3. La función main(). Es el punto de inicio de la ejecución de un programaEn programas simples


todo el código se coloca en el programa.
Ejemplo :

5
PROGRAMACION ORIENTADA A OBJETOS 2015

#include "stdafx.h"
#include<iostream>
#include<conio.h>
using namespace std;

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

En programas más complejos el código va en las funciones


void main ( )
{ leer ( );
procesar_planilla( );
imprimir_planilla( );
}
Lo visualizamos así:
void main()
{

void leer( )
{
}

void procesar_planillar( )
{

void inprimir_planillar( )
{

1.3. Estructura General de un programa en Borland C++. -


1.3.1. Introducción .- Un programa en C++ se compone de una o más funciones. Por lo menos
debe existir la función main(), una función es un grupo de instrucciones que realizan una tarea

6
PROGRAMACION ORIENTADA A OBJETOS 2015 7
FUNDAMENTOS DE LA PROGRAMACION ORIENTADA A OBJETOS
(o tareas). Un programa nos permite incluir una serie de archivos de cabecera, que también
contiene definiciones y otras funciones.
Ejemplo : Programa que realiza una suma utilizando funciones y variables globales.

#include "stdafx.h"
#include<iostream>
#include<conio.h>
using namespace std;
/* Variables globales */
int operando1, operando2;
int resultado;
/* funciones globales, declaración de prototipos */
void leer( );
void sumar( );
void escribir( );
int _tmain(int argc, _TCHAR* argv[])
{leer ( );
sumar ( );
escribir ( );
return 0;
}
/* desarrollo de las funciones */
void leer ( )
{ //clrscr();
cout<< " Operando1= "; cin >> operando1;
cout<< " Operando2= "; cin >> operando2;
}

void sumar ( )
{ resultado = operando1 + operando2;
}

void escribir ( )
{ //clrscr();
cout<< " Suma = " << resultado ;
getch(); }

1.3.2. Creación 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
Traducción del programa a lenguaje de maquina o un código entendible por el computador, llamado
también compilación, se genera el código objeto.
Genera nombre.exe
1.3.3. Compilación, enlace y ejecución.- El editor, el compilador y la ejecución están disponibles
en el entorno integrado del Visual C++.
El editor y el compilador en el eid.
La ejecución en el menú debug (depuración).

7
PROGRAMACION ORIENTADA A OBJETOS 2015
1.4. Elementos de un programa en C++.- Se compone de elementos llamados tokens, que pueden
ser identificadores, palabras reservadas, comentarios, signos de puntuación, separadores y
archivos de cabecera.
 Identificadores.- Cadenas de caracteres sirven para identificar cualquier elemento de un
programa como constantes, variables, funciones etc. Ejemplo: línea, leer_datos, valor, suelo, PI.
Todo identificador está compuesto por letras, dígitos y el carácter subrayado, el primer carácter
debe de ser una letra.

 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 información sobre el programa pero no son procesables. Existen
dos tipos en C

/* ........*/ Comentario se puede hacer por varias líneas


/* Realizado por: AAAAAAAAAA
Fecha: 99/99/99
Calcula aaaaa */
// Comentario para el final de la línea
contador = contador + 1; // Incremento unitario del contador
 Signos de puntuación: 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 línea.
 Archivos de cabecera.- Nos permiten incluir archivos al momento de compilación.
1.5. Tipos de Variables estándar en C++.- Datos estándar quiere decir aceptados por todos, en C++
tenemos como en la mayoría de lenguajes enteros, reales y carácter.
 Entero
int 9 digitos 4 bytes
long 9 digitos 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 1 byte
Unsigned char 0..255 1 byte

1.6. Constantes.- Se clasifican en:


 Constantes literales. ( Escritas directamente en el programa)

8
PROGRAMACION ORIENTADA A OBJETOS 2015 9
FUNDAMENTOS DE LA PROGRAMACION ORIENTADA A OBJETOS
Enteras. 125, 100, 0x372
Reales. 1.25E-4, 75.25
Carácter. ‘A’, ‘n’
Cadena. “jose ruiz”, “------------“
 Constantes definidas(Simbólicas). Definidas mediante #define
#define linea “---------------“
#define maximo 1000
#define raiz2 1.4142
 Constantes enumeradas. Se utilizan para clarificar un programa, un ejemplo seria: enum
frutas { naranja, papaya, fresa, limón}, 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 posición 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 dirección. 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 básica 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 información en cout se utiliza el operador sobrecargado “<<” y para
tomar información en cin se utiliza el operador sobrecargado “>>”.
Veamos el ejemplo 1.-
PROGRAMA

// prog31.cpp: define el punto de entrada de la aplicación 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;
getch(); }

9
PROGRAMACION ORIENTADA A OBJETOS 2015
EJECUCION

En la lectura se asignara valores a las variables sea una por una o varias a la vez, como en el ejemplo 2.-
PROGRAMA

// prog41.cpp: define el punto de entrada de la aplicación de consola.


/* CODIGO:
FECHA: 19 de Enero de 2015
OBJETIVO: Mostrar las diferentes formas de leer valores y almacenarlos en las variables
*/
#include "stdafx.h"
#include<iostream>
#include<conio.h>
using namespace std;
void main( )
{ int voltaje,corriente;
system("cls");
cout<<"Ingrese voltaje ==> ";cin>>voltaje;
cout<<"Ingrese corriente=> ";cin>>corriente;
cout<<"Voltaje = "<<voltaje<<endl;
cout<<"Corriente = "<<corriente<<endl;
cout<<"Potencia ==> "<<voltaje*corriente<<endl;
cout<<"Ingrese voltaje y corriente separados por blancos ==> "; cin>>voltaje>>corriente;
cout<<"Potencia ==> "<<voltaje*corriente<<endl;
_getch();}
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 carácter nueva línea (decimal 10) y \t será tabulación
horizontal. La tabla es:.

Secuencia Valor Símbolo 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 línea (linefeed)
\r 0x0D CR Retorno de carro (carriage return)
\t 0x09 HT Tabulación horizontal (H Tab)
\v 0x0B VT Tabulación vertical (V Tab)

Veamos el ejemplo 3.-

10
PROGRAMACION ORIENTADA A OBJETOS 2015 11
FUNDAMENTOS DE LA PROGRAMACION ORIENTADA A OBJETOS
PROGRAMA
// prog51.cpp: define el punto de entrada de la aplicación de consola.
/* CODIGO: cppcap01ejem03
FECHA: 19 de Enero de 2015
OBJETIVO: MANEJO DE SECUENCIAS DE ESCAPE */
#include "stdafx.h"
#include<iostream>
#include<conio.h>
using namespace std;
void main( )
{ // CALCULO DE VALORES PARA UNA FUNCION DE LA FORMA A*X^2+B*X+C
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++)
EJECUCION
{ fx= A*x*x+B*x+C;
cout<<"\t\t"<<x;
cout<<"\t\t"<<fx<<"\n";
x=x+dx; }
_getch() ; }

EJECUCION

Manipulación y formato de datos de salida.- El precisar con cuantos decimales debe mostrarse
nuestros datos de salida y que ancho y otras características 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;

11
PROGRAMACION ORIENTADA A OBJETOS 2015
cout << setw( 6 ) << 12 << endl;
cout << seprecision( 2 ) << 12.325 << endl;
3. Mediante el uso de banderas (indicadores) como argumentos de la función miembro setf( ) del objeto
de flujo:
cout.setf( ios::fixed );
cout.setf( ios::showpoint );
Veamos la tabla de manipuladores de flujo de salida:
MANIPULADOR FUNCION QUE REALIZA
dec Establece la base decimal.
hex Establece la base hexadecimal
oct Establece la base octal.
endl Inserta nueva línea y cambia de flujo
ends Inserta un cero nulo al final de la cadena.
flush Vacía el flujo
setbase(int n) Establece la conversión de base.
resetiosflags(long f) Limpia el formato especificado por f.
setiosflag( long f) Establece formato especificado por f.
setfill(int c) Rellena con el carácter c.
setprecision(int n) Establece precisión de punto flotante a n.
setw(int 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 aplicación 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:

12
PROGRAMACION ORIENTADA A OBJETOS 2015 13
FUNDAMENTOS DE LA PROGRAMACION ORIENTADA A OBJETOS
INDICADOR LO QUE REALIZA
ios::left Justifica a la izquierda dentro de setw.

ios::rigth Justifica a la derecha dentro de setw.

ios::scientific Muestra números en notación científica.

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.

ios::uppercase Formatea la parte literal a mayúscula.

ios::showbase Imprime el prefijo de base.

Ios::showpos Imprime signo

Ios::showpoint Completa con ceros.

Ejemplo 5.- Veamos un ejemplo que maneje la precisión de salida de un valor real.
PROGRAMA
// prog71.cpp: define el punto de entrada de la aplicación de consola.
//OBJETIVO: Muestra el uso del manipulador setprecision( )
//para indicar el número de dígitos 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(); }

13
PROGRAMACION ORIENTADA A OBJETOS 2015
PROBLEMAS
1. Dado un numero “n” se pide calcular la cantidad de cifras impares y de cifra pares que tiene “n”.
Utilizar variables globales.
PROGRAMA

// prog81.cpp: define el punto de entrada de la aplicación de consola.


//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++;
num=num/10; }
cout<<"Cifras pares : "<<contp<<endl;;
cout<<"Cifras impares: "<<conti;getch(); }

Nota: Observe algunos detalles, las variables son globales, por lo tanto los contadores se inicializan
automáticamente desde cero. Además num es una variable entera solo debe permitir valores de 5 cifras
pero se sobrepasa, quiere decir que el tipo entero ocupa más de dos bytes (4 bytes).
2.- Escriba un programa que utilice la definición del tipo enumerado color, e imprima el color escogido..
PROGRAMA
// prog10.cpp: define el punto de entrada de la aplicación 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();}

14
PROGRAMACION ORIENTADA A OBJETOS 2015 15
FUNDAMENTOS DE LA PROGRAMACION ORIENTADA A OBJETOS
EJECUCION

3.- Elaborar un programa que simule la acción de una calculadora de bolsillo: lee una secuencia de valores
numéricos separados por operadores aritméticos (+, -, *, /), y calcula el valor de la expresión definida por
esta secuencia. El resultado del cálculo se produce cuando se lee el operador ‘=’.
PROGRAMA
/* prog02.cpp: define el punto de entrada de la aplicación de consola.
OBJETIVO: Simula la acción de una calculadora de bolsillo o sea lee un operando, luego el operador ,
a continuación el operando realiza la operación y lee un nuevo operando y así hasta que
el operador sea el signo igual y muestre el resultado */
#include "stdafx.h"
# include<iostream>
# 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

15
PROGRAMACION ORIENTADA A OBJETOS 2015

CAPITULO II

16
PROGRAMACION ORIENTADA A OBJETOS 2015 17
FUNDAMENTOS DE LA PROGRAMACION ORIENTADA A OBJETOS
CAPITULO II
INSTRUCCIONES DE CONTROL EN “C”
2. INTRODUCCION
2.2. EXPRESIONES Y OPERADORES
2.2.1. Expresiones.- Una expresión es una secuencia de operadores y operandos, aunque
también podemos tener algunas expresiones que salen de este formato. Ejemplo : a = *c;
p1 = &c; numero ++.
2.2.2. Operadores aritméticos.- Nos permiten realizar las operaciones aritméticas básicas sean
del tipo real (float) o entero, considerando que en lenguaje “C” se define el tipo de operación
por los operandos, si al menos un operando es del tipo float la operación se realizara en el
modo real.
Operador Entero Real .
+ Unitario mas Unitario mas
- Unitario menos Unitario menos
+ Suma Suma
- Resta Resta
* Producto Producto
/ Cociente de división entera Cociente real
% Resto de división entera
++ Incremento
-- Decremento

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 división es 1 y el resto 1.
En el segundo caso la división es 0 y el resto 3
En el tercer caso la división es 2 y en el cuarto caso la división 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 asignación, relación, lógicos y desplazamiento.-
 Operadores de asignación.- Consideramos el símbolo = operador de asignación. Por ejemplo
podemos colocar cont1 = cont2 = cont3 = 0; Le asignamos el valor cero a los tres contadores
pero esta operación se realiza de izquierda a derecha. También podemos abreviar c+=5 ; que es
equivalente a c = c +5, tenemos lasiguiente tabla

Operador Abreviatura Sentencia


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

17
PROGRAMACION ORIENTADA A OBJETOS 2015

 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 también podemos tener a = b > c en cuyo caso a valdrá 1 si b es mayor que c y cero en
caso contrario.
 Operadores lógicos.- Son el not el and y el or, Relacionan operandos booleanos y su resultado
es booleano, estos son:
 Negación ! el not lógico
 And && el and para que sea verdadero sus dos operandos deben ser verdaderos.
 Or || 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 aplicación 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 Dirección.- Tenemos los siguientes
 * accede el campo apuntado.
 & Devuelve la dirección del operando

18
PROGRAMACION ORIENTADA A OBJETOS 2015 19
FUNDAMENTOS DE LA PROGRAMACION ORIENTADA A OBJETOS

Ejemplo2:Escriba un programa que maneje punteros de forma básica.


PROGRAMA

// prog22.cpp: define el punto de entrada de la aplicación 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 dirección de a
contenida en p1
cout<< dec; // vuelve al formato decimal
p1 = &b; // p1 toma la dirección 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 dirección de a
contenida en p1
_getch(); }

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 también altera prioridad
 [ ] Acompaña a los arrays
 :: Indica ámbito void empleado :: planilla ( ) // indica la función planilla perteneciente a
empleado.
Ejemplo 3.- Escriba un programa que simule un juego de dados. Las reglas son:
a) En la primera jugada si obtiene una suma de los dados de

19
PROGRAMACION ORIENTADA A OBJETOS 2015
2,3 o 12 pierde el juego ; 7 u 11 gana el juego ; Otra suma vuelve a jugar
b) A partir de la segunda jugada el jugador sigue las reglas
Si repite la primera suma gana ; Obtiene 7 pierde
PROGRAMA
// prog32.cpp: define el punto de entrada de la aplicación de consola.
// OBJETIVO: Escribir un programa que simula un juego de dados */
#include "stdafx.h"
#include<iostream>
#include<conio.h>
#include<stdlib.h>
#include<time.h>
using namespace std;
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";
}
_getch();
}

20
PROGRAMACION ORIENTADA A OBJETOS 2015 21
FUNDAMENTOS DE LA PROGRAMACION ORIENTADA A OBJETOS

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 ( condición)
{......(1)............. ;
.....................; }
[else
{ .........(2)..........;
...................; }]
ss
Funcionamiento:
Se evalúa la condición, si esta se cumple se ejecuta el bloque 1, caso contrario se ejecuta el bloque 2, si
existe. Finalmente pasa el control de ejecución 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)
{……………………..;
…………………….;
}
………………………….;
}

21
PROGRAMACION ORIENTADA A OBJETOS 2015
else
{ ………………………..;
………………………..;
………………………….;
}
Podemos observar que el if con condicion2 esta anidado en el if con condicion1.
Ejemplo 4.- Programa que lee un número y me muestra si es múltiplo de 3, 4 o 5.
// prog42.cpp: define el punto de entrada de la aplicación 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 */
#include "stdafx.h"
# include<iostream>
# include<conio.h>
using namespace std;
void main( )
{ int numero;
system("cls");
cout<< " ingrese un numero ==> ";
cin>>numero;
if ((numero> 9) && (numero<10000))
{ 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
cout<<"Numero fuera del rango";
getch(); }

22
PROGRAMACION ORIENTADA A OBJETOS 2015 23
FUNDAMENTOS DE LA PROGRAMACION ORIENTADA A OBJETOS

Ejemplo 5.- Programa que lee tres notas y halla el promedio eliminando la menor y duplicando la mayor.
PROGRAMA
// prog52.cpp: define el punto de entrada de la aplicación 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;
void main( )
{ int nota1,nota2,nota3,menor,mayor,may1,men1;
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;
cout<<"El promedio es : "<<promedio;
_getch(); }

Ejemplo 6.- Escriba un programa que lea 20 edades y me indique cuantos son :
 Bebes (0-5años)
 Niños (5-12 años)
 Adolescentes (12-16 años)
 Jóvenes (16-25)
 Adultos (25-50)
23
PROGRAMACION ORIENTADA A OBJETOS 2015
 Mayores (50 a mas)

PROGRAMA

// proy62.cpp: define el punto de entrada de la aplicación de consola.


/* OBJETIVO: Ejemplo que lee 20 edades y me indique cuantos son :
Bebes (0-5años),Niños (5-12 años), Adolescentes (12-16 años), Jóvenes (16-25) , Adultos
(25-50), Mayores (50 a mas) */
#include "stdafx.h"
# include<iostream>
# include<conio.h>

using namespace std;


void main( )
{ int edad,i;
int contb=0;//contador de bebes
int contn=0;//contador de niños
int conta=0;//contador de adolescentes
int contj=0;//contador de jovenes
int contd=0;//contador de adultos
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<< " niños"<<endl;
cout<<conta<< " adolescentes"<<endl;
cout<<contj<< " jovenes"<<endl;
cout<<contd<< " adultos"<<endl;
cout<<contm<< " mayores"<<endl;
getch();
}

2.3.2. Sentencia switch.- Deriva el control hacia uno de varios puntos del programa, permite realizar
una selección múltiple.
Forma General

switch ( expression)
{ case const1 : ................... ;
....................;
break;
case const2 : ................... ;
....................;

24
PROGRAMACION ORIENTADA A OBJETOS 2015 25
FUNDAMENTOS DE LA PROGRAMACION ORIENTADA A OBJETOS
break;
case const3 : ................... ;
....................;
break;
case const4 : ................... ;
....................;
break;
[ default : .....................;
.....................;]
}
Funcionamiento:
La expresión de control o selector se evalúa y se compara con cada una de las etiquetas de case.
La expresión 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 expresión selector es igual a una de las etiquetas case –por ejemplo, etiquetai- entonces la
ejecución comenzará con la primera sentencia de la secuencia sentenciai y continuará hasta que se
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 después que siga la ejecución 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 aplicación 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

25
PROGRAMACION ORIENTADA A OBJETOS 2015

Note que el default no tiene break y es que la salida en este caso es por término de la instrucción switch.
ESTRUCTURAS DE REPETICION
2.3.3. Sentencia while.-Nos permite ejecutar repetidamente un grupo de sentencias hasta que el
valor de la expresión se hace cero (condición falsa)
Forma General
while ( expresión)
{................... ;
.....................;
.....................;
}
Funcionamiento:
La expresión booleana o condición se evalúa y el bucle se repite mientras la condición es verdadera. El
bucle while nunca puede iterar si la condición comprobada es inicialmente falsa.
Ejemplo8:
PROGRAMA

// prog82.cpp: define el punto de entrada de la aplicación de consola.


#include "stdafx.h"
#include<iostream>
#include<conio.h>
#include<stdlib.h>
#include<time.h>
using namespace std;
void main( )
{ int numero, suma = 0;
int cont = 1;
system("cls");
srand(time(NULL));
while ( cont <= 1000 )
{numero=rand()%20;
cout<<"\t"<<numero<<endl;
suma = suma+ numero;
cont++; }
cout<< "La media es = " << suma / 1000.0;
getch(); }

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 condición y
por lo tanto se sale del bucle while, a esta variable denominada cont se le conoce tambiéncomo variable
de control del bucle while, esta variable necesariamente debe ser modificada dentro del rango del while
pues de no suceder esto estaríamos en un lazo infinito.

26
PROGRAMACION ORIENTADA A OBJETOS 2015 27
FUNDAMENTOS DE LA PROGRAMACION ORIENTADA A OBJETOS
2.3.4. Sentencia do-- while.- Las sentencias se ejecutan repetidamente hasta que el valor de la
expresión se hace cero (falso)
Forma General
do
{................... ;
.....................;
.....................;
} while ( expresión);
Funcionamiento:
Se ejecutan las sentencias y a continuación se evalúa la expresión, 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 condición
(expresión) sea falsa(cero) y el control pasa a la sentencia siguiente.
Ejemplo 9:
El siguiente ejemplo visualiza los números, cuadrados y cubos de los 20 primeros números:
PROGRAMA

// prog92.cpp: define el punto de entrada de la aplicación 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 ;
numero=numero +1.0;
}while (numero < 21);
getch(); }

27
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 iteración de un bucle un número determinado de veces. El lazo for
tiene tres componentes: exp1, inicializa las variables de control del bucle; exp2, es la condición que
determina si el bucle realiza otra iteración; la última parte del encabezado del for(exp3 ) es la
cláusula que incrementa o decrementa las variables de control del bucle.
Exp1se utiliza para inicializar la variable de control de bucle; a continuación exp2 se evalúa, 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 iteración continúa hasta que exp2 es falsa (cero), en cuyo momento el control
pasa a la sentencia siguiente al bucle.
Ejemplo 10:Imprimir todos los primos de dos dígitos.
// prog102.cpp: define el punto de entrada de la aplicación de consola.
/* FECHA: 08 Setiembre del 2015
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)
cout<<i<<endl;}
_getch(); }

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

28
PROGRAMACION ORIENTADA A OBJETOS 2015 29
FUNDAMENTOS DE LA PROGRAMACION ORIENTADA A OBJETOS
cout<< sqrt(x)<< endl;}
La sentencia break también se utiliza para salir de la sentencia switch.
La sentencia continue termina la iteración que se está realizando y comenzará de nuevo la siguiente
iteración:
Advertencia:
• Una sentencia break puede ocurrir únicamente en el cuerpo de una sentencia for, while, do o switch.
• Una sentencia continue sólo 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 aplicación 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;
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:

29
PROGRAMACION ORIENTADA A OBJETOS 2015

2. Escriba un programa que imprima todos los números de tres cifras que sean capicúas y cuya suma de
sus dígitos sea par.
Solucion:
// cap3prob2.cpp: define el punto de entrada de la aplicación 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 capicúas y suma dígitos 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;
if( (i== numinv)&& ( (sumadigitos%2)==0))
cout<<"\t\t"<< i << endl;
} // FIN DEL FOR
_getch( ); }

3. En la UNI se rinde examen de admisión y de un grupo de 20 postulantes para cuatro facultades cuyos
codigos son:
Codigo Facultad
‘S’ Ing. De Sistemas
‘M’ Ing. Mecánica
‘Q’ Ing. Química
‘A’ Ing. Ambiental

30
PROGRAMACION ORIENTADA A OBJETOS 2015 31
FUNDAMENTOS DE LA PROGRAMACION ORIENTADA A OBJETOS
La Universidad aplica tres tipos de exámenes a sus postulantes. Los postulantes que obtengan por lo
menos dos exámenes aprobados (mayor o igual a 11) son admitidos caso contrario son rechazados.
En base a esto se pide diseñar un algoritmo que permita:
a) Mostrar por cada postulante el mensaje admitido o rechazado.
b) Presentar el número de ingresantes pro facultad.

Solución:
// cap2prob3.cpp: define el punto de entrada de la aplicación 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;
}
}
else
cout<<"Postulante rechazado"<<endl;
}
cout<< " Ingresaron a Ing. Sistemas = "<<conts<<endl;;

cout<< " Ingresaron a Ing. Mecánica = "<<contm<<endl;


cout<< " Ingresaron a Ing. Química = "<<contq<<endl;
cout<< " Ingresaron a Ing. Ambiental= "<<conta<<endl;

getch( );
}

31
PROGRAMACION ORIENTADA A OBJETOS 2015

4. Se desea leer un conjunto de numeros enteros de tres cifras hasta encontrar un número negativo.
Luego mostrar la cantidad de veces que aparece el digito 3 en todos los números positivos leídos.

Solucion:
PROGRAMA
// cap2prob4.cpp: define el punto de entrada de la aplicación de consola.
#include "stdafx.h"
/* OBJETIVO: Muestra cuantas veces se aparece el digito 3 en todos los números Leídos 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;
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

32
PROGRAMACION ORIENTADA A OBJETOS 2015 33
FUNDAMENTOS DE LA PROGRAMACION ORIENTADA A OBJETOS

5. De un experimento de física 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++)
{ temperatura= random(41)-20;
cout<< temperatura<<endl;
if( temperatura < 0)
{
if (temperatura == tempmayorneg)
conttemp= conttemp+1;
if(temperatura > tempmayorneg)

33
PROGRAMACION ORIENTADA A OBJETOS 2015
{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.
SOLUCIÓN:
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 "stdafx.h"
#include"iostream"
#include"conio.h"
#include"ctype.h"
#include"stdlib.h"
#include"time.h"
using namespace std;
void main ()
{ int v1,v2, v3, v4;
int c0,c1,c2,c3,c4,c5,c6;
srand(time(NULL));
v1 = rand()%13+1;
v2 = rand()%13+1;
v3 = rand()%13+1;
v4 = rand()%13+1;
cout<<v1<< " "<<v2<<" "<<v3<<" "<<v4<<endl;
c0 = ((v1==v3)&&(v3==v4));
c1 = ((v1==v2)&&(v2==v3));
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

34
PROGRAMACION ORIENTADA A OBJETOS 2015 35
FUNDAMENTOS DE LA PROGRAMACION ORIENTADA A OBJETOS
cout<<"Todas son distintas"<<endl;
getch(); }

7.- Escribir un programa que visualice el manejo de punteros utilizándolos primero con variables simple y
después con vectores numéricos y char.(cadenas)
SOLUCIÓN:
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()
{ 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;

35
PROGRAMACION ORIENTADA A OBJETOS 2015
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;
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 capítulo 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 trío , un full (3 iguales y dos iguales) o póker ( cuatro iguales)
3. Escriba un programa que me permita descubrir una clave de cuatro dígitos 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.

36
PROGRAMACION ORIENTADA A OBJETOS 2015 37
FUNDAMENTOS DE LA PROGRAMACION ORIENTADA A OBJETOS
#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 común divisor y el mínimocomúnmúltiplo de dos valores enteros.
6. Se realizan elecciones entre tres partidos politicos,escribaun programa que me permita indicar el ganador y si además supera
el 50% será el ganador oficial en primera vuelta.

37
PROGRAMACION ORIENTADA A OBJETOS 2015

CAPITULO III

38
PROGRAMACION ORIENTADA A OBJETOS 2015 39
FUNDAMENTOS DE LA PROGRAMACION ORIENTADA A OBJETOS

CAPITULO III
FUNCIONES EN LENGUAJE “C + +”
3 Definición.- Es un conjunto de instrucciones agrupadas que tienen un nombre común y que realizan
un cálculo (o proceso) especifico. Todo programa en lenguaje “C” se desarrolla basándose en
funciones, estas posteriormente pueden formar una librería 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 Función sqrt

Syntax
#include <math.h>
double sqrt(double x);

 La función sqrt está incluida en la librería math.h


 La invocación debe ser con el nombre o sea sqrt y el parámetro indicado o sea un valor ,
variable o expresión 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
sería:
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 librería math.h
 Función abs
#include <math.h>
#include <stdlib.h>
int abs(int x);
Retorna el valor absoluto de una variable entera, y cuando se incluye la librería stdlib.h
tambien considera valores bcd. La función 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
FECHA: 15 de agosto 2007
OBJETIVO: ejemplo DE LA FUNCION ABS() Y FABS()*/
#include <iostream.h>
#include <conio.h>
#include <stdlib.h>

39
PROGRAMACION ORIENTADA A OBJETOS 2015
#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.
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 aplicación de consola.
#include "stdafx.h"
/* OBJETIVO: Ejemplo de las funciones ceil() y floor().*/

40
PROGRAMACION ORIENTADA A OBJETOS 2015 41
FUNDAMENTOS DE LA PROGRAMACION ORIENTADA A OBJETOS
#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
rectángulonotable y compruebe que seno y coseno de los ángulos complementarios de un triangulo
rectángulo son iguales.
PROGRAMA
// prog23.cpp: define el punto de entrada de la aplicación de consola.
/*OBJETIVO: Ejemplo de las funciones SIN() y COS().*/
#include"stdafx.h"
#include<iostream>
#include<conio.h>
#include<math.h>
using namespace std;
void main()
{ double anga,angb,senoa,cosenob;
system("cls");

41
PROGRAMACION ORIENTADA A OBJETOS 2015
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

 Función 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 aplicación 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

 Función log()

Syntax
#include <math.h>
double log(double x);
long double logl(long double x);

Retorna el logaritmo natural de x

42
PROGRAMACION ORIENTADA A OBJETOS 2015 43
FUNDAMENTOS DE LA PROGRAMACION ORIENTADA A OBJETOS
 Función log10()
Syntax
#include <math.h>
double log10(double x);
long double log10l(long double x);

Retorna el logaritmo en base 10 de x


 Función 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(), compárelas.
PROGRAMA
// prog33.cpp: define el punto de entrada de la aplicación 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

B) Funciones de la librería stdio.h

43
PROGRAMACION ORIENTADA A OBJETOS 2015
 Función gets()

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

Captura una cadena que puede contener espacio en blanco del flujo estándar.
 Función printf()

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

Ejemplo 6.- Escribe una salida formateada en el flujo estándar de salida.


PROGRAMA
// prog53.cpp: define el punto de entrada de la aplicación de consola.
#include "stdafx.h"
/*OBJETIVO: Utilizar la funcio gets() y la función 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

 Función clock()

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

Ejemplo 7.- Escribe un programa que nos permita trabajar con la función clock.
PROGRAMA

44
PROGRAMACION ORIENTADA A OBJETOS 2015 45
FUNDAMENTOS DE LA PROGRAMACION ORIENTADA A OBJETOS
/* CODIGO: cppcap03ejem07
FECHA: 15 de julio del 2012
OBJETIVO: Maneja la función 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

 Funcióntime()

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

Ejemplo 8.- Escribe


Borland un programa
C++ 5.0 Programmer's que nos permita trabajar con la función time.
Guide

Explicar.
PROGRAMA
/* CODIGO: cppcap03ejem08
FECHA: 15 de julio del 2012
OBJETIVO: Maneja la función time*/

45
PROGRAMACION ORIENTADA A OBJETOS 2015
#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 función cuenta los segundos transcurridos desde 1 enero 70 hasta el día actual.
Funciones que generan números aleatorios
Son las funciones randomize(), rand() y random (num).. Veamos su sintaxis de cada una de ellas.
 Función rand()

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

Genera números aleatorios entre 0 y RAND_MAX, constante definida en stdlib.h


 Función randomize()

Syntax
#include <stdlib.h>
#include <time.h>
void randomize(void);
Inicializa el generador de números.
 Función random(n)

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

Retorna valores entre 0 y num – 1.


46
PROGRAMACION ORIENTADA A OBJETOS 2015 47
FUNDAMENTOS DE LA PROGRAMACION ORIENTADA A OBJETOS
Ejemplo 9.- Generar números aleatorios entre un cota mínima y una cotamáxima.
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 mínima: ";cin>>cota_minima;
cout<<"Ingrese cota máxima: ";cin>>cota_maxima;
cout<<"Ingrese Nro. Términos: ";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 librería stdlib.h
 Función atof()

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

Convierte de cadena a número de punto flotante.


 Función atoi()

Syntax
#include <stdlib.h>
int atoi(const char *s);
Convierte de cadena a númeroentero.
 Función atol()

Syntax
#include <stdlib.h>
long atol(const char *s);
Convierte de cadena a numero long (entero largo).
 Función itoa()

47
PROGRAMACION ORIENTADA A OBJETOS 2015
Syntax
#include <stdlib.h>
char *itoa(int value, char *string, int radix);

Convierte un entero a cadena.


 Función 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.- También podemos crear nuestras propias funciones y como
mencionamos al inicio de este capítulo posteriormente podemos formar nuestra librería partícula. La
estructura de una función definida por el usuario es :
Forma General
Tipo nombrefuncion ( lista de parámetros)
{................... ;
.....................;
.....................;
[return(.....);]
.....................;
}
Donde:
Tipo .............. Tipo de valor que devuelve la función en algunos
casos no devuelven ningún valor y el tipo será
void (vacio).
nombrefuncion ......Identificador de la función
Lista de parámetros...Establecen la comunicación entre la función que
realiza la llamada y nuestra función
return( ) .....Permite retornar un valor a la función que realizo la
llamada, si la función 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

48
PROGRAMACION ORIENTADA A OBJETOS 2015 49
FUNDAMENTOS DE LA PROGRAMACION ORIENTADA A OBJETOS
break; }
return(sw);
}
La llamada será
If ( primo(a))// a necesariamente es entero
cout<< a << “ Es primo”<< endl;
Ejemplo:
void leer ( long *código, char nombre[40], char dirección[50])
{ // programa de lectura
clrscr();
cout << “ingrese código: “; cin>>*codigo;
cout << “ Ingrese nombre: “;gets(nombre); //Función de lectura
cout << “Ingrese dirección: “; 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)
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) ;

49
PROGRAMACION ORIENTADA A OBJETOS 2015
3.2.2 Comunicación entre funciones.- La comunicación se puede realizar de dos maneras:
 Vía variables Globales
 Vía argumentos parámetros

a)Vía variables globales.- Se realiza cuando declaranmás variables en unárea de acceso público 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( );}

// 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 comunicación es a través 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 comunicación argumentos – parámetros, que

independiza las variables de los procedimientos.

50
PROGRAMACION ORIENTADA A OBJETOS 2015 51
FUNDAMENTOS DE LA PROGRAMACION ORIENTADA A OBJETOS

b) Vía argumentos y parámetros. Esto se establece como explicamos a continuación:


Llamada por valor y llamada por referencia.- Cuando una función es llamada se le debe enviar una
lista de argumentos que son los que establecen la comunicación entre los dos módulos. La pregunta
es, ¿Que argumentos enviar? Los argumentos enviados pueden ser valores o direcciones
dependiendo del parámetro: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 parámetro y el segundo
al ser variables solamente piden valores enteros pero el tercer parámetro al ser tipo puntero pide una
dirección de una variable simple de tipo float. Entonces la llamada será:

f1 ( a1, a2, &a3);

O sea se envía el contenido de a1 y de a2 pero la dirección de a3, entonces


 a1 y a2 ha sido llamadas por valor
 a3 ha sido llamada por referencia
Funcionamiento de un subprograma tipo función.- Cuando aparecen el nombre de una función
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 parámetros. Como
lo visualizamos en el siguiente gráfico(Suponiendo que la llamada se realizo desde main):

main() f2()_

a1 35 p1

a2 40 p2

a3 p3

a4 p4

MEMORIA ASIGNADA A main () MEMORIA ASIGNADA A f2()

 Se ejecuta la función hasta que la primera sentencia return es alcanzada o termina la función.
Cuando termina la ejecución de la función sucede lo siguiente:
51
PROGRAMACION ORIENTADA A OBJETOS 2015
 El control retorna al punto siguiente desde donde se realizo la llamada
 Sigue la ejecución de main (En este caso).
EJEMPLO
// prog13.cpp: define el punto de entrada de la aplicación 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)
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
ejecución, la forma de indicar una function de este tipo es colocando el especificador inline antes de
la definición de la función. Veamos el formato:

52
PROGRAMACION ORIENTADA A OBJETOS 2015 53
FUNDAMENTOS DE LA PROGRAMACION ORIENTADA A OBJETOS
inline tipo_devuelto nombre_funcion (parámetros)
{………….;
………….;
Instrucciones;
}
La llamada será normal como a las otras funciones, pero en el cuerpo de la función no podrá
haber:
 Variables de tipo static
 Sentencias de bucle.
 Sentencia switch
 Go to
Ejemplo 12.-veamos un ejemplo de uso de una función inline
PROGRAMA
/ prog63.cpp: define el punto de entrada de la aplicación 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)
{ float xmin,xmax,deltax,fx,x;
system("cls");
cout<<"Ingrese x mínimo: ";cin>>xmin;
cout<<"Ingrese x máximo: ";cin>>xmax;
cout<<"Ingrese variación de x: ";cin>>deltax;
x=xmin;
while( x<=xmax)
{fx=fi(x);
cout<<"x= "<<x<<" f(x)= "<<fx<<endl;
x=x+deltax;}
_getch(); }

Fíjense que es una función con un cálculo simple pues retorna el valor de la función para un argumento
3.4 Funciones Recursivas.- Una función recursiva es una función que se llama así misma para resolver
un cálculo o proceso.
Las características de la recursividad son :
 En cada llamada recursiva el grado de dificultad del cálculo o proceso disminuye.
 Cada llamada tendrá su propio espacio de memoria.
 Habrá una llamada no recursiva en algún instante a partir del cual se solucionara el problema
a resolver.
Si tenemos el cálculo de factorial:
!N = N*!(N-1)…….. calcular el factorial de (N-1) es más sencillo que calcular el factorial de N.

53
PROGRAMACION ORIENTADA A OBJETOS 2015
Además ! 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 aplicación 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 aplicación de consola.


//OBJETIVO: Halla serie de fibbonacci

#include "stdafx.h"
# include<iostream>
# include<conio.h>
using namespace std;
int cont=0;
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.- También podemos devolver la dirección de una función, veamos int (*fpun)
(int )será la declaración de un puntero a función que recibe un int y devuelve un int; en cambio int
*fp(int ) será el prototipo de una función que recibe un int y devuelve puntero a int.
Ejemplo 14.- Escriba un programa usando el concepto de puntero a función.
PROGRAMA
/* CODIGO: cppcap03ejem14
FECHA: 16 de agosto de 2012

54
PROGRAMACION ORIENTADA A OBJETOS 2015 55
FUNDAMENTOS DE LA PROGRAMACION ORIENTADA A OBJETOS
OBJETIVO: Ejemplo de puntero a función. */
# 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

PROBLEMAS
Problema 1.- EJEMPLO DE FUNCIONES QUE SE COMUNICAN MEDIANTE VARIABLES GLOBALES.
1.- Suponga que tiene un numero “num” y una aproximación a su raíz cuadrada. Para obtener una
aproximación más exacta a la raíz cuadrada real se puede utilizar la formula: aproximaciónnueva = (n/
aproximaciónanterior)+aproximaciónanterior)/2. Utilizando esta información, escriba un programa que
solicite al usuario un número y una suposición inicial de su raíz cuadrada. Con los datos el programa
calculara una aproximación de la raíz cuadrada que sea exacta hasta 0.00001.
PROGRAMA
// prog63.cpp: define el punto de entrada de la aplicación de consola.
// OBJETIVO: Halla raíz cuadrada por aproximación*/

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

55
PROGRAMACION ORIENTADA A OBJETOS 2015
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 raíz ";
cin>>aprox; }
void procesar( )
{ do{ raiz=aprox;//almacenar la aproximación
aprox=(num/raiz + raiz)/2.0;//calcular nueva aproximación
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 comunicación vía argumentos y parámetros, pueda calcular la nota
final, considerando que el promedio de prácticas se halla eliminando la menor nota de las cuatro
prácticas, la nota final se hallara
Promedio de prácticas = (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 aplicación 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 prácticas 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;

56
PROGRAMACION ORIENTADA A OBJETOS 2015 57
FUNDAMENTOS DE LA PROGRAMACION ORIENTADA A OBJETOS
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); }

Este programa halla una raíz positiva de la ecuación cubica x  x  x  1  0 , en el intervalo [0,5]
3 2
3.-
con un error menor que 0.001.

PROGRAMA
// prog83.cpp: define el punto de entrada de la aplicación 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)

57
PROGRAMACION ORIENTADA A OBJETOS 2015
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.
Código : Código del empleado es una cadena de 11 caracteres.
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 aplicación 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 código[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;

58
PROGRAMACION ORIENTADA A OBJETOS 2015 59
FUNDAMENTOS DE LA PROGRAMACION ORIENTADA A OBJETOS
//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);
}
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

59
PROGRAMACION ORIENTADA A OBJETOS 2015

5- Escriba un programa que halle los factores primos de un número 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);
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);
}
}

60
PROGRAMACION ORIENTADA A OBJETOS 2015 61
FUNDAMENTOS DE LA PROGRAMACION ORIENTADA A OBJETOS
EJERCICIOS PROPUESTOS
1. Escriba un programa que utilizando funciones pueda realizar operaciones con números complejos:
Suma, Resta, Multiplicación y División. Cada operación debe realizarse con funciones además de la
lectura y escritura. Debe trabajar con un menú.
2. Escriba un programa que calcule áreas, debe calcular áreas para cuadrados, rectángulos, triángulos y
círculos; cada calculo debe realizarse con una función.
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%)
 Remuneración por dirección (10%)
4. Escriba un programa que utilizando el concepto de puntero a funciones evalúe una función 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
exámenesconsidere, que el sistema de evaluación puede ser:
 Sistema A : promedio de prácticas es el promedio de las cuatro practicas y el promedio final es la
suma de los dos exámenes mas el promedio de prácticas divididos entre tres.
 Sistema B : promedio de prácticas es el promedio de tres practicas eliminando la menor y el
promedio final es la suma del primer examen más el segundo examen duplicado el promedio de
prácticas divididos entre cuatro.
6. Escriba un programa que resuelva el problema de las torres de Hanói para n discos utilizando una
función recursiva. En las torres de Hanói se trata de pasar “n discos” de un eje “Origen” a un eje
“Destino” utilizando un eje auxiliar. Las reglas son :
 Solo se puede mover un disco a la vez.
 Nunca un disco de mayor diámetro puede estar sobre un disco de menor diámetro.

61
PROGRAMACION ORIENTADA A OBJETOS 2015

CAPITULO IV

62
PROGRAMACION ORIENTADA A OBJETOS 2015 63
FUNDAMENTOS DE LA PROGRAMACION ORIENTADA A OBJETOS

CAPITULO IV

ARREGLOS EN LENGUAJE “C”


4.1 Definición.- Un arreglo es una colección de elementos del mismo tipo; por lo tanto es una estructura
homogénea. Su declaración se realiza indicando al compilador sus características que son tipo,
nombre y tamaño. Ejemplo:
int datos[10];la información que se entrega al compilador será:
 Nombre del arreglo: datos
 Tipo de componente: variable simple entera
 Tamaño 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]
4.2 Acceso a elementos.- Los elementos de un arreglo se designan con un subíndice 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] 20

a[1]
25

a[2] 35

a[3] 40

4.3 Operaciones con Arrays unidimensionales (vectores).- Las operaciones iníciales 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 aplicación de consola.
//OBJETIVO: Entrada y salida de un vector
#include "stdafx.h"

63
PROGRAMACION ORIENTADA A OBJETOS 2015
# 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(); }

//OBJETIVO: Entrada y salida de un vector


#include "stdafx.h"
#include<iostream>
#include<conio.h>
#include<stdlib.h>
#include<time.h>
void leer(int *n,int dato[50]);
void escribir(int n,int dato[50]);
using namespace std;
void main( )
{ int nota[50],n,i;
system("cls");
leer(&n,nota);
escribir(n,nota);
}
void leer(int *n,int dato[50])
{ int i;
srand(time(NULL));
cout << " Ingrese n => "; cin >>(*n);
for (i=1;i<=(*n);i++)
{ dato[i] =rand()%20+1; }
}
void escribir(int n,int dato[50])
{ int i;
system("cls");
cout<<" SALIDA "<<endl<<endl;
for ( i=1; i<=n;i++)
{ cout<<"\t"<< dato[i]<< endl;}
_getch();
}
Operaciones con arreglos: Las demás operaciones las analizaremos algorítmicamente y después los
presentaremos en un menú en los problemas desarrollados.
Las operaciones más importantes con arreglos unidimensionales son :
 Adición

 Eliminación

 Búsqueda

 Ordenamiento

64
PROGRAMACION ORIENTADA A OBJETOS 2015 65
FUNDAMENTOS DE LA PROGRAMACION ORIENTADA A OBJETOS
ADICION: La operación de adición nos permite ingresar un elemento al vector de “n” componentes que
están siendo utilizadas.
Inicialmente tenemos: Vector A
N=6
A [1] A [2] A [3] A [4] A [5] A[6] A[7]
3 5 12 20 15 25

J= 4
X 14
Vamos a insertar el valor x = 14 en la posición j=4

Tener en cuenta que al insertar un nuevo valor el vector crecerá en un elemento.


Al finalizar los valores deberían 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 operación necesitamos tres pasos:
a) Realizar un corrimiento de una posición hacia la derecha de todos los valores desde la posición “N”
(N=6) hasta la posición “J” (J=4), el resultado sería:
N=6
A [1] A [2] A [3] A [4] A [5] A[6] A[7]
3 5 12 20 20 15 25
El algoritmo es:
Para i = N,J,-1
A[i+1]  A[i]
Fin Para
b) Adicionar el elemento X en la posición J
A[J]  X
El resultado seria
N=6
A [1] A [2] A [3] A [4] A [5] A[6] A[7]
3 5 12 14 20 15 25
c) Actualizar “N”

N = N +1
N=7
A [1] A [2] A [3] A [4] A [5] A[6] A[7]
3 5 12 14 20 15 25

65
PROGRAMACION ORIENTADA A OBJETOS 2015

Las instrucciones en Visual C++ serán:


cout<<"Ingrese posición de inserción: ";
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 aplicación de consola.
//OBJETIVO: adicion por inserción 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;}
//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

66
PROGRAMACION ORIENTADA A OBJETOS 2015 67
FUNDAMENTOS DE LA PROGRAMACION ORIENTADA A OBJETOS
ELIMINACION: La operación de eliminación nos permite sacar un elemento del vector de “n”
componentes que están siendo utilizadas.
Inicialmente tenemos: Vector A
N=6
A [1] A [2] A [3] A [4] A [5] A[6]
3 5 12 20 15 25

J= 3
Vamos a eliminar el tercer elemento del vector.
Finalmente deberíamos tener A[1] = 3, A[2] = 5, A[3] = 20, A[4] = 15, A[5] = 25.
Y “N” decrecería y seria 5.
Para realizar esta operación necesitamos dos pasos:
a) Realizar un corrimiento de una posición hacia la izquierda todos los valores desde la
posición “J+1” (J=3) hasta la posición “N” (N=6).:
N=6
A [1] A [2] A [3] A [4] A [5] A[6]
3 5 20 15 25 25
El algoritmo es:
Para i = J+1,N
A[i-1]  A[i]
Fin Para
b) Actualizar “N”.
NN-1
El resultado seria
N=5
A [1] A [2] A [3] A [4] A [5]
3 5 20 15 25

Las instrucciones en Visual C++ serán:


cout<<"Ingrese posición 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 aplicación de consola.


//OBJETIVO: Eliminacion
#include "stdafx.h"
#include<iostream>
#include<conio.h>
using namespace std;

67
PROGRAMACION ORIENTADA A OBJETOS 2015
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 operación de búsqueda es una de las más importantes. En todo proceso real siempre se
buscara un elemento dentro de un conjunto, o sea buscaremos información dentro de la data, labor
fundamental en informática.
La operación buscara un elemento X en un vector A de N elementos.
N=6
A [1] A [2] A [3] A [4] A [5] A[6] A[7]
3 5 12 20 15 25

¿X=A[1]? ¿X=A[2]? …… ¿X=A[i]?

X 19

Tenemos que tener en cuenta que la búsqueda terminara cuando encontremos el elemento buscado o
cuando llegamos al final de la estructura.

Algorítmicamente 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

68
PROGRAMACION ORIENTADA A OBJETOS 2015 69
FUNDAMENTOS DE LA PROGRAMACION ORIENTADA A OBJETOS
Fin Para
3.- Si ( x == A[i])
Entonces
3.1Escribir( “Valor hallado en posición “, pos)
Sino
3.2 Escribir( “Valor no hallado”)
Fin si

Las instrucciones en Visual C++ serán:


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 posición: "<<pos;
else
cout<< " Valor no hallado ";

PROGRAMA
// prog44.cpp: define el punto de entrada de la aplicación de consola.
//OBJETIVO: Operacion de bUSQUEDA
#include "stdafx.h"
# include<iostream>
# 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(); }

69
PROGRAMACION ORIENTADA A OBJETOS 2015
EJECUCION

ORDENAMIENTO: La operación de ordenamiento se realiza por etapas, en nuestro algoritmo por


comparación trataremos de poner el menor valor en la posición superior, pero en cada etapa ya no
participa el menor ya encontrado en la etapa anterior.
El método busca colocar el primer menor en la posición 1 en la etapa 1.
Colocar el segundo menor en la posición 2 en la etapa 2.
colocar el tercer menor en la posición 3 en la etapa 3.
En general se trata de colocar el i’esimo menor en la posición “i” en la etapa “i”.
Veamos
ETAPA 1
OBJETIVO. Llevar el menor 1(menor total) a la primera posición.
¿A[1] > A [2]? Si la respuesta es sí, se intercambian posiciones entre A[1] y A[2], como en este caso
A [1] A [2] A [3] A [4] A [5] A[6] A[7]
9 3 2 7 6 4 5

Después del intercambio tenemos


A [1] A [2] A [3] A [4] A [5] A[6] A[7]
3 9 2 7 6 4 5
¿A[1] > A [3]?. Si entonces.
A [1] A [2] A [3] A [4] A [5] A[6] A[7]
2 9 3 7 6 4 5
¿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 posición
Verificar que en la segunda etapa ya no participa el primer menor , pues ya encontró su posición final.

A [2] A [3] A [4] A [5] A[6] A[7]


9 3 7 6 4 5

70
PROGRAMACION ORIENTADA A OBJETOS 2015 71
FUNDAMENTOS DE LA PROGRAMACION ORIENTADA A OBJETOS

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


A [2] A [3] A [4] A [5] A[6] A[7]
3 9 7 6 4 5

¿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 posición


Verificar que en la tercera etapa ya no participa el primer menor y el segundo menor, pues ya alcanzaron
su posición final.
A [3] A [4] A [5] A[6] A[7]
9 7 6 4 5

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


A [3] A [4] A [5] A[6] A[7]
7 9 6 4 5

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


A [3] A [4] A [5] A[6] A[7]
6 9 7 4 5

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


A [3] A [4] A [5] A[6] A[7]
4 9 7 6 5
¿A[3] > A [7]?. No.

ETAPA 4
OBJETIVO. Llevar el menor 4 (Cuarto menor ) a la cuarta posición
A [4] A [5] A[6] A[7]
9 7 6 5
¿A[4] > A [5]?. Si
A [4] A [5] A[6] A[7]
7 9 6 5

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


A [4] A [5] A[6] A[7]

71
PROGRAMACION ORIENTADA A OBJETOS 2015
6 9 7 5
¿A[4] > A [6]?. Si
A [4] A [5] A[6] A[7]
5 9 7 6

ETAPA 5
OBJETIVO. Llevar el menor 5 (Quinto menor ) a la quinta posición
A [5] A[6] A[7]
9 7 6
¿A[5] > A [6]?. Si
A [5] A[6] A[7]
7 9 6
¿A[5] > A [7]?. Si
A [5] A[6] A[7]
6 9 7

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


OBJETIVO. Llevar el menor 6 (Sexto menor ) a la sexta posición
A[6] A[7]
9 7
¿A[5] > A [6]?. Si
A[6] A[7]
7 9

Volvemos a verificar el vector y tendremos


A [1] A [2] A [3] A [4] A [5] A[6] A[7]
2 3 4 5 6 7 9
Planteando la i’esima etapa dentro de las n-1 etapas, en forma algorítmica 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

72
PROGRAMACION ORIENTADA A OBJETOS 2015 73
FUNDAMENTOS DE LA PROGRAMACION ORIENTADA A OBJETOS
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 aplicación 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
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

73
PROGRAMACION ORIENTADA A OBJETOS 2015
Ejemplo 4.- Realizar una búsqueda binaria sobre un vector ordenado.
PROGRAMA
// prog44.cpp: define el punto de entrada de la aplicación de consola.
// OBJETIVO: Realizar una búsqueda 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])
{ 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 posición: "<<medio<<endl;
else
cout<<"Valor no hallado ... ";
_getch(); }

Ejemplo 5.- Realizar un ordenamiento usando la definición de vector


ordenado.x1<=x2<=x3<=x4…….<=xn.
PROGRAMA
// prog54.cpp: define el punto de entrada de la aplicación de consola.
//OBJETIVO: Ordenamiento x1<=x2<=x3.... */
#include "stdafx.h"
#include<iostream>
#include<conio.h>
using namespace std;
void main( )

74
PROGRAMACION ORIENTADA A OBJETOS 2015 75
FUNDAMENTOS DE LA PROGRAMACION ORIENTADA A OBJETOS
{ 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;
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 Definición.- Una matriz es un arreglo de 2 dimensiones donde el primer subíndice indica fila y el
segundo subíndice indica columna. Consideremos la siguiente declaración:
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 aplicación 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");

75
PROGRAMACION ORIENTADA A OBJETOS 2015
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 aplicación 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;
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

76
PROGRAMACION ORIENTADA A OBJETOS 2015 77
FUNDAMENTOS DE LA PROGRAMACION ORIENTADA A OBJETOS
PROGRAMA
// prog74.cpp: define el punto de entrada de la aplicación 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)
{ 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);
}
void mostrar(int x[20][20], int n)
{int i, j ;
cout<<”Salida”<<endl;
for(i=1; i<=n; i++)
{for(j=1; j<=n; j++)
cout<<x[i][j] << " ";
cout<<endl; }
_getch( ); }
PROBLEMAS
1.- Dado un vector de números enteros escriba un programa que me permita hallar el número que más veces se repite (MODA).

// prog84.cpp: define el punto de entrada de la aplicación de consola.


// OBJETIVO: Halla la moda de un conjunto de números enteros
#include "stdafx.h"
# include <iostream>
# include <conio.h>
using namespace std;
void lectura (int a[50], int *n);
void orden(int a[50], int n);
int moda (int a[50], int n);
void mostrar(int a[50], int n);
void escritura(int mo);
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); }
// Función que realiza la lectura
void lectura(int a[50], int *n)
{ int i;
system("cls");
77
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)
PROGRAMACION ORIENTADA A OBJETOS 2015

EJECUCION

2.- Escriba Un Programa Que Maneje Un Menu De Operaciones Con Arreglos


El programa debe tener el siguiente menú:

78
PROGRAMACION ORIENTADA A OBJETOS 2015 79
FUNDAMENTOS DE LA PROGRAMACION ORIENTADA A OBJETOS

MENU ARREGLOS

1.- Lectura
2.- Adición
3.- Eliminación
4.- Búsqueda
5.- Ordenar
6.- Escritura
7.- Salir

Ingrese opción ==> __

PROGRAMA

// prog94.cpp: define el punto de entrada de la aplicación de consola.


//OBJETIVO: Programa que crea un menú para manejo de operaciones con arreglos */

#include "stdafx.h"
#include<iostream>
#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++)

79
PROGRAMACION ORIENTADA A OBJETOS 2015
{ cout<< " Ingrese valor "<< i<<" : "; cin>> v[i]; }
}
void adicion(int v[50], int *n)
{ int i,j,x;
system("cls");
cout<<"Ingrese posición de inserción: "; 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 posición 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 ; }
if ( v [i ]== x)
cout<< " Valor hallado en posición: "<<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 mérito las tres mejores notas
SOLUCIÓN
PROGRAMA
// prog37.cpp: define el punto de entrada de la aplicación 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( )

80
PROGRAMACION ORIENTADA A OBJETOS 2015 81
FUNDAMENTOS DE LA PROGRAMACION ORIENTADA A OBJETOS
{ 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)
{int i;
system("cls");
cout<<"LISTA DE MERITO"<<endl<<endl;
for ( i=1; i<=3;i++)
{ cout<< vectornot[i]<<" "<<vectornom[i]<<endl; } getch(); }

Nota: Este programa trabaja con el concepto de vectores paralelos o sea que la información de los
vectores está relacionada por el subíndice esto significa que la nota 5 pertenece al alumno que tiene el
nombre 5, por lo tanto la información 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 solución
la estructura while.

2) Escribir un programa que realice una búsqueda 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 código necesario para rotar un vector en sentido antihorario o sea al revés de lo hecho en el problema 9.

4) Se tiene una matriz de letras, escriba usted un programa para que realice la búsqueda de una cadena ingresada dentro de la
matriz(PUPILETRAS), la búsqueda 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.

81
PROGRAMACION ORIENTADA A OBJETOS 2015

CAPITULO V

82
PROGRAMACION ORIENTADA A OBJETOS 2015 83
FUNDAMENTOS DE LA PROGRAMACION ORIENTADA A OBJETOS

CAPITULO V
REGISTROS EN LENGUAJE “C”
5 Definición.- Un registro o una estructura en lenguaje “C” es una colección 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,

83
PROGRAMACION ORIENTADA A OBJETOS 2015
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 carácter de longitud 30

DIRECCION diralu carácter de longitud 40

ESCUELA escalu carácter de longitud 2

TELEFONO telalu entero largo

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

CODIGO codcur carácter de longitud 5

NOMBRE nomcur carácter de longitud 30

NOTAFIN notcur real

Vemos claramente que los campos son las características 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 vería así

codalu nomalu diralu escalu telalu

84
PROGRAMACION ORIENTADA A OBJETOS 2015 85
FUNDAMENTOS DE LA PROGRAMACION ORIENTADA A OBJETOS

7.2 Creación 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 dirección[50]; // dato miembro dirección}

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 Castañeda”);
strcpy( persona1.direccion, “ San Borja, Los alamos 257”);
strcpy( persona2.direccion, “ Surco, leoncio Prado 820”);
7.4 Inicialización de estructuras.- Los campos de un registro se pueden iniciar individualmente o
todos a la vez :
Ejemplo:
struct caja
{ int largo;

85
PROGRAMACION ORIENTADA A OBJETOS 2015
int ancho;
int altura;};
Caja c1 = {4, 5,2}
caja c2, c3;
c2.largo = 3;
c3.ancho = 1;
7.5 Asignación de estructuras.- Podemos intercambiar información entre dos estructuras
directamente de registro a registro.
Ejemplo: De los casos anteriores es válido 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 año; }
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 :
Dni cadena de 10 caracteres
Nombre cadena de 30 caracteres
Dirección cadena de 40 caracteres
PROGRAMA
// prog15.cpp: define el punto de entrada de la aplicación 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;

86
PROGRAMACION ORIENTADA A OBJETOS 2015 87
FUNDAMENTOS DE LA PROGRAMACION ORIENTADA A OBJETOS
for(i=1;i<=n;i++)
{cout<< " REGISTRO "<<i<<" :"<<endl;
cout<< " DNI = ";cin>>p[i].dniper; fflush( stdin );
cout<< " NOMBRE = ";gets(p[i].nomper);//gets…getstring(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

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 condición debe ser probada en cada ingreso. Finalmente presentar
resultados.
PROGRAMA
// prog25.cpp: define el punto de entrada de la aplicación de consola.
/*OBJETIVO: Ingresa registros sin codigo repetido */
#include "stdafx.h"
#include<iostream>

87
PROGRAMACION ORIENTADA A OBJETOS 2015
#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";
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;

88
PROGRAMACION ORIENTADA A OBJETOS 2015 89
FUNDAMENTOS DE LA PROGRAMACION ORIENTADA A OBJETOS
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();
}

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:

89
PROGRAMACION ORIENTADA A OBJETOS 2015
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>
#include<stdio.h>
#include<ctype.h>
struct item
{ int codite; // código del producto
char desite[20]; // descripción del producto
char ubiite[4]; // ubicación del producto
float nunite; // número 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.- Búsqueda";
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;

90
PROGRAMACION ORIENTADA A OBJETOS 2015 91
FUNDAMENTOS DE LA PROGRAMACION ORIENTADA A OBJETOS
case '6' : escritura(vprod, num);break;}
}while(opcion != '7');
}
void lectura(item prod[50], int *n)
{ int i;
clrscr();
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<< " Ingreseubicación "<< 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 ubicación : "; 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;

91
PROGRAMACION ORIENTADA A OBJETOS 2015
clrscr();
cout<<"Ingrese codigo : ";
cin>> codx;
for( i=1;i<=(*n);i++)
if(prod[i].codite == codx)
{ j=i;
break; }
if(prod[i].codite != codx)
{cout<< " Registro no existe... "; getch();}
else
{cout<< " Descripción : "<<prod[i].desite<<endl;
cout<< " Ubicación : "<<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<< " Descripción : "<<prod[i].desite<<endl;
cout<< " Ubicación : "<<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++)

92
PROGRAMACION ORIENTADA A OBJETOS 2015 93
FUNDAMENTOS DE LA PROGRAMACION ORIENTADA A OBJETOS
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)
{ 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

93
PROGRAMACION ORIENTADA A OBJETOS 2015

94
PROGRAMACION ORIENTADA A OBJETOS 2015 95
FUNDAMENTOS DE LA PROGRAMACION ORIENTADA A OBJETOS

95
PROGRAMACION ORIENTADA A OBJETOS 2015

2. Dada la siguiente estructura(registro)


 codigo entero
 nombre char 40
 nivel char //solo existe A,B,C
 sueldo real
a) Declarar la estructura.
b) Escribir el menú
 Leer
 Adicionar
 Eliminar
 Escribir
 Salir
c) Escribir las funciones Leer, adicionar, eliminar y escribir.
SOLUCIÓN
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; // código 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( )

96
PROGRAMACION ORIENTADA A OBJETOS 2015 97
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;

97
PROGRAMACION ORIENTADA A OBJETOS 2015
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

98
PROGRAMACION ORIENTADA A OBJETOS 2015 99
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

99
PROGRAMACION ORIENTADA A OBJETOS 2015

100
PROGRAMACION ORIENTADA A OBJETOS 2015 101
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 CASTAÑEDA DE LA ROSA
FECHA: 23 de agosto de 2007
OBJETIVO:Programa que crea un menú con registros de almacén */
#include<iostream.h>
#include<conio.h>

101
PROGRAMACION ORIENTADA A OBJETOS 2015
#include<string.h>
#include<stdio.h>
#include<iomanip.h>
struct almacén
{int itealm;// codigo del item
char nomalm[40];//nombre o descripción 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);

102
PROGRAMACION ORIENTADA A OBJETOS 2015 103
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 posición de inserción " ;cin>>j;
for(i=*n;i>=j;i--)
s[i+1]=s[i];
s[j]=regx;
*n=*n+1;}

103
PROGRAMACION ORIENTADA A OBJETOS 2015
EJECUCION

104
PROGRAMACION ORIENTADA A OBJETOS 2015 105
FUNDAMENTOS DE LA PROGRAMACION ORIENTADA A OBJETOS

EJERCICIOS PROPUESTOS

105
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 código;
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]; // Código del alumno
char codcur [7]; // Código 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

pp  ep  2 * ef
pf 
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; // Código del empleado

106
PROGRAMACION ORIENTADA A OBJETOS 2015 107
FUNDAMENTOS DE LA PROGRAMACION ORIENTADA A OBJETOS
char nomemp [40]; // Nombre del empleado
float sb ; // Sueldo Bruto
int diasf; // Días faltos
int horase ; // Horas extras
float descuentos ; // Descuentos
float sn; // 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 día falto.
 50% de bonificación por cada hora extra.

107
PROGRAMACION ORIENTADA A OBJETOS 2015

CAPITULO VI

CAPITULO VI
PROGRAMACION ORIENTADA A OBJETOS
6 Introduccion.-La programación orientada a objetos existe desde la creación de los primeros lenguajes
de programación. Los conceptos que se manejan de abstracción de datos, herencia y Polimorfismo se
manejaban en estos lenguajes, pero con el desarrollo del lenguaje “C” y la programación visual se
utiliza este tipo de programación con mayor profusión.
6.1 Programación orientada a objetos.- La programación orientada a objetos es la ultima
modificación, donde ya se incorporan algunos aspectos tomando como modelo la vida real.
Tipos de Datos Abstractos
Algunos autores describen la programación orientada a objetos como programación de tipos de

108
PROGRAMACION ORIENTADA A OBJETOS 2015 109
FUNDAMENTOS DE LA PROGRAMACION ORIENTADA A OBJETOS
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 sección anterior muestra que por medio de la abstracción 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 recién 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.
Definición (Tipo de Datos Abstracto) Un tipo de datos abstracto (TDA) se caracteriza por que
tiene dos elementos diferenciados:
 La interfaz de utilización.
 La representación
La representación debe permanecer oculta y solo utilizaremos sus operaciones para trabajar con
los elementos.
Para construir un tipo abstracto debemos:
1. Exponer una definición de tipo.
2.Definir las operaciones (funciones) que permitan operar con instancias de ese tipo.
3.Ocultar la representación de los elementos del tipo de modo que solo se pueda actuar sobre
ellos con las operaciones proporcionadas..
4. Poder hacer instancias múltiples del tipo..
Tipos básicos de operaciones en un TDA.
Las operaciones básicas que deberíamos tener pueden ser:
 Constructores: Crean una nueva instancia del tipo.
 Transformación: Cambian el valor de uno o más elementos de una instancia del tipo.
 Observación:Accesamos sin modificarlos.
 Iteradores: Procesa componentes en forma secuencial.

109
PROGRAMACION ORIENTADA A OBJETOS 2015
Tipos Genéricos 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 deberían operar del mismo modo
sobre otros tipos de datos. Por ejemplo, uno puede pensar en listas de manzanas, carros o aún
listas. La definición semántica de una lista siempre es la misma. Solamente el tipo de los
elementos de datos cambia de acuerdo al tipo sobre el cuál debía operar la lista..
Esta información adicional podría ser especificada por un parámetro genérico que es especificado
al momento de la creación de la instancia. Así, una instancia de un TDA genérico es en la práctica
una instancia de una variante particular del TDA. Una lista de manzanas puede ser por lo tanto
declarada como sigue :
List<Apple> listOfApples;
Los corchetes angulares encierran ahora el tipo de datos para el cuál una variante del TDA
genérico List sería creada. listOfApples ofrece la misma interface que cualquiera otra lista, pero
opera en instancias del tipo Apple.
Conceptos de Orientación a Objetos
Las secciones anteriores introducen ya algunos conceptos "de orientación a objetos". Sin
embargo, éstos fueron aplicados de una manera teórica, ahora pasemos ya a visualizar las
características del C++ y les damos nombres tal y como se usan en los lenguajes de
programación orientada a objetos existentes.
Las características de C++ como lenguaje orientado a objetos son:
o Abstracción
 Variables de instancia
 Métodos de instancia
 Variables de clase
 Métodos de clase
o Encapsulación
 De variables: privada, pública y protegida.
 De métodos: privada, pública y protegida
o Herencia
 Sencilla y múltiple
 Unidades genéricas
 Polimorfismo

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


programación orientada a objetos. La comunicación entre objetos es por medios de mensajes que
viene a ser la forma de invocar a un objeto. Hemos dicho que un objeto tiene características
llamadas atributos y procedimientos llamados métodos. Los mensajes tienen un método
(procedimiento) que se ejecutara cuando es invocado.
Mensaje (Se Invoca Método)

110
PROGRAMACION ORIENTADA A OBJETOS 2015 111
FUNDAMENTOS DE LA PROGRAMACION ORIENTADA A OBJETOS

Objeto Emisor Objeto Receptor

Resultado De La Ejecución Del Método

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 incorporándoles además 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 más precisas que los registros. Además las clases tienen dos características que la
hacen elementos muy eficientes en la programación, 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 declaración de clase.
Ejemplo: Dada la siguiente declaración 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);
}};
Representación Gráfica
Clase Rectángulo

Largo
Ancho Datos

Asignar()
Métodos
Calcular _area()
111
PROGRAMACION ORIENTADA A OBJETOS 2015

Figura 6.3
Posteriormente nosotros podemos declarar un objeto de la clase rectángulo de la siguiente manera:
rectangulo R1;
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) función miembro que nos permite asignar valores a los dos datos miembro.
R1.calcular_area( ) función miembro que calcula el área y devuelve el valor.
PROGRAMA
// prog16.cpp: define el punto de entrada de la aplicación 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

112
PROGRAMACION ORIENTADA A OBJETOS 2015 113
FUNDAMENTOS DE LA PROGRAMACION ORIENTADA A OBJETOS

6.4 Herencia: Característica mediante la cual podemos reutilizar una declaración 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 también adiciona.Ver ejemplo 4.
6.5 Polimorfismo: Característica que nos permite crear funciones que utilizando un mismo nombre
responderán de forma diferente de acuerdo a la clase a la cual pertenecen.
6.6 Secciones .- Los miembros de una clase que son variables y métodos (datos y funciones) pueden
ser públicos (public), protegidos (protected) y privados(private). Las secciones privadas y protegidas
tienen como objetivo el ocultamiento de datos. A los miembros de la sección 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 públicos 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 estén definidas y en cualquier clase derivada de
la clase original. De acuerdo a lo dicho la declaración 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:
class rectangulo
{ private:
int largo;
int ancho;
public:

113
PROGRAMACION ORIENTADA A OBJETOS 2015
void asignar( int l, int a)
{ largo = l;
ancho = a; }
int área( )
{ int A;
A = largo * ancho;
return ( A); }
};
class cuadrado
{ private:
int largo;
public:
void asignar( int l )
{ largo = l; }
int área( )
{ int A;
A = largo * largo;
return ( A);}
};
void main( )
{ rectangulo R1;
cuadrado C1;
R1.asignar( 5,4);
C1.asignar(4);
clrscr()
cout << R1.area( )<< endl;
cout << C1.area( )<< endl;
}
El primer cout imprimirá 20 y el segundo cout imprimirá 16.

PROGRAMA
//prog35
/* OBJETIVO: Desarrollar un ejemplo básico de POO */
#include “stdafx.h”
#include<iostream>
#include<conio.h>

114
PROGRAMACION ORIENTADA A OBJETOS 2015 115
FUNDAMENTOS DE LA PROGRAMACION ORIENTADA A OBJETOS
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); }
};
void main( )
{ rectangulo r1;
int L,A;
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<<”Area= “<<r1.area()<<endl;
_getch();}
EJECUCION

EJEMPLO 3:Escriba un ejemplo de una clase con datos públicos. Indicando el acceso directo a los
datos miembro.
PROGRAMA

115
PROGRAMACION ORIENTADA A OBJETOS 2015
/* CODIGO: cppcap06ejem03
FECHA: 27 de agosto de 2012
OBJETIVO: Desarrollar un ejemplo básico con datos públicos*/
#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)
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;

116
PROGRAMACION ORIENTADA A OBJETOS 2015 117
FUNDAMENTOS DE LA PROGRAMACION ORIENTADA A OBJETOS
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
/* CODIGO: cppcap06ejem04
FECHA: 7 de Agosto de 2012
OBJETIVO: Programa que define la clase alumno y despues deriva de esta la clase nota*/
#include <iostream.h>
#include<conio.h>
#include<stdio.h>
#include<string.h>
class alumno
{ protected:
char codigo[9];
char nombre[40];
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)

117
PROGRAMACION ORIENTADA A OBJETOS 2015
{ 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;
clrscr();
//Procesando datos de clase base
cout<<"Ingrese codigo del alumno: ";cin>>code;
cout<<"Ingrese nombre del alumno: ";gets(name);
a1.asignar(code,name);
a1.mostrar();
//Procesando datos de clase derivada (Herencia)
cout<<"Ingrese codigo del alumno: ";cin>>code;
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();
}
EJECUCION

Ventajas de la programación orientada a objetos.- Son las siguientes:


 Facilidad de Mantenimiento: Los programas son más fáciles de leer y de entender.
 Facilidad de modificación: Se pueden modificar los objetos al modificar rápidamente la herencia.
 Reusabilidad: Se pueden utilizar varias veces.
 Fiabilidad: Se utilizan modelos ya comprobados.

118
PROGRAMACION ORIENTADA A OBJETOS 2015 119
FUNDAMENTOS DE LA PROGRAMACION ORIENTADA A OBJETOS

PROBLEMAS
1.- Desarrollar 3 programas de aplicación para ver la evolución 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 función externa al registro.
 B) Programa con registros lee 2 notas y calcula el promedio con una componente función.
 C) Programa con objetos lee 2 notas y calcula el promedio con una función miembro.
PROGRAMA(A)
/* CODIGO: cppcap06prob01a
FECHA: 28 de agosto de 2012
OBJETIVO: Primer programa ejemplo de una estructura clásica*/
#include<iostream.h>
#include<conio.h>
struct notas
{ float nota1;
float nota2; };
float calcula_prom (float p1, float p2);
void main ( )
{notas n;
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

119
PROGRAMACION ORIENTADA A OBJETOS 2015
OBJETIVO: Segundo programa ejemplo tenemos la estructura pero ya tenemos
una componente función 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

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

120
PROGRAMACION ORIENTADA A OBJETOS 2015 121
FUNDAMENTOS DE LA PROGRAMACION ORIENTADA A OBJETOS
};
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 aplicación de consola.
#include "stdafx.h"
/*OBJETIVO: Programa que trabaja con un vector de objetos*/
#include <iostream>
#include<conio.h>
using namespace std;
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 número 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();

121
PROGRAMACION ORIENTADA A OBJETOS 2015
}
// 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

3.- Escriba un programa que defina la clase cuadrado y cubo además debe calcular el área del cuadrado, el
área del cubo y el volumen.
SOLUCIÓN
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;

122
PROGRAMACION ORIENTADA A OBJETOS 2015 123
FUNDAMENTOS DE LA PROGRAMACION ORIENTADA A OBJETOS
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); }
};
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

123
PROGRAMACION ORIENTADA A OBJETOS 2015

EJERCICIOS PROPUESTOS
1) Escribir un programa que me permita crear la clase persona, considerando, dni,nombre, fecha de
nacimiento , distrito donde vive y teléfono. El programa debe crear la clase y declarando objetos de
esta clase ingreasr datos y después mostrarlos.
2) Escribir un programa que considere la clase anterior y declare un vector de objetos de esa clase,
además 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 código, sueldo, nombre y categoría, escribir las declaraciones de
datos miembros y crear las funciones miembro, de lectura, mostrar_datos y asignación de sueldos,
esta ultima debe realizarse de la siguiente manera:
 Categoría A sueldo de 4500 mensual
 Categoría B sueldo de 4000 mensual
 Categoría C sueldo de 3000 mensual
 Categoría D sueldo de 2000 mensual
4) Escriba un programa que trabaje con la clase anterior pero con vectores de objetos y que visualize
todos los empledaos por categoría..
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 código, nombre, costo y duración en horas.

124
PROGRAMACION ORIENTADA A OBJETOS 2015 125
FUNDAMENTOS DE LA PROGRAMACION ORIENTADA A OBJETOS

CAPITULO VII

CAPITULO VII
CONSTRUCTORES Y DESTRUCTORES
7 CLASES Y CONSTRUCTORES.-
7.1 Funciones miembro.- Las funciones miembro con componentes de una clase y normalmente
se definen dentro de la clase como funciones de línea(inline). Pero también podemos definir el
cuerpo de la función fuera de la clase. El ámbito de una función se debe indicar por el operador
ámbito (:: ) con el nombre de la clase. Ej:
PROGRAMA
// prog19.cpp: define el punto de entrada de la aplicación de consola.
125
#include "stdafx.h"
/* OBJETIVO: Programa de funciones que utilizan el operador de ambito */
#include <iostream>
#include <conio.h>
PROGRAMACION ORIENTADA A OBJETOS 2015

7.2 Constructores y Destructores.-Cuando se menciono a los punteros se dijo que se puede crear
variables apuntadas en forma dinámica(en ejecución), 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 método que se denomina constructor y al terminar(salir) se llama a otro método conocido
como destructor. Esto es lo que veremos a continuación.
7.2.1 Constructor.- Es un método especial que construye objetos. Un constructor es llamado
para crear una instancia de ese objeto asignando espacio a un objeto puede también asignar
valores a sus miembros datos. El constructor realiza una inicialización automática y no devuelve

126
PROGRAMACION ORIENTADA A OBJETOS 2015 127
FUNDAMENTOS DE LA PROGRAMACION ORIENTADA A OBJETOS
ningún valor. Tiene el mismo nombre que la clase con la cual está asociada. Puede tener
parámetros como cualquier otra función 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;
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 aplicación 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

127
PROGRAMACION ORIENTADA A OBJETOS 2015
{ 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;
_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 función
miembro con el mismo nombre que la clase mas una tilde que se añade 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 aplicación 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:

128
PROGRAMACION ORIENTADA A OBJETOS 2015 129
FUNDAMENTOS DE LA PROGRAMACION ORIENTADA A OBJETOS
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; }
};
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 tambiénconstruyen y destruyen, que es una
forma de decir también 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 aplicación 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 dirección de un campo entero a p1 que es puntero

129
PROGRAMACION ORIENTADA A OBJETOS 2015
cout << " Ingrese valor = > ";
cin >> (*p1);// almacena un valor en el campo apuntado por p1
p2=p1;//p2 toma la dirección 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

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 dirección al puntero respectivo y después 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 información puede ser de puntero a puntero (p2=p1) o de campo apuntado
a campo apuntado (*p1) = (p2), sería un error lo siguiente: p1 = *p2.
 Cuarto: La forma correcta de liberar a la memoria es delete p1 o delete p2.

130
PROGRAMACION ORIENTADA A OBJETOS 2015 131
FUNDAMENTOS DE LA PROGRAMACION ORIENTADA A OBJETOS

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

131
PROGRAMACION ORIENTADA A OBJETOS 2015
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
características indicadas.
class caja
{ private:
int alto;
int ancho;

132
PROGRAMACION ORIENTADA A OBJETOS 2015 133
FUNDAMENTOS DE LA PROGRAMACION ORIENTADA A OBJETOS
int largo;
…………………..
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 ( )
{ }
// función 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

133
PROGRAMACION ORIENTADA A OBJETOS 2015
3.-Desarrollar un programa que trabaje con aritmetica de punteros y maneje polinomiospudiendo desarrollar
operaciones simples con estos polinomios.

SOLUCION
PROGRAMA
/* CODIGO: PROGCPP07003
PROGRAMA CREADO POR RICARDO CASTAÑEDA DE LA ROSA
FECHA: 10 DE MARZO DE 2012
OBJETIVO: Programa que maneja la Aritmética 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 aritmética 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();
}

134
PROGRAMACION ORIENTADA A OBJETOS 2015 135
FUNDAMENTOS DE LA PROGRAMACION ORIENTADA A OBJETOS

CAPITULO VIII

135
PROGRAMACION ORIENTADA A OBJETOS 2015
CAPITULO VIII
HERENCIA Y CLASES DERIVADAS
8. CLASES DERIVADAS
a. Definición.-La forma sintáctica 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
implicación de que los miembros son públicos 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 DE LA PERSONA - CLASE BASE";
gotoxy(35,6);
cout <<"Nombre = "<<nombre;
gotoxy(35,8);
cout <<" DNI = "<<dni;
getch(); }
};
class empleado : public persona //CLASE DERIVADA
{ private:
int codigo;
float sueldo;

136
PROGRAMACION ORIENTADA A OBJETOS 2015 137
FUNDAMENTOS DE LA PROGRAMACION ORIENTADA A OBJETOS
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 múltiple.- Este concepto nos indica que una clase puede derivarse de más 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)
{ dato2 = d2;
}
int leer ( )
{ return(dato2);
}
};
class derivada12 : public base1, private base2
{ public:
void imprimir ( )
{ cout << b1<<leer( );

137
PROGRAMACION ORIENTADA A OBJETOS 2015
}
};

d. Funciones amigas (friend)


Sabemos que a un dato privado se puede acceder desde la misma clase o desde una función amiga. El concepto de
función amiga se refiere a una función 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 característica permite a una función estar definida en una clase base y su clase derivada
bajo el mismo nombre. La declaración de virtual solo debe hacerse en la clase base, la función 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:
int area ( )
{ return (6* lado * lado);
}
};

138
PROGRAMACION ORIENTADA A OBJETOS 2015 139
FUNDAMENTOS DE LA PROGRAMACION ORIENTADA A OBJETOS

PROBLEMAS

1.- Construya un programa orientado a objetos que utilice la clase base persona, con su datos miembro nombre y DNI, además de
considerar las funciones miembro asignar y mostrar; derivada de esta clase se manejara la clase empleado que añade datos
miembro código y sueldo, y redefina las funciones de la clase base.

SOLUCION

PROGRAMA

// prog59.cpp: define el punto de entrada de la aplicación 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");
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;

139
PROGRAMACION ORIENTADA A OBJETOS 2015
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

140
PROGRAMACION ORIENTADA A OBJETOS 2015 141
FUNDAMENTOS DE LA PROGRAMACION ORIENTADA A OBJETOS
2.- Escriba un programa que simule un procesamiento de notas con dos sistemas de evaluación diferentes, el sistema A :
promedio de prácticas = (p1+p2+p3)/3.0. Nota final = (exapar + exafin + propra)/3.0y el sistema B : promedio de prácticas =
(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 CASTAÑEDA 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;
}
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;

141
PROGRAMACION ORIENTADA A OBJETOS 2015
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 código
char a2[40]; //almacena nombre
int a3; //almacena examen parcial
int a4; //almacena examen final
char sistema;
sistemaA al1;
sistemaB al2;
clrscr( );
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);

142
PROGRAMACION ORIENTADA A OBJETOS 2015 143
FUNDAMENTOS DE LA PROGRAMACION ORIENTADA A OBJETOS

cout<< " Sistema de evaluación A/B: "; cin >> sistema;


sistema = toupper( sistema);
// calculo de promedio de prácticas 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

143
PROGRAMACION ORIENTADA A OBJETOS 2015

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

SOLUCION:

PROGRAMA

/* CODIGO: PROGCPP09003

PROGRAMA CREADO POR RICARDO CASTAÑEDA 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);
strcpy(nomcur,nc);
notcur =nt;
pagoma=pm;
ok=sm;
}

void mostrar()
{ clrscr();

144
PROGRAMACION ORIENTADA A OBJETOS 2015 145
FUNDAMENTOS DE LA PROGRAMACION ORIENTADA A OBJETOS
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 : "<<codcur;
gotoxy(31,12); cout<< "Curso : "<<nomcur;
gotoxy(31,14); cout<< "Nota : "<<notcur;
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 : ";gets(codigo);
gotoxy(31,8); cout<<"NOMBRE : ";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

145
PROGRAMACION ORIENTADA A OBJETOS 2015

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


PROGRAMA

// prog69.cpp: define el punto de entrada de la aplicación 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); // declaración de función amiga
} ;
void imprime_dat_emp(empleado c)
{ cout << "Nombre del cliente : " << c.nombre<< endl;
cout << "Codigo del cliente : " << c.codigo << endl;}
void main ( )
{system("cls");
empleado J ("Pedro Juarez", 1282015);
imprime_dat_emp(J);
empleado R ("Jose Ruiz", 1232014);
imprime_dat_emp(R);
_getch( ); }

146
PROGRAMACION ORIENTADA A OBJETOS 2015 147
FUNDAMENTOS DE LA PROGRAMACION ORIENTADA A OBJETOS

CAPITULO XI

147
PROGRAMACION ORIENTADA A OBJETOS 2015
CAPITULO XI
SOBRECARGA
9. POLIMORFISMO.- Es la capacidad de los objetos de responder de manera diferente a las mismas ordenes, dependiendo de
la clase a la cual pertenecen. El Polimorfismo se implementa de dos maneras:
 Vía funciones virtuales
 Por sobrecarga.

f. VIA FUNCIONES VIRTUALES El concepto de función 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. SOBRECARGA DE OPERADORES Y FUNCIONES

i. Introducción.- La sobrecarga de operadores, nos permite definir un operador de diferente forma, es una forma de
realizar el Polimorfismo. La sobrecarga es la técnica 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 número de operandos (unitarios o binarios).

 Sobrecargados, no cambiaran su prioridad.

148
PROGRAMACION ORIENTADA A OBJETOS 2015 149
FUNDAMENTOS DE LA PROGRAMACION ORIENTADA A OBJETOS
 No se pueden inventar operadores que no existan en C++.

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

Tipo operator<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 []
 Operador ()

Operadores De Asignación

 Operador =
 Operador +=
 Operador -=
 Operador *=
 Operador /=
 Operador %=
 Operador <<=
 Operador >>=
 Operador &=
 Operador ^=|
 Operador |=

Además de los operadores: , (coma), new y delete

Ejemplo de sobrecarga.-

#include <iostream.h>

#include <conio.h>

class duplicado

{public:

int x;

149
PROGRAMACION ORIENTADA A OBJETOS 2015
duplicado operator++ ()

{ x = x + x;

return *this; }};

void main () { // (Comprobación)

duplicado e1 = {5}, e2;

e2 = ++e1; // M.2 uso de operador ++ sobrecargado

cout << "e1 == " << e1.x << endl;

cout << "e2 == " << e2.x << endl;

getch(); }

iii. Sobrecarga de funciones.- Cuando una función tiene más de una definición decimos que es una función sobrecargada.
Sabemos que dos o más funciones pueden tener el mismo nombre pero para estar sobrecargadas den diferir en el tipo de
sus argumentos o el número de sus argumentos.
Es muy importanteconsiderar que bastante común es sobrecargar las funciones constructoras.
Ejemplo de sobrecarga de funciones

/ * Ejemplo de sobrecarga de funciones * /


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

class vector
{ private:
float xm, ym;
public:
vector ( float x = 0, float y = 0)
{
xm = x;
ym = y;
}
void vervector ( );
void leervector ( float &x, float &y)
{ 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
getch();
} PROBLEMAS
1.- Construya un programa orientado a objetos desarrolle el polimorfismo utilizando el concepto de función virtual.

150
PROGRAMACION ORIENTADA A OBJETOS 2015 151
FUNDAMENTOS DE LA PROGRAMACION ORIENTADA A OBJETOS

SOLUCION

PROGRAMA

/* CODIGO: PROGCPP010001

PROGRAMA CREADO POR RICARDO CASTAÑEDA DE LA ROSA

FECHA: 20 DE MARZO DE 2007

/ prog310.cpp: define el punto de entrada de la aplicación de consola.


#include "stdafx.h"
#include<iostream>
#include<conio.h>
using namespace std;
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);}
};
void main ( )
{ circulo cir1;
cuadrado cua1;
float a1;
system("cls");
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();
}
2.- Construya un programa que sobrecargue un operador realizando una operación para un objeto.

SOLUCION

PROGRAMA
/* CODIGO: PROGCPP010002
PROGRAMA CREADO POR RICARDO CASTAÑEDA DE LA ROSA
FECHA: 12 DE MARZO DE 2007

151
PROGRAMACION ORIENTADA A OBJETOS 2015
OBJETIVO: Sobrecarga de operadores es la facultad que tiene un operador defuncionar de forma diferente según 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 funciónhabrá que poner las operaciones que queramos
Que realice el operador */
// prog410.cpp: define el punto de entrada de la aplicación de consola.
#include "stdafx.h"
#include<iostream>
#include<conio.h>
using namespace std;
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 más x que pasa
aux.y=y+obj.y;
return(aux); }
void clase::visualizar()
{ cout<<"\nx= "<<x<<' '<<"y= "<<y; }

void main( )
{ clase a(5,7); clase b(5,3); clase c;
c=a+b; //x de a más x de b ; y de a más y de b
c.visualizar( ); //c=operator +b;
_getch(); }

3.- Construya un programa que sobrecargue una función utilizando dos tipos de datos diferentes, la funcióndebe ser simple.

SOLUCION

PROGRAMA
/* CODIGO: PROGCPP010003
PROGRAMA CREADO POR RICARDO CASTAÑEDA DE LA ROSA
FECHA: 20 DE MARZO DE 2007
OBJETIVO: Función 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");

152
PROGRAMACION ORIENTADA A OBJETOS 2015 153
FUNDAMENTOS DE LA PROGRAMACION ORIENTADA A OBJETOS
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;}

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 CASTAÑEDA 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 común 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 inicialización y otro que
no. */
#include<iostream.h>
#include<conio.h>
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 inicialización
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(); }

153

Você também pode gostar