consejos sobre programa

Iniciado por novatus84, 26 Octubre 2014, 13:31 PM

0 Miembros y 1 Visitante están viendo este tema.

novatus84

buenas tengo realizado este programa:

Código (cpp) [Seleccionar]
#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

MeCraniDOS

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 instruccion

do
{

 // Codigo que quieres que se repita

} while(/*condicion, Ej: letra == 's' || letra == 'S'*/);


Saludos
"La física es el sistema operativo del Universo"
     -- Steven R Garman

rir3760

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++
Leer un char como float

Un saludo
C retains the basic philosophy that programmers know what they are doing; it only requires that they state their intentions explicitly.
--
Kernighan & Ritchie, The C programming language

novatus84

#3
Porque me da error el segundo else? no me hace ni el calculo? Gracias por la ayuda.


Código (cpp) [Seleccionar]
#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;
   }


engel lex

usa las etiquetas GeSHi para publicar codigo (por favor modifica los posts y colocalos entre etiquetas c++)

publica el error exacto
El problema con la sociedad actualmente radica en que todos creen que tienen el derecho de tener una opinión, y que esa opinión sea validada por todos, cuando lo correcto es que todos tengan derecho a una opinión, siempre y cuando esa opinión pueda ser ignorada, cuestionada, e incluso ser sujeta a burla, particularmente cuando no tiene sentido alguno.

novatus84

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.


Código (cpp) [Seleccionar]
#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;
   }



engel lex

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
El problema con la sociedad actualmente radica en que todos creen que tienen el derecho de tener una opinión, y que esa opinión sea validada por todos, cuando lo correcto es que todos tengan derecho a una opinión, siempre y cuando esa opinión pueda ser ignorada, cuestionada, e incluso ser sujeta a burla, particularmente cuando no tiene sentido alguno.

novatus84

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

engel lex

sorry por no responder jejeje

cin tiene la peculiaridad que si lo capturado no coincide con el tipo, se vuelve falso... la puedes usar

Código (cpp) [Seleccionar]
double a;
cout<<"Ingresa a"<<endl;
cin>>a;
  if(!cin){
  cout << "no es numero" << endl;
}
El problema con la sociedad actualmente radica en que todos creen que tienen el derecho de tener una opinión, y que esa opinión sea validada por todos, cuando lo correcto es que todos tengan derecho a una opinión, siempre y cuando esa opinión pueda ser ignorada, cuestionada, e incluso ser sujeta a burla, particularmente cuando no tiene sentido alguno.

novatus84

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.
Código (cpp) [Seleccionar]

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