Sei sulla pagina 1di 7

1.4 Ejercicio 4: Resolver ecuaciones de 2 grado con clase .

Este ejercicio consiste en hacer una clase que permita resolver las
ecuaciones de
segundo grado, usando la Programacin Orientada a Objetos. Para esto crear
la clase
Ecua2G que tenga las variables y mtodos adecuados que permitan resolver
la ecuacin.
A continuacin se le proporciona la estructura de la clase y su utilizacin en
el
programa principal main(). Ud. debe implementar las funciones de la clase.
class Ecua2G
{
doubl e A, B, C;
publ i c:
Ecua2G( ) {A=0; B=0; C=0; }
Ecua2G( doubl e a, doubl e b, doubl e c) {
A=a; B=b; C=c;
}
voi d Pi deDat os( ) ; / / Pi de l os coef i ci ent es por l a consol a
doubl e Di sc( ) ; / / devuel ve el di scr i mi nant e
voi d Pr t ( ) ; / / I mpr i me ecuaci on AX^2 + BX + C = 0
/ / t i po=t r ue r ai ces r eal es t i po=f al se r ai ces compl ej as
voi d Rai ces( bool &t i po, doubl e &x1, doubl e &x2) ;
};
/ / Pr ogr ama pr i nci pal
void main()
{
doubl e xs1, xs2;
bool t i p;
cout << "\ n*** Ecuaci on1 ***" << endl ;
Ecua2G ec1( 1, 4, 4) ;
ec1. Rai ces( t i p, xs1, xs2) ; / / cal cul a l as r ai ces
ec1. Pr t ( ) ;
t i p? cout << " Rai ces r eal es: " : cout << " Rai ces compl ej as: " ;
cout << xs1 << ", " << xs2 << endl ;
cout << "\ n*** Ecuaci on2 ***" << endl ;
Ecua2G ec2;
ec2. Pi deDat os( ) ; / / dar A=1, B=3, C=6. 25
ec2. Rai ces( t i p, xs1, xs2) ;
ec2. Pr t ( ) ;
t i p? cout << " Rai ces r eal es: " : cout << " Rai ces compl ej as: " ;
cout << xs1 << " , " << xs2 << endl ;
cout << "\ n*** Ecuaci on3 ***" << endl ;
doubl e a, b, c;
cout << " Dar coef i ci ent es A, B y C: " ;
ci n >> a >> b >> c;
Ecua2G ec3( a, b, c) ; / / const r uct or
ec3. Rai ces( t i p, xs1, xs2) ;
ec3. Pr t ( ) ;
t i p? cout << " Rai ces r eal es: " : cout << " Rai ces compl ej as: " ;
cout << xs1 << " , " << xs2 << endl ;
}
Recuerde que debe colocar los ficheros de cabecera .h que sean
necesarios. Debe crear un
nuevo proyecto llamado Ejer4 en su directorio de trabajo.

Resolver ecuaciones de segundo grado.
Esta pequea aplicacin de consola puede resultarle til a alguien. Bien porque estudie
matemticas, o como parte de una calculadora casera, o porque se yo!. El caso es que
resuelve ecuaciones de segundo grado .
El proyecto costa de dos clases separadas en dos archivos, uno Program.cs que es el
principal de la aplicacin, el que contiene el mtodo Main(). Y otra clase en un archivo
ECgrado2.cs.
Este es el cdigo de la clase ECgrado2:
class ECgrado2 //Definicin de la clase que realiza los calculos de la ecuacin
{
private double A, B, C;

//Definicin de un constructor de clase que recibe como parmetros los valores
//introcucidos por pantalla (coeficientes de la ecuacin)
public ECgrado2(double a, double b, double c)
{
A =a;
B =b;
C =c;
}

public double masSqrt() //Mtodo que resuelve la raiz positiba
{
double result =((-B +System.Math.Sqrt(B * B - 4 * A * C)) / (2 * A));
return result;
}

public double menosSqrt() //Mtodo que resuelve la raiz negativa
{
double result =((-B - System.Math.Sqrt(B * B - 4 * A * C)) / (2 * A));
return result;
}
}
Y este es el cdigo, sensible de ser mejorado, del cuerpo principal del
programa:

class Program
{
static void Main(string[] args)
{
//Inicializacin de las variables que contienen los valores (coeficientes)
//introducidos por pantalla
double coefA =0, coefB =0, coefC =0;

/*Comienzo de la repeticin del cuerpo pricipal del programa. Este bucle
*se repite cuando al final del programa, despes de realizar y mostrar
*todos los calculos, se le pregunta al usuario si quiere seguir calculando
*/
bool control =true;
while (control ==true)
{
Console.Clear();
Console.WriteLine("Resolver ecuaciones de segundo grado.");
Console.WriteLine("Ecuaciones del tipo: Ax^2 +Bx +C =0");

/*En primer lugar se comprueba (bloque try{}) que los valores de los
* coeficientes sean del tipo correcto. En el caso que no lo sean, se
* captura la excepcin producida (bloque catch{}) y se repite todo
* el bloque try/catch hasta que los datos introducidos por el usuario
* sean del formato correcto
*/
bool repTryCatch =true;
while (repTryCatch ==true)
{
try
{
Console.WriteLine("\nIntroducir coeficiente A:");
coefA =Double.Parse(Console.ReadLine());

Console.WriteLine("\nIntroducir coeficiente B:");
coefB =Double.Parse(Console.ReadLine());

Console.WriteLine("\nIntroducir coeficiente C:");
coefC =Double.Parse(Console.ReadLine());

repTryCatch =false;
}
catch (FormatException)
{
Console.Clear();
Console.WriteLine("ERROR!. Introducir solo valores numricos.");
repTryCatch =true;
}
}

//Valores internos de la raiz cuadrada
double Bcuadrado =coefB * coefB;
double cuatroAC =4 * coefA * coefC;
//Comprobacin de que las operaciones con los valores internos de la raiz
//no dan un resultado negativo. No existe la raiz de un nmero negativo
if (Bcuadrado <cuatroAC && coefA >0 && coefC >0)
{
Console.Clear();
Console.WriteLine("La ecuacin no tiene solucin." +
"\nSe ha intentado la raiz de un valor negativo.");
}
else
{
//Llamada al constructor de la clase ECgrado2
ECgrado2 ecuacion =new ECgrado2(coefA, coefB, coefC);
//Llamada a los mtodos de calculo de clase ECgrado2
Console.WriteLine("\nValor 1 ={0}",
ecuacion.masSqrt().ToString());
Console.WriteLine("Valor 2 ={0}",
ecuacion.menosSqrt().ToString());
}

Console.WriteLine("\nDesea seguir calculando? (y/n)");

//Este ltimo bloque se repite siempre que el usuario no introduzca el
//formato correcto (y/n) para la pregunta anterior
bool repSwitch =true;
while (repSwitch ==true)
{
string SioNO =Console.ReadLine();
switch (SioNO)
{
case "y": case "Y":
control =true; //Repite el bloque principal del programa
repSwitch =false;
break;
case "n": case "N":
control =false; //Termina el bucle principal del programa
repSwitch =false;
break;
default:
Console.WriteLine(
"\nLa entrada no es correcta. Pulse \"y\" o \"n\".");
repSwitch =true;
break;
}
}
}
}
}

A continuacin dejo algunas salidas por pantalla.

Potrebbero piacerti anche