ESCUELA POLITECNICA DEL EJÉRCITO PROGRAMACION II · 2011-11-21 · - 1 - ESCUELA POLITECNICA DEL...

Post on 13-Mar-2020

20 views 0 download

Transcript of ESCUELA POLITECNICA DEL EJÉRCITO PROGRAMACION II · 2011-11-21 · - 1 - ESCUELA POLITECNICA DEL...

- 1 -

ESCUELA POLITECNICA DEL EJÉRCITO

PROGRAMACION II

NOMBRES: Gabriela Nathaly LLumiquinga Geovanny Patricio Guano

NIVEL: 3 ro

PROFESOR: Ing. Margarita Zambrano

CARRERA: Electrónica y Telecomunicaciones

FECHA:

29-06-2011

- 2 -

INDICE

No TEMA: Pag. OBJETIVOS……………………………………………………………… 03 1 Repaso de algoritmos ……………………………………………… 04 2 Estructuras en C …………..………………………………………... 05 3 Funciones……………………………………………………………. 06 4 Clases….……………………………………………………………… 08

4.1 Objetos……………………………………………………. 08 4.2 Estructura de una Clase ………………………………… 10 4.3 Un arreglo con campo de una clase……………………. 19 4.4 Operaciones entre objetos ……………………………... 22 4.5 Constructores……………………………………………... 28 4.6 Arreglos de Objetos ……………………………………... 31 4.7 Datos y funciones Estaticas……………………………… 40 4.8 Sobrecargar de Operadores……………………………… 45 4.9 Funciones Amigas………………………………………… 61 4.10 Sobrecarga de los operadores cin y cout………………. 65 4.11 Herencia……………………………………………………. 75 4.12 Formato de Entra y Salida……………………………….. 81 4.13 Soluciones a los problemas propuestos……………….. 87

1. Solución 1………………………………………….. 87 2. Solución 2………………………………………….. 88 3. Solución 3………………………………………….. 91 4. Solución 4………………………………………….. 92 5. Solución 5………………………………………….. 107 6. Solución 6………………………………………….. 115 7. Solución 7………………………………………….. 131 8. Solución 8………………………………………….. 137 9. Solución 9………………………………………….. 142

4.14 Ejercicios Tipo Prueba……………………………………. 150 1. Prueba 1.................................................................... 150 2. Prueba 2…………………………………………….. 159

4.15 Conclusiones………………………………………………. 169

- 3 -

OBJETIVOS: Al finalizar este curso estaremos en capacidad de: • Establecer las diferencias entre el concepto de objeto y clase, así como la relación existente entre los mismos. • Analizar situaciones sencillas mediante la identificación de los tipos de objetos que intervienen en ella, las características que tendrán los objetos y los servicios que podrán prestar. • Implementar en C++ una clase sencilla, así como crear una instancia y/ o procedimiento a partir de ella. • Aplicar el concepto de elementos static a la solución de un problema utilizando clases simples. ● Describir los conceptos que caracterizan al modelo de la

programación orientada a objetos.

● Valorar en que medida las técnicas de la programación orientada a objetos favorecen la calidad del software, analizando sobre todo cómo facilitan la reutilización y extensibilidad del código generado. ● Enseñar un lenguaje de programación orientada a objetos, junto a su entorno de programación para resolver diferentes problemas. ● Disponer de técnicas de programación orientada a objetos. ● Presentar ejemplos de aplicación.

- 4 -

REPASO DE ALGORITMOS Fundamentos de la Programacion Para realizar un programa se debe tener en cuenta el impotancia de cómo solucionar los algoritmos básicos.

De un numero Primo Del numero 45

√ (Es el número al cual llega la división) 45/1 ; 45/2 ; 45/3 ; 45/4 ; 45/5 ; 45/6

1. Ingreso el numero 2. Sacar la raíz del numero ingresado 3. Solo cogemos la parte entera 4. Dividir el numero ingresado para un divisor 5. Guardo residuo 6. Si el residuo es igual a 0 cuento 7. Al divisor le aumento 8. Si el residuo es igual a 1 9. El numero es Primo 10. Caso contrario no es primo

Para hallar el MCD Es el máximo común divisor es el número común que divide a los dos numero exactamente. Ejemplo 18 24 2 9 12 3 3 4

1. Ingreso los números. 2. Divide para los dos números para dos 3. Hasta que los dos números sean múltiplos de 2 4. Si no lo es dividimos los dos números para 3 5. Hasta que el resultado es 1 6. O hasta que los dos números dejen de tener un múltiplo común

Separa en cifras un número

1. Ingresamos un número 2. Al número lo dividimos para 10 3. Guardamos el cociente y el residuo 4. Y seguir dividiendo el cociente 5. Hasta cuando el cociente sea 0

Para evaluar si un numero divisible para 3 1531 1+5+3+1=10 10/3 Cociente=3 Residuo=1

- 5 -

1. Ingresar el número 2. Separamos el número en cifras con el algoritmo de dividir para 10 3. Guardamos los residuos 4. Sumamos los residuos 5. El resultado de la suma dividimos para 3 6. Si el nuevo residuo es 0 es múltiplo de 3

ESTRUCTURAS EN C

Definicion.-

Una estructura es un tipo de dato compuesto que permite almacenar un conjunto de datos de diferente tipo. Los datos que contiene una estructura pueden ser de tipo simple (caracteres, números enteros o de coma flotante etc.) o a su vez de tipo compuesto (vectores, estructuras, listas, etc.). A cada uno de los datos o elementos almacenados dentro de una estructura se les denomina miembros de esa estructura y éstos pertenecerán a un tipo de dato determinado. La definición de una estructura en C corresponde con la sintaxis siguiente:

struct [nombre_estructura]{ Tipo de dato miembro 1; Tipo de dato miembro 2;

…………. ………… };

Tenemos los Siguientes ejemplos

Struct fecha { int dia; char mer [ 14]; int año; };

Struct punto { int x; int y; };

Struct rectangulo { struct punto p1; struct punto p2; };

NOTA: Es una palabra reservada en C que indica

que los elementos que están dentro de las llaves

componen de una Estructura

- 6 -

La estructura se define fuera del void main() luego de las bibliotecas Tiene campos en la estructura Las variables se define dentro del void main() Como la estructura es un conjunto de diferentes tipos de datos llamadas

