169
- 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

ESCUELA POLITECNICA DEL EJÉRCITO PROGRAMACION II · 2011-11-21 · - 1 - ESCUELA POLITECNICA DEL EJÉRCITO PROGRAMACION II NOMBRES: Gabriela Nathaly LLumiquinga Geovanny Patricio

  • Upload
    others

  • View
    20

  • Download
    0

Embed Size (px)

Citation preview

Page 1: ESCUELA POLITECNICA DEL EJÉRCITO PROGRAMACION II · 2011-11-21 · - 1 - ESCUELA POLITECNICA DEL EJÉRCITO PROGRAMACION II NOMBRES: Gabriela Nathaly LLumiquinga Geovanny Patricio

- 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

Page 2: ESCUELA POLITECNICA DEL EJÉRCITO PROGRAMACION II · 2011-11-21 · - 1 - ESCUELA POLITECNICA DEL EJÉRCITO PROGRAMACION II NOMBRES: Gabriela Nathaly LLumiquinga Geovanny Patricio

- 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

Page 3: ESCUELA POLITECNICA DEL EJÉRCITO PROGRAMACION II · 2011-11-21 · - 1 - ESCUELA POLITECNICA DEL EJÉRCITO PROGRAMACION II NOMBRES: Gabriela Nathaly LLumiquinga Geovanny Patricio

- 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.

Page 4: ESCUELA POLITECNICA DEL EJÉRCITO PROGRAMACION II · 2011-11-21 · - 1 - ESCUELA POLITECNICA DEL EJÉRCITO PROGRAMACION II NOMBRES: Gabriela Nathaly LLumiquinga Geovanny Patricio

- 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

Page 5: ESCUELA POLITECNICA DEL EJÉRCITO PROGRAMACION II · 2011-11-21 · - 1 - ESCUELA POLITECNICA DEL EJÉRCITO PROGRAMACION II NOMBRES: Gabriela Nathaly LLumiquinga Geovanny Patricio

- 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

Page 6: ESCUELA POLITECNICA DEL EJÉRCITO PROGRAMACION II · 2011-11-21 · - 1 - ESCUELA POLITECNICA DEL EJÉRCITO PROGRAMACION II NOMBRES: Gabriela Nathaly LLumiquinga Geovanny Patricio

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

Page 7: ESCUELA POLITECNICA DEL EJÉRCITO PROGRAMACION II · 2011-11-21 · - 1 - ESCUELA POLITECNICA DEL EJÉRCITO PROGRAMACION II NOMBRES: Gabriela Nathaly LLumiquinga Geovanny Patricio

- 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.

Page 8: ESCUELA POLITECNICA DEL EJÉRCITO PROGRAMACION II · 2011-11-21 · - 1 - ESCUELA POLITECNICA DEL EJÉRCITO PROGRAMACION II NOMBRES: Gabriela Nathaly LLumiquinga Geovanny Patricio

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

Page 9: ESCUELA POLITECNICA DEL EJÉRCITO PROGRAMACION II · 2011-11-21 · - 1 - ESCUELA POLITECNICA DEL EJÉRCITO PROGRAMACION II NOMBRES: Gabriela Nathaly LLumiquinga Geovanny Patricio

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

Page 10: ESCUELA POLITECNICA DEL EJÉRCITO PROGRAMACION II · 2011-11-21 · - 1 - ESCUELA POLITECNICA DEL EJÉRCITO PROGRAMACION II NOMBRES: Gabriela Nathaly LLumiquinga Geovanny Patricio

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

}

Page 11: ESCUELA POLITECNICA DEL EJÉRCITO PROGRAMACION II · 2011-11-21 · - 1 - ESCUELA POLITECNICA DEL EJÉRCITO PROGRAMACION II NOMBRES: Gabriela Nathaly LLumiquinga Geovanny Patricio

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

Page 12: ESCUELA POLITECNICA DEL EJÉRCITO PROGRAMACION II · 2011-11-21 · - 1 - ESCUELA POLITECNICA DEL EJÉRCITO PROGRAMACION II NOMBRES: Gabriela Nathaly LLumiquinga Geovanny Patricio

- 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

Page 13: ESCUELA POLITECNICA DEL EJÉRCITO PROGRAMACION II · 2011-11-21 · - 1 - ESCUELA POLITECNICA DEL EJÉRCITO PROGRAMACION II NOMBRES: Gabriela Nathaly LLumiquinga Geovanny Patricio

- 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.

Page 14: ESCUELA POLITECNICA DEL EJÉRCITO PROGRAMACION II · 2011-11-21 · - 1 - ESCUELA POLITECNICA DEL EJÉRCITO PROGRAMACION II NOMBRES: Gabriela Nathaly LLumiquinga Geovanny Patricio

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

Page 15: ESCUELA POLITECNICA DEL EJÉRCITO PROGRAMACION II · 2011-11-21 · - 1 - ESCUELA POLITECNICA DEL EJÉRCITO PROGRAMACION II NOMBRES: Gabriela Nathaly LLumiquinga Geovanny Patricio

