Sie sind auf Seite 1von 222

1

Ing. Ricardo Castaeda




PROGRAMACION ORIENTADA A OBJETOS
2013




UNIVERSIDAD NACIONAL DE INGENIERA
FACULTAD DE INGENIERA MECNICA








































2
Ing.Ricardo Castaeda


FACULTAD DE INGENIERIA MECANICA
2013
I NDI CE

1 CONCEPTOS GENERALES DE COMPUTACION.....
1.1 Computadora......
1.2 Componentes de una computadora.....
1.3 El sistema informatico..
1.4 Algoritmos
1.5 Lenguajes de Programacion...
1.6 Tipos de Programacin...
1.7 Diseo de Algoritmos.......
1.8 Objetos_datos de Entrada/salida........
1.9 Procesos Directos o Secuenciales.....
1.10 Esructuras de decisin simple....
1.11 Estructuras de decisin anidada.......
1.12 Estructuras de decisin multiple.......
1.13 Estructuras Repetitivas
1.13.1 Estructuras Mientras.......
1.13.2 Estructuras Hacer Mientras........
1.13.3 Estructuras Para
Problemas...
Ejercicios propuestos.......
2 ESTRUCTURA DE UN PROGRAMA BORLAND C++...
2.1 Organizacion de un programa Borland C++.
2.2 Estructura General de un Programa en Borland C++.
2.3 Elementos de un Programa en C++..
2.4 Tipos de variables estndar en C++.
2.5 Constantes.
2.6 Variables..
2.7 Entrada y salida simple en C++.
2.8 Secuencias de Escape..
2.9 Manipulacion y formato de datos de salida.
Problemas
3 ESTRUCTURAS DE CONTROL EN C..
3.1 Expresiones y operadores
3.2 Estructuras de Control en Lenguaje C.....
Problemas
Ejercicios propuestos.......
4 FUNCIONES EN LENGUAJE C++...
4.1 Funciones Predifinidas ( De Biblioteca)....
06
06
06
06
06
07
07
09
10
10
13
16
17
21
21
22
26
29
42
44
44
45
46
46
47
47
47
49
50
53
60
60
64
73
80
82
82

3
Ing. Ricardo Castaeda


PROGRAMACION ORIENTADA A OBJETOS
2013
4.2 Funcines Definidas por el Usuario..
4.2.1 Ubicacin del prototipo, la llamada y la funcin en lenguaje C++..
4.2.2 Comunicacin entre funciones.
4.3 Funciones Inline..
4.4 Funciones Recursivas..
4.5 Punteros a Funciones..
Problemas..
Ejercicios Propuestos.
5 ARREGLOS EN LENGUAJE C.
5.1 Definicion..
5.2 Acceso a elementos....
5.3 Operaciones con arrays unidimensionales.
5.4 Arregos de 2 dimensiones....
5.5 Operaciones con matrifes...
Problemas....
Ejercicio propuestos....
6 CADENAS EN C++..
6.1 Lectura de una cadena del teclado.
6.2 Funciones para Manejar cadenas..
6.3 Vectores de cadenas
Problemas....
Ejercicio propuestos....
7 REGISTROS EN LENGUAJE C++
7.1 Modelamiento de un registro de acuerdo a las entidades del mundo real
7.2 Creacion y manejo de Registros..
7.3 Acceso a miembros del registro ...
7.4 Inicializacin de estructuras ..
7.5 Asignacin de estructuras ..
Problemas.
Ejercicio propuestos....
8 CONCEPTOS DE LA PROGRAMACION ORIENTADA A OBJETOS.
8.1 Programacion orientada a objetos..
8.2 Clases....
8.3 Objeto..
8.4 Herencia....
8.5 Polimorfismo....
Problemas.
Ejercicio propuestos....
91
92
92
94
94
95
97
104
107
107
107
107
117
117
120
130
132
132
134
137
140
143
145
145
146
146
146
147
151
163
165
165
168
168
170
170
171
175

4
Ing.Ricardo Castaeda


FACULTAD DE INGENIERIA MECANICA
2013
9 CLASES Y CONSTRUCTORES..
9.1 Secciones y funciones miembro.
9.1.1 Secciones..
9.1.2 Funciones miembro..
9.2 Constructores y destructores.
9.2.1 Constructor..
9.2.2 Destructores..
Problemas.
10 HERENCIA Y CLASES DERIVADAS..
10.1 Definicion...
10.2 Clases Derivadas....
10.3 Herencia multiple
10.4 Funciones amigas
10.5 Funciones virtuales
Problemas....
11 POLIMORFISMO.
11.1 Via funciones virtuales
11.2 Sobrecarga de operadores y funciones..
11.2.1 Introduccion....
11.2.2 Sobrecarga de operadores....
11.2.3 Sobrecarga de funciones..
Problemas.
12 FLUJOS Y ARCHIVOS.
12.1 Archivos de texto.....
12.2 Archivos Binarios....
12.2.1 Introduccion..
12.2.2 Entrada/Salida por archivos...
12.2.3 Apertura de un archivo...
12.3 Operaciones con archivos..
12.4 Archivos binarios con acceso aleatorio.
Problemas.

177
177
177
177
178
178
180
182
187
187
187
188
188
188
189
198
198
198
198
198
200
201
206
206
210
210
210
210
212
212
213










5
Ing. Ricardo Castaeda


PROGRAMACION ORIENTADA A OBJETOS
2013



















CAPITULO I


















6
Ing.Ricardo Castaeda


FACULTAD DE INGENIERIA MECANICA
2013
1. CONCEPTOS GENERALES DE COMPUTACION
1.1. Computadora
Es un conjunto de circuitos electrnicos, que es capaz de recibir un flujo de entrada (Datos), procesarlo de
acuerdo a un conjunto de instrucciones (Programa) y emitir un flujo de salida (Resultados).
1.2. Componentes De Una Computadora
De acuerdo a la definicin anterior, la computadora necesita dos elementos importantes, llamadas
componentes, para conseguir sus objetivos y estas son:
o Hardware.- Es la parte fsica, consiste en un conjunto de unidades conectadas entre si por los llamados
buses de comunicacin, este hardware tambin se conecta con una serie de dispositivos externos que nos
permiten ingresar informacin a la computadora y adems tomar informacin de ella de tal manera que sirva
a nuestros fines, estos dispositivos son los llamados perifricos, estos pueden ser de entrada, salida o de
entrada/salida.
Las unidades mencionadas son:
Unidad de Entrada
Unidad Central de Procesamiento, que se compone de:
o Unidad de Control
o Unidad aritmetica y lgica.
Unidad de Memoria (Memoria RAM)
Unidad de salida
Buses de Comunicacin
Los perifricos son:
Perifricos de entrada: Teclado, Mouse, Micrfono, Scanner, cmara digital, Lector de cdigos de
barras, Lpices pticos, Joystick.
Perifricos de salida: Monitor, Impresora, Parlantes, Plotter, Audfonos, Fax, Data Show.
Perifricos de entrada/salida: disco duro, Cd, memoria USB, disco flexible, DVD.
o Software.- Es la parte lgica nos permite manejar el hardware y obtener los resultados esperados, existe 3
tipos de software:
Software base: Los sistemas operativos como el DOS, Windows, UNIX .
Software aplicado: Son los famosos paquetes como el Word (Procesador de texto), Excel (Hoja de
clculo), Power Point y otros.
Software de uso general: Son los lenguajes de programacin que nos permiten escribir programas de
uso especfico. Ejemplos: Visual C, Java, Visual FoxPro.
1.3. El Sistema Informtico
Un sistema informtico es un sistema que nos ayuda a automatizar procesos mediante el manejo adecuado de la
informacin, la construccin de un sistema informtico lo podemos considerar en las siguientes etapas:
Anlisis
Diseo
Programacin
Implementacin
1.4. Algoritmos
Los programas y los algoritmos son en realidad una misma secuencia de solucin solamente la utilizacin de
cada uno de ellos tiene variantes.

7
Ing. Ricardo Castaeda


PROGRAMACION ORIENTADA A OBJETOS
2013
Definicin De Algoritmo.- Un algoritmo es la descripcin ordenada paso a paso de la solucin de un problema o
el desarrollo de un proceso.
Los algoritmos se pueden clasificar en tres tipos:
Algoritmo literal: Nos permite la comunicacin de persona a persona una de sus formas ms conocidas
es el SEUDOCDIGO.
Algoritmo grfico: Nos permite visualizar la lgica de la solucin. Se le conoce tambin como DIAGRAMA
DE FLUJO
Algoritmo codificado: Nos permite la comunicacin entre la persona y la mquina (Computadora) . Se le
conoce como PROGRAMA.
1.5. Lenguajes de Programacion.- Los programas y los Lenguajes De Programacin Los lenguajes de
programacin nos permiten construir programas para aplicaciones especificas, estos lenguajes normalmente
tienen su mbito de aplicacin o sea tienen diferentes enfoques, por ejemplo los dos primeros lenguajes fueron
el FORTRAN y el COBOL.
FORTRAN.- Su nombre proviene de, FORmula TRANslation, es un lenguaje cientfico creado especialmente
para la realizacin de clculos.
COBOL.- Su nombre proviene de COmmon Busines Oriented Lenguaje, es un lenguaje para manejo de
informacin comercial creado especialmente para la realizacin de procesos.
Actualmente tenemos una variedad de lenguajes, desde bajo nivel hasta alto nivel, una breve descripcin seria:
Lenguaje de maquina: Es una secuencia de bits, que realmente son seales elctricas (normalmente 0
voltios y 5 voltios) que para el computador sern los ceros y unos llamados tambin bits, por ejemplo:
01011001 00001101
La programacin con este lenguaje es muy dificultosa y normalmente se recurre a otro lenguaje nemotcnico
llamado ensamblador.
Lenguaje ensamblador: donde las instrucciones y los dispositivos se reemplazan por cdigos nemotcnicos
con lo cual se facilita tremendamente la programacin, dependiendo del procesador, tendramos por ejemplo:




El ensamblador depende de la arquitectura del procesador pero normalmente existen bastantes similitudes
en todos los ensambladores.
Lenguaje de alto nivel: Nos permiten realizar muchas operaciones con pocas instrucciones, estas
instrucciones se parecen al lenguaje que usamos comnmente (en idioma ingles), por ejemplo: begin, end,
program, if, else etc.
Tenemos el Pascal, FoxPro Java, Visual Basic, Visual FoxPro etc.
Un lenguaje interesante es el lenguaje C que es el que nosotros vamos a utilizar, este lenguaje es de nivel
intermedio pues tiene rutinas que realizan procedimientos complejos con una sola instruccin as como
tambin el manejo casi al nivel de mquina, por lo tanto es de nivel intermedio.
1.6. Tipos de Programacin
La programacin ha evolucionado desde la primera vez que fue utilizada y se ha modificado sobre todo por la
opinin y contribucin de los expertos programadores, la secuencia ha sido:
mov ah,9
int 21h
mov ah,10
.
push cs

8
Ing.Ricardo Castaeda


FACULTAD DE INGENIERIA MECANICA
2013
Programacin lineal
Se colocan todas las sentencias en el programa principal, a medida que la aplicacin realiza nuevas tareas y se
afina el programa crece en forma vertical, antiguamente este tipo de programacin predominaba pero no es
muy prctico.
Programacin estructurada: Es una programacin modular donde el programa principal solo se utiliza para
llamar a los mdulos que realizan las tareas, si la tarea de un modulo se vuelve ms compleja se divide en
otros mdulos, aqu el crecimiento es horizontal.
Los dos casos anteriores se veran as grficamente:






























Programacin orientada a objetos
Es una programacin en la cual los datos y los procedimientos se encapsulan y adems se le agrega niveles
de visibilidad, para simular un poco mejor lo que ocurre en los procesos del mundo real. Aqu ya intervienen los
conceptos de clases, herencia y polimorfismo, como se ver en el captulo correspondiente.
Programacin Lineal


Programa 1xxx
..
.

..

..
..
Fin
Programa 1xxx, con mas
tareas
..
.


..

..
..

..

..
..
Fin

Programacin estructurada
Programa principal
Subprog01

Subprog02


Subprog03
Subprog01
Subprog02
Subprog03
Programa
principal
Subprog01

Subprog02

Subprog03

Subprog01, con
mas tareas
Subprog01.1
Subprog01.2
Subprog02
Subprog03

9
Ing. Ricardo Castaeda


PROGRAMACION ORIENTADA A OBJETOS
2013
1.7. Diseo del algoritmo
El algoritmo es la piedra fundamental de la programacin pues los programas y el sistema en general ser tan bueno
como buenos sean los algoritmos utilizados para la construccin de este.
En realidad un algoritmo es la descripcin de una secuencia de solucin que normalmente est compuesta por los
siguientes bloques:
INICIALIZACION LECTURA PROCESO ESCRITURA Esta estructura es como un esqueleto que siempre
tenemos que tomar en cuenta cuando desarrollamos un algoritmo. Grficamente lo consideramos como sigue:












Seudocdigo y diagrama de flujo
El seudocdigo es un algoritmo literal cuya semejanza con el lenguaje de programacin (cdigo) lo hace muy til para
la fase de previa a la escritura del programa despus el programa podr fcilmente ser escrito; veamos un ejemplo:
Ejemplo 1.1
ALGORITMO








PROGRAMA









INICIALIZAR
PROCESAR
LEER
ESCRIBIR
/* Permite verificar si una nota es aprobatoria o no */

nota es entera
1.- Leer (nota)
2.- Si (nota >=10)
Entonces
2.1. Escribir ( Aprobatoria)
Sino
2.2. Escribir (Desaprobatoria)
Fin-si
3.- Fin
/* Codigo: poo01e1
programa creado por Ricardo Castaeda de la Rosa
Fecha: 17 de marzo de 2013
objetivo: programa que verifica si una nota ingresada por teclado es aprobatoria o no
datos de entrada : nota
salida : mensaje de aprobacion o desaprobacion*/

# include<iostream.h>
# include<conio.h>
void main( )
{ int nota;
clrscr();
cout << "Nota = "; cin>> nota;
if ( nota >=10)
cout<< "Aprobatoria";
else
cout<< "Desaprobatoria";
getch( ); }

10
Ing.Ricardo Castaeda


FACULTAD DE INGENIERIA MECANICA
2013

Leer (Nota)
Nota >= 10?
V F
Escribir
Aprobado
Escribir
Desaprobado

FIN

INICIO

En cambio el objetivo del diagrama de flujo es visualizar rpidamente la lgica del algoritmo.










Diagrama de Flujo
Pero las tres herramientas representan lo mismo y por eso tambin se clasifican como:
Algoritmo literal (seudocdigo) Permite la comunicacin Persona Persona
Algoritmo codificado (programa) Permite la comunicacin Persona Computadora
Algoritmo grfico (diagrama de flujo) Visualiza la lgica.
Como vemos cada tipo de algoritmo tiene su propia utilidad, pero nos damos cuenta que son herramientas paralelas.
1.8. Objetos_Datos de Entrada/Salida
Los procesos estndares casi siempre transforman los objetos _ datos de entrada en objetos _ datos de salida. Todas
las variables se definen como almacenadores de datos de entrada o como almacenadores de resultados o en
algunos casos como variables intermedias. Los procesos transformadores normalmente tienen componentes de los
siguientes procesos bsicos:
o Procesos secuenciales.
o Procesos de decisin.
o Procesos de repeticin.
1.9. Procesos Directos o Secuenciales
Los procesos por defecto son secuenciales o directos y su objetivo es realizar un clculo o un procedimiento. Son los
casos ms comunes pero tienen poca inteligencia incorporada y sirven en problemas sencillos.
Ejemplo 1.2: Escriba un algoritmo que nos permita leer dos datos y hallar su media.
ALGORITMO





Como vemos en el ejemplo seguimos la secuencia leer, procesar, escribir.
Ejemplo 1.3: Escriba un algoritmo que lea un total de horas y lo exprese en semanas das y horas. Si lee 400 horas
debe escribir 2 semanas, 2 das y 16 horas.

dato1, dato2 son enteros
media es real
1.- Leer (dato1)
2.- Leer (dato2)
3.- media (dato1 + dato2)/2
4.- Escribir (media)
5.- Fin

11
Ing. Ricardo Castaeda


PROGRAMACION ORIENTADA A OBJETOS
2013
ALGORITMO









PROGRAMA
























EJECUCION:

total_horas, semanas, das y horas son enteros.
resto es entero
1.- Leer (total_horas)
2.- semanas total_horas/168 // Calcular Semanas
3.- resto total_horas semanas*168 // resto de divisin
4.- das resto/24 // calcular das
5.- horas resto das *24 // calcular horas
6.- Escribir (semanas, das, horas)
7.- FIN


/* CODIGO:POO1E3
PROGRAMA CREADO POR RICARDO CASTAEDA DE LA ROSA
FECHA: 17 DE MARZO DE 2013
OBJETIVO: PROGRAMA QUE LEE UNA CANTIDAD EN HORAS Y LAS ESCRIBE COMO SEMANAS, DIAS Y
HORAS.
DATOS DE ENTRADA : total_horas
SALIDA : semanas, dias,horas.*/
#include <iostream.h>
#include <conio.h>
int total_horas, semanas, dias , horas;
int resto;
void main ()
{ clrscr();
cout<<"INGRESE DATOS"<<endl;
cout<< " TOTAL DE HORAS = ";
cin>> total_horas;
semanas = total_horas / 168;
resto = total_horas % 168;
dias = resto/24;
horas = resto%24;
cout<< " SEMANAS = "<<semanas<<endl;
cout<< " DIAS = "<<dias<<endl;
cout<< " HORAS = "<<horas<<endl; getch(); }

12
Ing.Ricardo Castaeda


FACULTAD DE INGENIERIA MECANICA
2013
Ejemplo 1.4: Escriba un algoritmo que lea los coeficientes de una funcin cuadrtica, tambin el argumento y me
devuelva el valor de la funcin.
ALGORITMO














PROGRAMA





















A, B, C, x y f1 son reales
1.- INICIO
3.- Escribir("Ingrese coeficientes de A*x^2 +B*x +C ")
4.- Escribir( " A = ")
5.- Leer(A)
4.- Escribir( " B = ")
5.- Leer(B)
4.- Escribir( " C = ")
5.- Leer(C)
6.- escribir(" Ingrese argumento x = ")
7.- Leer(x)
8.- f1 A*x*x +B*x+C
9.-Escribir ( f1(x) = ,f1)
10.- FIN

/* CODIGO: POOC1E4
PROGRAMA CREADO POR RICARDO CASTAEDA DE LA ROSA
FECHA: 17 DE MARZO DE 2013
OBJETIVO: Programa secuencial que calcula una funcin de la forma
f1(x) = A*x^2 +B*x +C ; los coeficientes A, B y C sern ledos, asi como el argumento x */
#include <iostream.h>
#include <conio.h>
void main( )
{ float A,B,C;
float x, f1;
clrscr( );
cout<< "Ingrese coeficientes de A*x^2 +B*x +C "<< endl;
cout<< " A = "; cin>>A;
cout<< " B = "; cin>>B;
cout<< " C = "; cin>>C;
cout<< " Ingrese argumento x = "; cin>>x;
f1= A*x*x+B*x+C;
cout<< " f1(x) = "<< f1; getch(); }

13
Ing. Ricardo Castaeda


PROGRAMACION ORIENTADA A OBJETOS
2013
1.10. Estructuras de Decisin Simple (Si) .- Nos permite derivar el control hacia uno de dos puntos del algoritmo.
Forma General
Si (Condicin)
Entonces
...............
...........(Bloque1)
...............
[Sino
...............
...........(Bloque2)
............]
Fin Si
Funcionamiento.- Se evala la condicin, si esta se cumple (es verdadera) se ejecuta el bloque 1 (Entonces) si esta
no se cumple se ejecuta el bloque 2 (sino), en caso de que este exista, luego se pasa a la siguiente instruccin.
Nota: La forma sin el else se utiliza bastante y por eso la indicamos.
Si (Condicin)
Entonces
...............
Fin Si
Ojo que esta es la primera forma solo que sin la parte opcional else.
Ejemplo 1.6: Veremos tres casos con las mismas variables pero con diferentes valores. El funcionamiento del Si se
visualizara de acuerdo a la salida.
Segmento de Algoritmo
Nota = 15

Si (Nota > 10)
Entonces
Escribir(Aprobado)
FinSi

Escribir(FIN)



Salida de Ejecucin

Aprobado
FIN
Segmento de Algoritmo
Nota = 9

Si (Nota > 10)
Entonces
Escribir(Aprobado)
FinSi

Escribir(FIN)



Salida de Ejecucin


FIN
Segmento de Algoritmo
Nota = 8

Si (Nota > 10)
Entonces
Escribir(Aprobado)
Sino
Escribir(Desaprobado)
FinSi

Escribir(FIN)

Salida de Ejecucin

Desaprobado
FIN
Ejemplo 1.7: Escriba un algoritmo que lea cuatro valores y me muestre el menor.
ALGORITMO
Dato1, dato2, dato3, dato4, Menor1, Menor2 y MenorT son enteros
1.- Leer(dato1,dato2, dato3, dato4)
2.- Si ( dato1 < dato2)
Entonces
2.1 Menor1 dato1
Sino
2.2 Menor1 dato2
FinSi

14
Ing.Ricardo Castaeda


FACULTAD DE INGENIERIA MECANICA
2013
3.- Si ( dato3 < dato4)
Entonces
3.1 Menor2 dato3
Sino
3.2 Menor2 dato4
FinSi
4.- Si ( Menor1 < Menor2)
Entonces
4.1 MenorT Menor1
Sino
4.2 MenorT Menor2
FinSi
5.- Escribir( El menor total es =, Menort)
6.- FIN
PROGRAMA

























/* CODIGO: POOC1E7
FECHA: 17 DE MARZO DE 2013
OBJETIVO: Programa que muestra el menor de 4 valores */
# include<iostream.h>
# include<conio.h>
void main( )
{ int dato1, dato2, dato3, dato4,menor1, menor2, menort;
clrscr( );
cout<< " dato1="; cin>> dato1;
cout<< " dato2="; cin>> dato2;
cout<< " dato3="; cin>> dato3;
cout<< " dato4="; cin>> dato4;
if ( dato1<dato2)
menor1 = dato1;
else
menor1 = dato2;
if ( dato3<dato4)
menor2 = dato3;
else
menor2 = dato4;
if ( menor1<menor2)
menort = menor1;
else
menort =menor2;
cout<< " El menor total es ="<<menort;
getch( ); }

15
Ing. Ricardo Castaeda


