Issuu on Google+

Omar Gurrola

01/30/05

http://www.proprojects.wordpress.com

Practicas con C++ Practica #1: Elaborar un programa usando “iostream.h” que convierta un número decimal en binario y muestre el resultado en el orden correcto. main.c #include <iostream.h> #include <stdlib.h> main() { int bin[20]; int dec, con = 0; cout << "Escriba el numero binario a convertir: cin >> dec; while(dec != 0) { bin[con] = dec % 2; dec /= 2; con++; } cout << endl << "El resultado es: for(con--; con > -1; con--) cout << bin[con]; cout << endl;

";

";

system("PAUSE"); }

Practica #2: Elaborar un programa que calcule el volumen de un cubo de las siguientes formas. a) Top-Down main.c #include <iostream.h> main() { int x,n,a = 1; cout << "Escriba la longitud de un lado del cubo: "; cin >> n;


Omar Gurrola

01/30/05

for(x = 0; x < 3; x++) a *=n; cout << '\n' << "El volumen es: " << a << endl; cin.get(); }

b) Modular (funciones) main.c #include <iostream.h> int cubo(int); main() { int n; cout << "Escriba la longitud de un lado del cubo: "; cin >> n; cout << '\n' << "El volumen es: " << cubo(n) << endl; cin.get(); } int cubo(int n) { int a = 1; for(int x = 0; x < 3; x++) a *=n; return a; }

c) Macros main.c #include <iostream.h> #define cubo(n) n*n*n main() { int n; cout << "Escriba la longitud de un lado del cubo: "; cin >> n; cout << '\n' << "El volumen es: " << cubo(n) << endl; cin.get(); }

d) Inline main.c #include <iostream.h> inline int cubo(int); main() { int n; cout << "Escriba la longitud de un lado del cubo: "; cin >> n; cout << '\n' << "El volumen es: " << cubo(n) << endl;

http://www.proprojects.wordpress.com


Omar Gurrola

01/30/05

http://www.proprojects.wordpress.com

cin.get(); } int cubo(int n) { int a = 1; for(int x = 0; x < 3; x++) a *=n; return a; }

Practica #3: Elaborar un programa usando sobrecarga de funciones para calcular el ĂĄrea y el volumen de tres figuras geomĂŠtricas. main.c #include <iostream.h> #include <math.h> #include <stdlib.h> #define PI 3.1416 int area(int); int area(int, int); float area(float);

// Area del Cuadrado // Area del Rectangulo // Area del Circulo

int volumen(int); int volumen(int,int,int); float volumen(int,int);

// Volumen del Cubo // Volumen del .... // Volumen del Cilindro

int main() { int r, x, y, z; float a; do{ do{ system("CLS"); cout << "Areas y Volumenes" << endl; cout << "1.- Area de un cuadrado" << endl; cout << "2.- Area de un rectangulo" << endl; cout << "3.- Area de un circulo" << endl; cout << "4.- Volumen de un cubo" << endl; cout << "5.- Volumen de una caja" << endl; cout << "6.- Volumen de un cilindro" << endl; cout << "7.- Salir" << endl; cout << "Respuesta: "; cin >> r; cout << endl; }while(r < 1 || r > 7); switch(r) { case 1: cout << '\n' << "Dame la longitud de un lado del cuadrado: cin >> x; cout << '\n' << "El area es: " << area(x) << endl; break; case 2: cout << '\n' << "Dame la base del rectangulo: "; cin >> x;

";


Omar Gurrola

01/30/05

http://www.proprojects.wordpress.com

cout << '\n' << "Dame la altura del rectangulo: "; cin >> y; cout << '\n' << "El area es: " << area(x, y) << endl; break; case 3: cout << '\n' << "Dame cin >> a; cout << '\n' << break; case 4: cout << '\n' << "Dame cin >> x; cout << '\n' << break; case 5: cout << '\n' << "Dame cin >> x; cout << '\n' << cin >> y; cout << '\n' << cin >> z; cout << '\n' << break; case 6: cout << '\n' << "Dame cin >> x; cout << '\n' << cin >> z; cout << '\n' << break; } system("PAUSE"); }while(r != 7);

el radio del circulo: "El area es:

"El volumen es:

";

"Dame el otro lado de la caja (Y): "Dame la altura de la caja (Z): "El volumen es:

// Area del Cuadrado

// Area del Rectangulo

// Volumen del Cubo

int volumen(int L1,int L2,int h)// Volumen del .... { return(L1 * L2 * h); } float volumen(int r,int h) // Volumen del Cilindro { return (float)(PI * pow(r,2) * h);

";

";

"Dame la altura del cilindro: "El volumen es:

";

" << volumen(x,y,z) << endl;

el radio del cilindro:

float area(float r) // Area del Circulo { return (float)(PI * pow(r,2)); } int volumen(int l) { return(l*l*l); }

";

" << volumen(x) << endl;

la base de la caja (X):

}

int area(int L1, int L2) { return (L1 * L2); }

" << area(a) << endl;

la longitud de un lado del cubo:

cin.get(); return 0;

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

";

";

" << volumen(x,z) << endl;


Omar Gurrola

01/30/05

http://www.proprojects.wordpress.com

}

Practica #4: Elaborar un programa para el cálculo de área y volumen de 5 cuerpos geométricos (cuadrado, rectángulo, circulo, triangulo y pentágono) y se desea que el usuario elija la figurar y el parámetro a calcular. main.c