- 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++){

Page 16: ESCUELA POLITECNICA DEL EJÉRCITO PROGRAMACION II · 2011-11-21 · - 1 - ESCUELA POLITECNICA DEL EJÉRCITO PROGRAMACION II NOMBRES: Gabriela Nathaly LLumiquinga Geovanny Patricio

- 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

Page 17: ESCUELA POLITECNICA DEL EJÉRCITO PROGRAMACION II · 2011-11-21 · - 1 - ESCUELA POLITECNICA DEL EJÉRCITO PROGRAMACION II NOMBRES: Gabriela Nathaly LLumiquinga Geovanny Patricio

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

Page 18: ESCUELA POLITECNICA DEL EJÉRCITO PROGRAMACION II · 2011-11-21 · - 1 - ESCUELA POLITECNICA DEL EJÉRCITO PROGRAMACION II NOMBRES: Gabriela Nathaly LLumiquinga Geovanny Patricio

- 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.

Page 19: ESCUELA POLITECNICA DEL EJÉRCITO PROGRAMACION II · 2011-11-21 · - 1 - ESCUELA POLITECNICA DEL EJÉRCITO PROGRAMACION II NOMBRES: Gabriela Nathaly LLumiquinga Geovanny Patricio

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

Page 20: ESCUELA POLITECNICA DEL EJÉRCITO PROGRAMACION II · 2011-11-21 · - 1 - ESCUELA POLITECNICA DEL EJÉRCITO PROGRAMACION II NOMBRES: Gabriela Nathaly LLumiquinga Geovanny Patricio

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

Page 21: ESCUELA POLITECNICA DEL EJÉRCITO PROGRAMACION II · 2011-11-21 · - 1 - ESCUELA POLITECNICA DEL EJÉRCITO PROGRAMACION II NOMBRES: Gabriela Nathaly LLumiquinga Geovanny Patricio

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

Page 22: ESCUELA POLITECNICA DEL EJÉRCITO PROGRAMACION II · 2011-11-21 · - 1 - ESCUELA POLITECNICA DEL EJÉRCITO PROGRAMACION II NOMBRES: Gabriela Nathaly LLumiquinga Geovanny Patricio

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

Page 23: ESCUELA POLITECNICA DEL EJÉRCITO PROGRAMACION II · 2011-11-21 · - 1 - ESCUELA POLITECNICA DEL EJÉRCITO PROGRAMACION II NOMBRES: Gabriela Nathaly LLumiquinga Geovanny Patricio

- 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: ";

Page 24: ESCUELA POLITECNICA DEL EJÉRCITO PROGRAMACION II · 2011-11-21 · - 1 - ESCUELA POLITECNICA DEL EJÉRCITO PROGRAMACION II NOMBRES: Gabriela Nathaly LLumiquinga Geovanny Patricio

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

Page 25: ESCUELA POLITECNICA DEL EJÉRCITO PROGRAMACION II · 2011-11-21 · - 1 - ESCUELA POLITECNICA DEL EJÉRCITO PROGRAMACION II NOMBRES: Gabriela Nathaly LLumiquinga Geovanny Patricio

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

}

Page 26: ESCUELA POLITECNICA DEL EJÉRCITO PROGRAMACION II · 2011-11-21 · - 1 - ESCUELA POLITECNICA DEL EJÉRCITO PROGRAMACION II NOMBRES: Gabriela Nathaly LLumiquinga Geovanny Patricio

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

Page 27: ESCUELA POLITECNICA DEL EJÉRCITO PROGRAMACION II · 2011-11-21 · - 1 - ESCUELA POLITECNICA DEL EJÉRCITO PROGRAMACION II NOMBRES: Gabriela Nathaly LLumiquinga Geovanny Patricio

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

}

}

Page 28: ESCUELA POLITECNICA DEL EJÉRCITO PROGRAMACION II · 2011-11-21 · - 1 - ESCUELA POLITECNICA DEL EJÉRCITO PROGRAMACION II NOMBRES: Gabriela Nathaly LLumiquinga Geovanny Patricio

- 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.

Page 29: ESCUELA POLITECNICA DEL EJÉRCITO PROGRAMACION II · 2011-11-21 · - 1 - ESCUELA POLITECNICA DEL EJÉRCITO PROGRAMACION II NOMBRES: Gabriela Nathaly LLumiquinga Geovanny Patricio

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

Page 30: ESCUELA POLITECNICA DEL EJÉRCITO PROGRAMACION II · 2011-11-21 · - 1 - ESCUELA POLITECNICA DEL EJÉRCITO PROGRAMACION II NOMBRES: Gabriela Nathaly LLumiquinga Geovanny Patricio

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

Page 31: ESCUELA POLITECNICA DEL EJÉRCITO PROGRAMACION II · 2011-11-21 · - 1 - ESCUELA POLITECNICA DEL EJÉRCITO PROGRAMACION II NOMBRES: Gabriela Nathaly LLumiquinga Geovanny Patricio

- 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

Page 32: ESCUELA POLITECNICA DEL EJÉRCITO PROGRAMACION II · 2011-11-21 · - 1 - ESCUELA POLITECNICA DEL EJÉRCITO PROGRAMACION II NOMBRES: Gabriela Nathaly LLumiquinga Geovanny Patricio

- 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

Page 33: ESCUELA POLITECNICA DEL EJÉRCITO PROGRAMACION II · 2011-11-21 · - 1 - ESCUELA POLITECNICA DEL EJÉRCITO PROGRAMACION II NOMBRES: Gabriela Nathaly LLumiquinga Geovanny Patricio

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

}

Page 34: ESCUELA POLITECNICA DEL EJÉRCITO PROGRAMACION II · 2011-11-21 · - 1 - ESCUELA POLITECNICA DEL EJÉRCITO PROGRAMACION II NOMBRES: Gabriela Nathaly LLumiquinga Geovanny Patricio

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

}

Page 35: ESCUELA POLITECNICA DEL EJÉRCITO PROGRAMACION II · 2011-11-21 · - 1 - ESCUELA POLITECNICA DEL EJÉRCITO PROGRAMACION II NOMBRES: Gabriela Nathaly LLumiquinga Geovanny Patricio

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

}

}

}

Page 36: ESCUELA POLITECNICA DEL EJÉRCITO PROGRAMACION II · 2011-11-21 · - 1 - ESCUELA POLITECNICA DEL EJÉRCITO PROGRAMACION II NOMBRES: Gabriela Nathaly LLumiquinga Geovanny Patricio

- 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

Page 37: ESCUELA POLITECNICA DEL EJÉRCITO PROGRAMACION II · 2011-11-21 · - 1 - ESCUELA POLITECNICA DEL EJÉRCITO PROGRAMACION II NOMBRES: Gabriela Nathaly LLumiquinga Geovanny Patricio

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

Page 38: ESCUELA POLITECNICA DEL EJÉRCITO PROGRAMACION II · 2011-11-21 · - 1 - ESCUELA POLITECNICA DEL EJÉRCITO PROGRAMACION II NOMBRES: Gabriela Nathaly LLumiquinga Geovanny Patricio

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

Page 39: ESCUELA POLITECNICA DEL EJÉRCITO PROGRAMACION II · 2011-11-21 · - 1 - ESCUELA POLITECNICA DEL EJÉRCITO PROGRAMACION II NOMBRES: Gabriela Nathaly LLumiquinga Geovanny Patricio

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

Page 40: ESCUELA POLITECNICA DEL EJÉRCITO PROGRAMACION II · 2011-11-21 · - 1 - ESCUELA POLITECNICA DEL EJÉRCITO PROGRAMACION II NOMBRES: Gabriela Nathaly LLumiquinga Geovanny Patricio

- 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

Page 41: ESCUELA POLITECNICA DEL EJÉRCITO PROGRAMACION II · 2011-11-21 · - 1 - ESCUELA POLITECNICA DEL EJÉRCITO PROGRAMACION II NOMBRES: Gabriela Nathaly LLumiquinga Geovanny Patricio

- 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