PROGRAMACION ORIENTADA A OBJETOS
2013
Ejemplo 1.8: Escriba un programa que lea los datos de un cilindro y si son positivos y calcule el rea y el volumen.
Solucion:
ALGORITMO
/* Halla rea y volumen de un cilindro */
radio, altura, Pi son reales
area1, area, volumen son reales
1.- Leer(radio)
2.- Leer(altura)
3.- Pi = 3.1416
4.- Si ( (radio > 0) i (altura > 0)
Entonces
4.1 area1 Pi*radio
2

4.2 area2*Pi*radio*altura+ 2*area1
4.3 volumen area1*altura
4.4 Escribir(area, volumen)
FinSi
5.- FIN
PROGRAMA


















EJ ECUCION

/* CODIGO: POOC1E8
FECHA: 17 DE MARZO DE 2013
OBJETIVO: Programa que halla el volumen y area de un cilindro
Datos de Entrada:: RADIO Y ALTURA
Salida: AREA Y VOLUMEN.*/
# include<iostream.h>
# include<conio.h>
# include<math.h>
void main( )
{ float radio, altura, pi , area, volumen, area1;
clrscr( ); pi = 3.1416;
cout<< " radio = "; cin>> radio; cout<< " altura = "; cin>>altura;
if ( (radio > 0 ) && (altura > 0) )
{area1 = pi * pow (radio,2);
area = 2*pi*radio*altura+2*area1;
volumen = area1 * altura;
cout<< "Area = "<<area<<endl; cout<< "Volumen = "<<volumen; }
getch( );}

16
Ing.Ricardo Castaeda


FACULTAD DE INGENIERIA MECANICA
2013
1.11. Estructuras de decisin anidada: Esto sucede cuando una estructura de decisin est contenida
completamente dentro de otra, veamos

1 Si (Condicin1)
Entonces
1.1 ...............
1.2 Si (Condicion2)
Entonces
1.2.1............
1.2.2............
Sino
1.2.3.................
1.2.4..................
FinSi(Anidado)

Sino
1.3..............
1.4.............
FinSi(Externo)
Aqu vemos que la estructura de decisin con la condicin2, estar anidada en la estructura de decisin con la
condicin1, veamos un ejemplo.
Ejemplo 1.9: Escriba el algoritmo que me permita leer una nota y escribir la condicin acadmica del alumno en el
curso:
De 0 a 6 condicin Reprobado
De 6 a 10 condicin Desaprobado
De 10 a 16 condicin Aprobado
De 16 a 20 condicin Excelente
Solucion:
ALGORITMO
/* Discrimina nota*/
nota es entera
1. Leer ( nota)
2.-Si (nota<10)
Entonces
2.1 Si (nota>=6)
Entonces
2.1.1 Escribir(Desaprobado)
Sino
2.1.2 Escribir(Reprobado)
FinSi
Sino
2.2 Si (nota>=16)

17
Ing. Ricardo Castaeda


PROGRAMACION ORIENTADA A OBJETOS
2013
Entonces
2.2.1 Escribir(Excelente)
Sino
2.2.2 Escribir(Aprobado)
FinSi
FinSi
3.- FIN
PROGRAMA























EJ ECUCION

1.12. Estructuras de Decisin Mltiple (case).- Nos permite derivar el control hacia uno de varios puntos del
algoritmo.
Forma General
Case (ndice)
1: ...............
(Bloque1)
/* CODIGO: POOC1E9
PROGRAMA CREADO POR RICARDO CASTAEDA DE LA ROSA
FECHA: 17 DE MARZO DE 2013
OBJETIVO: Lee nota e imprime condicion academica.*/
# include<iostream.h>
# include <conio.h>
void main( )
{ int nota ;
clrscr( );
cout << "Ingrese Nota => ";
cin>> nota;
if(nota <10)
if(nota>= 6)
cout<< "Desaprobado";
else
cout<< "Reprobado";
else
if(nota>=16)
cout<< "Excelente";
else
cout<< "Aprobado";
getch( ); }

18
Ing.Ricardo Castaeda


FACULTAD DE INGENIERIA MECANICA
2013
2: ...............
(Bloque2)
3: ...............
(Bloque3)
n: ...........
(Bloque n)
Sino : ........
(Bloque por defecto)
Fin Case
Funcionamiento.- Se evala el ndice y si:
Vale 1 se ejecuta el bloque 1.
Vale 2 se ejecuta el bloque 2.
Vale n se ejecuta el bloque n.
Si cae fuera del rango [1,n} se ejecuta el bloque por defecto(sino).
A continuacin se pasa a la siguiente instruccin.
Veamos un ejemplo:
Ejemplo 1.10: Escriba un algoritmo que lea los dos operandos ( valor1 y valor2) lea tambin el operador (+, - , * /) y ejecute la operacin
indicada.
Solucion:
ALGORITMO
valor1, valor2, resultado son reales
operador es carcter
1. Leer ( valor1)
2.- Leer(valor2)
3.- Leer(operador)
4.- Case (operador)
+ : resultado valor1 + valor2
escribir(resultado = , resultado)
: resultado valor1 valor2
escribir(resultado = , resultado)
* : resultado valor1 * valor2
escribir(resultado =, resultado)
/ : resultado valor1 / valor2
escribir(resultado =, resultado)
sino: escribir( No es operacin)
Fin Case
5.- FIN






19
Ing. Ricardo Castaeda


PROGRAMACION ORIENTADA A OBJETOS
2013
PROGRAMA





















EJ ECUCION

Ejemplo 1.11: Escriba un algoritmo que lea un numero entre 30 y 50 y lo imprima en letras.
Por ejemplo: lee 35 e imprime treinta y cinco.
Solucion:

ALGORITMO
/* Lee un numero entre 30 y 50 y lo convierte a letras */
numero, dec, uni son enteros
1. Leer ( numero)
2.- Si ( (numero>=30) i ( numero<=50))
Entonces
2.1 dec numero/10
2.2 uni numero%10
2.3 Case (dec)
3 : Escribir( Treinta)
4 : Escribir ( Cuarenta)
5 : Escribir ( Cincuenta)
/* CODIGO: POOC1E10
FECHA: 17 DE MARZO DE 2013
OBJETIVO: Lee operandos y operador y realiza la operacion.*/
# include<iostream.h>
# include<conio.h>
void main( )
{ float v1, v2,res; char operador;
clrscr( );
cout<< " v1 v2="; cin>> v1>>v2;
cout<< " operador ="; cin>> operador;
switch( operador)
{case '+': res=v1+v2;
cout<<"resultado="<<res;break;
case '-' :res=v1-v2;
cout<<"resultado="<<res;break;
case '*' : res=v1*v2;
cout<<"resultado="<<res;break;
case '/' : res=v1/v2;
cout<<"resultado="<<res;break;
default : cout<< " No es operacin"; }
getch( ); }

20
Ing.Ricardo Castaeda


FACULTAD DE INGENIERIA MECANICA
2013
Fin Case
2.4 Case (uni)
1 : Escribir( y Uno)
2 : Escribir (y Dos)
3 : Escribir (y Tres)
4 : Escribir( y Cuatro)
5 : Escribir (y Cinco)
6 : Escribir (y Seis)
7 : Escribir( y Siete)
8 : Escribir (y Ocho)
9 : Escribir (y Nueve)
Fin Case
Sino
2.5 Escribir( Fuera del rango)
Fin Si
3.- FIN
PROGRAMA





























/* CODIGO: POOC1E11
FECHA: 17 DE MARZO DE 2013
OBJETIVO: Lee numero entre 30 y 50 en numeros y los transforma en letras. */
#include<iostream.h>
#include<conio.h>
void main( )
{int numero, dec, uni;
clrscr( );
cout<< " Numero = "; cin>> numero;
if ( (numero >= 30) && (numero<= 50))
{ dec = numero / 10; uni = numero % 10;
switch( dec)
{case 3 : cout<< "Treinta "; break;
case 4 : cout<< "Cuarenta "; break;
case 5 : cout<< "Cincuenta "; }
switch( uni)
{case 1 : cout<< "y uno"; break;
case 2 : cout<< "y dos"; break;
case 3 : cout<< "y tres"; break;
case 4 : cout<< "y cuatro"; break;
case 5 : cout<< "y cinco"; break;
case 6 : cout<< "y seis"; break;
case 7 : cout<< "y siete"; break;
case 8 : cout<< "y ocho"; break;
case 9 : cout<< "y nueve";
} }
else
cout<< " Fuera del rango";
getch( ); }

21
Ing. Ricardo Castaeda


PROGRAMACION ORIENTADA A OBJETOS
2013
EJ ECUCION

1.13. Estructuras Repetitivas
1.13.1. Estructura Mientras.- Nos permite ejecutar varias veces un conjunto de instrucciones.
Forma General
Mientras (Condicin)
............................
....(Bloque Mientras)
........................
Fin Mientras
Funcionamiento.- Se evala la condicin, si esta se cumple (es verdadera) se ejecuta el bloque mientras, se vuelve
a evaluar la condicin y si esta se sigue cumpliendo se vuelve a ejecutar el bloque y as se seguir repitiendo
mientras la condicin sea verdadera, si en alguna evaluacin la condicin ya no se cumple termina la repeticin y se
pasa a la siguiente instruccin.
Ejemplo 1.12: Algoritmo que lee 10 valores y me muestra la suma y el promedio de los valores ledos.
ALGORITMO























/* Halla suma y promedio de 10 valores ledos */
valor, suma , cont son enteros
promedio es real
1. cont 0
2. suma 0
3. Mientras ( cont < 10)
3.1 Leer(valor)
3.2 suma suma + valor
3.3 cont cont + 1
Fin Mientras
4. promedio suma/10.0
5. Escribir ( Suma = , suma)
6. Escribir ( Promedio =, promedio)
7. Fin


22
Ing.Ricardo Castaeda


FACULTAD DE INGENIERIA MECANICA
2013
PROGRAMA


















EJ ECUCION

1.13.2. Estructura Hacer - Mientras.- Nos permite ejecutar varias veces un conjunto de instrucciones, esta
estructura repetitiva primero ejecuta y despus prueba la condicin.
Forma General
Hacer
.........................
...........................
(Bloque sentencias)
......................
Mientras(Condicin)
/* CODIGO: POOC1E12
PROGRAMA CREADO POR RICARDO CASTAEDA DE LA ROSA
FECHA: 17 DE MARZO DE 2013
OBJETIVO: Hallar suma y promedio de 10 valores ledos */
# include<iostream.h>
# include<conio.h>
void main( )
{ int valor, suma, cont;
float promedio;
clrscr( );
cont = 0;
suma = 0;
while ( cont < 10 )
{ cout<< " valor = "; cin >> valor;
suma = suma + valor;
cont = cont + 1; // cont ++
}
promedio = suma/10.0;
cout << " Suma = "<< suma<< endl;
cout << " Promedio = " << promedio;
getch( ); }

23
Ing. Ricardo Castaeda


PROGRAMACION ORIENTADA A OBJETOS
2013
Funcionamiento.- Primero se ejecuta el bloque de sentencias y despus se evala la condicin, si esta se cumple
(es verdadera) se ejecuta nuevamente el bloque, se evala nuevamente la condicin y si esta se sigue cumpliendo
se vuelve a ejecutar el bloque y as se seguir repitiendo mientras la condicin sea verdadera, si en alguna
evaluacin la condicin ya no se cumple termina la repeticin y se pasa a la siguiente instruccin.
La diferencia con el bloque mientras es el orden en la evaluacin de la condicin (expresin
booleana en general) y la ejecucin del bloque asociado.
MIENTRAS












HACER MIENTRAS

Ejemplo 1.13: Escriba un algoritmo que lea 10 valores y me muestre la suma y el promedio de ellos.
Solucion:
ALGORITMO
/* Halla suma y promedio de 10 valores ledos.
Utiliza la estructura repetitiva el Hacer-Mientras */
valor, suma , cont son enteros
promedio es real
1.- cont 0
2.- suma 0
3.- Hacer
3.1.-Leer(valor)
3.2.- suma suma + valor
3.3.-cont cont + 1
Mientras(cont <10)
4.- promedio suma/10.0
5.- Escribir ( Suma = , suma)
6.- Escribir ( Promedio =, promedio)
7.- Fin
PROGRAMA
/* CODIGO: POOC1E13
PROGRAMA CREADO POR RICARDO CASTAEDA DE LA ROSA
FECHA: 17 DE MARZO DE 2013
OBJETIVO: Hallar suma y promedio de 10 valores ledos, con el do while */
# include<iostream.h>
# include<conio.h>
void main( )
{ int valor, suma, cont;
PROBAR

EJECUTAR
EJECUTAR
PROBAR

24
Ing.Ricardo Castaeda


FACULTAD DE INGENIERIA MECANICA
2013
float promedio;
clrscr( );
cont =suma= 0;
do { cout<< " valor = "; cin >> valor;
suma = suma + valor;
cont ++;
} while ( cont<10);
promedio = suma/10.0;
cout << " Suma = "<< suma<< endl;
cout << " Promedio = " << promedio; getch( ); }
EJ ECUCION

Ejemplo 1.14: Escriba un algoritmo que permita mostrar un men vertical, indicando las opciones en forma general.
Solucion:
ALGORITMO
/* Muestra men vertical en forma general */
opcion es caracter
1. Hacer
1.1 LimpiarPantalla ( )
1.2 Escribir ( MENU VERTICAL)
1.3 Escribir ( 1.- Tarea 1 )
1.4 Escribir ( 2.- Tarea 2 )
1.5 Escribir ( 3.- Tarea 3 )
1.6 Escribir ( 4.- Tarea 4 )
1.7 Escribir ( 5.- Salir )
1.8 Escribir ( Opcion =>)
1.9 Leer (opcion)
1.10 case ( Opcion)
1.10.1 1: Funcion1()
1.10.2 2: Funcion2()
1.10.3 3: Funcion3()
1.10.4 4: Funcion4()
FinCase
Mientras ( opcion <> 5)
2. FIN


25
Ing. Ricardo Castaeda


PROGRAMACION ORIENTADA A OBJETOS
2013
PROGRAMA









































/* CODIGO: POOC1E14
PROGRAMA CREADO POR RICARDO CASTAEDA DE LA ROSA
FECHA: 17 DE MARZO DE 2013
OBJETIVO: Muestra un menu vertical general */
# include<iostream.h>
# include<conio.h>
void main( )
{ char opcion;
do
{ clrscr( );
gotoxy(30,2);cout<<"MENU VERTICAL";
gotoxy(30,6);cout<<"1.- Tarea 1";
gotoxy(30,7);cout<<"2.- Tarea 2";
gotoxy(30,8);cout<<"3.- Tarea 3";
gotoxy(30,9);cout<<"4.- Tarea 4";
gotoxy(30,10);cout<<"5.- Salir";
gotoxy(30,16);
cout<<"Opcion --> ";
cin >> opcion;
switch ( opcion)
{ case '1': clrscr();
cout << " Tarea 1";
getch();
break;
case '2': clrscr();
cout << " Tarea 2";
getch();
break;
case '3': clrscr();
cout << " Tarea 3";
getch();
break;
case '4': clrscr();
cout << " Tarea 4";
getch();
break;
}
} while (opcion!='5');
}

26
Ing.Ricardo Castaeda


FACULTAD DE INGENIERIA MECANICA
2013
EJ ECUCION

1.13.3. Estructura Para.- Nos permite ejecutar varias veces un conjunto de instrucciones un nmero fijo de
veces.
Forma General
Para vc = vi, vf, vinc
.........................
...........................
....(Bloque Para)
........................
Fin Para
Donde: vc variable de control, llamado tambin ndice del Para.
vi valor inicial es el primer valor que toma la variable de control.
vf valor final, es el ultimo valor con el que el lazo para se ejecutara.
vinc valor incremento, valor en el cual se incrementa la variable de control despus de cada lazo.
Funcionamiento.- El funcionamiento del lazo Para se explica mediante un algoritmo.
ALGORITMO DE FUNCIONAMIENTO DEL LAZO PARA
(Considerando incremento positivo)
1 Si ( vi > vf )
Entonces
1.1 Ir a paso (6)
FinSi
2 vc vi
3 Se ejecuta rango del lazo para
4 vc vc + vinc
5 Si ( vc <= vf )
Entonces
5.1 Ir a paso (3 )

27
Ing. Ricardo Castaeda


PROGRAMACION ORIENTADA A OBJETOS
2013
6 FIN
Ejemplo 1.15: Que imprime el siguiente algoritmo
1 Para i = 1,12,2
Escribir ( i)
Fin Para
2 Escribir ( FIN)
Solucin:
De acuerdo a lo dicho y considerando lo siguiente:
vc es i : vi = 1 : vf = 12: vinc = 2
Imprimir:







Ejemplo 1.16: Escriba un algoritmo que lea 10 valores y me muestre la suma y el promedio de ellos.
Solucion:
ALGORITMO
/* Halla suma y promedio de 10 valores ledos, ojo no usa contador, pero i cumple esa funcin */
valor, suma , i son enteros
promedio es real
1. Suma 0
2. Para i = 1,10 // El incremento unitario se puede omitir
2.1. Leer(valor)
2.2. Suma suma + valor
Fin Para
3. Promedio suma/10.0
4. Escribir ( Suma = , suma)
5. Escribir ( Promedio =, promedio)
6. Fin
PROGRAMA
/* CODIGO: POOC1E16
PROGRAMA CREADO POR RICARDO CASTAEDA DE LA ROSA
FECHA: 17 DE MARZO DE 2013
OBJETIVO: Halla la suma y el promedio utilizando una instruccion for. */
#include<iostream.h>
#include<conio.h>
void main( )
{ int valor, suma, i;
float promedio;
1
3
5
7
9
11
FIN


28
Ing.Ricardo Castaeda


FACULTAD DE INGENIERIA MECANICA
2013
clrscr( );
suma = 0;
cout<<"Lectura de valores: "<<endl;
for ( i=1; i<=10; i++ )
{ cout<< " valor"<<i<<": "; cin >> valor;
suma = suma + valor;
}
promedio = suma/10.0;
cout << " Suma = "<< suma<< endl;
cout << " Promedio = " << promedio;
getch( );
}
EJ ECUCION

NOTA : Observe los siguientes puntos
El for ( Para) de C++ , inicializa la variable de control i (ndice), indica la condicin a verificar para ejecutar
una vez ms el lazo y tambin indica el valor en que se debe incrementar la variable de control.
La variable i es una variable de control pero es interna, nosotros no podemos modificar su valor.
El ultimo valor de i en los dos casos ( algoritmo y programa) es 11.


















29
Ing. Ricardo Castaeda


PROGRAMACION ORIENTADA A OBJETOS
2013
PROBLEMAS
ALGORITMOS SECUENCIALES
1.- Escriba un algoritmo que lea una cantidad en grados centgrados y lo muestre como grados Fahrenheit.
Implemente el algoritmo el Borland C++ para visualizar los datos de entrada y la emisin de resultados
Solucin:
ALGORITMO
grados_c , grados_f son reales
1. INICIO
2. Leer (grados_c)
3. grados_f 32 + (9/5)*grados_c
4. Escribir(grados_f)
5. FIN
PROGRAMA

















EJ ECUCION

2.- Dado los datos de planilla de un empleado, nombre, cdigo, sueldo bruto mensual, horas extras y das faltos
(asumiendo que el descuento sobre el total es de 15%); escriba un algoritmo que procese esta informacin y me
muestre el sueldo neto que el empleado recibir.
Implemente el algoritmo el Borland C++ para visualizar los datos de entrada y la emisin de resultados

Solucin

/* CODIGO: POOC1PROB1
PROGRAMA CREADO POR RICARDO CASTAEDA DE LA ROSA
FECHA: 17 DE MARZO DE 2013
OBJETIVO: LEER UNA CANTIDAD EN GRADOS CENTIGRADOS Y MOSTRAR SU EQUIVALENTE EN GRADOS FARENHEIT*/
#include<iostream.h>
#include<conio.h>
void main()
{
float grados_c,grados_f;
clrscr();
cout<<"Ingrese grados centigrados--> ";
cin>>grados_c;// Lee grados Centigrados
grados_f = 32+(9.0/5.0)*grados_c; //Calcula el equivalente en grados Farenheit
cout<< " En grados farenheit sera : "<< grados_f;//Muestra los grados Farenheit
getch();// nos permite visualizar el resultado, la funcin getch() pide un caracter
}

30
Ing.Ricardo Castaeda


FACULTAD DE INGENIERIA MECANICA
2013
ALGORITMO
/*Declaracion de Variables*/
nomemp es cadena
subemp es real
codemp es entero largo
hexemp es real
difemp es entero
sunemp es real
despor es real
desfal es real
destot es real
bonificacin es real
1. INICIO
2. despor 0.15 /* Valor de descuento porcentual es de 15%*/
3. Leer (nomemp) /* Leemos nombre del empleado*/
4. Leer (codemp) /* Leemos cdigo del empleado*/
5. Leer (subemp) /* Leemos sueldo bruto del empleado*/
6. Leer (hexemp) /* Leemos horas extras mensuales*/
7. Leer (difemp) /* Leemos das faltos en todo el mes*/
8. bonificacin (subemp/240)*(hexemp*1.5) /* bonificacin por horas extras*/
1. desfal (subemp/30)*difemp /*calculamos descuento por faltas*/
2. destot desfal+(subemp-desfal+ bonificacin)*despor/*Descuento total*/
3. sunemp subemp+ bonificacin-destot /*calculando sueldo bruto*/
4. Escribir(Nombre = ,nomemp)
5. Escribir(Cdigo = ,codemp)
6. Escribir(Descuentos= ,destot)
7. Escribir(Neto = ,sunemp)
8. FIN
PROGRAMA
/* CODIGO: POOC1PROB2
PROGRAMA CREADO POR RICARDO CASTAEDA DE LA ROSA
FECHA: 17 DE MARZO DE 2013
OBJETIVO: LEER DATOS DE PLANILLA DE UN EMPLEADO Y CALCULA SUELDO NETO A PAGAR */
#include<iostream.h>
#include<conio.h>
#include<stdio.h>
void main()
{ char nomemp[30];
long codemp;
float subemp,sunemp;
float despor,desfal,destot;
float bonificacion;
float hexemp;

31
Ing. Ricardo Castaeda


PROGRAMACION ORIENTADA A OBJETOS
2013
int difemp;
clrscr();
despor=0.15;
//Leemos datos de planilla
cout<< "INGRESO DE DATOS:"<<endl<<endl;
cout<<"Ingrese nombre= ";gets(nomemp);
cout<<"Codigo = ";cin>>codemp;
cout<<"Sueldo Bruto= ";cin>>subemp;
cout<<"Dias faltos = ";cin>>difemp;
cout<<"Horas extras = ";cin>>hexemp;
//Calculos de planilla
bonificacion = (subemp/240)*(hexemp*1.5);
desfal = (subemp/30)*difemp;
destot = desfal + (subemp-desfal+bonificacion)*despor;
sunemp = subemp+bonificacion-destot;
//Mostramos Resultados
cout<<endl<<endl;
cout<<"RESULTADOS:"<<endl<<endl;
cout<<" Nombre: "<<nomemp<<endl;
cout<<" Codigo: "<<codemp<<endl;
cout<<" Descuento: "<<destot<<endl;
cout<<" Neto : "<<sunemp<<endl;
getch(); }
EJ ECUCION

ALGORITMOS CON ESTRUCTURAS DE DECISIN SIMPLE
3.- Escriba un algoritmo que lea los coeficientes de una ecuacin cuadrtica de la forma a.x^2 + b.x + c = 0, y halle
las dos races.
Implemente el algoritmo el Borland C++ para ingresar los coeficientes y mostrar las races.

Solucin:
ALGORITMO
/*Declaracin de Variables*/

32
Ing.Ricardo Castaeda


FACULTAD DE INGENIERIA MECANICA
2013
a, b, c son reales
d es real
raiz1, raiz2 son reales
iraiz1, iraiz2 son reales
1. INICIO
2. Leer (a, b. c)
3. d b^2 4*a*c
4. Si (d >= 0)
Entonces
4.1. Si (d = 0)
Entonces
4.1.1. raiz1 -b/(2*a)
4.1.2. Escribir(Las dos races son iguales)
4.1.3. Escribir(Raz = ,raiz1)
Sino
4.1.4. raiz1 (-b/(2*a)) + sqrt(d)
4.1.5. raiz2 (-b/(2*a)) - sqrt(d)
4.1.6. Escribir (raiz 1 = ,raiz1)
4.1.7. Escribir (raiz 2 = ,raiz2)
Fin Si
Sino
4.2. Escribir(Las races son imaginarias)
4.3. raiz1 (-b/(2*a))
4.4. raiz2 sqrt(-d)
4.5. Escribir(raiz1 = ,raiz1, +i ,raiz2)
4.6. Escribir(raiz2 = ,raiz1, i ,raiz2)
Fin Si
5. FIN
PROGRAMA
/* CODIGO: POOC1PROB3
PROGRAMA CREADO POR RICARDO CASTAEDA DE LA ROSA
FECHA: 17 DE MARZO DE 2013
OBJETIVO: CALCULA LAS RAICES DE UNA ECUACION CUADRATICA */
#include<iostream.h>
#include<conio.h>
#include<math.h>
void main()
{ float a,b,c;
float d;
float raiz1,raiz2;
clrscr();
cout << "Ingrese coeficientes de a.x^2 + b.x + c = 0 separados por blancos: ";
cin>>a>>b>>c;

33
Ing. Ricardo Castaeda


PROGRAMACION ORIENTADA A OBJETOS
2013
d= b*b - 4*a*c;
if ( d >= 0)
if ( d==0)
{ raiz1 = (-b/(2*a));
cout<< "Las dos raices son iguales"<<endl;
cout<< "Raices = "<<raiz1;
}
else
{ raiz1 = (-b/(2*a)) + pow(d,0.5);
raiz2 = (-b/(2*a)) - pow(d,0.5);
cout<< " Raiz 1 = "<<raiz1<<endl;
cout<< " Raiz 2 = "<<raiz2<<endl;
}
else
{ cout<<"Las raices son imaginarias"<<endl;
raiz1=(-b/(2*a));
raiz2 = pow(-d,0.5);
cout<< "Raiz 1 = "<< raiz1 << " + i"<<raiz2<<endl;
cout<< "Raiz 2 = "<< raiz1 << " - i"<<raiz2<<endl;
}

getch();
}
EJ ECUCION

4.- Escriba un algoritmo que lea cuatro prcticas y halle el promedio. Las reglas son:
a) De no rendir alguna prctica el valor almacenado en esa prctica ser 99.
b) De promediarse algn 99 el valor tomado para el promedio ser de 0.
c) De existir algn 99 se promediara las otras tres prcticas.
d) De haber rendido las cuatro prcticas se eliminara la menor.
Solucin:
ALGORITMO
/*Declaracin de Variables*/
p1, p2, p3, p4, menor1, menor2, menort son enteras
promedio es real
INICIO
1. Leer (p1)
2. Leer (p2)

34
Ing.Ricardo Castaeda


FACULTAD DE INGENIERIA MECANICA
2013
3. Leer (p3)
4. Leer (p4)
5. Si (p1= 99)
Entonces
5.1. Si (p2=99) Entonces p2 0 FinSi
5.2. Si (p3=99) Entonces p3 0 FinSi
5.3. Si (p4=99) Entonces p4 0 FinSi
5.4. promedio (p2+p3+p4)/3.0
Sino
5.5. Si(p2=99)
Entonces
5.5.1. Si (p3=99) Entonces p3 0 FinSi
5.5.2. Si (p4=99) Entonces p4 0 FinSi
5.5.3. promedio (p1+p3+p4)/3
Sino
5.5.4. Si (p3=99)
Entonces
5.5.4.1. Si (p4=99) Entonces p4 0 FinSi
5.5.4.2. promedio(p1+p2+p4)/3.0
5.5.4.3. Sino
5.5.4.4. Si (p4=99)
Entonces
5.5.4.4.1. promedio (p1+p2+p3)/3.0
Sino
5.5.4.4.2. Si (p1<p2)
Entonces
5.5.4.4.2.1 menor1 p1
Sino
5.5.4.4.2.2 menor1p2
FinSi
5.5.4.4.3. Si (p3<p4)
Entonces
5.5.4.4.3.1 menor2 p3
Sino
5.5.4.4.3.2 menor2p4
FinSi
5.5.4.4.4. Si (menor1< menor2)
Entonces
5.5.4.4.4.1 menort menor1
Sino
5.5.4.4.4.2 menortmenor2
FinSi
5.5.4.4.5. promedio (p1+p2+p3+p4-menort)/3.0

35
Ing. Ricardo Castaeda


PROGRAMACION ORIENTADA A OBJETOS
2013
FinSi
FinSi
FinSi
FinSi
6. Escribir(El promedio es : ,promedio)
7. FIN
PROGRAMA
/* CODIGO:POOC1PROB4
PROGRAMA CREADO POR RICARDO CASTAEDA DE LA ROSA
FECHA: 17 DE MARZO DE 2013
OBJETIVO: CALCULAR PROMEDIO DE CUATRO PRACTICAS
REGLAS QUE OBEDECE EL PROGRAMA:
a) De no rendir alguna prctica el valor almacenado en esa prctica ser 99.
b) De promediarse algn 99 el valor tomado para el promedio ser de 0.
c) De existir algn 99 se promediara las otras tres prcticas.
d) De haber rendido las cuatro prcticas se eliminara la menor. */
#include<iostream.h>
#include<conio.h>
void main()
{ int p1, p2, p3, p4;
float promedio;
int menor1, menor2, menort;
clrscr();
cout<<" P1= ";cin>>p1;
cout<<" P2= ";cin>>p2;
cout<<" P3= ";cin>>p3;
cout<<" P4= ";cin>>p4;
if (p1==99)
{ if(p2==99) p2=0;
if(p3==99) p3=0;
if(p4==99) p4=0;
promedio =(p2+p3+p4)/3.0; }
else
if(p2==99)
{if(p3==99) p3=0;
if(p4==99) p4=0;
promedio =(p1+p3+p4)/3.0; }
else
if (p3==99)
{if (p4==99) p4=0;
promedio =(p1+p2+p4)/3.0; }
else
if (p4==99)

36
Ing.Ricardo Castaeda


FACULTAD DE INGENIERIA MECANICA
2013
promedio = (p1+p2+p3)/3.0;
else
{if(p1<p2)
menor1=p1;
else
menor1=p2;
if(p3<p4)
menor2=p3;
else
menor2=p4;
if(menor1<menor2)
menort=menor1;
else
menort=menor2;
promedio=(p1+p2+p3+p4-menort)/3.0; }
cout<<"El promedio es : "<<promedio;
getch(); }
EJ ECUCION
(Caso 3: no rindi 1 prctica)

5.- Escriba un algoritmo que me permita hallar la fecha del da siguiente dada la fecha de un da cualquiera.
Ejemplo: Lee 31/12/2006
Escribe 01/01/2007
Lee 30/06/2005
Escribe 01/07/2005
Lee 15/07/2007
Escribe 16/07/2007

Solucin:
ANALISIS
Tenemos tres casos
1.- Fin de ao: en este caso hay que comprobar si el mes es 12 (Diciembre) y el da es 31; en este caso se
inicializa da y mes y se incrementa el ao.

37
Ing. Ricardo Castaeda


PROGRAMACION ORIENTADA A OBJETOS
2013
2.- Fin de mes: en este caso hay que comprobar si es el ltimo da del mes o sea puede ser mes 6 y da 30
mes 7 y da 31 o mes 2 y da 29 pero en ao bisiesto; en este caso se inicializa el da, el mes se incrementa
en 1 y el ao permanece igual.
3.- El caso no es ni fin de ao ni fin de mes: se incrementa da; mes y ao permanecen igual.
ALGORITMO
/*Declaracin de Variables*/
da, mes, ao son enteras
cond1,cond2,cond3,cond4 son enteras
1. INICIO
2. Leer (da)
3. Leer (mes)
4. Leer (ao)
5. cond1 (da=31) i (mes=12) /*Condicin cambio de ao*/
6. cond2 (da=31) i ((mes=1)o(mes=3)o(mes=5)o(mes=7)o(mes=8)o(mes= 10))/*Cambio de mes.(31 das)*/
7. cond3 (da=30) i ((mes=4)o(mes=6)o(mes=9)o(mes=11))/*Cambio de mes.(30 das)*/
8. cond4 ((da=28) i (mes=2) i (ao%4)!=0)) o ((da=29) i (mes=2) i (ao%4)= 0))/*Cambio de mes. febrero*/
9. Si (cond1)
Entonces
9.1. da 1
9.2. mes1
9.3. aoao+1
Sino
9.4. Si (cond2 o cond3 o cond4)
Entonces
9.4.1. da 1
9.4.2. mesmes +1 Sino
9.4.3. dadia+1
FinSi
FinSi
10. Escribir(dia,mes.ao)
11. FIN
PROGRAMA
/* CODIGO:POOC1PROB5
PROGRAMA CREADO POR RICARDO CASTAEDA DE LA ROSA
FECHA : 17 DE MARZO DE 2013
OBJETIVO: LEE UNA FECHA Y ESCRIBE FECHA DEL DIA SIGUIENTE */
#include<iostream.h>
#include<conio.h>
void main()
{ int dia, mes, a , cond1,cond2,cond3,cond4;
clrscr();
cout<<"Ingrese dia entre 1 y 31 ==> "; cin>>dia;

38
Ing.Ricardo Castaeda


FACULTAD DE INGENIERIA MECANICA
2013
cout<<"Ingrese mes entre 1 y 12 ==> "; cin>>mes;
cout<<"Ingrese ao entre 1900 y 2010 ==> "; cin>>a;
cond1 = (dia==31)&&(mes==12); /*Condicin cambio de ao*/
cond2 = (dia==31)&&((mes==1)||(mes==3)||(mes==5)||(mes==7)||(mes==8)||(mes==10));
cond3 = (dia==30)&&((mes==4)||(mes==6)||(mes==9)||(mes==11));
cond4 = ((dia==28)&&(mes==2)&&((a%4)!=0))|| ((dia==29) && (mes==2) && ((a%4)== 0));
if (cond1)
{ dia=1;
mes=1;
a =a+1; }
else
if(cond2 || cond3 || cond4)
{ dia = 1;
mes =mes +1; }
else
dia = dia+1;
cout<< "EL DIA SIGUIENTE ES ==> "<<dia<<"/"<<mes<<"/"<<a;
getch(); }
EJ ECUCION

ALGORITMOS CON ESTRUCTURAS DE DECISIN MULTIPLE
6.- Escriba un algoritmo que lea el precio de un artculo y el nmero de cuotas, calculando el pago mensual de
acuerdo al siguiente cuadro:
- 1 cuota. 0% de inters
- 2 cuotas 3% de inters.
- 4 cuotas 7% de inters
- 5 cuotas 9% de inters.
- 10 cuotas 20% de inters.
- 12 cuotas 25% de inters.
- 24 cuotas 60% de inters.
ALGORITMO
precio, pago_mes son reales
numero_c es entera
1. INICIO
2. Leer (precio)
3. Leer (numero_c)
4. Case(digito)
1: pago_mes precio
escribir(pago_mes)
2: pago_mes precio*(1+0.03)/numero_c

39
Ing. Ricardo Castaeda


PROGRAMACION ORIENTADA A OBJETOS
2013
escribir(pago_mes)
4: pago_mes precio*(1+0.07)/numero_c
escribir(pago_mes)
5: pago_mes precio*(1+0.09)/numero_c
escribir(pago_mes)
10: pago_mes precio*(1+0.20)/numero_c
escribir(pago_mes)
12: pago_mes precio*(1+0.25)/numero_c
escribir(pago_mes)
24: pago_mes precio*(1+0.60)/numero_c
escribir(pago_mes)
Sino: escribir(Error el numero de cuotas no es vlido)
Fin Case
5. FIN
PROGRAMA
/* CODIGO: POOC1PROB6
PROGRAMA CREADO POR RICARDO CASTAEDA DE LA ROSA
FECHA: 17 DE MARZO DE 2013
OBJETIVO: Lee precio de un articulo y numero de cuotas y calcula pago mensual */
# include<iostream.h>
# include<conio.h>
void main( )
{ float precio, pago_mes; int numero_c;
clrscr();
cout<< " Ingrese precio del articulo: ";
cin>>precio;
cout<< " Ingrese numero de cuotas: ";
cin>>numero_c;
switch( numero_c)
{ case 1: pago_mes = precio;
cout<< "Pago mensual= "<<pago_mes;
break;
case 2: pago_mes = precio*(1+0.03)/numero_c;
cout<< "Pago mensual= "<<pago_mes;
break;
case 4: pago_mes = precio*(1+0.07)/numero_c;
cout<< "Pago mensual= "<<pago_mes;
break;
case 5: pago_mes = precio*(1+0.09)/numero_c;
cout<< "Pago mensual= "<<pago_mes;
break;
case 10:pago_mes = precio*(1+0.20)/numero_c;
cout<< "Pago mensual= "<<pago_mes;

40
Ing.Ricardo Castaeda


FACULTAD DE INGENIERIA MECANICA
2013
break;
case 12:pago_mes = precio*(1+0.25)/numero_c;
cout<< "Pago mensual= "<<pago_mes;
break;
case 24:pago_mes = precio*(1+0.60)/numero_c;
cout<< "Pago mensual= "<<pago_mes;
break;
default : cout<< " Error el numero de cuotas no es valido"; }
getch( );}
EJ ECUCION

ALGORITMOS CON ESTRUCTURAS
DE REPETICIN
7.- Escriba un algoritmo que calcule la serie exponencial con 3 dgitos decimales exactos.
Solucin
ANALISIS
La serie exponencial es e
x
= 1 + x/1! +x
2
/2! + x
3
/3! +x
n
/n! + x
(n+1)
/(n+1)!....
Vemos que esta serie se inicializa con el valor 1.
La secuencia (Regla de formacin) en el numerador es x
0
,x
1
,x
2
..
numerador numerador *x, valor inicial 1
En el denominador es 0!, 1!, 2!, 3! o sea
denominador denominador * i (i es el orden de la iteracin o tambin contador).
Los 3 dgitos decimales exactos significan un error menor o igual a 0.0005(0.5 x 10
-3
), adems el error de la serie
se estima como el primer termino despreciado o s si tomamos n trminos el error ser x
(n+1)
/(n+1)!
Nota. x debe estar en el rango [0 1]
ALGORITMO
/*Declaracin de Variables*/
expx, termino, numerador, x son reales
cont, denominador son enteros
1. INICIO
2. error 1
3. maxerror 0.0005
4. expx 1
5. numerador 1
6. denominador1
7. contador1
8. Leer (x)
9. Mientras (error>= maxerror)
9.1. numerador numerador*x

41
Ing. Ricardo Castaeda


PROGRAMACION ORIENTADA A OBJETOS
2013
9.2. denominadordenominador*contador
9.3. termino numerador/denominador
9.4. expx expx +termino
9.5. contador contador +1
9.6. error abs(termino*x/(contador+1))
Fin Mientras
10. Escribir(exp(x), expx) /* Muestro valor de librera y valor calculado.
11. FIN
PROGRAMA
/* CODIGO: POOC1PROB7
PROGRAMA CREADO POR RICARDO CASTAEDA DE LA ROSA
FECHA: 17 DE MARZO DE 2013
OBJETIVO: CALCULA LA SERIE EXPONENCIAL CON 3 DIGITOS DECIMALES EXACTOS */
#include<iostream.h>
#include<conio.h>
#include<math.h>
void main()
{ int contador , denominador;
float expx,error,maxerror,termino, numerador,x;
clrscr();
maxerror= 0.0005;
error = 1;
expx = 1;
numerador = 1;
denominador = 1;
contador = 1;
cout<<"Ingrese valor x (0.0 y 1.0)==> "; cin>>x;
while (error>maxerror)
{ numerador = numerador *x;
denominador = denominador*contador;
termino = numerador/denominador;
expx = expx + termino;
contador = contador + 1;
error = fabs(termino*x/(contador +1)); }
cout<<endl<<endl;
cout<< "El valor calculado por programa es : "<<expx<<endl;
cout<< "El valor calculado con la funcin de biblioteca es:"<<exp(x)<<endl;
getch(); }
EJ ECUCION



42
Ing.Ricardo Castaeda