#include <iostream> #include <stdlib.h> #define PI 3.1416 using namespace std; class figura{ public: figura(int,int,int); void area(int); void volumen(int); void guardar(int,int,int); private: int x,y,z; }; figura::figura(int a, int b=0, int c=0) { x= a; y= b; z= c; } void figura::guardar(int a, int b=0, int c=0) { x= a; y= b; z= c; } void figura::area(int f) { cout << "El area es: "; switch(f) { case 1: cout << x*x; break; case 2: cout << x*y; break; case 3: cout << PI*x*x; break; case 4: cout << x*y/2; break; case 5: cout << 1.721*x*x;


Omar Gurrola

01/30/05

http://www.proprojects.wordpress.com

break; } } void figura::volumen(int f) { cout << "El volumen es: "; switch(f) { case 6: cout << x*x*x; break; case 7: cout << x*y*z; break; case 8: cout << (1.333333)*PI*x*x*x; break; case 9: cout << (0.33333333)*x*y*z; break; case 10: cout << PI*x*x*y; break; } } int main() { int x,y,z,r; figura figura1(0,0,0); do{ do{ system("CLS"); cout << "Areas y Volumenes" << endl; cout << "1.- Area de un cuadrado" << endl; cout << "2.- Area de un rectangulo" << endl; cout << "3.- Area de un circulo" << endl; cout << "4.- Area de un triangulo" << endl; cout << "5.- Area de un pentagono" << endl; cout << "6.- Volumen de un cubo" << endl; cout << "7.- Volumen de una caja" << endl; cout << "8.- Volumen de una esfera" << endl; cout << "9.- Volumen de una piramide" << endl; cout << "10.- Volumen de un cilindro" << endl; cout << "11.- Salir" << endl; cout << "Respuesta: "; cin >> r; cout << endl; }while(r < 1 || r > 11); switch(r) { case 1: cout << "Dame un lado del cuadrado: "; cin >> x; cout << endl; figura1.guardar(x); break; case 2: cout << "Dame un lado del rectangulo: "; cin >> x; cout << endl; cout << "Dame el otro lado del rectangulo: "; cin >> y; cout << endl; figura1.guardar(x,y); break; case 3: cout << "Dame el radio del circulo: "; cin >> x; cout << endl; figura1.guardar(x); break; case 4: cout << "Dame la base del triangulo: "; cin >> x; cout << endl; cout << "Dame la altura del triangulo "; cin >> y; cout << endl; figura1.guardar(x,y); break; case 5: cout << "Dame la longitud de un lado del pentagono: "; cin >> x; cout << endl; figura1.guardar(x); break; case 6: cout << "Dame la longitud de un lado del cubo: "; cin >> x; cout << endl; figura1.guardar(x); break; case 7: cout << "Dame la longitud de un lado de la base de la caja: "; cin >> x; cout << endl; cout << "Dame la longitud del otro lado de la base de la caja: "; cin >> y; cout << endl; cout << "Dame la altura de la caja: "; cin >> z; cout << endl; figura1.guardar(x,y,z); break;


Omar Gurrola

01/30/05

http://www.proprojects.wordpress.com

case 8: cout << "Dame el radio de la esfera: "; cin >> x; cout << endl; figura1.guardar(x); break; case 9: cout << "Dame un lado de la base de la piramide: "; cin >> x; cout << endl; cout << "Dame el otro lado de la base de la piramide: "; cin >> y; cout << endl; cout << "Dame la altura de la piramide: "; cin >> z; cout << endl; figura1.guardar(x,y,z); break; case 10: cout << "Dame el radio de la base: "; cin >> x; cout << endl; cout << "Dame la altura del cilindro: "; cin >> y; cout << endl; figura1.guardar(x,y); break; } if(r < 6) figura1.area(r); else if( r < 11) figura1.volumen(r); cout << endl; system("PAUSE"); }while(r != 11); return 0; }

Practica #5: Elaborar un programa que dando 3 valores reales determine si es un triรกngulo y su tipo. main.c #include <iostream> #include <stdlib.h> #include <math.h> #define FALSE 0 #define TRUE 1 using namespace std; class tri{ public: int cumple(float,float,float); void det_tri(void); private: float x,y,z; void ordenar(void); }; int tri::cumple(float a, float b, float c){ ordenar();


Omar Gurrola

01/30/05

http://www.proprojects.wordpress.com

if(a <= 0 || b <= 0 || c <= 0) return FALSE; else if((a+b) <= c) return FALSE; else{ x=a; y=b; z=c; return TRUE; } } void tri::ordenar(void){ if(x > y){ x+=y; y=x-y; x-=y; } if(y > z){ y+=z; z=y-z; y-=z; } } void tri::det_tri(void){ if(x==y && y == z) cout << "Es un triangulo EQUILATERO (Sus tres lados iguales)" << endl; else if(x == y || y == z) cout << "Es un triangulo ISOSCELES (Dos lados iguales y uno diferente)" << endl; else cout << "Es un triangulo ESCALENO (Todos sus lados diferentes)" << endl; } int main() { float x,y,z; int r; tri t1; do{ do{ system("CLS"); cout << "Este programa determina el tipo de triangulo que es" << endl; cout << "1.- Dar los tres lados del triangulo" << endl; cout << "2.- Salir" << endl; cout << "Respuesta: "; cin >> r; cout << endl; }while(r < 1 || r > 2); if(r == 1){ cout << "Dame el valor del primer lado: "; cin >> x; cout << endl; cout << "Dame el valor del segundo lado: "; cin >> y; cout << endl; cout << "Dame el valor del tercer lado: "; cin >> z; cout << endl; if(t1.cumple(x,y,z)) t1.det_tri(); else cout << "No es un triangulo!!!!!"; } cout << endl; system("PAUSE"); }while(r != 2); return 0;


Omar Gurrola

01/30/05

}