Page 42: ESCUELA POLITECNICA DEL EJÉRCITO PROGRAMACION II · 2011-11-21 · - 1 - ESCUELA POLITECNICA DEL EJÉRCITO PROGRAMACION II NOMBRES: Gabriela Nathaly LLumiquinga Geovanny Patricio

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

Page 43: ESCUELA POLITECNICA DEL EJÉRCITO PROGRAMACION II · 2011-11-21 · - 1 - ESCUELA POLITECNICA DEL EJÉRCITO PROGRAMACION II NOMBRES: Gabriela Nathaly LLumiquinga Geovanny Patricio

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

}

Page 44: ESCUELA POLITECNICA DEL EJÉRCITO PROGRAMACION II · 2011-11-21 · - 1 - ESCUELA POLITECNICA DEL EJÉRCITO PROGRAMACION II NOMBRES: Gabriela Nathaly LLumiquinga Geovanny Patricio

- 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.

Page 45: ESCUELA POLITECNICA DEL EJÉRCITO PROGRAMACION II · 2011-11-21 · - 1 - ESCUELA POLITECNICA DEL EJÉRCITO PROGRAMACION II NOMBRES: Gabriela Nathaly LLumiquinga Geovanny Patricio

- 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

Page 46: ESCUELA POLITECNICA DEL EJÉRCITO PROGRAMACION II · 2011-11-21 · - 1 - ESCUELA POLITECNICA DEL EJÉRCITO PROGRAMACION II NOMBRES: Gabriela Nathaly LLumiquinga Geovanny Patricio

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

Page 47: ESCUELA POLITECNICA DEL EJÉRCITO PROGRAMACION II · 2011-11-21 · - 1 - ESCUELA POLITECNICA DEL EJÉRCITO PROGRAMACION II NOMBRES: Gabriela Nathaly LLumiquinga Geovanny Patricio

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

}

}

Page 48: ESCUELA POLITECNICA DEL EJÉRCITO PROGRAMACION II · 2011-11-21 · - 1 - ESCUELA POLITECNICA DEL EJÉRCITO PROGRAMACION II NOMBRES: Gabriela Nathaly LLumiquinga Geovanny Patricio

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

Page 49: ESCUELA POLITECNICA DEL EJÉRCITO PROGRAMACION II · 2011-11-21 · - 1 - ESCUELA POLITECNICA DEL EJÉRCITO PROGRAMACION II NOMBRES: Gabriela Nathaly LLumiquinga Geovanny Patricio

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

Page 50: ESCUELA POLITECNICA DEL EJÉRCITO PROGRAMACION II · 2011-11-21 · - 1 - ESCUELA POLITECNICA DEL EJÉRCITO PROGRAMACION II NOMBRES: Gabriela Nathaly LLumiquinga Geovanny Patricio

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

Page 51: ESCUELA POLITECNICA DEL EJÉRCITO PROGRAMACION II · 2011-11-21 · - 1 - ESCUELA POLITECNICA DEL EJÉRCITO PROGRAMACION II NOMBRES: Gabriela Nathaly LLumiquinga Geovanny Patricio

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

Page 52: ESCUELA POLITECNICA DEL EJÉRCITO PROGRAMACION II · 2011-11-21 · - 1 - ESCUELA POLITECNICA DEL EJÉRCITO PROGRAMACION II NOMBRES: Gabriela Nathaly LLumiquinga Geovanny Patricio

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

}

Page 53: ESCUELA POLITECNICA DEL EJÉRCITO PROGRAMACION II · 2011-11-21 · - 1 - ESCUELA POLITECNICA DEL EJÉRCITO PROGRAMACION II NOMBRES: Gabriela Nathaly LLumiquinga Geovanny Patricio

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

}

Page 54: ESCUELA POLITECNICA DEL EJÉRCITO PROGRAMACION II · 2011-11-21 · - 1 - ESCUELA POLITECNICA DEL EJÉRCITO PROGRAMACION II NOMBRES: Gabriela Nathaly LLumiquinga Geovanny Patricio

- 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

Page 55: ESCUELA POLITECNICA DEL EJÉRCITO PROGRAMACION II · 2011-11-21 · - 1 - ESCUELA POLITECNICA DEL EJÉRCITO PROGRAMACION II NOMBRES: Gabriela Nathaly LLumiquinga Geovanny Patricio

- 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: ";

Page 56: ESCUELA POLITECNICA DEL EJÉRCITO PROGRAMACION II · 2011-11-21 · - 1 - ESCUELA POLITECNICA DEL EJÉRCITO PROGRAMACION II NOMBRES: Gabriela Nathaly LLumiquinga Geovanny Patricio

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

}

Page 57: ESCUELA POLITECNICA DEL EJÉRCITO PROGRAMACION II · 2011-11-21 · - 1 - ESCUELA POLITECNICA DEL EJÉRCITO PROGRAMACION II NOMBRES: Gabriela Nathaly LLumiquinga Geovanny Patricio

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

Page 58: ESCUELA POLITECNICA DEL EJÉRCITO PROGRAMACION II · 2011-11-21 · - 1 - ESCUELA POLITECNICA DEL EJÉRCITO PROGRAMACION II NOMBRES: Gabriela Nathaly LLumiquinga Geovanny Patricio

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

Page 59: ESCUELA POLITECNICA DEL EJÉRCITO PROGRAMACION II · 2011-11-21 · - 1 - ESCUELA POLITECNICA DEL EJÉRCITO PROGRAMACION II NOMBRES: Gabriela Nathaly LLumiquinga Geovanny Patricio

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

Page 60: ESCUELA POLITECNICA DEL EJÉRCITO PROGRAMACION II · 2011-11-21 · - 1 - ESCUELA POLITECNICA DEL EJÉRCITO PROGRAMACION II NOMBRES: Gabriela Nathaly LLumiquinga Geovanny Patricio

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

Page 61: ESCUELA POLITECNICA DEL EJÉRCITO PROGRAMACION II · 2011-11-21 · - 1 - ESCUELA POLITECNICA DEL EJÉRCITO PROGRAMACION II NOMBRES: Gabriela Nathaly LLumiquinga Geovanny Patricio

- 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

Page 62: ESCUELA POLITECNICA DEL EJÉRCITO PROGRAMACION II · 2011-11-21 · - 1 - ESCUELA POLITECNICA DEL EJÉRCITO PROGRAMACION II NOMBRES: Gabriela Nathaly LLumiquinga Geovanny Patricio

- 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