FACULTAD DE INGENIERIA MECANICA
2013
EJERCICIOS PROPUESTOS
1. Escriba un algoritmo y programa que lea tres valores que representen los lados de un tringulo y me indique
si el tringulo es escaleno, issceles o equiltero.
2. Escriba un algoritmo que genere 4 valores al azar entre 1 y 13 (cuatro cartas de una baraja de casinos) y me
indique si tenemos un par, 2 pares , un tro o un pker ( cuatro iguales).
3. Escriba un algoritmo que lea una expresin aritmtica entera y me entregue el resultado final.
4. Por ejemplo lee 3 + 5 7 y escribe 1 cuando ingresamos el operador =.
5. Escriba un algoritmo y programa que lea n valores y me entregue el mayor de todos, el menor de todos y el
promedio final.( n ser ledo tambin).
6. Crear un algoritmo que nos permita calcular (


7. Escriba un algoritmo que nos permita hallar la fecha del dia anterior, dada la fecha de cualquier dia.































43
Ing. Ricardo Castaeda


PROGRAMACION ORIENTADA A OBJETOS
2013


















CAPITULO II
























44
Ing.Ricardo Castaeda


FACULTAD DE INGENIERIA MECANICA
2013
2 ESTRUCTURA DE UN PROGRAMA BORLAND C++.
2.1 Organizacin de un Programa Borland C++: Se compone de los bloques:






Directivas del Preprocesador: Permite que se realicen ciertas tareas antes que la compilacin se efecte.
Las directivas son normalmente #include y #define.
Ejemplo:
# include <math.h> // incluye el archivo fuente en C++ de las libreras matemticas
# include <conio.h> // incluye el archivo fuente de manejo de pantalla
# define PI 3.1416 // indica que PI es equivalente a 3.1416
Tambin:
# include <nombre_archivo> // Busca en directorio por defecto
# include nombre_archivo// Busca en directorio actual y luego en directorio por defecto
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
La funcin main(). Es el punto de inicio de la ejecucin de un programa
En programas simples todo el cdigo se coloca en el programa. Veamos un ejemplo









En programas ms complejos el cdigo va en las funciones
Directivas del PreProcesador
Include
Macros
Datos y funciones externas

Datos y Funciones Globales

void main( )
{.
...........

}
# include <iostream.h>
#include <conio.h>
void main ( )
{ int a,b,c;
clrscr();
cout<< ingrese a: ;
cin>>a;
cout<< ingrese b: ;
cin>>b;
c=a+b;
cout<<La suma es:<<c<<endl;
getch(); }

45
Ing. Ricardo Castaeda


PROGRAMACION ORIENTADA A OBJETOS
2013
void main ( )
{ leer ( );
procesar_planilla( );
imprimir_planilla( ); }
Lo visualizamos as:








2.2 Estructura General de un programa en Borland C++. -
Introduccin .- Un programa en C++ se compone de una o ms funciones. Por lo menos debe existir la funcin
main(), una funcin es un grupo de instrucciones que realizan una tarea (o tareas). Un programa nos permite
incluir una serie de archivos de cabecera, que tambin contiene definiciones y otras funciones.
Ejemplo : Programa que realiza una suma utilizando funciones y variables globales.
# include<iostream.h>
# include<conio.h>
/* Variables globales */
int operando1, operando2;
int resultado;
/* funciones globales, declaracin de prototipos */
void leer( );
void sumar( );
void escribir( );
void main( )
{ leer ( );
sumar ( );
escribir ( ) ; }
/* 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(); }
void procesar_planillar( )
{ }

void main()
{ }
void leer( )
{ }
void inprimir_planillar( )
{ }


46
Ing.Ricardo Castaeda


FACULTAD DE INGENIERIA MECANICA
2013
Creacin de un Programa.- Para crear y ejecutar un programa hay que realizar las siguientes etapas:
Utilizando un editor de texto escribimos el programa y lo grabamos, este programa grabado ser el archivo
fuente del programa.
Genera nombre.cpp
Traduccin del programa a lenguaje de maquina o un cdigo entendible por el computador, llamado tambin
compilacin, se genera el cdigo objeto.
Genera nombre.obj
Enlace del cdigo objeto con los cdigos de las diferentes libreras producindose el cdigo ejecutable.
Genera nombre.exe
Compilacin, enlace y ejecucin.- El editor, el compilador y la ejecucin estn disponibles en el entorno
integrado del Borland C++.
El editor en el men edit
El compilador en Project
La ejecucin en el men debug (depuracin).
2.3 Elementos de un programa en C++.- Se compone de elementos llamados tokens, que pueden ser
identificadores, palabras reservadas, comentarios, signos de puntuacin, separadores y archivos de
cabecera.
Identificadores.- Cadenas de caracteres sirven para identificar cualquier elemento de un programa
como constantes, variables, funciones etc. Ejemplo: lnea, leer_datos, valor, suelo, PI. Todo identificador
est compuesto por letras, dgitos y el carcter subrayado, el primer carcter debe de ser una letra.
Palabras reservadas.- Son identificadores que son utilizados por el sistema y no pueden ser utilizados
para otros fines. Ejemplo: char, return, break, if etc.
Comentarios.- Nos entregan informacin sobre el programa pero no son procesables. Existen dos tipos
en C
/* ........*/ Comentario se puede hacer por varias lneas
/* Realizado por: AAAAAAAAAA
Fecha: 99/99/99
Calcula aaaaa */
// Comentario para el final de la lnea
contador = contador + 1; // Incremento unitario del contador

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

int 9 digitos 4 bytes
long 9 digitos 4 bytes

47
Ing. Ricardo Castaeda


PROGRAMACION ORIENTADA A OBJETOS
2013
Real


char



2.5 Constantes.- Se clasifican en:
Constantes literales. ( Escritas directamente en el programa)
Enteras. 125, 100, 0x372
Reales. 1.25E-4, 75.25
Carcter. A, n
Cadena. jose ruiz, ------------
Constantes definidas(Simblicas). Definidas mediante #define
#define linea ---------------
#define maximo 1000
#define raiz2 1.4142
Constantes enumeradas. Se utilizan para clarificar un programa, un ejemplo seria: enum frutas {
naranja, papaya, fresa, limn}, inmediatamente el compilador asocia un numero de orden a cada
elemento, el primero ser 0 (naranja)

Constantes declaradas. Se declara con el formato
const tipo nombre = valor;
ejemplo: const int dias_mes = 30;
const char[ ] titulo = MENU PRINCIPAL

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


Ejemplo: int contador = 0, suma = 0;
float raiz = 1.0;
long factorial=1;
2.7 Entrada y salida simple en C++.- La entrada y salida bsica en C++ se realiza utilizando los flujos cin y cout.
El flujo cin(entrada) conecta el dispositivo por defecto de enatrada(teclado) con el sistema.
El flujo cout(salida) conecta el programa con el dispositivo asignado por defecto a la salida(Pantalla).
Para colocar informacin en cout se utiliza el operador sobrecargado << y para tomar informacin en cin se
utiliza el operador sobrecargado >>. Veamos el ejemplo 1.-




float 3.4 x 10
-38
a 3.4 x 10
38
4 bytes
double 1.7 x 10
-308
a 1.7 x 10
308
8 bytes
long double 3.4 x 10
-4932
a 3.4 x 10
3932
10bytes
Char -128...... 127 1 byte
Unsigned char 0..255 1 byte
Tipo nombre [= valor];

48
Ing.Ricardo Castaeda


FACULTAD DE INGENIERIA MECANICA
2013




















EJ ECUCION

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















/* CODIGO: POOC2E1
FECHA: 18 DE MARZO DE 2013
OBJETIVO: Mostrar la salida en pantalla utilizando el operador << y el flujo cout, con constantes y variables. */
# include<iostream.h>
# include<conio.h>
#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(); }

/* CODIGO: POOC2E2
FECHA: 18 DE MARZO DE 2013
OBJETIVO: Mostrar las diferentes formas de leer valores y almacenarlos en las variables */
#include<iostream.h>
#include<conio.h>
void main( )
{ int voltaje,corriente;
clrscr();
cout<<"Ingrese voltaje ==> ";cin>>voltaje;
cout<<"Ingrese corriente=> ";cin>>corriente;
cout<<"Voltaje = "<<voltaje<<endl; cout<<"Corriente = "<<corriente<<endl;
cout<<"Ingrese voltaje y corriente separados por blancos ==> ";
cin>>voltaje>>corriente;
cout<<"Potencia ==> "<<voltaje*corriente; getch();}
PROGRAMA

49
Ing. Ricardo Castaeda


PROGRAMACION ORIENTADA A OBJETOS
2013

2.8 Secuencias de escape.- Las secuencias de caracteres en las que el primero es la barra invertida, se
denominaron secuencias de escape y nos permiten enviar ciertos caracteres a la pantalla. Por ejemplo, \n
se utiliza para representar el carcter nueva lnea (decimal 10) y \t ser tabulacin horizontal. La tabla es:.
Secuencia Valor Smbolo Que hace
\a 0x07 BEL Sonido audible (bell)
\b 0x08 BS Retroceso (backspace)
\f 0x0C FF Salto de formato (formfeed)
\n 0x0A LF Saltar una lnea (linefeed)
\r 0x0D CR Retorno de carro (carriage return)
\t 0x09 HT Tabulacin horizontal (H Tab)
\v 0x0B VT Tabulacin vertical (V Tab)
Veamos el ejemplo 3.- PROGRAMA















EJECUCION













/* CODIGO: POOC2E3
FECHA: 18 DE MARZO DE 2013
OBJETIVO: MANEJO DE SECUENCIAS DE ESCAPE */
#include<iostream.h>
#include<conio.h>
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;
clrscr();
cout<<"\n\t\t\t TABULANDO UNA FUNCION \n\n\n";
cout<<"\t Ingrese coeficientes A,B,C separados por blancos: ";
cin>>A>>B>>C;
cout<<"\t Ingrese valor inicial : ";cin>>x;
cout<<"\t Ingrese cantidad de valores : ";cin>>n;
cout<<"\t Ingrese incremento de x : ";cin>>dx;
cout<<"\n\n"; cout<<"\t\tx";
cout<<"\t\tf(x) \n"; cout<<"\t\t__";
cout<<"\t\t____ \n\n";
for(i=1;i<=n;i++)
{ fx= A*x*x+B*x+C;
cout<<"\t\t"<<x;
cout<<"\t\t"<<fx<<"\n";
x=x+dx; }
getch() ; }

50
Ing.Ricardo Castaeda


FACULTAD DE INGENIERIA MECANICA
2013








EJ ECUCION

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

51
Ing. Ricardo Castaeda


PROGRAMACION ORIENTADA A OBJETOS
2013
oct Establece la base octal.
endl Inserta nueva lnea y cambia de flujo
ends Inserta un cero nulo al final de la
cadena.
flush Vaca el flujo
setbase(int n) Establece la conversin 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 carcter c.
setprecision(int n) Establece precisin 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


















EJ ECUCION

Tabla de indicadores de formato:
/* CODIGO: POOC2E4
PROGRAMA CREADO POR RICARDO CASTAEDA DE LA ROSA
FECHA: 18 DE MARZO DE 2013
OBJETIVO: Utilizacion de manipuladores de flujo de salida */
#include<iostream.h>
#include<conio.h>
void main( )
{ // Lee un valor y lo muestra en formato decimal, octal y hexadecimal
int numero;
clrscr();
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();
}

52
Ing.Ricardo Castaeda


FACULTAD DE INGENIERIA MECANICA
2013
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 nmeros en notacin
cientfica.
ios::fixed Muestra en formato de punto fijo.
ios::dec Formatea a base 10.
ios::hex Formatea a base 16.
ios::oct Formatea a base 8.
ios::uppercase Formatea la parte literal a
mayscula.
ios::showbase Imprime el prefijo de base.
Ios::showpos Imprime signo
Ios::showpoint Completa con ceros.
Ejemplo 5.- Veamos un ejemplo que maneje la precisin de salida de un valor real.
PROGRAMA


















/* CODIGO: POOC2E5
FECHA: 18 DE MARZO DE 2013
OBJETIVO: Muestra el uso del manipulador setprecision( )
para indicar el nmero de dgitos decimales del valor flotante.*/
#include <iostream.h> //Para cout
#include <iomanip.h> //Para setprecision( )
#include <conio.h> //Para getch()
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(); }

53
Ing. Ricardo Castaeda


PROGRAMACION ORIENTADA A OBJETOS
2013
EJ ECUCION

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















EJ ECUCION

/* CODIGO: POOC2PROB1
PROGRAMA CREADO POR RICARDO CASTAEDA DE LA ROSA
FECHA: 18 DE MARZO DE 2013
OBJETIVO: Lee un numero y halla cuantos cifras pares y cifras pares componen el numero. */
int num,cifra;
int contp, conti; // contador de cifras pares y contador de cifras impares
# include<iostream.h>
# include<conio.h>
void main( )
{ clrscr( );
gotoxy(30,2); cout<<"Ingrese un numero: ";cin>>num;;
while( num!=0)
{ cifra = num%10;
if (cifra%2==0)
contp++;
else
conti++;
num=num/10; }
gotoxy(30,6);cout<<"Cifras pares : "<<contp;
gotoxy(30,7);cout<<"Cifras impares: "<<conti;
getch(); }


54
Ing.Ricardo Castaeda


FACULTAD DE INGENIERIA MECANICA
2013
Nota: Observe algunos detalles, las variables son globales, por lo tanto los contadores se inicializan automticamente
desde cero. Adems num es una variable entera solo debe permitir valores de 5 cifras pero se sobrepasa, quiere
decir que el tipo entero ocupa ms de dos bytes (4 bytes).
2.- Escribamos un programa que nos permita realizar operaciones con nmeros complejos, este programa realizara la
suma, resta y multiplicacin con nmeros complejos, la divisin se deja como tarea para el estudiante.
PROGRAMA
/* CODIGO: POOC2PROB2
PROGRAMA CREADO POR RICARDO CASTAEDA DE LA ROSA
FECHA: 18 DE MARZO DE 2013
OBJETIVO: Halla suma, resta y multiplicacin de nmeros complejos */

# include<iostream.h>
# include<conio.h>
void main( )
{ float ar, ai, br, bi, rr ,ri;
char opcion;
do
{ clrscr( );
gotoxy(30,2);
cout<<"OPERACIONES CON COMPLEJOS";
gotoxy(30,6);cout<<"1.- Suma ";
gotoxy(30,7);cout<<"2.- Resta ";
gotoxy(30,8);cout<<"3.- Multiplicacin ";
gotoxy(30,9);cout<<"4.- Divisin ";
gotoxy(30,10);cout<<"5.- Salir ";
gotoxy(30,16);
cout<<"Opcion --> ";
cin >> opcion;
switch ( opcion)
{ case '1': clrscr();
gotoxy(30,2); cout<<"SUMA";
gotoxy(30,6);cout<<"ar = "; cin >> ar;
gotoxy(30,7);cout<<"ai = "; cin >> ai;
gotoxy(30,8);cout<<"br = "; cin >> br;
gotoxy(30,9);cout<<"bi = "; cin >> bi;
rr = ar + br;
ri = ai + bi;
gotoxy ( 30,22); cout << " rr = " << rr;
gotoxy ( 30,23); cout << " ri = " << ri;
getch();
break;
case '2': clrscr();
gotoxy(30,2); cout<<"RESTA";

55
Ing. Ricardo Castaeda


PROGRAMACION ORIENTADA A OBJETOS
2013
gotoxy(30,6);cout<<"ar = "; cin >> ar;
gotoxy(30,7);cout<<"ai = "; cin >> ai;
gotoxy(30,8);cout<<"br = "; cin >> br;
gotoxy(30,9);cout<<"bi = "; cin >> bi;
rr = ar - br;
ri = ai - bi;
gotoxy ( 30,22); cout << " rr = " << rr;
gotoxy ( 30,23); cout << " ri = " << ri;
getch();
break;
case '3': clrscr();
gotoxy(30,2); cout<<"MULTIPLICACION";
gotoxy(30,6);cout<<"ar = "; cin >> ar;
gotoxy(30,7);cout<<"ai = "; cin >> ai;
gotoxy(30,8);cout<<"br = "; cin >> br;
gotoxy(30,9);cout<<"bi = "; cin >> bi;
rr = (ar*br) - (ai*bi);
ri = (ar*bi) + (ai*br);
gotoxy ( 30,22); cout << " rr = " << rr;
gotoxy ( 30,23); cout << " ri = " << ri;
getch();
break;
case '4': clrscr();
cout << " tarea ";
getch();
break; }
} while ( opcion!='5'); }

EJ ECUCION


56
Ing.Ricardo Castaeda


FACULTAD DE INGENIERIA MECANICA
2013

3.- Escriba un programa que utilice la definicin del tipo enumerado color, e imprima el color escogido.
PROGRAMA
/* CODIGO: POOC2PROB3
FECHA: 18 DE MARZO DE 2013
OBJETIVO: Maneja tipo enumerado */
# include<iostream.h>
# include<conio.h>
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();}
EJ ECUCION

57
Ing. Ricardo Castaeda


PROGRAMACION ORIENTADA A OBJETOS
2013

4.- Elaborar un programa que haga clculos para generar una boleta de ventas incluyendo el IGV, considere el uso
de salida formateada y tambin la funcin gotoxy().
PROGRAMA
/* CODIGO: POOC2PROB4
FECHA: 18 DE MARZO DE 2013
OBJETIVO: Maneja la funcin gotoxy y presenta resultados de una boleta de ventas con una salida formateada. */
# include<iostream.h>
# include<conio.h>
# include<iomanip.h>
void main( )
{ char producto[30];
float precio,cantidad,igv,total,sumatotal;
int n,i;
clrscr();
cout<<" Ingrese cantidad de productos ==> ";
cin>>n;
clrscr();
gotoxy(6,4);cout<<"LISTADO DE COMPRAS";
gotoxy(58,4);cout<<"BOLETA DE PAGOS" ;
gotoxy(58,6);cout<<"Producto";
gotoxy(58,7);cout<<"========";
gotoxy(68,6);cout<<"Precio";
gotoxy(68,7);cout<<"======";
cout<<setiosflags(ios::fixed);
cout<<setiosflags(ios::showpoint);
cout<<setprecision(2);
cout<<setiosflags(ios::right);
total=0;
for(i=1;i<=n;i++)
{ gotoxy(2,8+i);cout<<"Producto "<<i<<" : ";cin>>producto;
gotoxy(24,8+i);cout<<"Precio "<<i<<" : ";cin>>precio;
gotoxy(40,8+i);cout<<"Cantidad "<<i<<" : ";cin>>cantidad;
gotoxy(58,8+i);cout<<"| "<<setw(5)<<producto;
gotoxy(67,8+i);cout<<"| "<<setw(5)<<precio*cantidad;
total =total+precio*cantidad; }
igv=total*0.19;
sumatotal=total+igv;
gotoxy(58,8+i);cout<<"------------------";

58
Ing.Ricardo Castaeda


FACULTAD DE INGENIERIA MECANICA
2013
gotoxy(53,9+i);cout<<"TOTAL "<<setw(6)<<total;
gotoxy(53,10+i);cout<<"IGV "<<setw(6)<<igv;
gotoxy(53,11+i);cout<<"----------------------";
gotoxy(53,12+i);cout<<"TOTAL A PAGAR "<<setw(7)<<sumatotal;
getch(); }
EJ ECUCION
































59
Ing. Ricardo Castaeda


PROGRAMACION ORIENTADA A OBJETOS
2013

























CAPITULO III






















60
Ing.Ricardo Castaeda


FACULTAD DE INGENIERIA MECANICA
2013
3 ESTRUCTURAS DE CONTROL EN C
3.1 Expresiones y operadores
Expresiones.- Una expresin es una secuencia de operadores y operandos, aunque tambin podemos
tener algunas expresiones que salen de este formato. Ejemplo : a = *c; p1 = &c; numero ++.
Operadores aritmticos.- Nos permiten realizar las operaciones aritmticas bsicas sean del tipo real
(float) o entero, considerando que en lenguaje C se define el tipo de operacin por los operandos, si al
menos un operando es del tipo float la operacin se realizara en el modo real.







Ejemplo : 4%3 ser 1 y 3%4 ser 3 ; 10/4 ser 2 y 10/4.0 ser 2.5
En el primer caso la divisin es 1 y el resto 1.
En el segundo caso la divisin es 0 y el resto 3
En el tercer caso la divisin es 2 y en el cuarto caso la divisin es 2.5 (Modo real)
Operadores de incremento y decremento.- Los operadores ++ y - - suman o restan 1 a su argumento. Por
ejemplo a++ y ++a producen el mismo efecto. Sobre el argumento pero :
int numero, valor ;
valor = 6;
numero = valor++; //Asigna a numero 6 a numero y luego incrementa valor a 7
numero = ++valor; // Incrementa valor a 7 y luego asigna 7 a numero
Lo mismo sucede con cont - - y - - cont

Operadores de asignacin, relacin, lgicos y desplazamiento.-
Operadores de asignacin.- Consideramos el smbolo = operador de asignacin. Por ejemplo podemos
colocar cont1 = cont2 = cont3 = 0; Le asignamos el valor cero a los tres contadores pero esta operacin
se realiza de izquierda a derecha. Tambin podemos abreviar c+=5 ; que es equivalente a c = c +5,
tenemos la siguiente tabla



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 no es igual a b
Operador Entero Real .
+ Unitario mas Unitario mas
- Unitario menos Unitario menos
+ Suma Suma
- Resta Resta
* Producto Producto
/ Cociente de divisin entera Cociente real
% Resto de divisin entera
++ Incremento
-- Decremento
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

61
Ing. Ricardo Castaeda


PROGRAMACION ORIENTADA A OBJETOS
2013
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 no es igual a b
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 no es igual a b
Pero tambin podemos tener a = b > c en cuyo caso a valdr 1 si b es mayor que c y cero en caso
contrario.
Operadores lgicos.- Son el not el and y el or, Relacionan operandos booleanos y su resultado es
booleano, estos son:
Negacin ! el not lgico
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

















EJ ECUCION

Operadores Especiales.- Existen otros operadores que pasaremos a revisar
o Operadores de Direccin.- Tenemos los siguientes
*accede el campo apuntado.
& Devuelve la direccin del operando
/* CODIGO: POOC3E1
PROGRAMA CREADO POR RICARDO CASTAEDA DE LA ROSA
FECHA:18 DE MARZO DE 2013
OBJETIVO: Lee un numero y lo invierte */
# include<iostream.h>
# include<conio.h>
void main( )
{ int numero, num_inv, digito ;
clrscr( );
num_inv = 0;
cout << " Ingrese un numero de 4 digitos => ";
cin >> numero;
while ( numero >= 10)
{ digito = numero % 10;
num_inv = num_inv*10 + digito;
numero = numero / 10; }
num_inv = num_inv*10 + numero ;
cout << " El numero invertido sera = " << num_inv;
getch(); }

62
Ing.Ricardo Castaeda


FACULTAD DE INGENIERIA MECANICA
2013
Ejemplo 2: Escriba un programa que maneje punteros de forma bsica.
PROGRAMA

























EJ ECUCION


. 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



Operador Coma, Operador( ),Operador[ ], Operador : .-
Coma combina expresiones a> b , c > 10 // a mayor que b , c mayor que 10
( ) Llama a funciones y tambin altera prioridad
[ ] Acompaa a los arrays
:: Indica mbito void empleado :: planilla ( ) // indica la funcin planilla perteneciente a
empleado.
expresion_c ? expresion_v : expresion_f
v1 > v2 ? v1 : v2
devuelve el mayor valor de v1 , v2

/* CODIGO: POOC3E2
PROGRAMA CREADO POR RICARDO CASTAEDA DE LA ROSA
FECHA: 18 de MARZO DE 2013
OBJETIVO: Observar manejo de punteros en forma basica */
# include<iostream.h>
# include<conio.h>
void main( )
{
int *p1 ; // Declaramos una variable tipo puntero
int a, b ; //Declaramos las variables a y b del tipo entero
clrscr( );
a = 17;
b = 18;
p1 = &a; // p1 apunta hacia a
cout << "Valor apuntado por p1 ==> "<<*p1<<endl; // Se imprime el valor apuntado por p1
cout << "Direccion de a almacenada en p1 ==> "<<hex << p1<< endl; // Imprime la direccin de a contenida en p1
cout << dec; // vuelve al formato decimal
p1 =&b; // p1 toma la direccin de b
cout << "Nuevo valor apuntado por p1==> "<<*p1; // muestra valor almacenado en el campo apuntado por p1(b)
getch(); }

63
Ing. Ricardo Castaeda


PROGRAMACION ORIENTADA A OBJETOS
2013
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
a. 2,3 o 12 pierde el juego
b. 7 u 11 gana el juego
c. Otra suma vuelve a jugar
b) A partir de la segunda jugada el jugador sigue las reglas
a. Si repite la primera suma gana
b. Obtiene 7 pierde
PROGRAMA





























EJ ECUCION
/* CODIGO: POOC3E3
FECHA: 18 DE MARZO DE 2013
OBJETIVO: Escribir un programa que simula un juego de dados */
# include<iostream.h>
# include<conio.h>
# include<stdlib.h>
# include<time.h>
void main( )
{ int juego1, juego, dado1,dado2;
clrscr ();
randomize();
dado1 = random(6) + 1;
dado2 = random(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 = random(6) + 1;
dado2 = random(6) + 1;
juego = dado1 + dado2;
cout<<juego<<endl;
} while ( ( juego != juego1) && ( juego != 7));
if ( juego == juego1)
cout << "Gano juego";
else
cout << "Perdio juego";
}
getch(); }

64
Ing.Ricardo Castaeda


FACULTAD DE INGENIERIA MECANICA
2013

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

Funcionamiento:
Se evala la condicin, si esta se cumple se ejecuta el bloque 1, caso contario se ejecuta el bloque 2, si existe.
Finalmente pasa el control de ejecucin a la siguiente sentencia(ss).
Ejemplos:
If(nota > 10)
cout<< Curso Aprobado;

If((numero%2)==0)
cout<< El numero es par;
else
cout<<El numero es impar;
Sentencia if anidada.- Se dice que una sentencia esta anidada dentro de otra cuando una de ellas (la externa)
contiene completamente las sentencias de la otra(la interna o anidada). Veamos esto:
if (condicion1)
{ .;
..;
;
if(condicion2)
{..;
.;
;
}

65
Ing. Ricardo Castaeda


PROGRAMACION ORIENTADA A OBJETOS
2013
.;
}
else
{ ..;
..;
;
.;
}
Podemos observar que el if con condicion2 esta anidado en el if con condicion1 y que el if con condicion3(que tiene a
su vez tiene parte else) est tambin anidado en el if con condicion1.
Ejemplo 4.- Programa que lee un nmero y me muestra si es mltiplo de 3, 4 o 5.































EJ ECUCION
/* CODIGO: POOC3E4
FECHA: 18 DE MARZO DE 2013
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<iostream.h>
# include<conio.h>
void main( )
{ int numero;
clrscr ();
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(); }

66
Ing.Ricardo Castaeda


FACULTAD DE INGENIERIA MECANICA
2013

Ejemplo 5.- Programa que lee tres notas y halla el promedio eliminando la menor y duplicando la mayor.
PROGRAMA






























EJ ECUCION

Ejemplo 6.- Escriba un programa que lea 20 edades y me indique cuantos son :
/* CODIGO: POOC3E5
PROGRAMA CREADO POR RICARDO CASTAEDA DE LA ROSA
FECHA: 18 DE MARZO DE 2013
OBJETIVO: Ejemplo de if que lee tres notas y calcula mayor, menor y halla
promedio, duplicando la mayor y eliminando la menor */
# include<iostream.h>
# include<conio.h>

void main( )
{ int nota1,nota2,nota3,menor,mayor;
float promedio;
clrscr ();
cout<< " ingrese nota1 : "; cin>>nota1;
cout<< " ingrese nota2 : "; cin>>nota2;
cout<< " ingrese nota3 : "; cin>>nota3;
menor=nota1;
mayor=nota1;
if (nota2<menor)
menor = nota2;
if (nota3<menor)
menor = nota3;
if (nota2>mayor)
mayor = nota2;
if (nota3>mayor)
mayor = nota3;

//Calculando promedio
promedio= (nota1+nota2+nota3+mayor-menor)/3.0;
cout<<"El promedio es : "<<promedio;
getch(); }


67
Ing. Ricardo Castaeda


PROGRAMACION ORIENTADA A OBJETOS
2013
Bebes (0-5aos)
Nios (5-12 aos)
Adolescentes (12-16 aos)
Jvenes (16-25)
Adultos (25-50)
Mayores (50 a mas)
PROGRAMA
/* CODIGO: POOC3E6
FECHA: 18 de MARZO DE 2013
OBJETIVO: Ejemplo que lee 20 edades y me indique cuantos son :Bebes (0-5aos),Nios (5-12 aos), Adolescentes (12-16 aos),
Jvenes (16-25),Adultos (25-50), Mayores (50 a mas) */
# include<iostream.h>
# include<conio.h>
void main( )
{ int edad,i;
int contb=0;//contador de bebes
int contn=0;//contador de nios
int conta=0;//contador de adolescentes
int contj=0;//contador de jovenes
int contd=0;//contador de adultos
int contm=0;//contador de mayores
clrscr ();
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; }
//Mostrando resultados
cout<<contb<< " bebes"<<endl;
cout<<contn<< " nios"<<endl;
cout<<conta<< " adolescentes"<<endl;
cout<<contj<< " jovenes"<<endl;
cout<<contd<< " adultos"<<endl;

68
Ing.Ricardo Castaeda


FACULTAD DE INGENIERIA MECANICA
2013
cout<<contm<< " mayores"<<endl;
getch(); }
EJ ECUCION

Sentencia switch.- Deriva el control hacia uno de varios puntos del programa, permite realizar una seleccin
mltiple.
Forma General

switch ( expression)
{ case const 1 : ................... ;
....................;
break;
case const 2 : ................... ;
....................;
break;
case const 3 : ................... ;
....................;
break;
case const 4 : ................... ;
....................;
break;
[ default : .....................;
.....................;
break;]
}
Funcionamiento:
La expresin de control o selector se evala y se compara con cada una de las etiquetas de case. La
expresin selector debe ser un tipo ordinal (por ejemplo, int, char, pero no float o string). Cada etiqueta es un valor

69
Ing. Ricardo Castaeda


PROGRAMACION ORIENTADA A OBJETOS
2013
nico, constante y cada etiqueta debe tener un valor diferente de los otros. Si el valor de la expresin selector es
igual a una de las etiquetas case por ejemplo, etiqueta
i
- entonces la ejecucin comenzar con la primera
sentencia de la secuencia sentencia
i
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 despus que siga la
ejecucin en la siguiente sentencia switch( ).
Ejemplo 7: Escriba un programa que lea un dia de semana del 1 al 7 y lo imprima en letras . Si lee 1 escribe LUNES.
PROGRAMA
/* CODIGO: POOC3E7
FECHA: 18 DE MARZO DE 2013
OBJETIVO: Elige una opcin de un men simple usando la sentencia condicional SWITCH. */
#include <iostream.h>
#include <conio.h>
void main()
{ int dia;
clrscr();
cout<<"Introduce el dia: ";
cin>>dia;
switch(dia){
case 1: cout<<"Lunes"; break;
case 2: cout<<"Martes"; break;
case 3: cout<<"Mircoles"; break;
case 4: cout<<"Jueves"; break;
case 5: cout<<"Viernes"; break;
case 6: cout<<"Sbado"; break;
case 7: cout<<"Domingo"; break;
default:cout<<"No es un dia de semana";
}
getch(); }
EJ ECUCION

Note que el default no tiene break y es que la salida en este caso es por trmino de la instruccin switch.
Sentencia while.- Nos permite ejecutar repetidamente un grupo de sentencias hasta que el valor de la
expresin se hace cero (condicin falsa)
Forma General
while ( expresin)
{................... ;
.....................;
.....................;
}
Funcionamiento:

70
Ing.Ricardo Castaeda


FACULTAD DE INGENIERIA MECANICA
2013
La expresin booleana o condicin se evala y el bucle se repite mientras la condicin es verdadera. El bucle while
nunca iterara si la condicin comprobada es inicialmente falsa.
Ejemplo 8:
PROGRAMA




















EJ ECUCION

Comentario: Como suma es un acumulador se inicializa en cero, en cambio en este caso cont va contando por adelantado y su valor final
ser 101. Con cont igual a 101 ya no se cumple la condicin y por lo tanto se sale del bucle while, a esta variable denominada cont se le
conoce tambin como variable de control del bucle while, esta variable necesariamente debe ser modificada dentro del rango del while pues
de no suceder esto estaramos en un lazo infinito.
Sentencia do-- while.- Las sentencias se ejecutan repetidamente hasta que el valor de la expresin se
hace cero (falso)
Forma General
do
{................... ;
.....................;
.....................;
} while ( expresin);
Funcionamiento:
/* CODIGO: POOC3E8
PROGRAMA CREADO POR RICARDO CASTAEDA DE LA ROSA
FECHA: 18 DE MARZO DE 2013
OBJETIVO: Ejemplo de estructura repetitiva while */
# include<iostream.h>
# include<conio.h>
# include<stdlib.h>
# include<time.h>
void main( )
{ int numero, suma = 0;
int cont = 1;
clrscr();
randomize();
while ( cont <= 100 )
{ numero=random(20);
suma = suma+ numero;
cont++; }
cout << "La media es = " << suma / 100.0;
getch(); }
.

71
Ing. Ricardo Castaeda


PROGRAMACION ORIENTADA A OBJETOS
2013
Se ejecutan las sentencias y a continuacin se evala la expresin, y si es verdadero (distinto de cero), el control se
pasa de nuevo al principio de la sentencia do y el proceso se repite, hasta que la condicin (expresin) sea
falsa(cero) y el control pasa a la sentencia siguiente.
Ejemplo 9:
El siguiente ejemplo visualiza los nmeros, cuadrados y cubos de los 20 primeros nmeros:
PROGRAMA

















EJ ECUCION

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:
/* CODIGO: POOC3E9
PROGRAMA CREADO POR RICARDO CASTAEDA DE LA ROSA
FECHA: 18 DE MARZO DE 2013
OBJETIVO: Presenta cuadrados y cubos de los 20 primeros numeros. Usando el do while */
# include<iostream.h>
# include<conio.h>
# include<math.h>

void main( )
{ int numero=1;
do
{cout << numero << " " <<pow(numero,2)<<" "<<pow(numero,3) << endl ;
numero++;
}
while (numero < 21);
getch(); }

72
Ing.Ricardo Castaeda


FACULTAD DE INGENIERIA MECANICA
2013
Una sentencia for ejecuta la iteracin de un bucle un nmero determinado de veces. El lazo for tiene tres partes:
exp1, inicializa las variables de control del bucle; exp2, es la condicin que determina si el bucle realiza otra iteracin;
la ltima parte del bucle for es la clusula que incrementa o decrementa las variables de control del bucle.
Exp1 se utiliza para inicializar la variable de control de bucle; a continuacin exp2 se evala, si es verdadera (distinta
de cero), se ejecuta la sentencia y se ejecuta exp3 y el control pasa de nuevo al principio del bucle. La iteracin
contina hasta que exp2 es falsa (cero), en cuyo momento el control pasa a la sentencia siguiente al bucle.
Ejemplo 10: Imprimir todos los primos de dos dgitos.
PROGRAMA

















EJ ECUCION

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:
/* CODIGO: POOC3E10
PROGRAMA CREADO POR RICARDO CASTAEDA DE LA ROSA
FECHA: 18 DE MARZO DE 2013
OBJETIVO: Imprime los primos menores que 100 o sea dos digitos. Usando el lazo repetitivo for */
# include<iostream.h>
# include<conio.h>
void main( )
{ int i,j , primo;
for(i=10; i<100; i++)
{ primo = 1;
for ( j=2;j<i ;j++)
if ( i%j==0)
{primo = 0;
break; }
if(primo == 1)
cout<<i<<endl; }
getch(); }

73
Ing. Ricardo Castaeda


PROGRAMACION ORIENTADA A OBJETOS
2013
for (i = 0; i < 100; i++)
{
cin x;
if (x < 0.0)
{
cout <<salir del bucle <<endl;
break;
}
cout << sqrt(x)<< endl;
}
La sentencia break tambin se utiliza para salir de la sentencia switch.
La sentencia continue termina la iteracin que se est realizando y comenzar de nuevo la siguiente iteracin:
for (i = 0; i < 100; ++i)
{
cin >> x;
if (x < 0.0)
continue;
}
Advertencia:
Una sentencia break puede ocurrir nicamente en el cuerpo de una sentencia for, while, do o switch.
Una sentencia continue slo puede ocurrir dentro del cuerpo de una sentencia for, while o do.

PROBLEMAS

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

