Lösen EINER Gleichung mit mehreren Variablen

  • VB.NET

Es gibt 21 Antworten in diesem Thema. Der letzte Beitrag () ist von ErfinderDesRades.

    Lösen EINER Gleichung mit mehreren Variablen

    Hi. :)
    Ich bin leider noch Einsteiger bei VB und probiere so ein paar Sachen aus..
    Als letztens mein Bruder (8.Klasse) folgende Mathe HA hatte, kam mir die Idee ein entsprechendes PRogramm zu schreiben:

    Es sollen von einer Gleichung mit mehreren Variablen alle Lösungen gefunden werden.
    Beispiel: x+y = 3z

    Ausgangslage für mein Programm:

    Es ist nicht vorgeschrieben, wie viele Variablen in dieser einen Gleichung eingesetzt werden.

    Theoretisch bedeutet das doch, dass ich alle Variablenn auch als Variablen im Quelltext deklarieren muss. Hab gelesen, dass das mit splitten geht... ?(
    Und wie müsste ich dann diese Bedingung, dass die Gleichung erfüllt sein muss, im Quelltext formulieren?

    Über Lösungsansätze, Ideen und jede Hilfe bin ich mega dankbar!

    MfG Willy


    Edit: x,y,z sind im Intervall von [0;20] definiert.

    Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von „willeilll“ ()

    Damit sind die Lösungen nicht unendlich aber immer noch schwer darzustellen
    z=0,1(,2)* und z>12 gibt es nicht.
    aber dann ....
    z=3 => x+y=9
    0+9
    1+8
    2+7
    (3+6)*
    4+5
    5+4
    (6+3)*
    7+2
    8+1
    9+0
    *(wenn man davon ausgeht das x,y und z unterschiedlich sind)

    Die Frage ist jetzt wie willst du das ausgeben?
    There is no CLOUD - just other people's computers

    Q: Why do JAVA developers wear glasses?
    A: Because they can't C#

    Daily prayer:
    "Dear Lord, grand me the strength not to kill any stupid people today and please grant me the ability to punch them in the face over standard TCP/IP."
    ok.

    Soll die Gleichung als Text eingegeben werden?
    Wenn ja müsstest du einen Parser basteln der mit variablen umgehen kann (und das wird für einen anfänger sehr schwer)
    Von der Vorgehensweise her (wie man dann die einzelnen Variablen rausfindet), kannst du entweder wenn auf einer seite nur eine variable ist, für die andere seite variablen von 0,20 verwenden (das musst du dann mit permutation kombinieren um alle Möglichkeiten herauszufinden) (denke mal x,y,z sind reelle Zahlen also dann immer in 1-er Schritten) und dann das Ergebniss gleichsetzen mit dem rechten Term und dann eine Logik für Äquivalenzumformung einbauen (schaust du halt den Term an und jenachdem wonach du auflösen willst, benutzt du die Umkehrfunktion der jeweiligen Funktion und das von niedrigster bis höchster Priorität (dann auch noch die klammern zu handeln wird aber schwer)).
    meine Idee für die Ausgabe war ne Listbox, in der dann die Lösung steht.
    also bei x+y=3*z dann so:

    8 + 1 = 3 * 3 oder gleich: 8 + 1 = 9

    ____________________________________

    könnte man das ganze als schleife durchlaufen lassen (je eine für x,y,z von 0 bis 9) und dann mit einer If-Bedingung das ganze bestimmen?

    ____________________________________

    hab das jetzt für genau dieses Problem gelöst..
    allerdings halt nur für GENAU dieses, nicht den allgemeinen Fall..

    VB.NET-Quellcode

    1. Imports System.IO
    2. Public Class Form1
    3. Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
    4. Dim x, y, z As Integer
    5. Dim linker_term As Integer
    6. Dim rechter_term As Integer
    7. For x = 0 To 9
    8. For y = 0 To 9
    9. For z = 0 To 9
    10. linker_term = x + y
    11. rechter_term = 3 * z
    12. If linker_term = rechter_term Then
    13. ListBox1.Items.Add(x & " + " & y & " = " & 3 * z)
    14. End If
    15. Next
    16. Next
    17. Next
    18. End Sub
    19. End Class

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „willeilll“ ()

    Das ganze funktioniert aber nur wenn du nur eine Variable auf einer Seite hast,
    weil dann rechnest du einfach die andere seite aus und führst die äquivalenzumformung durch:

    x+y=3*z

    Bspweise x = 8 y = 1

    8+1=3*z
    9 = 3*z |:3
    3 = z


    Mit zwei oder mehr variablen auf beiden Seiten musst du erstmal für n-1 variablen einen wert definieren, dann nach der unbekannten umformen und die einsetzen
    und das mit kombinatorik kombinieren (#wortspiel) um alle Möglichkeiten durchzugehen (dabei hast du keine aussage über den definitionsbereich der einzelnen variablen und durch das stupide einsetzen kann das nen problem werden)
    und wenn ich einfach systematisch (mit hilfe der schleifen) alle Möglichkeiten ausprobiere und nur die Lösungen ausspucken lasse, wo die Gleichung erfüllt ist?
    Meinst du nicht, dass das auch für mehrere Variablen geht?
    _________________________________
    hohe Laufzeit, ich weiß..
    Mal so eine Frage: Müssen die Variablen ganzzahlig sein ?
    Wenn nicht, wovon ich ausgehe, dann gibt es wohl unendlich Lösungen @Schamash, aber halt weniger als wenn die Variablen nicht eingeschärnkt wären. Aber halt unendlich (man kann mit unendlich halt nicht einfach so rechnen).
    Bsp.: x * y = z --> [pi ; 1/pi ; 1] wäre ne Lösung.

    EDit: Fakt ist, wenn x,y,z nicht Element der ganzen Zahlen (ist das ein Eigenwort?) ist, dann kannste dir das sparen. Es gibt unendlich Lösungen. Du kannst lediglich die Gleichung nach einer Variable auflösen, sodass du die letzte "errechnen" kannst, wenn du die anderen zufällig setzt. Bringt aber auch nix.
    »There's no need to "teach" atheism. It's the natural result of education without indoctrination.« — Ricky Gervais
    Sowas?

    VB.NET-Quellcode

    1. For X = 0 To 20
    2. For Y = 0 To 20
    3. For z = 0 To 20
    4. If X + z = 3 + z Then
    5. ListBox1.Items.Add(String.Format("X = {0} | Y = {1} | Z = {2}", X, Y, z))
    6. End If
    7. Next
    8. Next
    9. Next



    Ich frage mich nur was das bringen soll. Bei y,x,z [0-20] gibt es 147 Lösungen
    There is no CLOUD - just other people's computers

    Q: Why do JAVA developers wear glasses?
    A: Because they can't C#

    Daily prayer:
    "Dear Lord, grand me the strength not to kill any stupid people today and please grant me the ability to punch them in the face over standard TCP/IP."
    @RushDen
    Daher:

    Schamash schrieb:

    Ich frage mich nur was das bringen soll. Bei y,x,z [0-20] gibt es 147 Lösungen
    There is no CLOUD - just other people's computers

    Q: Why do JAVA developers wear glasses?
    A: Because they can't C#

    Daily prayer:
    "Dear Lord, grand me the strength not to kill any stupid people today and please grant me the ability to punch them in the face over standard TCP/IP."
    Auch wenn x<>y<>z gibt es immer noch 120 lösungen. Was will man damit?
    There is no CLOUD - just other people's computers

    Q: Why do JAVA developers wear glasses?
    A: Because they can't C#

    Daily prayer:
    "Dear Lord, grand me the strength not to kill any stupid people today and please grant me the ability to punch them in the face over standard TCP/IP."
    @RushDen
    Seit wann sind denn Ganze Zahlen das Gleiche wie Reele Zahlen bitte ?

    Aber wie dem auch sei. Schamash hat in Post #11 eine funktionierende Lösung gepostet (davor vllt auch jmd schon, hab ich nicht geschaut).
    »There's no need to "teach" atheism. It's the natural result of education without indoctrination.« — Ricky Gervais
    So langsam ist aber gut.

    Das du Anfänger bist sorgt nicht automatisch dafür das wir hier zu deinen Programmiersklaven werden.
    Du hast in dem anderen Beitrag eine lösung für x <> y <> z bekommen.

    Die lösungen musst du nur noch kombinieren. Einfach mal versuchen.
    There is no CLOUD - just other people's computers

    Q: Why do JAVA developers wear glasses?
    A: Because they can't C#

    Daily prayer:
    "Dear Lord, grand me the strength not to kill any stupid people today and please grant me the ability to punch them in the face over standard TCP/IP."