Problema con C++
sto cercando di allenarmi con i sottoprogrammi. ho scritto un programma che risolve un sistema di due equazioni lineari, usando un sottoprogramma che esegue le operazioni di ingresso, nella compilazione non mi da errori, ma quando vado a provarlo mi escono dei valori strani, precisamente:
X=1,#QNAN
Y=1,#QNAN
che tipo di errore ho fatto?
vi ringrazio per l'aiuto
X=1,#QNAN
Y=1,#QNAN
che tipo di errore ho fatto?
vi ringrazio per l'aiuto
Risposte
Eh, direi che devi mettere un po' più di dati (tipo il sorgente
) per essere aiutato.

eccolo se serve metto pure il sottoprogramma
int main()
{
const float eps=1.E-6;
float a,b,c,d,e,f,g,h,l,x,y;
leggi(a,b,c,d,e,f);
g=a*d-c*b;
if(fabs(g)
{
cout<<"Il sistema e\'indeterminato\n";
}else
{
h=a*f-c*e;
l=e*d-f*b;
x=l/g;
y=h/g;
cout<<"\nx= "<
}
system("PAUSE");
return 0;
}
int main()
{
const float eps=1.E-6;
float a,b,c,d,e,f,g,h,l,x,y;
leggi(a,b,c,d,e,f);
g=a*d-c*b;
if(fabs(g)
cout<<"Il sistema e\'indeterminato\n";
}else
{
h=a*f-c*e;
l=e*d-f*b;
x=l/g;
y=h/g;
cout<<"\nx= "<
system("PAUSE");
return 0;
}
Ti consiglio di usare double al posto di float, dato che la precisione è doppia. Quegli errori significano Quiet Not A Number, e sono spesso dovuti a calcoli azzardati.
grazie,ma il problema non si risolve ora posto tutto il programma tanto è breve. ci sarà sicuramente un errore banale...
#include
using namespace std;
#include
#include
//Sistema di 2 equazioni lineari con uso di sottoprogramma
void leggi(double a,double b,double c,double d,double e,double f);
int main()
{
const float eps=1.E-6;
double a,b,c,d,e,f,g,h,l,x,y;
leggi(a,b,c,d,e,f);
g=a*d-c*b;
if(fabs(g)
{
cout<<"Il sistema e\'indeterminato\n";
}else
{
h=a*f-c*e;
l=e*d-f*b;
x=l/g;
y=h/g;
cout<<"\nx= "<
}
system("PAUSE");
return 0;
}
void leggi(double a,double b,double c,double d,double e,double f)
{
cout<<"Sistema di 2 equazioni lineari";
cout<<"\nax+by=e\ncx+dy=f\n";
cout<<"\na= ";cin>>a;
cout<<"\nb= ";cin>>b;
cout<<"\nc= ";cin>>c;
cout<<"\nd= ";cin>>d;
cout<<"\ne= ";cin>>e;
cout<<"\nf= ";cin>>f;
}
#include
using namespace std;
#include
#include
//Sistema di 2 equazioni lineari con uso di sottoprogramma
void leggi(double a,double b,double c,double d,double e,double f);
int main()
{
const float eps=1.E-6;
double a,b,c,d,e,f,g,h,l,x,y;
leggi(a,b,c,d,e,f);
g=a*d-c*b;
if(fabs(g)
cout<<"Il sistema e\'indeterminato\n";
}else
{
h=a*f-c*e;
l=e*d-f*b;
x=l/g;
y=h/g;
cout<<"\nx= "<
system("PAUSE");
return 0;
}
void leggi(double a,double b,double c,double d,double e,double f)
{
cout<<"Sistema di 2 equazioni lineari";
cout<<"\nax+by=e\ncx+dy=f\n";
cout<<"\na= ";cin>>a;
cout<<"\nb= ";cin>>b;
cout<<"\nc= ";cin>>c;
cout<<"\nd= ";cin>>d;
cout<<"\ne= ";cin>>e;
cout<<"\nf= ";cin>>f;
}
Non avevi postato per questo e magari non sei interessato a mettere a posto quest'altra cosa..ma nel tuo programma non viene gestita la situazione in cui ti vengono dati dei parametri per qui i primi membri sono equivalenti e le costanti diverse...in tal caso il sistema sarebbe impossibile.Non è che magari facendo le prove non ci hai pensato e con i dati che hai inserito è successo proprio questo???
oddio...per Qui i primi membri.....

](/datas/uploads/forum/emoji/eusa_wall.gif)



scusami ma il tuo programma non mi sembra impostato molto bene nel senso...
perchè scrivi una funzione per leggere i numeri e poi fai tutto nel main???
secondo me è meglio se lo gestisci con più funzioni, cioè nel main richiami solo le funzioni che crei.
quindi crei una funzione leggi per leggere le variabili, una funzione per il sistema di equazioni.
Poi ti consiglierei di utilizzare le un po di parentesi tonde....(anche se non sono fondamentali).
Altro consiglio se posso permettermi...indenta il codice...
buon lavoro..
ciao
perchè scrivi una funzione per leggere i numeri e poi fai tutto nel main???
secondo me è meglio se lo gestisci con più funzioni, cioè nel main richiami solo le funzioni che crei.
quindi crei una funzione leggi per leggere le variabili, una funzione per il sistema di equazioni.
Poi ti consiglierei di utilizzare le un po di parentesi tonde....(anche se non sono fondamentali).
Altro consiglio se posso permettermi...indenta il codice...
buon lavoro..
ciao
allora preciso varie cose: ho aggiunto la possibilità che il sistema sia impossibile. Volevo provarlo solo con un unico sottoprogramma, non dovrebbe funzionare lo stesso?poi il codice lo indento,ma nel fare copia e incolla è venuto così...
vi chiedo cmq a cosa è dovuto il mio problema. Spero che qualcuno sia in grado di rispondermi grazie
vi chiedo cmq a cosa è dovuto il mio problema. Spero che qualcuno sia in grado di rispondermi grazie
a funzionare, funziona anche se utilizzi una sola funzione.
Io intendevo che è, cmq, indice di "buona programmazione" utilizzare le funzioni e poi nel main (o in altre funzioni) richiamarle.
ora non ho installato nessun compilatore per c++ e quindi non posso provarlo, appena posso lo installo e ti faccio sapere...
a presto ciao
Io intendevo che è, cmq, indice di "buona programmazione" utilizzare le funzioni e poi nel main (o in altre funzioni) richiamarle.
ora non ho installato nessun compilatore per c++ e quindi non posso provarlo, appena posso lo installo e ti faccio sapere...
a presto ciao
Devi passare per riferimento i valori in leggi, altrimenti non va niente.
sulla migliore programmazione con + funzioni non ho dubbi, ma ora mi interessa capire xke questo programma non da i valori desiderati. Ho messo anche per riferimento tutti i valori di leggi (si fa mettendo una &davanti alla variabile giusto?) ma ancora una volta i risultati dell'operazione non sono corretti, mentre il compilatore non trova errori
Sì,
leggi(double &a,...)
Comunque, che valori ti dà? Il programma ora non ha errori, quindi di sicuro sbagli tu a fare quello che vuoi.
leggi(double &a,...)
Comunque, che valori ti dà? Il programma ora non ha errori, quindi di sicuro sbagli tu a fare quello che vuoi.
mi da questi valori : X=.#QNAN Y=1.#QNAN nn capisco xke
"p4ngm4n":
mi da questi valori : X=.#QNAN Y=1.#QNAN nn capisco xke
Qui il tuo codice gira benissimo:
#include<iostream> #include<stdlib.h> #include<math.h> using namespace std; //Sistema di 2 equazioni lineari con uso di sottoprogramma void leggi(double & a,double & b,double & c,double & d,double & e,double & f); int main() { const float eps=1.E-6; double a,b,c,d,e,f,g,h,l,x,y; leggi(a,b,c,d,e,f); g=a*d-c*b; if(fabs(g)<eps) { cout<<"Il sistema e\'indeterminato\n"; } else { h=a*f-c*e; l=e*d-f*b; x=l/g; y=h/g; cout<<"\nx= " << x << endl <<"y= "<< y << endl; } return 0; } void leggi(double & a,double & b,double & c,double & d,double & e,double & f) { cout<<"Sistema di 2 equazioni lineari"; cout<<"\nax+by=e\ncx+dy=f\n"; cout<<"\na= ";cin>>a; cout<<"\nb= ";cin>>b; cout<<"\nc= ";cin>>c; cout<<"\nd= ";cin>>d; cout<<"\ne= ";cin>>e; cout<<"\nf= ";cin>>f; }; //
Che dati gli dai in input?
raga l'ho risolto. il problema era che non passavo determinati valori per riferimento. Infatti il programma girava, ma dava valori sballati. grazie cmq per la vostra disponibilità