campos a cada uno de estos se accede mediante un punto () Struct complejo {

double x; double y; }; void main() { complejo a ; //a es una variable de tipo complejo por lo tanto tiene los campos x,y printf(“Ingrese la parte racional”) ; scanf (“%d”, & ax); printf (“Ingrese la parte Imaginaria”); scanf(“%d”, &a.y); }

FUNCIONES

En forma general podríamos decir que

Una función es un código independiente del programa principal y su objetos es la realización de una tarea específica.

Para llamar a una función se debe invocar con el nombre acompañados por los parámetros (en el caso que los necesite).

Con el uso de funciones se puede dividir el programa en partes de finalidad concreta.

Las variables es un espacio de almacenamiento para guardar y sacar datos y cuando la funcin deja de utilizar la variable se auto destruyen y asi podemos utilizar las mismas variables en las diferentes funciones.

Ejemplo.-

Ingrese dos números y sume muestre el resultado

Sin Funciones # include <stdio.h>

# include <conio.h>

Int a, b,c;

Void main(){

printf(“Ingrese a”);

- 7 -

scanf(“%d”,&a);

printf(“Ingrese b”);

scanf(“%d”,&b);

c=a+b;

printf(“El resultado es %d:”,c);

}

Con Funciones (para esto ya utilizamos el cin<< Entrada es en el lugar del scanf “Lectura de Datos” y cout>>Salida en lugar del printf “Escritura de datos”que están en la librería # include <iostream.h> )

# include <iostream.h>

# include <conio.h>

Int a, b,c;

Void main(){

cout<<”Ingrese a”<<endl;

cin>>a;

cout<<”Ingrese b”<<endl;

cin>>b;

c=a+b;

cout<<”El resultado es:”<<c <<endl;

}

LISTA SIMPLES.- Una lista enlazada simple es una colección o secuencia de elementos

dispuestos una detrás de otra conectadas entre sí atreves de punteros. Los elementos de

una lista se denominan nodo.

LISTAS CIRCULARES.-La cabeza se encuentra en el último nodo.

- 8 -

CLASES

Es un conjunto de objetos que comparten una estructura y/o comportamientos comunes

Representa una abstracción, esencia que comparten los objetos. Un objeto es un ejemplo de una clase. Un objeto no es una clase y una clase no es un objeto. Tienen datos miembro. Solo las funciones miembro pueden acceder a los datos

miembro(Variables) porque son privados. Private: son los datos privados a estos no puede acceder el programa principal

Public: Son las funciones que existe en el programa.

UN OBJETO

Es algo que ocupa en el espacio, es todo lo tangible, todo lo que podemos ver, un objeto

va a tener características y funciones propias que las diferencian de otro s objetos.

Programación Orientada a Objetos (POO).- Es una forma especial de programar, más

cercana a como expresaríamos las cosas en la vida real que otros tipos de programación.

No es difícil, pero es una manera especial de pensar.

Ejemplo de clases:

Clases sus características y funciones

Materia

CARACTERISTICAS Nombre: Programación 2 Cod: 7565 Descripción: Programar en Lenguaje de C Núm Creditos: 6 FUNCIONES Ingreso Datos; Imprimir Datos;

- 9 -

Librería

CARACTERISTICAS Nombre del libro: Un grito Desesperado Cod: 004 Autor: Carlos Cuauhtémoc Editorial: Ediciones Selectas Dlamante FUNCIONES Ingreso de datos; Imprimii Datos;

Identificación de una persona

CARACTERISTICAS CI: 1722662275 Nombre: Gabriela Apellido: Llumiquinga Telef: 022336564 FUNCIONES Ingreso de datos; Imprimii Datos;

Universidades

CARACTERISTICAS Cod U: 001 Nombre: Espe Ubicación: Sangolqui FUNCIONES Ingreso de datos; Imprimii Datos;

Marca de Ropa

CARACTERISTICAS Descripción: Camiseta Cod: 003 Marca: Adidas Precio: $10.00 FUNCIONES Ingreso de datos; Imprimii Datos;

- 10 -

Electrodomesticos

CARACTERISTICAS FUNCIONES Descripción: Televisión Cod: 003 Marca: Electrolux Precio: $250.00 FUNCIONES Ingreso de datos; Imprimii Datos;

ESTRUCTURA DE UNA CLASE:

Una función que internamente trabaje u opere con objetos devolviese un valor, este será

del mismo tipo de dato que el objeto, o dicho de otra forma del mismo nombre de la clase.

Persona

Declaración de la clase

Class persona {

prívate:

char nombre [10];

long int CI;

int edad;

public:

void ingreso();

void imprimir();

};

// implementación de la clase

void persona :: ingreso(){

cout<< “Ingreso del Nombre”<< endl;

cin>>nombre;

}

- 11 -

Explicación

Creo el objeto persona a, b :

Con Arreglos de Objetos

Ejemplos de Clases

Clase fracción Class fraccion {

prívate:

int numerador;

int denominador;

public:

void ingreso();

void validar();

void simplificar();

fraccion sumar (fraccion a, fracccion b);

fraccion resta (fraccion a, fracccion b);

fraccion multiplicacion (fraccion a, fracccion b);

fracción dividir(fraccion a, fracccion b);

float convertirdecimal();

};

A

Nombre

Ci

Edad

Ingreso ()

Imprimir()

B

Nombre

Ci

Edad

Ingreso ()

Imprimir()

Nombre

Ci

Edad

Ingreso ()

Imprimir()

Nombre

Ci

Edad

Ingreso ()

Imprimir()

Nombre

Ci

Edad

Ingreso ()

Imprimir()

Nombre

Ci

Edad

Ingreso ()

Imprimir()

Nombre

Ci

Edad

Ingreso ()

Imprimir()

Nombre

Ci

Edad

Ingreso ()

Imprimir()

- 12 -

Clase vector 3D Class vector {

prívate:

doublé x,y,z;

public:

void ingreso();

float modulo();

vector suma_vector(vector a, vector b);

float producto_punto (vector a,vector b);

vector producto_cruz (vector a, vector b);

};

Clase alumno Class alumno {

prívate:

char nombre [10];

char apellido [10];

char direccion [20];

char nom_materia [25];

long int CI;

char telefono [9];

char correo [30];

double notas[4];

public:

void ingreso();

void imprimir();

void promedio();

};

Clase Cuadrado Class cuadrado {

double lado;

public:

void ingreso();

void imprimir();

doublé area();

doublé perímetro();

};

NOTA: La palabra reservada private

puede o no ser incluida al inicio de la

declaración de los datos privados de

la clase, pero siempre se debe separar

las funciones públicas de la clase

mediante la palabra reservada public

- 13 -

Triangulo Class triangulo{

prívate:

doublé lado1, lado 2, lado 3;

public:

void ingreso();

void imprimir();

double calcular_area();

double perímetro();

};

Angulo class angulo{

prívate:

int dato;

public:

void ingreso();

void imprimir();

float sen();

float tan();

};

Fecha

class fecha{

prívate:

int dia, mes,anio;

public:

void ingreso();

void imprimir();

fecha calcular_fecha(fecha a, fecha b);

void validar_fecha();

};

Complejo class complejo{

prívate:

doublé imag, entero;

public:

void ingreso();

void imprimir();

complejo sumar(complejo a, complejo b);

complejo restar(complejo a, complejo b);

complejo multiplicar(complejo a, complejo b);

Nota: Si una función que

internamente trabaje u opere con

objetos devolviese un valor, este

será del mismo tipo de dato que el

objeto, o dicho de otra forma del

mismo nombre de la clase.

- 14 -

complejo dividir (complejo a, complejo b);

float convertir_complejo();

};

Primo class primo{

prívate:

int numero;

public:

void ingreso();

void imprimir();

int verificar();

};

Juego class juego{

prívate:

char descripción[20];

char nombre[10];

int puntaje();

int participantes();

public:

void ingreso();

void imprimir();

int jugada();

int tablero_puntuacion();

};

Ejercicio en clase 01:

Realizar la declaración de la clase persona y operar con los datos de unapersona.

CÓDIGO:

#include<stdio.h>

#include<conio.h>

#include<iostream.h>

class persona { //declaración de la clase

private:

char nombre[10];

long int CI;

- 15 -

int edad;

int notas[3];

public:

void ingreso();

void imprimir ();

void ingresonotas();

void imprimirnotas();

};

//implementación de la clase

void persona::ingreso(){

cout<<"\n";

cout<<"Ingrese el nombre: ";

cin>>nombre;

cout<<"Ingrese la CI: ";

cin>>CI;

cout<<"Ingrese la edad: ";

cin>>edad;

}

void persona :: imprimir (){

cout<<endl;

cout<<nombre<<"\n";

cout<<CI<<endl;

cout<<edad<<endl;

}

void persona::ingresonotas(){

cout<<"Ingreso de notas: "<<endl;

for (int i=0;i<3; i++){

- 16 -

cout<<"Ingrese la nota "<<i+1<<endl;

cin>>notas[i];

}

}

void persona::imprimirnotas(){

cout<<"Notas:"<<endl;

for (int o=0; o<3; o++){

cout<<notas[o]<<endl;

}

}

void main (){

persona a,b;

a.ingreso();

a.ingresonotas();

a.imprimir();

a.imprimirnotas();

b.ingreso();

b.ingresonotas();

b.imprimir();

b.imprimirnotas();

}

Ejercicio en clase 02:

Desarrollar un programa para calcular el área y el perímetro de un círculo.

Código:

#include<iostream.h>

#define PI 3.1416

//declaracion de la clase

- 17 -

class circulo{

private:

double radio;

public:

void ingreso();

void imprimir();

float area();

float perimetro();

}; // impletacion de las funciones

void circulo::ingreso(){

cout<<"Ingrese el radio: "<<endl;

cin>> radio;

while(radio<0){

cout<<"\n Error de ingreso.....\n Ingrese nuevamente el radio: ";

cin>>radio; }

}

void circulo::imprimir(){

cout<<"El radio es: "<<radio<<endl;

}

float circulo::area(){

float aux; // variable local

aux= PI*radio*radio;

return (aux);

}

float circulo::perimetro(){

float aux;

aux=2*PI*radio;

- 18 -

return (aux);

} //programa principal

void main () {

float a,b;

circulo obj1;

cout<<"\n\t\t Programa para calcular el erea y perimetro del circulo"<<endl;

obj1.ingreso();

a=obj1.perimetro();

cout<<endl<<" El perimetro es: "<< a;

b=obj1.area();

cout<<endl<<" El area es: "<< b;

}

PROBLEMA PROPUESTO 01:

Desarrollar un programa que permita ingresar por teclado, una cantidad el de en

Grados Centígrados y lo presente convertido en grados Fahrenheit.(Declarar una

clase Temperatura)

PROBLEMA PROPUESTO 02:

Realizar un programa que permita ingresa el valor de los 3 lados de un triangulo y

calcule el área y el perímetro del mismo.

- 19 -

UN ARREGLO COMO CAMPO DE UNA CLASE

Ejercicio en clase 03:

Programa conjuntos el ingreso de 5 elementos hacer el ingreso, imprimir, unión, intersección. CODIGO

#include<iostream.h> #include<conio.h> class conjuntos{ int u[10]; public: void ingreso(); void imprimir(); void copia(conjuntos r,conjuntos s); conjuntos unir ( conjuntos r, conjuntos e); conjuntos interseccion ( conjuntos r, conjuntos s); conjuntos(); }; void conjuntos::ingreso(){ cout<<"\n Ingrese los elementos: "; for (int p=0; p<5;p++){ cout<<"\n Elemento "<<p+1<<": "; cin>>u[p]; } } void conjuntos::imprimir(){ cout<<"\n Conjunto: \n"; cout<<"( "; for (int j=0; j<10; j++){ if (u[j]>=0) cout<< u[j]<<" "; } cout<<")";

- 20 -

} conjuntos::conjuntos(){ for (int i=0; i<10; i++){ u[i]=-1; } } conjuntos conjuntos::interseccion( conjuntos r, conjuntos s){ conjuntos w; for(int i=0; i<5; i++){ for(int o=0; o<5; o++){ if(r.u[i]==s.u[o]){ w.u[i]=r.u[i]; } } } return (w); } conjuntos conjuntos :: unir ( conjuntos r, conjuntos e){ conjuntos w; for(int i=0; i<10; i++){ r.u[i+5]=e.u[i]; } for(int k=0;k<10;k++) { for(int j=k+1;j<10;j++) { if(r.u[k]==r.u[j]) r.u[j]=(-1); } } return (r);

- 21 -

} void main (){ clrscr(); conjuntos a,b, c,d,cop; a.ingreso(); b.ingreso(); clrscr(); cout<<"Los conjuntos"<<endl; a.imprimir(); b.imprimir(); c=c.interseccion(a, b); cout<<"\nLa Interseccion es:"<<endl; c.imprimir(); cout<<"\n La Union de los Conjuntos:"<<endl; d=d.unir(a,b); d.imprimir(); getch(); }

- 22 -

OPERACIONES ENTRE OBJETOS

Se define como la acción mediante la cual dos o más objetos interactúan respecto de

un fin determinado.

Ejercicio en clase 04:

Ejercicio Fracción

CÓDIGO:

#include<iostream.h>

#include<conio.h>

#include<stdio.h>

class fraccion{

int num,den;

public:

void ingresar();

void imprimir();

void validar();

fraccion multiplicar(fraccion a, fraccion b);

fraccion sumar(fraccion a, fraccion b);

fraccion restar(fraccion a, fraccion b);

fraccion dividir(fraccion a, fraccion b);

};

//implementacion de las funciones

void fraccion::validar(){

while(den==0){

cout<<"\n Error,.....Ingrese nuevamente el denominador.\n";

cin>>den;

}

}

void fraccion::ingresar(){

cout<<"\n Ingrese el numerador: ";

cin>>num;

cout<<"\n Ingrese el denominador: ";

cin>>den;

validar();

}

void fraccion::imprimir(){

cout<<"\n La fraccion es: ";

cout<<num<<"/"<<den<<endl;

- 23 -

}

fraccion fraccion::multiplicar( fraccion a, fraccion b){

fraccion aux;

aux.num=a.num*b.num;

aux.den=a.den*b.den;

return(aux);

}

fraccion fraccion::sumar(fraccion a, fraccion b){

fraccion y;

y.den=a.den*b.den;

y.num=(((y.den/a.den)*a.num)+((y.den/b.den)*b.num));

return (y);

}

fraccion fraccion::restar(fraccion a, fraccion b){

fraccion y;

y.den=a.den*b.den;

y.num=(((y.den/a.den)*a.num)-((y.den/b.den)*b.num));

return (y);

}

fraccion fraccion::dividir(fraccion a, fraccion b){

fraccion d;

d.num=a.num*b.den;

d.den=a.den*b.num;

if(d.den<0){

d.den=(-1)*d.den; //hace que si es que el denominador es negativo el signo se presente en

d.num=(-1)*d.num; // frente del numerador

}

return(d);

}

//programa pricipal

void main (){

fraccion obj1, obj2, obj3,u,m,d;

char op;

do{

cout<<"\n\t\t Programa para realizar operaciones entre fracciones.\n";

obj1.ingresar();

obj1.imprimir();

obj2.ingresar();

obj2.imprimir();

cout<<"\n Suma: ";

- 24 -

obj3=obj3.sumar(obj1, obj2);

obj3.imprimir();

getch();

cout<<"\n Resta: ";

u=u.restar(obj1, obj2);

u.imprimir();

getch();

m=m.multiplicar(obj1, obj2);

cout<<"\n Multiplicacion: ";

m.imprimir();

getch();

cout<<"\n Division: ";

d=d.dividir(obj1, obj2);

d.imprimir();

getch();

cout<<"\n Desea seguir operando, presione 'a'. \n Caso contrario cualquier tecla.";

cin>>op;

clrscr();

}while (op=='a' || op=='A');

cout<<"\n\t\t\t\t FIN";

}

PROBLEMA PROPUESTO 03:

El Ejercicio de Fracciones Hecho en clase debemos hacer una función que

simplique las respuesta.

Ejercicio en clase 05:

Ejercicio Distancia La clase Distancia tiene dos campos por separado una llamada metros y el otro Kilómetros realizar el ingreso en Kilómetros o en metros, realizar la suma de dos distancias. Utilizar las funciones leer distancia para ingreso de datos e imprimir distancia para ver distancia.

CÓDIGO:

#include<iostream.h>

#include<conio.h>

- 25 -

class distancia{

double m,k;

public:

int leerdistancia();

void verdistancia(int a);

void validar(double e);

distancia sumar(distancia a, distancia b, int r);

distancia convertir(int t);

};

int distancia::leerdistancia(){

int op, i=0;

do{

cout<<"\n\t\t\t Menu de opciones\n";

cout<<"\n 1.- para distancia en metros.\n";

cout<<"\n 2.- para distancia en kilometros.\n";

cout<<"\n Digite el numero de opcion que desea: \n";

cin>>op;

if (op<3 && op>0){

switch (op){

case 1:

cout<<"\n Ingrese la distancia: ";

cin>>m;

validar(m);

break;

case 2:

cout<<"\n Ingrese la distancia: ";

cin>>k;

validar(k);

break;

}

return (op);

}

else {

cout<<"\n Opcion incorrecta. Vuelva a ingresar los datos.\n";

i++;

getch();

clrscr();

}

}while (i!=0);

}

- 26 -

void distancia::verdistancia(int a){

if (a==1){

cout<<"\n la distania es: ";

cout<<m<< " metros.\n";

}

else if (a==2){

cout<<"\n la distania es: ";

cout<<k<< " kilometros \n";

}

}

void distancia::validar( double e){

if(e<=0 ){

cout<<"\n Los datos ingresados estas incorrectos.........\n Vuelva a ingresar los datos.\n";

getch();

clrscr();

leerdistancia();

}

}

distancia distancia::sumar(distancia a, distancia b,int r){

distancia s;

if( r==1)

s.m=a.m+b.m;

else if (r==2)

s.k=a.k+b.k;

return(s);

}

distancia distancia::convertir(int t){

distancia a;

if (t==1){

a.k=m/(1000);

}

else if (t==2){

a.m=(1000)*k;

}

return (a);

}

void main (){

distancia a,b,c,d;

int e,s;

cout<<"\n\t\t Calcula distancias.\n";

cout<<"\n Distancia 1\n";

- 27 -

e=a.leerdistancia();

a.verdistancia(e);

cout<<"\n Distancia 2\n";

s=b.leerdistancia();

b.verdistancia(s);

getch();

clrscr();

cout<<"\n \t Suma de las distancias: \n";

if (e==1 && s==2){

b=b.convertir(s);

c=c.sumar(a,b,e);

c.verdistancia(e);

c=c.convertir(e);

c.verdistancia(s);

}

else if(e==2 && s==1){

a=a.convertir(e);

c=c.sumar(a,b,s);

c.verdistancia(s);

c=c.convertir(s);

c.verdistancia(e);

}

else if((e==1 && s==1)){

c=c.sumar(a,b,e);

c.verdistancia(e);

c=c.convertir(e);

c.verdistancia(e+1);

}

else if (e==2 && s==2){

c=c.sumar(a,b,e);

c.verdistancia(e);

c=c.convertir(s);

c.verdistancia(s-1);

}

}

- 28 -

CONSTRUCTORES

Son funciones especiales que permiten inicializar un objeto con dato desedo por el

programador.

Características:

Lleva el mismo nombre de la clase. Nunca devuelve valores.

Tipos de constructores:

Constructor con argumentos (recibe datos). Constructor sin argumentos (No recibe datos). Constructor copia (recibe como dato un objeto). Constructor por defecto. (no tiene implementación de función)

Ejercicio en clase 06:

Ejercicio Puntos Permitir el ingreso de las coordenadas de un punto sean estas en polares o rectangulares

CODIGO

# include <conio.h>

# include <iostream.h>

class punto{

double x, y,radio,angulo;

public:

int ingreso();

void imprimir(int a);

punto(); //sin argumentos por que no lleva nada dentro del paréntesis

punto(double a, double b,double j, double r); // constructor con argumentos

punto(punto &c); // constructor copia

};

int punto:: ingreso(){

int opc;

cout<<" Menu \n";

cout<<"1.- Rectangulares\n";

cout<<"2.- Polares \n";

NOTA: Al momento de crear

un objeto el constructor se

llama automáticamente al

constructor SIN

ARGUMENTOS.

- 29 -

cout <<"ingrese la opcion'n";

cin>>opc;

while(opc<1 || opc>2){

cout <<"Error ....\n Ingrese nuevamente la opcion del menu: \n";

cin>>opc;

}

switch(opc){

case 1:

cout<<"Ingrese la coordenada en x\n";

cin>>x;

cout<<"Ingrese la coordenada en y\n";

cin>>y;

break;

case 2:

cout<<"Ingrese el radio \n";

cin>>radio;

cout<<"Ingrese el angulo \n";

cin>>angulo;

break;

}

return (opc);

}

void punto:: imprimir(int a){

if (a==1)

cout<<"("<<x<<","<<y<<")\n";

else

cout<<"radio :"<<radio<<" angulo: "<<angulo<<")\n";

}

//CONSTRUCTOR SIN ARGUMENTOS

punto::punto(){

x=0;

y=0;

radio=0;

angulo=0;

}

//CONSTRUCTOR CON ARGUMENTOS

punto::punto(double a, double b,double j, double r){

x=a;

y=b;

radio=j;

angulo=r;

- 30 -

}

//CONSTRUCTOR COPIA

punto::punto(punto &c ){

x=c.x;

y=c.y;

radio=c.radio;

angulo=c.angulo;

}

void main (){

int w;

punto e,g (5,3,0,0),f(e),h;

e.imprimir(1);

g.imprimir(1);

f.imprimir(1);

w=h.ingreso();

punto z(h);

z.imprimir(w);

punto s(g);

s.imprimir(1);

}

Por ejemplo el objeto El punto e tiene :

PROBLEMA PROPUESTO 04:

Desarrollar un programa que permita ingresar La hora de inicio de una carrera y el tiempo

de finalización de los tres primeros participantes que lleguen a la meta, el programa

deberá elegir al ganador.

E

X

Y

punto();

punto(double a, double b

);

punto( punto h);

ingreso();

imrpimir();

- 31 -

ARREGLO DE OBJETOS Un arreglo de objetos se define como el contenido total de todos los objetos creados para la

ejecución del programa, cada una de estos ubicados en una posición del arreglo.

En el arreglo de objetos el constructor que utilizaremos es sin argumentos

Ejemplo:

Arreglo A

NOTA.-Para el ejemplo siguiente debemos tener muy en claro lo siguiente: Para una cadena de caracteres no necesito un for para recorrer el arreglo. Y

utilizaremos las aplicaciones que nos brinda la biblioteca <string.h> Una cadena de caracteres se coloca el carácter nulo en la última posición Ejm: Char nombre [6]

Nombre Para inicializar una cadena de caracteres con carácter en blanco utilizo Strcpy(nombre,” “);

Nombre

Mientras que para el arreglo de caracteres para recorrerlo si necesito un for ya que no podemos utilizar la biblioteca <string.h> Ejm: Char nombre [5]

Nombre

Ejercicio en clase 06:

Ejercicio de manejo de arreglo de objetos. Algoritmo para validar una cedula

Como validar una cedula de Identidad

Ejm:

1 7 0 4 8 9 2 7 2 6 El Numero que se va a comparar

0 Num Deno Ingreso() Imprimi()

1 Num Deno Ingreso() Imprimi()

2 Num Deno Ingreso() Imprimi()

P A O L A 0\

P A O L A

- 32 -

0 1 2 3 4 5 6 7 8 9

Los números pares del arreglo el contenido lo multiplico por 2 y si el resultado se sobre

pasa de 9 se le resta 9

1*2=2

0*2=0

8*2=16-9=7

2*2=4

2*2=4

Y sumamos los resultados 2+0+7+4+4=17

Los números impares del arreglo el contenido lo multiplico por 1 y si el resultado se

sobre pasa de 9 se le resta 9 menos el ultimo valor ya que ese es el que se compara

7*1=7

4*1=4

9*1=9

7*1=7

La suma 7+4+9+7=27

La suma total de los números impares y pares

17 + 27= 44

El resultado lo restamos de su decena superior 50-44=6

Y si el resultado es igual al último digito de la cedula es porque la CI es válida.

Para esto también necesitamos el algoritmo de descomponer en dígitos.

CÓDIGO:

#include <conio.h>

#include <iostream.h>

#include <string.h>

#include <stdlib.h>

#include<stdio.h>

class estudiante {

long int cedula;

char ci[11];

char nombre [20];

int edad;

double notas [4];

public:

void ingreso();

void imprimir();

void promedio();

estudiante();

1 7 0 4 8 9 2 7 2 6

- 33 -

double validar(double nota);

int validar_cedula(char h[11]);

void validar_edad(int d);

};

void estudiante::validar_edad(int d){

while(d<5 || d>38){

cout<<"\n Ingrese nuevamente la edad del alumno: ";

cin>>edad;

}

}

int estudiante::validar_cedula(char h[11]){

int B[10];

long int a;

if(h[0]==0){

B[0]=0;

a=atol(h);

long int num=a, c;

int i=9, r;

do{

c=num/10;

r=num%10;

num=c;

B[i]=r;

i--;

}while(i>=0);

int acum=0, acum1=0, u, l,h;

for(int o=0; o<9; o+=2){

u=(B[o]*2);

if(u>9){

u=u-9;

}

acum=acum+u;

}

for(int t=1; t<9; t+=2){

acum1=acum1+B[t];

}

l=acum+acum1;

h=(10-(l%10));

if(h==10){

h=0;

}

- 34 -

if(h==B[9]){

return(1);

}

else {

return(0);

}

}

else{

long int num, c;

a=atol(h);

num=a;

int i=9, r;

do{

c=num/10;

r=num%10;

num=c;

B[i]=r;

i--;

}while(c!=0);

int acum=0, acum1=0, u, l,h;

for(int o=0; o<9; o+=2){

u=(B[o]*2);

if(u>9){

u=u-9;

}

acum=acum+u;

}

for(int t=1; t<9; t+=2){

acum1=acum1+B[t];

}

l=acum+acum1;

h=(10-(l%10));

if(h==10){

h=0;

}

if(h==B[9]){

return(1);

}

else{

return(0);

}

- 35 -

}

}

double estudiante::validar(double nota){

while(nota<0 || nota>20){

cout<<"\n Ingrese nuevamente la nota: ";

cin>>nota;

}

return (nota);

}

void estudiante::ingreso(){

cout <<"Ingrese la cedula de identidad: ";

cin>> ci;

while (validar_cedula(ci)==0){

fflush(stdout);

cout<<"\n Ingrese nuevamente la cedula de identidad: ";

cin>>ci;

}

cout <<"\n Ingrese el Nombre: ";

cin>> nombre;

cout <<"\n Ingrese la edad: ";

cin>> edad;

validar_edad(edad);

for (int i=0;i<3;i++){

cout<<"\n Ingrese la nota "<< i+1<<": ";

cin>>notas [i] ;

notas[i]=validar(notas[i]);

}

}

void estudiante:: imprimir(){

cout<<"\n Cedula de identidad: "<<ci;

cout<<"\n Nombre: "<< nombre;

cout<<"\n Edad: "<<edad;

for (int i=0; i<=3;i++){

if(i<=2){

cout<<"\n Nota "<<i+1<<": "<<notas [i];

}

else {

cout<<"\n Promedio: "<<notas[i];

}

}

}

- 36 -

void estudiante :: promedio (){

notas[3]=(notas [0]+notas[1]+notas[2])/3;

}

estudiante::estudiante(){

cedula=0;

strcpy(nombre, " ");

edad=0;

for(int i=0; i<4; i++){

notas[i]=0;

}

}

void main(){

estudiante a [1];

char op;

do{

clrscr();

cout<<"\n\t Programa para el ingreso de datos de alumnos.\n\n";

for (int i=0; i<1; i++){

a[i].ingreso();

a[i].promedio();

}

for (int o=0; o<1; o++){

a[o].imprimir();

}

getch();

cout<<"\n desea continuar presione 'a'.\n Caso contrario cualquier tecla.";

cin>>op;

}while(op=='a' || op=='A');

clrscr();

cout<<"\n \t\t\t FIN DEL PROGRAMA";

}

PROBLEMA PROPUESTO 05:

Al ejercicio anterior sumarle una función validar cedulas repetidas

- 37 -

Taller Programa conjuntos el ingreso de 5 elementos hacer el ingreso, validación, imprimir, unión, intersección. CODIGO

#include<iostream.h> #include<conio.h> class conjuntos{ int u[10]; public: void ingreso(); void imprimir(); void copia(conjuntos r,conjuntos s); conjuntos unir ( conjuntos r, conjuntos e); conjuntos interseccion ( conjuntos r, conjuntos s); conjuntos(); }; void conjuntos::ingreso(){ cout<<"\n Ingrese los elementos: "; for (int p=0; p<5;p++){ cout<<"\n Elemento "<<p+1<<": "; cin>>u[p]; } } void conjuntos::imprimir(){ cout<<"\n Conjunto: \n"; cout<<"( "; for (int j=0; j<10; j++){ if (u[j]>=0) cout<< u[j]<<" "; }

- 38 -

cout<<")"; } conjuntos::conjuntos(){ for (int i=0; i<10; i++){ u[i]=-1; } } conjuntos conjuntos::interseccion( conjuntos r, conjuntos s){ conjuntos w; for(int i=0; i<5; i++){ for(int o=0; o<5; o++){ if(r.u[i]==s.u[o]){ w.u[i]=r.u[i]; } } } return (w); } conjuntos conjuntos :: unir ( conjuntos r, conjuntos e){ conjuntos w; for(int i=0; i<10; i++){ r.u[i+5]=e.u[i]; } for(int k=0;k<10;k++) { for(int j=k+1;j<10;j++) { if(r.u[k]==r.u[j]) r.u[j]=(-1); } } return (r);

- 39 -

} void main (){ clrscr(); conjuntos a,b, c,d,cop; a.ingreso(); b.ingreso(); clrscr(); cout<<"Los conjuntos"<<endl; a.imprimir(); b.imprimir(); c=c.interseccion(a, b); cout<<"\nLa Interseccion es:"<<endl; c.imprimir(); cout<<"\n La Union de los Conjuntos:"<<endl; d=d.unir(a,b); d.imprimir(); getch(); }