Practica #6: Elaborar un programa que dibuje una pirĂĄmide con nĂşmeros. main.c #include <iostream> using namespace std; class piramide{ public: void crear_p(void); private: void espacios(int); }; typedef piramide mp; void piramide::espacios(int e) { for(e; e > 0; e--) cout << " "; } void piramide::crear_p(void) { int x,y,z,w=18; for(x = 1; x < 11; x++) { espacios(w); for(y = 0; y < x; y++) { if(x+y > 9) cout << x+y-10 << " "; else cout << x+y << " "; } for(z = x+y-1 ; z > x ; z-- ) { if(z-1 > 9) cout << z-11 << " "; else cout << z-1 << " "; }

http://www.proprojects.wordpress.com


Omar Gurrola

01/30/05

http://www.proprojects.wordpress.com

w-=2; cout << endl; } }

int main() { mp piramide; piramide.crear_p(); cin.get(); return 0; }

Practica #7: Elaborar un programa que realice el ordenamiento inverso de un arreglo de nĂşmeros. main.c #include <iostream> #include <stdlib.h> using namespace std; class ordenar { public: ordenar(); ~ordenar(); en_orden(); private: muestralo(); copiar(); int *lista, *temp; int n; };

// Constructor // Destructor

// Puntero a arreglo entero // Numero de elementos del arreglo

ordenar::ordenar() { this->lista = this->temp = NULL; do{ system("CLS"); cout << "De cuantos valores es el arreglo? (1 Min, 999,999 Max): cin >> this->n; }while(this->n < 1 || this->n > 999999); this->lista = new int[this->n]; this->temp = new int[this->n];

// Puntero a un arreglo entero

";


Omar Gurrola

01/30/05

http://www.proprojects.wordpress.com

if(!this->lista || !this->temp){ cout << "No hay suficiente memoria para el arreglo...."; cin.get(); exit(1); } for(int x = 0; x < n; x++) { cout << "Escribe Valor No. " << x+1 << ": cin >> this->lista[x]; cout << endl; } this->copiar();

";

} ordenar::~ordenar() { delete this->lista; delete this->temp; } ordenar::copiar() { for(int x =0 ; x < n; x++) this->temp[x] = this->lista[x]; } ordenar::en_orden() { int i,j,tem; for (i=1; i<n; i++) // Metodo de insercion { tem = temp[i]; j = i - 1; while ( (this->temp[j] < tem) && (j >= 0) ) { this->temp[j+1] = this->temp[j]; j--; } this->temp[j+1] = tem; } this->muestralo(); } ordenar::muestralo() { cout << '\n' << "La lista original for(int x = 0; x < n; x++) cout << this->lista[x] << " cout << '\n' << "La lista Ordenada for(x = 0; x < n; x++) cout << this->temp[x] << " cout << endl; } int main(void) { ordenar milista; milista.en_orden();

es:

" << endl;

"; es:

" << endl;

";


Omar Gurrola

01/30/05

http://www.proprojects.wordpress.com

system("PAUSE"); return 0; }

Practica #8: Elaborar un programa que resuelva una ecuaci贸n de segundo grado utilizando friends y el puntero this. main.c #include <iostream> #include <math.h> using namespace std; #define TRUE 1 #define FALSE 0 class CEcuacion { public: CEcuacion(); bool Verificar(float,float,float); private: Cal_EC(float); float fA,fB,fX,fX2; bool bImagin; friend void Ver_sol(CEcuacion); }; CEcuacion::CEcuacion() { this->fX = this->fX2 = 0; bImagin = FALSE; } bool CEcuacion::Verificar(float a,float b,float c) { float fRaiz; if( a != 0 ){ fRaiz = pow(b,2)-4*a*c; if(fRaiz < 0){ bImagin = TRUE; fRaiz *= -1;


Omar Gurrola

01/30/05

http://www.proprojects.wordpress.com

} else bImagin = FALSE; fRaiz = pow(fRaiz,0.5); this->fA = a; this->fB = b; Cal_EC(fRaiz); return TRUE; } else{ cout << "No es una ecuacion de segundo grado" << endl; system("PAUSE"); return FALSE; } } CEcuacion::Cal_EC(float fRaiz) { if(!bImagin){ this->fX = (- fB + fRaiz) / (2*fA); this->fX2 = (- fB - fRaiz) / (2*fA); } else{ this->fX = (- fB / (2*fA)); this->fX2 = (- fB / (2*fA)); this->fB = fRaiz; } } void Ver_sol(CEcuacion SDE) { if(SDE.fX == 0 && SDE.fX2 == 0) cout << "Aun no esta la ecuacion"<< endl; else{ if(SDE.bImagin){ cout << "X1 = " << SDE.fX; cout << " + " << SDE.fB / (2*SDE.fA) << " i" << endl; cout << "X2 = " << SDE.fX2; cout << " - " << SDE.fB / (2*SDE.fA) << " i" << endl; } else{ cout << "X1 = " << SDE.fX; cout << "X2 = " << SDE.fX2; } cout << endl; } } int main() { CEcuacion OEc; float a,b,c; do{ system("CLS"); cout << "Dame el valor de A: "; cin >> a; cout << '\n' << "Dame el valor de B: "; cin >> b; cout << '\n' << "Dame el valor de C: "; cin >> c; cout << endl;


Omar Gurrola

01/30/05

http://www.proprojects.wordpress.com

}while(!OEc.Verificar(a,b,c)); Ver_sol(OEc); system("PAUSE"); return 0; }

