Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: novatus84 en 26 Octubre 2014, 13:31 pm



Título: consejos sobre programa
Publicado por: novatus84 en 26 Octubre 2014, 13:31 pm
buenas tengo realizado este programa:

Código
  1. #include <iostream>
  2. #include <math.h>
  3. using namespace std;
  4. int main(){
  5.    double a,b,c;
  6.    cout<<"Ingresa a"<<endl;
  7.    cin>>a;
  8.    cout<<"Ingresa b"<<endl;
  9.    cin>>b;
  10.    cout<<"Ingresa c"<<endl;
  11.    cin>>c;
  12.    double disc=pow(b,2)-4*a*c;
  13.    if(a!=0){
  14.        if(disc<0){
  15.            cout<<"Tiene raices imaginarias";
  16.        }else{
  17.            double x1=(-b+sqrt(disc))/(2*a);
  18.            double x2=(-b-sqrt(disc))/(2*a);
  19.            cout<<"X1 = "<<x1<<" X2 = "<<x2;
  20.        }
  21.    }else{
  22.        cout<<"El coeficiente a debe ser diferente a 0";
  23.    }
  24.    return 0;
  25. }

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


Título: Re: consejos sobre programa
Publicado por: MeCraniDOS en 26 Octubre 2014, 14:26 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

Código
  1. do
  2. {
  3.  
  4.  // Codigo que quieres que se repita
  5.  
  6. } while(/*condicion, Ej: letra == 's' || letra == 'S'*/);

Saludos


Título: Re: consejos sobre programa
Publicado por: rir3760 en 26 Octubre 2014, 15:52 pm
como 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


Título: Re: consejos sobre programa
Publicado por: 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
  1. #include <iostream>
  2. #include <math.h>
  3. using namespace std;
  4.  
  5.  
  6. int main(){
  7.  
  8.  
  9.    double a,b,c;
  10.    char n;
  11.  
  12.  
  13.    do{
  14.  
  15.    cout<<"Ingresa a"<<endl;
  16.    cin>>a;
  17.    cout<<"Ingresa b"<<endl;
  18.    cin>>b;
  19.    cout<<"Ingresa c"<<endl;
  20.    cin>>c;
  21.    double disc=pow(b,2)-4*a*c;
  22.  
  23.        if(a!=0){
  24.        if(disc<0){
  25.            cout<<"Tiene raices imaginarias";
  26.        }else{
  27.            double x1=(-b+sqrt(disc))/(2*a);
  28.            double x2=(-b-sqrt(disc))/(2*a);
  29.            cout<<"X1 = "<<x1<<" X2 = "<<x2;
  30.        }
  31.        }else {
  32.        cout<<"El coeficiente a debe ser diferente a 0";
  33.    }
  34.        cout << "\nquieres hacer otra ecuacion?";
  35.        cout << "\nteclea 'y' para 'Si' -- 'n' para 'No': ";
  36.        cin  >> n;
  37.        cout << "\n";
  38.  
  39.    }while (n == 'y' || n == 'Y');
  40.  
  41.  
  42.    return 0;
  43.    }
  44.  
  45.  


Título: Re: consejos sobre programa
Publicado por: engel lex en 26 Octubre 2014, 18:53 pm
usa las etiquetas GeSHi para publicar codigo (por favor modifica los posts y colocalos entre etiquetas c++)

publica el error exacto


Título: Re: consejos sobre programa
Publicado por: novatus84 en 26 Octubre 2014, 19:42 pm
Porque me da error el segundo else? no me hace ni el calculo? Gracias por la ayuda.


