Problema con C++

p4ngm4n
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

Risposte
TomSawyer1
Eh, direi che devi mettere un po' più di dati (tipo il sorgente :D) per essere aiutato.

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

TomSawyer1
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.

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

spiritcrusher
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???

spiritcrusher
oddio...per Qui i primi membri..... :oops: ](*,) :oops: :oops: :smt079

Splair
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

p4ngm4n
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

Splair
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

TomSawyer1
Devi passare per riferimento i valori in leggi, altrimenti non va niente.

p4ngm4n
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

TomSawyer1
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.

p4ngm4n
mi da questi valori : X=.#QNAN Y=1.#QNAN nn capisco xke

david_e1
"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?

p4ngm4n
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à

Rispondi
Per rispondere a questa discussione devi prima effettuare il login.