A) PROGRAMA:
/* CODIGO: POOC3PROB1
PROGRAMA CREADO POR RICARDO CASTAEDA DE LA ROSA
FECHA: 18 DE MARZO DE 2013
OBJETIVO: LEE TRES NOMBRES Y EDADES E IMPRIME LOS NOMBRES EN FORMA CRECIENTE POR EDAD */
# include<iostream.h>
# include<conio.h>
void main( )
{
int edad1, edad2, edad3;
char nombre1[40], nombre2[40], nombre3[40];
clrscr( );
cout<< " Ingrese nombre 1 ==> "; cin>> nombre1;
cout<< " Ingrese edad 1 ==> "; cin>> edad1;

74
Ing.Ricardo Castaeda


FACULTAD DE INGENIERIA MECANICA
2013
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:

2. Escriba un programa que lea un nombre y su respectiva edad, esta informacin debe procesarse e imprimirse el
nombre y el periodo al cual pertenece la persona.
SOLUCION:
PROGRAMA
/* CODIGO: POOC3PROB2

75
Ing. Ricardo Castaeda


PROGRAMACION ORIENTADA A OBJETOS
2013
PROGRAMA CREADO POR RICARDO CASTAEDA DE LA ROSA
FECHA: 18 DE MARZO DE 2013
OBJETIVO: Lee nombres y edades e imprime el periodo en el que se encuentra la persona*/
# include<iostream.h>
# include<conio.h>
void main( )
{
int edad;
char nombre[40];
clrscr( );
cout<< " Ingrese nombre ==> "; cin>> nombre;
cout<< " Ingrese edad ==> "; cin>> edad;
if ( (edad>0)&&(edad<=100))
switch(edad)
{ case 1 , 2, 3 , 4 , 5 , 6 , 7 , 8 , 9: cout<<nombre<<" es un nio"<<endl;
break;
case 10 , 11 , 12 , 13 , 14 , 15 , 16: cout<<nombre<<" es un adolescente"<<endl;
break;
case 17 , 18 , 19 , 20 , 21: cout<<nombre<<" es un joven"<<endl;
break;
default :cout<<nombre<<" es un adulto"<<endl;
}
else
cout<<"Error ingrese una edad valida";
getch( ); }
EJ ECUCION

3. Escriba un programa que imprima todos los nmeros de tres cifras que sean capicas y cuya suma de sus dgitos
sea par.
Solucion:
PROGRAMA
/* CODIGO: POOC3PROB3
FECHA: 18 DE AGOSTO DE 2013
OBJETIVO: Muestra todos los numeros de tres digitos capicuas y cuya suma de estos es par */
# include<iostream.h>
# include<conio.h>
void main( )
{ int i , num,numinv, sumadigitos, digito;
clrscr( );
cout<< " Lista de numeros capicas y suma dgitos par"<<endl<<endl;

76
Ing.Ricardo Castaeda


FACULTAD DE INGENIERIA MECANICA
2013
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<< i << endl;
} // FIN DEL FOR
getch( ); }

4. En la UNI se rinde examen de admisin y de un grupo de 20 postulantes para cuatro facultades cuyos codigos
son: Codigo Facultad
S Ing. De Sistemas
M Ing. Mecnica
Q Ing. Qumica

77
Ing. Ricardo Castaeda


PROGRAMACION ORIENTADA A OBJETOS
2013
A Ing. Ambiental

La Universidad aplica tres tipos de exmenes a sus postulantes. Los postulantes que obtengan por lo menos dos
exmenes aprobados (mayor o igual a 11) son admitidos caso contrario son rechazados. En base a esto se pide
disear un algoritmo que permita:
a) Mostrar por cada postulante el mensaje admitido o rechazado.
b) Presentar el nmero de ingresantes pro facultad.
Solucin:
PROGRAMA
/* CODIGO: POOC3PROB4
FECHA: 18 DE MARZO DE 2013
OBJETIVO: LISTA INGRESANTES POR FACULTAD DE UN EXAMEN DE ADMISION */
# include<iostream.h>
# include<conio.h>
# include<ctype.h>
# include<stdlib.h>
# include<time.h>
void main( )
{ int i, conts=0,contm=0,contq=0,conta =0;
int exa1, exa2, exa3, numfac;
char facultad;
clrscr( );
randomize();
for (i=1; i<=20;i++)
{ numfac = random(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=random(20)+1;
exa2=random(20)+1;
exa3=random(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

78
Ing.Ricardo Castaeda


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

5. Se desea leer un conjunto de numeros enteros de tres cifras hasta encontrar un nmero negativo. Luego mostrar
la cantidad de veces que aparece el digito 3 en todos los nmeros positivos ledos.
Solucion:
PROGRAMA
/* CODIGO: POOC3PROB5
FECHA: 18 DE MARZO DE 2013
OBJETIVO: Muestra veces que aparece el digito 3 en los nmeros ledos antes de encontrar un negativo.*/
# include<iostream.h>
# include<conio.h>
# include<stdlib.h>
# include<time.h>
void main( )
{ int numero,d1,d2,d3,contdigitos=0;
clrscr( );
while ( 1 )
{ cout<<"Ingrese un numero : ";
cin>>numero;
if(numero < 0 ) break;
d1= numero%10;
numero=numero/10;
d2=numero%10;

79
Ing. Ricardo Castaeda


PROGRAMACION ORIENTADA A OBJETOS
2013
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( ); }
EJ ECUCION

6. De un experimento de fsica se tienen que leer N temperaturas( entre positivas y negativas) luego averiguar el
numero de apariciones de la menor temperatura negativa.
Solucion:
PROGRAMA
/* CODIGO: POOC3PROB6
FECHA: 18DE MARZO DE 2013
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)
{ tempmayorneg =temperatura;
conttemp= 1; } }

80
Ing.Ricardo Castaeda


FACULTAD DE INGENIERIA MECANICA
2013
}
cout<<endl<<endl;
cout<<"La temperatura es = " << tempmayorneg<<endl;
cout<<" Se presento: "<< conttemp << " Veces";
getch( ); }
EJ ECUCION

EJERCICIOS PROPUESTOS
1. Escriba un programa que simule un juego de dados como en el ejemplo de este captulo pero en cada caso debe
ganar o perder una suma, si inicialmente usted fija un pozo o sea una cantidad, el juego terminara cuando pierda
todo el pozo inicial o lo duplique.
2. Escriba un programa que genere 5 valores al azar entre 1 y 13 (cinco cartas de una baraja de casinos) y me
indique si tenemos un par, 2 pares , un tro , un full (3 iguales y dos iguales) o pker ( cuatro iguales)
3. Escriba un programa que me permita descubrir una clave de cuatro dgitos realizando todas las combinaciones
posibles hasta dar con la clave.
4. Escriba un programa que lea 5 practicas de 10 alumnos halle el promedio de cada uno de ellos y me indique cual
es el mejor promedio.
5. Escriba un programa que me permita hallar el maximo comn divisor y el mnimo comn mltiplo de dos valores
enteros.
6. Se realizan elecciones entre tres partidos politicos, escriba un programa que me permita indicar el ganador y si
adems supera el 50% ser el ganador oficial en primera vuelta.







81
Ing. Ricardo Castaeda


PROGRAMACION ORIENTADA A OBJETOS
2013






















CAPITULO IV

























82
Ing.Ricardo Castaeda


FACULTAD DE INGENIERIA MECANICA
2013
4 FUNCIONES EN LENGUAJE C++.- Es un conjunto de instrucciones agrupadas que tienen un nombre comn
y que realizan un clculo (o proceso) especifico. Todo programa en lenguaje C se desarrolla basndose en
funciones, estas posteriormente pueden formar una librera particular.
4.1 Funciones Predefinidas (De biblioteca) Aqu tenemos una serie de funciones, debemos considerar que al
invocarlas debemos seguir las siguientes reglas:
Consideremos la Funcin sqrt




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




Retorna el valor absoluto de una variable entera, y cuando se incluye la librera stdli.h tambien considera
valores bcd. La funcin fabs(double x) considera valores reales.
Ejemplo 1.- escriba un programa que lee tres valores y me imprime el mayor valor absoluto.
PROGRAMA
/* CODIGO: POOC4E1
FECHA: 18DE MARZO DE 2013
OBJETIVO: ejemplo DE LA FUNCION ABS() Y FABS()*/
#include <iostream.h>
#include <conio.h>
#include <stdlib.h>
#include <math.h>
void main()
{ int valor1;
float valor2;
double valor3,x,y, z,mayor;
clrscr();
cout<<"Ingrese valor 1 ==> "; cin >>valor1;
Syntax
#include <math.h>
double sqrt(double x);
Syntax
#include <math.h>
#include <stdlib.h>
int abs(int x);


83
Ing. Ricardo Castaeda


PROGRAMACION ORIENTADA A OBJETOS
2013
cout<<"Ingrese valor 2 ==> "; cin >>valor2;
cout<<"Ingrese valor 3 ==> "; cin >>valor3;
x = abs(valor1);
y = fabs(valor2);
z = fabs(valor3);
if (x>y)
mayor= x;
else
mayor=y;
if (z>mayor)
mayor= z;
cout<<"El mayor ser: "<<mayor;
getch(); }
EJ ECUCION

Funciones ceil y floor







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
/* CODIGO: POOC4E2
FECHA: 18 DE MARZO DE 2013
OBJETIVO: Ejemplo de las funciones ceil() y floor().*/
#include <iostream.h>
#include <conio.h>
#include <stdlib.h>
#include <math.h>
void main()
{ int edad,i;
float promedio=0,edadprom1,edadprom2;
clrscr();
Syntax
#include <math.h>
double ceil(double x);
long double ceill(long double x);
double floor(double x);
long double floorl(long double x);



84
Ing.Ricardo Castaeda


FACULTAD DE INGENIERIA MECANICA
2013
for (i=1;i<=5;i++)
{cout<<"Ingrese edad "<<i<<" : ";
cin >>edad;
promedio=promedio + edad;
}
promedio=promedio/5.0;
edadprom1=floor(promedio);
edadprom2=ceil(promedio);
cout<<"La edad promedio se encuentra entre "<<edadprom1<< " y "<<edadprom2;
getch(); }
EJ ECUCION

Funciones sin() y cos()







Retornan el seno y coseno de un argumento que debe estar en radianes, argumento y retorno son double.
Ejemplo 3.- Escriba un programa que calcule un el seno y coseno de un triangulo rectngulo notable y
compruebe que seno y coseno de los ngulos complementarios de un triangulo rectngulo son iguales.
PROGRAMA
/* CODIGO: POOC4E3
FECHA: 18 DE MARZO DE 2013
OBJETIVO: Ejemplo de las funciones SIN() y COS().*/
#include <iostream.h>
#include <conio.h>
#include <math.h>
void main()
{ double anga,angb,senoa,cosenob;
clrscr();
anga=37*3.1416/180;
senoa=sin(anga);
angb=53*3.1416/180;
cosenob=cos(angb);
Syntax
#include <math.h>
double cos(double x);
long double cosl(long double x);
double sin(double x);
long double sinl(long double x);




85
Ing. Ricardo Castaeda


PROGRAMACION ORIENTADA A OBJETOS
2013
cout<<"El seno de a= "<<senoa<<endl;
cout<<"El coseno de b= "<<cosenob; getch(); }
EJ ECUCION

Funcin exp()




Exp() calcula el valor e elevado a la x.
Ejemplo 4.- Escribir un programa con exp(x)
PROGRAMA
/* CODIGO: POOC4E4
FECHA: 18 DE MARZO DE 2013
OBJETIVO: Ejemplo de las funciones exp()*/
#include <iostream.h>
#include <conio.h>
#include <stdio.h>
#include <math.h>
void main()
{ double expx;
double x ;
clrscr();
cout<<"Ingrese x ==> "; cin>>x;
expx = exp(x);
printf("'e' elevado a la potencia \de %lf (e ^ %lf) = %lf\n", x, x, expx);
getch(); }
EJ ECUCION

Funcin log() y log10()






Retorna el logaritmo natural de x y el logaritmo en base 10 de x


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


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




86
Ing.Ricardo Castaeda


FACULTAD DE INGENIERIA MECANICA
2013
Funcin pow()




Retorna x elevado a la y.
Ejemplo 5.- Escribir un programa y calcule una raiz cuadrada usando pow() y
usando sqrt(), comprelas.
PROGRAMA
/* CODIGO: POOC4E5
FECHA: 18 DE MARZO DE 2013
OBJETIVO: Utiliza pow() y sqrt() para calcular raiz cuadrada*/
#include <iostream.h>
#include <conio.h>
#include <math.h>
void main()
{ double x,raiz1,raiz2 ;
clrscr();
cout<<"Ingrese x ==> "; cin>>x;
raiz1 = pow(x,0.5);
raiz2=sqrt(x);
cout<<" Utilizando pow el resultado ser = "<<raiz1<<endl;
cout<<" Utilizando sqrt el resultado ser= "<<raiz2;
getch(); }
EJ ECUCION

B) Funciones de la librera stdio.h
Funcin gets()



Captura una cadena que puede contener espacio en blanco del flujo estndar.
Funcin printf()




Ejemplo 6.- Escribe una salida formateada en el flujo estndar de salida.
Syntax
#include <math.h>
double pow(double x, double y);
long double powl(long double x, long double y);

Borland C++ 5.0 Programmer's Guide
Syntax
#include <stdio.h>
char *gets(char *s);
Syntax
#include <stdio.h>
int printf(const char *format[, argument, ...]);

87
Ing. Ricardo Castaeda


PROGRAMACION ORIENTADA A OBJETOS
2013
PROGRAMA
/* CODIGO: POOC4E6
FECHA: 18 DE MARZO DE 2013
OBJETIVO: Utilizar la funcio gets() y la funcin printf().*/
#include <iostream.h>
#include <conio.h>
#include <stdio.h>
#include <math.h>
void main()
{ char nombre[30];
float nota;
clrscr();
cout<<"Ingrese nombre ==> "; gets(nombre);
cout<<"Ingrese nota ==> "; cin>>nota;
printf("El alumno %s \n",nombre);
printf("Tiene %6.2f de nota",nota);
getch();
}
EJ ECUCION

Funcin clock()



Ejemplo 7.- Escribe un programa que nos permita trabajar con la funcin clock.
PROGRAMA
/* CODIGO: POOC4E7
FECHA: 18 DE MARZO DE 2013
OBJETIVO: Maneja la funcin clock*/
#include <iostream.h>
#include <conio.h>
#include <time.h>
#include <stdio.h>
#include <dos.h>
main(void)
{ int i,a=0;
clock_t inicio, fin;
Syntax
#include <time.h>
clock_t clock(void);




88
Ing.Ricardo Castaeda


FACULTAD DE INGENIERIA MECANICA
2013
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(); }
EJ ECUCION

Funcin time()



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

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



Borland C++ 5.0 Programmer's Guide



89
Ing. Ricardo Castaeda


PROGRAMACION ORIENTADA A OBJETOS
2013
La funcin cuenta los segundos transcurridos desde 1 enero 70 hasta el da actual.
Funciones que generan nmeros aleatorios
Son las funciones randomize(), rand() y random (num).. Veamos su sintaxis de cada una de ellas.
Funcin rand()



Genera nmeros aleatorios entre 0 y RAND_MAX, constante definida en stdlib.h
Funcin randomize()




Inicializa el generador de nmeros.
Funcin random(n)



Retorna valores entre 0 y num 1.
Ejemplo 9.- Generar nmeros aleatorios entre un cota mnima y una cota mxima.
PROGRAMA
/* CODIGO: POOC4E9
FECHA: 18 DE MARZO DE 2013
OBJETIVO: Genera valores aleatorios entre dos valores dados */
#include <stdlib.h>
#include <iostream.h>
#include <time.h>
#include <conio.h>
Void main(void)
{ int cota_minima,cota_maxima, i ,nro_terminos;
clrscr();
cout<<"Ingrese cota minima: ";cin>>cota_minima;
cout<<"Ingrese cota maxima: ";cin>>cota_maxima;
cout<<"Ingrese Nro. Terminos: ";cin>>nro_terminos;
randomize();
for(i=0; i<=nro_terminos; i++)
cout<<(cota_minima+random(cota_maxima+1-cota_minima))<<endl;
getch();}
EJ ECUCION
Syntax
#include <stdlib.h>
int rand(void);
Syntax
#include <stdlib.h>
#include <time.h>
void randomize(void);
Syntax
#include <stdlib.h>
int random(int num);

90
Ing.Ricardo Castaeda


FACULTAD DE INGENIERIA MECANICA
2013

C) Funciones de la librera stdlib.h
Funcin atof()




Convierte de cadena a nmero de punto flotante.
Funcin atoi()



Convierte de cadena a nmero entero.
Funcin atol()



Convierte de cadena a numero long (entero largo).
Funcin itoa()



Convierte un entero a cadena.
Funcin ecvt()



Convierte una cadena a punto flotante..


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



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




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


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



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





91
Ing. Ricardo Castaeda


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

Donde:
Tipo .............. Tipo de valor que devuelve la funcin en algunos
casos no devuelven ningn valor y el tipo ser
void (no devuelve).
nombrefuncion ......Identificador de la funcin
Lista de parmetros...Establecen la comunicacin entre la funcin que
realiza la llamada y nuestra funcin
return( ) .....Permite retornar un valor a la funcin que realizo la
llamada, si la funcin es de tipo void no retorna valor.
Ejemplo10:
int primo( int p1)
{ int i, sw=1; //asumo que es primo
for( i=2; i <= (p1/2) ; i++)
if ( (p1 % i) == 0)
{ sw = 0;// si es divisible no es primo
break;
}
return(sw); }
La llamada ser
If ( primo(a))// a necesariamente es entero
Cout<< a << Es primo<< endl;
Ejemplo 11:
void leer ( long *cdigo, char nombre[40], char direccin[50])
{ // programa de lectura
clrscr();
cout << ingrese cdigo: ; cin>>*codigo;
cout << Ingrese nombre: ;gets(nombre); //Funcin de lectura
cout << Ingrese direccin: ; gets(direccion); }
La llamada ser leer( &code, name, dire);

92
Ing.Ricardo Castaeda


FACULTAD DE INGENIERIA MECANICA
2013
Si las declaraciones han sido:
long code;
char name[40];
char dire[50];
4.2.1 Ubicacion del prototipo, la llamada y la function en Lenguaje C++
#include <iostream.h>
#include <conio.h>






















4.2.2 Comunicacin entre funciones.- La comunicacin se puede realizar de dos maneras:
Va variables Globales
Va argumentos parmetros
a) Va variables globales.- Se realiza cuando declaran ms variables en un rea de acceso pblico o sea que
todas las funciones pueden acceder estas variables. Un esquema de esto seria
#include <iostream.h>
#include <conio.h>
// VARIABLES GLOBALES
int a,b,c;




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

}
// PROTOTIPO DE LAS FUNCIONES
void leer(void);
void multiplicar(void);
void escribir(void);


93
Ing. Ricardo Castaeda


PROGRAMACION ORIENTADA A OBJETOS
2013
























La comunicacin es a travs de las variables a, b y c. El problema es que las funciones son dependientes de las
variables. Y para cada grupo de variables hay que desarrollar funciones, para independizar las funciones de las
variables se utiliza comunicacin argumentos parmetros, que independiza las variables de los procedimientos.

b) Va argumentos y parmetros. Esto se establece como explicamos a continuacin:
Llamada por valor y llamada por referencia.- Cuando una funcin es llamada se le debe enviar una lista de
argumentos que son los que establecen la comunicacin entre los dos mdulos. La pregunta es, Que Argumentos
enviar? Los argumentos enviados pueden ser valores o direcciones dependiendo del parmetro: Si el encabezado
es void f1(int p1, int p2, float *p3) Supongamos que los argumentos son a1, a2 y a3; entonces a1 y a2 deben
necesariamente generar valores simples de tipo entero y a3 ser obligatoriamente variable simple de tipo float, pero
el primer parmetro y el segundo al ser variables solamente piden valores enteros pero el tercer parmetro al ser
tipo puntero pide una direccin de una variable simple de tipo float. L a llamada ser:
f1 ( a1, a2, &a3);
O sea se enva el contenido de a1 y de a2 pero la direccin de a3, entonces
a1 y a2 ha sido llamadas por valor
a3 ha sido llamada por referencia
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( ); }


94
Ing.Ricardo Castaeda


FACULTAD DE INGENIERIA MECANICA
2013
Funcionamiento de un subprograma tipo funcin.- Cuando aparecen el nombre de una funcin seguido de una
lista de argumentos f2(a1, a2, &a3, &a4) los siguientes eventos tienen lugar:
Se realiza una transferencia de valores y direcciones hacia sus respectivos parmetros. Como lo visualizamos en
el siguiente grfico(Suponiendo que la llamada se realizo desde main):






















Se ejecuta la funcin hasta que la primera sentencia return es alcanzada o termina la funcin.
Cuando termina la ejecucin de la funcin sucede lo siguiente:
El control retorna al punto siguiente desde donde se realizo la llamada
Sigue la ejecucin de main (En este caso).

4.3 Funciones Inline.- Este tipo de funciones que se insertan directamente le dan mayor velocidad a la
ejecucin, la forma de indicar una function de este tipo es colocando el especificador inline antes de la
definicin de la funcin. Veamos el formato:
inline tipo_devuelto nombre_funcion (parmetros)
{.;
.;
Instrucciones;
}
La llamada ser normal como a las otras funciones, pero en el cuerpo de la funcin no podr haber:
Variables de tipo static
Sentencias de bucle.
Sentencia switch

main() f2()_

a1 p1



a2 p2



a3 p3



a4 p4



MEMORIA ASIGNADA A main () MEMORIA ASIGNADA A f2()
35
40



95
Ing. Ricardo Castaeda


PROGRAMACION ORIENTADA A OBJETOS
2013
Go to
Ejemplo 12.- veamos un ejemplo de uso de una funcin inline
PROGRAMA
/* CODIGO: POOC4E12
FECHA: 18 DE MARZO DE 2013
OBJETIVO: UTILIZA FUNCIONES INLINE. */
#include <iostream.h>
#include <conio.h>
#include <math.h>
inline float fi (float x)
{ float ff;
ff= pow(x,2)-3*x+5;
return (ff); }
void main(void)
{ float xmin,xmax,deltax,fx,x;
clrscr();
cout<<"Ingrese x mnimo: ";cin>>xmin;
cout<<"Ingrese x mximo: ";cin>>xmax;
cout<<"Ingrese variacin de x: ";cin>>deltax;
x=xmin;
while( x<=xmax)
{ fx=fi(x);
cout<< "f(x)= "<<fx<<endl;
x=x+deltax; }
getch();}
EJ ECUCION

Fjense que es una funcin con un clculo simple pues retorna el valor de la funcin para un argumento dado.
4.4 Funciones Recursivas.- Una funcin recursiva es una funcin que se llama as misma para resolver un
clculo o proceso.

96
Ing.Ricardo Castaeda


FACULTAD DE INGENIERIA MECANICA
2013
Las caractersticas de la recursividad son :
En cada llamada recursiva el grado de dificultad del clculo o proceso disminuye.
Cada llamada tendr su propio espacio de memoria.
Habr una llamada no recursiva en algn instante a partir del cual se solucionara el problema a
resolver.
Si tenemos el clculo de factorial:
!N = N*!(N-1).. calcular el factorial de (N-1) es ms sencillo que calcular el factorial de N.
Adems ! 1 = 1 y ! 0 = 1 que son llamadas no recursivas y 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
/* CODIGO: POOC4E13
FECHA: 18 DE MARZO DE 2013
OBJETIVO: Halla factorial en forma recursiva */
# include<iostream.h>
# include<conio.h>
int facto (int num);
void main( )
{ int n;
clrscr(); cout<< " NUMERO = "; cin>> n;
cout << " FACTORIAL = "<<facto(n);
getch(); }
/* Funcion recursiva */
int facto ( int num)
{ if (num <= 1)
return(1);
else
return(num * facto(num-1)); }
EJ ECUCION

4.5 Punteros a funciones.- Tambin podemos devolver la direccin de una funcin, veamos int (*fpun) (int ) ser
la declaracin de un puntero a funcin que recibe un int y devuelve un int; en cambio int *fp(int ) ser el
prototipo de una funcin que recibe un int y devuelve puntero a int.
Ejemplo 14.- Escriba un programa usando el concepto de puntero a funcin.
PROGRAMA
/* CODIGO: POOC4E14
FECHA: 18 DE MARZO DE 2013
OBJETIVO: Ejemplo de puntero a funcin. */
# include<iostream.h>

97
Ing. Ricardo Castaeda


PROGRAMACION ORIENTADA A OBJETOS
2013
# 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); // Imp rime 4
funcion2(funcion2(j));// Primera llamada imprime 8 y en la segunda imprime 16
int (*pf1)(int)=&funcion2;
pf1(i); //Imprime 4
int* (*pf2)(int)=&funcion1;
pf2(j); //Imprime 8
getch();
}
EJ ECUCION

PROBLEMAS
Problema 1.- EJEMPLO DE FUNCIONES QUE SE COMUNICAN MEDIANTE VARIABLES GLOBALES.
1.- Suponga que tiene un numero num y una aproximacin a su raz cuadrada. Para obtener una aproximacin
ms exacta a la raz cuadrada real se puede utilizar la formula: aproximacinnueva = (n/
aproximacinanterior)+aproximacinanterior)/2. Utilizando esta informacin, escriba un programa que solicite al
usuario un nmero y una suposicin inicial de su raz cuadrada. Con los datos el programa calculara una
aproximacin de la raz cuadrada que sea exacta hasta 0.00001.
Solucin:
/* CODIGO: POOC4PROB1
FECHA: 16 de agosto de 2007
OBJETIVO: Halla raz cuadrada por aproximacin*/
#include<iostream.h>
#include<conio.h>
#include<math.h>
#define ERROR 0.00001
float num,raiz,aprox;
void leer();
void procesar();

98
Ing.Ricardo Castaeda


FACULTAD DE INGENIERIA MECANICA
2013
void mostrar();
main()
{ leer();
procesar();
mostrar(); }
void leer( )
{ clrscr();
cout<<"Ingrese el numero cuya raz cuadrada desea ";
cin>>num;
cout<<"Ingrese un valor aproximado de la raz ";
cin>>aprox; }
void procesar( )
{ do{ raiz=aprox;//almacenar la aproximacin
aprox=(num/raiz + raiz)/2.0;//calcular nueva aproximacin
cout<<"Nueva Aproximacin "<<aprox<<endl;
}while(fabs(aprox-raiz)>ERROR);
getch();
}
void mostrar()
{ cout<<endl<<endl;
cout<<"La Raiz cuadrada es "<<aprox<<endl;
getch(); }
EJ ECUCION

2.- Escriba un programa que utilizando comunicacin va argumentos y parmetros, pueda calcular la nota final,
considerando que el promedio de prcticas se halla eliminando la menor nota de las cuatro prcticas, la nota final
se hallara
Promedio de prcticas = (practica 1+practica 2 + practica 3 + practica 4 menor)/3.0
Nota Final = (promedio practicas+ examen parcial + 2*examen parcial)/4.0
SOLUCION:
PROGRAMA
/* CODIGO: POOC4PROB2
FECHA: 18DE MARZO DE 2013
OBJETIVO: Halla nota final con el sistema F*/
#include<iostream.h>
#include<conio.h>
#include<math.h>
void leer(float &n1,float &n2,float &n3, float &n4);
float menor(float n1,float n2,float n3, float n4 );

99
Ing. Ricardo Castaeda


PROGRAMACION ORIENTADA A OBJETOS
2013
main()
{float EXP, EXF, PFIN,EXS; float a,b,c,d,PP,MEN;
leer(a,b,c,d);
cout<<"\n La menor practica es = "<<menor(a,b,c,d);
MEN=menor(a,b,c,d);
PP=((a+b+c+d)-MEN)/3.0;
cout<<"\n Ingrese la nota del parcial :";cin>>EXP;
cout<<"\n Ingrese la nota del FINAL :";cin>>EXF;
cout<<"\n El promedio de prcticas es :"<<PP;
PFIN=(PP+EXP+2*EXF)/4.0;
cout<<"\n El Promedio Final es :"<<PFIN<<endl;//redondea por exceso
if(PFIN>=10)
cout<<"Su promedio final es: "<<PFIN<<endl;
else
if(PP>6.0)
{cout<<"Ingrese el Examen Sustitutorio: ";cin>>EXS;
if(EXP)
PFIN=(PP+EXS+2*EXF)/4.0;
if(EXF)
PFIN=(PP+EXP+2*EXS)/4.0;
cout<<"Su promedio final es: "<<PFIN<<endl; }
getch();}
void leer(float &n1,float &n2,float &n3, float &n4)
{ cout<<"\nIngrese las practicas dejando espacio :";
cin>>n1>>n2>>n3>>n4; }
float menor(float n1,float n2,float n3, float n4 )
{ float men;
men=n1;
if(n2<men)
men=n2;
if(n3<men)
men=n3;
if(n4<men)
men=n4;
return ( men); }
EJ ECUCION


100
Ing.Ricardo Castaeda


FACULTAD DE INGENIERIA MECANICA
2013
3.- Este programa halla una raz positiva de la ecuacin cubica 0 1
2 3
x x x , en el intervalo [0,5] con un
error menor que 0.001.
PROGRAMA
/* CODIGO: POOC4PROB3
FECHA: 18 DE MARZO DE 2013
OBJETIVO: Halla raiz en intervalo 0-5 con error menor que 0.001 */
# include<iostream.h>
# include<math.h>
# include<conio.h>
# define error 0.001
//# define x0 0.0
//# define x1 5.0
float fcub(float x);
float bisecar(float a, float b);

/*Programa principal*/
void main( )
{ float x0,x1;
clrscr();
cout<<"Ingrese intervalo donde se encuentra la raiz"<<endl;
cout<<"Ingrese xmin : ";cin>>x0;
cout<<"Ingrese xmax : ";cin>>x1;
cout<< " RAIZ = "<< bisecar( x0,x1);
getch();
}

/* Funciones*/
float fcub(float x)
{ return( pow(x,3) - pow(x,2) - x -1);}

float bisecar(float a, float b)
{float r ,medio ;
while ( fabs(a-b)>= error)
{cout<<fabs(a-b)<<endl;
medio = (a+b)/2.0;
if ((fcub(a) * fcub(medio))<= 0)
b= medio;
else
a= medio;
}
r = a;
return( r ); }

101
Ing. Ricardo Castaeda


PROGRAMACION ORIENTADA A OBJETOS
2013
EJ ECUCION

4.- Escriba un programa que calcule la planilla para un trabajador, los datos que tienen que considerarse son:
Nombre : Nombre del empleado es una cadena de 40 caracteres.
Cdigo : Cdigo del empleado es una cadena de 11 caracteres.
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
/* CODIGO: POOC4PROB4
FECHA: 18 DE MARZO DE 2013
OBJETIVO: CALCULO DE PLANILLA PARA UN TRABAJADOR.*/
# include<iostream.h>
# include<stdio.h>
# include<conio.h>
void leer( char nombre[40], char cdigo[11],float *sueldob,int *faltas,int *horase,int *seguro,int *bonif);
float calcular_neto(float sueldob,int faltas,int horase,int seguro,int bonif,float *descuento);
void imprimir_boleta(char n[40],char c[11],float descuento,float sueldon);
void main( )
{ char name[40],code[11];
float sb,de,sn;
int fa,he,seg,bon;
clrscr();
leer(name,code,&sb, &fa,&he,&seg,&bon);
sn = calcular_neto(sb,fa,he,seg,bon,&de);
imprimir_boleta(name,code,de,sn);
getch(); }
/* Funciones*/
void leer( char nombre[40], char codigo[11],float *sueldob,int *faltas,int *horase,int *seguro,int *bonif)

102
Ing.Ricardo Castaeda


FACULTAD DE INGENIERIA MECANICA
2013
{ 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; }

EJ ECUCION


103
Ing. Ricardo Castaeda


PROGRAMACION ORIENTADA A OBJETOS
2013
5.- Escriba un programa que halle un nmero de la serie de fibonacci en forma recursiva.
Para i=0 , F(0)= 0
Para i= 1 , F(1)= 1
Para i>=2 , F(i) = F(i-1) + F(i-2)
PROGRAMA
/* CODIGO: POOC4PROB5
FECHA: 18 DE MARZO DE 2013
OBJETIVO: Halla fibonacci en forma recursiva */
#include<iostream.h>
#include<conio.h>
#include<math.h>
void leer(int *n);
int fib(int n);
/* Funcin principal*/
main()
{ int m;
leer(&m);
cout<<"\n El numero es = "<<fib(m);
getch(); }
/* Funciones */
void leer(int *n)
{ clrscr();
cout<<"Ingrese n=> "; cin>>(*n); }
int fib( int n)
{ if(n<=1)
return(1);
else
return(fib(n-1)+fib(n-2)); }
EJ ECUCION

6.- Escriba un programa que halle los factores primos de un nmero en forma recursiva.
PROGRAMA
/* CODIGO: POOC4PROB6
FECHA: 18 DE MARZO DE 2013
OBJETIVO: Halla factores primos en forma recursiva */
# include<iostream.h>

104
Ing.Ricardo Castaeda


FACULTAD DE INGENIERIA MECANICA
2013
# 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);
}
}
EJ ECUCION

EJERCICIOS PROPUESTOS
1. Escriba un programa que utilizando funciones pueda realizar operaciones con nmeros complejos: Suma, Resta,
Multiplicacin y Divisin. Cada operacin debe realizarse con funciones adems de la lectura y escritura. Debe
trabajar con un men.
2. Escriba un programa que calcule reas, debe calcular reas para cuadrados, rectngulos, tringulos y crculos;
cada calculo debe realizarse con una funcin.
3. Escriba un programa que resuelva el mismo problema de planilla (problema 4)pero considere que hay tres tipos
de bonificaciones.
Tiempo de servicio (5%)
Carga familiar (5%)

105
Ing. Ricardo Castaeda


PROGRAMACION ORIENTADA A OBJETOS
2013
Remuneracin por direccin (10%)
4. Escriba un programa que utilizando el concepto de puntero a funciones evale una funcin para un argumento
variando en un rango de valores determinado.
5. Escriba un programa que me permita hallar la nota final de un alumno que rindi 4 practicas y 2 exmenes
considere, que el sistema de evaluacin puede ser:
Sistema A : promedio de prcticas es el promedio de las cuatro practicas y el promedio final es la suma de los
dos exmenes mas el promedio de prcticas divididos entre tres.
Sistema B : promedio de prcticas es el promedio de tres practicas eliminando la menor y el promedio final es
la suma del primer examen ms el segundo examen duplicado el promedio de prcticas divididos entre
cuatro.
6. Escriba un programa que resuelva el problema de las torres de Hani para n discos utilizando una funcin
recursiva. En las torres de Hani se trata de pasar n discos de un eje Origen a un eje Destino utilizando un
eje auxiliar. Las reglas son :
Solo se puede mover un disco a la vez.
Nunca un disco de mayor dimetro puede estar sobre un disco de menor dimetro.


























106
Ing.Ricardo Castaeda


