C++ problema inserimento parametri in un'equazione

di il
11 risposte

C++ problema inserimento parametri in un'equazione

Buongiorno a tutti, sono un neofita della programmazione in c++ (ho iniziato da poche settimane) e così mi trovo di fronte a svariati problemi, che sicuramente per voi saranno banali. Quello che voglio sottoporvi riguarda un programmino che devo fare, il quale deve risolvere una semplice equazione e stampare i valori delle ascisse e delle ordinate ad intervalli di 0.02. Fin qui tutto bene, però il problema nasce perchè in questa equazione ci sono ben 3 parametri (d1,d2,d3 tutti >0 e la cui somma deve obbligatoriamente risultare =1) che devono essere inseriti di volta in volta dall'utente. Se il parametro da inserire fosse unico non avrei problemi, ma in questo caso mi trovo di fronte a qualche inghippo:

come fare se l'utente mi inserisce un valore dei parametri maggiore di 1, a farlo automaticamente tornare ad un nuovo tentativo quel per quel parametro?Perchè nel mio caso il compilatore li fa inserire tutti, e poi solo alla fine mi dice che ho sbagliato!e soprattutto alla fine, dopo avermi detto che ho sbagliato, non mi riporta ad un nuovo tentativo ma mi chiude il programma!!

vi riporto il codice del programma

#include"stdafx.h" 
#include<iostream> 
#include<math.h> 
#include<cmath> 
usingnamespace std; 
class equazione 
{ 
public: 
double calcola_y (double x) {return 0.5*x*d1*d2*d3;}; 
double d1,d2,d3;
}; 
int _tmain(int argc, _TCHAR* argv[]) 
{
double d1,d2,d3;
bool input_valido = false;
cout << "Inserisci i valori di d1,d2,d3 (tutti >0) facendo in modo che la loro somma sia uguale a 1:" << endl;
{
do 
{
cout << "Inserisci il valore di d1" << endl;
cin >> d1;
if ( cin.good() == false) 
{ 
cout << "Devi inserire un numero!" << endl;
cin.clear(); 
cin.ignore(256,'\n');
} 
elseif (d1 <= 0)
{
cout << "Il valore di d1 deve essere > 0!" << endl;
}
else
{
input_valido = true; 
} 
} while ( input_valido == false);
do
{
cout << "Inserisci il valore di d2" << endl;
cin >> d2;
if ( cin.good() == false) 
{ 
cout << "Devi inserire un numero!" << endl;
cin.clear(); 
cin.ignore(256,'\n');
}
elseif (d2 <= 0)
{
cout << "Il valore di d2 deve essere > 0" << endl;
}
else
{
input_valido = true;
}
} while ( input_valido == false);
do
{
cout << "Inserisci il valore di d3" << endl;
cin >> d3;
if ( cin.good() == false) 
{ 
cout << "Devi inserire un numero!" << endl;
cin.clear(); 
cin.ignore(256,'\n');
} 
elseif (d3 <= 0)
{
cout << "Il valore di d3 deve essere > 0" << endl;
}
else
{
input_valido = true;
}
} while ( input_valido == false);
}
if (d1+d2+d3 != 1)
{
cout << "I valori inseriti non rispettano le condizioni iniziali!" << endl;
system("PAUSE");
return 0;
}
else
{
input_valido = true;
}
cout << "prova"; 
equazione miafunzione; 
for (double xc = 0; xc <= 1; xc = xc + 0.02) 
{ 
double y = miafunzione.calcola_y(xc); 
cout << xc << " " << y; 
cout << endl; 
} 
system("PAUSE"); 
return 0; 
}
grazie in anticipo a tutti