- 40 -

DATOS Y FUNCIONES ESTATICOS

Características.- Son datos y funciones que no forman parte del objeto. Pueden ser

utilizados por los objetos de forma global.

Objetivo.- sirve para acumular datos.

NOTA.-

Una función miembro static solo puede acceder a datos miembro static no puede acceder a datos miembro normales.

Una función normal en cambio si se puede acceder a los datos miembro static.

Aquí utilizamos el constructor sobre cargado esto significa que al constructor lo utilizamos para realizar operaciones extras a la inicialización de datos.

Una función static no se llama atreves del objeto por que no es parte del objeto, se lo llama atreves de la clase.

Ejemplo de uso de datos y funciones static

Ejercicio Notas Programa que ingrese el nombre y 3 notas del alumno

CODIGO # include <iostream.h> class nota { double notasc; static int suma_notas; //Datos miembro static static int num_alumnos; //Datos miembro static public: notas (); //Constructor void visualizar(); static void media_notas(){ float media=suma_notas/ num_alumnos; cout<<”Promedio”<<endl; cout.precision(3); cout<<media<<endl;

nota nota()

visualizar() 0

Nota nota()

visualizar() 1

nota nota()

visualizar() 2

nota nota()

visualizar() 3

NOTA: Es la que controla a los

datos static, son funciones en

línea y de preferencia deben

ser public

- 41 -

} };

notas ::notas(){

cout<<”Ingrese la nota :”<<endl;

cin>>notasc;

suma_notas+=notas;

num_alumnos++;

}

void notas:: visualizar(){

cout<<”Notas”<<notas<<endl;

}

int notas:: suma_notas=0;

int notas::num_alumnos=0;

void main(){

int i;

notas alumno[4];

cout<<”Resultado \n”<<endl;

for(i=0; i<4;i++){

alumnos[i].visualizar();

notas::media_notas(); // Asi se llama a la función Static

}

}

Taller:

Ejercicio Promedio de Puntos Realizar un programa que cree un arreglo de objetos de tipo clase punto tiene dos datos miembro x, y, las funciones miembro son escribir el punto el ingreso puede ser en cartesiano o polar con variables estáticas número de puntos , promedio x (saca el promedio de las coordenadas en x). y una desviación estándar (calcula la desviación estándar de todos los puntos). Imprimir la desviación estándar y la media de los puntos de acuerdo a la siguiente ecuación.

NOTA: Se inicializa los datos static

antes del void main

- 42 -

√∑

CODIGO

#include<iostream.h>

#include<conio.h>

#include<math.h>

#define pi 3.1416

class punto{

float y,x;

static float media_x;

static int num;

public:

void imprimir();

void convertir();

punto();

float validar( float a);

static void desviacion(punto a[]){

float media=((media_x))/(num);

float s=0.0, g=0.0;

cout<<" Promedio"<<endl;

cout.precision(3);

cout<<media<<endl;

for(int f=0; f<num; f++){

s=s+(pow((media-a[f].x), 2));

}

g=sqrt((s/(num-1)));

cout<<endl<<"La Desviacion:";

cout<<g;

}

};

float punto::validar(float a){

- 43 -

while(a<=0){

cout<<"\n Dato incorrecto..... Vuelva ha ingresarlo";

cin>>a;

}

return(a);

}

void punto::imprimir(){

cout<<"\n El punto en coordenadas rectangulares es: ";

cout.precision(4);

cout<<"\t("<<x<<","<<y<<")"<<endl;

}

punto::punto(){

int i, op;

do{

i=0;

cout<<"\n\nIngrese 1 para coordenadas rectangulares, o \n 2 para Coordenadas

polares: \n";

cin>>op;

if (op<3 && op>0){

switch(op){

case 1:

cout<<"\n Ingrese la coordenada en x: ";

cin>> x;

cout<<"\n Ingrese la coordenada en y: ";

cin>>y;

break;

case 2:

cout<<"\n Ingrese el radio: ";

cin>> x;

validar(x);

cout<<"\n Ingrese el angulo: ";

cin>>y;

convertir();

break;

}

imprimir();

}

- 44 -

else{

clrscr();

cout<<"\n Opcion incorreta.\n Vuelva ha ingresar su opcion: ";

i++;

getch();

}

}while(i!=0);

num++;

media_x=media_x+x;

}

float punto::media_x=0;

int punto::num=0;

void punto::convertir(){

float t=y*pi/180;

float aux=x;

x=aux*(cos(t));

y=aux*(sin(t));

}

void main (){

clrscr();

punto a[3];

cout<<"\n ";

punto::desviacion( a);

getch();

}

Taller:

Ejercicio Anterior Un Programa que ingrese los datos sea en coordenadas polares o regtangulares validar y convertir.

- 45 -

PROBLEMA PROPUESTO 06:

Se tiene una clase llamada agenda telefónica esta debe permitir ingresar los datos de un

apersona y los números de contacto de la misma se deberá manejar un arreglo de objetos

de [100], además permitirá buscar datos, eliminar datos, imprimir datos, validar para

datos repetidos y presentarlos en forma dinámica al terminar abra una opción para salir

del programa y cerrarlo.

SOBRE CARGA DE OPERADORES

Mediante esto se logra que los objetos sean tratados como cualquier otra variable.

int a,b,c;

a=5, b=8;

c=a + b;

datos tipo int

fraccion a, b,c;

c=a+b;

Donde el signo más es el operador sobre cargado y hace que los objetos tipo fracción sean

tratados como un dato por ejemplo tipo int.

Símbolos Binarios

+ , - , * , / , % , = , += , -= , *= , /=, %=, ==, != , <> ,>=, <= , && , ||

Ejemplo: a + b

NOTA.- Cuando son símbolos binarios se envía solo un objeto y el de la derecha a + b

mientras que a ya está sobre entendido en la maquina

Al declarar la función tenemos una palabra reservada OPERATOR

Símbolos Unitarios

+ + , -- , ! , + ,- , * , &

Debemos tener cuidado con los simbolos unitarios ya que se sobre escribe los datos

anteriores.

Ejemplo: + b

NOTA.- Si son dos objetos obedece al operador de la función, si son variables normales

obedece al operador que corresponde.

Su operación es de dos objetos.

Ejercicio en clase 08:

Ejercicio Fracción

- 46 -

Calculo de fracciones con sobre carga de operadores.

CODIGO

#include<stdlib.h>

#include<iostream.h>

#include<conio.h>

#include<stdio.h>

class fraccion{

int num,den;

public:

void ingresar();

void imprimir();

void validar();

int validar1(fraccion a);

fraccion operator * (fraccion b);

int MCD(int num, int den);

void operator !();

fraccion operator +(fraccion b);

fraccion operator -(fraccion b);

fraccion operator /(fraccion b);

int operator ==(fraccion b);

fraccion();

};

//implementacion de las funciones

fraccion::fraccion(){

num=0;

den=0;

}

void fraccion::validar(){

while(den==0){

cout<<"\n Error,.....Ingrese nuevamente el denominador.\n";

cin>>den;

}

}

int fraccion::operator ==(fraccion b){

if ((num==b.num)&&(den==b.den)){

return(0);

- 47 -

}

else

return(1);

}

int fraccion::MCD(int num, int den){

int t,i=2,mcd=1;

if(num<0 ){

num=(-1)*num;

den=(-1)*den;

do{

if (num%i==0 && den%i==0)

{

mcd=mcd*i;

num=num/i;

den=den/i;

i=2;

}

else

i++;

}while(i<=num);

return(mcd);

}

else{

do{

if (num%i==0 && den%i==0)

{

mcd=mcd*i;

num=num/i;

den=den/i;

i=2;

}

else

i++;

}while(i<=num);

return(mcd);

}

}

- 48 -

void fraccion::operator !(){

int d=MCD(num, den);

num=num/d;

den=den/d;

}

void fraccion::ingresar(){

char a[5], b[5];

cout<<"\n Ingrese el numerador: ";

cin>>a;

num=atoi(a);

cout<<"\n Ingrese el denominador: ";

cin>>b;

den=atoi(b);

validar();

}

void fraccion::imprimir(){

if(num==0){

cout<<"\n La fraccion es: 0\n";

}

else if(den==1){

cout<<"\n La fraccion equivale a "<<num<<" como numero entero\n";

}

else {

cout<<"\n La fraccion es: ";

cout<<num<<"/"<<den<<endl;

}

}

fraccion fraccion:: operator *( fraccion b){

fraccion aux;

aux.num=num*b.num;

aux.den=den*b.den;

return(aux);

}

fraccion fraccion::operator+( fraccion b){

- 49 -

fraccion y;

y.den=den*b.den;

y.num=(((y.den/den)*num)+((y.den/b.den)*b.num));

return (y);

}

fraccion fraccion::operator -(fraccion b){

fraccion y;

y.den=den*b.den;

y.num=(((y.den/den)*num)-((y.den/b.den)*b.num));

return (y);

}

int fraccion::validar1(fraccion a){

if(a.den==0)

return(0);

else

return(1);

}

fraccion fraccion::operator /(fraccion b){

fraccion d;

if(b.num<0){

b.num=(-1)*b.num;

d.num=num*b.den;

d.num=(-1)*d.num;

d.den=den*b.num;

return(d);

}

else{

d.num=num*b.den;

d.den=den*b.num;

return(d);

}

}

//programa pricipal

void main (){

fraccion a,b,c;

int t, as;

- 50 -

char op;

do{

cout<<"\n\t\t Programa para realizar operaciones entre fracciones.\n";

a.ingresar();

a.imprimir();

b.ingresar();

b.imprimir();

!a;

!b;

cout<<"\n Suma: ";

c=a+b;

!c;

c.imprimir();

getch();

cout<<"\n Resta: ";

c=a-b;

!c;

c.imprimir();

getch();

c=a*b;

!c;

cout<<"\n Multiplicacion: ";

c.imprimir();

getch();

cout<<"\n Division: ";

c=a/b;

as=c.validar1(c);

if(as==0){

cout<<"\n La division no se puede realizar pues la segunda fraccion es cero.";

}

else{

!c;

c.imprimir();

}

getch();

t=(a==b);

if(t==0){

cout<<"\n Las fracciones ingresadas son iguales.\n";

- 51 -

}

else{

cout<<"\n Las fracciones ingresadas no son iguales.\n";

}

cout<<"\n Desea seguir operando, presione 'a'. \n Caso contrario cualquier tecla.";

cin>>op;

clrscr();

}while (op=='a' || op=='A');

_exit(0);

}

PROBLEMA PROPUESTO 07:

El Programa hecho en clase pero ver si las dos fracciones Son Iguale con Sobre carga de

Operadores .

Ejercicio en clase 09:

Ejercicio Vectores Un Programa que realice la suma, resta de vectores, producto cruz, producto punto, el inverso.

CODIGO

#include <iostream.h>

# include <conio.h>

#include<stdlib.h>

class vector {

private:

double x,y ,z;

public:

void ingreso();

void imprimir();

void validar();

- 52 -

vector operator +(vector b);

vector operator -(vector b);

vector operator *(vector b);

double operator /(vector b);

void operator ! ();

void operator ++ ();

void operator =(vector b);

int operator ==(vector b);

};

void vector ::ingreso(){

cout<<"\n Ingrese la coordenada x: ";

cin >> x;

cout<<"\n Ingrese la coordenada y: ";

cin >> y;

cout<<"\n Ingrese la coordenada z: ";

cin >> z;

validar();

}

void vector::validar(){

while(x==0 && y==0 && z==0){

cout<<"\n Vector erroneo...........\n Ha ingresado el origen de coordenadas y con este dato las operaciones\n siguientes son obvias";

ingreso();

}

- 53 -

}

void vector :: imprimir(){

cout<<"\n El vector es :"<<endl;

cout<<"("<<x<<"i ,"<<y<<"j ,"<<z<<"k)"<<endl;

}

vector vector :: operator + (vector b){

vector aux ;

aux.x=x+b.x;

aux.y=y+b.y;

aux.z=z+b.z;

return(aux);

}

vector vector ::operator -(vector b){

vector aux ;

aux.x=x-b.x;

aux.y=y-b.y;

aux.z=z-b.z;

return(aux);

}

vector vector :: operator * (vector b){

vector aux;

aux.x=((y*b.z)-(z*b.y));

aux.y=(-1)*((x*b.z)-(z*b.x));

aux.z=((x*b.y)-(y*b.x));

return(aux);

}

- 54 -

double vector :: operator / (vector b){

double aux=0;

aux=(x*b.x)+(y*b.y)+(z*b.z);

return(aux);

}

void vector:: operator !(){

x=x*(-1);

y=y*(-1);

z=z*(-1);

}

void vector :: operator ++(){

x++;

y++;

z++;

}

void vector::operator =(vector b) {

x=b.x;

y=b.y;

z=b.z;

}

int vector::operator ==(vector b){

//int a;

if ((x==b.x ) && (y==b.y)&&(z==b.z) ) {

return(0);

}

else

- 55 -

return(1);

}

void main(){

vector a, b, c;

double w;

int q;

char op;

do{

clrscr();

cout<<"\n\t\t Interaccion de 2 vectores en 3 dimensiones.\n\n";

a.ingreso();

a.imprimir();

b.ingreso();

b.imprimir();

c=a+b;

cout<<"\n Suma entre Vectores";

c.imprimir();

getch();

cout<<"\n Resta";

c=a-b;

c.imprimir();

getch();

cout<<"\n Producto Cruz";

c=a*b;

c.imprimir();

getch();

cout<<"\n Producto Punto: ";

- 56 -

w=a/b;

cout<<w<<endl;

getch();

if ((a==b)==0) {

cout<<"\n Vectores iguales.\n Cambiando vector a por -a.......";

!a;

a.imprimir();

getch();

}

else {

cout<<"\n Vectores desiguales. \n Sumando uno a cada coordenada......";

a++;

a.imprimir();

getch();

}

cout<<"\n Copiando vector b en a......";

a=b;

a.imprimir();

cout<<"\n Desea continuar presione 'a'. \n Caso contrario cualquier tecla. ";

cin>>op;

}while(op=='a' || op=='A');

_exit(0);

}

- 57 -

Taller:

Ejercicio Anterior Un Programa que realice la operación entre Vectores

PROBLEMA PROPUESTO 08:

El Programa de conjuntos pero con sobre carga.

Taller:

Ejercicio Matrices Un Programa que realice la suma , resta, multiplicación de matrices la clase se llamara matriz y sus datos miembro num_filas, num_columnas las funciones ingreso, imprimir con todos los operadores sobre cargados.

CODIGO

#include<iostream.h>