FACULTAD DE INGENIERIA MECANICA
2013
























CAPITULO V






















107
Ing. Ricardo Castaeda


PROGRAMACION ORIENTADA A OBJETOS
2013
ARREGLOS EN LENGUAJE C
5.1 Definicin.- Un arreglo es una coleccin de elementos del mismo tipo; por lo tanto es una estructura
homognea. Su declaracin se realiza indicando al compilador sus caractersticas que son tipo, nombre y
tamao. Ejemplo:
int datos[10]; la informacin que se entrega al compilador ser:
Nombre del arreglo: datos
Tipo de componente: variable simple entera
Tamao 10 elementos
Nombre de las componentes:
datos[0]
datos[1]
datos[2]
datos[3]
datos[4]
datos[5]
datos[6]
datos[7]
datos[8]
datos[9]
5.2 Acceso a elementos.- Los elementos de un arreglo se designan con un subndice que comienza en cero: int
a[4] : a[0], a[1], a[2], a[3].
Un arreglo se puede inicializar as : int a[4] = { 20, 25, 35, 40}

a[0]

a[1]

a[2]

a[3]

5.3 Operaciones con Arrays unidimensionales (vectores).- Las operaciones inciales son las de lectura y
escritura, las cuales vamos a ver en el siguiente programa ejemplo:
Ejemplo 1.- Lee e imprime un vector de n elementos.
PROGRAMA
/* CODIGO: POOC5E1
FECHA: 18 DE MARZO DE 2013
OBJ ETIVO: Entrada y salida de un vector */
# include<iostream.h>
# include<conio.h>
void main( )
{ int vector[50],n,i;
clrscr();
25
40
35
20

108
Ing.Ricardo Castaeda


FACULTAD DE INGENIERIA MECANICA
2013
//Lectura
cout << " Ingrese n => "; cin >> n;
for (i=1;i<=n;i++)
{ cout<< " Ingrese valor "<< i<<" : ";
cin>> vector[i]; }
clrscr();
//Escritura
cout<<" SALIDA "<<endl<<endl;
for ( i=1; i<=n;i++)
{ cout<< vector[i]<< endl; }
getch(); }
EJ ECUCION

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



J= 4
X

Vamos a insertar el valor x = 14 en la posicin j=4
Tener en cuenta que al insertar un nuevo valor el vector crecer en un elemento.
Al finalizar los valores deberan estar en las siguientes posiciones:
14

109
Ing. Ricardo Castaeda


PROGRAMACION ORIENTADA A OBJETOS
2013
A[1] = 3, A[2] = 5, A[3] = 12, A[4] = 14, A[5] = 20, A[6] = 15, A[7] = 25.
Para realizar esta operacin necesitamos tres pasos:
a) Realizar un corrimiento de una posicin hacia la derecha de todos los valores desde la posicin N (N=6) hasta
la posicin J (J=4), el resultado sera:
N = 6
A [1] A [2] 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 posicin 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
Las instrucciones en Borland C sern:






ELIMINACION: La operacin de eliminacin nos permite sacar un elemento del vector de n componentes que estn
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
cout<<"Ingrese posicin de insercin: ";
cin>> j;
cout<<"Ingrese valor a insertar : ";
cin>> x;
for( i=n; i>=j; i--)
v[i+1] = v[i];
v[j] = x;
n = n +1;


110
Ing.Ricardo Castaeda


FACULTAD DE INGENIERIA MECANICA
2013
Vamos a eliminar el tercer elemento del vector.
Finalmente deberamos tener A[1] = 3, A[2] = 5, A[3] = 20, A[4] = 15, A[5] = 25.
Y N decrecera y seria 5.
Para realizar esta operacin necesitamos dos pasos:
a) Realizar un corrimiento de una posicin hacia la izquierda todos los valores desde la
posicin J+1 (J=3) hasta la posicin N (N=6).:
N = 6
A [1] A [2] 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 Borland C sern:





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

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


X
Tenemos que tener en cuenta que la bsqueda terminara cuando encontremos el elemento buscado o cuando
llegamos al final de la estructura.
Algortmicamente seria:
cout<<"Ingrese posicin de valor a eliminar : ";
cin>> j;
for( i=j+1 ; i<=n;i++)
v[i-1] = v[i];

n = n - 1;



19

111
Ing. Ricardo Castaeda


PROGRAMACION ORIENTADA A OBJETOS
2013
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
3.- Si ( x == A[i])
Entonces
3.1Escribir( Valor hallado en posicin , pos)
Sino
3.2 Escribir( Valor no hallado)
Fin si
Las instrucciones en Borland C sern:








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

Despus del intercambio tenemos
A [1] A [2] A [3] A [4] A [5] A[6] A[7]
3 9 2 7 6 4 5
cout<<"Ingrese valor a buscar : ";
cin>> x;
for( i=1;i<=n;i++)
if ( v[i]== x)
{ pos = i;
break ; }
if ( v [i ]== x)
cout<< " Valor hallado en posicin: "<<pos;
else
cout<< " Valor no hallado ";




112
Ing.Ricardo Castaeda


FACULTAD DE INGENIERIA MECANICA
2013
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 posicin
Verificar que en la segunda etapa ya no participa el primer menor , pues ya encontr su posicin final.
A [2] A [3] A [4] A [5] A[6] A[7]
9 3 7 6 4 5
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 posicin
Verificar que en la tercera etapa ya no participa el primer menor y el segundo menor, ya alcanzaron su posicin 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 posicin
A [4] A [5] A[6] A[7]
9 7 6 5


113
Ing. Ricardo Castaeda


PROGRAMACION ORIENTADA A OBJETOS
2013
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]
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 posicin
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 posicin
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 iesima etapa dentro de las n-1 etapas, en forma algortmica tenemos.

114
Ing.Ricardo Castaeda


FACULTAD DE INGENIERIA MECANICA
2013
1.- Para i= 1, n-1 // Numero de etapas
1.1.- Para j= i+1, n
1.1.1 Si ( A[i] > A[j])
Entonces
Temp A[i]
A[i] A(j)
A[j] temp
Fin si
Fin para
Fin Para

Programando en Borland C++:







PROGRAMAS BASICOS CON ARREGLOS UNIDIMENSIONALES
Ejemplo 2.- Realizar una adicin al final del vector
PROGRAMA
/* CODIGO: POOC5E2
FECHA: 18 DE MARZO DE 2013
OBJETIVO: ADICIONAR UN ELEMENTO AL FINALIZAR EL VECTOR */
# include<iostream.h>
# include<conio.h>
void main( )
{ int vector[50],n,i,x;
clrscr();
//Lectura
cout << " Ingrese n => "; cin >> n;
for (i=1;i<=n;i++)
{ cout<< " Ingrese valor "<< i<<" : ";
cin>> vector[i];
}
clrscr();
//Escritura
cout<<" SALIDA "<<endl<<endl;
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 ;
}


115
Ing. Ricardo Castaeda


PROGRAMACION ORIENTADA A OBJETOS
2013
for ( i=1; i<=n;i++)
{ cout<< vector[i]<< endl; }
getch();
clrscr();
cout<<" Ingrese el valor para adicionar ";cin>>x;
vector[n+1]=x;
n=n+1;
cout<<" NUEVA SALIDA "<<endl<<endl;
for ( i=1; i<=n;i++)
{ cout<< vector[i]<< endl; }
getch(); }
EJ ECUCION

Ejemplo 3.- Realizar una bsqueda binaria sobre un vector ordenado.
PROGRAMA
/* CODIGO: POOC5E3
FECHA: 18 DE MARZO DE 2013
OBJETIVO: Realizar una bsqueda binaria sobre un vector ordenado */
# include<iostream.h>
# include<conio.h>
void main( )
{ int vector[50],n,i,x;
int inicio,final,medio,encontrado=0;
clrscr();
//Lectura
cout << " Ingrese n (Para vector ordenado) => "; cin >> n;
for (i=1;i<=n;i++)
{ cout<< " Ingrese valor "<< i<<" : ";
cin>> vector[i]; }
clrscr();
//Escritura
cout<<" SALIDA VECTOR ORDENADO "<<endl<<endl;
for ( i=1; i<=n;i++)
{ cout<< vector[i]<< endl; }
getch();
clrscr();

116
Ing.Ricardo Castaeda


FACULTAD DE INGENIERIA MECANICA
2013
inicio = 1;
final = n;
cout<<"Ingrese numero a buscar ==> ";cin>>x;
while((inicio<=final)&&(!encontrado))
{ medio = (inicio+final)/2;
if(x==vector[medio])
encontrado = 1;
else
if(x>vector[medio])
inicio =medio;
else
final = medio; }
cout<<endl;
cout<<"MENSAJE "<<endl;
if (encontrado)
cout<<"El numero esta en posicin: "<<medio<<endl;
else
cout<<"Valor no hallado ... ";
getch(); }
EJ ECUCION

Ejemplo 4.- Realizar un ordenamiento usando la definicin de vector ordenado. x1<=x2<=x3<=x4.<=xn.
PROGRAMA
/* CODIGO: POOC5E4
FECHA: 18 DE MARZO DE 2013
OBJETIVO: Ordenamiento x1<=x2<=x3.... */
# include<iostream.h>
# include<conio.h>
void main( )
{ int vector[50],n,i;
int cambio,temp;
clrscr();
//Lectura
cout << " Ingrese n => "; cin >> n;
for (i=1;i<=n;i++)
{ cout<< " Ingrese valor "<< i<<" : ";
cin>> vector[i]; }
clrscr();

117
Ing. Ricardo Castaeda


PROGRAMACION ORIENTADA A OBJETOS
2013
//Escritura
cout<<" SALIDA "<<endl<<endl;
for ( i=1; i<=n;i++)
{ cout<< vector[i]<< endl; }
getch();
clrscr();
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<<" SALIDA ORDENADA"<<endl<<endl;
for ( i=1; i<=n;i++)
{ cout<< vector[i]<< endl; }
getch(); }
EJ ECUCION

5.4 Arreglos de 2 dimensiones(Matrices) Una matriz es un arreglo de 2 dimensiones donde el primer subndice
indica fila y el segundo subndice indica columna. Consideremos la siguiente declaracin: const float maxf = 10;
const float maxc = 20;
float matriz [maxf] [maxc]
Estamos declarando una matriz de 10 filas por 20 columnas. La primera fila ser: matriz[0] [[0], matriz[0][1],
matriz[0][2],......................, matriz[0][19]
5.5 Operaciones con matrices:
Ejemplo 5.- El procedimiento para leer una matriz ser:
PROGRAMA
/* CODIGO: POOC5E5
FECHA: 18 DE MARZO DE 2013
OBJETIVO: Lectura y Escritura de una matriz */
# include<iostream.h>
# include<conio.h>
#include <stdlib.h>
#include <time.h>
void leer(int x[20][20],int *nf, int *nc);

118
Ing.Ricardo Castaeda


FACULTAD DE INGENIERIA MECANICA
2013
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 ;
clrscr( );
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]=random(10); }
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( ); }
EJ ECUCION

Ejemplo 6.-Procedimiento para multiplicar una matriz
PROGRAMA
/* CODIGO: POOC5E6
FECHA: 18 DE MARZO DE 2013
OBJETIVO: MULTIPLICACION DE MATRICES */
#include<iostream.h>
#include<conio.h>
#include<stdlib.h>
#include<time.h>
void leer(int x[20][20],int *n);
void m_mat(int x[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);

119
Ing. Ricardo Castaeda


PROGRAMACION ORIENTADA A OBJETOS
2013
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;
randomize();
for(i=1;i<=(*n);i++)
for(j=1;j<=(*n);j++)
x[i][j]=random(10);
mostrar(x,*n); }
void m_mat(int x[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]+x[i][k]*b[k][j]; }
*n3=n1;
*n3=n2;
mostrar(c,*n3); }
else
cout<<"Matrices no se pueden multiplicar";getch(); }
void mostrar(int x[20][20],int n)
{ int i,j;
for(i=1;i<=n;i++)
{for(j=1;j<=n;j++)
cout<<x[i][j]<<" ";
cout<<endl; }
getch( ); }
EJ ECUCION


120
Ing.Ricardo Castaeda


FACULTAD DE INGENIERIA MECANICA
2013
PROBLEMAS
1.- Dado un vector de nmeros enteros escriba un programa que me permita hallar el nmero que ms veces se
repite (MODA).
PROGRAMA















// Funcin que realiza la lectura

void lectura(int a[50], int *n)
{ int i;
clrscr();
cout << " Ingrese n => "; cin >> *n;
for ( i=1; i<=(*n);i++)
{ cout<< " Ingrese valor "<< i<<" : "; cin>>a[i]; } }
// Funcion que ordena el vector
void orden(int a[50], int n)
{ int i,j,temp;
for ( i=1; i<n ;i++)
for (j=i+1;j<=n;j++)
if( a[i]> a[j])
{ temp = a[i];
a[i] = a[j];
a[j] = temp ; } }
// Funcion que halla la moda
int moda(int a[50], int n)
{ int b[50],rep[50],nsr,i,j,k;
int nmoda,mayor;
clrscr();
nsr=1;
/* CODIGO: POOC5PROB1
FECHA: 18 DE MARZO DE 2013
OBJETIVO: Halla la moda de un conjunto de nmeros enteros */
# include <iostream.h>
# include <conio.h>
void lectura (int a[50], int *n);
void orden(int a[50], int n);
int moda (int a[50], int n);
void escritura(int mo);
void main( )
{ int a[50];
int n,mo;
clrscr();
lectura (a, &n);
orden(a, n);
mo=moda (a, n);
escritura(mo); }

121
Ing. Ricardo Castaeda


PROGRAMACION ORIENTADA A OBJETOS
2013
b[1]=a[1];
rep[1]=1;
for( i=2;i<=n;i++)
if(a[i-1]==a[i])
rep[nsr]=rep[nsr]+1;
else
{ nsr=nsr+1;
b[nsr]=a[i];
rep[nsr]=1; }
mayor=rep[1];
k=1;
for(j=2;j<=nsr;j++)
if (rep[j] > mayor)
{ mayor = rep[j];
k=j ; }
nmoda= b[k];
return(nmoda); }
// Funcin que presenta el resultado
void escritura(int mo)
{ clrscr();
cout<< " La moda es ="<< mo;
getch(); }
EJECUCION


2.- Escriba Un Programa Que Maneje Un Menu De Operaciones Con Arreglos
El programa debe tener el siguiente men:







MENU ARREGLOS

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

Ingrese opcin ==> __


122
Ing.Ricardo Castaeda


FACULTAD DE INGENIERIA MECANICA
2013
PROGRAMA
/* CODIGO: POOC5PROB2
FECHA: 18 DE MARZO DE 2013
OBJETIVO: Programa que crea un men para manejo de operaciones
con arreglos */
# include<iostream.h>
# include<conio.h>
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;
clrscr();
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.- Busqueda";
gotoxy(30,9);
cout<< "5.- Ordenar";
gotoxy(30,10);
cout<<"6.- Escritura";
gotoxy(30,11);
cout<< "7.- Salir";
gotoxy(25,16);
cout<< "Ingrese opcion ==> ";
cin>>opcion;
switch(opcion)
{ case '1' : lectura(vector, &n);break;
case '2' : adicion(vector, &n);break;

123
Ing. Ricardo Castaeda


PROGRAMACION ORIENTADA A OBJETOS
2013
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; clrscr();
cout << " Ingrese n => ";
cin >> *n;
for ( i=1; i<=(*n);i++)
{ cout<< " Ingrese valor "<< i<<" : "; cin>> v[i]; }
}
void adicion(int v[50], int *n)
{ int i,j,x;
clrscr();
cout<<"Ingrese posicin de insercin: "; cin>> j;
cout<<"Ingrese valor a insertar : "; cin>> x;
for( i=(*n);i>=j;i--)
v[i+1] = v[i];
v[j] = x;
(*n)=(*n) +1; }
void eliminacion(int v[50], int *n)
{ int i,j;
clrscr();
cout<<"Ingrese posicin de valor a eliminar : ";
cin>> j;
for( i=j+1 ; i<=(*n);i++)
v[i-1] = v[i];
(*n)=(*n) - 1; }
void busqueda(int v[50], int n)
{ int i,x, pos;
clrscr();
cout<<"Ingrese valor a buscar : ";
cin>> x;
for( i=1;i<=n;i++)
if ( v[i]== x)
{ pos = i; break ; }
if ( v [i ]== x)
cout<< " Valor hallado en posicin: "<<pos;
else
cout<< " Valor no hallado ";

124
Ing.Ricardo Castaeda


FACULTAD DE INGENIERIA MECANICA
2013
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;
clrscr();
for ( i=1; i<=n;i++)
{ cout<< v[i]<< endl; }
getch(); }
EJECUCION

3.- Escriba un programa que lea un conjunto de n nombres y n notas y me muestre en una pantalla los nombres
de los tres primeros alumnos por orden de mrito las tres mejores notas
SOLUCIN
PROGRAMA
/* CODIGO: POOC5PROB3
FECHA: 18 DE MARZO DE 2013
OBJETIVO: halla las tres mejores notas de un grupo de alumnos y las muestra junto con los nombres*/
# include<iostream.h>
# include<conio.h>
# include<stdio.h>
# include<string.h>
void lectura(int vectornot[50], char vectornom[50][40], int *n);
void orden(int vectornot[50],char vectornom[50][40], int n);

125
Ing. Ricardo Castaeda


PROGRAMACION ORIENTADA A OBJETOS
2013
void escritura(int vectornot[50],char vectornom[50][40], int n);
void main( )
{ int vectornot[50];
char vectornom[50][40];
int n;
clrscr();
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;
clrscr();
cout << " Ingrese n => "; cin >> *n;
for ( i=1; i<=(*n);i++)
{ cout<< " Ingrese nota "<< i<<" : "; cin>> vectornot[i];
cout<< " Ingrese nombre "<< i<<" : "; gets(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;

126
Ing.Ricardo Castaeda


FACULTAD DE INGENIERIA MECANICA
2013
clrscr();
gotoxy(35,2); cout<<"LISTA DE MERITO";
for ( i=1; i<=3;i++)
{ gotoxy(37,3+i);
cout<< vectornot[i]<<" "<<vectornom[i]; } getch(); }
EJ ECUCION

Nota: Este programa trabaja con el concepto de vectores paralelos o sea que la informacin de los vectores est
relacionada por el subndice esto significa que la nota 5 pertenece al alumno que tiene el nombre 5, por lo tanto la
informacin se debe manejar en paralelo para que siga siendo consistente.
4.- Escriba un programa que halla el determinante de una matriz.
SOLUCIN:
PROGRAMA
/* CODIGO: POOC5PROB4
FECHA: 18 DE MARZO DE 201
OBJETIVO: Calcula determinante*/
#include<iostream.h>
#include<conio.h>
#include<math.h>
#include <stdlib.h>
#include <time.h>
void main()
{float m[50][50],m1[50][50];
int n;
int i,j,k,l;
clrscr();
cout<<"Ingrese el orden de la matriz:";cin>>n;
randomize();
for(i=1;i<=n;i++)
for(j=1;j<=n;j++)
m[i][j]=random(5)+5;
for(i=1;i<=n;i++)
{for(j=1;j<=n;j++)
cout<<m[i][j]<<" ";

127
Ing. Ricardo Castaeda


PROGRAMACION ORIENTADA A OBJETOS
2013
cout<<endl;
}
getch();
for (i=1;i<=n;i++)
for (j=1;j<=n;j++)
m1[i][j]=m[i][j];
float det;
det=m[1][1];
for(k=1;k<=(n-1);k++)
{ l=k+1;
for(i=l;i<=n;i++)
for(j=l;j<=n;j++)
m[i][j]=(m[k][k]*m[i][j]-m[k][j]*m[i][k])/m[k][k];

det=det*m[k+1][k+1];

}
cout<<endl;
cout<<"Determinante = "<<det<<endl;
getch();
}
EJ ECUCION

5.- Escribir un programa que realice operaciones sobre la matriz, pero utilizando funciones dentro de una estructura.
PROGRAMA
/* CODIGO: POOC5PROB5
FECHA: 18 DE MARZO DE 2013
OBJETIVO: Utilizar funciones dentro de estructura, muestra valor central e
Intercambia diagonal principal por columna central es una matriz de orden 5 */
#include<iostream.h>
#include<conio.h>
#include<stdlib.h>
#include<time.h>
struct opmatriz
{ int a[6][6];
void generar( ) //no le entrego xq a[6][6](parmetro) est dentro
{ int i,j,k,primo,x;
randomize();

128
Ing.Ricardo Castaeda


FACULTAD DE INGENIERIA MECANICA
2013
for(i=1;i<=5;i++)
for(j=1;j<=5;j++)
{ do { primo=1;
x=7+random(71);
for(k=2;k<x;k++)
if( (x%k)==0 )
{primo=0;
break; }
}while(primo==0);
a[i][j]=x; } }
void mostrarcentral ( )
{ cout<<endl;
cout<<a[3][3]<<endl;
getch(); }
void intercambiar ( )
{ int temp,i;
for(i=1;i<=5;i++)
{ temp=a[i][i];
a[i][i]=a[i][3];
a[i][3]=temp; } }
void escribir ( )
{ int i,j;
for(i=1;i<=5;i++)
{cout<<endl;
for(j=1;j<=5;j++)
cout<<" "<<a[i][j]; }
getch(); } };
void main( )
{ opmatriz x;
x.generar ( );
x.escribir ( );
x.mostrarcentral ( );
x.intercambiar ( );
x.escribir ( );}
EJ ECUCION


129
Ing. Ricardo Castaeda


PROGRAMACION ORIENTADA A OBJETOS
2013
6.- Escribir un programa que lea un vector numrico y lo rote hacia la derecha, de tal manera que el primer termino
pase al segundo lugar, el segundo al tercero y as consecutivamente y finalmente el ltimo pase a ser primero.
PROGRAMA
/* CODIGO: POOC5PROB6
FECHA: 18 DE MARZO DE 2013
Objetivo: rota a la derecha los "n" elementos de un arreglo
Entrada: vector v[]
Salida: vector v[] rotado */
#include<iostream.h>
#include<conio.h>
void main()
{ int v[10];
int i,n;
clrscr();//limpia pantalla
cout<<endl<<endl;
cout<<"INGRESE N = "; cin>>n;
for (i=1;i<=n;i++)
{ cout<<" V["<<i<< "]: ";cin>>v[i];}
// Rotacin
for (i=n;i>=1;i--)
v[i+1]=v[i];
v[1]=v[n+1];
cout << "VECTOR ROTADO = "<<endl;
for(i=1;i<=n;i++)
cout<<" V["<<i<< "]: "<<v[i]<<endl;
getch();
}
EJ ECUCION






130
Ing.Ricardo Castaeda


FACULTAD DE INGENIERIA MECANICA
2013
EJ ERCICIOS PROPUESTOS
1) Escribir un programa que inserte un elemento dentro de un vector ordenado, considere el programa utilizando
para su solucin la estructura while.
2) Escribir un programa que realice una bsqueda dentro de un vector ordenado, este programa debe detenerse
cuando el valor es hallado, cuando se llegue al final o cuando el valor buscado es superado.
3) Escribir el cdigo necesario para rotar un vector en sentido antihorario o sea al revs de lo hecho en el problema
9.
4) Se tiene una matriz de letras, escriba usted un programa para que realice la bsqueda de una cadena ingresada
dentro de la matriz(PUPILETRAS), la bsqueda debe ser de izquierda a derecha y de arriba hacia abajo en la
matriz, los mensajes de salida ser Hallado y No hallado.
5) Escriba un programa que lea una matriz de n filas por m columnas y me imprima la transpuesta de dicha
matriz.
6) Escriba un programa que me permita hallar la inversa de una matriz.






























131
Ing. Ricardo Castaeda


PROGRAMACION ORIENTADA A OBJETOS
2013






















CAPITULO VI
























132
Ing.Ricardo Castaeda


FACULTAD DE INGENIERIA MECANICA
2013
6 CADENAS EN LENGUAJE C,-Ahora veremos un caso especial de arrays, que es un tipo estandarizado. Se
trata de las cadenas de caracteres o "strings" (en ingls).
Una cadena en C es un conjunto de caracteres, o valores de tipo "char", terminados con el carcter nulo, es decir el
valor numrico 0. Internamente se almacenan en posiciones consecutivas de memoria. Este tipo de estructuras
recibe un tratamiento especial, y es de gran utilidad y de uso continuo.
La manera de definir una cadena es la siguiente:
char <identificador> [<longitud mxima>]
Nota: En este caso los corchetes no indican un valor opcional, sino que son realmente corchetes, por eso estn en
negrita.
Cuando se declara una cadena hay que tener en cuenta que tendremos que reservar una posicin para almacenar
el carcter nulo, de modo que si queremos almacenar la cadena "ahora", tendremos que declarar la cadena como:
char cad1[6];
Cinco caracteres para "ahora" y uno extra para el carcter '\0'.
Tambin ser posible hacer referencia a cada uno de los caracteres individuales que componen la cadena,
simplemente indicando la posicin. Por ejemplo el tercer carcter de nuestra cadena de ejemplo ser la o,
podemos hacer referencia a l como cad1[2]. Los ndices tomarn valores empezando en el cero, as el primer
carcter de nuestra cadena sera cad1[0], que es la a'.
Una cadena puede almacenar informaciones como nombres de personas, mensajes de error, nmeros de telfono, .
La asignacin directa slo est permitida cuando se hace junto con la declaracin. Por ejemplo:
char cad1;
cad1 = ahora, producir un error.
Producir un error en el compilador, ya que una cadena definida de este modo se considera una constante, como
veremos en el captulo de "arrays" o arreglos.
Lo que s se puede hacer es: char cad1[6] = "ahora".
Existen muchas funciones para el tratamiento de cadenas, como veremos, que permiten compararlas, copiarlas,
calcular su longitud, imprimirlas, visualizarlas, guardarlas en disco, etc. Adems, frecuentemente nos encontraremos
a nosotros mismos creando nuevas funciones que bsicamente hacen un tratamiento de cadenas.

6.1 Lectura de una cadena del teclado
Veamos el siguiente cdigo:








Esta lectura del teclado, leer una cadena hasta que se encuentra el primer carcter blanco. As, cuando se lee Hola
que tal la primera cadena, en cad slo se almacena Hola. Para resolver el problema, utilizar la funcin gets () que
lee una cadena completa.
La sintaxis de la funcin gets ser:
#include <iostream.h>
main ()
{char cad [80];
cout << introduzca una cadena:; // lectura del teclado cin cad;
cin >> cad;
cout << Su cadena es:;
cout << cad;
return 0; }


133
Ing. Ricardo Castaeda


PROGRAMACION ORIENTADA A OBJETOS
2013
#include <stdio.h>
char *gets(char *s)
Descripcin: Captura una cadena desde el stdin. Esta cadena es tomada de una lnea y colocada en s, en el fin de
lnea se pondr el carcter \n. esto nos permite considerar algunos blancos intermedios que de otra manera no se
consideraran.
El programa anterior quedara as:














Ejemplo 1.- Escriba un programa que ingrese nombres y apellidos a una variable, usando cin y usando la funcin
gets y compare resultados al imprimirlos.
PROGRAMA
/* CODIGO: POOC6E1
Fecha : 18 de marzo de 2013
objetivo: compara la lectura de cadenas con cin y con gets
entrada: vector nombre_apellidos char 80, ledo por cin y por gets
salida: escritura con cin y con gets de una cadena de caracteres.*/
#include<iostream.h>
#include<conio.h>
#include<stdio.h>
void main()
{ char nombre_apellidos1[50],nombre_apellidos2[50];
clrscr();//limpia pantalla
cout<<"Ingrese nombres y apellidos : "; cin>>nombre_apellidos1;
cout<<"Ingrese nombres y apellidos : "; gets(nombre_apellidos2);
cout<<endl<<endl;
cout<<"Salida del nombre y apellidos ledos con cin : "<<nombre_apellidos1<<endl;
cout<<"Salida del nombre y apellidos ledos con gets: "<<nombre_apellidos2;
getch(); }
EJ ECUCION
#include <iostream.h>
#include <stdio.h>
main()
{ char cad[80];
cout Introduzca una cadena:;
gets (cad);
cout Su cadena es:; cout << cad;
return 0; }


134
Ing.Ricardo Castaeda


FACULTAD DE INGENIERIA MECANICA
2013


6.2 Funciones para manejar cadenas:
Copia una cadena en otra cadena. strcpy




Copia un nmero de bytes de una cadena a otra. strncpy




Ejemplo 2.- Escriba un programa que ingrese nombres y cdigo sabiendo que en el cdigo los cuatro primeros
caracteres son el ao de ingreso, mostrar en la salida el nombre y el ao de ingreso.
PROGRAMA
/* CODIGO: POOC6E2
fecha : 18 DE MARZO DE 2013
objetivo: Copia cadenas completas o parte de una cadena
entrada: nombre y cdigo
salida: nombre, ao de ingreso */
#include<iostream.h>
#include<conio.h>
#include<stdio.h>
void main()
{ char nombre[50],codigo[10];
char nomsal[50],ingreso[5];
clrscr();//limpia pantalla
cout<<"Ingrese nombre: "; gets(nombre);
cout<<"Ingrese cOdigo: "; gets(codigo);
strcpy(nomsal,nombre);
strncpy(ingreso,codigo,4);
ingreso [4]='\0';
cout<<endl<<endl;
cout<<"Nombre : "<<nomsal<<endl;
cout<<"Ao de Ingreso : "<<ingreso;
getch(); }
EJ ECUCION
#include <string.h>
char *strcpy(char *destino, const char *origen)
Copia la cadena de caracteres de origen a destino.
Retorna destino.

#include<stdio.h>
char *strncpy(char *dest, const char *origen,size_t maxlen)
Copia un numero de bytes de origen a destino.
Retorna destino.

135
Ing. Ricardo Castaeda


PROGRAMACION ORIENTADA A OBJETOS
2013

Compara dos cadenas. strcmp







Ejemplo 3.- Escriba un programa que ingrese 3 nombres y los ordene utilizando la funcin strcmp y tambin strcpy.
PROGRAMA
/* CODIGO: POOC6E3
fecha : 18 DE MARZO DE 2013
objetivo: Ordena tres nombres en forma alfabtica
entrada: nombre1,nombre2 y nombre3
salida: las tres entradas ordenadas alfabticamente */
#include<iostream.h>
#include<conio.h>
#include<stdio.h>
void intercambio(char na[30],char nb[30]);
void main()
{ char nombre1[30],nombre2[30],nombre3[30];
int i;
clrscr();//limpia pantalla
cout<<"Ingrese nombre 1: "; gets(nombre1);
cout<<"Ingrese nombre 2: "; gets(nombre2);
cout<<"Ingrese nombre 3: "; gets(nombre3);
for(i=1;i<=2;i++)
{if (strcmp(nombre1,nombre2)>0)
intercambio(nombre1,nombre2);
if (strcmp(nombre2,nombre3)>0)
intercambio(nombre2,nombre3);
}
cout<< "Nombres Ordenados "<<endl;
cout<<nombre1<<endl;
cout<<nombre2<<endl;
cout<<nombre3<<endl;
getch();
#include<string.h>
int strcmp(const char *s1, const char *s2)
Compara una cadena con otra, iniciando por el primer character hasta que difieran
o se alcanze el final.
Si s1 es menor que s2 devuelve un valor menor que 0.
Si s1 es igual que s2 devuelve un valor igual a 0.
Si s1 es mayor que s2 devuelve un valor mayor que 0.


136
Ing.Ricardo Castaeda


FACULTAD DE INGENIERIA MECANICA
2013
}
void intercambio(char na[30],char nb[30])
{ char temp[30];
strcpy(temp,na);
strcpy(na,nb);
strcpy(nb,temp); }
EJ ECUCION


Adiciona una cadena a otra. strcat






Calcula la longitud de una cadena.strlen





Ejemplo 4.- Escriba un programa que ingrese ao de ingreso, orden de merito y dos caracteres y genere su codigo
concatenando estos datos.
PROGRAMA
/* CODIGO: POOC6E4
fecha : 18 DE MARZO DE 2013
objetivo: Ejemplo de la funcin strlen y strcat()
entrada: Ingresa un ao y orden de merito mas dos letras
salida: Codigo generado */

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

void main()
{ int agno,merito;
Syntaxis
#include <string.h>
char *strcat(char *dest, const char *src);
Descripcion
Adiciona una cadena a otra, strcat adicion una copia src al final de dest. La
longitud de el resultado es strlen(dest) + strlen(src).

Syntax
#include <string.h>
size_t strlen(const char *s);
Descripcion
Calcula la longitud de una cadena. Strlen calcula la longitude de s.

137
Ing. Ricardo Castaeda


PROGRAMACION ORIENTADA A OBJETOS
2013
char agnoc[5],meritoc[5],letras[3];
char codigo[13]="";
clrscr();
cout<<"Ingrese un ao: ";cin>>agno;
cout<<"Ingrese orden de merito: ";cin>>merito;
cout<<"Ingrese 2 caracteres: ";cin>>letras;
cout<<agno<<endl;
cout<<merito<<endl;
cout<<letras<<endl;
itoa(agno,agnoc,10);
itoa(merito,meritoc,10);
cout<<agnoc<<" Cadena de longitud: "<<strlen(agnoc)<<endl;
cout<<meritoc<<" Cadena de longitud: "<<strlen(meritoc)<<endl;
cout<<letras<<" Cadena de longitud: "<<strlen(letras)<<endl;
strcat(codigo,agnoc);
strcat(codigo, meritoc);
strcat(codigo,letras);
cout<<"Codigo Generado= "<<codigo<<endl;
cout<<"Cadena de longitud: "<<strlen(codigo)<<endl;
getch(); }
EJ ECUCION

