[Brauche Hilfe] Konsolenanwendunng - Potenzieren

  • VB.NET

Es gibt 9 Antworten in diesem Thema. Der letzte Beitrag () ist von thedarkside21986.

    [Brauche Hilfe] Konsolenanwendunng - Potenzieren

    Hallo, ich bin neu hier im Board. Leider hab ich nirgends einen Thread zum Lösen eines solch einfachen Problems gefunden.

    Thematik:
    Bitte geben Sie eine Zahl ein: (Beíspiel 5)
    dann rechnet das Programm 1² + 2² + 3² + 4² + 5² = Ergebnis.
    Dieser Prozedur soll solange laufen bis der Benutzer die Zahl 0 eingibt.
    Dies hab ich ja bereits zum laufen gebracht.

    Nun aber das eigentliche Problem. Ich will eine Abbruchbedingung einbauen. Sollte der Benutzer keine Eingabe machen (gleich mit enter bestätigen) oder sollte der Benutzer einen Buchstaben eingeben dann soll (WriteLine "Bitte geben Sie eine gültige Zahl ein") kommen.

    ich hoffe ihr könnt mir helfen.

    VB.NET-Quellcode

    1. Imports System.Console
    2. Module Module1
    3. Dim Anzahl As String
    4. Dim Durchläufe As Integer
    5. Dim ZwErg As Integer
    6. Dim Summe As Integer
    7. Dim numericCheck As Boolean
    8. Sub Main()
    9. Do
    10. Summe = 0
    11. WriteLine("Bitte geben Sie die Anzahl der Durchläufe ein")
    12. Anzahl = ReadLine() ' nein, readline gibt Ihnen einen string zurück, aus dem müssen Sie eine Int machen
    13. Durchläufe = CInt(Anzahl)
    14. 'If Durchläufe = "" Then WriteLine("Bitte gültige Zahl eingeben")
    15. numericCheck = IsNumeric(Durchläufe)
    16. If numericCheck = False Then WriteLine("Geben Sie eine gültige Zahl ein") ' damm müssen Sie nun aber auch eien gültige zahl erneut holen.
    17. If Durchläufe = 0 Then
    18. Exit Do
    19. End If
    20. For i = 1 To Durchläufe + 0 ' unschön, das sollte schon eine int sein
    21. ZwErg = i ^ 2
    22. Summe += ZwErg
    23. Ausgabe(i)
    24. Next
    25. Endergebnis()
    26. WriteLine()
    27. 'Warten()
    28. Loop
    29. WriteLine("Das Programm wird beendet")
    30. End Sub
    31. Sub Ausgabe(ByVal i)
    32. Write(i & "²" & "+")
    33. End Sub
    34. 'Sub Warten()
    35. ' ReadLine()
    36. 'End Sub
    37. Sub Endergebnis()
    38. WriteLine("=" & Summe)
    39. End Sub
    40. End Module


    sobal ich jetzt keine Eingabe mache oder einen Buchstaben eingebe dann flieg ich aus dem Programm und die Zeile
    Durchläufe = CInt(Anzahl) wird unterringelt - es erscheint die Fehlermeldung: Ungültige Konvertierung von der Zeichenfolge k in Typ Integer.

    ich dachte mit diesem CInt (wandle ich den String in einen Integer um).

    Hoffe ihr könnt mir helfen.

    Mit bestem Dank bereits im Voraus.,
    Hallo,

    thedarkside21986 schrieb:

    ich dachte mit diesem CInt (wandle ich den String in einen Integer um).
    Schon, aber:

    thedarkside21986 schrieb:

    sobal ich jetzt keine Eingabe mache oder einen Buchstaben eingebe
    Ein Buchstabe oder gar nichts kann man schlecht in einen Integer konvertieren, das ist ja wohl klar.

    Oder versteh ich jetzt was falsch? ?(

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

    Hi.

    Das Ganze geht erheblich kürzer:

    VB.NET-Quellcode

    1. Dim input As Int32 = -1, tmp As Int32
    2. Do Until input = 0
    3. Console.Write("Zahl eingeben: ")
    4. Int32.TryParse(Console.ReadLine, input)
    5. If input <> 0 Then
    6. tmp = 0
    7. For i = 1 To input
    8. tmp += CInt(i^2)
    9. Next
    10. Console.WriteLine("Ergebnis: " & tmp.ToString)
    11. End If
    12. Loop
    Gruß
    hal2000
    Danke geht ja wirklich viel kürzer - hab gerade dein Programm ausprobiert. ok von der Ausgabe. es sollte noch erscheinen

    1² + 2² .. = Ergebnis.

    und die Abbruchbedingung Wenn Eingabe = (leer, Enter) also einfach nur tastenbestätigung oder Eingabe = Buchstabe dann soll er nicht aus dem Programm raus gehen sondern soll
    zb. schreiben Bitte gültige Zahl eingeben.

    Wie mache ich solche eine Abbruchbedingung.

    If ReadLine = "" Then WriteLine (" ...")

    diese "" bedeutet doch Platzhalter = keine Angabe oder ?

    Rot ist für ausschließlich Team-Mitglieder! MfG gs93

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

    Programm angepasst. doch weitere Bugs gefunden

    hab das Programm jetzt angepasst.
    jetzt hab ich noch 3 Probleme .. .

    1
    wenn ich zb. die Zahl 3 eingeben dann schreibt er mir

    1² + 2² + 3² +=
    dieses letzte Plus würde ich gerne weghaben das nur noch steht = Ergebnis.

    2.
    wenn ich die Taste 0 als Eingabe drücke dann soll er das Programm verlassen.
    kurze WriteMethode "Programm wird beendet" Leider schreibt er mir das und zusätzlich "
    Die Zahl ist ungültig"
    Bei der Eingabe 0 soll er sich aber das die Zahl ist ungültig sparen.

    3.
    Wenn ich eine sinnlose Eingabe mache. also entweder leer oder Buchstabe. dann schreibt er mir jetzt die Zahl ist ungültig. und verlässt das Programm.
    richtig wäre aber - das er schreibt die Zahl ist ungültig. und dann springt er zurück in die Schleife bitte Zahl eingeben.
    Kein Programmende. sonder nur erneute Eingabe verlangen


    VB.NET-Quellcode

    1. Imports System.Console
    2. Module Module1
    3. Sub Main()
    4. Dim Durchläufe As Int32 = -1, Ergebnis As Int32
    5. Do Until Durchläufe = 0
    6. Console.Write("Bitte geben Sie eine Zahl ein: ")
    7. Int32.TryParse(ReadLine, Durchläufe)
    8. If Durchläufe = 0 Then WriteLine("Programm wird beendet")
    9. If Durchläufe <> 0 Then
    10. Ergebnis = 0
    11. For i = 1 To Durchläufe
    12. Ergebnis += CInt(i ^ 2)
    13. Write(i & "²" & "+")
    14. Next
    15. Console.WriteLine("= " & Ergebnis.ToString)
    16. WriteLine()
    17. Else
    18. WriteLine("Die Zahl ist ungültig.")
    19. End If
    20. Loop
    21. End Sub
    22. End Module
    Zu 1: Füge eine Abfrage ein, die nur ein + anhängt, solange i < Durchläufe ist.
    Zu 2: Du musst den Rückgabewert von TryParse auswerten. Ist er True und "Durchläufe" enthält 0, soll das Programm beendet werden. Ist er False, enthält "Durchläufe" ebenfalls 0, aber die Konvertierung war aufgrund einer ungültigen Eingabe nicht erfolgreich, was zur "Wert ungültig"-Ausgabe führt. Damit fällt auch die Schleifenbedingung raus.

    Das ganze sieht dann so aus:

    VB.NET-Quellcode

    1. Dim input As Int32 = -1, tmp As Int32
    2. Do
    3. Console.Write("Zahl eingeben: ")
    4. If Not Int32.TryParse(Console.ReadLine, input) Then
    5. Console.WriteLine("ungültiger Wert.")
    6. Continue Do
    7. End If
    8. If input <> 0 Then
    9. tmp = 0
    10. For i = 1 To input
    11. tmp += CInt(i ^ 2)
    12. Console.Write(i & "²" & If(i < input, "+", ""))
    13. Next
    14. Console.WriteLine(" = " & tmp.ToString)
    15. Else
    16. Console.WriteLine("Ende")
    17. Exit Do
    18. End If
    19. Loop

    PS: Bei solch einfachen Beispielen ist es verschmerzbar, copy&paste-Code zu posten. Bei komplexeren Problemen solltest du das aber nicht erwarten - mit dem Anspruch steigt die Selbstbeteiligung.
    Gruß
    hal2000