Page 63: ESCUELA POLITECNICA DEL EJÉRCITO PROGRAMACION II · 2011-11-21 · - 1 - ESCUELA POLITECNICA DEL EJÉRCITO PROGRAMACION II NOMBRES: Gabriela Nathaly LLumiquinga Geovanny Patricio

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

Page 64: ESCUELA POLITECNICA DEL EJÉRCITO PROGRAMACION II · 2011-11-21 · - 1 - ESCUELA POLITECNICA DEL EJÉRCITO PROGRAMACION II NOMBRES: Gabriela Nathaly LLumiquinga Geovanny Patricio

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

}

Page 65: ESCUELA POLITECNICA DEL EJÉRCITO PROGRAMACION II · 2011-11-21 · - 1 - ESCUELA POLITECNICA DEL EJÉRCITO PROGRAMACION II NOMBRES: Gabriela Nathaly LLumiquinga Geovanny Patricio

- 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

Page 66: ESCUELA POLITECNICA DEL EJÉRCITO PROGRAMACION II · 2011-11-21 · - 1 - ESCUELA POLITECNICA DEL EJÉRCITO PROGRAMACION II NOMBRES: Gabriela Nathaly LLumiquinga Geovanny Patricio

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

Page 67: ESCUELA POLITECNICA DEL EJÉRCITO PROGRAMACION II · 2011-11-21 · - 1 - ESCUELA POLITECNICA DEL EJÉRCITO PROGRAMACION II NOMBRES: Gabriela Nathaly LLumiquinga Geovanny Patricio

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

}

Page 68: ESCUELA POLITECNICA DEL EJÉRCITO PROGRAMACION II · 2011-11-21 · - 1 - ESCUELA POLITECNICA DEL EJÉRCITO PROGRAMACION II NOMBRES: Gabriela Nathaly LLumiquinga Geovanny Patricio

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

Page 69: ESCUELA POLITECNICA DEL EJÉRCITO PROGRAMACION II · 2011-11-21 · - 1 - ESCUELA POLITECNICA DEL EJÉRCITO PROGRAMACION II NOMBRES: Gabriela Nathaly LLumiquinga Geovanny Patricio

- 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]<<" ";

}

Page 70: ESCUELA POLITECNICA DEL EJÉRCITO PROGRAMACION II · 2011-11-21 · - 1 - ESCUELA POLITECNICA DEL EJÉRCITO PROGRAMACION II NOMBRES: Gabriela Nathaly LLumiquinga Geovanny Patricio

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

Page 71: ESCUELA POLITECNICA DEL EJÉRCITO PROGRAMACION II · 2011-11-21 · - 1 - ESCUELA POLITECNICA DEL EJÉRCITO PROGRAMACION II NOMBRES: Gabriela Nathaly LLumiquinga Geovanny Patricio

- 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(){

Page 72: ESCUELA POLITECNICA DEL EJÉRCITO PROGRAMACION II · 2011-11-21 · - 1 - ESCUELA POLITECNICA DEL EJÉRCITO PROGRAMACION II NOMBRES: Gabriela Nathaly LLumiquinga Geovanny Patricio

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

Page 73: ESCUELA POLITECNICA DEL EJÉRCITO PROGRAMACION II · 2011-11-21 · - 1 - ESCUELA POLITECNICA DEL EJÉRCITO PROGRAMACION II NOMBRES: Gabriela Nathaly LLumiquinga Geovanny Patricio

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

Page 74: ESCUELA POLITECNICA DEL EJÉRCITO PROGRAMACION II · 2011-11-21 · - 1 - ESCUELA POLITECNICA DEL EJÉRCITO PROGRAMACION II NOMBRES: Gabriela Nathaly LLumiquinga Geovanny Patricio

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

Page 75: ESCUELA POLITECNICA DEL EJÉRCITO PROGRAMACION II · 2011-11-21 · - 1 - ESCUELA POLITECNICA DEL EJÉRCITO PROGRAMACION II NOMBRES: Gabriela Nathaly LLumiquinga Geovanny Patricio

- 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

Page 76: ESCUELA POLITECNICA DEL EJÉRCITO PROGRAMACION II · 2011-11-21 · - 1 - ESCUELA POLITECNICA DEL EJÉRCITO PROGRAMACION II NOMBRES: Gabriela Nathaly LLumiquinga Geovanny Patricio

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

Page 77: ESCUELA POLITECNICA DEL EJÉRCITO PROGRAMACION II · 2011-11-21 · - 1 - ESCUELA POLITECNICA DEL EJÉRCITO PROGRAMACION II NOMBRES: Gabriela Nathaly LLumiquinga Geovanny Patricio

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

Page 78: ESCUELA POLITECNICA DEL EJÉRCITO PROGRAMACION II · 2011-11-21 · - 1 - ESCUELA POLITECNICA DEL EJÉRCITO PROGRAMACION II NOMBRES: Gabriela Nathaly LLumiquinga Geovanny Patricio

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

Page 79: ESCUELA POLITECNICA DEL EJÉRCITO PROGRAMACION II · 2011-11-21 · - 1 - ESCUELA POLITECNICA DEL EJÉRCITO PROGRAMACION II NOMBRES: Gabriela Nathaly LLumiquinga Geovanny Patricio

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

Page 80: ESCUELA POLITECNICA DEL EJÉRCITO PROGRAMACION II · 2011-11-21 · - 1 - ESCUELA POLITECNICA DEL EJÉRCITO PROGRAMACION II NOMBRES: Gabriela Nathaly LLumiquinga Geovanny Patricio

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

Page 81: ESCUELA POLITECNICA DEL EJÉRCITO PROGRAMACION II · 2011-11-21 · - 1 - ESCUELA POLITECNICA DEL EJÉRCITO PROGRAMACION II NOMBRES: Gabriela Nathaly LLumiquinga Geovanny Patricio

- 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(){

Page 82: ESCUELA POLITECNICA DEL EJÉRCITO PROGRAMACION II · 2011-11-21 · - 1 - ESCUELA POLITECNICA DEL EJÉRCITO PROGRAMACION II NOMBRES: Gabriela Nathaly LLumiquinga Geovanny Patricio

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

}

Page 83: ESCUELA POLITECNICA DEL EJÉRCITO PROGRAMACION II · 2011-11-21 · - 1 - ESCUELA POLITECNICA DEL EJÉRCITO PROGRAMACION II NOMBRES: Gabriela Nathaly LLumiquinga Geovanny Patricio

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

Page 84: ESCUELA POLITECNICA DEL EJÉRCITO PROGRAMACION II · 2011-11-21 · - 1 - ESCUELA POLITECNICA DEL EJÉRCITO PROGRAMACION II NOMBRES: Gabriela Nathaly LLumiquinga Geovanny Patricio

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

Page 85: ESCUELA POLITECNICA DEL EJÉRCITO PROGRAMACION II · 2011-11-21 · - 1 - ESCUELA POLITECNICA DEL EJÉRCITO PROGRAMACION II NOMBRES: Gabriela Nathaly LLumiquinga Geovanny Patricio

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

Page 86: ESCUELA POLITECNICA DEL EJÉRCITO PROGRAMACION II · 2011-11-21 · - 1 - ESCUELA POLITECNICA DEL EJÉRCITO PROGRAMACION II NOMBRES: Gabriela Nathaly LLumiquinga Geovanny Patricio

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

}