6.3 Vectores de cadenas: Cuando queremos trabajar con un arreglo de cadenas en realidad vamos a
trabajar con una matriz de caracteres, veamos esto, declaremos la variable codigo:
char codigo[3][4]
Se grafica
a 1 2 \0 b 2 2 \0 c 3 4 \0
Donde
codigo [0] a12
codigo [1] b22
codigo [2] c34
o sea que podemos trabajar con las cadenas, codigo[0], codigo[1], codigo[2] y todas las funciones estudiadas
se aplicaran a estas filas de las matrices de caracteres que viene a ser las cadenas que trabajaran como
argumentos de estas funciones.
Ejemplo 5.- Escribir un programa bsico que nos permita lee un vector de cadenas donde almacenemos un
conjunto de n cursos

138
Ing.Ricardo Castaeda


FACULTAD DE INGENIERIA MECANICA
2013
PROGRAMA
/* CODIGO: POOC6E5
fecha : 18 DE MARZO DE 2013
objetivo: LECTURA Y ESCRITURA DE NOMBRES DE CURSOS
entrada: Ingresa un arreglo de cursos
salida: Muestra los cursos ingresados */
#include<iostream.h>
#include<conio.h>
#include<stdlib.h>
#include<string.h>
#include<stdio.h>
void main()
{ int i,n;
char curso[50][15];//Puede almacenar hasta 50 cursos
clrscr();
cout<<"Ingrese nmero de cursos ==> ";cin>>n;
for(i=1;i<=n;i++)
{ cout<<"Ingrese curso["<<i<<"]: ";
gets(curso[i]); }
//salida
clrscr();
gotoxy(35,2);cout<<" CURSOS ";
for(i=1;i<=n;i++)
{ gotoxy(33,4+i);cout<<curso[i];}
getch(); }
EJ ECUCION

Ejemplo 6.- Escribir un programa bsico que nos permita lee un vector de cadenas donde almacenemos un
conjunto de n nombres y despus lo ordene en forma alfabtica.
PROGRAMA
/* CODIGO: POOC6E6
fecha : 18 DE MARZO DE 2013
objetivo: Ordenamiento alfabtico de nombres
entrada: Ingresa un arreglo de nombres
salida: Muestra los nombres ingresados ordenados alfabticos */
#include<iostream.h>

139
Ing. Ricardo Castaeda


PROGRAMACION ORIENTADA A OBJETOS
2013
#include<conio.h>
#include<stdlib.h>
#include<string.h>
#include<stdio.h>
void main()
{ int i,j,n;
char nombre[40][30],temp[30];//Puede almacenar hasta 40 nombres
clrscr();
cout<<"Ingrese numero de nombres ==> ";cin>>n;
for(i=1;i<=n;i++)
{ cout<<"Ingrese apellidos y nombres["<<i<<"]: ";
gets(nombre[i]);
}
//salida
clrscr();
gotoxy(35,2);cout<<" NOMBRES ";
for(i=1;i<=n;i++)
{ gotoxy(33,4+i);cout<<nombre[i];}
getch();
//ordenamiento de nombres
for(i=1;i<n;i++)
for(j=i+1;j<=n;j++)
if(strcmp(nombre[i],nombre[j])>0)
{strcpy(temp,nombre[i]);
strcpy(nombre[i],nombre[j]);
strcpy(nombre[j],temp);
}
clrscr();
gotoxy(35,2);cout<<" NOMBRES ORDENADOS";
for(i=1;i<=n;i++)
{ gotoxy(33,4+i);cout<<nombre[i];}
getch(); }


EJ ECUCION


140
Ing.Ricardo Castaeda


FACULTAD DE INGENIERIA MECANICA
2013
PROBLEMAS
1.- Tenemos dos vectores de cadenas, el primero almacena cdigos de los cursos de 5 caracteres de longitud y el
segundo almacena los nombres de los cursos, escriba usted un programa que lea un codigo y realice una bsqueda,
si encuentra el curso debe mostrar el nombre y si no lo encuentra un mensaje de no hallado.
PROGRAMA






























EJ ECUCION

/* CODIGO: POOC6PROB1
fecha : 18 DE MARZO DE 2013
objetivo: BUSQUEDA EN UN VECTOR PARALELO
entrada: INGRESA CODIGO DE UN CURSO
salida: NOMBRE DEL CURSO O MENSAJE DE BUSQUEDA FALLIDA */
#include<iostream.h>
#include<conio.h>
#include<stdlib.h>
#include<string.h>
#include<stdio.h>
void main()
{ int i,j,n;
char codcur[50][6],nomcur[50][30],codx[6];
clrscr();
cout<<"Ingrese numero de cursos ==> ";cin>>n;
for(i=1;i<=n;i++)
{ cout<<"Ingrese Codigo del Curso["<<i<<"]: ";gets(codcur[i]);
cout<<"Ingrese Nombre del Curso["<<i<<"]: ";gets(nomcur[i]); }
clrscr();
gotoxy(35,2);cout<<" BUSQUEDA ";
gotoxy(30,5);cout<<"INGRESE CODIGO DEL CURSO A BUSCAR: ";cin>>codx;
for(i=1;i<=n;i++)
if (strcmp(codx,codcur[i])==0)
{ j=i; break; }
if (strcmp(codx,codcur[j])==0)
{ gotoxy(30,6);
cout<<" NOMBRE DEL CURSO ENCONTRADO : "<<nomcur[j]; }
else
{ gotoxy(30,20); cout<<" CODIGO NO HALLADO........................."; }
getch(); }

141
Ing. Ricardo Castaeda


PROGRAMACION ORIENTADA A OBJETOS
2013
2.- Deseamos generar Emails para un grupo de alumnos de la facultad de Ingeniera Mecnica (FIM), esto lo
haremos utilizando los dos primeros caracteres del nombre y el primer apellido mas la cadena @fim.edu.pe, por
ejemplo si el nombre es Jos crdenas, el email generado seria: jocardenas@fim.edu.pe, utilice las funciones
necesaria que hemos revisado para generar los emails de un grupo de n alumnos de la facultad de ingeniera
mecnica (FIM).
PROGRAMA





























EJ ECUCION

/* CODIGO: POOC6PROB2
fecha : 18 DE MARZO DE 2013
objetivo: Genera un Email para cada alumno FIM
entrada: nombre y apellido
salida: Email */
#include<iostream.h>
#include<conio.h>
#include<stdio.h>
#include<string.h>
void main()
{ char nombre[10][15],apellido[10][15];
char cadena1[10][3],cadena2[12]="@fim.edu.pe";
char email[10][30];
int i,n;
clrscr();//limpia pantalla
cout<<"Ingrese numero de alumnos ==> ";cin>>n;
for(i=1;i<=n;i++)
{ cout<<"Ingrese Nombre["<<i<<"] : ";gets(nombre[i]);
cout<<"Ingrese Apellido["<<i<<"]: ";gets(apellido[i]);
strncpy(cadena1[i],nombre[i],2);
cadena1[i][2]= '\0';
strcpy(email[i],"");
strcat(email[i],cadena1[i]);
strcat(email[i],apellido[i]);
strcat(email[i],cadena2);}
clrscr();
gotoxy(35,2);cout<<" Emails ";
for(i=1;i<=n;i++)
{ gotoxy(33,4+i);cout<<email[i];}
getch(); }

142
Ing.Ricardo Castaeda


FACULTAD DE INGENIERIA MECANICA
2013
3.- Tenemos dos vectores de cadenas, el primero tiene el nombre del alumno y el segundo tiene el curso en el cual
est matriculado, se desea escribir un programa que lea el nombre de un curso y me genere un listado alfabtico de
todos los alumnos matriculados en el curso.
PROGRAMA
/* CODIGO: POOC6PROB3
fecha : 18 DE MARZO DE 2013
objetivo: Genera un listado alfabetico de un curso
entrada: nombre y curso matriculado ademas del curso para obtener el listado
salida: Listado */
#include<iostream.h>
#include<conio.h>
#include<stdio.h>
#include<string.h>
void main()
{ char nombre[40][20],curso[40][15],cursox[15];
char lista [40][20],temp[20];
int i,j,n,n1;
clrscr();//limpia pantalla
cout<<"Ingrese numero de alumnos ==> ";cin>>n;
for(i=1;i<=n;i++)
{ cout<<"Ingrese apellidos y nombres["<<i<<"]: "; gets(nombre[i]);
cout<<"Ingrese nombre del curso ["<<i<<"]: "; gets(curso[i]); }
cout<<"Ingrese nombre del curso";gets(cursox);
//salida
n1=0;
for(i=1;i<=n;i++)
if(strcmp(cursox,curso[i])==0)
{n1=n1+1;
strcpy(lista[n1],nombre[i]); }
clrscr();
//ordenamiento de la lista
for(i=1;i<n1;i++)
for(j=i+1;j<=n1;j++)
if(strcmp(lista[i],lista[j])>0)
{strcpy(temp,lista[i]);
strcpy(lista[i],lista[j]);
strcpy(lista[j],temp); }
clrscr();
gotoxy(35,2);cout<<" NOMBRES ORDENADOS";
for(i=1;i<=n1;i++)
{ gotoxy(33,4+i);cout<<lista[i];}
getch(); }
EJ ECUCION

143
Ing. Ricardo Castaeda


PROGRAMACION ORIENTADA A OBJETOS
2013

EJ ERCICIOS PROPUESTOS
1. Escribir un programa que lea el codigo de un alumno compuesto por ao que ingreso + puesto que ingreso y
una letra y halle el ao de ingreso y adems orden de merito para n alumnos. Ejemplo lee 2005193c y
muestra ao de ingreso = 2005 y orden de merito 193. No olvidar que esto se tiene que realizar para los n
alumnos.
2. Dados tres vectores paralelos, el primero con el codigo de n alumnos el segundo con el codigo del curso en el
que estn matriculados y el tercero con la nota, escribir un programa que liste todos los aprobados adems
del promedio total de un curso particular.
3. Se tiene un conjunto de cdigos, escriba un programa que me permita encriptarlos intercambiando sus
caracteres y adems tiene que mostrar tambin la rutina que los desencripta.
4. Escribir el cdigo necesario para leer un conjunto de n cadenas de caracteres e imprimir cuantas veces se
presenta cada vocal.
5. Se tiene una vector de nombres, otro de direcciones y un ltimo vector de telfonos, se desea escribir un
listado de todos los que tienen celular. El listado debe incluir nombre y direccin.






















144
Ing.Ricardo Castaeda


FACULTAD DE INGENIERIA MECANICA
2013























CAPITULO VII























145
Ing. Ricardo Castaeda


PROGRAMACION ORIENTADA A OBJETOS
2013
REGISTROS EN LENGUAJE C
7 Definicin.- Un registro o una estructura en lenguaje C es una coleccin de variables simples que pueden
contener diferentes tipos de datos. Es un tipo de dato definido por el usuario.
7.1 Modelamiento de un registro de acuerdo a las entidades del mundo real: Cuando se crea un registro
se utiliza las entidades (elementos relevantes del proceso) del mundo real para crear la estructura del
registro. Veamos un ejemplo. Supongamos que el proceso matricula se automatiza, entonces cuales serian
las entidades del mundo real que participan en este proceso, algunas de ellas serian:
Alumno
Profesor
Curso
Aulas
Escuelas
Etc,
Tomemos la entidad alumno y la entidad curso, como estas entidades dan origen a sus respectivos registros.
ENTIDAD REGISTRO
ALUMNO
CODIGO
NOMBRE
DIRECCION
ESCUELA
TELEFONO
REGALU
codalu entero largo
nomalu carcter de longitud 30
diralu carcter de longitud 40
escalu carcter de longitud 2
telalu entero largo
Vemos que cada caracterstica de la entidad alumno se convierte en un campo del registro regalu.
Continuemos con la entidad curso:
ENTIDAD REGISTRO
CURSO
CODIGO
NOMBRE
NOTAFIN
REGCUR
codcur carcter de longitud 5
nomcur carcter de longitud 30
notcur real
Vemos claramente que los campos son las caractersticas que definen a la entidad y almacenaran estos datos
de una entidad particular.
Si nosotros visualizamos un registro, seria de la siguiente forma:
Estructura de REGALU
codalu nomalu diralu escalu telalu


Estructura de REGCUR
codcur nomcur notcur


146
Ing.Ricardo Castaeda


FACULTAD DE INGENIERIA MECANICA
2013
Si vemos un arreglo de estos registros se vera as
codalu nomalu diralu escalu telalu











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

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

147
Ing. Ricardo Castaeda


PROGRAMACION ORIENTADA A OBJETOS
2013
c2.largo = 3;
c3.ancho = 1;
7.5 Asignacin de estructuras.- Podemos intercambiar informacin entre dos estructuras directamente de
registro a registro.
Ejemplo: De los casos anteriores es vlido decir:
persona2 = persona1;
c1 = c3;
Los contenidos de los correspondientes campos de persona1 se copiaran en persona2, los de c3 en c1.
Estructuras anidadas.- Se pueden anidar estructuras dentro de otras estructuras.
Ejemplo: struct fecha
{ int dia;
int mes;
int ao; }
struct empleado
{ fecha dia_ingreso;
char nombre[50]; }
EJEMPLO 1.- Vamos a desarrollar un programa que lea y escriba un arreglo de n registros, cuya estructura es :
Dni cadena de 10 caracteres
Nombre cadena de 30 caracteres
Direccin cadena de 40 caracteres
PROGRAMA
/* CODIGO: POOC7E1
FECHA: 21 DE MARZO DE 2013
OBJETIVO:PROGRAMA QUE LEE Y ESCRIBE UN ARREGLO DE REGISTROS*/
#include<iostream.h>
#include<conio.h>
#include<stdio.h>
#include<iomanip.h>
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];
clrscr();
cout<< " Cuantos registros va a procesar ==> ";
cin >>n;
for(i=1;i<=n;i++)
{cout<< " REGISTRO "<<i<<" :"<<endl<<endl;
cout<< " DNI = ";cin>>p[i].dniper;
cout<< " NOMBRE = ";gets(p[i].nomper);

148
Ing.Ricardo Castaeda


FACULTAD DE INGENIERIA MECANICA
2013
cout<< " DIRECCION= ";gets(p[i].dirper); }
cout<<setiosflags(ios::left);
// Salida de resultados
clrscr();
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(); }
EJ ECUCION

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, la nota final ser calculada, considerando examen1 (peso 1),
examen2 (peso2) y promediop(peso2). El codigo no puede ser repetido, esta condicin debe ser probada en cada
ingreso. Finalmente presentar resultados.
PROGRAMA
/* CODIGO: POOC7E2
FECHA: 21 DE MARZO DE 2013
OBJETIVO: Ingresa registros sin codigo repetido */
#include<iostream.h>
#include<conio.h>
#include<stdio.h>
#include<iomanip.h>
struct notas

149
Ing. Ricardo Castaeda


PROGRAMACION ORIENTADA A OBJETOS
2013
{ 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;
clrscr();
cout<< " Cuantos registros va a leer ==> ";
cin >>nr;
for(i=1;i<=nr;i++)
{ swr=1;
while (swr)
{ swr=0;
clrscr();
gotoxy(25,2);cout<<"INGRESO DE REGISTRO DE NOTAS";
gotoxy(26,5);cout<<" Ingrese codigo ==> ";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)
{gotoxy(30,18);
cout<<"Error codigo repetido..........";
getch();
}
else
{ gotoxy(26,18);cout<<"Por favor ingrese datos...." ;
gotoxy(26,6);cout<<" Ingrese nombre ==> ";gets(n[i].nomalu);
gotoxy(26,7);cout<<" Ingrese examen parcial ==> ";cin>>n[i].examen1;
gotoxy(26,8);cout<<" Ingrese examen final ==> ";cin>>n[i].examen2;
gotoxy(26,9);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);

150
Ing.Ricardo Castaeda


FACULTAD DE INGENIERIA MECANICA
2013
// Salida de resultados
clrscr();
cout<< " LISTADO DE ALUMNOS "<<endl;
cout<< "==================== "<<endl;
cout<<setw(10)<<"CODIGO";
cout<<setw(20)<<"NOMBRE";
cout<<setw(11)<<"EX.PARCIAL";
cout<<setw(11)<<"EX.FINAL ";
cout<<setw(11)<<"PROM.PRAC.";
cout<<setw(11)<<"NOTA FINAL"<<endl;
cout<< "========================================================================= "<<endl;
for(i=1;i<=nr;i++)
{cout<<setw(10)<<n[i].codalu;
cout<<setw(20)<< n[i].nomalu;
cout<<setw(11)<< n[i].examen1;
cout<<setw(11)<< n[i].examen2;
cout<<setw(11)<< n[i].promediop;
cout<<setw(11)<< n[i].notafinal<<endl;
} getch();
}
EJ ECUCION











151
Ing. Ricardo Castaeda


PROGRAMACION ORIENTADA A OBJETOS
2013
PROBLEMAS
1. Desarrollar un programa que maneje todos los productos que una tienda de abarrotes vende, siendo nuestro
objetivo principal el automatizar el proceso de una tienda de abarrotes que nos permitir realizar las siguientes
operaciones de manera eficiente:
Tener un listado actualizado del stock en todo momento
Eliminar los productos que ya no se venden.
Adicionar productos nuevos.
Consultar datos sobre un producto particular.
Realizar balances mensuales de la tienda de abarrotes para manejar la contabilidad eficientemente.
SOLUCION:

PROGRAMA
/* CODIGO: POOC7PROB1
FECHA: 21 DE MARZO DE 2013
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; // cdigo del producto
char desite[20]; // descripcin del producto
char ubiite[4]; // ubicacin del producto
float nunite; // nmero de unidades del producto
int tunite;// tipo de unidades kilo(1), litro(2), c/u(3)
float pruite; // precio por cada unidad del producto
};
void lectura(item prod[50], int *n);
void adicion(item prod[50], int *n);
void eliminacion(item prod[50], int *n);
void busqueda(item prod[50], int n);
void orden1(item prod[50], int n);
void escritura(item prod[50], int n);
void main( )
{ item vprod[50];
int num;
char opcion;
do { clrscr();
gotoxy(30,2); cout<< "MENU ARREGLOS";
gotoxy(30,5); cout<< "1.- Lectura";
gotoxy(30,6); cout<< "2.- Adicion";

152
Ing.Ricardo Castaeda


FACULTAD DE INGENIERIA MECANICA
2013
gotoxy(30,7); cout<< "3.- Eliminacion";
gotoxy(30,8); cout<< "4.- Bsqueda";
gotoxy(30,9); cout<< "5.- Ordenamiento ";
gotoxy(30,10);cout<< "6.- Escritura";
gotoxy(30,11);cout<< "7.- Salir ";
gotoxy(30,16);cout<< "Ingrese Opcion ==> ";cin >> opcion;
switch(opcion)
{ case '1' : lectura(vprod, &num);break;
case '2' : adicion(vprod, &num);break;
case '3' : eliminacion(vprod, &num);break;
case '4' : busqueda(vprod, num);break;
case '5' : orden1(vprod, num);break;
case '6' : escritura(vprod, num);break; }
}while(opcion != '7');
}
void lectura(item prod[50], int *n)
{ int i;
clrscr();
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<< " Ingrese ubicacin "<< 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);

153
Ing. Ricardo Castaeda


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

154
Ing.Ricardo Castaeda


FACULTAD DE INGENIERIA MECANICA
2013
{cout<< " Descripcin : "<<prod[i].desite<<endl;
cout<< " Ubicacin : "<<prod[i].ubiite<<endl;
cout<< " # de unidades : "<< prod[i].nunite<<endl;
cout<< " Tipo de unidad kilo(1),litro(2),c/u(3): "<<prod[i].tunite<<endl;
cout<< " Ingrese precio por unidad del producto: "<<prod[i].pruite<<endl;
getch(); } }
void orden1(item prod[50], int n)
{ int i, j; item temp;
for ( i=1; i<n ;i++)
for (j=i+1;j<=n;j++)
if( prod[i].codite> prod[j].codite)
{ temp = prod[i];
prod[i] = prod[j];
prod[j] = temp ; } }
void escritura(item prod[50], int n)
{ 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(); }
EJ ECUCION



155
Ing. Ricardo Castaeda


PROGRAMACION ORIENTADA A OBJETOS
2013
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.
SOLUCIN
PROGRAMA
/* CODIGO: POOC7PROB2
FECHA: 21 DE MARZO DE 2013
OBJETIVO: Programa que crea un men con registros de empleados */
#include<iostream.h>
#include<conio.h>
#include<string.h>
#include<stdio.h>
#include<iomanip.h>
struct empleado
{ int codemp; // cdigo del empleado
char nomemp[40]; // nombre del empleado
char nivemp; // nivel remunerativo del empleado A,B,C
float sueemp; // sueldo del empleado
};
void leer(empleado p[50], int *n);
void adicionar (empleado p[50], int *n);
void eliminar (empleado p[50], int *n);
void escribir(empleado p[50], int n);
void main( )
{ 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";

156
Ing.Ricardo Castaeda


FACULTAD DE INGENIERIA MECANICA
2013
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;
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;

157
Ing. Ricardo Castaeda


PROGRAMACION ORIENTADA A OBJETOS
2013
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
{cout<< " Registro no Hallado ";
getch();
}
}
void escribir(empleado p[50], int n)
{int i;
clrscr();
cout<<setiosflags(ios::left);

158
Ing.Ricardo Castaeda


FACULTAD DE INGENIERIA MECANICA
2013
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(); }
EJ ECUCION

3. Se desea escribir un programa que procese el examen sustitutorio de "n" alumnos, considerar el siguiente
registro:
struct notas
{ char codalu [10]; // Cdigo del alumno
char codcur [7]; // Cdigo del curso
float pp ; // Promedio de prcticas
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+2ef+pp)/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 ms desfavorable de haber rendido los dos.

159
Ing. Ricardo Castaeda


PROGRAMACION ORIENTADA A OBJETOS
2013
e. Ordenar los promedios finales por merito y a quien corresponde.*/
PROGRAMA
/* CODIGO: POOC7PROB3
FECHA: 21 DE MARZO DE 2013
OBJETIVO: Programa que procesa notas, considerando las pruebas no rendidas como 99, para clculos el 99 se transforma en cero */
#include<iostream.h>
#include<conio.h>
#include<stdio.h>
#include<stdlib.h>
#include<iomanip.h>
struct notas
{
char codalu[10];
char codcur[7];
float pp;
int ep;
int ef;
int es;
float pf;
};
void leer( notas libreta[50] , int *n);
void promedio ( notas nota[50] , int n);
void orden( notas nota[50] , int n);
void main( )
{ int num;
notas registro[50];
cout<<"REGISTRO"<<endl;
leer ( registro , &num );
promedio ( registro , num );
orden( registro , num ); }
void leer( notas libreta[50] , int *n)
{ int i;
clrscr();
cout<<"REGISTRO DE NOTAS"<<endl<<endl;;
cout<<"Numero de alumnos: ";cin>>*n;
cout<<endl;
for(i=1;i<=*n;i++)
{ cout<<"CODIGO ALUMNO: ";cin>>libreta[i].codalu;
cout<<"CODIGO CURSO: ";cin>>libreta[i].codcur;
cout<<"PROM. PRACTICAS: ";cin>>libreta[i].pp;
cout<<"EX. PARCIAL: ";cin>>libreta[i].ep;
cout<<"EX. FINAL: ";cin>>libreta[i].ef;
cout<<"EX. SUSTITUTORIO: ";cin>>libreta[i].es; }

160
Ing.Ricardo Castaeda


FACULTAD DE INGENIERIA MECANICA
2013
}
void promedio ( notas nota[50] , int n)
{ int i,condicion1,condicion2,condicion3;
for(i=1;i<=n;i++)
{ condicion1=(nota[i].es!=99);
condicion2=(nota[i].ep==99);
condicion3=(nota[i].ef==99);
if (nota[i].ep==99) nota[i].ep=0;
if (nota[i].ef==99) nota[i].ef=0;
nota[i].pf = ( nota[i].pp + nota[i].ep + 2*nota[i].ef )/4.0;
if( condicion1 )
{
if(nota[i].pp>=6.0)
{
if ( condicion2 || condicion3 )
{
if(condicion2)
nota[i].pf=( nota[i].pp+nota[i].es+2*nota[i].ef) /4.0;
if(condicion3)
nota[i].pf=( nota[i].pp+2*nota[i].es+nota[i].ep) /4.0;
}
else
if ( (nota[i].pp+nota[i].es+nota[i].ef*2)>(nota[i].pp+nota[i].ep+nota[i].es*2) )
nota[i].pf=(nota[i].pp+nota[i].es+nota[i].ef*2)/4.0;
else
nota[i].pf=(nota[i].pp+nota[i].ep+nota[i].es*2)/4.0;
}
}
}
}
void orden( notas nota[50] , int n)
{
int i,j;
notas temp;
for(i=1;i<n;i++)
for(j=i+1;j<=n;j++)
if( nota[i].pf<nota[j].pf )
{ temp=nota[i];
nota[i]=nota[j];
nota[j]=temp; }
clrscr( );
cout<<setiosflags(ios::fixed);
cout<<setiosflags(ios::showpoint);

161
Ing. Ricardo Castaeda


PROGRAMACION ORIENTADA A OBJETOS
2013
cout<<setprecision(2);
cout<<setiosflags(ios::left);
cout<<" LISTADO POR ORDEN DE MERITO"<<endl;
cout<<" ==========================="<<endl;
cout<<endl<<endl;
cout<<setw(10)<<"|CODIGO ";
cout<<setw(7)<<"|CURSO ";
cout<<setw(8)<<"|PROM.FINAL|"<<endl;
cout<<"==========================="<<endl;
for(i=1;i<=n;i++)
{cout<<setw(10)<<nota[i].codalu;
cout<<setw(7)<<nota[i].codcur;
cout<<setw(8)<<nota[i].pf<<endl; }
getch(); }
EJ ECUCION

4.- Se desea escribir un programa que procese una agenda electrnica de clientes por dia de la semana, y elaborar
para el dia de la semana, un reporte alfabtico de a-z.
SOLUCION
PROGRAMA
/* CODIGO: POOC7PROB4
FECHA: 21 DE MARZO DE 2013
OBJETIVO: Elaborar una agenda electrnica de sus clientes por dia de la semana, y elaborar para el dia de la
semana, un reporte alfabtico */
#include<iostream.h>
#include<conio.h>
#include<string.h>
#include<stdio.h>
struct clientes
{char nomcli[40];
char diasem[10];
char temcli[35];
};//variable definida por el usuario
struct agedia
{ char nomcli[40];
char temcli[35]; };

162
Ing.Ricardo Castaeda


FACULTAD DE INGENIERIA MECANICA
2013
void main()
{ clientes agenda[100];
agedia diaria[25],temp;
char diax[10];
int i,j,k,n;
clrscr();
cout<<"Ingrese el nmero de clientes: "; cin>>n;
for(i=1;i<=n;i++)
{cout<<"Nombre: "; gets(agenda[i].nomcli);
cout<<"Dia: "; cin>>agenda[i].diasem;
cout<<"Tema: "; gets(agenda[i].temcli); }
//preparando agenda de un dia determinado
clrscr();
cout<<"Ingrese dia: "; cin>>diax; k=0;
for(i=1;i<=n;i++)
if(strcmp(diax,agenda[i].diasem)==0)
{k=k+1;
strcpy(diaria[k].nomcli,agenda[i].nomcli);
strcpy(diaria[k].temcli,agenda[i].temcli); }
for(i=1;i<k;i++)
for(j=i+1;j<=k;j++)
if(strcmp(diaria[i].nomcli,diaria[j].nomcli)>0)
{temp=diaria[i];
diaria[i]=diaria[j];
diaria[j]=temp; }
gotoxy(7,14);cout<<"NOMBRE";
gotoxy(48,14);cout<<"TEMA";
for(i=1;i<=k;i++)
{gotoxy(5,15+i);cout<<diaria[i].nomcli;
gotoxy(48,15+i);cout<<diaria[i].temcli;}
getch();
}
EJ ECUCION


163
Ing. Ricardo Castaeda


PROGRAMACION ORIENTADA A OBJETOS
2013
EJ ERCICIOS PROPUESTOS
1. Se desea realizar un mantenimiento de registros de los alumnos de COMPUTACION I, para esto vamos a
utilizar la siguiente estructura:
struct alumno{ int cdigo;
char nombre [40];
int exampar; //Examen Parcial
int examfin; //Examen Final
float pp; }; // Promedio de Practicas
En el mantenimiento considere:
a) Adicionar Registros
b) Eliminar Registros.
c) Modificar Registros.
2. Se desea escribir un programa que procese el examen sustitutorio de n alumnos, considerar el registro.
struct notas
{ char codalu [10]; // Cdigo del alumno
char codcur [7]; // Cdigo del curso
float pp ; // Promedio de practicas
int ep ; // Examen parcial
int ef ; // Examen final
int es ; // Examen sustitutorio
float pf ; } // Promedio final
para hallar el promedio final (pf) debe considerarse lo siguiente:
a. Si no se ha rendido un examen (ep,ef) la nota que figura es 99(OJO).
b. El promedio final se halla
4
* 2 ef ep pp
pf


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.
3. Se desea escribir un programa que procese la planilla de n trabajadores, considerar el registro dado.
struct empleado
{ int codemp; // Cdigo del empleado
char nomemp [40]; // Nombre del empleado
float sb ; // Sueldo Bruto
int diasf; // Das 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 da falto.
50% de bonificacin por cada hora extra.

164
Ing.Ricardo Castaeda


FACULTAD DE INGENIERIA MECANICA
2013

























CAPITULO VIII






















165
Ing. Ricardo Castaeda


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

PROBLEMA



ABSTRACCION

MODELO

Figura 8.1
El modelo define una perspectiva abstracta del problema. Esto implica que el modelo se enfoca solamente
en aspectos relacionados con el problema y que t tratas de definir propiedades del problema. Estas
propiedades incluyen
Los datos que son afectados
Las operaciones que son identificadas por el problema.
Vamos a plantear un caso, deseamos manejar los alumnos de un instituto. Que informacin es
necesaria, que funciones necesitamos que trabajen: Algunas propiedades serian
DNI
Nombre

166
Ing.Ricardo Castaeda


FACULTAD DE INGENIERIA MECANICA
2013
Fecha de nacimiento,
Talla
Domicilio,
Color de ojos
Telfono
pero nosotros nos abstraeremos y tomaremos solo las propiedades necesarias para resolver el problema.
Este modelo solo implica propiedades que son necesarias para cumplir con los requerimientos de la
aplicacin, por ejemplo el nombre, fecha de nacimiento y el DNI. A estas propiedades se les llama los datos
del modelo ( alumno). Ahora ya se tienen descritas a los alumnos reales por medio de un alumno abstracto.
Definiremos algunas operaciones para manejar los alumnos:
Matricula de un alumno nuevo.
Evaluacin del alumno en un curso.
Para resumir, la abstraccin es la estructuracin de un problema en entidades bien definidas por medio de
la definicin de sus datos y operaciones. Entonces, estas entidades combinan datos y operaciones. No
estn desacoplados unos de otras.
Propiedades de los Tipos de Datos Abstractos
El ejemplo de la seccin anterior muestra que por medio de la abstraccin t creas una entidad bien definida
que puede ser adecuadamente manejada. Estas entidades definen la estructura de datos de un conjunto de
elementos. Por ejemplo para cada alumno del Instituto un nombre, fecha de nacimiento y DNI.
La estructura de los datos puede ser accesada solamente por medio de operaciones definidas. Este
conjunto de operaciones es llamada interface y es exportada por la entidad. Una entidad con las
propiedades recin descritas se conoce como un tipo de datos abstracto (TDA).






Figura 8.2 Un tipo de datos abstracto (TDA)
La Figura 8.2 muestra un TDA que consiste en una estructura de datos abstracta y operaciones. Solamente
las operaciones son visibles desde afuera y definen la interface.
Definicin (Tipo de Datos Abstracto) Un tipo de datos abstracto (TDA) se caracteriza por que tiene dos
elementos diferenciados:
La interfaz de utilizacin.
La representacin
La representacin debe permanecer oculta y solo utilizaremos sus operaciones para trabajar con los
elementos.
Para construir un tipo abstracto debemos:
1. Exponer una definicin de tipo.
2.Definir las operaciones (funciones) que permitan operar con instancias de ese tipo.
3.Ocultar la representacin de los elementos del tipo de modo que solo se pueda actuar sobre ellos con las
operaciones proporcionadas..
TIPO DE DATOS ABSTRACTO
ESTRUCTURA DE DATOS
OPERACIONES CON EL TDA

167
Ing. Ricardo Castaeda


PROGRAMACION ORIENTADA A OBJETOS
2013
4. Poder hacer instancias mltiples del tipo..
Tipos bsicos de operaciones en un TDA.
Las operaciones bsicas que deberamos tener pueden ser:
Constructores: Crean una nueva instancia del tipo.
Transformacin: Cambian el valor de uno o ms elementos de una instancia del tipo.
Observacin: Accesamos sin modificarlos.
Iteradores: Procesa componentes en forma secuencial.
Tipos Genricos de Datos Abstractos
Los TDAs se usan para definir un nuevo tipo a partir del cual se pueden crear instancias. Como se mostr
en el ejemplo de la lista, algunas veces estas instancias deberan operar del mismo modo sobre otros tipos
de datos. Por ejemplo, uno puede pensar en listas de manzanas, carros o an listas. La definicin
semntica de una lista siempre es la misma. Solamente el tipo de los elementos de datos cambia de
acuerdo al tipo sobre el cul deba operar la lista..
Esta informacin adicional podra ser especificada por un parmetro genrico que es especificado al
momento de la creacin de la instancia. As, una instancia de un TDA genrico es en la prctica una
instancia de una variante particular del TDA. Una lista de manzanas puede ser declarada como sigue :
List<Apple> listOfApples;
Los corchetes angulares encierran ahora el tipo de datos para el cul una variante del TDA genrico List
sera creada. listOfApples ofrece la misma interface que cualquiera otra lista, pero opera en el tipo Apple.
Conceptos de Orientacin a Objetos
Las secciones anteriores introducen ya algunos conceptos "de orientacin a objetos". Sin embargo, stos
fueron aplicados de una manera terica, ahora pasemos ya a visualizar las caractersticas del C++ y les
damos nombres tal y como se usan en los lenguajes de programacin orientada a objetos existentes.
Las caractersticas de C++ como lenguaje orientado a objetos son:
o Abstraccin
Variables de instancia
Mtodos de instancia
Variables de clase
Mtodos de clase
o Encapsulacin
De variables: privada, pblica y protegida.
De mtodos: privada, pblica y protegida
o Herencia
Sencilla y mltiple
Unidades genricas
Polimorfismo
Teniendo en cuenta los conceptos de herencia y Polimorfismo tenemos todo el panorama de la
programacin orientada a objetos. La comunicacin entre objetos es por medios de mensajes que viene a
ser la forma de invocar a un objeto. Hemos dicho que un objeto tiene caractersticas llamadas atributos y
procedimientos llamados mtodos. Los mensajes tienen un mtodo (procedimiento) que se ejecutara
cuando es invocado.

168
Ing.Ricardo Castaeda


FACULTAD DE INGENIERIA MECANICA
2013
Mensaje (Se Invoca Mtodo)


Objeto Emisor Objeto Receptor




Resultado De La Ejecucin Del Mtodo
Figura 8.3
8.2 Clases.- Un programa utiliza un grupo de objetos y estos objetos se crean utilizando un tipo de dato
denominado clase. Podemos decir que la clase es un registro (struct) evolucionado que ha encapsulado los
datos y las funciones incorporndoles adems niveles de visibilidad. En la clase los datos son las
propiedades de la entidad que este representa y las funciones son las tareas representativas de la entidad.
De esta manera las clases representan las entidades del mundo real de una manera ms precisas que los
registros. Adems las clases tienen dos caractersticas que la hacen elementos muy eficientes en la
programacin, estas son:
Herencia
Polimorfismo
8.3 Objeto.- Son las instancias de una clase, pues esta es la plantilla que nos permite crear los objetos de
acuerdo a la declaracin de clase.
Ejemplo:
Dada la siguiente declaracin de clase:
class rectangulo
{ private:
int largo;
int ancho;
public:
void 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_ rea( )
{ int A;
A = largo * ancho;
return ( A);} };






169
Ing. Ricardo Castaeda


PROGRAMACION ORIENTADA A OBJETOS
2013
Representacin Grfica
Clase Rectngulo

Largo
Ancho Datos




Mtodos





Figura 8.4
Posteriormente nosotros podemos declarar un objeto de la clase rectngulo de la siguiente manera:
rectngulo R1;
Esto significa que R1 tendr 4 componentes
R1.largo dato miembro de tipo entero.
R1.ancho dato miembro de tipo entero
R1.set_largo(int l) funcin miembro que nos permite asignar un valor a un dato miembro.
R1.set_ancho(int a) funcin miembro que nos permite asignar un valor a un dato miembro.
R1.get_largo( ) funcin miembro que nos permite devolver valor de dato miembro
R1.get_ancho( ) funcin miembro que nos permite devolver valor de dato miembro
R1.calcular_area( ) funcin miembro que calcula el rea y devuelve el valor.
PROGRAMA
/* CODIGO: POOC8E1
FECHA: 21 DE MARZO DE 2013
OBJETIVO: Desarrollar un ejemplo bsico de POO */
#include<iostream.h>
#include<conio.h>
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 calcular_area( )
Set_largo
Calcular _area
Set_ancho

170
Ing.Ricardo Castaeda


FACULTAD DE INGENIERIA MECANICA
2013
{int A;
A = largo * ancho;
return ( A); }
};
void main()
{ int L,A;
rectangulo r1;
clrscr();
cout<<"Ingrese largo: ";cin>>L;
cout<<"Ingrese ancho: ";cin>>A;
r1.set_largo(L);
r1.set_ancho(A);
cout<<"El rea es : "<<r1.calcular_area();
getch(); }
EJ ECUCION

