Veröffentlicht 25. April 201510 j Ich sehe in fast allen Lösungen der IHK Folgendes: for i = 0 to i < array.Länge -1 ........ end for Was soll denn das "-1" da? :confused:
25. April 201510 j Wird wohl um Off-by-one errors gehen. Wenn man über einen kompletten Array iterieren möchte, nimmt man normalerweise einfach (i < array.Länge). In deinem Fall (i < array.Länge-1) würde der letzte Index ausgelassen, FALLS i tatsächlich genutzt wird, um die Indizes nacheinander auszuwählen. Ein sinnvoller use-case für die Schleife ist vielleicht, wenn man darin prüft ob array[i+1] irgendeine Bedingung erfüllt, dann würde es nämlich bei i == array.Länge krachen. Bearbeitet 25. April 201510 j von larsson
25. April 201510 j Das hängt von der zugrundeliegenden Sprache ab, bei manchen ist die Länge des Arrays nicht identisch mit dem Index des letzten Elements. In Pascal z.B. ist die Länge eines Feldes gleichzeitig auch der Index des letzten Elements, da die Zählung bei 1 beginnen. In anderen Sprachen jedoch(C, C++, Java) hat das erste Element den Index 0. Damit ist ein Zugriff auf das letzte Element mit dem Index length-1 möglich. Anderenfalls führt dies zu einem Laufzeitfehler. Ich kenne die genaue Aufgabenstellung nicht und wenn es rein um ein bisschen Pseudocode geht versteh ich das leider nicht.
26. April 201510 j Autor Das hängt von der zugrundeliegenden Sprache ab, bei manchen ist die Länge des Arrays nicht identisch mit dem Index des letzten Elements. Wenn die Länge nicht identisch mit dem Index des letzten Elements ist (null-basierend), dann wäre "-1" doch falsch. Und wenn die Länge identisch mit dem Index ist, dann müsste man i mit 1 initialisieren und der Länge ein "+1" spendieren. Aufgefallen ist mir das z.B. in der Sommer 14 GA1 HS: 3 und der Winter 14 GA1 HS: 3 und 4. Alles einfache Zählschleifen für alle Elemente eines Arrays, bei denen i mit 0 beginnnt und die Bedingung auf Länge -1 lautet. Die Bedingung kann eigentlich nur falsch sein egal in welcher Sprache.
26. April 201510 j Hast du dazu mal ein konkretes Beispiel, was innerhalb der Schleife passieren soll?
26. April 201510 j Wenn die Länge nicht identisch mit dem Index des letzten Elements ist (null-basierend), dann wäre "-1" doch falsch.Du hast recht. -1 wäre richtig, wenn da <= stünde.
26. April 201510 j Autor Hast du dazu mal ein konkretes Beispiel, was innerhalb der Schleife passieren soll? Z.B. die hier: http://www.fachinformatiker.de/pruefungsaufgaben-loesungen/161773-abschlusspruefung-ga1-winter-2014-15-fiae.html Wobei bei der in der Lösung auch noch das falsche Array genommen wurde. Oder die hier: 3. Hancllungsschritt (25 Pu_nkte) Pseudocode (Alternative Ltisungen sind méglich.) rechnungsausgabe (kunde: Kunde): double gesamt_summe := 0 bestellungen := kunde.getBestellungen() ffir i := O bis Lénge von bestellungen — 1 bestellung := bestellungen[ i ] seite := 1 zeile := 1 rechnungs_summe := 0 druckeSeitenKopf(seite) druckeRechnungsKopf(kunde, beste1lung.getBestel1Nr()) druckePositi0nenKopf() bestellpositionen := bestellung.getBestel1Positionen() ffir j := O bis Lénge von bestellpositionen — 1 wenn zeile > 20 seite := seite + 1 druckeSeitenkopf(seite) druckePositionenKopf() zeile := 1 ende wenn bp := bestellpositionen[ j ] druckePositionsZeile(bp.getPosNr(), bp.getArtike1().getArtikelNr(), bp.getArtikel().getBezeichnung(), bp.getEinzelpreis(), bp.getMenge() ) rechnungs_summe := rechnungs_summe + bp.getEinzelpreis() * bp.getMenge() zeile := zeile + 1 ends j druckeRechnungsFuss(rechnungs_summe, kunde.getRabatt()) gesamt_summe := gesamt_summe + rechungs_summe ende i Rfickgabe(gesamt_summe) ende rechnungsausgabe
26. April 201510 j Oder die hier: Wenn man die Schleife als "Von bis" formuliert, ist das -1 richtig. Eine for-Schleife ist nicht "Von bis", sondern "Solange wie".
26. April 201510 j Autor Wenn man die Schleife als "Von bis" formuliert, ist das -1 richtig. Eine for-Schleife ist nicht "Von bis", sondern "Solange wie". Oh ja! :upps das bis hab ich total überlesen.. Danke ^^
13. Mai 201510 j hmm was mir noch auffällt: nirgendwo wird die schrittweite angegeben. ich hatte mir immer angewöhnt eine for-schleife so zu deklarieren: für i=0 bis i=array.länge -1; sw=1 oder solange i=0 < array.länge; sw=1
13. Mai 201510 j Ist für Pseudo-Code auch nicht wirklich nötig, da Schrittweite 1 der Standard ist. Wenn du was anderes brauchst (+2, -1, ...), solltest du das hinschreiben.
13. Mai 201510 j naja habs mir halt angewöhnt, da man ja nie weiß wie pingelich der prüfer ist und es ist ja auch kaum mehraufwand.
Erstelle ein Konto oder melde dich an, um einen Kommentar zu schreiben.