|
|||||||
|
|
|
![]() |
|
|
Strumenti |
|
|
#1 |
|
Member
Iscritto dal: Apr 2006
Messaggi: 264
|
[C++] Programma per equazioni 2° grado...
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....
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);
}
}
}
a presto ciaociao |
|
|
|
|
|
#2 |
|
Member
Iscritto dal: Apr 2006
Messaggi: 264
|
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....
|
|
|
|
|
|
#3 |
|
Member
Iscritto dal: Apr 2006
Messaggi: 264
|
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... |
|
|
|
|
|
#4 | |
|
Senior Member
Iscritto dal: Mar 2006
Città: Bergamo
Messaggi: 2499
|
Quote:
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.
__________________
ho concluso con: kvegeta, doctordb, Leland Gaunt.
|
|
|
|
|
|
|
#5 |
|
Member
Iscritto dal: Apr 2006
Messaggi: 264
|
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...
|
|
|
|
|
|
#6 |
|
Member
Iscritto dal: Apr 2006
Messaggi: 264
|
Vizz se t agg a msn e mi aiuti li 10 min è un problema?
sia inteso: NN sn omosessuale....per evitare equivoci.... |
|
|
|
|
|
#7 |
|
Senior Member
Iscritto dal: Mar 2006
Città: Bergamo
Messaggi: 2499
|
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.
__________________
ho concluso con: kvegeta, doctordb, Leland Gaunt.
|
|
|
|
|
|
#8 |
|
Member
Iscritto dal: Apr 2006
Messaggi: 264
|
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....
|
|
|
|
|
|
#9 |
|
Senior Member
Iscritto dal: Mar 2006
Città: Bergamo
Messaggi: 2499
|
posso aiutarti solo qui sul forum, sono anche al lavoro eheheh
riincolla il codice che hai modificato fino ad ora.
__________________
ho concluso con: kvegeta, doctordb, Leland Gaunt.
|
|
|
|
|
|
#10 |
|
Member
Iscritto dal: Apr 2006
Messaggi: 264
|
Codice:
// 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');
}
}
era solo per far ricominciare il programma |
|
|
|
|
|
#11 |
|
Member
Iscritto dal: Apr 2006
Messaggi: 264
|
ah sia chiaro...manca la parte del main e della lettura dei valori
|
|
|
|
|
|
#12 |
|
Member
Iscritto dal: Apr 2006
Messaggi: 264
|
ah si è vero ke scemo
|
|
|
|
|
|
#13 |
|
Member
Iscritto dal: Apr 2006
Messaggi: 264
|
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
|
|
|
|
|
|
#14 |
|
Member
Iscritto dal: Apr 2006
Messaggi: 264
|
no ok ho risolto....grz mille d tt...se ho ancora dei problemi t faccio sapere...grz ancora ciaociao
|
|
|
|
|
|
#15 |
|
Senior Member
Iscritto dal: Mar 2006
Città: Bergamo
Messaggi: 2499
|
noooooooo i goto nooooooooooo
meglio se trovi una soluzione senza usare i goto.
__________________
ho concluso con: kvegeta, doctordb, Leland Gaunt.
|
|
|
|
|
|
#16 |
|
Member
Iscritto dal: Apr 2006
Messaggi: 264
|
perchè?????
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è?? |
|
|
|
|
|
#17 |
|
Senior Member
Iscritto dal: Mar 2006
Città: Bergamo
Messaggi: 2499
|
http://it.wikipedia.org/wiki/GOTO qui ti spiega come mai non si dovrebbero usare i goto in programmi strutturati
__________________
ho concluso con: kvegeta, doctordb, Leland Gaunt.
|
|
|
|
|
|
#18 |
|
Member
Iscritto dal: Apr 2006
Messaggi: 264
|
uhm capito....kiari cm sempre
|
|
|
|
|
|
#19 |
|
Member
Iscritto dal: Apr 2006
Messaggi: 264
|
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???
|
|
|
|
|
|
#20 |
|
Member
Iscritto dal: Apr 2006
Messaggi: 264
|
tt il programma dentro un while??? wow mai fatto dai provo
|
|
|
|
|
| Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 21:18.












ho concluso con: kvegeta, doctordb, Leland Gaunt.








