10gc (Normal User)
Rookie
Messaggi: 22
Iscritto: 19/03/2008
|
Ciao a tutti,
studio il visual basic da più di un mese da autodidatta, grazie alle vostre lezioni e alla guida di Totem che ho scaricato dal suo sito. Per esercitarmi il mio prof di mate mi ha lanciato un quesito: creare un programma per la risoluzione di equazioni di secondo grado. Vi posto quello che sono riuscito a fare fino ad adesso (devo ancora terminarlo però ):
Codice sorgente - presumibilmente VB.NET |
Module Module1 Sub Main() Dim a, b, c As Int16 Dim Delta As Single Dim x1, x2, x3 As Integer Console.WriteLine("Equazione di secondo grado del tipo: ax^2 + bx + c = 0") Do Until a <> 0 Console.WriteLine("Inserisci il valore di a: ") a = Console.ReadLine() If a = 0 Then Console.WriteLine("Il valore di a dev'essere diverso da 0") End If Loop Console.WriteLine("Inserisci il valore di b: ") b = Console.ReadLine Console.WriteLine("Inserisci il valore di c: ") c = Console.ReadLine Console.WriteLine("Il delta è: " & b ^ 2 - 4 * a * c) Console.WriteLine("La tua equazione è: " & a & "x^2 + " & b & "x + " & c & "= 0") If Delta = 0 Then x1 = -b / 2 * a Console.WriteLine("L'equazione ha una sola soluzone: " & x1) End If Console.ReadKey() End Sub End Module
|
Il problema è che nella struttura If Delta = 0 Then ecc. invece di venire -1/2 (o -0,5) mi viene -8. Come mai?? Cosa ho sbagliato??
Tutti i consigli sono bene accetti!!
PS: perdonate la mia ignoranza!!
|
|
crash outside control (Normal User)
Expert
Messaggi: 217
Iscritto: 12/02/2008
|
A me funziona...
Se dopo averlo eseguito metti:
a = 1
b = -2
c = 1
Delta è uguale 0
e va benissimo non vedo che errore ti da...
P.S. prima di mettere:
Codice sorgente - presumibilmente C# / VB.NET |
if delta = 0 then
...
end if
|
fagli calcolare delta, cioè:
delta = b ^ 2 - 4 * a * c
altrimenti lui considera delta = 0 sempre
|
|
10gc (Normal User)
Rookie
Messaggi: 22
Iscritto: 19/03/2008
|
Intanto grazie per avermi risposto
Poi volevo dirti che ho provato a fare come hai detto tu ed effettivamente il risultato viene, ma solo se utilizzo quei tra valori di a, b e c che mi hai detto tu. Prova ad utilizzare a =4, b=4, c=1
Il delta verrà sempre negativo però ti darà come soluzione: -8.
Comunque l'ho modificato
Codice sorgente - presumibilmente VB.NET |
Module Module1 Sub Main() Dim a, b, c As Int16 Dim Delta As Single Dim x1, x2, x3 As Integer Console.WriteLine("Equazione di secondo grado del tipo: ax^2 + bx + c = 0") Do Until a <> 0 Console.WriteLine("Inserisci il valore di a: ") a = Console.ReadLine() If a = 0 Then Console.WriteLine("Il valore di a dev'essere diverso da 0") End If Loop Console.WriteLine("Inserisci il valore di b: ") b = Console.ReadLine Console.WriteLine("Inserisci il valore di c: ") c = Console.ReadLine Console.WriteLine("Il delta è: " & b ^ 2 - 4 * a * c) Console.WriteLine("La tua equazione è: " & a & "x^2 + " & b & "x + " & c & "= 0") Delta = b ^ 2 - 4 * a * c If Delta = 0 Then x1 = -b / 2 * a Console.WriteLine("L'equazione ha una sola soluzone: " & x1) If Delta < 0 Then Console.WriteLine("L'equazione non ha soluzioni reali") x2 = -b + Math.Sqrt(Delta) / 2 * a x3 = -b - Math.Sqrt(Delta) / 2 * a If Delta > 0 Then Console.WriteLine("L'equazione ha due soluzioni: " & x1 & " , " & x2) End If End If End If Console.ReadKey() End Sub End Module
|
Però continua a darmi problemi. Per esempio quando il delta è negativo non fa comparire niente sulla schermata di dos, eppure c'è il comando console.writeline!!....
|
|
crash outside control (Normal User)
Expert
Messaggi: 217
Iscritto: 12/02/2008
|
Non dichiarare gli if un dentro l' altro altrimenti gli altri partono solo se il primo è vero, fai così:
Codice sorgente - presumibilmente VB.NET |
Module Module1 Sub Main() Dim a, b, c As Int16 Dim Delta As Single Dim x1, x2, x3 As Integer Console.WriteLine("Equazione di secondo grado del tipo: ax^2 + bx + c = 0") Do Until a <> 0 Console.WriteLine("Inserisci il valore di a: ") a = Console.ReadLine() If a = 0 Then Console.WriteLine("Il valore di a dev'essere diverso da 0") End If Loop Console.WriteLine("Inserisci il valore di b: ") b = Console.ReadLine Console.WriteLine("Inserisci il valore di c: ") c = Console.ReadLine Console.WriteLine("Il delta è: " & b ^ 2 - 4 * a * c) Console.WriteLine("La tua equazione è: " & a & "x^2 + " & b & "x + " & c & "= 0") Delta = b ^ 2 - 4 * a * c If Delta = 0 Then x1 = -b / 2 * a Console.WriteLine("L'equazione ha una sola soluzone: " & x1) End If If Delta < 0 Then Console.WriteLine("L'equazione non ha soluzioni reali") End If If Delta > 0 Then x2 = -b + Math.Sqrt(Delta) / 2 * a x3 = -b - Math.Sqrt(Delta) / 2 * a Console.WriteLine("L'equazione ha due soluzioni: " & x1 & " , " & x2) End If Console.ReadKey() End Sub End Module
|
Ho provato anche con:
a = 4
b = 4
c = 1
e mi ritorna il risultato esatto di delta...
|
|
10gc (Normal User)
Rookie
Messaggi: 22
Iscritto: 19/03/2008
|
Perfetto! Grazie mille x avermi fatto notare quella sciocchezza che ho fatto
PS: comunque a me dando quei valori ad a, b e c esce sempre -8!! E poi il pc sbaglia a fare i calcoli...possibile??
Ultima modifica effettuata da 10gc il 02/04/2008 alle 18:55 |
|
Il Totem (Admin)
Guru^2
Messaggi: 3635
Iscritto: 24/01/2006
|
Il programma sbaglia perchè tu sbagli:
Codice sorgente - presumibilmente Plain Text |
x2 = -b + Math.Sqrt(Delta) / 2 * a
x3 = -b - Math.Sqrt(Delta) / 2 * a
|
Quello che hai scritto qua non corrisponde alla formula esatta, poichè il tuo codice interpreta la soluzione così:
Codice sorgente - presumibilmente Plain Text |
a * (Math.Sqrt(Delta))
x2 = -b + -----------------------
2
|
Usa attentamente le parentesi (anche in quella sopra):
Codice sorgente - presumibilmente Plain Text |
x2 = (-b + Math.Sqrt(Delta)) / (2 * a)
|
Ultima modifica effettuata da Il Totem il 02/04/2008 alle 19:13 |
|
crash outside control (Normal User)
Expert
Messaggi: 217
Iscritto: 12/02/2008
|
Ma a me è delta che ritornava giusto poi il risultato boh non mi sono messo a fare i calcoli...
|
|
10gc (Normal User)
Rookie
Messaggi: 22
Iscritto: 19/03/2008
|
Grazie per l'info totem ora ho aggiunto le parentesi.
Allora il programma si comporta bene quando delta = 0, ma quando è positivo o negativo sembra che i calcoli non vadano...non capisco cosa sbaglio nello scrivere le formule, eppure ho messo anche le parentesi...Vi riposto il programma aggiornato:
Codice sorgente - presumibilmente VB.NET |
Module Module1 Sub Main() Dim a, b, c As Int16 Dim Delta As Single Dim x1, x2, x3 As Long Console.WriteLine("Equazione di secondo grado del tipo: ax^2 + bx + c = 0") Do Until a <> 0 Console.WriteLine("Inserisci il valore di a: ") a = Console.ReadLine() If a = 0 Then Console.WriteLine("Il valore di a dev'essere diverso da 0") End If Loop Console.WriteLine("Inserisci il valore di b: ") b = Console.ReadLine Console.WriteLine("Inserisci il valore di c: ") c = Console.ReadLine Console.WriteLine("Il delta è: " & b ^ 2 - 4 * a * c) Console.WriteLine("La tua equazione è: " & a & "x^2 + " & b & "x + " & c & "= 0") Delta = (b ^ 2) - (4 * a * c) If Delta = 0 Then x1 = (-b) / (2 * a) Console.WriteLine("L'equazione ha una sola soluzione: " & x1) End If If Delta < 0 Then Console.WriteLine("L'equazione non ha soluzioni reali") End If If Delta > 0 Then x2 = (-b + Math.Sqrt(Delta)) / (2 * a) x3 = (-b - Math.Sqrt(Delta)) / (2 * a) Console.WriteLine("L'equazione ha due soluzioni: " & x1 & " ; " & x2) End If Console.ReadKey() End Sub End Module
|
|
|
crash outside control (Normal User)
Expert
Messaggi: 217
Iscritto: 12/02/2008
|
Ho cambiato:
Dim x1, x2, x3 As Long
in:
Dim x1, x2, x3 As Double
e mi sembra che vada bene...
Codice sorgente - presumibilmente VB.NET |
Module Module1 Sub Main() Dim a, b, c As Int16 Dim Delta As Single Dim x1, x2, x3 As Double Console.WriteLine("Equazione di secondo grado del tipo: ax^2 + bx + c = 0") Do Until a <> 0 Console.WriteLine("Inserisci il valore di a: ") a = Console.ReadLine() If a = 0 Then Console.WriteLine("Il valore di a dev'essere diverso da 0") End If Loop Console.WriteLine("Inserisci il valore di b: ") b = Console.ReadLine Console.WriteLine("Inserisci il valore di c: ") c = Console.ReadLine Console.WriteLine("Il delta è: " & b ^ 2 - 4 * a * c) Console.WriteLine("La tua equazione è: " & a & "x^2 + " & b & "x + " & c & "= 0") Delta = (b ^ 2) - (4 * a * c) If Delta = 0 Then x1 = (-b) / (2 * a) Console.WriteLine("L'equazione ha una sola soluzione: " & x1) End If If Delta < 0 Then Console.WriteLine("L'equazione non ha soluzioni reali") End If If Delta > 0 Then x2 = (-b + Math.Sqrt(Delta)) / (2 * a) x3 = (-b - Math.Sqrt(Delta)) / (2 * a) Console.WriteLine("L'equazione ha due soluzioni: " & x1 & " ; " & x2) End If Console.ReadKey() End Sub End Module
|
Spero di esserti stato utile
|
|