Solución Práctica Calificada - Programación C++ Pág. 1 ÍNDICE ÍNDICE.............................................................................................................................................................................. 1 1. EJERCICIO 1: CONVERSOR DE TEMPERATURAS .................................................................................... 1 2. EJERCICIO 2: INTERSECCIÓN DE UNA RECTA CON UNA CIRCUNFERENCIA................................. 1 3. EJERCICIO 3: CLASES - CONVERSOR DE COORD. CARTESIANAS A POLARES Y VICEVERSA... 2 1. Ejercicio 1: Conversor de temperaturas #include <iostream.h> #include <iomanip.h> double Convierte(double f); void main() { double A,B,INC,t; cout << " Dar A,B e INC:?"; cin>>A>>B>>INC; for (double f=A;f<B;f+=INC){ t=Convierte(f); cout.precision(3); cout << setw(10) << f; cout << setw(10) << t << endl; } } double Convierte(double f) { double c=(5*(f-32))/9; return c; } 2. Ejercicio 2: Intersección de una recta con una circunferencia #include #include #include #include <iostream.h> <math.h> <string.h> <iomanip.h> void Ec2grado(double a,double b, double c,double &r1, double &r2, double &disc); void main() { double m,c,a,b,r; double A,B,C,R1,R2,DISC; //para ec. segundo grado cout << "dar m,c,a,b,r:?"; cin >> m>>c>>a>>b>>r; A=1+m*m; B=2*m*c-2*a-2*m*b; C=a*a+c*c+b*b-2*b*c-r*r; Ec2grado(A,B,C,R1,R2,DISC); if (DISC<0.0) cout << "La recta no corta a la circunferencia"<<endl; Informática II - Fundamentos de Programación Paul Bustamante Solución Práctica Calificada - Programación C++ else if cout } else { cout cout } Pág. 2 (DISC == 0){ << "La recta es tangente a la circunf. en " <<R1<<","<<R1*m+c <<endl; //>0 << "La recta corta a la circunf. en (" <<R1<<","<<R1*m+c<<") y en ("; << R2 <<","<<R2*m+c<<")"<<endl; } void Ec2grado(double a, double b, double c,double &r1, double &r2, double &disc) { disc = b*b-4*a*c; } if (disc==0.0){ //raiz doble, la recta es tangente r1=r2=-b/(2*a); }else if(disc>0.0){ //2 raices reales r1 = (-b + sqrt(disc))/(2*a); r2 = (-b - sqrt(disc))/(2*a); }else{ //<0 r1 = -b/(2*a); r2 = sqrt( fabs(disc) )/(2*a); } 3. Ejercicio 3: Clases - Conversor de coord. Cartesianas a Polares y viceversa #include #include #include #include <iostream.h> <math.h> <stdlib.h> <iomanip.h> class Convierte { double x,y,r,ang; //ang en grados bool tipo; //true: cart a pola false:pol a cart public: Convierte(bool tip=true){ tipo=tip;} Convierte(double x1, double y1,double r1, double ang1){ x=x1; y=y1; r=r1; ang=ang1; } void PolarToCartesianas(double &x1, double &y1){ double ang1 = ang*3.141592/180; x1 = r*cos(ang1); y1 = r*sin(ang1); } void CartesianasToPolar(double &r1, double &ang1){ r1 = sqrt( x*x + y*y ); ang1 = atan(y/x)*180/3.141592 ; } friend istream& operator>>(istream&ci, Convierte &coor){ if (coor.tipo==true){ cout << "Dar x,y:?"; cin >> coor.x >> coor.y; }else{ cout << "Dar r,ang:?"; cin >> coor.r >> coor.ang; } return ci; } }; void main() Informática II - Fundamentos de Programación Paul Bustamante Solución Práctica Calificada - Programación C++ { Pág. 3 int opc; char ch; double x,y,r,ang; char *texto[]={"**Menu**","1.Cart. a Polares","2.Polares a Cart", "3.Salir"}; for (int i=0;i<50;i++) { int x= rand(); cout.fill('.'); cout << i<<setw(20)<<x%100 << endl; } cout << "Pres any key to continiue..."; cin.getline(&ch,2); system("cls"); } while(true){ for (int i=0;i<4;i++) cout << texto[i] << endl; cout << "\tOpcion:?"; cin >> opc; if (opc==3) { cout << "Adios..\n"; break;} else if (opc==1){ //con sobrecarga de operadores Convierte cv(true); cin >> cv; cv.CartesianasToPolar(r,ang); cout << ">> R:"<< r << " Ang:" << ang << endl<<endl; } else if (opc==2){ //sin sobrecarga de operadores cout << "\nDar r,ang:? "; cin >> r >> ang; Convierte cv(0,0,r,ang); cv.PolarToCartesianas(x,y); cout << ">> X:"<< x << " Y:" << y << endl<<endl; } } Informática II - Fundamentos de Programación Paul Bustamante