Page 87: ESCUELA POLITECNICA DEL EJÉRCITO PROGRAMACION II · 2011-11-21 · - 1 - ESCUELA POLITECNICA DEL EJÉRCITO PROGRAMACION II NOMBRES: Gabriela Nathaly LLumiquinga Geovanny Patricio

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

Page 88: ESCUELA POLITECNICA DEL EJÉRCITO PROGRAMACION II · 2011-11-21 · - 1 - ESCUELA POLITECNICA DEL EJÉRCITO PROGRAMACION II NOMBRES: Gabriela Nathaly LLumiquinga Geovanny Patricio

- 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:

Page 89: ESCUELA POLITECNICA DEL EJÉRCITO PROGRAMACION II · 2011-11-21 · - 1 - ESCUELA POLITECNICA DEL EJÉRCITO PROGRAMACION II NOMBRES: Gabriela Nathaly LLumiquinga Geovanny Patricio

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

}

Page 90: ESCUELA POLITECNICA DEL EJÉRCITO PROGRAMACION II · 2011-11-21 · - 1 - ESCUELA POLITECNICA DEL EJÉRCITO PROGRAMACION II NOMBRES: Gabriela Nathaly LLumiquinga Geovanny Patricio

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

Page 91: ESCUELA POLITECNICA DEL EJÉRCITO PROGRAMACION II · 2011-11-21 · - 1 - ESCUELA POLITECNICA DEL EJÉRCITO PROGRAMACION II NOMBRES: Gabriela Nathaly LLumiquinga Geovanny Patricio

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

{

Page 92: ESCUELA POLITECNICA DEL EJÉRCITO PROGRAMACION II · 2011-11-21 · - 1 - ESCUELA POLITECNICA DEL EJÉRCITO PROGRAMACION II NOMBRES: Gabriela Nathaly LLumiquinga Geovanny Patricio

- 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(){

Page 93: ESCUELA POLITECNICA DEL EJÉRCITO PROGRAMACION II · 2011-11-21 · - 1 - ESCUELA POLITECNICA DEL EJÉRCITO PROGRAMACION II NOMBRES: Gabriela Nathaly LLumiquinga Geovanny Patricio

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

}

}

Page 94: ESCUELA POLITECNICA DEL EJÉRCITO PROGRAMACION II · 2011-11-21 · - 1 - ESCUELA POLITECNICA DEL EJÉRCITO PROGRAMACION II NOMBRES: Gabriela Nathaly LLumiquinga Geovanny Patricio

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

Page 95: ESCUELA POLITECNICA DEL EJÉRCITO PROGRAMACION II · 2011-11-21 · - 1 - ESCUELA POLITECNICA DEL EJÉRCITO PROGRAMACION II NOMBRES: Gabriela Nathaly LLumiquinga Geovanny Patricio

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

}

Page 96: ESCUELA POLITECNICA DEL EJÉRCITO PROGRAMACION II · 2011-11-21 · - 1 - ESCUELA POLITECNICA DEL EJÉRCITO PROGRAMACION II NOMBRES: Gabriela Nathaly LLumiquinga Geovanny Patricio

- 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 {

Page 97: ESCUELA POLITECNICA DEL EJÉRCITO PROGRAMACION II · 2011-11-21 · - 1 - ESCUELA POLITECNICA DEL EJÉRCITO PROGRAMACION II NOMBRES: Gabriela Nathaly LLumiquinga Geovanny Patricio

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

Page 98: ESCUELA POLITECNICA DEL EJÉRCITO PROGRAMACION II · 2011-11-21 · - 1 - ESCUELA POLITECNICA DEL EJÉRCITO PROGRAMACION II NOMBRES: Gabriela Nathaly LLumiquinga Geovanny Patricio

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

Page 99: ESCUELA POLITECNICA DEL EJÉRCITO PROGRAMACION II · 2011-11-21 · - 1 - ESCUELA POLITECNICA DEL EJÉRCITO PROGRAMACION II NOMBRES: Gabriela Nathaly LLumiquinga Geovanny Patricio

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

Page 100: ESCUELA POLITECNICA DEL EJÉRCITO PROGRAMACION II · 2011-11-21 · - 1 - ESCUELA POLITECNICA DEL EJÉRCITO PROGRAMACION II NOMBRES: Gabriela Nathaly LLumiquinga Geovanny Patricio

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

Page 101: ESCUELA POLITECNICA DEL EJÉRCITO PROGRAMACION II · 2011-11-21 · - 1 - ESCUELA POLITECNICA DEL EJÉRCITO PROGRAMACION II NOMBRES: Gabriela Nathaly LLumiquinga Geovanny Patricio

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

Page 102: ESCUELA POLITECNICA DEL EJÉRCITO PROGRAMACION II · 2011-11-21 · - 1 - ESCUELA POLITECNICA DEL EJÉRCITO PROGRAMACION II NOMBRES: Gabriela Nathaly LLumiquinga Geovanny Patricio

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

}

Page 103: ESCUELA POLITECNICA DEL EJÉRCITO PROGRAMACION II · 2011-11-21 · - 1 - ESCUELA POLITECNICA DEL EJÉRCITO PROGRAMACION II NOMBRES: Gabriela Nathaly LLumiquinga Geovanny Patricio

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

Page 104: ESCUELA POLITECNICA DEL EJÉRCITO PROGRAMACION II · 2011-11-21 · - 1 - ESCUELA POLITECNICA DEL EJÉRCITO PROGRAMACION II NOMBRES: Gabriela Nathaly LLumiquinga Geovanny Patricio

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

}

Page 105: ESCUELA POLITECNICA DEL EJÉRCITO PROGRAMACION II · 2011-11-21 · - 1 - ESCUELA POLITECNICA DEL EJÉRCITO PROGRAMACION II NOMBRES: Gabriela Nathaly LLumiquinga Geovanny Patricio

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

