View Full Version : [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....
// 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
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....
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...
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.
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...
Vizz se t agg a msn e mi aiuti li 10 min è un problema?
sia inteso: NN sn omosessuale....per evitare equivoci....:D
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.
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....
posso aiutarti solo qui sul forum, sono anche al lavoro eheheh
riincolla il codice che hai modificato fino ad ora.
// 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
ah sia chiaro...manca la parte del main e della lettura dei valori :D
ah si è vero ke scemo :)....cmq mi dice il compilatore (turbo c++) "code has no effect"....e me lo indica su "if (result == 0)..."
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
no ok ho risolto....grz mille d tt...se ho ancora dei problemi t faccio sapere...grz ancora ciaociao :D
noooooooo i goto nooooooooooo :D
meglio se trovi una soluzione senza usare i goto.
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è??
http://it.wikipedia.org/wiki/GOTO qui ti spiega come mai non si dovrebbero usare i goto in programmi strutturati :)
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
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???
tt il programma dentro un while??? wow mai fatto dai provo
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
ok capito :D.....grz mille ancora.....speriamo vada bn dai :)...ciaociao
vBulletin® v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.