8.4 Herencia: Caracterstica mediante la cual podemos reutilizar una declaracin de una clase y crear otra clase.
Por ejemplo:
Creamos la clase estudiante.a clase estudiante_universitario hereda de la clase estudiante y adiciona.
La clase estudiante_universitario_uni hereda de la anterior y tambin adiciona.Ver ejemplo 4.
8.5 Polimorfismo: Caracterstica que nos permite crear funciones que utilizando un mismo nombre respondern
de forma diferente de acuerdo a la clase a la cual pertenecen. Por ejemplo: Dada la siguiente declaracin de
claseen el ejemplo 2:
PROGRAMA
/* CODIGO: POOC8E2
FECHA: 21 DE MARZO DE 2013
OBJETIVO: Desarrollar un ejemplo bsico de POO */
#include<iostream.h>
#include<conio.h>
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( )

171
Ing. Ricardo Castaeda


PROGRAMACION ORIENTADA A OBJETOS
2013
{ return(largo);}
int get_ancho( )
{ return(ancho);}
int area( )
{ int A;
A = largo * ancho;
return ( A); }
};
class cuadrado
{ private:
int lado;
public:
void set_lado( int l)
{ lado = l;}
int get_lado( )
{ return(lado);}
int area( )
{ int A;
A = lado * lado;
return ( A);
} };
void main( )
{ rectangulo R1;
cuadrado C1;
R1.set_largo( 5);
R1.set_ancho( 4);
C1.set_lado(4);
clrscr();
cout << R1.area( )<<endl;
cout << C1.area( )<<endl;
getch(); }
EJ ECUCION

Ventajas de la programacin orientada a objetos.- Son las siguientes:
Facilidad de Mantenimiento: Los programas son ms fciles de leer y de entender.
Facilidad de modificacin: Se pueden modificar los objetos al modificar rpidamente la herencia.
Reusabilidad: Se pueden utilizar varias veces.
Fiabilidad: Se utilizan modelos ya comprobados.

172
Ing.Ricardo Castaeda


FACULTAD DE INGENIERIA MECANICA
2013
PROBLEMAS
1.- Desarrollar 3 programas de aplicacin para ver la evolucin desde la primera etapa de registro (struct) hasta el
objeto. Los programas son:
A) Programa con registros lee 2 notas y calcula el promedio con una funcin externa al registro.
B) Programa con registros lee 2 notas y calcula el promedio con una componente funcin.
C) Programa con objetos lee 2 notas y calcula el promedio con una funcin miembro.
PROGRAMA(A)
/* CODIGO: POOC8PROB1A
FECHA: 21 DE MARZO DE 2013
OBJETIVO: Primer programa ejemplo de una estructura clsica*/
#include<iostream.h>
#include<conio.h>
struct notas
{ float nota1;
float nota2; };
float calcula_prom (float p1, float p2);
void main ( )
{notas n;
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); }
EJ ECUCION

PROGRAMA(B)
/* CODIGO: POOC8PROB1B
FECHA: 21 DE MARZO DE 2013
OBJETIVO: Segundo programa ejemplo tenemos la estructura pero ya tenemos una componente funcin miembro de la estructura y por lo
tanto ya tiende a una clase*/
#include <iostream.h>
#include<conio.h>
struct notas
{ float nota1;
float nota2;

173
Ing. Ricardo Castaeda


PROGRAMACION ORIENTADA A OBJETOS
2013
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( );
}
EJ ECUCION

PROGRAMA(C)
/* CODIGO: POOC8PROB1C
FECHA: 21 DE MARZO DE 2013
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 set_nota1(float n1)
{ nota1 = n1; }
void set_nota2(float n2)
{ nota2 = n2; }
float calcula_prom ( )
{ return( (nota1 + nota2) / 2.0); }
};
void main ( )
{ float a1, a2;
notas n;
clrscr( );
cout << "ingrese 1ra. Nota => "; cin >> a1;
cout << "ingrese 2da. Nota => "; cin >> a2;
n.set_nota1( a1);

174
Ing.Ricardo Castaeda


FACULTAD DE INGENIERIA MECANICA
2013
n.set_nota2( a2);
cout << " El promedio es = " << n.calcula_prom ( );
getch( ); }
EJ ECUCION

2.- Escriba un programa que defina la clase cuadrado y cubo adems debe calcular el rea del cuadrado, el rea del
cubo y el volumen.
SOLUCIN
PROGRAMA
/* CODIGO: POOC8PROB2
FECHA: 21 DE MARZO DE 2013
OBJETIVO: Programa que define la clase cuadrado y cubo, calculando el rea del cuadrado, el rea del cubo y el volumen. */
#include <iostream.h>
#include<conio.h>
class cuadrado
{ private:
int lado;
public:
void set_lado( int l )
{ lado = l; }
int area( )
{ int A;
A = lado * lado;
return ( A); } };
class cubo
{ private:
int lado;
public:
void set_lado( int l )
{ lado = l; }
int area( )
{ int A;
A = 6*lado * lado;
return ( A); }
int volumen( )
{ int A;
A = lado*lado * lado;
return ( A); } };
void main( )

175
Ing. Ricardo Castaeda


PROGRAMACION ORIENTADA A OBJETOS
2013
{ cuadrado C1;
cubo C2;
int LADO;
clrscr();
cout<< "Ingrese Lado del cuadrado: ";
cin>> LADO;
C1.set_lado(LADO);
cout<< "Ingrese Lado del Cubo: ";
cin>> LADO;
C2.set_lado(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(); }
EJ ECUCION

EJ ERCICIOS PROPUESTOS
1) Escribir un programa que me permita crear la clase persona, considerando, dni,nombre, fecha de nacimiento ,
distrito donde vive y telfono. El programa debe crear la clase y declarando objetos de esta clase ingreasr
datos y despus mostrarlos.
2) Escribir un programa que considere la clase anterior y declare un vector de objetos de esa clase, adems
debe poder consultar este vector de objetos y listar los dni y nombres que viven en un determinado distrito.
3) Se tiene la clase empleado con cdigo, sueldo, nombre y categora, escribir las declaraciones de datos
miembros y crear las funciones miembro, de lectura, mostrar_datos y asignacin de sueldos, esta ultima debe
realizarse de la siguiente manera:
Categora A sueldo de 4500 mensual
Categora B sueldo de 4000 mensual
Categora C sueldo de 3000 mensual
Categora D sueldo de 2000 mensual
4) Escriba un programa que trabaje con la clase anterior pero con vectores de objetos y que visualize todos los
empledaos por categora..
5) Escriba un programa que me permita ingresar varios cursos creando la clase curso y finalmente me entrege
un listado. La clase curso debe considerar cdigo, nombre, costo y duracin en horas.



176
Ing.Ricardo Castaeda


FACULTAD DE INGENIERIA MECANICA
2013

















CAPITULO IX


















177
Ing. Ricardo Castaeda


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















9.1.2 Funciones miembro.- Las funciones miembro con componentes de una clase y normalmente se
definen dentro de la clase como funciones de lnea(inline). Pero tambin podemos definir el cuerpo de
la funcin fuera de la clase. El mbito de una funcin se debe indicar por el operador mbito (:: ) con el
nombre de la clase. Ej:
PROGRAMA
/* CODIGO: POOC9E1
FECHA: 21 DE MARZO DE 2013
OBJETIVO: Programa de funciones que utilizan el operador de ambito */
#include <iostream.h>
#include <conio.h>
class nota
{ private:
int practica1;
int practica2;
public:
void set_practica1( int p1);
void set_practica2( int p2);
float promedio( ); };
void nota :: set_practica1( int p1) { practica1 = p1;}
void nota :: set_practica2( int p2) { practica2 = p2;}
float nota :: promedio(void)
{ return ((practica1+practica2)/2.0); }
class nombre_clase
{











}























};
















private:
datos miembro
funciones miembro
..
protected:
datos miembro protegidos
funciones miembro protegidos
..
public:
datos miembro publicos
funciones miembro publicos


178
Ing.Ricardo Castaeda


FACULTAD DE INGENIERIA MECANICA
2013
void main ( )
{ int prac1, prac2;
nota practicas;
clrscr( );
cout<< "Primera practica: "; cin >>prac1;
cout<< "Segunda practica: "; cin >>prac2;
practicas.set_practica1(prac1);
practicas.set_practica2(prac2);
cout << " El promedio sera = "<< practicas.promedio( );
getch();}
EJ ECUCION

9.2 Constructores y Destructores.- Cuando se menciono a los punteros se dijo que se puede crear
variables apuntadas en forma dinmica (en ejecucin), para crear estas se utiliza el operador new y para
liberarlas el operador delete, en la POO existen mecanismos similares. Cuando se crea un objeto es
llamado un mtodo que se denomina constructor y al terminar (salir) se llama a otro mtodo conocido
como destructor.
9.2.1 Constructor.- Es un mtodo especial que construye objetos. Un constructor es llamado para crear
una instancia de ese objeto asignando espacio a un objeto pude tambin asignar valores a sus miembros
datos. El constructor realiza una inicializacin automtica y no devuelve ningn valor. Tiene el mismo
nombre que la clase con la cual est asociada. Puede tener parmetros como cualquier otra funcin y tener
por lo tanto distintas formas. Si no se define para una clase, el compilador generara un constructor por
defecto.
Ejemplo:
class circulo { private:
int c_x, c_y;
double radio;
public:
// constructor
circulo( int x, int y, double r)
{ radio = r;
c_x = x;
c_y = y; }
};
Tipos de constructores: Los constructores pueden ser:
Constructores sin argumento
Constructores con argumento
Constructores de copia


179
Ing. Ricardo Castaeda


PROGRAMACION ORIENTADA A OBJETOS
2013
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
/* CODIGO: POOC9E2
FECHA: 23 DE MARZO DE 2013
OBJETIVO: Programa que muestra los diferentes tipos de constructores*/
#include <iostream.h>
#include<conio.h>
#include<stdio.h>
#include<string.h>
class nota
{ private : int dato;
public:
nota( ) { } //CONSTRUCTOR SIN ARGUMENTOS
nota(int d )//CONSTRUCTOR CON ARGUMENTOS
{ dato = d; }
nota( nota&y )//CONSTRUCTOR DE COPIA
{ dato = y.dato; }
void set_dato(const int val){dato=val;}
int get_dato() { return dato; }
};
void main()
{ nota d1, d2(5), d3(d2);
d1.set_dato(7);
cout<<"dato1 = "<<d1.get_dato()<<endl;
cout<<"dato2 = "<<d2.get_dato()<<endl;
cout<<"dato3 = "<<d3.get_dato()<<endl;
getch(); }
EJ ECUCION



180
Ing.Ricardo Castaeda


FACULTAD DE INGENIERIA MECANICA
2013
Destructores: Un destructores lo opuesto a un constructor, as como el constructor separa memoria, el
destructor libera esa memoria que fue asignada al objeto por el constructor. El destructor es una funcin
miembro con el mismo nombre que la clase mas una tilde que se aade al principio. Una clase puede poseer
un destructor que no tiene argumentos y no devuelve valores. Ejemplo:
class punto
{ private :
int x;
int y;
public:
punto( )
{
x= 0;
y = 0
}
~punto( )
{ }
};
Ejemplo 3.- De un ejemplo de constructores y de destructores, definiendo la
clase complejo , que tiene componente real y componente imaginaria.
PROGRAMA
/* CODIGO: POOC9E3
FECHA: 23 DE MARZO DE 2013
OBJETIVO: Programa que muestra los diferentes tipos de constructores y el destructor */
#include <iostream.h>
#include<conio.h>
#include<string.h>
class complejo
{ private:
int r, i;
public:
complejo()//constructor sin argumentos
{ r = i = 0; }
complejo(const int re, const int im)//constructor con argumentos
{ r = re;
i = im; }
complejo(const complejo &comp)//constructor de copia
{ r = comp.r;
i = comp.i; }
~complejo() { cout<<"El destructor ha sido llamado"<<endl;getch(); }//destructor
int get_r() { return r; }
int get_i() { return i; }
};
void main()
{complejo c1(5,7);

181
Ing. Ricardo Castaeda


PROGRAMACION ORIENTADA A OBJETOS
2013
complejo c2;
complejo c3(c1);
cout<<"Parte real de c1= "<<c1.get_r()<<endl;
cout<<"Parte imaginaria de c1= "<<c1.get_i()<<endl;
cout<<"Parte real de c2= "<<c2.get_r()<<endl;
cout<<"Parte Imaginaria de c2= "<<c2.get_i()<<endl;
cout<<"Parte Real de c3= "<<c3.get_r()<<endl;
cout<<"Parte Imaginaria de c3= "<<c3.get_i()<<endl;
getch(); }
EJ ECUCION

Constructor new y destructor delete Estos dos operadores tambin construyen y destruyen, que es una
forma de decir tambin reservan y liberan memoria.
El operador new obtiene memoria del sistema operativo, y proporciona un puntero a su punto inicial. Su
sintaxis es: tipo *p ;
p = new tipo;
El operador delete libera memoria reservada con new
Ejemplo 3: Manejo de new y delete
PROGRAMA
/* CODIGO: POOC9E4
FECHA: 23 DE 2013
OBJETIVO: Programa ejemplo de new y delete */
#include <iostream.h>
#include <conio.h>
void main( )
{int *p1, *p2;
p1 = new int;//asigna la direccin de un campo entero a p1 que es puntero
cout << " Ingrese valor = > ";
cin >> (*p1);// almacena un valor en el campo apuntado por p1
p2=p1;//p2 toma la direccin de p1
p1 = new int;
cout << " Ingrese valor = > "; cin >> (*p1);// almacena un valor en el campo apuntado por p1
cout<<(*p1)<<endl;
cout<<(*p2)<<endl;
delete p1;//libera memoria de p1
delete p2;//libera memoria de p2
getch ( );}

182
Ing.Ricardo Castaeda


FACULTAD DE INGENIERIA MECANICA
2013
EJ ECUCION

Analizando el ejemplo que hemos ejecutado:
Primero: podemos ver que el operador new busca un campo o estructura del tipo indicado, en nuestro caso
entero y cuando lo encuentra asigna la direccin al puntero respectivo y despus bloquea el acceso de otra
variable a ese campo,
Segundo: el campo no tiene nombre propio sino que se le llama campo apuntado por, en nuestro caso, p1 y esto
se indica con *p1.
Tercero: El intercambio de informacin puede ser de puntero a puntero (p2=p1) o de campo apuntado a campo
apuntado (*p1) = (p2), sera un error lo siguiente: p1 = *p2.
Cuarto: La forma correcta de liberar a la memoria es delete p1 o delete p2.
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: POOC9PROB1
FECHA: 23 DE MARZO DE 2013
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];

183
Ing. Ricardo Castaeda


PROGRAMACION ORIENTADA A OBJETOS
2013
float hotemp;
float phoemp;
float pagemp;
public:
void set_codemp( int c);
void set_nomemp( char n[40]);
void set_hotemp( float h);
void set_phoemp( float p);
float pago_neto( ); };
void empleado::set_codemp( int c)
{ codemp=c; }
void empleado::set_nomemp( char n[40])
{ strcpy(nomemp,n); }
void empleado::set_hotemp( float h)
{ hotemp=h; }
void empleado::set_phoemp( float p)
{ phoemp=p; }
float empleado::pago_neto( )
{ return ((hotemp*phoemp)*0.89);}//considerando un 11% de descuento
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; emp1.set_codemp(codigo);
cout<<"Ingrese nombre del trabajador --> "; gets(nombre); emp1.set_nomemp(nombre);
cout<<"Ingrese Horas trabajadas --> "; cin>>horas_trabajadas;emp1.set_hotemp( horas_trabajadas);
cout<<"Ingrese Pago por Hora --> "; cin>>pago_hora; emp1.set_phoemp(pago_hora);
sueldo_neto= emp1.pago_neto();
cout<<"Neto a pagar = "<<sueldo_neto;
getch(); }
EJ ECUCION




184
Ing.Ricardo Castaeda


FACULTAD DE INGENIERIA MECANICA
2013
2.- Desarrollar un programa que maneje constructores y destructores de la clase caja que tiene las caractersticas
indicadas.
class caja
{ private:
int alto;
int ancho;
int largo;
public: ..
SOLUCION
PROGRAMA
/* CODIGO: POOC9PROB2
FECHA: 23 DE MARZO DE 2013
OBJETIVO: Programa que maneja constructores de la clase caja. */
#include <iostream.h>
#include <conio.h>
class caja
{ private:
int alto;
int ancho;
int largo;
public:
// constructor
caja ( int al, int an, int l) { alto = al; ancho = an; largo = l; }
// destructor
~caja ( ) { }
// funcin inline
int volumen ( ) { return ( alto*ancho*largo); }
};
void main ( )
{ caja caja1(2,3,4);
caja caja2(5,6,7);
clrscr( );
cout << "El volumen de la primera caja sera => " << caja1.volumen( )<<endl;
cout << "El volumen de la segunda caja sera => " << caja2.volumen( )<<endl;
getch( ); }
EJECUCION




185
Ing. Ricardo Castaeda


PROGRAMACION ORIENTADA A OBJETOS
2013
3.- Desarrollar un programa que trabaje con aritmetica de punteros y maneje polinomios pudiendo desarrollar
operaciones simples con estos polinomios.
SOLUCION
PROGRAMA
/* CODIGO: POOC9PROB3
FECHA: 23 DE MARZO DE 2013
OBJETIVO: Programa que maneja la Aritmtica de punteros*/
#include<iostream.h>
#include<conio.h>
#include<math.h>
void main( )
{ int a[10],b[10],n,i;
float pola,polb,x;
int *p1,*p2;
clrscr( );
cout<<"Ingrese valor n: ";cin>>n;
for(i=1;i<=n;i++)
{ cout<<"Ingrese valor de a["<<i<<"]= ";cin>>a[i];
cout<<"Ingrese valor de b["<<i<<"]= ";cin>>b[i]; }
cout<<"Ingrese x: ";cin>>x;
p1=&a[1];
p2=&b[1];
//hallando polinomios
pola=0;
polb=0;
for(i=1;i<=n;i++)
{ pola=pola+(*p1)*pow(x,n+1-i);
polb=polb+(*p2)*pow(x,n+1-i);
p1++; //en aritmtica de punteros se asigna p1++ para
p2++; } //suma 1 CAMPO!! al puntero no una unidad
cout<<pola<<endl;
cout<<polb<<endl;
cout<<pola+polb;
getch(); }
EJECUCION


186
Ing.Ricardo Castaeda


FACULTAD DE INGENIERIA MECANICA
2013













CAPITULO X






















187
Ing. Ricardo Castaeda


PROGRAMACION ORIENTADA A OBJETOS
2013
10. CLASES DERIVADAS
10.1. Definicin.- La forma sintctica para indicar que una clase es derivada de otra clase existente ser:
class nombre_clase: [(public| private)] clase_base
{
declaraciones de miembros

};
La palabra reservada class puede ser sustituida por la palabra reservada struct, con la implicacin de que
los miembros son pblicos por defecto.
Una de las dos palabras, public y private, en la clase derivada son opcionales, para especificar como los
miembros de la clase base tienen que ser accesibles a la clase derivada:
10.2. 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 set_nombre (char n[30])
{ strcpy (nombre, n); }
void set_dni ( char d[9])
{ strcpy (dni, d); }
char* get_nombre ( )
{ return(nombre);}
char* get_dni ( )
{ return(dni);}
};
class empleado : public persona // CLASE DERIVADA
{ private:
int codigo;
float sueldo;
public:
void set_codigo( int c)
{ codigo = c; }
void set_sueldo(float s)
{ sueldo = s; }
int get_codigo()
{ return (cdigo);}
float get_sueldo { return(sueldo);}
};

188
Ing.Ricardo Castaeda


FACULTAD DE INGENIERIA MECANICA
2013
10.3. Herencia mltiple.- Este concepto nos indica que una clase puede derivarse de ms de una clase,
un ejemplo es el siguiente:
class base1
{ protected:
int dato1;
public:
void set_dato1 (int d1)
{ dato1 = d1; }
};
class base2
{ private:
int dato2;
public:
void set_dato2 (int d2)
{ dato2 = d2; }
int get_dato2 ( )
{ return(dato2); }
};
class derivada12 : public base1, private base2
{ public:
void imprimir ( )
{ cout << b1<<get_dato2( ); }
};
10.4. Funciones amigas (friend)
Sabemos que a un dato privado se puede acceder desde la misma clase o desde una funcin amiga. El
concepto de funcin amiga se refiere a una funcin que no es miembro de esa clase, pero que necesita
acceder a los miembros privados de una clase. Estas se declaran colocando su prototipo en la clase que
son amigas, indicando esto don la palabra reservada friend.
class empleado
{ private:
int code;
char nombre[40];
float sueldo;
public:
friend void planilla (empleado e1, int valor); };
void planilla (empleado e1, int valor)
{ e1.code =.....;
e1.sueldo; }
10.5. Funciones virtuales.- Esta caracterstica permite a una funcin estar definida en una clase base y
su clase derivada bajo el mismo nombre.
La declaracin de virtual solo debe hacerse en la clase base, la funcin ser llamada de acuerdo al objeto al
cual est asociada.

189
Ing. Ricardo Castaeda


PROGRAMACION ORIENTADA A OBJETOS
2013
class cuadrado
{ protected:
int lado;
public:
virtual int rea ( )
{ return (lado * lado); }
};
class cubo: public cuadrado
{ public:
int rea ( )
{ return ( 6 * lado * lado); } };
PROBLEMAS
1.- Construya un programa orientado a objetos que utilice la clase base persona, con su datos miembro nombre y
DNI, adems de considerar las funciones miembro asignar y mostrar; derivada de esta clase se manejara la clase
empleado que aade datos miembro cdigo y sueldo, y redefina las funciones de la clase base.
SOLUCION
PROGRAMA
/* CODIGO: POOC10PROB1
FECHA: 24 DE MARZO DE 2013
OBJETIVO: Programa que declara la clase empleado que es derivada de la clase base persona*/
#include<iostream.h>
#include<conio.h>
#include<string.h>
#include<stdio.h>
class persona // CLASE BASE
{ protected:
char nombre[30];
char dni[9];
public:
void set_nombre (char n[30])
{ strcpy (nombre, n); }
void set_dni ( char d[9])
{ strcpy (dni, d); }
char* get_nombre ( )
{ return(nombre);}
char* get_dni ( )
{ return(dni);} };
class empleado : public persona // CLASE DERIVADA
{ private:
int codigo;
float sueldo;
public:
void set_codigo( int c)

190
Ing.Ricardo Castaeda


FACULTAD DE INGENIERIA MECANICA
2013
{ codigo = c; }
void set_sueldo(float s)
{ sueldo = s; }
int get_codigo()
{ return (codigo);}
float get_sueldo( ) {return(sueldo);} };
void main ( )
{ persona p1;
empleado e1;
char name[30];
char di[9];
int code;
float sb;
clrscr( );
cout << " Ingrese Nombre => "; gets(name);
cout << " Ingrese DNI => "; cin >> di;
p1.set_nombre( name);
p1.set_dni( di);
cout << " Ingrese Nombre => "; gets(name);
cout << " Ingrese DNI => "; cin >> di;
cout << " Ingrese Codigo => "; cin >> code;
cout << " Ingrese sueldo bruto => "; cin >> sb;
e1.set_nombre( name);
e1.set_dni( di);
e1.set_codigo( code);
e1.set_sueldo( sb);
cout<<"Nombre: "<< p1.get_nombre( )<<endl;
cout<<"DNI : "<<p1.get_dni( )<<endl;
cout<<"Nombre: "<< e1.get_nombre( )<<endl;
cout<<"DNI : "<<e1.get_dni( )<<endl;
cout<<"Nombre: "<< e1.get_codigo( )<<endl;
cout<<"DNI : "<<e1.get_sueldo( )<<endl;
getch( ); }
EJECUCION


191
Ing. Ricardo Castaeda


PROGRAMACION ORIENTADA A OBJETOS
2013
2.- Escriba un programa que simule un procesamiento de notas con dos sistemas de evaluacin diferentes, el sistema
A : promedio de prcticas = (p1+p2+p3)/3.0. Nota final = (exapar + exafin + propra)/3.0 y el sistema B :
promedio de prcticas = (p1+p2+p3+p4)/4.0; Nota final = (exapar + 2*exafin +2* propra)/5.0.
Use clases derivadas para este fin.
SOLUCION:
PROGRAMA
/* CODIGO: POOC10PROB2
FECHA: 23 DE MARZO DE 2013
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 set_code( char c[10]) { strcpy(code, c); }
void set_name(char n[40]) { strcpy( name,n); }
void set_exapar( int ep) { exapar = ep; }
void set_exafin( int ef) { exafin = ef; }
char* get_codigo( ) { return(code); }
char* get_name( ) { return(name); }
int get_exapar( ) { return(exapar); }
int get_exafin( ) { return(exafin); }
float get_propra( ) { return(propra); }
float get_notafin( ) { return(notafin); }
};
class sistemaA : public notas
{ public:
int p1, p2 , p3;
public :
void calcula_notafin ( )
{ propra = (p1+p2+p3)/3.0;
notafin = (exapar + exafin + propra)/3.0; }
};

192
Ing.Ricardo Castaeda


FACULTAD DE INGENIERIA MECANICA
2013
class sistemaB : public notas
{ public:
int p1, p2 , p3, p4;
public :
void calcula_notafin ( )
{ propra = (p1+p2+p3+p4)/4.0;
notafin = (exapar + 2*exafin +2* propra)/5.0; }
};
void main ( )
{ char a1[10]; // almacena cdigo
char a2[40]; //almacena nombre
int a3; //almacena examen parcial
int a4; //almacena examen final
char sistema;
sistemaA al1;
sistemaB al2;
clrscr( );
gotoxy(30,3);cout<<"INGRESO DE DATOS";
gotoxy(31,6);
cout<< " CODIGO : "; cin >> a1;
gotoxy(31,8);
cout<< " NOMBRE : "; gets(a2);
gotoxy(31,10);
cout<< " Examen Parcial : "; cin >> a3 ;
gotoxy(31,12);
cout<< " Examen Final : "; cin >> a4;
gotoxy(31,14);
cout<< " Sistema de evaluacin A/B: "; cin >> sistema;
sistema = toupper( sistema);
// calculo de promedio de prcticas y nota final
if ( sistema == 'A')
{ cout << " Practica 1 : "; cin>>al1.p1;
cout << " Practica 2 : "; cin>>al1.p2;
cout << " Practica 3 : "; cin>>al1.p3;
al1.set_code(a1);
al1.set_name(a2);
al1.set_exapar(a3);
al1.set_exafin(a4);
al1.calcula_notafin( );
cout<<Promedio Practicas = << al1.get_propra( )<<endl;
cout<<Nota Final = << al1.get_notafin( )<<endl;getch();}
if ( sistema == 'B')
{ cout << " Practica 1 : "; cin>>al2.p1;

193
Ing. Ricardo Castaeda


PROGRAMACION ORIENTADA A OBJETOS
2013
cout << " Practica 2 : "; cin>>al2.p2;
cout << " Practica 3 : "; cin>>al2.p3;
cout << " Practica 4 : "; cin>>al2.p4;
al2.set_code(a1);
al2.set_name(a2);
al2.set_exapar(a3);
al2.set_exafin(a4);
al2.calcula_notafin( );
cout<<Promedio Practicas = << al2.get_propra( )<<endl;
cout<<Nota Final = << al2.get_notafin( )<<endl;getch();} }
EJECUCION

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

PROGRAMA
/* CODIGO: POOC10PROB3
FECHA: 23 DE MARZO DE 2013
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:

194
Ing.Ricardo Castaeda


FACULTAD DE INGENIERIA MECANICA
2013
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();
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<<"CODIGO : ";gets(codigo);

195
Ing. Ricardo Castaeda


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


4.- Escribir un programa que maneje el concepto de funciones amigas:
SOLUCION:
PROGRAMA
/* CODIGO: POOC10PROB4
FECHA: 23 DE MARZO DE 2013
OBJETIVO: PROGRAMA QUE TRABAJA CON FUNCIONES AMIGAS */
#include<iostream.h>
#include<conio.h>
#include<string.h>
class empleado
{ private:
char nombre[20];
int codigo;
public :
empleado( char *nomb, int cod) // constructor
{ strcpy (nombre,nomb);
codigo = cod; }
friend void imprime_dat_emp(empleado c); // declaracin de funcin amiga
} ;
void imprime_dat_emp(empleado c)

196
Ing.Ricardo Castaeda


FACULTAD DE INGENIERIA MECANICA
2013
{ cout << "Nombre del cliente : " << c.nombre<< endl;
cout << "Codigo del cliente : " << c.codigo << endl; }
void main ( )
{clrscr( );
empleado Perez ("Juan Perez", 1111);
imprime_dat_emp(Perez);
empleado Rosas ("Nstor Rosas", 2222);
imprime_dat_emp(Rosas);
getch( ); }
EJECUCION
































197
Ing. Ricardo Castaeda


PROGRAMACION ORIENTADA A OBJETOS
2013





















CAPITULO XI


















198
Ing.Ricardo Castaeda


