Questo sito utilizza cookies solo per scopi di autenticazione sul sito e nient'altro. Nessuna informazione personale viene tracciata. Leggi l'informativa sui cookies.
Username: Password: oppure
C# / VB.NET - Problema con eq di secondo grado VB.NET
Forum - C# / VB.NET - Problema con eq di secondo grado VB.NET

Pagine: [ 1 2 ] Precedente | Prossimo
Avatar
10gc (Normal User)
Rookie


Messaggi: 22
Iscritto: 19/03/2008

Segnala al moderatore
Postato alle 16:35
Mercoledì, 02/04/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ò :D):

Codice sorgente - presumibilmente VB.NET

  1. Module Module1
  2.  
  3.     Sub Main()
  4.         Dim a, b, c As Int16
  5.         Dim Delta As Single
  6.         Dim x1, x2, x3 As Integer
  7.  
  8.         Console.WriteLine("Equazione di secondo grado del tipo: ax^2 + bx + c = 0")
  9.  
  10.  
  11.         Do Until a <> 0
  12.             Console.WriteLine("Inserisci il valore di a: ")
  13.             a = Console.ReadLine()
  14.  
  15.             If a = 0 Then
  16.                 Console.WriteLine("Il valore di a dev'essere diverso da 0")
  17.             End If
  18.         Loop
  19.  
  20.         Console.WriteLine("Inserisci il valore di b: ")
  21.         b = Console.ReadLine
  22.  
  23.         Console.WriteLine("Inserisci il valore di c: ")
  24.         c = Console.ReadLine
  25.  
  26.         Console.WriteLine("Il delta è: " & b ^ 2 - 4 * a * c)
  27.         Console.WriteLine("La tua equazione è: " & a & "x^2 + " & b & "x + " & c & "= 0")
  28.  
  29.         If Delta = 0 Then
  30.             x1 = -b / 2 * a
  31.             Console.WriteLine("L'equazione ha una sola soluzone: " & x1)
  32.  
  33.  
  34.         End If
  35.  
  36.  
  37.         Console.ReadKey()
  38.     End Sub
  39.  
  40. 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!! :k:

PS: perdonate la mia ignoranza!!

PM Quote
Avatar
crash outside control (Normal User)
Expert


Messaggi: 217
Iscritto: 12/02/2008

Segnala al moderatore
Postato alle 17:29
Mercoledì, 02/04/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

  1. if delta = 0 then
  2. ...
  3. end if


fagli calcolare delta, cioè:
delta = b ^ 2 - 4 * a * c
altrimenti lui considera delta = 0 sempre :k:

PM Quote
Avatar
10gc (Normal User)
Rookie


Messaggi: 22
Iscritto: 19/03/2008

Segnala al moderatore
Postato alle 17:51
Mercoledì, 02/04/2008
Intanto grazie per avermi risposto 8-|

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

  1. Module Module1
  2.  
  3.     Sub Main()
  4.         Dim a, b, c As Int16
  5.         Dim Delta As Single
  6.         Dim x1, x2, x3 As Integer
  7.  
  8.         Console.WriteLine("Equazione di secondo grado del tipo: ax^2 + bx + c = 0")
  9.  
  10.  
  11.         Do Until a <> 0
  12.             Console.WriteLine("Inserisci il valore di a: ")
  13.             a = Console.ReadLine()
  14.  
  15.             If a = 0 Then
  16.                 Console.WriteLine("Il valore di a dev'essere diverso da 0")
  17.             End If
  18.         Loop
  19.  
  20.         Console.WriteLine("Inserisci il valore di b: ")
  21.         b = Console.ReadLine
  22.  
  23.         Console.WriteLine("Inserisci il valore di c: ")
  24.         c = Console.ReadLine
  25.  
  26.         Console.WriteLine("Il delta è: " & b ^ 2 - 4 * a * c)
  27.         Console.WriteLine("La tua equazione è: " & a & "x^2 + " & b & "x + " & c & "= 0")
  28.  
  29.         Delta = b ^ 2 - 4 * a * c
  30.         If Delta = 0 Then
  31.             x1 = -b / 2 * a
  32.             Console.WriteLine("L'equazione ha una sola soluzone: " & x1)
  33.  
  34.             If Delta < 0 Then
  35.                 Console.WriteLine("L'equazione non ha soluzioni reali")
  36.  
  37.                 x2 = -b + Math.Sqrt(Delta) / 2 * a
  38.                 x3 = -b - Math.Sqrt(Delta) / 2 * a
  39.  
  40.                 If Delta > 0 Then
  41.                     Console.WriteLine("L'equazione ha due soluzioni: " & x1 & " , " & x2)
  42.                 End If
  43.  
  44.             End If
  45.  
  46.  
  47.         End If
  48.  
  49.  
  50.         Console.ReadKey()
  51.     End Sub
  52.  
  53. 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!!....

