PDA

View Full Version : [C++] Programma per equazioni 2° grado...


pixie
20-12-2007, 19:07
Salve raga.....ho creato un programma per la risoluzione delle equazioni di secondo grado soltanto che c'è un problema....prima d tt sottolineo che è stato fatto in C++ e ed fatto da varie funzioni....tra queste mi crea problema quella per il controllo del DELTA....nel caso sia maggiore, minore o uguale a zero...ecco a voi il codice....
// Calcolo del determinante
float delta (void)
{
float a, b, c, result;

// Chiamata alla funzione che legge i valori
coeff ("CALCOLO DEL DELTA", &a, &b, &c);

// Calcolo del delta
result = (b*b) - 4 * (a) * (c);

cout <<endl << "Il DELTA risulta: ";
cout <<endl << b <<"^2" <<" - 4*" <<a <<"*" <<c <<"=";
cout << result <<endl <<endl;


// Chiamata alla funzione che controlla il delta
find_sign (result);

}




// Implementazione funzione che controlla il determinante
float find_sign (float result)
{
float ris;
int caso_1, caso_2, caso_3;
char caso;

// Se il delta è MAGGIORE di zero
if (ris > 0) return 1;

// Se il delta è MINORE di zero
else if (ris < 0) return 2;

// Se il delta è UGUALE a zero
else if (ris = 0); return 3;



switch (caso)
{
// Caso 1: delta MAGGIORE di zero
case 1:
{
#ifdef _DEBUG_
cout << "Equazione con due possibili soluzioni";
#endif

// Chiamata funzione per il calcolo delle soluzioni
soluz(ris);

}

// Caso 2: delta MINORE di zero
case 2:
{
#ifdef _DEBUG_
cout << "Equazione IMPOSSIBILE";
#endif

// Uscita dal programma immediata
break;

}

// Caso 3: delta UGUALE a zero
case 3:
{
#ifdef _DEBUG_
cout << "Equazione IDENTICA: una sola soluzione";
#endif

// Chiamata funzione per il calcolo delle soluzioni
soluz (ris);

}
}

}


Il problema sta nel fatto che quando chiamo find_sign dalla funzione che calcola il delta non mi controlla quest'ultimo....cm fare???
a presto ciaociao

pixie
20-12-2007, 20:27
WOW....cavolo...in poche parole un disastro....ammazza....cmq doma provo a vedere se riesco a metterlo a posto grz ai tuoi suggerimenti ..... poi vi faccio sapere.....grazie mille ancora....

pixie
21-12-2007, 13:10
Rieccomi qua a rompervi purtroppo....dunque....nn ho capito varie cose:

1) a find_sign ho passato (result) poichè è il parametro che devo far controllare alla funzione...almeno mi hanno insegnato così....quindi ho chiamato localmente float ris in modo da passargli il valore....poi magari sbaglio....;

2) come faccio a dire alla funzione find_sign di controllare result? è questo il problema d fondo....che si rimanda al punto 1).....in poche parole ho fatto i vari if dicendo che se maggiore di zero e deve (return 1) che sarebbe il primo caso dello switch, l'altro if dice se minore d zero e deve (return 2) che sarebbe il secondo caso dello switch e così via....

per favore è importante sto esercizio sennò mi becco il debito...

vizzz
21-12-2007, 14:38
Rieccomi qua a rompervi purtroppo....dunque....nn ho capito varie cose:

1) a find_sign ho passato (result) poichè è il parametro che devo far controllare alla funzione...almeno mi hanno insegnato così....quindi ho chiamato localmente float ris in modo da passargli il valore....poi magari sbaglio....;

2) come faccio a dire alla funzione find_sign di controllare result? è questo il problema d fondo....che si rimanda al punto 1).....in poche parole ho fatto i vari if dicendo che se maggiore di zero e deve (return 1) che sarebbe il primo caso dello switch, l'altro if dice se minore d zero e deve (return 2) che sarebbe il secondo caso dello switch e così via....

per favore è importante sto esercizio sennò mi becco il debito...

1) devi usare la variabile risultato all'interno della funzione find_sign! ris è dichiarata ma non inizializzata!
o scrivi ris = result; come prima operazione nella funzione e tieni così tutto in resto (che però ha poco senso)
oppure sostituisci tutti i ris con risultato ed è ok.

pixie
21-12-2007, 14:40
ok va bn....c'ero già arrivato prima della risposta però non mi funziona lo switch e nn capisco....praticamente non mi effettua il controllo agli if per poi andare agli switch-case...

pixie
21-12-2007, 14:41
Vizz se t agg a msn e mi aiuti li 10 min è un problema?
sia inteso: NN sn omosessuale....per evitare equivoci....:D

vizzz
21-12-2007, 14:45
rileggendo ora capisco che non ti è ancora chiara una cosa.
il comando return termina la funzione! non interagisce in alcun modo con lo switch successivo.

pixie
21-12-2007, 14:57
t ho agg a msn....ho troppo bisogno per sto programma davvero...cmq s il return so cs è....infatti l'ho tolto dal programma...e ho messo void delta....

vizzz
21-12-2007, 15:06
posso aiutarti solo qui sul forum, sono anche al lavoro eheheh
riincolla il codice che hai modificato fino ad ora.

