Maximalen Wert rausfinden (Konsolenanwendung)

  • VB.NET

Es gibt 12 Antworten in diesem Thema. Der letzte Beitrag () ist von Mangafreak1995.

    Maximalen Wert rausfinden (Konsolenanwendung)

    Hey leute,
    folgendes, ich habn neues Buch was nich auf blutige Anfänger ausgelegt ist. Nun versteh ich 2 Zeilen nicht so ganz in dieser Konsoleanwendung, was die Funktion ist steht eig schon im Titel:

    VB.NET-Quellcode

    1. Module Module1
    2. Const Nmax As Integer = 10
    3. Sub Main()
    4. Console.WriteLine("Maximumbestimmung einer Zahlenfolge")
    5. Console.WriteLine()
    6. Dim arr(10) As Integer
    7. Dim n, max As Integer
    8. Console.WriteLine("Geben sie die gewünschte Anzahl von Werten ein: ")
    9. n = Convert.ToInt32(Console.ReadLine())
    10. If (n > Nmax) Then
    11. Console.WriteLine("Es dürfen nur " & Nmax.ToString() & "Werte eingegeben werden")
    12. Else
    13. For i As Integer = 1 To n
    14. Console.WriteLine("Geben sie die " & i.ToString() & ".Zahl ein: ")
    15. arr(i - 1) = Convert.ToInt32(Console.ReadLine)
    16. If (i = 1) Or arr(i - 1) > max Then max = arr(i - 1)
    17. Next i
    18. Console.WriteLine()
    19. Console.WriteLine("Das Maximum ist " & max.ToString & " !")
    20. End If
    21. Console.ReadLine()
    22. End Sub
    23. End Module


    Nun versteh ich diese 2 Zeilen kaum.

    VB.NET-Quellcode

    1. arr(i - 1) = Convert.ToInt32(Console.ReadLine)
    2. If (i = 1) Or arr(i - 1) > max Then max = arr(i - 1)


    Weil ich auch kaum früher mich mit Arrays beschäftigt habe..

    Nun habe ich aber mal überlegt es so zu schrieben das ich alles verstehe, und finde es so einfacher:

    VB.NET-Quellcode

    1. Module Module1
    2. Const Nmax As Integer = 10
    3. Sub Main()
    4. Console.WriteLine("Maximumbestimmung einer Zahlenfolge")
    5. Console.WriteLine()
    6. Dim n, zahlen As Integer
    7. Dim max As Integer = 1
    8. Console.WriteLine("Geben sie die gewünschte Anzahl von Werten ein: ")
    9. n = Convert.ToInt32(Console.ReadLine())
    10. If (n > Nmax) Then
    11. Console.WriteLine("Es dürfen nur " & Nmax.ToString() & "Werte eingegeben werden")
    12. Else
    13. For i As Integer = 1 To n
    14. Console.WriteLine("Geben sie die " & i.ToString() & ".Zahl ein: ")
    15. zahlen = CInt(Console.ReadLine())
    16. If zahlen >= max Then
    17. max = zahlen
    18. Else
    19. 'weiter
    20. End If
    21. Next i
    22. Console.WriteLine()
    23. Console.WriteLine("Das Maximum ist " & max.ToString & " !")
    24. End If
    25. Console.ReadLine()
    26. End Sub
    27. End Module


    Aber kann mir bitte jemand diese 2 Zeilen erklären? :)
    Also, dass links das Zuweisungsziel ist und rechts die -quelle sollte klar sein.
    arr(i - 1) - beschreibt das i-te Objekt in dem Array arr
    Convert.ToInt32() - konvertiert einen Wert in eine Integer(Int32)-Variable. Und aus denen besteht ja das Array. Console.ReadLine() ist hoffentlich klar.
    If (i = 1) Or arr(i - 1) > max Then max = arr(i - 1) - bedeutet : Wenn (der Zähler gleich 1 ist => das erste Element im Array beschreiben würde) oder (der Wert an der Stelle im Array größer ist als die Variable, die den aktuellen Höchstwert speichert) dann setzte die Variable, die den aktuellen Höchstwert speichert, auf den Wert aus dem Array an der Stelle i - 1.
    i - 1 kommt daher, dass Arrays immer bei 0 beginnen. 0 wäre also das erste Objekt im Array. Da man hier bei 1 zu zählen anfängt rechnet man noch -1. Fängt man bei 0 an und geht bis n - 1 (da es ja dann logischerweise kein n-tes Objekt gibt) kann man das -1 weglassen.
    ahhh :)

    okay verstanden, danke danke ;)

    und wenn man jetzt arr(i - 5) eingeben würde, würde der array dann bei 5 beginnen und die zahlen darunter garnicht lesen?

    und das i = 1 is ja nur für den anfang wenns das 1. mal durchläuft oder?^^

    nochwas, warum i? ( bei arr(i - 1) ) i hat doch garnix mit den eingegeben werten zutun? igrndwie da son array zu verwenden find ich total ungeeignet :/

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

    Wenn du i - 5 nimmst dann fängt er bei -4 an und du kriegst einen Fehler :P (Out of Bounds -> Index außerhalb der Liste)
    i = 1 damit der Zähler bei 1 anfägt. Würdest du diesen auf 5 setzen würde er beim 4. oder 5. Objekt anfangen. Abhängig davon ob du i-1 noch rechnest oder nicht. Es hat soweit was mit der Eingabe zu tun, da via Readline ein Wert eingelesen wird und der an die Stelle i-1 eingesetzt wird. Dort wird er dann zwischengespeichert und weiterverarbeitet. Man bräuchte das Array nicht, wenn man die Werte nicht später noch einmal braucht und man könnte auf einen einfachen Integer zurückgreifen. Das sähe dann so aus :

    VB.NET-Quellcode

    1. Dim n, max, eingabe As Integer
    2. Console.WriteLine("Geben sie die gewünschte Anzahl von Werten ein: ")
    3. n = Convert.ToInt32(Console.ReadLine())
    4. max = Integer.MinimumValue ' schon einen Wert zuteilen um eine If-Abfrage zu sparen ... weiß leider gerade nicht ob die Konstante richtig ist, da ich keine IDE zur Hand habe
    5. If (n > Nmax) Then
    6. Console.WriteLine("Es dürfen nur " & Nmax.ToString() & "Werte eingegeben werden")
    7. Else
    8. For i As Integer = 1 To n
    9. Console.WriteLine("Geben sie die " & i.ToString() & ".Zahl ein: ")
    10. eingabe = Convert.ToInt32(Console.ReadLine)
    11. If eingabe > max Then max = eingabe
    12. Next i
    13. Console.WriteLine()
    14. Console.WriteLine("Das Maximum ist " & max.ToString & " !")
    15. End If
    AHHHH also wenn ich das jetzt richtig verstanden habe, speichert er die i-te zahl in dem array die er ausgelesen hat, d.h. wenn die schleife zum 2. mal zb. durchläuft speichert er dann die 2. zahl die man eingegeben hat, im array, da der array index aber bei 0 anfängt rechnet man noch -1 ;) richtig ?

    angenommen man hat zuerst 5 eingegeben, im 2. durchlauf 3.

    Im Array( 0 = 5, 1 = 3)

    ohne das -1 wärs dann so:

    Im Array(1 = 5, 2 = 3)

    Dieser Beitrag wurde bereits 6 mal editiert, zuletzt von „n0ise“ ()

    i-1, weil Arrays bei Null anfangen zu zählen. In Mangafreaks letztem Code siehst du ja an der For-Schleife, dass er bei 1 anfängt zu zählen und bei n aufhört. Bezieht man das jetzt auf ein Array, findet man den richtigen Eintrag immer mit i-1, weil das Array ja Elemente von 0 bis n-1 hat.
    Veranschaulichung:

    VB.NET-Quellcode

    1. For h as Integer = 1 To 10 ' Das wären 9 Durchläufe

    VB.NET-Quellcode

    1. For j as Integer = 0 To 10 - 1 'Das wären auch 9 Durchläufe!

    Beim ersten Code musst du jedes mal noch minus 1 rechnen, um auf den richtigen Index zu kommen, beim zweiten hast du das "minus 1" schon in der Deklaration der Schleife.

    lg SeriTools
    | Keine Fragen per PN oder Skype.
    Ich bin ja der Meinung, dass bei dem Beispiel

    n0ise schrieb:

    ohne das -1 wärs dann so:
    Im Array(1 = 5, 2 = 3)
    eig. das Array wie folgt aussieht : Array (0 = 0, 1 = 5, 2 = 3). Weil wie gesagt die ja bei 0 anfangen. Ansonsten habe ich auch nichts mehr zu erzählen.
    @mangafreak achman vergessen^^ ja okay sonst verstanden^^ danke ;)

    eig müsste ja das array(9) sein weil da steht ja 10 also kanns ja sogar 11 werte speichern.

    VB.NET-Quellcode

    1. For i As Integer = 1 To n -1


    würde ich eifnacher finden.

    achja kleine OT frage, is das eig ein unterschied wenn man am ende der schleife noch die variable dranhängt also Next i oder nur Next ?
    Nein, beim Definieren gibt das die maximale Anzahl an Element an. Dh wenn man 10 übergibt kann man auch 10 drin speichern, aber der letzte Index ist 9. Deine For-Schleife würde dann beim 2. Element anfangen und beim letzten aufhören ;) Theoretisch gehört hinter Next i. Aber du kannst auch eine andere Variable nehmen, die den nächsten Wert bestimmt ist aber meistens unnötig.

    n0ise schrieb:

    Hey leute,
    folgendes, ich habn neues Buch was nich auf blutige Anfänger ausgelegt ist. Nun versteh ich 2 Zeilen nicht so ganz in dieser Konsoleanwendung, was die Funktion ist steht eig schon im Titel:

    [...]

    Aber kann mir bitte jemand diese 2 Zeilen erklären? :)


    Ach, ich habe noch nie so neute und formale Neueinsteiger gesehen!! ;( <- Freudenstränen!
    Ich find ihn auch sehr entgegenkommend. Sein Thread sollte als Vorzeigethread angepinnt werden :D

    Mach weiter so und du wirst hier noch sehr willkommen sein ;)