Page 106: ESCUELA POLITECNICA DEL EJÉRCITO PROGRAMACION II · 2011-11-21 · - 1 - ESCUELA POLITECNICA DEL EJÉRCITO PROGRAMACION II NOMBRES: Gabriela Nathaly LLumiquinga Geovanny Patricio

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

Page 107: ESCUELA POLITECNICA DEL EJÉRCITO PROGRAMACION II · 2011-11-21 · - 1 - ESCUELA POLITECNICA DEL EJÉRCITO PROGRAMACION II NOMBRES: Gabriela Nathaly LLumiquinga Geovanny Patricio

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

Page 108: ESCUELA POLITECNICA DEL EJÉRCITO PROGRAMACION II · 2011-11-21 · - 1 - ESCUELA POLITECNICA DEL EJÉRCITO PROGRAMACION II NOMBRES: Gabriela Nathaly LLumiquinga Geovanny Patricio

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

Page 109: ESCUELA POLITECNICA DEL EJÉRCITO PROGRAMACION II · 2011-11-21 · - 1 - ESCUELA POLITECNICA DEL EJÉRCITO PROGRAMACION II NOMBRES: Gabriela Nathaly LLumiquinga Geovanny Patricio

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

}

Page 110: ESCUELA POLITECNICA DEL EJÉRCITO PROGRAMACION II · 2011-11-21 · - 1 - ESCUELA POLITECNICA DEL EJÉRCITO PROGRAMACION II NOMBRES: Gabriela Nathaly LLumiquinga Geovanny Patricio

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

Page 111: ESCUELA POLITECNICA DEL EJÉRCITO PROGRAMACION II · 2011-11-21 · - 1 - ESCUELA POLITECNICA DEL EJÉRCITO PROGRAMACION II NOMBRES: Gabriela Nathaly LLumiquinga Geovanny Patricio

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

Page 112: ESCUELA POLITECNICA DEL EJÉRCITO PROGRAMACION II · 2011-11-21 · - 1 - ESCUELA POLITECNICA DEL EJÉRCITO PROGRAMACION II NOMBRES: Gabriela Nathaly LLumiquinga Geovanny Patricio

- 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<<": ";

Page 113: ESCUELA POLITECNICA DEL EJÉRCITO PROGRAMACION II · 2011-11-21 · - 1 - ESCUELA POLITECNICA DEL EJÉRCITO PROGRAMACION II NOMBRES: Gabriela Nathaly LLumiquinga Geovanny Patricio

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

}

Page 114: ESCUELA POLITECNICA DEL EJÉRCITO PROGRAMACION II · 2011-11-21 · - 1 - ESCUELA POLITECNICA DEL EJÉRCITO PROGRAMACION II NOMBRES: Gabriela Nathaly LLumiquinga Geovanny Patricio

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

Page 115: ESCUELA POLITECNICA DEL EJÉRCITO PROGRAMACION II · 2011-11-21 · - 1 - ESCUELA POLITECNICA DEL EJÉRCITO PROGRAMACION II NOMBRES: Gabriela Nathaly LLumiquinga Geovanny Patricio

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

Page 116: ESCUELA POLITECNICA DEL EJÉRCITO PROGRAMACION II · 2011-11-21 · - 1 - ESCUELA POLITECNICA DEL EJÉRCITO PROGRAMACION II NOMBRES: Gabriela Nathaly LLumiquinga Geovanny Patricio

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

Page 117: ESCUELA POLITECNICA DEL EJÉRCITO PROGRAMACION II · 2011-11-21 · - 1 - ESCUELA POLITECNICA DEL EJÉRCITO PROGRAMACION II NOMBRES: Gabriela Nathaly LLumiquinga Geovanny Patricio

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

Page 118: ESCUELA POLITECNICA DEL EJÉRCITO PROGRAMACION II · 2011-11-21 · - 1 - ESCUELA POLITECNICA DEL EJÉRCITO PROGRAMACION II NOMBRES: Gabriela Nathaly LLumiquinga Geovanny Patricio

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

Page 119: ESCUELA POLITECNICA DEL EJÉRCITO PROGRAMACION II · 2011-11-21 · - 1 - ESCUELA POLITECNICA DEL EJÉRCITO PROGRAMACION II NOMBRES: Gabriela Nathaly LLumiquinga Geovanny Patricio

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

Page 120: ESCUELA POLITECNICA DEL EJÉRCITO PROGRAMACION II · 2011-11-21 · - 1 - ESCUELA POLITECNICA DEL EJÉRCITO PROGRAMACION II NOMBRES: Gabriela Nathaly LLumiquinga Geovanny Patricio

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

Page 121: ESCUELA POLITECNICA DEL EJÉRCITO PROGRAMACION II · 2011-11-21 · - 1 - ESCUELA POLITECNICA DEL EJÉRCITO PROGRAMACION II NOMBRES: Gabriela Nathaly LLumiquinga Geovanny Patricio

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

Page 122: ESCUELA POLITECNICA DEL EJÉRCITO PROGRAMACION II · 2011-11-21 · - 1 - ESCUELA POLITECNICA DEL EJÉRCITO PROGRAMACION II NOMBRES: Gabriela Nathaly LLumiquinga Geovanny Patricio

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

}

}

Page 123: ESCUELA POLITECNICA DEL EJÉRCITO PROGRAMACION II · 2011-11-21 · - 1 - ESCUELA POLITECNICA DEL EJÉRCITO PROGRAMACION II NOMBRES: Gabriela Nathaly LLumiquinga Geovanny Patricio

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

Page 124: ESCUELA POLITECNICA DEL EJÉRCITO PROGRAMACION II · 2011-11-21 · - 1 - ESCUELA POLITECNICA DEL EJÉRCITO PROGRAMACION II NOMBRES: Gabriela Nathaly LLumiquinga Geovanny Patricio

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

Page 125: ESCUELA POLITECNICA DEL EJÉRCITO PROGRAMACION II · 2011-11-21 · - 1 - ESCUELA POLITECNICA DEL EJÉRCITO PROGRAMACION II NOMBRES: Gabriela Nathaly LLumiquinga Geovanny Patricio

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

}

Page 126: ESCUELA POLITECNICA DEL EJÉRCITO PROGRAMACION II · 2011-11-21 · - 1 - ESCUELA POLITECNICA DEL EJÉRCITO PROGRAMACION II NOMBRES: Gabriela Nathaly LLumiquinga Geovanny Patricio

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