Practica #9: Elaborar un programa utilizando un robot como base para efectuar el retrato de un delincuente. main.c #include <iostream> #include <stdlib.h> using namespace std; //-------------------------------------------------// Menu class CMenu{ public: // Menu principal int m_main(); // Submenus int m_cabello(); int m_ojos(); int m_orejas(); int m_boca(); private: int r; }; //-------------------------------------------------// Clase robot class CRobot{ public: CRobot(); cabello(int); ojos(int); orejas_nariz(int); boca_labios(int); private: friend void m_robot(CRobot); friend void b_rasgos(CRobot &); friend void g_rasgos(CRobot &,int,int); int rasgos[4]; }; /*--------------------------------------------------


Omar Gurrola

01/30/05

Funciones de la clase CRobot --------------------------------------------------*/ CRobot::CRobot(){ rasgos[0] = 1; rasgos[1] = 1; rasgos[2] = 1; rasgos[3] = 1; } CRobot::cabello(int t){ switch(t){ case 1: cout << " WWWWWWWWW "; break; case 2: cout << " ||||||||| "; break; case 3: cout << " |\"\"\"\"\"\"\"| "; break; case 4: cout << " \\\\\\////// "; break; } cout << endl; } //-------------------------------------------------CRobot::ojos(int t){ switch(t){ case 1: cout << " | O O | "; break; case 2: cout << " |-(* *)-| "; break; case 3: cout << " |-(O O)-| "; break; case 4: cout << " | \\ / | "; break; } cout << endl; } //-------------------------------------------------CRobot::orejas_nariz(int t){ switch(t){ case 1: cout << "@ J @"; break; case 2: cout << "{ \" }"; break; case 3: cout << "[ j ]"; break; case 4: cout << "< >"; break; } cout << endl; } //-------------------------------------------------CRobot::boca_labios(int t){ switch(t){ case 1: cout << " | === | "; break; case 2: cout << " | | "; break; case 3: cout << " | --- | "; break; case 4: cout << " | --- | "; break; } cout << endl;

http://www.proprojects.wordpress.com


Omar Gurrola cout << " \\_____/ cout << endl;

01/30/05 " << endl;

} /*-------------------------------------------------Funciones de la clase CMenu --------------------------------------------------*/ int CMenu::m_main(){ do{ //system("CLS"); cout << "Retrato:" << endl; cout << "1.- Cabello:" << endl; cout << "2.- Ojos" << endl; cout << "3.- Orejas / Nariz" << endl; cout << "4.- Boca / Labios" << endl; cout << "5.- Borrar rasgos" << endl; cout << "6.- Salir" << endl; cout << "Selecciona el rasgo: "; cin >> r; }while(r < 1 || r > 6); if( r == 6) // Si decea salirse del menu return 0; return r; } //-------------------------------------------------int CMenu::m_cabello(){ do{ system("CLS"); cout << "Cabello:" << endl; cout << "1.- Denso:" << endl; cout << "2.- Escaso" << endl; cout << "3.- Rapado" << endl; cout << "4.- Raya" << endl; cout << "Selecciona el rasgo: "; cin >> r; }while(r < 1 || r > 4); return r; } //-------------------------------------------------int CMenu::m_ojos(){ do{ system("CLS"); cout << "Ojos:" << endl; cout << "1.- Normales" << endl; cout << "2.- Con lentes peque単os" << endl; cout << "3.- Con lentes grandes" << endl; cout << "4.- Rasgados" << endl; cout << "Selecciona el rasgo: "; cin >> r; }while(r < 1 || r > 4); return r; } //-------------------------------------------------int CMenu::m_orejas(){ do{ system("CLS"); cout << "Orejas / Nariz:" << endl; cout << "1.- Peque単as / Aguile単a:" << endl; cout << "2.- Separados / Chata" << endl; cout << "3.- Normales / Normales" << endl; cout << "4.- Puntiagudas / Peque単a" << endl; cout << "Selecciona el rasgo: ";

http://www.proprojects.wordpress.com


Omar Gurrola

01/30/05

http://www.proprojects.wordpress.com

cin >> r; }while(r < 1 || r > 4); return r; } //-------------------------------------------------int CMenu::m_boca(){ do{ system("CLS"); cout << "Boca / Labios:" << endl; cout << "1.- Grande / Grueso" << endl; cout << "2.- Peque単a / Delgada" << endl; cout << "3.- Grande / Normal" << endl; cout << "4.- Grande / Delgada" << endl; cout << "Selecciona el rasgo: "; cin >> r; }while(r < 1 || r > 4); return r; } //-------------------------------------------------void m_robot(CRobot ROB){ cout << '\n' << '\n'; ROB.cabello(ROB.rasgos[0]); ROB.ojos(ROB.rasgos[1]); ROB.orejas_nariz(ROB.rasgos[2]); ROB.boca_labios(ROB.rasgos[3]); } /*-------------------------------------------------Funciones Friend --------------------------------------------------*/ void b_rasgos(CRobot &ROB){ for(int x = 0; x < 4; x++) ROB.rasgos[x] = 1; } //-------------------------------------------------void g_rasgos(CRobot &ROB, int r, int v){ ROB.rasgos[r] = v; } /*-------------------------------------------------Programa Principal --------------------------------------------------*/ void main() { CMenu menu; CRobot robot; int IOtravez = 1; do{ system("CLS"); m_robot(robot); switch(menu.m_main()){ case 1: g_rasgos(robot,0,menu.m_cabello()); break; case 2: g_rasgos(robot,1,menu.m_ojos()); break; case 3: g_rasgos(robot,2,menu.m_orejas()); break; case 4: g_rasgos(robot,3,menu.m_boca()); break; case 5: b_rasgos(robot); break; default : IOtravez = 0; }