11 Risposte

  • Re: C++ problema inserimento parametri in un'equazione

    Non puoi validare l'input dei tre paametri in un colpo invece di fare 3 cicli do-while? Qualcosa del tipo:
    
    #include <iostream>
    #include <limits>
    using namespace std;
    
    int main(void)
    {
    	double d1 = 0.0f;
    	double d2 = 0.0f;
    	double d3 = 0.0f;
    	bool valid = false;
    	do
    	{
    		cout << "inserisci 3 double" << endl;
    		cin >> d1 >> d2 >> d3;
    		valid = (1 - (d1+d2+d3) < 0.0001f) && (1 - (d1+d2+d3) > -0.0001f) && (!cin.fail());
    		cin.clear();
    		cin.ignore(numeric_limits<int>::max(),'\n');
    	}while(!valid);
    	system("pause");
    }
    
    Per valutare i double non c'è garanzia quindi li davi valutare a seconda di un range. Per gli esseri umani 0.2+0.5+0.3 fa 1 tondo ma per il computer può fare 1.0000000001 oppure 0.999999999 quindi l'eguaglianza non sarebbe garantita.
  • Re: C++ problema inserimento parametri in un'equazione

    Inserimento e controllo singolo parametro
    
    #include <iostream>
    #include <limits>
    using namespace std;
    
    bool validate_input(double & value)
    {
    	cout << "inserisci il double" << endl;
    	cin >> value;
    	bool valid = (value > 0) && (value < 1); 
    	if(!valid)
    		cout << "double non corretto, reinserire!" << endl;
    	cin.clear();
    	cin.ignore(numeric_limits<int>::max(),'\n');
    	return valid;
    }
    
    int main(void)
    {
    	double d1 = 0.0f;
    	double d2 = 0.0f;
    	double d3 = 0.0f;
    	bool valid = false;
    	do
    	{
    		while(!validate_input(d1));
    		while(!validate_input(d2));
    		while(!validate_input(d3));
    		valid = (1 - (d1+d2+d3) < 0.0001f) && (1 - (d1+d2+d3) > -0.0001f);
    		if(!valid)
    			cout << "La somma dei tre parametri non fa 1" << endl;
    	}while(!valid);
    	system("pause");
    }
    
    Il raggionamento è lo stesso e il risultato non cambia.
  • Re: C++ problema inserimento parametri in un'equazione

    Grazie per la risposta, però quando lo vado a compilare il compilatore mi segnala questo errore:

    error C2447: '{': intestazione di funzione mancante. Elenco formale di tipo obsoleto?
    me lo segnala per tutte le parentesi graffe:
    bool validate_input(double & value)
    {
    cout << "inserisci il double" << endl;
    cin >> value;
    bool valid = (value > 0) && (value < 1);
    etc...

    sai per caso a cosa si riferisce?
  • Re: C++ problema inserimento parametri in un'equazione

    Che compilatore usi? Se fai copia/incolla del mio codice dovrebbe funzionarti senza nessun avviso o errore.
  • Re: C++ problema inserimento parametri in un'equazione

    Utilizzo visual c++ 2010.
  • Re: C++ problema inserimento parametri in un'equazione

    Hai ragione scusami, avevo inserito male io il tuo codice.
    scusa l'ignoranza, ma dove tu hai scritto.

    bool validate_input(double & value)

    io devo copiarlo pari pari, oppure al posto di "value" devo mettere il nome del mio parametro?
    e dal momento che io ho 3 parametri (ad esempio A,B,C) devo scrivere:

    bool validate_input(double & A)
    bool validate_input(double & B)
    bool validate_input(double & C)

    oppure semplicemente:

    bool validate_input(double & value) ?
  • Re: C++ problema inserimento parametri in un'equazione

    Copia pari pari, nessun cambiamento. La funzione riempie un double e ti ritorna true/false se l'inserimento è avvenuto correttamente.
  • Re: C++ problema inserimento parametri in un'equazione

    Perfetto, funziona!!!
    grazie mille!!!:-)
  • Re: C++ problema inserimento parametri in un'equazione

    Un'ultima cosa, se non è troppo disturbo.
    Se io volessi veder stampato, per i miei ipotetici parametri A,B,C:
    "Inserire valore di A:"
    cin>> A, etc...
    "Inserire valore di B"
    cin>>B,etc...
    "Inserire valore di C"
    cin >>c, etc..

    anzichè veder sempre scritto, per ogni parametro, "inserisci il double"?Avere cioè frasi diverse per ciascun valore, in modo da non creare confusione in quelli che andranno ad inserire i valori...
  • Re: C++ problema inserimento parametri in un'equazione

    Basta cambiare al funzione in:
    
    bool validate_input(double & value, char c)
    {
       cout << "inserisci il il valore di " << c << endl;
       cin >> value;
       bool valid = (value > 0) && (value < 1);
       if(!valid)
          cout << "double non corretto, reinserire!" << endl;
       cin.clear();
       cin.ignore(numeric_limits<int>::max(),'\n');
       return valid;
    }
    
    poi nel main chiamarlo così
    
    while(!validate_input(d1,'A'));
    while(!validate_input(d2,'B'));
    while(!validate_input(d3,'C'));
    
  • Re: C++ problema inserimento parametri in un'equazione

    Perfetto, grazie mille davvero!!!
Devi accedere o registrarti per scrivere nel forum
11 risposte