#include<conio.h>

#include<stdio.h>

class matriz{

int f,c;

int m[10][10];

public:

void ingreso();

void imprimir();

matriz operator +(matriz b);

matriz operator – (matriz b);

matriz operator * (matriz b);

};

void matriz :: ingreso(){

char f1[3],c1[3];

cout<<”\n Ingrese el Numero de Filas : ”;

cin>>f1;

f= atoi(f1);

- 58 -

while(f<=0){

cout<<”\n Erro……Solo numeros positivos ….\n Ingrese el numero de filas

:\n”;

cin>>f1;

f=atoi(f1);

}

cout<<”\n Ingrese el Numero de Columnas :”;

cin>> c1;

c=atoi(c1);

while(c<=0){

cout<<”\n Erro……Solo numeros positivos ….\n Ingrese el numero de colmnas

:\n”;

cin>>c1;

c=atoi(c1);

}

for( int i=0; i<f; i++ ){

for(int j=0;j<c;j++){

cout<<”Elemento(”<<i<<”,”<<j<<”) : ”;

cin>>m[i][j];

}

}

}

void matriz ::imprimir(){

cout<<”\n Numero de Fila : ”<<f<<”\n”;

cout<<”\n Numero de Columnas : ”<<c<<”\n”;

for( int i=0; i<f;i++){

for(int j=0; j<c ; j++){

cout<<” “<<m[i][j];

}

cout <<”\n”;

}

}