Page 127: ESCUELA POLITECNICA DEL EJÉRCITO PROGRAMACION II · 2011-11-21 · - 1 - ESCUELA POLITECNICA DEL EJÉRCITO PROGRAMACION II NOMBRES: Gabriela Nathaly LLumiquinga Geovanny Patricio

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

}

Page 128: ESCUELA POLITECNICA DEL EJÉRCITO PROGRAMACION II · 2011-11-21 · - 1 - ESCUELA POLITECNICA DEL EJÉRCITO PROGRAMACION II NOMBRES: Gabriela Nathaly LLumiquinga Geovanny Patricio

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

Page 129: ESCUELA POLITECNICA DEL EJÉRCITO PROGRAMACION II · 2011-11-21 · - 1 - ESCUELA POLITECNICA DEL EJÉRCITO PROGRAMACION II NOMBRES: Gabriela Nathaly LLumiquinga Geovanny Patricio

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

Page 130: ESCUELA POLITECNICA DEL EJÉRCITO PROGRAMACION II · 2011-11-21 · - 1 - ESCUELA POLITECNICA DEL EJÉRCITO PROGRAMACION II NOMBRES: Gabriela Nathaly LLumiquinga Geovanny Patricio

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

Page 131: ESCUELA POLITECNICA DEL EJÉRCITO PROGRAMACION II · 2011-11-21 · - 1 - ESCUELA POLITECNICA DEL EJÉRCITO PROGRAMACION II NOMBRES: Gabriela Nathaly LLumiquinga Geovanny Patricio

- 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:

Page 132: ESCUELA POLITECNICA DEL EJÉRCITO PROGRAMACION II · 2011-11-21 · - 1 - ESCUELA POLITECNICA DEL EJÉRCITO PROGRAMACION II NOMBRES: Gabriela Nathaly LLumiquinga Geovanny Patricio

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

}

Page 133: ESCUELA POLITECNICA DEL EJÉRCITO PROGRAMACION II · 2011-11-21 · - 1 - ESCUELA POLITECNICA DEL EJÉRCITO PROGRAMACION II NOMBRES: Gabriela Nathaly LLumiquinga Geovanny Patricio

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

Page 134: ESCUELA POLITECNICA DEL EJÉRCITO PROGRAMACION II · 2011-11-21 · - 1 - ESCUELA POLITECNICA DEL EJÉRCITO PROGRAMACION II NOMBRES: Gabriela Nathaly LLumiquinga Geovanny Patricio

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

Page 135: ESCUELA POLITECNICA DEL EJÉRCITO PROGRAMACION II · 2011-11-21 · - 1 - ESCUELA POLITECNICA DEL EJÉRCITO PROGRAMACION II NOMBRES: Gabriela Nathaly LLumiquinga Geovanny Patricio

- 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

Page 136: ESCUELA POLITECNICA DEL EJÉRCITO PROGRAMACION II · 2011-11-21 · - 1 - ESCUELA POLITECNICA DEL EJÉRCITO PROGRAMACION II NOMBRES: Gabriela Nathaly LLumiquinga Geovanny Patricio

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

Page 137: ESCUELA POLITECNICA DEL EJÉRCITO PROGRAMACION II · 2011-11-21 · - 1 - ESCUELA POLITECNICA DEL EJÉRCITO PROGRAMACION II NOMBRES: Gabriela Nathaly LLumiquinga Geovanny Patricio

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

};

Page 138: ESCUELA POLITECNICA DEL EJÉRCITO PROGRAMACION II · 2011-11-21 · - 1 - ESCUELA POLITECNICA DEL EJÉRCITO PROGRAMACION II NOMBRES: Gabriela Nathaly LLumiquinga Geovanny Patricio

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

Page 139: ESCUELA POLITECNICA DEL EJÉRCITO PROGRAMACION II · 2011-11-21 · - 1 - ESCUELA POLITECNICA DEL EJÉRCITO PROGRAMACION II NOMBRES: Gabriela Nathaly LLumiquinga Geovanny Patricio

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

Page 140: ESCUELA POLITECNICA DEL EJÉRCITO PROGRAMACION II · 2011-11-21 · - 1 - ESCUELA POLITECNICA DEL EJÉRCITO PROGRAMACION II NOMBRES: Gabriela Nathaly LLumiquinga Geovanny Patricio

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

}

Page 141: ESCUELA POLITECNICA DEL EJÉRCITO PROGRAMACION II · 2011-11-21 · - 1 - ESCUELA POLITECNICA DEL EJÉRCITO PROGRAMACION II NOMBRES: Gabriela Nathaly LLumiquinga Geovanny Patricio

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

Page 142: ESCUELA POLITECNICA DEL EJÉRCITO PROGRAMACION II · 2011-11-21 · - 1 - ESCUELA POLITECNICA DEL EJÉRCITO PROGRAMACION II NOMBRES: Gabriela Nathaly LLumiquinga Geovanny Patricio

- 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:

Page 143: ESCUELA POLITECNICA DEL EJÉRCITO PROGRAMACION II · 2011-11-21 · - 1 - ESCUELA POLITECNICA DEL EJÉRCITO PROGRAMACION II NOMBRES: Gabriela Nathaly LLumiquinga Geovanny Patricio

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

}

Page 144: ESCUELA POLITECNICA DEL EJÉRCITO PROGRAMACION II · 2011-11-21 · - 1 - ESCUELA POLITECNICA DEL EJÉRCITO PROGRAMACION II NOMBRES: Gabriela Nathaly LLumiquinga Geovanny Patricio

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

Page 145: ESCUELA POLITECNICA DEL EJÉRCITO PROGRAMACION II · 2011-11-21 · - 1 - ESCUELA POLITECNICA DEL EJÉRCITO PROGRAMACION II NOMBRES: Gabriela Nathaly LLumiquinga Geovanny Patricio

- 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]<<"/";

Page 146: ESCUELA POLITECNICA DEL EJÉRCITO PROGRAMACION II · 2011-11-21 · - 1 - ESCUELA POLITECNICA DEL EJÉRCITO PROGRAMACION II NOMBRES: Gabriela Nathaly LLumiquinga Geovanny Patricio

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

Page 147: ESCUELA POLITECNICA DEL EJÉRCITO PROGRAMACION II · 2011-11-21 · - 1 - ESCUELA POLITECNICA DEL EJÉRCITO PROGRAMACION II NOMBRES: Gabriela Nathaly LLumiquinga Geovanny Patricio

