Einfache Übungsaufgabe Kontrollstrukturen

  • VB.NET

Es gibt 14 Antworten in diesem Thema. Der letzte Beitrag () ist von VaporiZed.

    Einfache Übungsaufgabe Kontrollstrukturen

    Hallo,
    ich versuche gerade, eine Übungsaufgabe auf Papier zu lösen.
    Verlangt sind:
    i =
    a() =
    b() =
    c =
    d =
    e() =

    Ich bin bisher nur bis Zeile 18 gekommen und habe bis hier folgende Lösungen:
    a() = {0, 1, 2, 3, 4}
    b() = {True, True, True, True, True}
    e() = {1, 1}

    Zeile 11: hier bin ich mir nicht ganz sicher, ob ich das ReDim richtig angewendet habe (meine Annahme war, dass die Inhalte des Arrays nach jeder Iteration ja nicht gelöscht werden, daher hat der Befehl keinen wirklichen Effekt) aber das wird sich vermutlich zeigen, ob ich hier richtig lag, falls ich von jemandem feedback bekommen kann.

    Ich komme leider nicht weiter ab Zeile 20. Heißt das, dass das bisherige Array b() "für die Katz" war, da hier ja sowieso nochmals alle Inhalte gelöscht werden (da kein Preserve angegeben)? Auch, dass ab hier auf einmal b(5) steht statt wie zu Beginn b(4). Hier wäre ich dankbar, wenn mir jemand diesen Teil erläutern könnte.

    Ich habe den Code in ein neues Projekt übertragen und kann mir die Variablen ausgeben lassen aber aktuell weiß ich nicht, wie ich mir die Arrays ausgeben lassen kann. Hier benötige ich ebenfalls Unterstützung.


    VB.NET-Quellcode

    1. Sub Main(args As String())
    2. Dim i As Integer
    3. Dim a() As Double
    4. Dim b(4) As Boolean
    5. Dim c As Integer = 10
    6. Dim d As Boolean
    7. Dim e As New List(Of Integer)
    8. b(0) = True
    9. For i = 1 To 4
    10. ReDim Preserve a(i)
    11. a(i) = i
    12. b(i) = Not d Or b(i - 1)
    13. e.Add(7 Mod i)
    14. Next
    15. e.Remove(3)
    16. e.RemoveAt(0)
    17. ReDim b(5)
    18. b(5) = Not b(4)
    19. Do While d
    20. c += c
    21. If c > 30 Then
    22. Exit Do
    23. End If
    24. Loop
    25. End Sub
    also ich soll im kopf oder auf papier nachvollziehen, was das im code passiert. Jo, nette Knobelaufgabe.
    aber ich koch mir lieber'n Tee.

    aktuell weiß ich nicht, wie ich mir die Arrays ausgeben lassen kann.
    Setz doch einfach einen Haltepunkt und guck im Lokalfenster nach.
    Hinweise dazu: VisualStudio richtig nutzen (Google ist nicht deine Mami)

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

    Ich versteh die Aufgabenstellung inzwischen so:
    "Gegeben obiger Code.
    Welche Werte haben dann in Zeile #29 die angegebenen Variablen angenommen?"
    @Benutzername: bitte korrigier mich, wenn ich die Aufgabenstellung falsch verstund.

    Ansonsten mein Lösungsvorschlag ist, den Code einfach durchlaufen zu lassen mit Haltepunkt in #29, und da eben nachgucken, welche Werte die Vars angenommen haben.
    Aber das sagte ich schon - leider zwar eine Reaktion, aber genau darauf grade nicht.
    Ist also entweder überlesen worden, oder nicht verstanden.
    Gibt ja extrem viele Foren-User, die Unverstandenes immer ignorieren, und so überhaupt nicht vorankommen im Lernen.
    Weil jedes Lernen fängt ja mit Unverstandenem an.
    Nur darf mans nicht ignorieren, sondern muss nachfragen - (bzw den gegebenen Hinweisen nachgehen, und dann evtl. nachfragen) - dann bringt das was.
    Hi, ErfinderDesRades hat es ja schon geschrieben setze einen Haltepunkt und lass dir die Ergebnisse einfach von VisualStudio anzeigen.

    Das MUSS Du dir unbedingt aneignen, falls Du irgendwie weiter kommen möchtest.

    Mit dem setzten von Haltepunkten kann man dann Zeile für Zeile seinen Code "durchschreiten" und kann sich zu fast jedem Zeitpunkt den Wert von Variablen ansehen (auch Listen/Arrays etc.), um zu kontrollieren, warum das Ergebnis was man erwartet hat, dann oh wunder doch nicht am Ende rauskommt.

    Ich hab dir netterweise ein .gif angehangen mit deinem Code (click drauf) und Du kannst sehen was ich meine. Trozdem würde ich dir unbedingt raten die Zeit zu investieren, dass selber nachzumachen und zum Thema Debuggen weitere Videos zu schauen oder was auch immer bis Du weisst wie das geht...
    Bilder
    • VBPara2.gif

      1,43 MB, 704×928, 59 mal angesehen
    codewars.com Rank: 4 kyu
    @nogood Die Aufgabe besteht darin das ganze ohne technische Hilfsmittel „auf dem Papier“ zu lösen.
    "Gib einem Mann einen Fisch und du ernährst ihn für einen Tag. Lehre einen Mann zu fischen und du ernährst ihn für sein Leben."

    Wie debugge ich richtig? => Debuggen, Fehler finden und beseitigen
    Wie man VisualStudio nutzt? => VisualStudio richtig nutzen
    Ja, aber da weiss ich nicht, inwieweit man dem TE dabei helfen kann.
    Ich könnte ihm die Lösung vorsagen, und behaupten, ich hätte es mit Stift/Papier gemacht.



    @nogood: ja, so gehts auch. :thumbsup:
    Ich empfehle trotzdem, das LokalFenster auch kennenzulernen.
    In vielen Fällen übersichtlicher, man kann Screenshot machen oder Werte auskopieren - man kann Werte sogar ändern!

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

    Benutzername schrieb:

    Zeile 11: hier bin ich mir nicht ganz sicher, ob ich das ReDim richtig angewendet habe
    Ich bin davon ausgegangen, der Code sei vorgegeben. Daher die Frage: Warum besteht die Möglichkeit, dass Du was falsch verwenden kannst?

    Benutzername schrieb:

    Ich komme leider nicht weiter ab Zeile 20. Heißt das, dass das bisherige Array b() "für die Katz" war, da hier ja sowieso nochmals alle Inhalte gelöscht werden (da kein Preserve angegeben)?
    Ja, richtig. Das Array wird neu dimensioniert (ReDim b(5) bedeutet eben: Das letzte/höchste Element soll den Index 5 haben; da die Zählung bei 0 losgeht, also hast Du Platz für 6 Booleans in b) und die bisherigen Inhalte verworfen.
    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „VaporiZed“, mal wieder aus Grammatikgründen.

    Aufgrund spontaner Selbsteintrübung sind all meine Glaskugeln beim Hersteller. Lasst mich daher bitte nicht den Spekulatiusbackmodus wechseln.

    ErfinderDesRades schrieb:

    Welche Werte haben dann in Zeile #29 die angegebenen Variablen angenommen? bitte korrigier mich, wenn ich die Aufgabenstellung falsch verstund.


    Genau :)


    nogood schrieb:

    Ich hab dir netterweise ein .gif angehangen mit deinem Code (click drauf) und Du kannst sehen was ich meine.


    Danke das ist hilfreich.

    Ich hatte auch schon den Code in ein neues Projekt übertragen und habe mir dann am Ende in der Console die einzelnen Variablen ausgeben lassen nur bei den Arrays wusste ich eben nicht, wie ich das bewerkstelligen kann aber durch dein gif ist mir das schon ersichtlicher. Werde es gleich mal in "Realität" nachstellen.

    Edit: @VaporiZed: ja der Code ist vorgegeben so wie ich ihn gepostet habe. Ich habe dann eben von Hand/im Kopf begonnen, die Schleifen etc. durchzuspielen und habe mir notiert, was nach jeder Iteration passiert ist. Du musst das so verstehen, ich habe meine Vorlesungsunterlagen, da steht drin "ReDim [Preserve]: (Neu-)Dimensionierung des Arrays erfolgt zur Laufzeit durch Zuweisung oder mittels ReDim. Inhalte des Arrays werden gelöscht, kann aber mit [Preserve] verhindert werden."

    Und dann versuche ich eben mit meinem amateurhaften Verständnis nachzuvollziehen, was jetzt da genau passiert ist (zunächst eben auf dem Papier, da so die Aufgabenstellung) :(

    Ich habe eben vor Zeile 20 einen Haltepunkt gesetzt. Bis dahin bin ich ja eigenständig gekommen und bis hierhin passt auch der Inhalt des Array b() (und zwar b()={True, True, True, True, True}).
    Wenn ich jetzt einen Schritt weitergehe, hat das Array b() ja nun Platz für 6 Werte und alle sind default-mäßig False. Im nächsten Schritt b(5) = Not b(4) wird nur der 6. Wert True, alle anderen bleiben False - warum? Mein Kopf kann diesen Schritt gerade nicht verarbeiten.

    Es tut mir Leid, falls ich hier womöglich mit falschen/nicht ganz richtigen Begriffen hantiere bzw. mich unpräzise ausdrücke aber ich kanns halt noch nicht besser.


    Mittlerweile kann ich das sagen, ich habe dummerweise den Fehler gemacht und habe diesen als "Einführungsveranstaltung" bezeichneten Kurs in der Uni belegt, da ich dachte durch das online-Semester bin ich sowieso nur am PC. Da ich auch eine gewisse Affinität zum Thema PC besitze, dachte ich, das könnte mir vielleicht sogar Spaß machen. Inzwischen bereue ich diese Entscheidung zutiefst, da ich seit Semesterbeginn im November quasi null Fortschritte gemacht habe. Ist ja nicht mein erster Beitrag hier - habe dieses Forum in meiner Verzweiflung gefunden. Egal an welcher Übung ich mich bisher versucht habe, es zeigt sich direkt nach den ersten Antworten, dass ich mich hier überhaupt nicht mehr weiterversuchen brauche. Offenbar bin ich nicht in der Lage, mit dem was ich aus den Vorlesungen extrahieren kann, die Übungen auch nur ansatzweise zu bearbeiten. Vielleicht sind es ja auch die falschen Übungen für mich aber ich hab leider keine andere Bezugsquelle. Das hat mir direkt zu Beginn schon sämtliche Motivation genommen. Naja, am Donnerstag ist die Klausur und da hoffe ich, einfach nur irgendwie zu bestehen und mich dann nie wieder mit Programmieren auseinandersetzen muss. Dafür gibt es zum Glück Leute, die mehr Spaß an der Sache haben und zum Teil auch Geld dafür bekommen :D

    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „Benutzername“ ()

    Benutzername schrieb:

    Im nächsten Schritt b(5) = Not b(4) wird nur der 6. Wert True, alle anderen bleiben False - warum?
    Alles andere hätte mich erstaunt.
    Du hasst ein Array von 0 bis 5, die Elemente sind alle False.
    Dann setzt du den Wert an der Position 5 auf True.
    Die anderen Array-Elemente bleiben natürlich unberührt.
    --
    If Not Program.isWorking Then Code.Debug Else Code.DoNotTouch
    --
    Korrekt. Das Feld wird mit ReDim quasi auf Null gesetzt. Und das heißt bei Boolean: alles auf False. Und da Not der "Gegenteil-Operator" ist und True das Gegenteil von False ist, wird Position 6 eben zu True.
    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „VaporiZed“, mal wieder aus Grammatikgründen.

    Aufgrund spontaner Selbsteintrübung sind all meine Glaskugeln beim Hersteller. Lasst mich daher bitte nicht den Spekulatiusbackmodus wechseln.