PM Quote
Avatar
crash outside control (Normal User)
Expert


Messaggi: 217
Iscritto: 12/02/2008

Segnala al moderatore
Postato alle 18:45
Mercoledì, 02/04/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

  1. Module Module1
  2.  
  3.     Sub Main()
  4.         Dim a, b, c As Int16
  5.         Dim Delta As Single
  6.         Dim x1, x2, x3 As Integer
  7.  
  8.         Console.WriteLine("Equazione di secondo grado del tipo: ax^2 + bx + c = 0")
  9.  
  10.  
  11.         Do Until a <> 0
  12.             Console.WriteLine("Inserisci il valore di a: ")
  13.             a = Console.ReadLine()
  14.  
  15.             If a = 0 Then
  16.                 Console.WriteLine("Il valore di a dev'essere diverso da 0")
  17.             End If
  18.         Loop
  19.  
  20.         Console.WriteLine("Inserisci il valore di b: ")
  21.         b = Console.ReadLine
  22.  
  23.         Console.WriteLine("Inserisci il valore di c: ")
  24.         c = Console.ReadLine
  25.  
  26.         Console.WriteLine("Il delta è: " & b ^ 2 - 4 * a * c)
  27.         Console.WriteLine("La tua equazione è: " & a & "x^2 + " & b & "x + " & c & "= 0")
  28.  
  29.         Delta = b ^ 2 - 4 * a * c
  30.         If Delta = 0 Then
  31.             x1 = -b / 2 * a
  32.             Console.WriteLine("L'equazione ha una sola soluzone: " & x1)
  33.         End If
  34.         If Delta < 0 Then
  35.             Console.WriteLine("L'equazione non ha soluzioni reali")
  36.         End If
  37.         If Delta > 0 Then
  38.  
  39.             x2 = -b + Math.Sqrt(Delta) / 2 * a
  40.             x3 = -b - Math.Sqrt(Delta) / 2 * a
  41.             Console.WriteLine("L'equazione ha due soluzioni: " & x1 & " , " & x2)
  42.         End If
  43.  
  44.  
  45.         Console.ReadKey()
  46.     End Sub
  47.  
  48. End Module


Ho provato anche con:
a = 4
b = 4
c = 1
e mi ritorna il risultato esatto di delta... :k:

PM Quote
Avatar
10gc (Normal User)
Rookie


Messaggi: 22
Iscritto: 19/03/2008

Segnala al moderatore
Postato alle 18:50
Mercoledì, 02/04/2008
Perfetto! Grazie mille x avermi fatto notare quella sciocchezza che ho fatto ;):k:

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
PM Quote
Avatar
Il Totem (Admin)
Guru^2


Messaggi: 3635
Iscritto: 24/01/2006

Segnala al moderatore
Postato alle 19:13
Mercoledì, 02/04/2008
Il programma sbaglia perchè tu sbagli:
Codice sorgente - presumibilmente Plain Text

  1. x2 = -b + Math.Sqrt(Delta) / 2 * a
  2. 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

  1. a * (Math.Sqrt(Delta))
  2. x2 = -b + -----------------------
  3.                       2


Usa attentamente le parentesi (anche in quella sopra):
Codice sorgente - presumibilmente Plain Text

  1. x2 = (-b + Math.Sqrt(Delta)) / (2 * a)


Ultima modifica effettuata da Il Totem il 02/04/2008 alle 19:13
PM Quote
Avatar
crash outside control (Normal User)
Expert


Messaggi: 217
Iscritto: 12/02/2008

Segnala al moderatore
Postato alle 19:28
Mercoledì, 02/04/2008
Ma a me è delta che ritornava giusto poi il risultato boh non mi sono messo a fare i calcoli... :D

PM Quote
Avatar
10gc (Normal User)
Rookie


Messaggi: 22
Iscritto: 19/03/2008

