Test Foro de elhacker.net SMF 2.1

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 (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
Título: Re: consejos sobre programa
Publicado por: MeCraniDOS en 26 Octubre 2014, 14:26 PM
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
Título: Re: consejos sobre programa
Publicado por: rir3760 en 26 Octubre 2014, 15:52 PM
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
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 (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;
   }

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


Título: Re: consejos sobre programa
Publicado por: engel lex en 26 Octubre 2014, 19:55 PM
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
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 (cpp) [Seleccionar]
double a;
cout<<"Ingresa a"<<endl;
cin>>a;
  if(!cin){
  cout << "no es numero" << endl;
}
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 (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;
}
Título: Re: consejos sobre programa
Publicado por: rir3760 en 27 Octubre 2014, 01:47 AM
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