- 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{

Page 148: ESCUELA POLITECNICA DEL EJÉRCITO PROGRAMACION II · 2011-11-21 · - 1 - ESCUELA POLITECNICA DEL EJÉRCITO PROGRAMACION II NOMBRES: Gabriela Nathaly LLumiquinga Geovanny Patricio

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

Page 149: ESCUELA POLITECNICA DEL EJÉRCITO PROGRAMACION II · 2011-11-21 · - 1 - ESCUELA POLITECNICA DEL EJÉRCITO PROGRAMACION II NOMBRES: Gabriela Nathaly LLumiquinga Geovanny Patricio

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

}

Page 150: ESCUELA POLITECNICA DEL EJÉRCITO PROGRAMACION II · 2011-11-21 · - 1 - ESCUELA POLITECNICA DEL EJÉRCITO PROGRAMACION II NOMBRES: Gabriela Nathaly LLumiquinga Geovanny Patricio

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

Page 151: ESCUELA POLITECNICA DEL EJÉRCITO PROGRAMACION II · 2011-11-21 · - 1 - ESCUELA POLITECNICA DEL EJÉRCITO PROGRAMACION II NOMBRES: Gabriela Nathaly LLumiquinga Geovanny Patricio

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

Page 152: ESCUELA POLITECNICA DEL EJÉRCITO PROGRAMACION II · 2011-11-21 · - 1 - ESCUELA POLITECNICA DEL EJÉRCITO PROGRAMACION II NOMBRES: Gabriela Nathaly LLumiquinga Geovanny Patricio

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

Page 153: ESCUELA POLITECNICA DEL EJÉRCITO PROGRAMACION II · 2011-11-21 · - 1 - ESCUELA POLITECNICA DEL EJÉRCITO PROGRAMACION II NOMBRES: Gabriela Nathaly LLumiquinga Geovanny Patricio

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

Page 154: ESCUELA POLITECNICA DEL EJÉRCITO PROGRAMACION II · 2011-11-21 · - 1 - ESCUELA POLITECNICA DEL EJÉRCITO PROGRAMACION II NOMBRES: Gabriela Nathaly LLumiquinga Geovanny Patricio

- 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{

Page 155: ESCUELA POLITECNICA DEL EJÉRCITO PROGRAMACION II · 2011-11-21 · - 1 - ESCUELA POLITECNICA DEL EJÉRCITO PROGRAMACION II NOMBRES: Gabriela Nathaly LLumiquinga Geovanny Patricio

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

Page 156: ESCUELA POLITECNICA DEL EJÉRCITO PROGRAMACION II · 2011-11-21 · - 1 - ESCUELA POLITECNICA DEL EJÉRCITO PROGRAMACION II NOMBRES: Gabriela Nathaly LLumiquinga Geovanny Patricio

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

Page 157: ESCUELA POLITECNICA DEL EJÉRCITO PROGRAMACION II · 2011-11-21 · - 1 - ESCUELA POLITECNICA DEL EJÉRCITO PROGRAMACION II NOMBRES: Gabriela Nathaly LLumiquinga Geovanny Patricio

- 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

Page 158: ESCUELA POLITECNICA DEL EJÉRCITO PROGRAMACION II · 2011-11-21 · - 1 - ESCUELA POLITECNICA DEL EJÉRCITO PROGRAMACION II NOMBRES: Gabriela Nathaly LLumiquinga Geovanny Patricio

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

}

Page 159: ESCUELA POLITECNICA DEL EJÉRCITO PROGRAMACION II · 2011-11-21 · - 1 - ESCUELA POLITECNICA DEL EJÉRCITO PROGRAMACION II NOMBRES: Gabriela Nathaly LLumiquinga Geovanny Patricio

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

Page 160: ESCUELA POLITECNICA DEL EJÉRCITO PROGRAMACION II · 2011-11-21 · - 1 - ESCUELA POLITECNICA DEL EJÉRCITO PROGRAMACION II NOMBRES: Gabriela Nathaly LLumiquinga Geovanny Patricio

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

Page 161: ESCUELA POLITECNICA DEL EJÉRCITO PROGRAMACION II · 2011-11-21 · - 1 - ESCUELA POLITECNICA DEL EJÉRCITO PROGRAMACION II NOMBRES: Gabriela Nathaly LLumiquinga Geovanny Patricio

- 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:

Page 162: ESCUELA POLITECNICA DEL EJÉRCITO PROGRAMACION II · 2011-11-21 · - 1 - ESCUELA POLITECNICA DEL EJÉRCITO PROGRAMACION II NOMBRES: Gabriela Nathaly LLumiquinga Geovanny Patricio

- 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 :";

Page 163: ESCUELA POLITECNICA DEL EJÉRCITO PROGRAMACION II · 2011-11-21 · - 1 - ESCUELA POLITECNICA DEL EJÉRCITO PROGRAMACION II NOMBRES: Gabriela Nathaly LLumiquinga Geovanny Patricio

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

Page 164: ESCUELA POLITECNICA DEL EJÉRCITO PROGRAMACION II · 2011-11-21 · - 1 - ESCUELA POLITECNICA DEL EJÉRCITO PROGRAMACION II NOMBRES: Gabriela Nathaly LLumiquinga Geovanny Patricio

- 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++){

Page 165: ESCUELA POLITECNICA DEL EJÉRCITO PROGRAMACION II · 2011-11-21 · - 1 - ESCUELA POLITECNICA DEL EJÉRCITO PROGRAMACION II NOMBRES: Gabriela Nathaly LLumiquinga Geovanny Patricio

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

Page 166: ESCUELA POLITECNICA DEL EJÉRCITO PROGRAMACION II · 2011-11-21 · - 1 - ESCUELA POLITECNICA DEL EJÉRCITO PROGRAMACION II NOMBRES: Gabriela Nathaly LLumiquinga Geovanny Patricio

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

Page 167: ESCUELA POLITECNICA DEL EJÉRCITO PROGRAMACION II · 2011-11-21 · - 1 - ESCUELA POLITECNICA DEL EJÉRCITO PROGRAMACION II NOMBRES: Gabriela Nathaly LLumiquinga Geovanny Patricio

- 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 ( ";

Page 168: ESCUELA POLITECNICA DEL EJÉRCITO PROGRAMACION II · 2011-11-21 · - 1 - ESCUELA POLITECNICA DEL EJÉRCITO PROGRAMACION II NOMBRES: Gabriela Nathaly LLumiquinga Geovanny Patricio

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

}

Page 169: ESCUELA POLITECNICA DEL EJÉRCITO PROGRAMACION II · 2011-11-21 · - 1 - ESCUELA POLITECNICA DEL EJÉRCITO PROGRAMACION II NOMBRES: Gabriela Nathaly LLumiquinga Geovanny Patricio

- 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.