Frage zu Zuweisungs-Operatoren

  • Word

Es gibt 24 Antworten in diesem Thema. Der letzte Beitrag () ist von Psysin-X.

    Frage zu Zuweisungs-Operatoren

    Guten Tag,
    ich bin neu im Forum und hätte gleich mal ein anliegen.
    Ich absolviere zur Zeit ein Fernstudium zum "Geprüften Programmierer", bin also noch ein blutiger Anfänger.

    Ich soll nun ein Zahlenspiel programmieren, Spieler eins gibt eine Zahl ein und Spieler zwei muss diese erraten.
    Soweit ist mir das auch klar, jedoch gibt es verschiedene Bedingungen.
    1) Die zahl wurde getroffen
    2) Die eingegebene Zahl ist zu klein
    3) Die zahl wurde um mehr als 10 verfehlt
    4) Die angegebene Zahl wurde um höchstens 10 verfehlt

    Ich weiß das ich mit Operatoren <, >, =, arbeiten muss, jedoch ist mir nicht klar wie ich das auf "10" begrenzen kann.
    Wenn ich als Zahl 55 eingebe und der zweite Spieler rät 65, würde ja Bedingung 4 eintreten.
    Zu Bedingung 1 hätte ich folgendes geschrieben.

    Quellcode

    1. ​If Zahl2 = Zahl1 Then
    2. strErgebnis = "Die zahl wurde getroffen"
    3. End If


    Kann mir jemand weiter helfen?
    Hoffe habe mich nicht zu undeutlich ausgedrückt :/

    Gruß
    Philipp
    1. Du postest im Falschen Unterforum. Ich gehe mal davon aus das du VB.Net lernst und nicht VBA
    2. If Zahl1 > (Zahl2+10) then
    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, Teil 2 bleibt auch bei VBA so :)
    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."
    Edit:
    Mit VBA habe ich mich noch nie beschäftigt und kann daher nur vermuten, dass die Syntax ähnlich ist.

    Hier paar kleine Beispiele, die aber noch unvollständig sind. Deine Aufgabe ist dazu da dich mit der If...Then...Else-Anweisung vertraut zu machen und paar (Vergleichs)Operatoren einzusetzen.

    VB.NET-Quellcode

    1. if Zahl1 = Zahl2 then
    2. ' Zahl getroffen
    3. else
    4. ' Zahl nicht getroffen
    5. if Zahl1 < Zahl2 then
    6. ' Zahl1 ist kleiner
    7. if Zahl2 - Zahl1 > 10 then
    8. ' Um mehr als 10 verfehlt.
    9. end if
    10. else
    11. ' Zahl2 ist kleiner
    12. if Zahl1 - Zahl2 > 10 then
    13. ' Um mehr als 10 verfehlt.
    14. end if
    15. end if
    16. end if


    Oder eine Lösung mit else if.

    VB.NET-Quellcode

    1. If Zahl1 = Zahl2 then
    2. ' Zahl getroffen
    3. else if Zahl1 < Zahl2 then
    4. ' Zahl1 ist kleiner
    5. else
    6. ' Zahl2 ist kleiner
    7. end if
    8. end if


    If...Then...Else-Anweisung (Visual Basic)
    msdn.microsoft.com/de-de/library/752y8abs.aspx

    Vergleichsoperatoren
    msdn.microsoft.com/de-de/library/cey92b0t.aspx

    Operatoren und Ausdrücke in Visual Basic
    http://msdn.microsoft.com/de-de/library/a1w3te48.aspx
    Ich habe das jetzt mal so probiert, funktioniert jedoch nur bedingt.

    Quellcode

    1. ​Option Explicit
    2. Private Sub cmdFertig_Click()
    3. Dim zahlA As Integer
    4. Dim zahlB As Integer
    5. Dim strErgebnis As String
    6. zahlA = Val(Me.txtEingabe1.Value)
    7. zahlB = Val(Me.txtEingabe2.Value)
    8. strErgebnis = txtErgebnis
    9. Select Case zahlA
    10. Case Is = zahlB
    11. strErgebnis = "Die Zahl wurde getroffen"
    12. Case Is > (zahlB - 10)
    13. strErgebnis = "Die Vorgabe wurde um höchstens 10 verfehlt"
    14. Case Is < (zahlB + 10)
    15. strErgebnis = "Die Vorgabe wurde um mehr als 10 verfehlt"
    16. Case Is > zahlB
    17. strErgebnis = "Die eingegebene Zahl ist zu klein"
    18. Case Is < zahlB
    19. strErgebnis = "Die eingegebene Zahl ist zu groß"
    20. Case Else
    21. End Select
    22. Me.txtErgebnis.Value = strErgebnis
    23. End Sub
    Achte auf die richtige Reihenfolge der Abfragen!
    Sobald ein Fall zutrifft, werden die restlichen Fälle übersprungen.

    Ist mehr als 10 zu klein auch ein extra behandelter Fall?

    Visual Basic-Quellcode

    1. ​Delta = Zahl2 - Zahl1
    2. If Delta = 0 Then
    3. 'getroffen
    4. ElseIf Delta < -10 Then
    5. 'mehr als 10 zu klein
    6. ElseIf Delta < 0 Then
    7. 'zu klein
    8. ElseIf Delta <= 10 Then
    9. 'zu gross
    10. Else
    11. 'mehr als 10 zu gross
    12. End If
    --
    If Not Program.isWorking Then Code.Debug Else Code.DoNotTouch
    --
    Ich habe zur Verdeutlichung mal die Aufgabe an gehangen.
    Ich erwarte aber nicht die Lösung!

    Stimmt, die Reihenfolge könnte noch ein Knackpunkt sein.
    Ich setzt mich gleich nochmal ran.
    Bilder
    • 2014-08-12 18.58.45.jpg

      2,1 MB, 2.448×3.264, 83 mal angesehen
    Beachte die Vorgabe "Die Bedingungen überschneiden sich und haben immer zwei Ausgaben".

    Visual Basic-Quellcode

    1. ​Delta = Zahl2 - Zahl1
    2. If Delta = 0 Then
    3. 'getroffen
    4. ElseIf Delta < 0 Then
    5. 'zu klein
    6. ElseIf Delta > 0 Then
    7. 'zu gross
    8. End If
    9. If Abs(Delta) > 10 Then
    10. 'mehr als 10 daneben
    11. End If
    --
    If Not Program.isWorking Then Code.Debug Else Code.DoNotTouch
    --
    Ich sehe jetzt erst das ich die Sache ganz falsch angegangen bin.
    Die Bedingungen sollen gar nicht ausgegeben werden.
    Ich hatte immer eine Bedingung und den dazu passenden Ausgabetext ausgegeben.
    Ohje, peinlich!
    Ich rolle das ganze jetzt nochmal neu auf.
    Vollkommen umsonst Kopfzerbrechen bereitet :/
    Hab es jetzt wieder geändert, stehe trotzdem aufem Schlauch...
    Der Anfang läuft jetzt, jedoch muss ich ja die mehr / weniger als 10 noch mit den anderen Ausgaben verbinden, da ja immer
    zwei Bedingungen erfüllt sein müssen. Dann muss auch noch der Text beider Bedingungen ausgegeben werden.

    Quellcode

    1. ​​If zahlB < 0 Then
    2. strErgebnis = "Sie mogeln! Die Zahl soll größer als 0 sein!"
    3. ElseIf zahlB > 100 Then
    4. strErgebnis = "Sie mogeln! Die Zahl soll kleiner als 100 sein!"
    5. End If
    6. If zahlB = zahlA Then
    7. strErgebnis = "Gratulation, Sie haben es geschafft."
    8. ElseIf zahlB > zahlA Then
    9. strErgebnis = "Sie werden übermütig."
    10. ElseIf zahlB < zahlA Then
    11. strErgebnis = "Sie müssen in größeren Dimensionen denken."
    12. ElseIf zahlB > (zahlA + 10) Then
    13. strErgebnis = "Strengen Sie sich etwas mehr an!"
    14. ElseIf zahlB < (zahlA + 10) Then
    15. strErgebnis = "Das ist schon ziemlich gut."
    16. End If
    17. Me.txtErgebnis.Value = strErgebnis
    18. End Sub

    petaod schrieb:

    Dann ist der Ansatz ja noch einfacher:

    Visual Basic-Quellcode

    1. If Delta = 0 Then
    2. 'getroffen
    3. ElseIf Abs(Delta) > 10 Then
    4. 'mehr als 10 daneben
    5. ElseIf Delta < 0 Then
    6. 'zu klein
    7. Else
    8. 'zu gross
    9. End If



    Ich steige da nicht wirklich durch.
    In der Form gab es noch nichts im Lehrgang.
    Ich verwende trotzdem jetzt mal deinen Code, mal sehen wie weit ich komme.
    Der einzige "Trick" ist, die Differenz der zwei Zahlen in die Variable "Delta" zu schreiben.
    Mit dieser Differenz lässt sich wesentlich einfacher rechnen, als wenn du jedesmal die Zahlen miteinander vergleichen musst.

    Im Geiste kannst du auch jedesmal wo "Delta" steht, "Zahl2 - Zahl1" denken.

    "Abs" ist die Betragsfunktion.
    Damit wird abgefragt, ob der Betrag des Deltas > 10 ist.
    Statt ​ElseIf Abs(Delta) > 10 Then könntest du auch schreiben
    ​ElseIf Delta > 10 Or Delta < -10 Then
    --
    If Not Program.isWorking Then Code.Debug Else Code.DoNotTouch
    --

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

    petaod schrieb:

    Der einzige "Trick" ist, die Differenz der zwei Zahlen in die Variable "Delta" zu schreiben.
    Mit dieser Differenz lässt sich wesentlich einfacher rechnen, als wenn du jedesmal die Zahlen miteinander vergleichen musst.

    Im Geiste kannst du auch jedesmal wo "Delta" steht, "Zahl2 - Zahl1" denken.

    "Abs" ist die Betragsfunktion.
    Damit wird abgefragt, ob der Betrag des Deltas > 10 ist.
    Statt ElseIf Abs(Delta) > 10 Then könntest du auch schreiben
    ElseIf Delta > 10 Or Delta < -10 Then


    So lernt man dazu.
    Auf deine weise ist es tatsächlich einfacher.
    Hatte mich schon gewundert was "Abs" heißt, danke für die Info.
    Bin das jetzt mal durch gegangen, zumindest wird jetzt immer der richtige Ausgabetext gegeben.
    Diesbezüglich bin ich jetzt schon mal einen schritt weiter.

    Quellcode

    1. ​​Option Explicit
    2. Private Sub cmdFertig_Click()
    3. Dim zahlA As Integer
    4. Dim zahlB As Integer
    5. Dim strErgebnis As String
    6. Dim Delta As Integer
    7. zahlA = Val(Me.txtEingabe1.Value)
    8. zahlB = Val(Me.txtEingabe2.Value)
    9. strErgebnis = txtErgebnis
    10. Delta = zahlA - zahlB
    11. If Delta = 0 Then
    12. strErgebnis = "Gratulation, Sie haben es geschafft"
    13. ElseIf Delta > 0 Then
    14. strErgebnis = "Sie müssen in größeren Dimensionen denken."
    15. ElseIf Delta < 0 Then
    16. strErgebnis = "Sie werden übermütig."
    17. End If
    18. If Abs(Delta) < 10 Then
    19. strErgebnis = "Das ist schon ziemlich gut."
    20. ElseIf Abs(Delta) > 10 Then
    21. strErgebnis = "Strengen Sie sich etwas mehr an!"
    22. End If
    23. Me.txtErgebnis.Value = strErgebnis
    24. End Sub
    Nachdem du jetzt soweit bist, kann ich dich noch etwas verwirren.
    Es gibt noch Optimierungspotenzial.

    Bei den beiden jeweils letzten ElseIf-Statements kannst du die Abfrage weglassen.
    z.B. ElseIf Delta < 0 Then kannst du durch ein einfaches Else ersetzen.
    Da du oben schon die Fälle =0 und >0 abgeprüft hast, bleibt nur noch der Fall <0 übrig.
    Du brauchst ihn deshalb nicht nochmals explizit abfragen.
    ;)

    Insbesonders im unteren Block, wo du auf > 10 abfragst, geht dir nämlich die 10 durch die Lappen, weil die nämlich weder >10 noch <10 ist.
    Die richtige Methode wäre da

    Visual Basic-Quellcode

    1. If Abs(Delta) <= 10 Then
    2. '
    3. Else
    4. '
    5. End If


    Ausserdem entgeht dir der Fall des Treffers.
    Du schreibst zwar oben "Gratulation" in das Ergebnis, aber unten überschreibst du das Ergebnis nochmals im Block ​If Abs(Delta) < 10 Then.
    Über dieses Problem lasse ich dich jetzt alleine nachdenken.
    --
    If Not Program.isWorking Then Code.Debug Else Code.DoNotTouch
    --

    Dieser Beitrag wurde bereits 3 mal editiert, zuletzt von „petaod“ ()