Código
  1. #include <iostream>
  2. #include <math.h>
  3. using namespace std;
  4.  
  5.  
  6. int main(){
  7.  
  8.  
  9.    double a,b,c;
  10.    char n;
  11.  
  12.  
  13.    do{
  14.  
  15.    cout<<"Ingresa a"<<endl;
  16.    cin>>a;
  17.    cout<<"Ingresa b"<<endl;
  18.    cin>>b;
  19.    cout<<"Ingresa c"<<endl;
  20.    cin>>c;
  21.    double disc=pow(b,2)-4*a*c;
  22.  
  23.        if(a!=0){
  24.        if(disc<0){
  25.            cout<<"Tiene raices imaginarias";
  26.        }else{
  27.            double x1=(-b+sqrt(disc))/(2*a);
  28.            double x2=(-b-sqrt(disc))/(2*a);
  29.            cout<<"X1 = "<<x1<<" X2 = "<<x2;
  30.        }
  31.        }else {
  32.        cout<<"El coeficiente a debe ser diferente a 0";
  33.    }
  34.        cout << "\nquieres hacer otra ecuacion?";
  35.        cout << "\nteclea 'y' para 'Si' -- 'n' para 'No': ";
  36.        cin  >> n;
  37.        cout << "\n";
  38.  
  39.    }while (n == 'y' || n == 'Y');
  40.  
  41.  
  42.    return 0;
  43.    }
  44.  
  45.  


Título: Re: consejos sobre programa
Publicado por: engel lex en 26 Octubre 2014, 19:55 pm
Porque me da error el segundo else? no me hace ni el calculo? Gracias por la ayuda.

a mi me corre bien

Citar
Ingresa a
1
Ingresa b
4
Ingresa c
4
X1 = -2 X2 = -2
quieres hacer otra ecuacion?
teclea 'y' para 'Si' -- 'n' para 'No':


Citar
Ingresa a
2
Ingresa b
4
Ingresa c
4
Tiene raices imaginarias
quieres hacer otra ecuacion?
teclea 'y' para 'Si' -- 'n' para 'No': n


Título: Re: consejos sobre programa
Publicado por: novatus84 en 26 Octubre 2014, 20:03 pm
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


Título: Re: consejos sobre programa
Publicado por: engel lex en 26 Octubre 2014, 20:14 pm
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
  1. double a;
  2. cout<<"Ingresa a"<<endl;
  3. cin>>a;
  4.  if(!cin){
  5.  cout << "no es numero" << endl;
  6. }


Título: Re: consejos sobre programa
Publicado por: novatus84 en 26 Octubre 2014, 20:42 pm
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
  1. #include <iostream>
  2. #include <math.h>
  3. using namespace std;
  4.  
  5.  
  6. int main(){
  7.  
  8.  
  9.    double a,b,c;
  10.    char z;
  11.  
  12.  
  13.    do{
  14.  
  15.        cout<<"Please enter value of a"<<endl;
  16.        cin>>a;
  17.            if(!cin){
  18.                cout << "a is not a number" << endl;
  19.                break;}
  20.        cout<<"Please enter value of b"<<endl;
  21.        cin>>b;
  22.            if(!cin){
  23.                cout << "b is not a number" << endl;
  24.                break;}
  25.        cout<<"Please enter value of c"<<endl;
  26.        cin>>c;
  27.            if(!cin){
  28.                cout << "c is not a number" << endl;
  29.                break;}
  30.        double operation=pow(b,2)-4*a*c;
  31.  
  32.        if(a!=0){
  33.            if(operation<0){
  34.                cout<<"The solution has imaginary roots";
  35.            }else{
  36.                double x1=(-b+sqrt(operation))/(2*a);
  37.                double x2=(-b-sqrt(operation))/(2*a);
  38.                cout <<"X1 = " <<x1;
  39.                cout << "\n";
  40.                cout <<"X2 = " <<x2;
  41.            }
  42.        }else {
  43.            cout<<"The value of a can not be 0";
  44.        }
  45.        cout << "\nDo you want to do another equation?";
  46.        cout << "\ntouch 'y' For 'YES' ---- 'n' For 'Exit': ";
  47.        cin  >> z;
  48.        cout << "\n";
  49.  
  50.    }while (z == 'y' || z == 'Y');
  51.  
  52.  
  53.    return 0;
  54. }
  55.  


Título: Re: consejos sobre programa
Publicado por: rir3760 en 27 Octubre 2014, 01:47 am
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.
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