buenas tengo realizado este programa:
#include <iostream>
#include <math.h>
using namespace std;
int main(){
double a,b,c;
cout<<"Ingresa a"<<endl;
cin>>a;
cout<<"Ingresa b"<<endl;
cin>>b;
cout<<"Ingresa c"<<endl;
cin>>c;
double disc=pow(b,2)-4*a*c;
if(a!=0){
if(disc<0){
cout<<"Tiene raices imaginarias";
}else{
double x1=(-b+sqrt(disc))/(2*a);
double x2=(-b-sqrt(disc))/(2*a);
cout<<"X1 = "<<x1<<" X2 = "<<x2;
}
}else{
cout<<"El coeficiente a debe ser diferente a 0";
}
return 0;
}
Mis preguntitas son las siguientes:
Como hacer un infinite main loop para que al acabar pregunte al usuario si quiere hacer mas ecuaciones o salir?
Y como puedo conseguir que el usuario no pueda meter letras para que de un error, gracias de antemano saludos
Cita de: novatus84 en 26 Octubre 2014, 13:31 PM
Como hacer un infinite main loop para que al acabar pregunte al usuario si quiere hacer mas ecuaciones o salir?
Puedes utilizar la instrucciondo
{
// Codigo que quieres que se repita
} while(/*condicion, Ej: letra == 's' || letra == 'S'*/);
Saludos
Cita de: novatus84 en 26 Octubre 2014, 13:31 PMcomo puedo conseguir que el usuario no pueda meter letras para que de un error
En C++ estándar no puedes bloquear la pulsación de teclas, para ello debes utilizar una biblioteca de terceros o el API del SO.
En su lugar lo que puedes hacer es leer una linea de texto y validar su contenido, dos temas sobre ello son:
duda c++ (http://foro.elhacker.net/programacion_cc/duda_c-t373090.0.html)
Leer un char como float (http://foro.elhacker.net/programacion_cc/leer_un_char_como_float-t374159.0.html)
Un saludo
Porque me da error el segundo else? no me hace ni el calculo? Gracias por la ayuda.
#include <iostream>
#include <math.h>
using namespace std;
int main(){
double a,b,c;
char n;
do{
cout<<"Ingresa a"<<endl;
cin>>a;
cout<<"Ingresa b"<<endl;
cin>>b;
cout<<"Ingresa c"<<endl;
cin>>c;
double disc=pow(b,2)-4*a*c;
if(a!=0){
if(disc<0){
cout<<"Tiene raices imaginarias";
}else{
double x1=(-b+sqrt(disc))/(2*a);
double x2=(-b-sqrt(disc))/(2*a);
cout<<"X1 = "<<x1<<" X2 = "<<x2;
}
}else {
cout<<"El coeficiente a debe ser diferente a 0";
}
cout << "\nquieres hacer otra ecuacion?";
cout << "\nteclea 'y' para 'Si' -- 'n' para 'No': ";
cin >> n;
cout << "\n";
}while (n == 'y' || n == 'Y');
return 0;
}
usa las etiquetas GeSHi para publicar codigo (por favor modifica los posts y colocalos entre etiquetas c++)
publica el error exacto
Cita de: novatus84 en 26 Octubre 2014, 18:46 PM
Porque me da error el segundo else? no me hace ni el calculo? Gracias por la ayuda.
#include <iostream>
#include <math.h>
using namespace std;
int main(){
double a,b,c;
char n;
do{
cout<<"Ingresa a"<<endl;
cin>>a;
cout<<"Ingresa b"<<endl;
cin>>b;
cout<<"Ingresa c"<<endl;
cin>>c;
double disc=pow(b,2)-4*a*c;
if(a!=0){
if(disc<0){
cout<<"Tiene raices imaginarias";
}else{
double x1=(-b+sqrt(disc))/(2*a);
double x2=(-b-sqrt(disc))/(2*a);
cout<<"X1 = "<<x1<<" X2 = "<<x2;
}
}else {
cout<<"El coeficiente a debe ser diferente a 0";
}
cout << "\nquieres hacer otra ecuacion?";
cout << "\nteclea 'y' para 'Si' -- 'n' para 'No': ";
cin >> n;
cout << "\n";
}while (n == 'y' || n == 'Y');
return 0;
}
Cita de: novatus84 en 26 Octubre 2014, 18:46 PM
Porque me da error el segundo else? no me hace ni el calculo? Gracias por la ayuda.
a mi me corre bien
CitarIngresa a
1
Ingresa b
4
Ingresa c
4
X1 = -2 X2 = -2
quieres hacer otra ecuacion?
teclea 'y' para 'Si' -- 'n' para 'No':
CitarIngresa a
2
Ingresa b
4
Ingresa c
4
Tiene raices imaginarias
quieres hacer otra ecuacion?
teclea 'y' para 'Si' -- 'n' para 'No': n
Como conseguir que el usuario no introduzca letras (que sea error), que solo pueda introducir números no lo consigo ni con el post de antes.
Muchas gracias
sorry por no responder jejeje
cin tiene la peculiaridad que si lo capturado no coincide con el tipo, se vuelve falso... la puedes usar
double a;
cout<<"Ingresa a"<<endl;
cin>>a;
if(!cin){
cout << "no es numero" << endl;
}
El problema que tengo ahora es al meter el valor erróneo de a == letra, he puesto un break para acabar el programa, realmente quiero que me vaya al loop de while para volver a empezarlo de nuevo, como lo puedo hacer? lo mismo con b y c.
#include <iostream>
#include <math.h>
using namespace std;
int main(){
double a,b,c;
char z;
do{
cout<<"Please enter value of a"<<endl;
cin>>a;
if(!cin){
cout << "a is not a number" << endl;
break;}
cout<<"Please enter value of b"<<endl;
cin>>b;
if(!cin){
cout << "b is not a number" << endl;
break;}
cout<<"Please enter value of c"<<endl;
cin>>c;
if(!cin){
cout << "c is not a number" << endl;
break;}
double operation=pow(b,2)-4*a*c;
if(a!=0){
if(operation<0){
cout<<"The solution has imaginary roots";
}else{
double x1=(-b+sqrt(operation))/(2*a);
double x2=(-b-sqrt(operation))/(2*a);
cout <<"X1 = " <<x1;
cout << "\n";
cout <<"X2 = " <<x2;
}
}else {
cout<<"The value of a can not be 0";
}
cout << "\nDo you want to do another equation?";
cout << "\ntouch 'y' For 'YES' ---- 'n' For 'Exit': ";
cin >> z;
cout << "\n";
}while (z == 'y' || z == 'Y');
return 0;
}
Cita de: novatus84 en 26 Octubre 2014, 20:42 PMEl problema que tengo ahora es al meter el valor erróneo de a == letra, he puesto un break para acabar el programa, realmente quiero que me vaya al loop de while para volver a empezarlo de nuevo, como lo puedo hacer? lo mismo con b y c.
Solo tienes que colocar la lectura y validación de cada variable en un bucle, dos ejemplos de ello en los temas que mencione en mi primer mensaje.
Pero si piensas utilizar el operador ">>" debes descartar el resto de la linea con la función sync o ignore, ejemplos de ambas los puedes consultar mediante el motor de búsqueda de los foros.
Un saludo