FACULTAD DE INGENIERIA MECANICA
2013
11. POLIMORFISMO Es la capacidad de los objetos de responder de manera diferente a las mismas ordenes,
dependiendo a la clase a la cual pertenecen. El Polimorfismo se implementa de dos maneras:
Va funciones virtuales
Por sobrecarga.
11.1. VIA FUNCIONES VIRTUALES El concepto de funcin virtual ya lo vimos anteriormente, veamos
ahora un ejemplo
Ejemplo:
/ * Ejemplo de Polimorfismo con funciones virtuales * /
# include<iostream.h>
# include<conio.h>
class figura
{ protected:
float par1;
public:
void asignar ( float p1)
{
par1 = p1;
}
virtual float area( )
{ return (0);}
};
class circulo : public figura
{ public:
virtual float area( )
{ return (3.1416*par1*par1);}
};
class cuadrado : public figura
{ public:
virtual float area( )
{ return (par1*par1);} };
11.2. SOBRECARGA DE OPERADORES Y FUNCIONES
11.2.1. Introduccin.- La sobrecarga de operadores, nos permite definir un operador de diferente
forma, es una forma de realizar el Polimorfismo. La sobrecarga es la tcnica de redefinir un existente para
que trabaje con otro tipo de datos. Como sabemos no podemos crear un operador nuevo pero aquellos
que ya existen podemos sobrecargarlos.
11.2.2. Sobrecarga de Operadores.- Un operador puede ser sobrecargado. Los operadores
sobrecargados cumplen las siguientes propiedades.
Sobrecargados, no cambiaran su nmero de operandos (unitarios o binarios).
Sobrecargados, no cambiaran su prioridad.
No se pueden inventar operadores que no existan en C++.

199
Ing. Ricardo Castaeda


PROGRAMACION ORIENTADA A OBJETOS
2013
La palabra reservada operator.- Para hacer que un operador de C++ acte como un operador definido
por el usuario, se debe utilizar la palabra reservada operator. El formato de sobrecarga es:
Tipo operator <op> ( lista de argumentos)
Los operadores que se pueden sobrecargar son:
Operadores Unarios.





Operadores Binarios.









Operadores De Asignacin









Adems de los operadores: , (coma), new y delete
Ejemplo de sobrecarga.-
#include <iostream.h>
#include <conio.h>
class duplicado
{public:
int x;
duplicado operator++ ()
{ x = x + x; return *this; }
Operador * (Indireccion)
Operador -> (Indireccion)
Operador +
Operador -
Operador ++
Operador --
Operador +
Operador -
Operador *
Operador /
Operador %
Operador <<
Operador >>
Operador &
Operador ^
Operador |
Operador []
Operador ()
Operador =
Operador +=
Operador -=
Operador *=
Operador /=
Operador %=
Operador <<=
Operador >>=
Operador &=
Operador ^=|
Operador |=


200
Ing.Ricardo Castaeda


FACULTAD DE INGENIERIA MECANICA
2013
};
void main () { // (Comprobacin)
duplicado e1 = {5}, e2;
e2 = ++e1; // M.2 uso de operador ++ sobrecargado
cout << "e1 == " << e1.x << endl;
cout << "e2 == " << e2.x << endl;
getch(); }
11.2.3. Sobrecarga de funciones.- Cuando una funcin tiene ms de una definicin decimos que es una
funcin sobrecargada. Sabemos que dos o ms funciones pueden tener el mismo nombre pero para estar
sobrecargadas no deben diferir en el tipo de sus argumentos o el nmero de sus argumentos.
Es muy importante considerar que bastante comn 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(); }


201
Ing. Ricardo Castaeda


PROGRAMACION ORIENTADA A OBJETOS
2013
PROBLEMAS
1.- Construya un programa orientado a objetos desarrolle el polimorfismo utilizando el concepto de funcin virtual.
SOLUCION
PROGRAMA
/* CODIGO: POOC11PROB1
FECHA: 23 DE MARZO DE 2013
OBJETIVO: Ejemplo de Polimorfismo con funciones virtuales */
#include<iostream.h>
#include<conio.h>
class figura
{ protected:
float par1;
public:
void set_par1( 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;
clrscr();
cout<<"Ingrese radio circulo=> "; cin>> a1;
cir1.set_par1(a1);
cout<< " rea = "<< cir1. area()<< endl;
cout<<"Ingrese lado cuadrado=> "; cin>> a1;
cua1.set_par1(a1);
cout<< " Area = "<< cua1. area();
getch(); }
EJECUCION


202
Ing.Ricardo Castaeda


FACULTAD DE INGENIERIA MECANICA
2013
2.- Construya un programa que sobrecargue un operador realizando una operacin para un objeto.
SOLUCION
PROGRAMA
/* CODIGO: POOC11PROB2
FECHA: 23 DE MARZO
OBJETIVO: Sobrecarga de operadores es la facultad que tiene un operador de funcionar de forma diferente segn el tipo de dato con el que
se utilice,es decir, hacer que el operador funcione con los datos que el usuario cree.
En el cuerpo de la funcin habr que poner las operaciones que queramos que realice el operador */
#include<iostream.h>
#include<conio.h>
class clase
{ int x,y;
public:
clase(int x=0,int y=0);
clase operator +(clase &);
void visualizar( );
~clase(){cout<<"\nDestruyendo el Objeto ";}
};
clase ::clase(int m,int n)
{ x=m;y=n;}
clase clase::operator +(clase &obj) //pasa un objeto de tipo clase
{ clase aux;
aux.x=x+obj.x; //x del objeto ms x que pasa
aux.y=y+obj.y;
return(aux); }
void clase::visualizar()
{ cout<<"\nx= "<<x<<' '<<"y= "<<y; }

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

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

203
Ing. Ricardo Castaeda


PROGRAMACION ORIENTADA A OBJETOS
2013
PROGRAMA
/* CODIGO: POOC11PROB3
FECHA: 23 DE MARZO DE 2013
OBJETIVO: Funcin fecha recargada */
#include<iostream.h>
#include<conio.h>
#include<stdio.h>
void fecha(char *fecha);
void fecha(int anno,int mes, int dia);
void main()
{ clrscr();
fecha("20/3/2007");
fecha(07,3,21);
getch(); }
void fecha(char *fecha)
{cout <<"Fecha: "<<fecha<<endl;}
void fecha(int anno,int mes, int dia)
{cout<<"Fecha: "<<dia<<"/"<<mes<<"/"<<anno;}
EJECUCION

4.- Construya un programa que sobrecargue un constructor y que nos permita inicializar un arreglo y otro constructor
que no inicialice
SOLUCION
PROGRAMA
/* CODIGO: POOC11PROB4
FECHA: 23 DE MARZO DE 2013
OBJETIVO: Vamos a trabajar sobrecargando un constructor para permitir que tanto los objetos como los arrays de objetos aparezcan dentro
de un programa, como se sabe es comn inicializar variables que inicializar arrays, de modo que para admitir arrays de objetos sin inicializar,
junto con objetos inicializados debe incluirse un constructor que permita la inicializacin y otro que no. */
#include<iostream.h>
#include<conio.h>
class base
{ protected:
int j;
public:
base();//sin inicializador
base(int n);//con inicializador
int getx(); };
base::base()
{j=0;}

204
Ing.Ricardo Castaeda


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






















205
Ing. Ricardo Castaeda


PROGRAMACION ORIENTADA A OBJETOS
2013


















CAPITULO XII


















206
Ing.Ricardo Castaeda


FACULTAD DE INGENIERIA MECANICA
2013
FLUJOS Y ARCHIVOS
12. ARCHIVOS.- Sabemos que la nica estructura que permite acceder dispositivos externos de memoria y por lo
tanto posibilita que los datos sobrevivan a los procesos son los archivos, nosotros en este libro veremos los dos
tipos de archivos ms importantes y son:
Archivos de texto (legibles)
Archivos binarios (Poco legibles)
12.1. ARCHIVOS DE TEXTO
Usar streams facilita mucho el acceso a ficheros en disco, veremos que una vez que creemos un stream para un
fichero, podremos trabajar con l igual que lo hacemos con cin o cout.
Mediante las clases ofstream, ifstream y fstream tendremos acceso a todas las funciones de las clases base de las
que se derivan estas: ios, istream, ostream, fstreambase, y como tambin contienen un objeto filebuf, podremos
acceder a las funciones de filebuf y streambuf.
Evidentemente, muchas de estas funciones puede que nunca nos sean de utilidad, pero algunas de ellas se usan con
frecuencia, y facilitan mucho el trabajo con ficheros.
Crear un archivo de salida, abrir un archivo de entrada
Empezaremos con algo sencillo. Vamos a crear un fichero mediante un objeto de la clase ofstream, y posteriormente
lo leeremos mediante un objeto de la clase ifstream:
Ejemplo 1:
//POOC12E1
#include <iostream>
#include <fstream>
int main() {
char cadena[128];
// Crea un fichero de salida
ofstream fs("nombre.txt");
// Enviamos una cadena al fichero de salida:
fs << "Hola, mundo" << endl;
// Cerrar el fichero,
// para luego poder abrirlo para lectura:
fs.close();
// Abre un fichero de entrada
ifstream fe("nombre.txt");
// Leeremos mediante getline, si lo hiciramos
// mediante el operador >> slo leeramos
// parte de la cadena:
fe.getline(cadena, 128);
cout << cadena << endl;
cin.get();
return 0;}
Este sencillo ejemplo crea un fichero de texto y despus visualiza su contenido en pantalla.
Ejemplo 2. Un ejemplo sencillo, para ilustrar algunas limitaciones del operador >> para hacer lecturas, cuando no
queremos perder caracteres.

207
Ing. Ricardo Castaeda


PROGRAMACION ORIENTADA A OBJETOS
2013
Supongamos que llamamos a este programa "streams.cpp", y que pretendemos que se autoimprima en pantalla:
PROGRAMA
//POOC12E2
#include <iostream>
#include <fstream>
using namespace std;
int main() {
char cadena[128];
ifstream fe("streams.cpp");
while(!fe.eof()) {
fe >> cadena;
cout << cadena << endl;
}
fe.close();
cin.get();
return 0;
}
El resultado quiz no sea el esperado. El motivo es que el operador >> interpreta los espacios, tabuladores y retornos
de lnea como separadores, y los elimina de la cadena de entrada.

PROBLEMA 1.- Escribir Un programa que cree un archivo de texto donde se almacene el cdigo y las cuatro notas de
prcticas de 10 alumnos. Escribir tambin el programa que las lea.
PROGRAMA 1
//POOC12E3
#include <iostream.h>
#include <fstream.h>
#include <stdlib.h>
#include <stdio.h>
void main()
{char *nomarch="practicas.txt";
ofstream f01;
int practica[4];
char nombre[10];
f01.open(nomarch);
for(int i=0;i<10;i++)
{ cout << " Ingrese nombre: ";
gets(nombre);
cout<< " Ingrese practica 1: ";cin>>practica[0];
cout<< " Ingrese practica 2: ";cin>>practica[1];
cout<< " Ingrese practica 3: ";cin>>practica[2];
cout<< " Ingrese practica 4: ";cin>>practica[3];
f01 << nombre << ' '
<< practica[0]<<' '

208
Ing.Ricardo Castaeda


FACULTAD DE INGENIERIA MECANICA
2013
<< practica[1]<<' '
<< practica[2]<<' '
<< practica[3]<<endl; }
f01.close(); }
PROGRAMA 2
//POOC12E4
#include <iostream.h>
#include <fstream.h>
#include <stdlib.h>
#include <stdio.h>
#include <conio.h>
void main()
{char *nomarch="practicas.txt";
ifstream f02;
int practica[10][4];
char nombre[10][10];
f02.open(nomarch);
for(int i=0;i<10;i++)
{ f02>>nombre[i];
f02>>practica[i][0];
f02>>practica[i][1];
f02>>practica[i][2];
f02>>practica[i][3]; }
f02.close();
for(int i=0;i<10;i++)
{ cout<<nombre[i]<<' '<<practica[i][0]<<' '<<practica[i][1]<<' '
<<practica[i][2]<<' '<<practica[i][3]<<endl; }
getch(); }
PROBLEMA 2.- Escribir un programa que pueda crear un archivo simple con salida formateada y otro que lea dicho
archivo.
PROGRAMA 1
//POOC12E5
/* Abrir archivo y luego escribir en el archivo */
#include <fstream>
#include <stdlib.h>
#include <iomanip.h>
#include <conio.h>
int main()
{ char nomarch[10]="dato1.txt";
ofstream f03; //salida
//abrir archivo para escritura
f03.open(nomarch);
if (f03.fail()) //verificar si se abrio con xito
{ cerr<<"El archivo "<<nomarch<<" no se puede abrir con xito\n"

209
Ing. Ricardo Castaeda


PROGRAMACION ORIENTADA A OBJETOS
2013
<<" verifique si el archivo en realidad existe\n";
getch();
exit(1); }
//establecer los formatos del flujo de archivo de salida de datos
f03<<setiosflags(ios::fixed)
<<setiosflags(ios::showpoint)
<<setprecision(2);
//enviar datos al archivo
f03<<"CPU "<<600.80<<endl
<<"DISCOD "<<400.00<<endl
<<"TECLADO "<<50.70<<endl
<<"MOUSE "<<15.00<<endl
<<"IMPRESORA "<<300.00;
//cerrar archivo
f03.close();
cout<<"Los datos se guardaron con xito en el archivo: "<<nomarch<<endl;
getch();
return 0;}
PROGRAMA 2
//POOC12E6
/* Abrir un archivo para escritura y luego leer y
desplegar los datos contenidos en el */
#include <fstream>
#include <stdlib.h>
#include <iomanip.h>
#include <conio.h>
int main() //archiv4.cpp
{ char nomarch[10]="dato1.txt";
char descripcion[15];
int ch;
float precio;
ifstream f04;
//abrir archivo para lectura
f04.open(nomarch);
if (f04.fail()) //verificar si se abrio con xito
{ cout<<"El archivo no se puede abrir con xito\n"
<<" verifique si el archivo en realidad existe\n";
getch();
exit(1); }
//establecer los formatos del flujo de archivo de salida de datos
cout<<setiosflags(ios::fixed)
<<setiosflags(ios::showpoint)
<<setprecision(2);

210
Ing.Ricardo Castaeda


FACULTAD DE INGENIERIA MECANICA
2013
//empezar en una nueva lnea
cout<<endl;
//leer y desplegar el contenido del archivo
while ((ch = f04.peek()) != EOF) // verificar el siguiente carcter
{ f04>>descripcion>>precio; //introducir datos al flujo
cout<<descripcion<<' '<<precio<<endl; }
//cerrar archivo
f04.close();
cout<<"\nLos datos se leyeron con xito en el archivo: "<<nomarch<<endl;;
getch(); return 0;}
12.2. ARCHIVOS BINARIOS
12.2.1. Introduccin.- Cuando manejamos sistemas de informacin los datos (archivos) permanecen y los
procesos son los que se ejecutan y desaparecen, esto significa que la informacin existe antes del procesos
y sobrevive a este. El almacenamiento permanente se realiza en discos pticos o magnticos, este captulo
trata del mtodo ms utilizado para estas tareas el manejo de archivos.
12.2.2. Entrada/Salida por archivos.- Para manejar entrada/salida en archivos debemos incluir la clase
fstream que maneja los flujos hacia y desde los archivos al programa. Las clases dedicadas a la gestin de
entrada/salida en disco son fstreambase, ifstream, ofstream y fstream que se derivan por herencia a su vez
de los ios, ostream, istream e iostream.
12.2.3. Apertura y cierre de un archivo.- Para realizar E/S de disco se crea los siguientes objetos:
Para asociar un flujo de salida a un archivo se debe crear un objeto de tipo ofstream (output file stream).
Para asociar un flujo de entrada a un archivo se debe crear un objeto de tipo ifstream (input file stream)
Para realizar tareas de entrada/salida debemos utilizar un objeto de la clase fstream (file stream).
Una vez que se ha creado un flujo con cualquiera de las formas:
ifstream fentra;
ofstream fsal;
fstream fensa;
A continuacin asociamos el flujo al archivo con la funcin open.
El prototipo de la funcin open es:
void open(char *nombrearch, int modo, int acceso);
Donde: nombreach ...... es el nombre del archivo.
modo .................la forma en que se abre el archivo.
acceso ..............como se puede acceder al archivo.
Modos de apertura de archivos








in : Abre el archivo para lectura (entrada)
out : Abre el archivo para escritura (salida)
app : Abre el archivo para escritura, aade al final
binary : Abre el archivo en modo binario
ate : Abre el archivo y toma posicin al final
trunc : Si el archivo existe, destruye su contenido, si no existe, se crea un nuevo archivo
nocreate :Abre un archivo existente. Si el archivo no existe, la apertura falla
noreplace :Si el archivo existe la apertura falla





211
Ing. Ricardo Castaeda


PROGRAMACION ORIENTADA A OBJETOS
2013
Programas bsicos de creacin y lectura de un archivo de nombres
a) // Programa que crea un archivo de nombres llamado nombres.dat en A
//POOC12E7
-#include<iostream.h>
#include<conio.h>
#include<stdio.h>
#include<fstream.h>
void main()
{ ofstream f1;
char nomper[30];
int i,n;
f1.open("C:nombres.dat",ios::out|ios::binary);
clrscr();
cout<< " Ingrese numero de registros a crear => ";
cin >>n;
for(i=1;i<=n;i++)
{ cout<<"Ingrese nombre"<<i<<": ";
gets(nomper);
f1.write(nomper,sizeof(nomper)); }
f1.close(); }
EJECUCION

c) /* POOC12E8
FECHA: 23 DE MARZO DE 2013*/
#include<iostream.h>
#include<conio.h>
#include<stdio.h>
#include<fstream.h>
void main()
{ ifstream f2;
char nomper[30];
f2.open("C:nombres.dat",ios::in|ios::binary);
clrscr();
cout<< " Lista de nombres"<<endl;
cout<< "==============="<<endl<<endl;

212
Ing.Ricardo Castaeda


FACULTAD DE INGENIERIA MECANICA
2013
while(!(f2.eof()))
{ f2.read(nomper,sizeof(nomper));
If(!(f2.eof()))
cout<<nomper<<endl; }
getch();
f2.close(); }
EJECUCION


12.3. Operaciones con archivos.- Sabemos que un archivo es una coleccin de registros y cada registro
es un conjunto de variables con un nombre comn pero con su propio identificador
Las operaciones con archivos son en realidad operaciones sobre sus registros que son las componentes
unitarias de los archivos. Estas son:
Creacin
Eliminacin
Adicin
Modificacin
Consulta
Proceso
El detalle de cada operacin la veremos en los problemas resueltos.
12.4. Archivos binarios con acceso aleatorio.- Si nosotros utilizamos registros como las componentes
naturales de un archivo entonces al tener estos registros una longitud fija podremos realizar operaciones con
acceso aleatorio o directo. Podemos manejar el acceso el acceso directo mediante la funcin seekg( ) que
nos permite acceder al archivo de un modo directo. La funcin seekg() pertenece a la clase ifstream.
Forma General
flujoarch.seekg( desplazamiento, origen)
Donde:
desplazamiento: indica a cuantos bytes (con signo) se desea acceder con respecto al origen
origen: representa un valor predefinido en ios.(Ver tabla)





Constante Significado
ios:: beg Principio del archivo
ios:: cur Posicin actual del archivo
ios:: end Fin del archivo

213
Ing. Ricardo Castaeda


PROGRAMACION ORIENTADA A OBJETOS
2013
Ejemplos:
a) Posicionarse al inicio del archivo alumnos.dat que reside en el disco A.
Solucion: indicaremos las lneas principales del programa
struct regalu
{ char codalu[10];
char nomalu[40];
char diralu[40];
}
fstream f01;
f01.open(A:alumnos.dat,ios::in|ios::out|ios::binary);
f01.seekg(ios::beg)
b) Posicionarse en el segundo registro del archivo anterior:
tamano= sizeof(regalu);
f01.seekg(tamano*(2-1),ios::beg)
c) Posicionarse en el registro anterior al registro actual:
f01.seekg(-tamano,ios::cur);
PROBLEMAS
1.- Construya un programa que nos permita crear un archivo, cuyo registro contenga los siguientes campos:
Registro de almacen:
codalm char[8] ..Codigo del item de almacen
desalm char[40] Descripcin del item de almacen
codpro char[8] Codigo del proveedor del almacen
ubialm char[4] ..Ubicacin del item dentro del almacen ej:A17, D121
nunalm entero Stock del producto(item).
coualm real Costo unitario del tem

SOLUCION

PROGRAMA
/* CODIGO: POOC12PROB1
FECHA: 23 DE MARZO DE 2013
OBJETIVO: Programa crea archivo de almacen */
/* PROGRAMA QUE CREA UN ARCHIVO COMPUESTO DE REGISTROS */
# include<iostream.h>
# include<conio.h>
# include<fstream.h>
# include<stdio.h>
struct almacen
{ char codalm[8] ; // cdigo del tem
char desalm[40] ; // descripcin del tem
char codpro[8] ; // cdigo del proveedor

214
Ing.Ricardo Castaeda


FACULTAD DE INGENIERIA MECANICA
2013
char ubialm [4] ; // ubicacin del tem
int nunalm ; // nmero de unidades del tem
float coualm ; // costo unitario del tem
} ;
void main( )
{ almacen registro ;
int n, i;
ofstream flusal;
clrscr( );
flusal.open( "C:stock.dat", ios :: out | ios:: binary); // Se abre archivo para escritura
cout << " Cuantos registros desea grabar --> " ; cin >> n;
for ( i = 1; i <= n ; i++ )
{ cout << " Ingrese codigo del item "<< i << " : "; gets ( registro.codalm);
cout << " Ingrese descripcion del item "<< i << " : "; gets ( registro.desalm);
cout << " Ingrese codigo del proveedor "<< i << " : "; gets ( registro.codpro);
cout << " Ingrese ubicacion del item "<< i << " : "; gets ( registro.ubialm);
cout << " Ingrese # de unidades del item "<< i << " : "; cin >> registro.nunalm;
cout << " Ingrese costo uni. del item "<< i << " : "; cin >> registro.coualm;
flusal.write( (const unsigned char *) &registro, sizeof(registro)); } // se graba registro
flusal.close ( ); } // se cierra archivo
EJECUCION

2.- Construya un programa que nos permita leer el archivo anteriormente creado.
SOLUCION

215
Ing. Ricardo Castaeda


PROGRAMACION ORIENTADA A OBJETOS
2013
PROGRAMA
/* CODIGO: POOC12PROB2
FECHA: 23 DE MARZO DE 2013
OBJETIVO: Programa lee archivo de almacen */
# include<iostream.h>
# include<conio.h>
# include<fstream.h>
struct almacen
{ char codalm[8] ; // cdigo del tem
char desalm[40] ; // descripcin del tem
char codpro[8] ; // cdigo del proveedor
char ubialm [4] ; // ubicacin del tem
int nunalm ; // nmero de unidades del tem
float coualm ; } ;// costo unitario del tem
void main( )
{ int cont=2;
almacen registro ;
fstream fluent;
clrscr( );
fluent.open( "C:stock.dat", ios :: in | ios:: binary); // Se abre archivo para lectura
gotoxy(2,cont);cout<< "CODIGO DESCRIPCION PROVEEDOR UBICACION #UNIDADES COSTO/UNIT ";
cont=cont+1;
gotoxy(2,cont);cout<< "================================================================";
cont=cont+2;
while ( ! fluent.eof( ) )
{ fluent.read( ( unsigned char *) &registro, sizeof(registro)); // se lee registro
if (!fluent.eof())
{gotoxy(2,cont);cout <<registro.codalm;
gotoxy(10,cont);cout <<registro.desalm ;
gotoxy(30,cont);cout<<registro.codpro;
gotoxy(40,cont);cout<<registro.ubialm ;
gotoxy(50,cont);cout<<registro.nunalm ;
gotoxy(63,cont);cout<<registro.coualm ;
cont=cont+1;} }
getch(); fluent.close ( ); }
EJECUCION


216
Ing.Ricardo Castaeda


FACULTAD DE INGENIERIA MECANICA
2013
3.- Escriba un programa que liste a todos los proveedores de los items de nuestro almacen. Se debe mostrar la
descripcin del producto y el proveedor
PROGRAMA
/* CODIGO: POOC12PROB12
FECHA: 23 DE MARZO DE 2013
OBJETIVO: Lista proveedores de almacen */
# include<iostream.h>
# include<conio.h>
# include<fstream.h>
# include<string.h>
struct almacen
{ char codalm[8] ;
char desalm[40] ;
char codpro[8] ;
char ubialm [4] ;
int nunalm ;
float coualm ; } ;
struct lista
{ char desalm[40] ;
char codpro[8] ; };
void main( )
{ almacen registro ;
fstream fr;
int i,n=0;
lista l[50];
clrscr( );
fr.open( "A:stock.dat", ios :: in | ios:: binary);
gotoxy(4,3);cout<< "CODIGO DESCRIPCION"<<endl;
while ( ! fr.eof( ) )
{fr.read( ( unsigned char *) &registro, sizeof(registro));
if (! fr.eof())
{ n = n +1;
strcpy(l[n].desalm,registro.desalm);
strcpy(l[n].codpro,registro.codpro); }
}
for( i = 1; i <=n; i++)
{ gotoxy(4,i+3);cout <<l[i].codpro;

217
Ing. Ricardo Castaeda


PROGRAMACION ORIENTADA A OBJETOS
2013
gotoxy(14,i+3);cout <<l[i].desalm; }
getch(); fr.close ( ); }

EJECUCION

4.- Escriba un programa que me permita crear y mostrar el archivo de proveedores, el registro debe tener la siguiente
estructura:
Registro proveedor
codpro char[8]Cdigo del proveedor
nompro char[40] .Nombre del proveedor
teluro char[9] ..Telfono del proveedor

Solucion

PROGRAMA
/* CODIGO: POOC12PROB4
FECHA: 22 DE MARZO DE 2013
OBJETIVO: CREA Y MUESTRA ARCHIVO DE PROOVEDORES*/
#include<iostream.h>
#include<conio.h>
#include<fstream.h>
#include<stdio.h>
struct proveedor
{ char codpro[8] ; // cdigo del proveedor
char nompro [40] ; // nombre proveedor
char telpro[9] ; // telfono del proveedor
} ;
void main( )
{proveedor buf ;

218
Ing.Ricardo Castaeda


FACULTAD DE INGENIERIA MECANICA
2013
int n, i;
ofstream flusal;
fstream f1;
clrscr( );
flusal.open( "C:proveedor.dat", ios :: out | ios:: binary);
cout << " Cuantos registros desea grabar => " ; cin >> n;
for ( i = 1; i <= n ; i++ )
{cout << " codigo "<< i << " : "; gets ( buf.codpro);
cout << " nombre "<< i << " : "; gets ( buf.nompro);
cout << " telefono "<< i << " : "; gets ( buf.telpro);
flusal.write( (const unsigned char *) &buf, sizeof(buf));
}
flusal.close ( ); // se cierra archivo
/* Programa que lista los registros de proveedores */
clrscr( );
i=0;
i=i+3;
gotoxy(5,i);cout<<"Codigo";
gotoxy(15,i);cout<<"Nombre";
gotoxy(50,i);cout<<"Telefono";
i=i+1;
gotoxy(5,i);cout<<"=======";
gotoxy(15,i);cout<<"========================================";
gotoxy(50,i);cout<<"========";
i=1+i;
f1.open( "A:proveedor.dat", ios :: in | ios:: binary);
while (! f1.eof( ))
{f1.read( ( unsigned char *) &buf, sizeof(buf));
if (! f1.eof( ))
{i=i+1;
gotoxy(5,i);cout<< buf.codpro;
gotoxy(15,i);cout<< buf.nompro;
gotoxy(50,i);cout<< buf.telpro;
}
}
f1.close ( );
getch();
} // se cierra archivo

EJECUCION

219
Ing. Ricardo Castaeda


PROGRAMACION ORIENTADA A OBJETOS
2013




5.- Escriba un programa que me permita consultar el proveedor de un producto (item) de almacen. Este programa
debe manejar dos archivos que tienen la siguiente estructura:

Registro proveedor
codpro char[8].Cdigo del proveedor
nompro char[40] ..Nombre del proveedor
teluro char[9] Telfono del proveedor

Registro de almacen:
codalm char[8] ..Codigo del item de almacen
desalm char[40] Descripcin del item de almacen
codpro char[8] Codigo del proveedor del almacen
ubialm char[4] .Ubicacin del item dentro del almacen ej:A17, D121
nunalm entero ..Stock del producto(item).
coualm real Costo unitario del tem
PROGRAMA
/* CODIGO: POOC12PROB5
FECHA: 23 DE MARZO DE 2013
OBJETIVO: CONSULTA ITEM DE ALMACEN PARA INDICARME CUAL ES EL PROVEEDOR DEL PRODUCTO*/
#include<iostream.h>
#include<conio.h>

220
Ing.Ricardo Castaeda


FACULTAD DE INGENIERIA MECANICA
2013
#include<fstream.h>
#include<stdio.h>
struct proveedor
{ char codpro[8] ; // cdigo del proveedor
char nompro[40] ; // nombre del proveedor
char telpro[9] ; // telfono del proveedor
} ;
struct almacen
{ char codalm[8] ; // cdigo del tem
char desalm[40] ; // descripcin del tem
char codpro[8] ; // cdigo del proveedor
char ubialm [4] ; // ubicacin del tem
int nunalm ; // nmero de unidades del tem
float coualm ; // costo unitario del tem
} ;
void main( )
{proveedor buf ;
almacen registro;
fstream f1,f2;
char codx[8];
clrscr( );
cout << "Ingrese Codigo del Item: ";
cin >>codx;
f1.open( "C:stock.dat", ios :: in | ios:: binary);
while ( (! f1.eof( )) && strcmp(codx,registro.codalm)!= 0)
f1.read( ( unsigned char *) &registro, sizeof(registro));
if (strcmp(codx,registro.codalm)!= 0)
cout << "Registro no hallado";
else
{ f2.open( "A:proveedor.dat", ios :: in | ios:: binary);
while((!f2.eof())&& strcmp(buf.codpro,registro.codpro)!= 0)
f2.read( ( unsigned char *) &buf, sizeof(buf));
if( strcmp(buf.codpro, registro.codpro)== 0)
{cout<< "CODIGO :"<< buf.codpro<<endl;
cout<< "NOMBRE :"<< buf.nompro<<endl;
cout<< "TELEFONO:"<< buf.telpro<<endl;}
f2.close(); }
f1.close ( );
getch(); // se cierra archivo }



6.- Escriba un programa que liste todos los proveedores de los productos del stock.

221
Ing. Ricardo Castaeda


PROGRAMACION ORIENTADA A OBJETOS
2013
PROGRAMA
/* CODIGO: POOC12PROB6
FECHA: 23 DE MARZO DE 2013
OBJETIVO: Consulta item de almacen para indicarme cual es el proveedor del producto, lista de proveedores */
#include<iostream.h>
#include<conio.h>
#include<fstream.h>
#include<string.h>
struct almacen
{ char codalm[8] ;
char desalm[40] ;
char codpro[8] ;
char ubialm [4] ;
int nunalm ;
float coualm ; } ;
struct lista
{ char desalm[40] ;
char codpro[8] ; };
void main( )
{ almacen registro ;
fstream fr;
int i,n=0;
lista l[50];
clrscr( );
fr.open( "C:stock.dat", ios :: in | ios::binary);
gotoxy(5,3);cout<< " CODIGO DESCRIPCION";
while ( ! fr.eof( ) )
{ fr.read( ( unsigned char *) &registro, sizeof(registro));
if (! fr.eof())
{ n = n +1;
strcpy(l[n].desalm, registro.desalm);
strcpy(l[n].codpro, registro.codpro); }
}
for( i = 1; i <=n; i++)
{ gotoxy(5,4+i);cout << l[i].desalm ;
gotoxy(30,4+i);cout << l[i].codpro ; }
getch();
fr.close ( );
}




222
Ing.Ricardo Castaeda


FACULTAD DE INGENIERIA MECANICA
2013
7.- Escriba un programa que actualice el registro de almacen en cuanto al nmero de unidades, posteriormente usted
actualcelo en precio unitario.
SOLUCION
PROGRAMA
/* CODIGO: POOC12PROB7
FECHA: 23 DE MARZO DE 2013
OBJETIVO: PROGRAMA ACTUALIZA UNIDADES DE UN REGISTRO */
# include<iostream.h>
# include<conio.h>
# include<fstream.h>
# include<string.h>
struct almacen
{ char codalm[8] ;
char desalm[40] ;
char codpro[8] ;
char ubialm [4] ;
int nunalm ;
float coualm ; } ;
void main( )
{ char codx[8];
almacen registro ;
fstream ff;
clrscr( );
ff.open( "C:stock.dat", ios :: in | ios :: out | ios:: binary);
cout<< " Ingrese codigo : ";
cin >>codx;
do
{ ff.read( ( unsigned char *)&registro , sizeof(registro));
} while ( (! ff.eof( )) && strcmp(codx,registro.codalm) !=0 );
if( strcmp(codx,registro.codalm) ==0)
{gotoxy(30,2);cout<<"REGISTRO HALLADO";
gotoxy(25,4);cout <<"Codigo : "<<registro.codalm;
gotoxy(25,5);cout <<"Descripcion : "<<registro.desalm;
gotoxy(25,6);cout <<"Ubicacion : "<<registro.ubialm;
gotoxy(25,7);cout <<"Nro. Unidades: "<<registro.nunalm ;
gotoxy(25,8);cout <<"Nuevo nmero de unidades: "; cin >> registro.nunalm;
ff.seekg (- sizeof(registro), ios::cur);
ff.write( (const unsigned char *)
&registro , sizeof(registro)); }
else
cout << "CODIGO NO HALLADO";
getch(); ff.close ( ); }

Das könnte Ihnen auch gefallen