Segnala al moderatore
Postato alle 19:33
Mercoledì, 02/04/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

  1. Module Module1
  2.  
  3.     Sub Main()
  4.         Dim a, b, c As Int16
  5.         Dim Delta As Single
  6.         Dim x1, x2, x3 As Long
  7.  
  8.         Console.WriteLine("Equazione di secondo grado del tipo: ax^2 + bx + c = 0")
  9.  
  10.  
  11.         Do Until a <> 0
  12.             Console.WriteLine("Inserisci il valore di a: ")
  13.             a = Console.ReadLine()
  14.  
  15.             If a = 0 Then
  16.                 Console.WriteLine("Il valore di a dev'essere diverso da 0")
  17.             End If
  18.         Loop
  19.  
  20.         Console.WriteLine("Inserisci il valore di b: ")
  21.         b = Console.ReadLine
  22.  
  23.         Console.WriteLine("Inserisci il valore di c: ")
  24.         c = Console.ReadLine
  25.  
  26.         Console.WriteLine("Il delta è: " & b ^ 2 - 4 * a * c)
  27.         Console.WriteLine("La tua equazione è: " & a & "x^2 + " & b & "x + " & c & "= 0")
  28.  
  29.         Delta = (b ^ 2) - (4 * a * c)
  30.         If Delta = 0 Then
  31.             x1 = (-b) / (2 * a)
  32.             Console.WriteLine("L'equazione ha una sola soluzione: " & x1)
  33.         End If
  34.  
  35.         If Delta < 0 Then
  36.             Console.WriteLine("L'equazione non ha soluzioni reali")
  37.         End If
  38.  
  39.         If Delta > 0 Then
  40.             x2 = (-b + Math.Sqrt(Delta)) / (2 * a)
  41.             x3 = (-b - Math.Sqrt(Delta)) / (2 * a)
  42.             Console.WriteLine("L'equazione ha due soluzioni: " & x1 & " ; " & x2)
  43.         End If
  44.  
  45.  
  46.         Console.ReadKey()
  47.     End Sub
  48.  
  49. End Module


PM Quote
Avatar
crash outside control (Normal User)
Expert


Messaggi: 217
Iscritto: 12/02/2008

Segnala al moderatore
Postato alle 16:06
Giovedì, 03/04/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

  1. Module Module1
  2.  
  3.     Sub Main()
  4.         Dim a, b, c As Int16
  5.         Dim Delta As Single
  6.         Dim x1, x2, x3 As Double
  7.  
  8.         Console.WriteLine("Equazione di secondo grado del tipo: ax^2 + bx + c = 0")
  9.  
  10.  
  11.         Do Until a <> 0
  12.             Console.WriteLine("Inserisci il valore di a: ")
  13.             a = Console.ReadLine()
  14.  
  15.             If a = 0 Then
  16.                 Console.WriteLine("Il valore di a dev'essere diverso da 0")
  17.             End If
  18.         Loop
  19.  
  20.         Console.WriteLine("Inserisci il valore di b: ")
  21.         b = Console.ReadLine
  22.  
  23.         Console.WriteLine("Inserisci il valore di c: ")
  24.         c = Console.ReadLine
  25.  
  26.         Console.WriteLine("Il delta è: " & b ^ 2 - 4 * a * c)
  27.         Console.WriteLine("La tua equazione è: " & a & "x^2 + " & b & "x + " & c & "= 0")
  28.  
  29.         Delta = (b ^ 2) - (4 * a * c)
  30.         If Delta = 0 Then
  31.             x1 = (-b) / (2 * a)
  32.             Console.WriteLine("L'equazione ha una sola soluzione: " & x1)
  33.         End If
  34.  
  35.         If Delta < 0 Then
  36.             Console.WriteLine("L'equazione non ha soluzioni reali")
  37.         End If
  38.  
  39.         If Delta > 0 Then
  40.             x2 = (-b + Math.Sqrt(Delta)) / (2 * a)
  41.             x3 = (-b - Math.Sqrt(Delta)) / (2 * a)
  42.             Console.WriteLine("L'equazione ha due soluzioni: " & x1 & " ; " & x2)
  43.         End If
  44.  
  45.  
  46.         Console.ReadKey()
  47.     End Sub
  48.  
  49. End Module


Spero di esserti stato utile :k:

PM Quote
Pagine: [ 1 2 ] Precedente | Prossimo