Omar Gurrola

01/30/05

http://www.proprojects.wordpress.com

}while(IOtravez); system("PAUSE"); }

Practica #10: Elaborar un programa que sume dos fracciones. main.c #include <iostream> #include <stdlib.h> using namespace::std; #define TRUE 1 #define FALSE 0 class CFraccion{ private: int i_num; // Numerador int i_den; // Denominador int sacar_mcd(); // Saca el maximo comun denominador public: CFraccion(int,int); // Constructor CFraccion(); // Constructor por default void cambiar_a(int,int);// Modifica la fraccion void simplificar(); // Simplifica la fraccion void mostrar(); // Muestra en pantalla la fraccion friend CFraccion sumar(CFraccion,CFraccion); // Funcion amiga sumar (suma ambas fracciones) }; CFraccion::CFraccion(int x,int y){// Constructor this->i_num = x; this->i_den = y; } CFraccion::CFraccion(){ // Construcotor, por default pone 1 / 1 this->i_num = 1; this->i_den = 1; } void CFraccion::cambiar_a(int x, int y){ // Cambia valores de la fraccion this->i_num = x; this->i_den = y; } int CFraccion::sacar_mcd(){ // Saca el maximo comun denominador usando el


Omar Gurrola

01/30/05

int num = abs(i_num); int den = abs(i_den);

http://www.proprojects.wordpress.com

// algoritmo de Euclides