matriz matriz :: operator +(matriz b){

matriz aux;

if ((f==b.f ) && (c==b.c){

- 59 -

aux.f=f;

aux.c=c;

for(int i=0 ; i<f; i++){

for(int j=0 ;j<c ;j++){

aux.m=m[i][j]+b.m[i][j];

}

}

}else{

clrscr();

cout<<”\n No se puede realizar la suma……\n Matrices no son Iguales \n”;

getch();

}

return(aux);

}

matriz matriz :: operator -(matriz b){

matriz aux;

if ((f==b.f ) && (c==b.c){

aux.f=f;

aux.c=c;

for(int i=0 ; i<f; i++){

for(int j=0 ;j<c ;j++){

aux.m=m[i][j]-b.m[i][j];

}

}

}else{

clrscr();

cout<<”\n No se puede realizar la suma……\n Matrices no son Iguales \n”;

getch();

}

return(aux);

}

matriz matriz :: operator *( matriz b){

matriz aux;

imt a,k;

if(c==b.f ){

aux.f=f;

- 60 -

aux.c=b.c;

for(int i=0; i<f;i++){

for(int j=0 ; j<c ; j++){

k=0 , a=0;

do{

a=a+m[i][k]*b.m[k][j];

k++;

}while(k<c);

aux.m[i][j]=a;

}

}

}

}

matriz :: matriz(){

f=0;

c=0;

for (int i=0 ; i<f ; i++){

for(int j=0; j<c ;j++){

m[i][j]=0;

}

}

}

void main(){

matriz a,b,c;

char op;

clrscr();

do{

a.ingreso();

b.ingreso();

clrscr();

a.imprimir();

b.imprimir();

cout<<”\n La Suma : \n”;

c=a+b;

c.imprimir;

cout<<”\n La Resta : \n”;

c=a-b;

- 61 -

cout<<”\n La Multiplicacion :\n”;

c=a*b;

c.imprimir();

cout<<”\n Desea Continuar presione a caso contrario cual quier otra tecla\n”;

cin>>op;

}while(op==’a’ || op==’A’);

getch();

}

FUNCIONES AMIGAS

Son funciones externas especiales que no pertenecen a la clase a las cuales se les

proporciona permiso para acceder a un objeto.

E estas funciones se debe enviar el objeto ya que no hay datos preestablecidos.

friend .- Palabra Reservada.

Ejercicio en clase 10:

Ejercicio Fracciones Calculo de fracciones con sobre carga de operadores y funciones amigas

CODIGO

#include<iostream.h>

#include<conio.h>

#include<stdio.h>

class fraccion{

int num,deno;

public;

fraccion();

friend fraccion operator * (fracion a ,fraccion b);

friend fraccion operator / (fracion a ,fraccion b);

friend fraccion validar(fraccion a );

void ingreso();

};

fraccion operator *(fraccion a, fracccion b){

fraccion aux;

aux.num=a,num* b.num;

aux.deno=a.deno*b.deno;

Tipo de retorno

Los objetos enviados

- 62 -

return(aux);

}

fraccio validar(fraccion a ){

while( a.deno==0){

cout<<”\n Error…….Ingrese de nuevo el denominador”;

cin>>a.deno;

}

return(a);

}

void fraccion :: ingreso(){

cout<<”\n Ingrese el Numerador \n”;

cin>>num;

cout<<”\n Ingrese el Numerador \n”;

cin>>num;

}

void main(){

fraccion a,b,c;

a.ingreso();

a=validar(a);

b.ingreso();

b=validar(b);

a.imprimir();

b.imprimir();

c=a*b;

c.imprimir();

}

Taller

Un Programa que realice la suma, resta, multiplicación y división de números complejos.

CODIGO

#include<iostream.h>

#include <conio.h>

class complejo{

Debe enviarse un objeto

- 63 -

private;

double real,imag;

public:

void ingreso();

void imprimir();

friend complejo operator + (complejo a, complejo b);

friend complejo operator - (complejo a, complejo b);

friend complejo operator * (complejo a, complejo b);

friend complejo operator /(complejo a, complejo b);

};

void complejo :: ingreso(){

cout<<”\n Ingrese la parte Real : ”;

cin>>real;

cout<<”\n Ingrese la parte Imaginaria : ”;

cin>>imag;

}

void complejo :: imprimir(){

cout<<”(”<<real<<”,”<<imag<<” j )\n”;

}

complejo operator +(complejo a, complejo b){

complejo aux;

aux.real=a.real +b.real;

aux.imag=a.imag+ b.imag;

return(aux);

}

complejo operator - (complejo a, complejo b){

complejo aux;

aux.real=a.real - b.real;

aux.imag=a.imag - b.imag;

return(aux);

}

complejo operador *( complejo a, complejo b){

complejo aux;

- 64 -

aux.real=(a.real*b.real)-(a.imag*b.imag) ;

aux.imag= (a.real*b.imag)+(a.imag*b.real);

return(aux);

}

complejo operator /(complejo a, complejo b){

complejo aux;

aux.real= ((a.real*b.real+a.imag*b.imag)/(b.real*b.real+b.imag*b.imag)) ;

aux.imag=((a.imag*b.real - a.real*b.imag)/(b.real*b.real+b.imag*b.imag)) ;

return(aux);

}

void main(){

clrscr();

complejo a, b,c;

char op;

do{

a.ingreso();

b.ingreso();

a.imprimir();

b.imprimir();

cout<<”\n La Suma es : ”;

c=a+b;

c.imprimir();

cout<<”\n La Resta es : ”;

c=a-b;

c.imprimir();

cout<<”\n La Multiplicacion es : ”;

c=a*b;

c.imprimir();

cout<<”\n Division es : ”;

c=a/b;

c.imprimir();

cout<<”\nSi desea Ingresar presione a caso contrario cualquier otra tecla \n ”;

cin>> op;

} while(op==’a’ || op ==’A’);

}

- 65 -

SOBRE CARGA DE CIN Y COUT

Este me permite imprimir o leer un objeto.

Es ambien una funcion amiga

COUT Existe un objeto llamado ostream Retorna OS; En la declaracion de la clase: friend ostream & operator <<(ostream & os, fraccion &c); La Funcion: ostream & operator <<(ostream & os, fraccion &c){ cout<<”El numero ;”; cout<<c.num; return(os); } En el programa principal: void main(){ fraccion a; cout<<a; }

CIN

Existe un objeto llamado istream Retorna IN; En la declaración de la clase: friend istream & operator >>(istream & in, fraccion &c); La Función: istream & operator >>(istream & in, fraccion &c){ cout<<” Ingrese el numero ;”; cin>>c.num;

Objeto de Salida Nom de Clase Tipo de valor retornado Objeto

Objeto de Salida Nom de Clase Tipo de valor retornado Objeto

- 66 -

return(in); } En el programa principal: void main(){ fraccion a; cin>>a; }

Ejercicio en clase 11:

Ejercicio Complejos Un Programa que realice la suma, resta, multiplicación y división de números complejos.

CODIGO

# include <iostream.h>

# include<conio.h>

class complejo {

double real,imag;

public:

complejo();

friend istream & operator >>(istream &in, complejo &c);

friend ostream & operator >>(ostream &os, complejo &c);

friend complejo operator + (complejo a , complejo b);

friend complejo operator - (complejo a , complejo b);

friend complejo operator * (complejo a , complejo b);

friend complejo operator / (complejo a , complejo b);

};

complejo:: complejo(){

real=0;

imag=0;

}

istream & operator >>(istream &in, complejo &c){

cout<<”\n Ingrese la Parte Real : ”;

cin>>c.real;

- 67 -

cout<<”\n Ingrese la Parte Imaginaria : ”;

cin>>c.imag;

return(in);

}

ostream & operator<<(ostream &os, complejo &c){

cout<<”\n ( ”<<c.real<<” , ”<<c.imag<<” j) \n”;

return(os);

}

complejo operator + (complejo a, complejo b){

complejo aux;

aux.real=a.real + b.real;

aux.imag=a.imag+b.imag;

return(aux);

}

complejo operator - (complejo a, complejo b){

complejo aux;

aux.real=a.real - b.real;

aux.imag=a.imag - b.imag;

return(aux);

}

complejo operador *( complejo a, complejo b){

complejo aux;

aux.real=(a.real*b.real)-(a.imag*b.imag) ;

aux.imag= (a.real*b.imag)+(a.imag*b.real);

return(aux);

}

complejo operator /(complejo a, complejo b){

complejo aux;

aux.real= ((a.real*b.real+a.imag*b.imag)/(b.real*b.real+b.imag*b.imag)) ;

aux.imag=((a.imag*b.real - a.real*b.imag)/(b.real*b.real+b.imag*b.imag)) ;

return(aux);

}

- 68 -

void main(){

clrscr();

complejo a, b,c;

char op;

do{

cin>>a;

cin>>b;

cout<<”\n Complejo 3 : ”;

cout<< a;

cout<<”\n Complejo 2 : ”;

cout<< b;

cout<<”\n La Suma es : ”;

c=a+b;

c.imprimir();

cout<<”\n La Resta es : ”;

c=a-b;

c.imprimir();

cout<<”\n La Multiplicacion es : ”;

c=a*b;

c.imprimir();

cout<<”\n Division es : ”;

c=a/b;

c.imprimir();

cout<<”\nSi desea Ingresar presione a caso contrario cualquier otra tecla \n ”;

cin>> op;

} while(op==’a’ || op ==’A’);

}

Taller

Desarrollar un Programa que realice la multiplicación de un polinomio de 4 grado con

sobrecarga

CODIGO

# include <iostream.h>

# include <conio.h>

# include <stdlib.h>

- 69 -

class polinomio{

int grado;

int cof[18];

public:

friend ostream & operator <<(ostream &os, polinomio &c);

friend istream & operator >>(istream &in, polinomio &c);

polinomio();

polinomio operator +( polinomio b);

polinomio operator -( polinomio b);

polinomio operator *( polinomio b);

};

istream & operator>>(istream &in, polinomio &c){

char gr[2];

/*cout<<"\n \t Ingrese el Grado del Polinomio : ";

cin>>gr;

grado= atoi(gr);

while(grado<=0 || grado>=5){

cout<<"\nError...Solo Numeros Positivos Hasta Grado 4";

cout<<"\n \t Ingrese el Grado del Polinomio : ";

cin>>gr;

grado= atoi(gr);*/

cout<<"\n Los Coficiente: ";

//}

for(int i=4;i>=0;i--){

cout<<"\n X^"<<i<<" :";

cin>>c.cof[i];

}

}

ostream &operator <<(ostream &os,polinomio &c){

cout<<"\n Polinomio:\n ";

cout<<"\t ";

for(int i=10; i>=0; i--){

if(c.cof[i]!=0 ){

if(i==0){

if(c.cof[i]>0){

cout<<"+"<<c.cof[i]<<"";

}

else

cout<<c.cof[i]<<" ";

}

- 70 -

else{

if(c.cof[i]>0){

cout<<"+ "<<c.cof[i]<<"x^"<<i<<" ";

}

else

cout<<c.cof[i]<<"x^"<<i<<" ";

}

}

}

cout<<"\n";

}

polinomio polinomio::operator +(polinomio b){

polinomio aux,aux1;

/* if(grado>b.grado){

aux.grado=grado;

for(int i=0;i<aux.grado+1;i++)

aux.cof[i]=cof[i];

}else{

if(grado<b.grado){

aux.grado=b.grado;

for(int j=0;j<aux.grado+1;j++)

aux.cof[j]=b.cof[j];

}else{

aux.grado=grado;

for(int k=0;k<aux.grado+1;k++)

aux1.cof[k]=cof[k];

}

} */

for(int l=0;l<12;l++){

aux.cof[l]=cof[l]+b.cof[l];

}

return(aux);

}

polinomio polinomio::operator -(polinomio b){

polinomio aux,aux1;

/*if(grado>b.grado){

aux.grado=grado;

for(int i=0;i<aux.grado+1;i++)

aux.cof[i]=cof[i];

}else{

if(grado<b.grado){

- 71 -

aux.grado=b.grado;

for(int j=0;j<aux.grado+1;j++)

aux.cof[j]=b.cof[j];

}else{

aux.grado=grado;

for(int k=0;k<aux.grado+1;k++)

aux1.cof[k]=cof[k];

}

} */

for(int l=0;l<12;l++){

aux.cof[l]=cof[l]-b.cof[l];

}

return(aux);

}

polinomio::polinomio(){

for(int i=0;i<18;i++){

cof[i]=0;

}

grado=0;

}

polinomio polinomio::operator *( polinomio b){

polinomio c;

int i;

for(i=0;i<12;i++){

for(int j=0;j<12;j++){

c.cof[i+j]+=(cof[i]*b.cof[j]);

}

}

return (c);

}

void main(){

- 72 -

polinomio a,b,c;

clrscr();

cout<<"\n \tIngreso de Polinomios\n";

cin>>a;

cin>>b;

cout<<a;

cout<<b;

cout<<"\nLa suma De Polinomios\n" ;

c=a+b;

cout<<c;

cout<<"\nLa Resta De Polinomios\n";

c=a-b;

cout<<c;

cout<<"\nLa Multiplicacion De Polinomios\n";

c=a*b;

cout<<c;

getch();

}

PROBLEMA PROPUESTO 09:

Crear una clase fecha que pemita ingresar una fecha verificar si el año es bsiesto y sumar

un dia a la fecha ingresada, además comparar con otra fecha ingresada para ver si estas

son o no iguales.

Ejercicio en clase 12:

Ejercicio Cadena Se tiene una clase con una dato miembro llamada cadena con un espacio máximo de 80 caracteres realizar un constructor que inicialice la cadena en espacio en blanco un operador + que me permita sumar dos cadenas de caracteres y un = que me permita ver si 2 cadenas de caracteres son iguales.

CODIGO

#include<iostream.h>

#include<conio.h>

#include<string.h>

#include<stdlib.h>

class palabra{

char cadena [80];

public:

palabra(); //friend void operator +(palabra c);

- 73 -

friend palabra operator +(palabra a, palabra b);

friend int operator ==(palabra a, palabra b);

friend istream & operator>>(istream & cad, palabra &c);

friend ostream & operator<<(ostream & sal, palabra &c);

friend palabra operator !(palabra a);

};

palabra ::palabra(){

strcpy(cadena," ");

}

palabra operator +(palabra a, palabra b){

palabra aux;

strcpy(aux.cadena, strcat(a.cadena, b.cadena));

return(aux);

}

/*void operator +(cadena a, cadena b){

strcat(a.cadena, b.cadena);

} */ //uso de otra forma

int operator ==(palabra a, palabra b){

int u=1;

u=strcmp(a.cadena, b.cadena);

return(u);

}

istream & operator >>(istream & cad, palabra &c){

cout<<"\n Ingrese la cadena de caracteres: ";

cad>>c.cadena;

return (cad);

}

ostream & operator<<(ostream & sal, palabra &c){

cout<<"\n La cadena es: ";

sal<<c.cadena;

cout<<"\n";

return (sal);

}

palabra operator !(palabra a){

palabra aux;

strcpy(aux.cadena,strrev(a.cadena));

return (aux);

}

void main(){

palabra a, b, c;

int o=0;

- 74 -

char op;

do{

clrscr();

cout<<"\n \t\t Trabajando con cadenas.\n";

cout<<"\n Ingrese cadena A: ";

cin>>a;

cout<<"\n Ingrese cadena B: ";

cin>>b;

cout<<b;

cout<<"\n Sumando A+B: ";

c=a+b;

cout<<c;

//a+b;

//cout<<a;

o=(a==b);

if(o==0){

cout<<"\n Cadena A igual a Cadena B.\n";

}

else{

cout<<"\n Cadena A no es igual a Cadena B.\n";

}

a=!a;

cout<<"\n Cadena A Invertida: ";

cout<<a;

cout<<"\n Cadena B invertida: ";

b=!b;

cout<<b;

cout<<"\n Ingrese 'a' para continuar: ";

cin>>op;

}while(op=='a' || op=='A');

_exit(0);

}

Taller

Desarrollar en el programa Anterior si las cadena de caracteres con iguales y la

suma de ellas (Ya esta implementado en el código)

- 75 -

HERENCIA

La 'herencia' es una de las piedras angulares de la POO ya que ésta permite la creación de

clasificaciones jerárquicas. Con la herencia, es posible crear una clase general que defina

tratos comunes a una serie de elementos relacionados. Esta clase podría luego ser

heredada por otras clases más específicas, cada una agregando solo aquellas cosas que son

únicas para la clase 'heredera'

Todos los Datos miembro o funciones Heredadas por una CLASE BASE O MADRE son

compartidos a las CLASES HIJAS.

EJEMPLO

Clase Madre

Clases Hijas

Ejercicio en clase 13:

Ejercicio Figura Un Programa que realice el área, volumen del circulo, cilindro, cono y esfera

CODIGO

# include<iostream.h>

# include<math.h>

# define PI 3.1416

class figura{

protected:

float radio;

public:

void leer_radio();

void escribir_radio();

};

CILINDRO

CONO ESFERA CIRCULO

FIGURA

- 76 -

class circulo : public figura{

protected: //Para heredar yo no pongo prívate, es para proteger los datos del programa

//principal

float area;

public:

float area_circulo();

void imprimir_circulo();

};

class esfera :public figura{

protected:

float volumen;

float area;

public:

float area_esfera();

float volumen_esfera();

void imprimir_esfera();

};

class cilindro :public circulo{

protected:

float altura;

float area,volumen;

public:

void leer_altura();

float area_cilindro();

float volumen_cilindro();

void imprimir_cilindro();

};

class cono :public circulo{

protected:

float lado;

float area,volumen;

float altura;

public:

void leer_lado();

float area_cono();

float volumen_cono();

void imprimir_cono();

};

void figura:: leer_radio(){

cout<<"\n Ingrese el radio \n";

- 77 -

cin>>radio;

}

void figura:: escribir_radio(){

cout<<"\n radio es:";

}

float circulo:: area_circulo(){

area=PI*radio*radio;

return(area);

}

void circulo :: imprimir_circulo(){

cout<<"\n Area del circulo"<<area;

}

float esfera::area_esfera(){

area=4*PI*pow(radio,2);

return(area);

}

float esfera :: volumen_esfera(){

volumen=4.0/3*PI*pow(radio,3);

return(volumen);

}

void esfera:: imprimir_esfera(){

cout<<"\n area de la esfera"<<area;

cout<<"\n Volumen de la esfera :"<<volumen;

}

void cilindro :: leer_altura(){

cout<<"\n Ingrese altura del cilindro ";

cin>>altura;

}

float cilindro :: area_cilindro (){

area=2*PI*radio*altura+2*area_circulo();

return(area);

}

float cilindro:: volumen_cilindro(){

volumen=area_circulo()*altura;

- 78 -

return(volumen);

}

void cilindro::imprimir_cilindro(){

cout<<"\n Area del cilindro "<<area;

cout<<"\n Volumen del cilindro "<<volumen;

}

void cono:: leer_lado(){

cout<<"\n Ingrese el lado: ";

cin>>lado;

}

void cono::imprimir_cono(){

cout<<"Lado ="<<lado;

cout<<"El area es ="<<area;

cout<<"El volumen es ="<<volumen;

}

float cono::volumen_cono(){

altura=sqrt(pow(lado,2)-pow(radio,2));

volumen=1.0/3*area_circulo()*altura;

return(volumen);

}

float cono::area_cono(){

area=PI*radio*lado;

return(area);

}

void main(){

circulo a;

esfera b;

cilindro c;

cono d;

cout<<"\n Area del Circulo";

a.leer_radio();

a.area_circulo();

a.imprimir_circulo();

cout<<"\n Area y Volumen del la esfera";

b.leer_radio();

- 79 -

b.area_esfera();

b.volumen_esfera();

b.imprimir_esfera();

cout<<"\n Area y Volumen del Cilindro";

c.leer_radio();

c.leer_altura();

c.area_cilindro();

c.volumen_cilindro();

c.imprimir_cilindro();

cout<<"\n Area y Volumen del Cono";

d.leer_radio();

d.leer_lado();

d.area_circulo();

d.volumen_cono();

d.area_cono();

d.imprimir_cono();

}

El funcionamiento del programa como hereda cada una de las clases

FIGURA

Datos Miembro

radio

Fun Miembro

leer_radio()

escribir_radio()

CIRCULO

Datos Miembro

área

Fun Miembro

area_circulo()

imprimir_circulo()

Heredado

radio

Fun Miembro

leer_radio()

escribir_radio()

ESFERA

Datos Miembro

volumen, área

Fun Miembro

area_esfera()

volumen_esfera()

imprimir_esfera()

Heredado

radio

Fun Miembro

leer_radio()

escribir_radio()

CILINDRO

Datos Miembro

altura,

área,volumen

Fun Miembro

leer_altura()

area_cilindro()

volumen_cilindro()

imprimir_cilindro()

Heredado

radio, área

Fun Miembro

area_circulo()

imprimir_circulo()

leer_radio()

escribir_radio()

- 80 -

Nota:

No se puede guarda un dato anterior a una mismas variable ya que son objetos diferentes.

Si necesito algún dato o función hago que sea parte de la clase base

Taller

El Programa anterior implementado Cono heredando Círculo

La implementación ya está en el código anterior.

CONO

Datos Miembro

altura, lado,

área,volumen

Fun Miembro

leer_lado()

area_cono()

volumen_cono()

imprimir_cono()

Heredado

radio, área

Fun Miembro

area_circulo()

imprimir_circulo()

leer_radio()

escribir_radio()

- 81 -

FORMATOS DE ENTRADA Y SALIDA Hablamos de Formatos de entrada y salida cuando los datos se leen del teclado y se

muestran en pantalla.

En C++ Tenmos varias opciones para estos formatos en las cuales las siguientes librerías

<iostream.h> En esta librería encontramos CIN y COUT

cin, que toma caracteres de la entrada estándar (teclado);

cout, pone caracteres en la salida estándar (pantalla);

cerr y clog ponen mensajes de error en la salida estándar.

EJEMPLO

Podemos visualizar que en los ejercicos anteriores realizamos con cin y cout

#include <math.h>

#include <conio.h>

#include <iostream.h>

#include <stdio.h>

class triangulo{

private :

double lado1;

double lado2;

double lado3;

public:

void ingreso();

int validar();

void imprimir();

int comprobacion();

float calcular_area();

float calcular_perimetro();

} ;

void triangulo:: ingreso(){

- 82 -

cout<<"\nIngreso el lado a: "<<endl;

cin>>lado1;

cout<<"\nIngreso el lado b: "<<endl;

cin>>lado2;

cout<<"\nIngreso el lado c: "<<endl;

cin>>lado3;

}

int triangulo:: validar()

{

int a=0;

if (lado1<=0 || lado2<=0 || lado3<=0)

{

a=1;

}

return (a);

}

int triangulo:: comprobacion()

{

int a=0;

if ((lado1<(lado2+lado3))&&(lado2<(lado1+lado3))&&(lado3<(lado1+lado2)))

{

a=a+1;

}

- 83 -

return (a);

}

void triangulo:: imprimir()

{

cout<<"Lo datos ingresados son: \n";

cout<<" lado a= "<<lado1<<endl;

cout<<" lado b= "<<lado2<<endl;

cout<<" lado c= "<<lado3<<endl;

}

float triangulo :: calcular_area()

{

// El Mecanisno utilizado es la formula generalizada para cualquier tipo de triangulo

// La Formula de HERON

double s,a,aux;

s=(lado1+lado2+lado3)/2;

a=(s*(s-lado1)*(s-lado2)*(s-lado3));

aux=sqrt(a);

return (aux);

}

float triangulo:: calcular_perimetro()

{

float aux;// variable local

aux=lado1+lado2+lado3;

return (aux);

- 84 -

}

//programa pricipal

void main()

{

clrscr();

int y,x;

double b,a;

char op;

do{

cout<<"\t Programa para alcular el area y el perimetro de un triangulo"<<endl;

triangulo obj1;

obj1.ingreso();

obj1.imprimir();

y=obj1.validar();

x=obj1.comprobacion();

if (y!=1 && x!= 0)

{

cout<<"El perimetro es: "<<endl<<obj1.calcular_perimetro()<<" unidades"<<endl;

b=obj1.calcular_perimetro();

a=obj1.calcular_area();

cout<<"El area del triangulo: \n"<<a<<" unidades cuadradas"<<endl;

getch();

cout<<"\n Ingrese ´a´ si desea continuar.\n Caso contrario cualquier tecla."<<endl;

cin>>op;

fflush(stdin);

clrscr();

- 85 -

}

else {

cout<<"\n Los valores estan incorrectos o no forman un triangulo."<<endl;

getch();

cout<<"\n Ingrese ´a´ si desea continuar.\n Caso contrario cualquier tecla."<<endl;

cin>>op;

fflush(stdin);

clrscr();

}

}while (op=='a' || op=='A');

cout<<"\n \n \t\t\t FIN\n";

getch();

}

<stdio.h> En esta librería encontramos PRINTF y SCANF

printf(): Escribe datos en la consola con el formato especificado.

scanf(): Función de entrada por consola con el formato especificado.

Tambien encontramos

int printf (" caracteres de transmisión y escape", lista de argumentos);

int scanf (" caracteres de transmisión y escape", lista de argumentos);

EJEMPLO

#include <stdio.h>

void main()

{

int num;

printf( "Introduce un número " );

scanf( "%i", &num );

printf( "Has tecleado el número %i\n", num );

- 86 -

}

Tambien tenemos formatos de Entrada y Salida por consola es decir que no tiene formato

como

getchar().-Lee un carácter del teclado putchar().-Imprime un carácter en pantalla en la posición actual del cursor. gets().-Lee una cadena de caracteres introducida por el teclado y la sitúa en una

dirección apuntada por su argumento de tipo puntero a carácter. puts().- Escribe su argumento de tipo cadena en la pantalla seguida de un carácter

de salto de línea

EJEMPLO #include <stdio.h>

main()

{

char cadena[10];

int i;

i=getchar();

putchar(i);

gets(cadena);

puts(cadena);

}

- 87 -

SOLUCIONES Este ítem contiene:

Correccion delos problemas propuestos y de los problemas a los cuales no se ha hecho

mención por ser una versión nueva de los programas anteriormente nombrados:

SOLUCIÓN PROBLEMA PROPUESTO 01:

#include<iostream.h>

#include<conio.h>

#include<stdio.h>

//delaracion de la clase

class temperatura{

int grados;

public:

void ingresar();

void imprimir();

float convertir();

} ;

//implementacion de las funciones

void temperatura::ingresar(){

cout<<"Ingrese la cantidad de grados Centigrados: "<<endl;

cin>>grados;

}

void temperatura::imprimir(){

cout <<"El valor en grados Centigrado es: "<<endl;

}

float temperatura::convertir(){

float a=1.8;

int e=32;

- 88 -

float t;

t=(grados*a)+e;

return (t);

}

// programa principal

void main (){

float u;

char op;

do {

clrscr();

temperatura conversor;

cout<<"\n\tPrograma para convertir grados Centigrados en grados

Farenheit"<<endl<<endl;

conversor.ingresar();

u=conversor.convertir();

cout<<endl<<"El valor en grados Fahrenheit es: "<<u<<" F"<<endl;

getch();

cout<<"\n Ingrese 'a' si desea continuar.\n Caso contrario cualquier tecla."<<endl;

cin>>op;

fflush(stdin);

}while (op=='a' || op=='A');

cout<<"FIN\n";

getch();

}

SOLUCIÓN PROBLEMA PROPUESTO 02:

#include <math.h>

#include <conio.h>

#include <iostream.h>

#include <stdio.h>

class triangulo{

private :

double lado1;

double lado2;

double lado3;

public:

- 89 -

void ingreso();

int validar();

void imprimir();

int comprobacion();

float calcular_area();

float calcular_perimetro();

} ;

void triangulo:: ingreso(){

cout<<"\nIngreso el lado a: "<<endl;

cin>>lado1;

cout<<"\nIngreso el lado b: "<<endl;

cin>>lado2;

cout<<"\nIngreso el lado c: "<<endl;

cin>>lado3;

}

int triangulo:: validar()

{

int a=0;

if (lado1<=0 || lado2<=0 || lado3<=0)

{

a=1;

}

return (a);

}

int triangulo:: comprobacion()

{

int a=0;

if ((lado1<(lado2+lado3))&&(lado2<(lado1+lado3))&&(lado3<(lado1+lado2)))

{

a=a+1;

}

return (a);

}

- 90 -

void triangulo:: imprimir()

{

cout<<"Lo datos ingresados son: \n";

cout<<" lado a= "<<lado1<<endl;

cout<<" lado b= "<<lado2<<endl;

cout<<" lado c= "<<lado3<<endl;

}

float triangulo :: calcular_area()

{

// El Mecanisno utilizado es la formula generalizada para cualquier tipo de triangulo

// La Formula de HERON

double s,a,aux;

s=(lado1+lado2+lado3)/2;

a=(s*(s-lado1)*(s-lado2)*(s-lado3));

aux=sqrt(a);

return (aux);

}

float triangulo:: calcular_perimetro()

{

float aux;// variable local

aux=lado1+lado2+lado3;

return (aux);

}

//programa pricipal

void main()

{

clrscr();

int y,x;

double b,a;

char op;

do{

cout<<"\t Programa para alcular el area y el perimetro de un triangulo"<<endl;

triangulo obj1;

- 91 -

obj1.ingreso();

obj1.imprimir();

y=obj1.validar();

x=obj1.comprobacion();

if (y!=1 && x!= 0)

{

cout<<"El perimetro es: "<<endl<<obj1.calcular_perimetro()<<" unidades"<<endl;

b=obj1.calcular_perimetro();

a=obj1.calcular_area();

cout<<"El area del triangulo: \n"<<a<<" unidades cuadradas"<<endl;

getch();

cout<<"\n Ingrese ´a´ si desea continuar.\n Caso contrario cualquier tecla."<<endl;

cin>>op;

fflush(stdin);

clrscr();

}

else {

cout<<"\n Los valores estan incorrectos o no forman un triangulo."<<endl;

getch();

cout<<"\n Ingrese ´a´ si desea continuar.\n Caso contrario cualquier tecla."<<endl;

cin>>op;

fflush(stdin);

clrscr();

}

}while (op=='a' || op=='A');

cout<<"\n \n \t\t\t FIN\n";

getch();

}

SOLUCIÓN PROBLEMA PROPUESTO 03:

Al ejercicio olo debera agresarle esto y estara terminado:

int fraccion::MCD(int num, int den){

int t,i=2,mcd=1;

do{

if (num%i==0 && den%i==0)

{

- 92 -

mcd=mcd*i;

num=num/i;

den=den/i;

i=2;

}

else

i++;

}while(i<=num);

return(mcd);

}

fraccion fraccion::simplificar(fraccion a){

fraccion s;

int d=s.MCD(a.num, a.den);

s.num=a.num/d;

s.den=a.den/d;

return (s);

}

SOLUCIÓN PROBLEMA PROPUESTO 04:

#include<iostream.h>

#include<conio.h>

class tiempo{

int h, m, s;

public:

void ingreso();

void imprimir();

void validar_hora();

void validar_min();

void validar_seg();

tiempo elegir_ganador(tiempo q,tiempo w,tiempo u);

void validar_total(tiempo j, tiempo r);

tiempo calcular(tiempo d,tiempo e);

tiempo ();

tiempo( int a, int b, int c);

void elegir(tiempo uno, tiempo x, tiempo y, tiempo z);

};

void tiempo::validar_hora(){

- 93 -

while(h<0 || h>23){

cout<<"\n Ingrese nuevamente la hora: ";

cin>>h;

}

}

void tiempo::validar_min(){

while(m<0 || m>=60){

cout<<"\n Ingrese nuevamente los minutos: ";

cin>>m;

}

}

void tiempo::validar_seg(){

while(s<0 || s>=60){

cout<<"\n Ingrese nuevamente los minutos: ";

cin>>s;

}

}

- 94 -

void tiempo::ingreso(){

cout<<"\n Ingrese la hora: ";

cin>>h;

validar_hora();

cout<<"\n Ingrese los minutos: ";

cin>>m;

validar_min();

cout<<"\n Ingrese los segundos: ";

cin>>s;

validar_seg();

}

void tiempo::imprimir(){

cout<<"\n La hora es: ";

cout<<h<<"h: "<<m<<"m: "<<s<<"s";

}

tiempo::tiempo(){

h=0;

m=0;

- 95 -

s=0;

}

tiempo::tiempo(int a, int b, int c ){

h=a;

m=b;

s=c;

}

tiempo tiempo::calcular( tiempo d, tiempo e){

tiempo a;

a.s=d.s-e.s;

if (a.s<0){

a.s=a.s+60;

e.m=e.m-1;

}

a.m=d.m-e.m;

if(a.m<0){

a.m=a.m+60;

e.h=e.h-1;

}

- 96 -

a.h=d.h-e.h;

if (a.h<0){

a.h=a.h+24;

}

return (a);

}

void tiempo::validar_total(tiempo i, tiempo f){

if(f.h<i.h ){

cout<<"\n hora de termino incorrecta......\n Vuelva a ingresar la hora nuevaente. ";

ingreso();

}

}

tiempo tiempo::elegir_ganador(tiempo q,tiempo w,tiempo u){

//para las horas escojo la menor

tiempo aux,z;

aux.h=q.h;

if(aux.h>w.h){

aux.h=w.h;

}

else {

- 97 -

aux.h=aux.h;

}

if(aux.h>u.h){

aux.h=u.h;

}

else{

aux.h=aux.h;

}

//para los minutos ecojo menor

aux.m=q.m;

if(aux.m>w.m){

aux.m=w.m;

}

else {

aux.m=aux.m;

}

if(aux.m>u.m){

aux.m=u.m;

}

else{

aux.m=aux.m;

}

//para los segundos

aux.s=q.s;

- 98 -

if(aux.s>w.s){

aux.s=w.s;

}

else {

aux.s=aux.s;

}

if(aux.s>u.s){

aux.s=u.s;

}

else{

aux.s=aux.s;

}

if (q.h==w.h && q.h==u.h && w.h==u.h){

if (q.m==w.m && q.m==u.m && w.m==u.m){

if(q.s==w.s && q.s==u.s && w.s==u.s){

return(q);

}

else {

q.s=aux.s;

return(q);

}

}

else if(q.m==w.m || q.m==u.m || w.m==u.m){

- 99 -

if(aux.m==q.m){

aux=q;

return(aux);

}

else if(aux.m==w.m){

aux=w;

return(aux);

}

else if(aux.m==u.m){

aux=u;

return(aux);

}

}

else if(q.m!=w.m && q.m!=u.m && w.m!=u.m){

if(aux.m==q.m){

aux=q;

return(aux);

}

else if(aux.m==w.m){

aux=w;

return(aux);

}

else if(aux.m==u.m){

- 100

-

aux=u;

return(aux);

}

}

}

else if(q.h==w.h || q.h==u.h || w.h==u.h) {

if (q.h==aux.h && w.h==aux.h){

if (q.m==w.m){

if(q.s==w.s ){

return(q);

}

else {

q.s=aux.s;

return(q);

}

}

else if(q.m!=w.m){

if(aux.m==q.m){

aux=q;

return(aux);

}

else if(aux.m==w.m){

- 101

-

aux=w;

return(aux);

}

}

}

else if (q.h==aux.h && u.h==aux.h){

if (q.m==u.m){

if(q.s==u.s ){

return(q);

}

else {

q.s=aux.s;

return(q);

}

}

else if(q.m!=u.m){

if(aux.m==q.m){

aux=q;

return(aux);

}

else if(aux.m==u.m){

aux=w;

- 102

-

return(aux);

}

}

}

else if (u.h==aux.h && w.h==aux.h){

if (u.m==w.m){

if(u.s==w.s ){

return(u);

}

else {

u.s=aux.s;

return(u);

}

}

else if(u.m!=w.m){

if(aux.m==u.m){

aux=u;

return(aux);

}

else if(aux.m==w.m){

aux=w;

return(aux);

}

- 103

-

}

}

}

else if(q.h!=w.h && q.h!=u.h && w.h!=u.h) {

if(aux.h==q.h){

aux=q;

return(aux);

}

else if(aux.h==w.h){

aux=w;

return(aux);

}

else if(aux.h==u.h){

aux=u;

return(aux);

}

}

}

void tiempo::elegir(tiempo uno, tiempo x, tiempo y, tiempo z){

if(uno.h==x.h && uno.m==x.m && uno.s==x.s){

cout<<"\n El primer jugador.\n";

- 104

-

//return(1);

}

else if(uno.h==y.h && uno.m==y.m && uno.s==y.s){

cout<<"\n El segundo jugador.\n";

//return(2);

}

else if(uno.h==z.h && uno.m==z.m && uno.s==z.s){

cout<<"\n El tercer jugador.\n";

//return(3);

}

}

void main (){

char op;

do{

int a,b,c,o;

cout<<"\n\t\t Restador de horas en formato hh/mm/ss.\n ";

cout<<"\n Hora de inicio: ";

cout<<"\n Ingrese la hora: ";

cin>>a;

while(a<0 || a>23){

cout<<"\n Ingrese nuevamente la hora: ";

cin>>a;

}

- 105

-

cout<<"\n Ingrese los minutos: ";

cin>>b;

while(b<0 || b>=60){

cout<<"\n Ingrese nuevamente los minutos: ";

cin>>b;

}

cout<<"\n Ingrese los segundos: ";

cin>>c;

while(c<0 || c>=60){

cout<<"\n Ingrese nuevamente los minutos: ";

cin>>c;

}

tiempo inicio (a,b,c), final, final1,final2, r, r1, r2,l,p;

inicio.imprimir();

cout<<"\n\n Tiempo final del primer jugador: ";

final.ingreso();

final.validar_total(inicio, final);

final.imprimir();

r=r.calcular(final, inicio);

cout<<"\n Tiempo transcurrido: ";

r.imprimir();

cout<<"\n\n Tiempo final del segundo jugador: ";

final1.ingreso();

- 106

-

final1.validar_total(inicio, final1);

final1.imprimir();

r1=r1.calcular(final1, inicio);

cout<<"\n Tiempo transcurrido: ";

r1.imprimir();

cout<<"\n\n Tiempo final del tercer jugador: ";

final2.ingreso();

final2.validar_total(inicio, final2);

final2.imprimir();

r2=r2.calcular(final2, inicio);

cout<<"\n Tiempo transcurrido: ";

r2.imprimir();

getch();

l=l.elegir_ganador(r,r1,r2);

cout<<"\n El menor tiempo logrado es: ";

l.imprimir();

cout<<"\n El ganador es: ";

p.elegir(l,r,r1,r2);

getch();

clrscr();

cout<<"\n Si desea continuar presione 'a',\n Caso contrario cualquier tecla. ";

cin>>op;

- 107

-

clrscr();

}while (op=='a' || op=='A');

clrscr();

cout<<"\n\t\t\t FIN DEL PROGRAMA ";

}

PROBLEMA PROPUESTO 05:

#include <conio.h>

#include <iostream.h>

#include <string.h>

#include <stdlib.h>

#include<stdio.h>

class estudiante {

long int cedula;

char ci[11];

char nombre [20];

int edad;

double notas [4];

public:

void ingreso();

void imprimir();

void promedio();

estudiante();

double validar(double nota);

- 108

-

int validar_cedula(char h[11]);

void validar_edad(int d);

};

void estudiante::validar_edad(int d){

while(d<5 || d>38){

cout<<"\n Ingrese nuevamente la edad del alumno: ";

cin>>edad;

}

}

int estudiante::validar_cedula(char h[11]){

int B[10];

long int a;

if(h[0]==0){

B[0]=0;

a=atol(h);

long int num=a, c;

int i=9, r;

do{

c=num/10;

r=num%10;

num=c;

B[i]=r;

- 109

-

i--;

}while(i>=0);

int acum=0, acum1=0, u, l,h;

for(int o=0; o<9; o+=2){

u=(B[o]*2);

if(u>9){

u=u-9;

}

acum=acum+u;

}

for(int t=1; t<9; t+=2){

acum1=acum1+B[t];

}

l=acum+acum1;

h=(10-(l%10));

if(h==10){

h=0;

}

if(h==B[9]){

return(1);

}

- 110

-

else {

return(0);

}

}

else{

long int num, c;

a=atol(h);

num=a;

int i=9, r;

do{

c=num/10;

r=num%10;

num=c;

B[i]=r;

i--;

}while(c!=0);

int acum=0, acum1=0, u, l,h;

for(int o=0; o<9; o+=2){

u=(B[o]*2);

if(u>9){

u=u-9;

}

acum=acum+u;

}

for(int t=1; t<9; t+=2){

- 111

-

acum1=acum1+B[t];

}

l=acum+acum1;

h=(10-(l%10));

if(h==10){

h=0;

}

if(h==B[9]){

return(1);

}

else{

return(0);

}

}

}

double estudiante::validar(double nota){

while(nota<0 || nota>20){

cout<<"\n Ingrese nuevamente la nota: ";

cin>>nota;

}

return (nota);

- 112

-

}

void estudiante::ingreso(){

cout <<"Ingrese la cedula de identidad: ";

cin>> ci;

while (validar_cedula(ci)==0){

fflush(stdout);

cout<<"\n Ingrese nuevamente la cedula de identidad: ";

cin>>ci;

}

cout <<"\n Ingrese el Nombre: ";

cin>> nombre;

cout <<"\n Ingrese la edad: ";

cin>> edad;

validar_edad(edad);

for (int i=0;i<3;i++){

cout<<"\n Ingrese la nota "<< i+1<<": ";

- 113

-

cin>>notas [i] ;

notas[i]=validar(notas[i]);

}

}

void estudiante:: imprimir(){

cout<<"\n Cedula de identidad: "<<ci;

cout<<"\n Nombre: "<< nombre;

cout<<"\n Edad: "<<edad;

for (int i=0; i<=3;i++){

if(i<=2){

cout<<"\n Nota "<<i+1<<": "<<notas [i];

}

else {

cout<<"\n Promedio: "<<notas[i];

}

}

}

void estudiante :: promedio (){

notas[3]=(notas [0]+notas[1]+notas[2])/3;

}

- 114

-

estudiante::estudiante(){

cedula=0;

strcpy(nombre, " ");

edad=0;

for(int i=0; i<4; i++){

notas[i]=0;

}

}

void main(){

estudiante a [1];

char op;

do{

clrscr();

cout<<"\n\t Programa para el ingreso de datos de alumnos.\n\n";

for (int i=0; i<1; i++){

a[i].ingreso();

a[i].promedio();

- 115

-

}

for (int o=0; o<1; o++){

a[o].imprimir();

}

getch();

cout<<"\n desea continuar presione 'a'.\n Caso contrario cualquier tecla.";

cin>>op;

}while(op=='a' || op=='A');

clrscr();

cout<<"\n \t\t\t FIN DEL PROGRAMA";

}

SOLUCIÓN PROBLEMA PROPUESTO 06:

#include<iostream.h>

#include<conio.h>

#include<string.h>

#include<stdlib.h>

#include<stdio.h>

#include<ctype.h>

class agenda{

char dir [30], nombre[15], apellido[15],num[10], cel[10];

public:

void ingreso(int q);

- 116

-

void organizar(agenda lista[], int num);

void organizar1(agenda lista[], int num);

void buscar(agenda lista[],int n);

int borrar(agenda lista[], int num);

static void print_cabezera();

void imprimir(agenda d, int r);

agenda (); //u

agenda repetidos(agenda a, agenda b, int i);

static void muestre(){

clrscr();

cout<<"\n\t\t **** AGENDA TELEFONICA VIRTUAL ****\n";

cout<<"\n\t MENU\n";

cout<<"\t 1.- Agregar Nuevo Contacto\n";

cout<<"\t 2.- Buscar Contacto\n";

cout<<"\t 3.- Ver todos los Contactos\n";

cout<<"\t 4.- Eliminar Contacto\n";

cout<<"\t 5.- Salir \n";

}

};

agenda::agenda(){

strcpy(dir," ");

strcpy(nombre," ");

- 117

-

strcpy(apellido," ");

strcpy(num," ");

strcpy(cel," ");

}

agenda agenda::repetidos(agenda a, agenda b, int i){

long int n,l,no,di,c=0;

do{

n=strcmp(a.num,b.num);

l=strcmp(a.cel,b.cel);

if(n==0 && l==0){

c++;

cout<<"\n Datos repetidos..........\n Ingrese nuevamente los datos incorrectos del contato

numero "<<i+1<<"\n\n";

cout<<"\n Numero de telefono fijo: ";

cin>>a.num;

no=atol(a.num);

di=strlen(a.num);

while(no<=11111111 ||di!=9){

cout<<"\n Dato incorrecto.....\n Recuerde que se grabaran numeros de ";//7 digitos

dentro de Pichincha.\n";

cout<<"9 digitos \n (incluyendo el codigo de ubicacion provincial).\n";

cout<<" Y solo se aceptan numeros no letras.\n Vuelva a ingresar el numero: ";

cin>>a.num;

no=atol(a.num);

di=strlen(a.num);

- 118

-

}

cout<<"\n Numero de telefono movil: ";

cin>>a.cel;

no=atol(a.cel);

di=strlen(a.cel);

while(no<=11111111 || di!=9){

cout<<"\n Dato incorrecto.....\n Vuelva a ingresar el numero: ";

cin>>a.cel;

no=atol(a.cel);

di=strlen(a.cel);

}

}

else{

c=0;

}

}while(c!=0);

return(a);

}

void agenda::ingreso(int q){

long int no, c=0;

int di;

- 119

-

cout<<"\n Contacto numero "<<q+1;

cout<<"\n Nombre de contacto: ";

gets(nombre);

cout<<"\n Apellido del Contato: ";

gets(apellido);

cout<<"\n Direccion: ";

gets(dir);

cout<<"\n Numero de telefono fijo: ";

cin>>num;

no=atol(num);

di=strlen(num);

if(di==9 ){//|| di==7){

c=1;

}

while(no<=11111111 ||c==0){

cout<<"\n Dato incorrecto.....\n Recuerde que se grabaran numeros de ";//7 digitos

dentro de Pichincha.\n";

cout<<"9 digitos \n (incluyendo el codigo de ubicacion provincial).\n";

cout<<" Y solo se aceptan numeros no letras.\n Vuelva a ingresar el numero: ";

cin>>num;

c=0;

no=atol(num);

di=strlen(num);

- 120

-

if(di==9){// || di==7){

c=1;

}

}

cout<<"\n Numero de telefono movil: ";

cin>>cel;

no=atol(cel);

di=strlen(cel);

while(no<=11111111 || di!=9){

cout<<"\n Dato incorrecto.....\n Vuelva a ingresar el numero: ";

cin>>cel;

no=atol(cel);

di=strlen(cel);

}

}

void agenda::print_cabezera(){

cout<<"\nPos. Nombre\t Apellido\t Direccion\t Telf. Fijo Telf. Movil\n";

cout<<"--------------------------------------------------------------------------------";

}

void agenda::imprimir(agenda d, int r){

int a=atol(d.num);

cout<<"\n "<<r+1<<" ";

- 121

-

if(a!=-1){

cout<<d.nombre;

for(int i=0;i<(16-(strlen(d.nombre)));i++){

cout<<" ";

}

cout<<d.apellido;

for(int o=0;o<(18-(strlen(d.apellido)));o++){

cout<<" ";

}

cout<<d.dir;

for(int u=0;u<(18-(strlen(d.dir)));u++){

cout<<" ";

}

cout<<d.num;

for(int v=0;v<(12-(strlen(d.num)));v++){

cout<<" ";

}

cout<<d.cel;

}

}

void agenda::buscar(agenda lista[],int n){

organizar(lista,n);

int op,m=0,s;

- 122

-

char a[15], op1[2];

cout<<"\n Buscar Contactos por:\n 1.- Apellido del contacto.\n 2.- Numero fijo del

contacto.\n 3.- Numero movil del contacto.\n ";

cin>>op1;

op=atoi(op1);

while (op<1 || op>3){

cout<<"\n Opcion incorreta,.,.,.\n Vuelva a ingresar su opcion: ";

cin>>op1;

op=atoi(op1);

}

switch(op){

case 1:

//////////////////////////////////////////////////////////////////

//////////////////////

cout<<"\n Ingrese el apellido: "; ///// usando las funciones que nos ofrece la

biblioteca string.h podemos hacer maravillas

gets(a);

cout<<"\n Resultados mas proximos para: "<<a;

agenda::print_cabezera();

for(int i=0;i<n;i++){

s=strnicmp(a,lista[i].apellido,strlen(a)); //////comparacion de n caracteres de dos

cadenas

if(s==0){

lista[i].imprimir(lista[i],i);

m++;

}

}

- 123

-

cout<<"\n "<<m<<" Contactos encontrados.";

if(m==0) {

cout<<"\n No existen registros albergados con el prefijo: "<<a<<endl;

}

break;

case 2:

cout<<"\n Ingrese el numero fijo: "; //////busqueda por telefono fijo

gets(a);

cout<<"\n Resultados para: "<<a;

agenda::print_cabezera();

for(int x=0;x<n;x++){

s=strcmp(a,lista[x].num); //////comparacion de todos los caracteres de dos cadenas

if(s==0){

lista[x].imprimir(lista[x],x);

m++;

}

}

cout<<"\n "<<m<<" Contactos encontrados.";

if(m==0){

cout<<"\n No existen registros albergados con el numero: "<<a<<endl;

}

break;

- 124

-

case 3:

cout<<"\n Ingrese el numero movil: ";////busqueda por telefono movil

gets(a);

cout<<"\n Resultados para: "<<a;

agenda::print_cabezera();

for(int f=0;f<n;f++){

s=strcmp(a,lista[f].cel); //////comparacion de todos los caracteres de dos cadenas

if(s==0){

lista[f].imprimir(lista[f],f);

m++;

}

}

cout<<"\n "<<m<<" Contactos encontrados.";

if(m==0){

cout<<"\n No existen registros albergados con el numero: "<<a<<endl;

}

break;

}

}

void agenda::organizar(agenda lista[], int num){

- 125

-

char auxc[30];

for(int i=0;i<num-1;i++){

for(int j=0;j<num-1-i;j++){

if((stricmp(lista[j].nombre,lista[j+1].nombre)>0) || (strcmp(lista[j].num,"-1")==0)){

strcpy(auxc,lista[j].nombre);

strcpy(lista[j].nombre,lista[j+1].nombre);

strcpy(lista[j+1].nombre,auxc);

strcpy(auxc,lista[j].apellido);

strcpy(lista[j].apellido,lista[j+1].apellido);

strcpy(lista[j+1].apellido,auxc);

strcpy(auxc,lista[j].dir);

strcpy(lista[j].dir,lista[j+1].dir);

strcpy(lista[j+1].dir,auxc);

strcpy(auxc,lista[j].num);

strcpy(lista[j].num,lista[j+1].num);

strcpy(lista[j+1].num,auxc);

strcpy(auxc,lista[j].cel);

strcpy(lista[j].cel,lista[j+1].cel);

strcpy(lista[j+1].cel,auxc);

}

- 126

-

}

}

}

int agenda::borrar(agenda lista[], int num){

int op, ubi, del=0;

char nom[15], ap[15], op1[2];

cout<<"\n Borrar contacto conociendo:\n 1.- La posicion del contacto ha borrar en el

registro.";

cout<<"\n 2.- La identificacion (nombre y apellido) del contacto.\n";

cin>>op1;

op=atoi(op1);

while (op<1 || op>2){

cout<<"\n Opcion incorreta,.,.,.\n Vuelva a ingresar su opcion: ";

cin>>op1;

op=atoi(op1);

}

switch(op){

case 1:

cout<<"\n Ingrese la posicion: ";

cin>>ubi;

- 127

-

while (ubi<1 || ubi>num){

cout<<"\n Posicion incorreta o inexistente,.,.,.\n Vuelva a ingresar la ubicacion: ";

cin>>ubi;

}

for(int r=0; r<num; r++){

if(ubi-1==r){

strcpy(lista[r].num,"-1");

del++;

}

}

organizar(lista,num);

break;

case 2:

int lk=0;

cout<<"\n Ingrese el nombre: ";

cin>>nom;

cout<<"\n Ingrese el apellido: ";

cin>>ap;

for(int y=0; y<num; y++){

if((stricmp(lista[y].nombre,nom)==0)&&(stricmp(lista[y].apellido,ap)==0)){

strcpy(lista[y].num,"-1");

lk++;

del++;

}

- 128

-

}

organizar(lista,num);

if(lk==0){

cout<<"\n No existen contactos con esta descripcion: "<<nom<<", "<<ap;

}

break;

}

return(del);

}

void main (){

int num=0; //numero de contactos

agenda lista[45],m; //lista de contactos

int op, l=0;

char op1[2];

do{

num=num;

agenda::muestre();

cin>>op1;

op=atoi(op1);

while (op<1 || op>5){

cout<<"\n Opcion incorreta,.,.,.\n Vuelva a ingresar su opcion: ";

getch();

- 129

-

clrscr();

agenda::muestre();

cin>>op1;

op=atoi(op1);

}

switch (op){

case 1:

lista[num].ingreso(num);

if(num>=1){

for (int u=0;u<num; u++){

lista[num]=lista[num].repetidos(lista[num], lista[u], num);

}

}

num++;

break;

case 2:

if(num!=0){

lista[num].buscar(lista,num);

cout<<"\n";

}

else

cout<<"\n Busqueda denegada......\n Actualmente no existen registros albergados.\n

Ingrese datos para recurrir a la busqueda.\n";

getch();

break;

- 130

-

case 3:

lista[num].organizar(lista,num);

agenda::print_cabezera();

if((l==num-1)&&(num>1)){

for(int sz=0; sz<l;sz++){

lista[sz].imprimir(lista[sz],sz);

}

}

else{

for(int y=0; y<num;y++){

lista[y].imprimir(lista[y],y);

}

}

cout<<"\n--------------------------------------------------------------------------------";

if(num==0){

cout<<"\n Contactos Existentes "<<num<<".\n Ingrese datos "<<endl;

}

else{

cout<<"\n Contactos Existentes actualmente en el registro "<<num<<endl;

}

getch();

break;

case 4:

int el=0;

if(num!=0){

- 131

-

l=num;

el=lista[num].borrar(lista, num);

if(el!=0){

num--;

cout<<"\n Contacto Eliminado.......\n";

}

else

cout<<"\n Elimanacion fallida.\n";

}

else

cout<<"\n Eliminacion denegada......\n Actualmente no existen registros albergados.\n";

getch();

break;

}

} while(op!=5);

_exit(0);

}

SOLUCION PROBLEMA PROPUESTO 07:

#include<stdlib.h>

#include<stdlib.h>

#include<iostream.h>

#include<conio.h>

#include<stdio.h>

class fraccion{

int num,den;

public:

- 132

-

void ingresar();

void imprimir();

void validar();

int validar1(fraccion a);

fraccion operator * (fraccion b);

int MCD(int num, int den);

void operator !();

fraccion operator +(fraccion b);

fraccion operator -(fraccion b);

fraccion operator /(fraccion b);

int operator ==(fraccion b);

fraccion();

};

//implementacion de las funciones

fraccion::fraccion(){

num=0;

den=0;

}

void fraccion::validar(){

while(den==0){

cout<<"\n Error,.....Ingrese nuevamente el denominador.\n";

cin>>den;

}

}

int fraccion::operator ==(fraccion b){

if ((num==b.num)&&(den==b.den)){

return(0);

}

else

return(1);

}

- 133

-

int fraccion::MCD(int num, int den){

int t,i=2,mcd=1;

if(num<0 ){

num=(-1)*num;

den=(-1)*den;

do{

if (num%i==0 && den%i==0)

{

mcd=mcd*i;

num=num/i;

den=den/i;

i=2;

}

else

i++;

}while(i<=num);

return(mcd);

}

else{

do{

if (num%i==0 && den%i==0)

{

mcd=mcd*i;

num=num/i;

den=den/i;

i=2;

}

else

i++;

}while(i<=num);

return(mcd);

}

}

void fraccion::operator !(){

int d=MCD(num, den);

num=num/d;

den=den/d;

- 134

-

}

void fraccion::ingresar(){

char a[5], b[5];

cout<<"\n Ingrese el numerador: ";

cin>>a;

num=atoi(a);

cout<<"\n Ingrese el denominador: ";

cin>>b;

den=atoi(b);

validar();

}

void fraccion::imprimir(){

if(num==0){

cout<<"\n La fraccion es: 0\n";

}

else if(den==1){

cout<<"\n La fraccion equivale a "<<num<<" como numero entero\n";

}

else {

cout<<"\n La fraccion es: ";

cout<<num<<"/"<<den<<endl;

}

}

fraccion fraccion:: operator *( fraccion b){

fraccion aux;

aux.num=num*b.num;

aux.den=den*b.den;

return(aux);

}

fraccion fraccion::operator+( fraccion b){

fraccion y;

y.den=den*b.den;

- 135

-

y.num=(((y.den/den)*num)+((y.den/b.den)*b.num));

return (y);

}

fraccion fraccion::operator -(fraccion b){

fraccion y;

y.den=den*b.den;

y.num=(((y.den/den)*num)-((y.den/b.den)*b.num));

return (y);

}

int fraccion::validar1(fraccion a){

if(a.den==0)

return(0);

else

return(1);

}

fraccion fraccion::operator /(fraccion b){

fraccion d;

if(b.num<0){

b.num=(-1)*b.num;

d.num=num*b.den;

d.num=(-1)*d.num;

d.den=den*b.num;

return(d);

}

else{

d.num=num*b.den;

d.den=den*b.num;

return(d);

}

}

//programa pricipal

- 136

-

void main (){

fraccion a,b,c;

int t, as;

char op;

do{

cout<<"\n\t\t Programa para realizar operaciones entre fracciones.\n";

a.ingresar();

a.imprimir();

b.ingresar();

b.imprimir();

!a;

!b;

cout<<"\n Suma: ";

c=a+b;

!c;

c.imprimir();

getch();

cout<<"\n Resta: ";

c=a-b;

!c;

c.imprimir();

getch();

c=a*b;

!c;

cout<<"\n Multiplicacion: ";

c.imprimir();

getch();

cout<<"\n Division: ";

c=a/b;

as=c.validar1(c);

if(as==0){

cout<<"\n La division no se puede realizar pues la segunda fraccion es cero.";

}

else{

!c;

c.imprimir();

}

getch();

t=(a==b);

- 137

-

if(t==0){

cout<<"\n Las fracciones ingresadas son iguales.\n";

}

else{

cout<<"\n Las fracciones ingresadas no son iguales.\n";

}

cout<<"\n Desea seguir operando, presione 'a'. \n Caso contrario cualquier tecla.";

cin>>op;

clrscr();

}while (op=='a' || op=='A');

_exit(0);

}

PROBLEMA PROPUESTO 08:

El Programa de conjuntos pero con sobre carga.

#include<iostream.h>

#include<conio.h>

#include<stdlib.h>

class conjuntos{

int u[10];

public:

void ingreso();

void imprimir();

void copia(conjuntos r,conjuntos s);

conjuntos operator ||(conjuntos e);

conjuntos operator &&(conjuntos s);

void operator !();

int validar(int u);

conjuntos();

conjuntos operator +(conjuntos b);

conjuntos operator -(conjuntos b);

void operator ++();

int operator==(conjuntos b);

};

- 138

-

int conjuntos::operator ==(conjuntos b){

int p=0;

for(int i=0; i<5; i++){

if(u[i] == b.u[i]){

p++;

}

}

return(p);

}

void conjuntos::operator++(){

for(int i=0; i<5; i++){

u[i]++;

}

}

conjuntos conjuntos :: operator - (conjuntos b){

conjuntos aux;

for(int i=0; i<5; i++){

aux.u[i]=b.u[i]-u[i];

}

return(aux);

}

conjuntos conjuntos::operator +(conjuntos b){

conjuntos aux;

for(int i=0; i<5; i++){

aux.u[i]=u[i]+b.u[i];

}

return(aux);

}

int conjuntos::validar(int u){

- 139

-

while(u<=0){

cout<<"\n Dato incorrecto vuelva a ingresar el dato: ";

cin>>u;

}

return(u);

}

void conjuntos::ingreso(){

cout<<"\n Ingrese los elementos: ";

for (int p=0; p<5;p++){

cout<<"\n Elemento "<<p+1<<": ";

cin>>u[p];

u[p]=validar(u[p]);

}

}

void conjuntos::imprimir(){

cout<<"\n Conjunto: \n";

cout<<"( ";

for (int j=0; j<10; j++){

if (u[j]>0)

cout<< u[j]<<" ";

}

cout<<")\n";

}

conjuntos::conjuntos(){

for (int i=0; i<10; i++){

u[i]=-1;

}

}

conjuntos conjuntos::operator && (conjuntos s){

- 140

-

conjuntos w;

for(int i=0; i<5; i++){

for(int o=0; o<5; o++){

if(u[i]==s.u[o]){

w.u[i]=u[i];

}

}

}

for(int k=0;k<5;k++){

for(int j=k+1;j<5;j++){

if(w.u[k]==w.u[j])

w.u[j]=(-1);

}

}

!w;

return (w);

}

conjuntos conjuntos :: operator ||(conjuntos e){

conjuntos w;

for(int i=0; i<5; i++){

e.u[i+5]=u[i];

}

for(int k=0;k<10;k++){

for(int j=k+1;j<10;j++){

if(e.u[k]==e.u[j])

e.u[j]=(-1);

}

}

!e;

return (e);

}

- 141

-

void conjuntos::operator !(){

int q;

for(int z= 0; z<10; z++){

for(int s= z+1; s <10; s++)

{

if(u[z] >u[s])

{

q = u[z];

u[z] = u[s];

u[s] = q;

}

}

}

}

void main (){

clrscr();

conjuntos a,b, c;

char op;

int t;

do{

cout<<"\n\t Prigrama para realizar operaciones entre conjuntos.\n";

cout<<"\n Conjunto A: ";

a.ingreso();

a.imprimir();

cout<<"\n Conjunto B: ";

b.ingreso();

b.imprimir();

c=a&&b;

getch();

cout<<"\nLa Interseccion entre A y B es: ";

c.imprimir();

getch();

cout<<"\n La Union de los Conjuntos A y B: ";

c=a||b;

c.imprimir();

getch();

cout<<"\n Sumando A + B: ";

c=a+b;

- 142

-

c.imprimir();

getch();

cout<<"\n Restando B - A: ";

c=a-b;

c.imprimir();

getch();

cout<<"\n Realizando operacion A++: ";

a++;

a.imprimir();

getch();

cout<<"\n Comprobando si A==B ";

t=(a==b);

if(t==5){

cout<<"\n El conjunto A es igual al conjunto B.\n";

}

else{

cout<<"\n El conjunto A no es igual al conjunto B.\n";

}

getch();

cout<<"\n Digite 'a' si desea continuar.\n Caso contrario cualquier tecla. ";

cin>>op;

clrscr();

}while(op=='a' || op=='A');

_exit(0);

}

SOLUCION PROBLEMA PROPUESTO 09:

#include<stdlib.h>

#include<conio.h>

#include<iostream.h>

#include<string.h>

class fechas{

int dias[13];

long int fecha[3];

public:

- 143

-

void ingreso();

void imprimir();

friend fechas operator ++(fechas a);

friend int operator ==(fechas a, fechas b);

fechas();

int carga_dias(int m);

friend int bisiesto(int anio);

};

fechas::fechas(){

for(int i=0; i<3; i++){

fecha[i]=0;

}

for(int j=0; j<13; j++){

dias[j]=0;

}

dias[0]=31;

dias[1]=28;

dias[2]=31;

dias[3]=30;

dias[4]=31;

dias[5]=30;

dias[6]=31;

dias[7]=31;

dias[8]=30;

dias[9]=31;

dias[10]=30;

dias[11]=31;

dias[12]=29;

}

int bisiesto(int anio){

int s=0;

if ((anio % 4 == 0) && ((anio % 100 != 0) || (anio % 400 == 0))){

s++;

}

return(s);

}

- 144

-

void fechas::ingreso(){

char op[3], op1[5];

long int l=0, dia, mes, anio, p, k;

cout<<"\n Ingrese la fecha en formato aaaa/mm/dd.\n\t\t";

cout<<"\n Ingrese el anio: ";

cin>>op1;

l=strlen(op1);

anio=atoi(op1);

while(anio<1700 ||anio>3000 || l!=4){

cout<<"\n\t ERROR..... anio incorrecto.\n Ingrese nuevamente el dato: ";

cin>>op1;

l=strlen(op1);

anio=atoi(op1);

}

p=bisiesto(anio);

fecha[2]=anio;

if(p==1){

cout<<"\n El anio ingresado hace referencia a un anio bisiesto.";

}

cout<<"\n Ingrese el mes: ";

cin>>op;

l=strlen(op);

mes=atoi(op);

while(mes<1 || mes>12 || l!=2){

cout<<"\n\t ERROR..... mes incorrecto.\n\t Ingrese nuevamente el dato: ";

cin>>op;

l=strlen(op);

mes=atoi(op);

}

fecha[1]=mes;

if(p==0){

k=carga_dias(mes-1);

cout<<"\n Ingrese el dia: ";

cin>>op;

l=strlen(op);

dia=atoi(op);

while(dia<1 || dia>k || l!=2){

cout<<"\n\t ERROR..... dia incorrecto.\n\t Ingrese nuevamente el dato: ";

cin>>op;

l=strlen(op);

dia=atoi(op);

- 145

-

}

fecha[0]=dia;

}

else{

cout<<"\n Ingrese el dia: ";

if(mes==2){

cin>>op;

l=strlen(op);

dia=atoi(op);

while(dia<1 || dia>29 || l!=2){

cout<<"\n\t ERROR..... dia incorrecto.\n\t Ingrese nuevamente el dato: ";

cin>>op;

l=strlen(op);

dia=atoi(op);

}

fecha[0]=dia;

}

else{

cin>>op;

l=strlen(op);

dia=atoi(op);

k=carga_dias(mes-1);

while(dia<1 || dia>k || l!=2){

cout<<"\n\t ERROR..... dia incorrecto.\n\t Ingrese nuevamente el dato: ";

cin>>op;

l=strlen(op);

dia=atoi(op);

}

fecha[0]=dia;

}

}

}

void fechas::imprimir(){

cout<<"\n La fecha es: ";

for(int i=2; i>=0; i--){

if (i>0){

cout<<fecha[i]<<"/";

- 146

-

}

else{

cout<<fecha[i];

}

}

}

int operator ==(fechas a, fechas b){

int r=0;

for(int i=0; i<3; i++){

if(a.fecha[i]==b.fecha[i]){

r++;

}

}

return(r);

}

int fechas::carga_dias(int m){

fechas is;

for(int i=0; i<13; i++){

if (i==m){

return(is.dias[i]);

}

}

}

fechas operator ++(fechas a){

long int w=0, d=0,t=0, y=0, aux=0;

int m=0, p=0;

p=bisiesto(a.fecha[2]);

m=a.fecha[1];

if (p==0 ){

a.fecha[0]=a.fecha[0]+1;

m=m-1;

aux=a.carga_dias(m);

if(a.fecha[0]>aux){

a.fecha[0]=a.fecha[0]-a.dias[m];

t++;

}

if(t!=0){

- 147

-

a.fecha[1]=a.fecha[1]+1;

if (a.fecha[1]>12){

a.fecha[1]=a.fecha[1]-12;

y++;

}

if(y!=0){

a.fecha[2]=a.fecha[2]+1;

}

}

return(a);

}

else{

a.fecha[0]=a.fecha[0]+1;

m=a.fecha[1]-1;

if((m+1)!=2){

aux=a.carga_dias(m);

if(a.fecha[0]>aux){

a.fecha[0]=a.fecha[0]-a.dias[m];

t++;

}

if(t!=0){

a.fecha[1]=a.fecha[1]+1;

if (a.fecha[1]>12){

a.fecha[1]=a.fecha[1]-12;

y++;

}

if(y!=0){

a.fecha[2]=a.fecha[2]+1;

}

}

return(a);

}

else{

- 148

-

aux=a.carga_dias(m+11);

if(a.fecha[0]>aux){

a.fecha[0]=a.fecha[0]-a.dias[m+11];

t++;

}

if(t!=0){

a.fecha[1]=a.fecha[1]+1;

if (a.fecha[1]>12){

a.fecha[1]=a.fecha[1]-12;

y++;

}

if(y!=0){

a.fecha[2]=a.fecha[2]+1;

}

}

return(a);

}

}

}

void main (){

fechas a, b, c;

char op;

do{

clrscr();

int f=0;

cout<<"\n\t\t Programa para trabajar con fechas.\n";

cout<<"\n Primera fecha: ";

a.ingreso();

a.imprimir();

cout<<"\n Segunda fecha: ";

b.ingreso();

b.imprimir();

cout<<"\n\n La primera fecha con un dia aumentado es: ";

a=a++;

- 149

-

getch();

a.imprimir();

cout<<"\n\n La segunda fecha con un dia aumentado es: ";

b=b++;

getch();

b.imprimir();

f=(a==b);

getch();

if(f==3){

cout<<"\n Las fechas ingresadas son iguales.\n";

}

else{

cout<<"\n Las fechas ingresadas no son iguales.\n";

}

getch();

cout<<"\n Digite 'a' para continuar.\n Caso contrario cualquier tecla. ";

cin>>op;

}while(op=='a' || op=='A');

_exit(0);

}

- 150

-

Corrección a los problemas de las pruebas:

Prueba número 1:

Ejercicio 1: Realizar un programa que nos permita obtener el producto cruz entre dos vectores de 3 dimensiones. Para esto usaremos la siguiente formula que hace referencia a cómo obtener el producto cruz entre dos vectores. Sabiendo que nos devuelve un vector temos:

Código:

#include<iostream.h>

#include<conio.h>

class vector{

double x,y,z;

public:

void ingreso();

void imprimir();

vector producto(vector a, vector b);

vector();// usamos el constructor sin argumentos

};

void vector::ingreso(){

cout<<"\n Ingreso de datos de los vectores:\n";

cout<<"\n Ingrese la coordenada en x: ";

cin>>x;

cout<<"\n Ingrese la coordenada en y: ";

cin>>y;

- 151

-

cout<<"\n Ingrese la coordenada en z: ";

cin>>z;

}

void vector::imprimir(){

cout<<" ("<<x<<"i, "<<y<<"j, "<<z<<"k)";

}

vector::vector(){ // construtor sin argumentos

x=0;

y=0;

z=0;

}

vector vector::producto(vector a, vector b){

vector r;

r.x=((a.y*b.z)-(a.z*b.y));

r.y=(-1)*((a.x*b.z)-(a.z*b.x));

r.z=((a.x*b.y)-(a.y*b.x));

return (r);

- 152

-

}

void main (){

vector f, g, h;

char op;

do{

clrscr();

//f.imprimir(); esta linea nos permitira vizualizar si el objeto esta inicializado

cout<<"\n\t\t Programa para calcular el producto cruz entre\n\t\t dos vectores de 3 dimensiones (ax, by, cz).\n";

f.ingreso();

g.ingreso();

getch();

clrscr();

cout<<" \n Datos ingresados:\n\n Vector A: ";

f.imprimir();

cout<<"\n\n Vector B: ";

g.imprimir();

h=h.producto(f, g);

cout<<"\n\n El Vector resultante de realizar la operacion A x B es: \n\n\t\t";

getch();

h.imprimir();

getch();

cout<<"\n\n\n Para continuar presione 'a'.\n Caso contrario presione cualquier tecla.\n";

cin>>op;

}while (op=='a' || op=='A');

clrscr();

- 153

-

cout<<"\n\t\t\t FIN DEL PROGRAMA";

}

Ejercicio 2:

Realizar un programa que pida ingresar tres punto pertenecientes a los vértices del triángulo que forman, ya sea en coordenadas polares o rectangulares, y nos vizualice por pantalla el área del triángulo.

Para esto usamos:

Sabiendo que el determinante esta en valor absoluto

CODIGO

# include <conio.h>

# include <iostream.h>

# include <math.h>

class punto{

double x, y,radio,angulo;

public:

int ingreso();

void imprimir(int a);

punto(); // sin argumentos por que no lleva nada dentro del parentesis

double area(punto a ,punto b, punto c);

punto convertir(punto a,int c);

void validar(double a);

};

int punto::ingreso(){

int op,i;

- 154

-

do{

i=0;

cout<<" Menu \n";

cout<<"1.- Rectangulares\n";

cout<<"2.- Polares \n";

cin>>op;

if (op<3 && op>0){

switch(op){

case 1:

cout<<"\n Ingrese la coordenada en x: ";

cin>> x;

cout<<"\n Ingrese la coordenada en y: ";

cin>>y;

break;

case 2:

cout<<"\n Ingrese el radio: ";

cin>> radio;

cout<<"\n Ingrese el angulo: ";

cin>>angulo;

validar(radio);

break;

}

}

else{

- 155

-

cout<<"\n Opcion incorreta.\n Vuelva ha ingresar su opcion: ";

i++;

getch();

clrscr();

}

}while(i!=0);

return (op);

}

void punto::validar(double a){

if(a<=0){

cout<<"\n Dato incorrecto..... Vuelva ha ingresarlo";

ingreso();

}

}

void punto:: imprimir(int a){

if (a==1)

cout<<"("<<x<<","<<y<<")\n";

else

cout<<"radio :"<<radio<<" angulo: "<<angulo<<"\n";

}

punto::punto(){

x=0;

y=0;

- 156

-

radio=0;

angulo=0;

}

double punto ::area (punto a, punto b, punto c)

{

double d1, d2,d3,p,s,r;

d1=sqrt(pow((a.x-b.x),2)+pow((a.y-b.y),2));

d2=sqrt(pow((a.x-c.x),2)+pow((a.y-c.y),2));

d3=sqrt(pow((b.x-c.x),2)+pow((b.y-c.y),2));

p=(d1+d2+d3)/2;

s=p*(p-d1)*(p-d2)*(p-d3);

r=sqrt(s);

return (r);

}

punto punto:: convertir(punto a,int c)

{

punto r;

if (c==2)

{

r.x=a.radio*cos(a.angulo*(3.1416/180));

r.y=a.radio*sin(a.angulo*(3.1416/180));

}

return (r);

- 157

-

}

void main (){

clrscr();

int x,y,z;

double a;

punto obj1, obj2,obj3,o1,o2,o3,res;

x=obj1.ingreso();

obj1.imprimir(x);

y=obj2.ingreso();

obj2.imprimir(y);

z=obj3.ingreso();

obj3.imprimir(z);

if(x==2)

{

o1=o1.convertir(obj1,x);

}

else

{

o1=obj1;

}

if(y==2)

{

o2=o2.convertir(obj2,y);

}

else

- 158

-

{

o2=obj2;

}

if (z==2)

{

o3=o3.convertir(obj3,z);

}

else

{

o3=obj3;

}

a=res.area(o1,o2,o3);

cout<<"El area de un triangulo es:";

cout<<a;

getch();

clrscr();

}

- 159

-

Prueba número 2:

Ejercicio 1:

La clase fibonancci contiene un dato miembro llamado num que conforma un dato de la serie de fibonancci que se genera en base a un dato ingresado por el usuario que determina el numero de términos a generarse en la serie.

Un numero de la serie se genera en base a la suma de los dos anteriores por ejemplo si el usuario ingresa el dato de 6 la serie generadá será

1 1 2 3 5 8

Donde los dos primeros 1 y 1 son los dos primeros datos .Utilizar un constructor que inicialice los dos primeros datos de la serie. Reolver utilizando sobregcargade operadores.

CODIGO

# include <iostream.h>

# include <conio.h>

class fibonancci{

int num;

public:

fibonancci();

friend fibonancci operator +(fibonancci a,fibonancci b);

friend ostream & operator<< (ostream &os,fibonancci & c);

};

fibonancci :: fibonancci (){

num=1;

}

fibonancci operator + (fibonancci a, fibonancci b){

- 160

-

fibonancci aux;

aux.num=a.num+b.num;

return (aux);

}

ostream & operator << (ostream &os, fibonancci & c){

cout<<" "<<c.num<<" ";

return(os);

}

void main(){

clrscr();

int n;

char op;

do{

fibonancci a,b,c;

cout<<"\n \n \t \t \t SERIE DE FIBONANCCI \n";

cout<<"\n Ingrese El numero de Terminos : ";

cin>> n;

cout <<"\n";

if (n==1)

cout<<a;

else

cout<<a<<b;

for (int i=2;i<n;i++){

c=a+b;

- 161

-

a=b;

b=c;

cout<<c;

}

cout<<"\n\n\n";

cout<<"\n Para Continuar presione A :";

cin>>op;

}while(op=='a' || op=='A');

getch();

}

Ejercicio 2:

La clase llamada operastring cuyo dato miembro es palabra dato tipo char de 220 caracteres,u utilizando sobrecarga de operadores realizar la restade dos palabras (-), por ejemplo:

MARTE ES UN PLANETA es la cadena 1.

ES UN PLANETA es la cadena 2.

Al Hacer la resta debe quedar MARTE.

CODIGO

# include <iostream .h>

# include <conio.h>

# include <string.h>

# include <stdlib.h>

# include <stdio.h>

class operastring{

char palabra[20];

public:

- 162

-

operastring();

friend istream & operator>>(istream &in, operastring &c);

friend ostream & operator<<(ostream &os, operastring &c);

friend operastring operator - (operastring a, operastring b);

};

operastring ::operastring (){

strcpy(palabra," ");

}

istream & operator >>(istream &in, operastring &c){

cout<<"\n Ingrese la Cadena :\n";

gets (c.palabra);

return(in);

}

ostream & operator <<(ostream &os, operastring &c){

// cout<<"\n La Cadena : ";

cout<<c.palabra;

return(os);

}

operastring operator -(operastring a, operastring b){

operastring aux, resp;

int a1=0,b1=0,c1=0;

char cad1[81]="Resta es :";

- 163

-

a1=strlen(a.palabra);

cout<<a1<<"\n";

strcpy(aux.palabra,(strstr(a.palabra,b.palabra)));

b1=strlen(aux.palabra);

cout<<b1<<"\n";

c1=a1-b1;

cout<<c1<<"\n";

strcpy(resp.palabra,(strncat(cad1,a.palabra,c1)));

return(resp);

}

void main(){

clrscr();

char op;

do{

operastring a,b,c;

cout<<"La Resta de Dos Cadenas";

cout<<"\n Cadena 1 : \n";

cin>>a;

cout<<"\n Cadena 2 : \n";

cin>>b;

c=a-b;

cout<<c;

cout<<"\n Para Continuar presione A :";

cin>>op;

}while(op=='A'|| op=='a');

- 164

-

getch();

}

Ejercicio 3:

Una clase llamada frecuencia tiene como dato miembro un arreglo de 10 elementos utilizando sobrecarga realizar el ingreso de n elementos , según el usuario lo desee, los datos a se ingresados son dígitos del 1 al 9 .Con una función sobrecarga dividir cada elemento del arreglo para el número con mayor número de frecuencia.

EJEMPLO:

2 2 4 4 5 7 4 7 el número con mayor frecuencia es el 4 por lo tanto cada elemento debe ser dividido para 4 y presentar su resultado (sobrecarga de impresión).

CODIGO

# include <iostream.h>

# include <conio.h>

# include <stdio.h>

class frecuencia {

float el[10];

int n;

public:

frecuencia();

friend istream & operator>>(istream &in, frecuencia &c);

friend ostream & operator<<(ostream &os, frecuencia &c);

friend int contf (frecuencia a);

friend frecuencia operator -- (frecuencia a);

};

frecuencia :: frecuencia(){

for(int i=0;i<10;i++){

- 165

-

el[i]=0;

}

}

int contf (frecuencia a){

frecuencia aux, aux1;

int f;

int q;

int res=0;

for(int i=1;i<10;i++){

f=0;

for(int j=0;j<10;j++){

if(a.el[j]==i){

f=f+1;

}

}

aux.el[i]=f;

aux1.el[i]=f;

// cout<<aux1.el[i];

}

//Ordenar

for(int z= 0; z<10; z++){

for(int s= z+1; s <10; s++)

{

if(aux.el[z] >aux.el[s])

- 166

-

{

q = aux.el[z];

aux.el[z] = aux.el[s];

aux.el[s] = q;

}

}

}

// cout<<":"<<q;

for(int r=0;r<9;r++){

if (aux1.el[r]==q)

res= r;

}

cout<<"\n La frecuencia mas alta es :"<<q;

return(res);

}

frecuencia operator -- (frecuencia a){

frecuencia aux;

int f;

float r;

f=contf(a);

cout<<"\n \n El Numero Con mayor Frecuencia:"<<f;

for(int i=0;i<10;i++){

r=a.el[i]/f;

aux.el[i]=r;

- 167

-

}

return(aux);

}

istream & operator >> (istream & in,frecuencia &c){

int n;

cout<<"\n Ingrese el numero de elementos :";

cin>>n;

while(n<=0 || n>10){

cout<<"\n Error...Ingrese El numero de Elementos: ";

cin>> n;

}

for(int i=0;i<n;i++){

cout<<"\n Ingrese el Elemento "<<i+1<<" = ";

cin>>c.el[i];

while(c.el[i]<=0 || c.el[i]>9){

cout<<"\n Error...Ingrese un Nuevo Elemento "<<i+1<<"= ";

cin>> c.el[i];

}

}

return(in);

}

ostream & operator<< (ostream &os, frecuencia &c){

cout<<"\n ( ";

- 168

-

for(int i=0;i<10;i++){

if(c.el[i]>0)

cout<<" "<<c.el[i]<<" ";

}

cout<<") "<<"\n";

return(os);

}

void main(){

clrscr();

char op;

do{

frecuencia a,b;

cout<<"\n\n \t\t\t Frecuencia \n\n";

cin>> a;

cout<<a;

b=--a;

cout<<"\n \n La Division de cada elemento para la Frecuencia :";

cout<<b;

cout<<"\n Para Continuar presione a : ";

cin>>op;

}while(op=='a'|| op=='A');

getch();

}

- 169

-

CONCLUSIONES

La programación oientada a objetos permite la optimización del código generdo gracias a que mediante tenicas de herencia, atributos estaticos entre otros permiten, que el código sea generico de manera que sea reutilizable.

Mediante las tenicas aprendidas en el presente curso podemos establecer una solución primitiva de un problema real, tan solo con relacionarlo con objetos lógicos que serán usados para el desarrollo del software.

Podemos dar a conocer de una forma sencilla los mecanismos que se usan en este nivel de programación, a personas que deseen una explicación rápida y sencilla de lo que es la programación orientada a objetos.

Tenemos los conocimientos necesarios como para enfrentar un problema real y desarollarlo en otro lenguaje de programación, pues consevimos la idea de que el lenguaje C es la base de la rogramacion.

Al trabajar con la programación orientada a objetos sea esta desarollada en otras plataformas de programación o en lenguaje C, sabemos

las formas de lograr un mejor rendimiento del equipo a controlar y aplicar

soluciones sencillas, de manera que sean fácilmente digeribles para el

usuario y/o destinatario del trabajo final.