pixie
21-12-2007, 15:10
// Calcolo del determinante
void delta (void)
{
float a, b, c, result;

// Chiamata alla funzione che legge i valori
coeff ("CALCOLO DEL DELTA", &a, &b, &c);

// Calcolo del delta
result = (b*b) - 4 * (a) * (c);

cout <<endl << "Il DELTA risulta: ";
cout <<endl << b <<"^2" <<" - 4*" <<a <<"*" <<c <<"=";
cout << result <<endl <<endl;


// Chiamata alla funzione che controlla il delta
find_sign (result);
}



// Implementazione funzione che controlla il determinante
float find_sign (float result)
{

char caso;

// Se il delta è MAGGIORE di zero
if (result > 0) caso = 1;

// Se il delta è MINORE di zero
else if (result < 0) caso = 2;

// Se il delta è UGUALE a zero
else if (result == 0); caso = 3;



switch (caso)
{
// Caso 1: delta MAGGIORE di zero
case 1:
{
#ifdef _DEBUG_
cout << "Equazione con due possibili soluzioni";
#endif

// Chiamata funzione per il calcolo delle soluzioni
soluz(result);

}

// Caso 2: delta MINORE di zero
case 2:
{
#ifdef _DEBUG_
cout << "Equazione IMPOSSIBILE";
#endif

// Uscita dal programma immediata
break;

}

// Caso 3: delta UGUALE a zero
case 3:
{
#ifdef _DEBUG_
cout << "Equazione IDENTICA: una sola soluzione";
#endif

// Chiamata funzione per il calcolo delle soluzioni
soluz (result);

}
}

return result;
}

// Implementazione funzione di calcolo delle soluzioni
float soluz (float result)
{
float a, b, c, ris, soluz_1, soluz_2;

// Calcolo prima soluzione
soluz_1 = (-b + sqrt(ris))/2*a;
cout <<endl << "La PRIMA soluzione è: ";
cout <<endl <<"-" <<b <<" + " <<"rad " <<ris <<endl <<" /" <<" 2" <<"*" <<a;
cout <<" = " <<soluz_1 <<endl <<endl;

system ("pause");

// Calcolo seconda soluzione
soluz_2 = (-b - sqrt(ris))/2*a;
cout <<endl << "La SECONDA soluzione è: ";
cout <<endl <<"-" <<b <<" - " <<"rad " <<ris <<endl <<" /" <<" 2" <<"*";
cout <<a <<" = " <<soluz_2 <<endl <<endl;

system ("pause");


}


void restart ()
{
char conferma;

cout <<"Vuoi riavviare il programma?...Premi [Y/N]";
cin >> conferma;

if (conferma = 'Y') {
cout <<"Hai deciso di riavviare il programma. BUON PROSEGUIMENTO !!!";
goto inizio;
}

else {
cout <<"Hai deciso di terminare il programma. BUONA GIORNATA !!!" <<endl;

system ("pause");
exit ('0');
}

}

questo è tt qnt....beh l'ultima parte se vuoi lasciala perdere
era solo per far ricominciare il programma

pixie
21-12-2007, 15:11
ah sia chiaro...manca la parte del main e della lettura dei valori :D

pixie
21-12-2007, 15:17
ah si è vero ke scemo :)....cmq mi dice il compilatore (turbo c++) "code has no effect"....e me lo indica su "if (result == 0)..."

pixie
21-12-2007, 15:27
uhm ok un problema l'hai risolto...grz mille...però ade ce n'è un altro....alla fine del programma...dopo il calcolo delle soluzioni mi dice "Invalid floating point operation" e mi indica in rosso la linea del find_sign(result) nel delta...in pratica qnd chiamo la funzione per controllo del delta

pixie
21-12-2007, 15:30
no ok ho risolto....grz mille d tt...se ho ancora dei problemi t faccio sapere...grz ancora ciaociao :D

vizzz
21-12-2007, 15:34
noooooooo i goto nooooooooooo :D
meglio se trovi una soluzione senza usare i goto.

pixie
21-12-2007, 15:40
perchè????? :).... okok...no cmq perchè?? cm faccio senza??? a parte che nn funziona lo stesso pure cn i goto....cmq

ah ho un nuovo problema....qnd calcolo le soluzioni a volte qnd queste sn negative il programma mi termina cn "equazione impossibile"...e cm se controllasse le soluzioni trovate...che cavolo!!!! perchè??

vizzz
21-12-2007, 15:58
http://it.wikipedia.org/wiki/GOTO qui ti spiega come mai non si dovrebbero usare i goto in programmi strutturati :)

pixie
21-12-2007, 16:11
uhm capito....kiari cm sempre :D....grz mille...ade devo andare via poi stase do un occhiata al programma e vediamo di metterlo a posto :)....poi v faccio sapere e v rompo le balle cm sempre :D.....a presto ciaociao

pixie
21-12-2007, 20:25
ok dunque....questa è la situazione...il programma d base è stato completato finalmente grz al vostro GRANDISSIMO buon animo....quindi ade vorrei inserire una funzione che mi faccia ripartire il programma....all'inizio del programma ho un main che chiede 1 per avviare il programma o 0 per chiudere il programma....in poche parole vorrei tornare a questo punto qnd si è in fondo al programma ma cm???

pixie
21-12-2007, 20:50
tt il programma dentro un while??? wow mai fatto dai provo

pixie
21-12-2007, 20:52
no ma ferma
il problema è questo....cm faccio in fondo il programma a tornare all'inizio? ci vorrebbe tipo una chiamata al main
ma nn pox

pixie
21-12-2007, 21:53
ok capito :D.....grz mille ancora.....speriamo vada bn dai :)...ciaociao