if( den == 0) return num; int r; while(den != 0){ r = num % den; num = den; den = r; } return num; } void CFraccion::simplificar(){ int mcd = sacar_mcd();

// Simplifica la fraccion

this->i_num /= mcd; this->i_den /= mcd; } void CFraccion::mostrar(){ // Muestra la fraccion en la pantalla cout << this->i_num << " / " << this->i_den; } CFraccion sumar(CFraccion a,CFraccion b){ // Funcion amiga CFraccion c; c.cambiar_a(a.i_num*b.i_den+b.i_num*a.i_den,a.i_den*b.i_den);// Calcula la suma return c; } void main(){ int x[4],r; do{ do{ system("CLS"); cout << "Fraccion n.1" << " numerador = "; cin >> x[0]; cout << "Fraccion n.1" << " denominador = "; cin >> x[1]; cout << "Fraccion n.2" << " numerador = "; cin >> x[2]; cout << "Fraccion n.2" << " denominador = "; cin >> x[3]; if(x[1] == 0 || x[3] == 0){ cout << '\n' << "No existen fracciones con denominadores negativos!!!.." << '\n'; system("PAUSE"); r = TRUE; } else r = FALSE; }while(r); CFraccion OF1(x[0],x[1]); CFraccion OF2(x[2],x[3]); CFraccion OF3; OF3 = sumar(OF1,OF2); cout << endl; OF1.mostrar(); cout << " + OF2.mostrar(); cout << " =

"; ";


Omar Gurrola

01/30/05

http://www.proprojects.wordpress.com

OF3.mostrar(); cout << " = "; OF3.simplificar(); OF3.mostrar(); cout << endl; system("PAUSE"); do{ system("CLS"); cout << '\n' << "Otra vez? (1 = SI, 0 = NO): cin >> r; }while(r < 0 || r > 1); }while(r);

";

}

Practica #11: Elaborar un programa que sume una lista de nĂşmeros reales e imaginarios (El nĂşmero de elementos lo especificara el usuario. main.c #include <stdlib.h> #include <iostream> using namespace std; class nodo { public: nodo(int v, bool r, nodo *sig = NULL) { valor = v; real = r; siguiente = sig; } private: int valor; bool real; nodo *siguiente; friend class lista; }; typedef nodo *pnodo; class lista { public: lista() { primero = actual = NULL; } ~lista();


Omar Gurrola

01/30/05

void Insertar(int v, bool r); void Borrar(int v); bool ListaVacia() { return primero == NULL; } retornar (retora true o false) void Mostrar(); void Siguiente(); void Primero(); void Ultimo(); bool Actual() { return actual != NULL; } int ValorActual() { return actual->valor; } bool TipoActual() { return actual->real; }

http://www.proprojects.wordpress.com

// Realizo una comparacion antes de

private: pnodo primero; pnodo actual; }; lista::~lista() { pnodo aux; while(primero) { aux = primero; primero = primero->siguiente; delete aux; } actual = NULL; } void lista::Insertar(int v, bool r) { pnodo anterior; // Si la lista está vacía if(ListaVacia() || primero->valor > v) { // Asignamos a lista un nuevo nodo de valor v y // cuyo siguiente elemento es la lista actual primero = new nodo(v, r, primero); } else { // Buscar el nodo de valor menor a v anterior = primero; // Avanzamos hasta el último elemento o hasta que el siguiente tenga // un valor mayor que v while(anterior->siguiente && anterior->siguiente->valor <= v) anterior = anterior->siguiente; // Creamos un nuevo nodo después del nodo anterior, y cuyo siguiente // es el siguiente del anterior anterior->siguiente = new nodo(v, r, anterior->siguiente); } } void lista::Borrar(int v) { pnodo anterior, nodo; nodo = primero; anterior = NULL; while(nodo && nodo->valor < v) { anterior = nodo; nodo = nodo->siguiente; }


Omar Gurrola

01/30/05

http://www.proprojects.wordpress.com

if(!nodo || nodo->valor != v) return; else { // Borrar el nodo if(!anterior) // Primer elemento primero = nodo->siguiente; else // un elemento cualquiera anterior->siguiente = nodo->siguiente; delete nodo; } } void lista::Mostrar() { nodo *aux; aux = primero; while(aux) { cout << aux->valor << " "; cout << aux->real << endl; aux = aux->siguiente; } cout << endl; } void lista::Siguiente() { if(actual) actual = actual->siguiente; } void lista::Primero() { actual = primero; } void lista::Ultimo() { actual = primero; if(!ListaVacia()) while(actual->siguiente) Siguiente(); } void main() { int v; bool t; lista Lista; do{ system("CLS"); cout << "Introduce los valores, y pon 0 para terminar" << endl; cout << "Introduce el valor : "; cin >> v; if(v){ cout << "Pon 1 si es real o 0 si es imaginario: "; cin >> t; Lista.Insertar(v, t); } cout << endl; }while(v); Lista.Primero(); int r,i; r = i = 0;


Omar Gurrola

01/30/05

http://www.proprojects.wordpress.com

while(Lista.Actual()){ if(Lista.TipoActual()) r += Lista.ValorActual(); else i += Lista.ValorActual(); Lista.Siguiente(); } //Lista.Mostrar(); cout << '\n' << "El resultado es: " << endl; cout << '\n' << r << " + " << i << "i" << '\n' << endl;; system("PAUSE"); }

Practica #12: Elaborar un programa que de una lista de 0 hasta N determine cu谩les son cuadrados perfectos. main.c #include <iostream> #include <stdlib.h> #include <math.h> using namespace std; class CResiduo; class CCuadrado { int max; int actual; public: CCuadrado(int n){max = n;} void det_cuadrados(); friend CResiduo; // CResiduo es amiga de CCuadrado... }; class CResiduo{ int res; public: bool is_cp(void); operator=(CCuadrado); // Sobrecarga de operador `=` /* El operador = es un operador binario de asignaci贸n de valores http://ict.pue.udlap.mx/~raulms/last/curso/javacourse/operadores.html */ }; CResiduo::operator =(CCuadrado c){ // Operador de asignacion sobrecargado... this->res = c.actual;


Omar Gurrola

01/30/05

http://www.proprojects.wordpress.com

} bool CResiduo::is_cp(){ float z; z = sqrt((float)res); res = z; z -= res; if(z == 0.0) return 1; else return 0; } void CCuadrado::det_cuadrados(){ CResiduo res; max++; for(int x = 0; x < max; x++){ actual = x; res=*this; // Referencia al valor de this (*this) if(res.is_cp()) cout << "Es Cuadrado Perfecto: " << x << endl; } } void main(){ int num; do{ system("CLS"); cout << "Hasta que numero determinar cuadrados perfectos: cin >> num; }while(num < 0);

";

CCuadrado c(num); c.det_cuadrados(); system("PAUSE"); }

Practica #13: Elaborar un programa que resuelva ecuaciones de 2do. Grado utilizando sobrecarga. main.c // Librerias //-----------------------------------------------------------------------#include <math.h> #include <stdlib.h> #include <iostream> using namespace std; //-----------------------------------------------------------------------// Constantes //-----------------------------------------------------------------------#define TRUE 1


Omar Gurrola

01/30/05

http://www.proprojects.wordpress.com

#define FALSE 0 #define A 0 #define B 1 #define C 2 //-----------------------------------------------------------------------// Clases //-----------------------------------------------------------------------class CEcuacion { float fx[2]; float fv[3]; float fRaiz; public: bool bImagin; bool operator &&(bool); bool operator <(int); void Calcular_X(void); void CalcularCon(float, float, float); void Mostrar(void); }; //-----------------------------------------------------------------------// Declaracion de las funciones miembros de las clases //-----------------------------------------------------------------------void CEcuacion::CalcularCon(float fa, float fb, float fc){ fv[A] = fa; fv[B] = fb; fv[C] = fc; } bool CEcuacion::operator &&(bool x){ if(fv[A] != 0) return TRUE; else return FALSE; } bool CEcuacion::operator <(int z){ fRaiz = pow(fv[B],2)-4*fv[A]*fv[C]; // Discriminante if(fRaiz < 0){ // Si es negativo es complejo fRaiz *= -1; return TRUE; } else return FALSE; } void CEcuacion::Calcular_X(void){ fRaiz = pow(fRaiz,(float)0.5); // Castring fv[B] = -fv[B]; // Negativo de fv[b] if(bImagin){ fx[A] fx[B] } else{ fx[A] fx[B] }

= (fv[B] / (2*fv[A]));// fx[A] = Real = fRaiz / (2*fv[A]); // fx[B] = Imaginario

= (fv[B] + fRaiz) / (2*fv[A]); = (fv[B] - fRaiz) / (2*fv[A]);

} void CEcuacion::Mostrar(void){ if(bImagin){ cout << '\n' << "X1 = " << fx[A] << " + " << fx[B] << " i" << endl; cout << "X2 = " << fx[A] << " - " << fx[B] << " i" << endl; } else{ cout << '\n' << "X1 = " << fx[A] << endl;


Omar Gurrola

01/30/05

http://www.proprojects.wordpress.com

cout << "X2 = " << fx[B] << endl; } } //------------------------------------------------------------------------

#include "Header.h" void main(){ float fa,fb,fc; int r; CEcuacion Ec; do{ system("CLS"); cout << "Dame el valor de A: "; cin >> fa; cout << '\n' << "Dame el valor de B: "; cin >> fb; cout << '\n' << "Dame el valor de C: "; cin >> fc; Ec.CalcularCon(fa,fb,fc); if(Ec && TRUE){ if(Ec < 0) Ec.bImagin = TRUE; else Ec.bImagin = FALSE; Ec.Calcular_X(); Ec.Mostrar(); } else cout << '\n' << "No es una ecuacion de 2do Grado"; do{ cout << '\n' << '\n' << "Otra vez? (1 = si, 0 = no): "; cin >> r; }while(r < 0 || r > 1); }while(r != 0); }

Practica #14: Elaborar un programa


Omar Gurrola

01/30/05

http://www.proprojects.wordpress.com

Practica #15: Elaborar un programa que al realizar tres intentos de acertar una contrase単a entre 8 y 12 caracteres se cierre o indique que se terminaron los intentos. Header.h #include <iostream> #include <stdlib.h> #include <ctype.h> #include <string.h> using namespace std; #define TRUE 1 #define FALSE 0 class CPassword{ char sPass[13]; public: bool Check(void); bool Setpass(char *); void Show(void); void operator --(void); }; bool CPassword::Setpass(char *c){ int len = strlen(c); if(len < 8 || len > 12) return FALSE; strcpy(sPass,c); return TRUE; } void CPassword::Show(){ cout << '\n' << sPass << endl; } void CPassword::operator --(void){ int x; for(x = 0; sPass[x]; x++) if(sPass[x] != -91) sPass[x] = tolower(sPass[x]); else sPass[x] = -92; } bool CPassword::Check(void){ if(strcmp(sPass, "universidad") == FALSE) return TRUE; else return FALSE; } main.c #include "Header.h" void main(){ char c[13]; bool bOk = FALSE; int x=0;


Omar Gurrola

01/30/05

http://www.proprojects.wordpress.com

CPassword pas; do{ x++; system("CLS"); cout << "Escriba el password le quedan " << 4-x<< " intentos: "; cin >> c; if(!pas.Setpass(c)){ cout << '\n' << "!!!!Incorrecto!!!" << '\n' << endl; system("PAUSE"); } else{ --pas; // Sobrecarga convierte a minusculas bOk = pas.Check(); if(!bOk){ cout << '\n' << "!!!!Incorrecto!!!" << '\n' << endl; system("PAUSE"); } } }while(x < 3 && !bOk); if(bOk) cout << '\n' << "Le atinaste!!!" << endl; else cout << '\n' << "Se te acabaron los turnos!!!" << endl; }

Practica #16: Elaborar un programa que al dar un nĂşmero determine si es un cuadrado perfecto, si no lo es determinar el mĂĄs cercano. main.c #include <iostream> #include <stdlib.h> #include <math.h> using namespace std; class CCuadrado { int valor[2]; int ciclos[2]; public: void asignar(int); bool es_cp(int); int c_ciclos(bool); int v_raiz(bool); void operator --(); void operator ++(); }; void CCuadrado::operator ++(){ int x = valor[0];


Omar Gurrola

01/30/05

http://www.proprojects.wordpress.com

do{ x++; }while(!es_cp(x)); ciclos[0] = x - valor[0]; valor[0] = x; } void CCuadrado::operator --(){ int x = valor[1]; do{ x--; }while(!es_cp(x)); ciclos[1] = valor[1] - x; valor[1] = x; } bool CCuadrado::es_cp(int dato){ float z; int x = dato; z = sqrt((float)x); x = (int)z; z -= x; if(z == 0.0) return 1; else{ return 0; } } void CCuadrado::asignar(int x){ valor[0] = valor[1] = x; } int CCuadrado::c_ciclos(bool s){ return ciclos[s]; } int CCuadrado::v_raiz(bool s){ return valor[s]; } void main(){ int num, r; CCuadrado cp; do{ system("CLS"); cout << "Escribe el valor a determinar como cuadrado: "; cin >> num; if(cp.es_cp(num)) cout << '\n' << "Es un numero cuadrado perfecto!!!" << endl; else{ cp.asignar(num); ++cp; // determina el sigiente c.p. 0 --cp; // determina el anterior c.p. 1 if(cp.c_ciclos(0) == cp.c_ciclos(1)) cout << '\n' << cp.v_raiz(0) << " y " << cp.v_raiz(1) << " Son los cuadrados perfectos mas cercanos a " << num << " por +/- " << cp.c_ciclos(0) << " numeros"; else if(cp.c_ciclos(0) < cp.c_ciclos(1)) cout << '\n' << cp.v_raiz(0) << " Es el cuadrado perfecto mas cercano a " << num << " por " << cp.c_ciclos(0) << " numeros"; else cout << '\n' << cp.v_raiz(1) << " Es el cuadrado perfecto mas cercano a " << num << " por " << cp.c_ciclos(1) << " numeros"; } cout << '\n' << "Otra vez? (0=NO, 1=SI): ";


Omar Gurrola

01/30/05

http://www.proprojects.wordpress.com

cin >> r; }while(r != 0); }

Practica #17: Elaborar un programa que al darle tres nĂşmeros determine el menor y calcule el factorial de este. main.c #include <iostream> #include <stdlib.h> using namespace std; #define TRUE 1 #define FALSE 2 class factorial{ public: void menor(int,int,int); int cumple(int); private: long int fact(long int); int men; }; int factorial::cumple(int x) { if(x > -1 && x < 16) return TRUE; else return FALSE; } void factorial::menor(int a,int b, int c) { int numero[3]; men = a; numero[0]=a; numero[1]=b; numero[2]=c; for(int x = 0; x < 3; x++) if(men > numero[x]) men = numero[x]; cout << "El factorial de: " << men << " Es: cout << endl; } long int factorial::fact(long int z) { if(z > 0) z = z*fact(z-1); else z = 1;

" << fact(men);


Omar Gurrola

01/30/05

http://www.proprojects.wordpress.com

return (z); } int main() { factorial objeto; int n[3], x = 0; system("CLS"); while(x < 3 ) { cout << "Dame el valor numero " << x+1<< " : cin >> n[x]; cout << endl; if(objeto.cumple(n[x]) == TRUE) { x++; } } objeto.menor(n[0],n[1],n[2]); cin.get(); return 0;

";

}

Practica #18: Elaborar un programa que solicite al usuario tres matrices de 2x2 y se puedan realizar una multiplicaci贸n de A*B, A*C y B*C. main.c #include <iostream> #include <stdlib.h> #define REN 2 #define COL 2 using namespace::std; class CMatriz{ private: int matriz[REN][COL]; char nombre[9]; public: CMatriz(); CMatriz(bool); void mostrar(int); friend CMatriz multiplicar(CMatriz,CMatriz); }; CMatriz::CMatriz(){


Omar Gurrola

01/30/05

http://www.proprojects.wordpress.com

int r,c,t; cout << endl; cout << "Introduce el nombre de la matriz: "; cin >> nombre; for(r = 0; r < REN; r++) for(c = 0; c < COL; c++){ do{ cout << "Introduce el valor de la C# " << c << " , R# " << r << " :

"; cin >> t; }while(!t); matriz[r][c] = t;

} } CMatriz::CMatriz(bool t){ ; } void CMatriz::mostrar(int t = 0){ int r,c; cout << '\n' << nombre << endl; for(r = 0; r < REN; r++){ for(c = 0; c < COL; c++) cout << matriz[r][c] << " cout << endl; }

";

} CMatriz multiplicar(CMatriz x, CMatriz y){ CMatriz temp(0); int r,c; for(r = 0; r < REN ; r++) for(c = 0; c < COL; c++) temp.matriz[r][c] = x.matriz[r][c] * y.matriz[r][c]; return temp; } void main(){ int r; CMatriz CMatriz CMatriz CMatriz

A; B; C; M(1);

do{ do{ system("CLS"); cout << "1. Mostrar las matrices originales" << endl; cout << "2. Mostrar una matriz resultante de multiplicar la matriz A por B" << endl; cout << "3. Mostrar una matriz resultante de multiplicar la matriz A por C" << endl; cout << "4. Mostrar una matriz resultante de multiplicar la matriz B por C" << endl; cout << "5. Salir del programa"; cout << "Seleccione un numero: "; cin >> r; }while(r < 1 || r > 5); switch(r){ case 1:

A.mostrar(0); B.mostrar(0);


Omar Gurrola

01/30/05

http://www.proprojects.wordpress.com

C.mostrar(0); break; case 2: M = multiplicar(A,B); M.mostrar(1); break; case 3: M = multiplicar(A,C); M.mostrar(1); break; case 4: M = multiplicar(B,C); M.mostrar(1); break; } system("PAUSE"); }while(r != 5); }

Practica #19: Elaborar un programa que solicite un vector de datos (5-20 elementos) y determinar la posici贸n del menor de ellos. main.c #include <iostream> #include <stdlib.h> using namespace std; class CArreglo{ private: int *arreglo; int n, pos, men; public: CArreglo(int x){ // Constructor n = x; arreglo = new int[n];//Reservamos memoria } ~CArreglo(){ // Destructor delete arreglo; } void datos(); // Pide los datos al usuario void operator --(); // Sobrecarga del operador unario --" void Mostrarlo(); };


Omar Gurrola

01/30/05

http://www.proprojects.wordpress.com

void CArreglo::datos(){ for(int x = 0 ; x < n; x++){ cout << "Escriba el valor para el elemento " << x+1 << " :"; cin >> arreglo[x]; cout << endl; } } void CArreglo::operator --(){ men = arreglo[0]; pos = 0;

// Operador sobrecargado --

for(int x = 1; x < n; x++){ if(men > arreglo[x]){ men = arreglo[x]; pos = x+1; } } } void CArreglo::Mostrarlo(){ cout << endl; cout << "El menor valor del arreglo es: " << men << endl; cout << "y esta en la posicion: " << pos << endl; } void main(){ int n ,r; do{ system("CLS"); cout << "Escriba el tama単o del vector: cin >> n; cout << endl;

";

if(n < 1 || n > 20) cout << "Especifica un arreglo de menor tama単o (1-20 elementos)..." << endl; else{ CArreglo arreglo(n); arreglo.datos(); --arreglo; arreglo.Mostrarlo(); } cout << "Otra vez (0 = NO)?: "; cin >> r; }while(r != 0); }


Omar Gurrola

01/30/05

http://www.proprojects.wordpress.com


Practicas con C++