{"beispielaufgaben":[{"artefakt_id":"artefakt.quellcode","aufgabe":[{"text":"Sie unterstützen die IT-Abteilung eines städtischen Schwimmbades. Für die Auswertung der täglichen Wassertemperaturen wurde die folgende Funktion in Pseudocode erstellt. Sie soll den Durchschnitt aller übergebenen Messwerte berechnen und zurückgeben. Übergeben wird eine nicht leere Liste ganzzahliger Messwerte, zum Beispiel [22, 24, 20, 26]. Die Funktion wird nach jeder Öffnungszeit einmal aufgerufen, um den Tagesmittelwert für den Betriebsbericht zu dokumentieren. In der Funktion liegen genau zwei semantische Fehler vor.","typ":"absatz"},{"text":"1  Funktion berechneDurchschnitt(messwerte):\n2      summe = 0\n3      anzahl = 0\n4      Für jeden wert in messwerte:\n5          summe = wert\n6          anzahl = anzahl + 1\n7      durchschnitt = summe / messwerte\n8      Rückgabe durchschnitt\n9  Ende Funktion","typ":"absatz"},{"text":"Nennen Sie die beiden fehlerhaften Zeilennummern und korrigieren Sie jeweils die vollständige Quellcodezeile. Andere Zeilen dürfen Sie nicht verändern; Variablennamen und Struktur bleiben erhalten.","typ":"absatz"}],"beispiel_id":"bsp-programmfehleranalyse-und-debugging-korrigieren-quellcode-01","freigabeart":"maschinell","loesung":[{"text":"Erwartete Lösung (2 Fehler, je 4 Punkte):\nZeile 5: summe = summe + wert (Aufsummierung statt Überschreiben) – 4 Punkte (2 P Zeilennummer, 2 P korrigierte Zeile).\nZeile 7: durchschnitt = summe / anzahl (Division durch Anzahl der Werte statt durch die Liste) – 4 Punkte (2 P Zeilennummer, 2 P korrigierte Zeile).\nNur die genannten Positionen sind zu bepunkten; sinngemäß gleichwertige, vollständige Zeilenangaben sind zulässig. Bei richtiger Zeilennummer ohne korrekte Zeile jeweils nur die Teilpunkte für die Position.","typ":"absatz"}],"operator_id":"operator.korrigieren","pruefungszuordnung":{"berufe":[],"teil":"AP1"},"punkte":8,"punkterahmen":{"max":8,"min":2},"quellen":["ap1-2021-herbst-gesamt-a02-e","ap1-2025-herbst-gesamt-a04-d-db","ap2-fiae-2025-winter-ae2-a03-b-bb"]},{"artefakt_id":"artefakt.quellcode","aufgabe":[{"text":"Im Rahmen der Qualitätssicherung eines Onlineshops prüfen Sie eine Java-Methode. Sie soll die Anzahl der Bestellwerte zählen, die größer als 100 sind, und diese Anzahl zurückgeben. Übergeben wird ein nicht leeres int-Array mit den Bestellwerten. In der Methode befinden sich genau zwei semantische Fehler.","typ":"absatz"},{"text":"1  int zaehleGrosseBestellungen(int[] werte) {\n2      int anzahl = 1;\n3      for (int i = 0; i <= werte.length; i++) {\n4          if (werte[i] > 100) {\n5              anzahl = anzahl + 1;\n6          }\n7      }\n8      return anzahl;\n9  }","typ":"code"},{"text":"Nennen Sie die beiden fehlerhaften Zeilennummern und geben Sie jeweils die vollständige korrigierte Codezeile an.","typ":"absatz"}],"beispiel_id":"bsp-programmfehleranalyse-und-debugging-korrigieren-quellcode-02","freigabeart":"maschinell","loesung":[{"text":"Erwartete Lösung (2 Fehler, je 2 Punkte):\nZeile 2: int anzahl = 0; (Startwert 0 statt 1, sonst systematisch um eins zu hoch) – 2 Punkte (1 P Zeilennummer, 1 P korrigierte Zeile).\nZeile 3: for (int i = 0; i < werte.length; i++) { (Schleifengrenze < statt <=, sonst Zugriff außerhalb des Arrays) – 2 Punkte (1 P Zeilennummer, 1 P korrigierte Zeile).\nNur die genannten Positionen werden bepunktet; vollständige, semantisch korrekte Zeilen gelten als richtig.","typ":"absatz"}],"operator_id":"operator.korrigieren","pruefungszuordnung":{"berufe":[],"teil":"AP1"},"punkte":4,"punkterahmen":{"max":8,"min":2},"quellen":["ap1-2021-herbst-gesamt-a02-e","ap1-2025-herbst-gesamt-a04-d-db","ap2-fiae-2025-winter-ae2-a03-b-bb"]},{"artefakt_id":"artefakt.quellcode","aufgabe":[{"text":"Sie betreuen die Kassensoftware einer Bäckerei. Die folgende Pseudocode-Funktion soll den Endpreis als Produkt aus Nettopreis und Menge berechnen. Übergeben werden ein positiver Nettopreis und eine positive Menge. In der Funktion liegt genau ein Fehler vor.","typ":"absatz"},{"text":"1  Funktion berechneEndpreis(nettopreis, menge):\n2      endpreis = nettopreis + menge\n3      Rückgabe endpreis\n4  Ende Funktion","typ":"absatz"},{"text":"Korrigieren Sie die fehlerhafte Zeile und geben Sie die vollständige korrigierte Zeile an.","typ":"absatz"}],"beispiel_id":"bsp-programmfehleranalyse-und-debugging-korrigieren-quellcode-03","freigabeart":"maschinell","loesung":[{"text":"Erwartete Lösung (1 Fehler):\nZeile 2: endpreis = nettopreis * menge (Multiplikation statt Addition) – 2 Punkte.\nBewertung: 2 P bei korrekter vollständiger Zeile mit richtiger Operation; 1 P, wenn nur die richtige Zeile/Operation ohne vollständige Zeilenangabe genannt wird. Sinngemäß gleichwertige, vollständige Formulierung ist zulässig.","typ":"absatz"}],"operator_id":"operator.korrigieren","pruefungszuordnung":{"berufe":[],"teil":"AP1"},"punkte":2,"punkterahmen":{"max":8,"min":2},"quellen":["ap1-2021-herbst-gesamt-a02-e","ap1-2025-herbst-gesamt-a04-d-db","ap2-fiae-2025-winter-ae2-a03-b-bb"]},{"artefakt_id":"artefakt.freitextantwort","aufgabe":[{"text":"Sie entwickeln Software für ein Kühllager. Eine Funktion soll zählen, wie viele Temperaturmesswerte den zulässigen Grenzwert überschreiten. Die Liste messwerte ist 1-basiert, gültige Indizes reichen von 1 bis length(messwerte). Der folgende Pseudocode soll die Anzahl der Werte oberhalb von grenze zurückgeben, enthält jedoch genau zwei fachliche Fehler:","typ":"absatz"},{"text":"01 funktion zaehleUeberschreitungen(messwerte, grenze)\n02   anzahl = 0\n03   für index von 1 bis length(messwerte)-1\n04     wenn messwerte[index] < grenze dann\n05       anzahl = anzahl + 1\n06     ende wenn\n07   ende für\n08   gib anzahl zurück\n09 ende funktion","typ":"absatz"},{"text":"Beschreiben Sie für beide Fehler, warum die jeweilige Zeile das erwartete Verhalten verhindert, und geben Sie die betroffene Zeilennummer mit vollständiger Korrektur an.","typ":"absatz"}],"beispiel_id":"bsp-programmfehleranalyse-und-debugging-beschreiben-freitextantwort-01","freigabeart":"maschinell","loesung":[{"text":"Erwartete Lösung (2 Fehler, je 2 Punkte = 4 Punkte).\nFehler 1 – Zeile 03: Die Schleife endet bei length(messwerte)-1 und lässt den letzten Messwert unberücksichtigt, daher wird ggf. zu wenig gezählt. Korrektur: \"für index von 1 bis length(messwerte)\". (1 P. Beschreibung, 1 P. korrigierte Zeile)\nFehler 2 – Zeile 04: Der Vergleich \"<\" zählt Werte unterhalb statt oberhalb der Grenze. Korrektur: \"wenn messwerte[index] > grenze dann\". (1 P. Beschreibung, 1 P. korrigierte Zeile)\nFachlich gleichwertige Beschreibungen und Korrekturen sind anzuerkennen.","typ":"absatz"}],"operator_id":"operator.beschreiben","pruefungszuordnung":{"berufe":["FIAE"],"teil":"AP2"},"punkte":4,"punkterahmen":{"max":4,"min":4},"quellen":["ap2-fiae-2022-winter-ae2-a02-a-ab"]},{"artefakt_id":"artefakt.freitextantwort","aufgabe":[{"text":"Sie sind Fachinformatiker/-in für Anwendungsentwicklung und wirken in einem Projekt zur Gebäudeautomation mit. Ein Kollege hat in Pseudocode eine Funktion entworfen, die zählt, wie viele gemessene Raumtemperaturen oberhalb eines Grenzwerts liegen. Die Funktion erhält eine Liste ganzzahliger Messwerte sowie den ganzzahligen Grenzwert und gibt die Anzahl der überschreitenden Werte zurück; bei leerer Liste ist das Ergebnis null. Für werte = [21, 26, 19, 30] und grenze = 24 wird die Rückgabe 2 erwartet. Beim Test liefert die Funktion jedoch falsche Ergebnisse; der Pseudocode enthält genau zwei fachliche Fehler.","typ":"absatz"},{"text":"01 Funktion zaehleUeberschreitungen(werte, grenze):\n02   anzahl := 1\n03   Für jeden wert in werte:\n04     Wenn wert > grenze dann:\n05       anzahl := anzahl\n06     Ende Wenn\n07   Ende Für\n08   Rückgabe anzahl","typ":"absatz"},{"text":"Beschreiben Sie beide Fehler. Nennen Sie dazu jeweils die betroffene Zeilennummer und beschreiben Sie, worin der jeweilige Fehler besteht.","typ":"absatz"}],"beispiel_id":"bsp-programmfehleranalyse-und-debugging-beschreiben-freitextantwort-02","freigabeart":"maschinell","loesung":[{"text":"Insgesamt 4 Punkte, je Fehler 2 Punkte (1 Punkt für die richtige Zeilennummer, 1 Punkt für die zutreffende Beschreibung).","typ":"absatz"},{"text":"Fehler 1: Zeile 02 (1 P.) – die Zählvariable anzahl wird mit 1 statt mit 0 initialisiert; der Startwert ist zu hoch, dadurch enthält das Ergebnis von Beginn an einen zusätzlichen, nicht vorhandenen Treffer (1 P.).","typ":"absatz"},{"text":"Fehler 2: Zeile 05 (1 P.) – die Zuweisung anzahl := anzahl verändert den Zähler nicht; ein tatsächlich überschreitender Wert wird deshalb nicht mitgezählt, korrekt wäre eine Erhöhung um eins, also anzahl := anzahl + 1 (1 P.).","typ":"absatz"},{"text":"Sinngemäße, fachlich gleichwertige Beschreibungen sind anzuerkennen. Beide Fehler sind unabhängig voneinander zu bewerten. Reine Stiländerungen werden nicht bepunktet.","typ":"absatz"}],"operator_id":"operator.beschreiben","pruefungszuordnung":{"berufe":["FIAE"],"teil":"AP2"},"punkte":4,"punkterahmen":{"max":4,"min":4},"quellen":["ap2-fiae-2022-winter-ae2-a02-a-ab"]},{"artefakt_id":"artefakt.freitextantwort","aufgabe":[{"text":"Für eine Gebäudeüberwachung soll eine Funktion prüfen, ob alle gemessenen Luftfeuchtewerte innerhalb eines erlaubten Bereichs liegen, und wahr oder falsch zurückgeben. Der folgende Pseudocode durchläuft alle Werte der Liste werte, enthält jedoch genau zwei fachliche Fehler:","typ":"absatz"},{"text":"01 funktion alleImBereich(werte, minimum, maximum)\n02   ergebnis = falsch\n03   für jeder wert in werte\n04     wenn wert < minimum oder wert > maximum dann\n05       ergebnis = wahr\n06     ende wenn\n07   ende für\n08   gib ergebnis zurück\n09 ende funktion","typ":"absatz"},{"text":"Beschreiben Sie für beide Fehler, warum die Funktion nicht das erwartete Wahrheitsergebnis liefert, und geben Sie jeweils die betroffene Zeilennummer mit vollständig korrigierter Zeile an.","typ":"absatz"}],"beispiel_id":"bsp-programmfehleranalyse-und-debugging-beschreiben-freitextantwort-03","freigabeart":"maschinell","loesung":[{"text":"Erwartete Lösung (2 Fehler, je 2 Punkte = 4 Punkte).\nFehler 1 – Zeile 02: ergebnis wird mit falsch vorbelegt, obwohl vor der Prüfung von \"alle im Bereich\" ausgegangen werden muss; so wird selbst bei nur gültigen Werten falsch zurückgegeben. Korrektur: \"ergebnis = wahr\". (1 P. Beschreibung, 1 P. korrigierte Zeile)\nFehler 2 – Zeile 05: Bei einem Wert außerhalb des Bereichs wird ergebnis auf wahr statt falsch gesetzt. Korrektur: \"ergebnis = falsch\". (1 P. Beschreibung, 1 P. korrigierte Zeile)\nFachlich gleichwertige Beschreibungen und Korrekturen sind anzuerkennen.","typ":"absatz"}],"operator_id":"operator.beschreiben","pruefungszuordnung":{"berufe":["FIAE"],"teil":"AP2"},"punkte":4,"punkterahmen":{"max":4,"min":4},"quellen":["ap2-fiae-2022-winter-ae2-a02-a-ab"]},{"artefakt_id":"artefakt.freitextantwort","aufgabe":[{"text":"In einer Stadtbibliothek soll eine Funktion ermitteln, wie viele der verliehenen Medien überzogen sind. Für jedes Medium enthält das Feld 'tageUeberzogen' die Anzahl der überschrittenen Tage. Der folgende Pseudocode soll die Gesamtzahl der überzogenen Medien zurückgeben, liefert im Test aber höchstens den Wert 1.","typ":"absatz"},{"text":"Z01 Funktion zaehleUeberzogen(medien):\nZ02   anzahl = 0\nZ03   Für jedes medium in medien:\nZ04       anzahl = 0\nZ05       Wenn medium.tageUeberzogen > 0:\nZ06           anzahl = anzahl + 1\nZ07   Rückgabe anzahl","typ":"absatz"},{"text":"Erläutern Sie, warum die Funktion nicht das erwartete Ergebnis liefert.","typ":"absatz"}],"beispiel_id":"bsp-programmfehleranalyse-und-debugging-erlaeutern-freitextantwort-01","freigabeart":"maschinell","loesung":[{"text":"Erwartet wird die Erkenntnis, dass 'anzahl' in Zeile Z04 innerhalb der Schleife bei jedem Durchlauf erneut auf 0 gesetzt wird. Dadurch geht der bereits gezählte Wert bei jedem Medium verloren; am Ende gibt 'anzahl' nur das Ergebnis für das letzte Medium wieder und beträgt 0 oder 1. Die Nullsetzung dürfte nur einmal vor der Schleife (Z02) stehen. Punkteverteilung: 1 P für die Lokalisierung der Rücksetzung innerhalb der Schleife (Z04), 2 P für die nachvollziehbare Erläuterung der Wirkung; sinngemäße Formulierungen sind anzuerkennen.","typ":"absatz"}],"operator_id":"operator.erlaeutern","pruefungszuordnung":{"berufe":[],"teil":"AP1"},"punkte":3,"punkterahmen":{"max":3,"min":3},"quellen":["ap1-2025-herbst-gesamt-a04-d-da"]},{"artefakt_id":"artefakt.freitextantwort","aufgabe":[{"text":"Ein Fitnessstudio wertet die während einer Trainingseinheit gemessenen Pulswerte aus. Die folgende Funktion soll aus einer nicht leeren Liste von Messwerten den Durchschnittspuls berechnen und zurückgeben. Im Test liefert sie jedoch durchgehend viel zu große Werte.","typ":"absatz"},{"text":"Z01 Funktion durchschnittspuls(messwerte):\nZ02   summe = 0\nZ03   anzahl = 0\nZ04   Für jeder wert in messwerte:\nZ05       summe = summe + wert\nZ06       anzahl = anzahl + 1\nZ07   Rückgabe summe * anzahl","typ":"absatz"},{"text":"Erläutern Sie, warum die Funktion keinen korrekten Durchschnitt liefert.","typ":"absatz"}],"beispiel_id":"bsp-programmfehleranalyse-und-debugging-erlaeutern-freitextantwort-02","freigabeart":"maschinell","loesung":[{"text":"Erwartet wird die Erkenntnis, dass in Zeile Z07 die Summe mit der Anzahl multipliziert statt durch sie geteilt wird. Ein Mittelwert entsteht jedoch nur durch Division der Summe durch die Anzahl der Werte; die Multiplikation vergrößert das Ergebnis stark und ist deshalb fachlich falsch. Zu erwarten wäre 'Rückgabe summe / anzahl'. Punkteverteilung: 1 P für das Erkennen der fehlerhaften Rechenoperation in Z07, 2 P für die Erläuterung, warum nur die Division den Durchschnitt ergibt; sinngemäße Formulierungen sind anzuerkennen.","typ":"absatz"}],"operator_id":"operator.erlaeutern","pruefungszuordnung":{"berufe":[],"teil":"AP1"},"punkte":3,"punkterahmen":{"max":3,"min":3},"quellen":["ap1-2025-herbst-gesamt-a04-d-da"]},{"artefakt_id":"artefakt.freitextantwort","aufgabe":[{"text":"In der Buchhaltung eines Onlinehändlers soll eine Funktion die Summe aller Tagesumsätze bilden. Übergeben wird eine Liste von Buchungen, die jeweils ein Feld 'betrag' besitzen. Der Code gibt im Test jedoch stets nur den ersten Betrag zurück.","typ":"absatz"},{"text":"Z01 Funktion summeUmsaetze(buchungen):\nZ02   summe = 0\nZ03   Für jede buchung in buchungen:\nZ04       summe = summe + buchung.betrag\nZ05       Rückgabe summe","typ":"absatz"},{"text":"Erläutern Sie, warum die Funktion die Umsätze nicht vollständig aufsummiert.","typ":"absatz"}],"beispiel_id":"bsp-programmfehleranalyse-und-debugging-erlaeutern-freitextantwort-03","freigabeart":"maschinell","loesung":[{"text":"Erwartet wird die Erkenntnis, dass die Anweisung 'Rückgabe summe' in Zeile Z05 innerhalb der Schleife steht und die Funktion damit bereits nach dem ersten Durchlauf verlassen wird. Weitere Buchungen werden nicht mehr addiert, sodass nur der erste Betrag zurückgegeben wird. Die Rückgabe müsste erst nach dem Schleifenende erfolgen. Punkteverteilung: 1 P für das Erkennen der Rückgabe innerhalb der Schleife (Z05), 2 P für die Erläuterung des vorzeitigen Abbruchs und seiner Wirkung auf das Ergebnis; sinngemäße Formulierungen sind anzuerkennen.","typ":"absatz"}],"operator_id":"operator.erlaeutern","pruefungszuordnung":{"berufe":[],"teil":"AP1"},"punkte":3,"punkterahmen":{"max":3,"min":3},"quellen":["ap1-2025-herbst-gesamt-a04-d-da"]},{"artefakt_id":"artefakt.freitextantwort","aufgabe":[{"text":"Sie arbeiten in der Softwareentwicklung einer Musikschule. Für die Auswertung der wöchentlich erfassten Übungszeiten wurde eine Methode implementiert. Sie soll je Instrumentengruppe sowie abschließend für alle Gruppen zusammen die minimale, die maximale und die durchschnittliche Übungsdauer in Minuten sowie die Anzahl der erfassten Einheiten ausgeben. Die Datensätze liegen aufsteigend nach Instrumentengruppe sortiert vor.","typ":"absatz"},{"text":"Datensatzstruktur:\nstruct EinheitData { int Id; string Gruppe; int Minuten; }","typ":"code"},{"text":"Testdaten:\nId | Gruppe | Minuten\n0 | Gitarre | 40\n1 | Gitarre | 80\n2 | Klavier | 90","typ":"absatz"},{"text":"Erwartete Ausgabe:\nAuswertung Übungszeiten\nAuswertung für Gruppe Gitarre\nMinimum: 40\nMaximum: 80\nDurchschnitt: 60\nAnzahl Einheiten: 2\nAuswertung für Gruppe Klavier\nMinimum: 90\nMaximum: 90\nDurchschnitt: 90\nAnzahl Einheiten: 1\nGesamtauswertung\nMinimum: 40\nMaximum: 90\nDurchschnitt: 70\nAnzahl Einheiten: 3","typ":"absatz"},{"text":"Gegebener Pseudocode (Zeilennummern sind verbindlich):\n01 UebungsAuswertung(List<EinheitData> liste) : void\n02   WriteLn(\"Auswertung Übungszeiten\");\n03   EinheitData e0 = liste[0];\n04   string gruppe = e0.Gruppe;\n05   int grpMin = e0.Minuten;\n06   int grpMax = 0;\n07   int grpAnzahl = 0;\n08   int grpSumme = 0;\n09   int gesMin = 100000;\n10   int gesMax = 0;\n11   int gesAnzahl = 0;\n12   int gesSumme = 0;\n13   foreach(EinheitData e in liste)\n14     if ( gruppe != e.Gruppe )\n15       WriteLn(\"Auswertung für Gruppe \" + gruppe);\n16       WriteLn(\" Minimum: \" + grpMin);\n17       WriteLn(\" Maximum: \" + grpMax);\n18       WriteLn(\" Durchschnitt: \" + grpSumme / grpAnzahl);\n19       WriteLn(\" Anzahl Einheiten: \" + grpAnzahl);\n20       gesAnzahl = gesAnzahl + grpAnzahl;\n21       gesSumme = gesSumme + grpSumme;\n22       if ( gesMax < grpMax ) gesMax = grpMax; end if\n23       if ( gesMin > grpMin ) gesMin = grpMin; end if\n24       grpAnzahl = 0;\n25       grpSumme = 0;\n26       grpMax = 0;\n27       gruppe = e.Gruppe;\n28       grpMin = e.Minuten;\n29     end if\n30     grpAnzahl = grpAnzahl + 1;\n31     grpSumme = grpSumme + e.Minuten;\n32     if ( grpMax < e.Minuten ) grpMax = e.Minuten; end if\n33     if ( grpMin > e.Minuten ) grpMin = e.Minuten; end if\n34   end foreach\n35   WriteLn(\"Gesamtauswertung\");\n36   WriteLn(\" Minimum: \" + gesMin);\n37   WriteLn(\" Maximum: \" + gesMax);\n38   WriteLn(\" Durchschnitt: \" + gesSumme / gesAnzahl);\n39   WriteLn(\" Anzahl Einheiten: \" + gesAnzahl);\n40 end UebungsAuswertung","typ":"code"},{"text":"Der Code enthält einen strukturellen Mangel: Die zuletzt bearbeitete Instrumentengruppe wird nicht ausgegeben und fließt auch nicht in die Gesamtauswertung ein. Schlagen Sie die notwendigen Änderungen bzw. Ergänzungen am Quellcode vor, sodass die oben dargestellte erwartete Ausgabe entsteht. Geben Sie die zu ergänzenden Zeilen mit ihrer Einfügeposition vollständig an.","typ":"absatz"}],"beispiel_id":"bsp-programmfehleranalyse-und-debugging-vorschlagen-freitextantwort-01","freigabeart":"maschinell","loesung":[{"text":"Nach der foreach-Schleife (nach Zeile 34, vor Zeile 35) ist die Auswertung der letzten Gruppe zu ergänzen. Erwarteter Ergänzungsblock:\nWriteLn(\"Auswertung für Gruppe \" + gruppe);\nWriteLn(\" Minimum: \" + grpMin);\nWriteLn(\" Maximum: \" + grpMax);\nWriteLn(\" Durchschnitt: \" + grpSumme / grpAnzahl);\nWriteLn(\" Anzahl Einheiten: \" + grpAnzahl);\ngesAnzahl = gesAnzahl + grpAnzahl;\ngesSumme = gesSumme + grpSumme;\nif ( gesMax < grpMax ) gesMax = grpMax; end if\nif ( gesMin > grpMin ) gesMin = grpMin; end if","typ":"code"},{"text":"Punkteverteilung (13): Ausgabeblock der letzten Gruppe mit Name, Minimum, Maximum, Durchschnitt und Anzahl korrekt ergänzt 6 P; Übernahme in die Gesamtwerte gesAnzahl und gesSumme 3 P; korrekte Aktualisierung von gesMax und gesMin 4 P. Fachlich gleichwertige Umsetzungen (z. B. Auslagerung in eine Hilfsmethode oder Schleife bis einschließlich letztem Element) sind anzuerkennen.","typ":"absatz"}],"operator_id":"operator.vorschlagen","pruefungszuordnung":{"berufe":["FIAE"],"teil":"AP2"},"punkte":13,"punkterahmen":{"max":13,"min":13},"quellen":["ap2-fiae-2023-sommer-ae2-a03-a-ab"]},{"artefakt_id":"artefakt.freitextantwort","aufgabe":[{"text":"Sie betreuen in einem IT-Testlabor die Auswertung nächtlicher, automatisierter Testläufe. Jeder Lauf wird als 1 (bestanden) oder 0 (fehlgeschlagen) in ein Array eingetragen. Eine Funktion soll die Länge der längsten ununterbrochenen Serie bestandener Läufe zurückgeben. Die folgende Funktion ist in einer Java-ähnlichen Sprache formuliert; die Zeilennummern sind verbindlich.","typ":"absatz"},{"text":"Eingabe: int[] laeufe = {1, 1, 0, 1, 1, 1, 0, 1};\nErwarteter Rückgabewert: 3","typ":"code"},{"text":"01 int laengsteErfolgsserie(int[] laeufe) {\n02     int aktuelleSerie = 0;\n03     int maxSerie = 0;\n04     for (int i = 0; i <= laeufe.length; i++) {\n05         if (laeufe[i] == 1) {\n06             aktuelleSerie = aktuelleSerie + 1;\n07         } else {\n08             aktuelleSerie = 0;\n09         }\n10         if (aktuelleSerie > maxSerie) {\n11             maxSerie = aktuelleSerie;\n12         }\n13     }\n14     return aktuelleSerie;\n15 }","typ":"code"},{"text":"Mit den angegebenen Eingabedaten liefert die Funktion nicht den erwarteten Rückgabewert. In der Funktion liegen genau zwei fachliche Fehler vor. Schlagen Sie zu jedem Fehler die notwendige Änderung vor, indem Sie die betroffene Zeilennummer angeben und die vollständige korrigierte Zeile notieren. Begründen Sie jeden Vorschlag mit einem kurzen Satz, sodass die Funktion für die angegebene Eingabe den Wert 3 zurückgibt.","typ":"absatz"}],"beispiel_id":"bsp-programmfehleranalyse-und-debugging-vorschlagen-freitextantwort-02","freigabeart":"maschinell","loesung":[{"text":"Fehler 1 – Zeile 4: for (int i = 0; i < laeufe.length; i++) {  Begründung: Mit <= wird bei i = laeufe.length auf einen nicht vorhandenen Index zugegriffen (Zugriff außerhalb des Arrays). Fehler 2 – Zeile 14: return maxSerie;  Begründung: Zurückzugeben ist die bisher längste Serie, nicht die am Ende gerade laufende Serie (hier 0).","typ":"absatz"},{"text":"Punkteverteilung (13): Zeile 4 – korrigierte Zeile 4 P, Begründung 2 P; Zeile 14 – korrigierte Zeile 5 P, Begründung 2 P. Fachlich gleichwertige Formulierungen (z. B. i <= laeufe.length - 1 in Zeile 4) sind anzuerkennen.","typ":"absatz"}],"operator_id":"operator.vorschlagen","pruefungszuordnung":{"berufe":["FIAE"],"teil":"AP2"},"punkte":13,"punkterahmen":{"max":13,"min":13},"quellen":["ap2-fiae-2023-sommer-ae2-a03-a-ab"]},{"artefakt_id":"artefakt.freitextantwort","aufgabe":[{"text":"Sie entwickeln für die Buchhaltung eines Handwerksbetriebs ein kleines Liquiditätswerkzeug. Eine Funktion soll ausgehend von einem Startsaldo eine Folge von Buchungen (positive Gutschriften, negative Belastungen) verarbeiten und den niedrigsten Kontostand zurückgeben, der im Verlauf auftritt. Berücksichtigt werden der Startsaldo sowie der Kontostand nach jeder einzelnen Buchung. Die folgende Funktion ist in einer Java-ähnlichen Sprache formuliert; die Zeilennummern sind verbindlich.","typ":"absatz"},{"text":"Eingaben: int startSaldo = 100; int[] buchungen = {-20, 30, -40, -50};\nErwarteter Rückgabewert: 20","typ":"code"},{"text":"01 int ermittleTiefstand(int startSaldo, int[] buchungen) {\n02     int saldo = startSaldo;\n03     int tiefstand = 0;\n04     for (int i = 0; i < buchungen.length; i++) {\n05         if (saldo < tiefstand) {\n06             tiefstand = saldo;\n07         }\n08         saldo = saldo + buchungen[i];\n09     }\n10     return tiefstand;\n11 }","typ":"code"},{"text":"Mit den angegebenen Eingaben liefert die Funktion nicht den erwarteten Rückgabewert. In der Funktion liegen genau zwei fachliche Fehler vor. Schlagen Sie die erforderlichen Änderungen am Quellcode vor, sodass für die angegebenen Eingaben der Wert 20 zurückgegeben wird. Geben Sie jeweils die betroffene Zeilennummer sowie die vollständige geänderte bzw. neu angeordnete Zeile an.","typ":"absatz"}],"beispiel_id":"bsp-programmfehleranalyse-und-debugging-vorschlagen-freitextantwort-03","freigabeart":"maschinell","loesung":[{"text":"Fehler 1 – Zeile 3: int tiefstand = startSaldo;  Begründung: Der Startwert 0 verfälscht den Vergleich; als Ausgangswert des Tiefstands muss der Startsaldo dienen.\nFehler 2 – Vergleich und Buchung sind zu vertauschen: Die Buchung (Zeile 8) muss vor dem Vergleich (Zeilen 5–7) ausgeführt werden, damit auch der Kontostand nach der letzten Buchung berücksichtigt wird. Erwartete Anordnung:\n04 for (int i = 0; i < buchungen.length; i++) {\n05   saldo = saldo + buchungen[i];\n06   if (saldo < tiefstand) {\n07     tiefstand = saldo;\n08   }\n09 }","typ":"code"},{"text":"Punkteverteilung (13): korrekte Initialisierung in Zeile 3 mit tiefstand = startSaldo 6 P; korrektes Vorziehen der Saldoaktualisierung vor den Vergleich 7 P. Fachlich gleichwertige Umsetzungen, die alle Kontostände inklusive des Stands nach der letzten Buchung erfassen, sind anzuerkennen.","typ":"absatz"}],"operator_id":"operator.vorschlagen","pruefungszuordnung":{"berufe":["FIAE"],"teil":"AP2"},"punkte":13,"punkterahmen":{"max":13,"min":13},"quellen":["ap2-fiae-2023-sommer-ae2-a03-a-ab"]},{"artefakt_id":"artefakt.freitextantwort","aufgabe":[{"text":"In einem Qualitätslabor prüfen Sie folgende Pseudocode-Funktion. Sie bestimmt für ein nichtleeres Ganzzahl-Array werte sechs Kennzahlen; verfügbar sind laenge und der Elementzugriff über Index ab 1.","typ":"absatz"},{"text":"01 funktion analyse(werte)\n02   n := laenge(werte)\n03   min := 0\n04   max := werte[1]\n05   gerade := 0\n06   ueber := 0\n07   summe := 0\n08   negativ := 0\n09   fuer i von 1 bis n\n10     wenn werte[i] < min dann min := werte[i]\n11     wenn max > werte[i] dann max := werte[i]\n12     wenn werte[i] modulo 2 gleich 1 dann gerade := gerade + 1\n13     wenn werte[i] >= 100 dann ueber := ueber + 1\n14     summe := summe + werte[1]\n15     wenn werte[i] >= 0 dann negativ := negativ + 1\n16   gib (min, max, gerade, ueber, summe, negativ) zurueck","typ":"absatz"},{"text":"Jede Zeile stellt einer geforderten Kennzahl (Soll) den beobachteten Rückgabewert (Ist) einer eigenen Eingabe gegenüber. Identifizieren Sie zu den sechs Fällen je genau einen konkreten Programmfehler mit Zeilennummer.\n1) werte=[8,3,5]: Soll min=3, Ist min=0.\n2) werte=[4,9,2]: Soll max=9, Ist max=2.\n3) werte=[2,5,4]: Soll gerade=2, Ist gerade=1.\n4) werte=[100,150]: Soll ueber=1, Ist ueber=2.\n5) werte=[10,20,30]: Soll summe=60, Ist summe=30.\n6) werte=[-2,5,-7]: Soll negativ=2, Ist negativ=1.","typ":"absatz"}],"beispiel_id":"bsp-programmfehleranalyse-und-debugging-identifizieren-freitextantwort-01","freigabeart":"maschinell","loesung":[{"text":"Je zutreffend identifiziertem Fehler 1 Punkt (6 × 1 = 6). Nur die Identifikation ist gefordert; Korrekturen werden nicht verlangt.\n1) Zeile 03: min falsch mit 0 statt mit werte[1] initialisiert (bei positiven Werten bleibt min = 0).\n2) Zeile 11: falscher Vergleichsoperator, max > werte[i] statt max < werte[i] (max wird zum kleinsten Wert).\n3) Zeile 12: falsche Bedingung, prüft ungerade (modulo 2 gleich 1 statt gleich 0).\n4) Zeile 13: Operator >= statt > (Grenzwert 100 fälschlich mitgezählt).\n5) Zeile 14: fester Index werte[1] statt werte[i] (nur erstes Element addiert).\n6) Zeile 15: Bedingung >= 0 statt < 0 (zählt nicht-negative statt negative Werte). Fachlich gleichwertige Fehlerbenennungen sind anzuerkennen.","typ":"absatz"}],"operator_id":"operator.identifizieren","pruefungszuordnung":{"berufe":["FIAE"],"teil":"AP2"},"punkte":6,"punkterahmen":{"max":6,"min":6},"quellen":["ap2-fiae-2021-winter-ae2-a01-c"]},{"artefakt_id":"artefakt.freitextantwort","aufgabe":[{"text":"Im Registrierungsmodul eines Onlineshops prüfen Sie folgende Pseudocode-Funktion. Sie liefert für einen Benutzernamen sechs Prüfmerkmale (wahr/falsch); verfügbar sind laenge, istZiffer, istGross, istKlein und der Zeichenzugriff über Index ab 1.","typ":"absatz"},{"text":"01 funktion pruefeName(name)\n02   langGenug := falsch\n03   hatZiffer := wahr\n04   hatGross := falsch\n05   keinLeerzeichen := wahr\n06   endetZiffer := falsch\n07   nichtZuLang := wahr\n08   wenn laenge(name) > 8 dann langGenug := wahr\n09   fuer i von 1 bis laenge(name)\n10     wenn istZiffer(name[i]) dann hatZiffer := wahr\n11     wenn istKlein(name[i]) dann hatGross := wahr\n12     wenn name[i] gleich ' ' dann keinLeerzeichen := wahr\n13   wenn istZiffer(name[1]) dann endetZiffer := wahr\n14   wenn laenge(name) >= 16 dann nichtZuLang := falsch\n15   gib (langGenug, hatZiffer, hatGross, keinLeerzeichen, endetZiffer, nichtZuLang) zurueck","typ":"absatz"},{"text":"Jede Zeile nennt für ein Merkmal den Sollwert und den beobachteten Rückgabewert (Ist) zu einer eigenen Eingabe. Identifizieren Sie zu den sechs Fällen je genau einen konkreten Programmfehler mit Zeilennummer.\n1) name=\"Kunde123\" (8 Zeichen): Soll langGenug=wahr, Ist=falsch.\n2) name=\"Sommerhut\": Soll hatZiffer=falsch, Ist=wahr.\n3) name=\"sonnenrad9\": Soll hatGross=falsch, Ist=wahr.\n4) name=\"Max Konto1\": Soll keinLeerzeichen=falsch, Ist=wahr.\n5) name=\"7konto\": Soll endetZiffer=falsch, Ist=wahr.\n6) name=\"Benutzerkonto123\" (16 Zeichen): Soll nichtZuLang=wahr, Ist=falsch.","typ":"absatz"}],"beispiel_id":"bsp-programmfehleranalyse-und-debugging-identifizieren-freitextantwort-02","freigabeart":"maschinell","loesung":[{"text":"Je zutreffend identifiziertem Fehler 1 Punkt (6 × 1 = 6). Nur die Identifikation ist gefordert.\n1) Zeile 08: Operator > statt >= (Länge genau 8 wird abgelehnt).\n2) Zeile 03: hatZiffer falsch mit wahr statt falsch initialisiert (Ziffer nie erzwungen).\n3) Zeile 11: prüft istKlein statt istGross (Großbuchstabe nicht geprüft).\n4) Zeile 12: setzt bei Leerzeichen wahr statt falsch.\n5) Zeile 13: prüft name[1] (erstes Zeichen) statt name[laenge(name)] (letztes Zeichen).\n6) Zeile 14: Operator >= statt > (Länge genau 16 fälschlich abgelehnt). Fachlich gleichwertige Fehlerbenennungen sind anzuerkennen.","typ":"absatz"}],"operator_id":"operator.identifizieren","pruefungszuordnung":{"berufe":["FIAE"],"teil":"AP2"},"punkte":6,"punkterahmen":{"max":6,"min":6},"quellen":["ap2-fiae-2021-winter-ae2-a01-c"]},{"artefakt_id":"artefakt.freitextantwort","aufgabe":[{"text":"In einem Bestellsystem prüfen Sie folgende Pseudocode-Funktion. posten ist eine nichtleere Liste von Positionen mit preis (Cent), menge und rabattfaehig. Verfügbar sind laenge und Indexzugriff ab 1.","typ":"absatz"},{"text":"01 funktion rechneBestellung(posten)\n02   n := laenge(posten)\n03   gesamt := 0\n04   anzahl := 0\n05   teuerster := 0\n06   rabatt := 0\n07   grosse := 0\n08   summeMenge := 0\n09   fuer i von 1 bis n\n10     p := posten[i]\n11     gesamt := gesamt + (p.preis + p.menge)\n12     anzahl := anzahl + p.menge\n13     wenn p.preis > teuerster dann teuerster := p.menge\n14     wenn nicht p.rabattfaehig dann rabatt := rabatt + p.preis\n15     wenn p.menge > 10 dann grosse := grosse + 1\n16     summeMenge := summeMenge + p.menge\n17   schnitt := summeMenge / 2\n18   gib (gesamt, anzahl, teuerster, rabatt, grosse, schnitt) zurueck","typ":"absatz"},{"text":"Jede Zeile nennt für eine Kennzahl Soll- und Istwert zu einer eigenen Eingabe. Identifizieren Sie je genau einen konkreten Programmfehler mit Zeilennummer.\n1) ein Posten preis=300, menge=2: Soll gesamt=600, Ist=302.\n2) zwei Posten mengen 5 und 3: Soll anzahl=2, Ist=8.\n3) Posten preis 400 (menge 1) und 900 (menge 2): Soll teuerster=900, Ist=2.\n4) rabattfaehig preis=500, nicht rabattfaehig preis=300: Soll rabatt=500, Ist=300.\n5) ein Posten menge=10: Soll grosse=1, Ist=0.\n6) drei Posten mengen 2, 4, 6: Soll schnitt=4, Ist=6.","typ":"absatz"}],"beispiel_id":"bsp-programmfehleranalyse-und-debugging-identifizieren-freitextantwort-03","freigabeart":"maschinell","loesung":[{"text":"Je zutreffend identifiziertem Fehler 1 Punkt (6 × 1 = 6). Nur die Identifikation ist gefordert.\n1) Zeile 11: Addition statt Multiplikation (p.preis + p.menge statt p.preis * p.menge).\n2) Zeile 12: addiert p.menge statt 1 (falsche Positionszählung).\n3) Zeile 13: weist p.menge statt p.preis zu (teuerster erhält Menge statt Preis).\n4) Zeile 14: invertierte Bedingung, nicht p.rabattfaehig statt p.rabattfaehig.\n5) Zeile 15: Operator > statt >= (Menge genau 10 nicht mitgezählt).\n6) Zeile 17: Division durch feste 2 statt durch n (Positionsanzahl). Fachlich gleichwertige Fehlerbenennungen sind anzuerkennen.","typ":"absatz"}],"operator_id":"operator.identifizieren","pruefungszuordnung":{"berufe":["FIAE"],"teil":"AP2"},"punkte":6,"punkterahmen":{"max":6,"min":6},"quellen":["ap2-fiae-2021-winter-ae2-a01-c"]},{"artefakt_id":"artefakt.freitextantwort","aufgabe":[{"text":"Sie prüfen sechs voneinander unabhängige Pseudocode-Ausschnitte einer Lagerverwaltung. Alle Werte sind Ganzzahlen; verfügbar sind Addition, Subtraktion, Multiplikation, Division, Vergleiche und Zuweisung. Jeder Ausschnitt enthält genau eine bereits markierte Fehlerstelle und ist ansonsten fachlich korrekt. Die Fehlerstellen sind bereits benannt und nicht erneut zu suchen; die Korrektur eines Ausschnitts hängt nicht von einem anderen ab. Nennen Sie zu jeder markierten Zeile genau eine vollständige korrigierte Zeile.\nA) Soll: bestand um menge erhöhen. Fehlerhafte Zeile: bestand = bestand - menge\nB) Soll: prüfen, ob bestand kleiner als mindestmenge ist. Fehlerhafte Zeile: wenn bestand > mindestmenge\nC) Soll: schnitt als summe geteilt durch anzahl berechnen. Fehlerhafte Zeile: schnitt = summe + anzahl\nD) Soll: Schleife über die gültigen Indizes 0 bis laenge minus 1. Fehlerhafte Zeile: für i von 0 bis laenge\nE) Soll: differenz als soll minus ist berechnen. Fehlerhafte Zeile: differenz = ist - soll\nF) Soll: wahr zurückgeben, wenn bestand gleich 0 ist. Fehlerhafte Zeile: wenn bestand := 0","typ":"absatz"}],"beispiel_id":"bsp-programmfehleranalyse-und-debugging-nennen-freitextantwort-01","freigabeart":"maschinell","loesung":[{"text":"Je korrekt genannter, vollständiger Korrekturzeile 1 Punkt (6 x 1 = 6 Punkte); fachlich gleichwertige Korrekturen sind anzuerkennen.\nA) bestand = bestand + menge (1 P.)\nB) wenn bestand < mindestmenge (1 P.)\nC) schnitt = summe / anzahl (1 P.)\nD) für i von 0 bis laenge - 1 (1 P.)\nE) differenz = soll - ist (1 P.)\nF) wenn bestand = 0 (Vergleich statt Zuweisung) (1 P.)","typ":"absatz"}],"operator_id":"operator.nennen","pruefungszuordnung":{"berufe":["FIAE"],"teil":"AP2"},"punkte":6,"punkterahmen":{"max":6,"min":6},"quellen":["ap2-fiae-2021-winter-ae2-a01-c"]},{"artefakt_id":"artefakt.freitextantwort","aufgabe":[{"text":"Sie prüfen sechs voneinander unabhängige Pseudocode-Ausschnitte einer Klimasensor-Auswertung. Messwerte liegen als Dezimalzahlen im Feld messwerte vor; verfügbar sind Grundrechenarten, Vergleiche, Zuweisung und die Funktion runde(x). Jeder Ausschnitt enthält genau eine bereits markierte Fehlerstelle und ist ansonsten fachlich korrekt. Die Fehlerstellen sind bereits benannt und nicht erneut zu suchen; die Ausschnitte sind unabhängig voneinander. Nennen Sie zu jeder markierten Zeile genau eine vollständige korrigierte Zeile.\nA) Soll: maximum mit dem ersten Messwert vorbelegen. Fehlerhafte Zeile: maximum = 0.0\nB) Soll: fahr als temperatur mal 1.8 plus 32 berechnen. Fehlerhafte Zeile: fahr = temperatur * 1.8 - 32\nC) Soll: zaehler bei gültigem Wert um 1 erhöhen. Fehlerhafte Zeile: zaehler = zaehler\nD) Soll: mittel als summe geteilt durch anzahl berechnen. Fehlerhafte Zeile: mittel = anzahl / summe\nE) Soll: Schleife läuft, solange i kleiner als anzahl ist. Fehlerhafte Zeile: solange i <= anzahl\nF) Soll: den gerundeten Wert zurückgeben. Fehlerhafte Zeile: gib wert zurück","typ":"absatz"}],"beispiel_id":"bsp-programmfehleranalyse-und-debugging-nennen-freitextantwort-02","freigabeart":"maschinell","loesung":[{"text":"Je korrekt genannter, vollständiger Korrekturzeile 1 Punkt (6 x 1 = 6 Punkte); fachlich gleichwertige Korrekturen sind anzuerkennen.\nA) maximum = messwerte[0] (1 P.)\nB) fahr = temperatur * 1.8 + 32 (1 P.)\nC) zaehler = zaehler + 1 (1 P.)\nD) mittel = summe / anzahl (1 P.)\nE) solange i < anzahl (1 P.)\nF) gib runde(wert) zurück (1 P.)","typ":"absatz"}],"operator_id":"operator.nennen","pruefungszuordnung":{"berufe":["FIAE"],"teil":"AP2"},"punkte":6,"punkterahmen":{"max":6,"min":6},"quellen":["ap2-fiae-2021-winter-ae2-a01-c"]},{"artefakt_id":"artefakt.freitextantwort","aufgabe":[{"text":"Sie betreuen die Auswertungssoftware eines Sportvereins. Alle Ausschnitte sind Pseudocode; Listen sind ab 1 indiziert, Länge(l) liefert die Elementanzahl, jede Liste hat mindestens ein Element. Verfügbar sind Zuweisung, Vergleiche, die Ganzzahloperationen Addition, Subtraktion, Multiplikation und ganzzahlige Division, die Wahrheitswerte Wahr und Falsch, Schleifen, Verzweigungen und Rückgabe. Jeder Ausschnitt enthält genau eine markierte Fehlerstelle und ist sonst fachlich korrekt. Nennen Sie zu jeder der sechs markierten Fehlerstellen genau eine vollständige Korrektur.","typ":"absatz"},{"text":"Ausschnitt A – Soll: Summe aller Werte.\nsumme = 0\nFür i von 2 bis Länge(werte): // Fehler\nsumme = summe + werte[i]\nRückgabe summe","typ":"absatz"},{"text":"Ausschnitt B – Soll: größter Wert (werte kann negative Zahlen enthalten).\ngroesster = werte[1]\nFür i von 1 bis Länge(werte):\nWenn werte[i] < groesster Dann // Fehler\ngroesster = werte[i]\nRückgabe groesster","typ":"absatz"},{"text":"Ausschnitt C – Soll: Anzahl der Werte über grenze.\nanzahl = 0\nFür i von 1 bis Länge(werte):\nWenn werte[i] > grenze Dann\nanzahl = anzahl + 1\nRückgabe anzahl // Fehler\nRückgabe anzahl","typ":"absatz"},{"text":"Ausschnitt D – Soll: ganzzahliger Durchschnitt aller Werte.\nsumme = 0\nFür i von 1 bis Länge(werte):\nsumme = summe + werte[i]\nRückgabe summe * Länge(werte) // Fehler","typ":"absatz"},{"text":"Ausschnitt E – Soll: Wahr, wenn alle Werte größer 0 sind, sonst Falsch.\nFür i von 1 bis Länge(werte):\nWenn werte[i] <= 0 Dann\nRückgabe Wahr // Fehler\nRückgabe Wahr","typ":"absatz"},{"text":"Ausschnitt F – Soll: jeden Wert der Liste verdoppeln.\nFür i von 1 bis Länge(werte):\nwerte[i] = werte[i] + 2 // Fehler\n(keine Rückgabe)","typ":"absatz"}],"beispiel_id":"bsp-programmfehleranalyse-und-debugging-nennen-freitextantwort-03","freigabeart":"maschinell","loesung":[{"text":"Je genannte Korrektur 1 Punkt, insgesamt 6 Punkte. Fachlich gleichwertige vollständige Korrekturen sind anzuerkennen.\nA (1 P): Schleife bei 1 beginnen, z. B. „Für i von 1 bis Länge(werte)\".\nB (1 P): Vergleich umkehren: „Wenn werte[i] > groesster Dann\".\nC (1 P): Vorzeitige Rückgabe innerhalb der Schleife entfernen, sodass „Rückgabe anzahl\" erst nach der Schleife erfolgt.\nD (1 P): Multiplikation durch ganzzahlige Division ersetzen: „Rückgabe summe / Länge(werte)\".\nE (1 P): Rückgabewert an der Fehlerstelle korrigieren: „Rückgabe Falsch\".\nF (1 P): Addition durch Multiplikation ersetzen: „werte[i] = werte[i] * 2\".","typ":"absatz"}],"operator_id":"operator.nennen","pruefungszuordnung":{"berufe":["FIAE"],"teil":"AP2"},"punkte":6,"punkterahmen":{"max":6,"min":6},"quellen":["ap2-fiae-2021-winter-ae2-a01-c"]},{"artefakt_id":"artefakt.tabelle","aufgabe":[{"text":"In einem Versandlager soll eine Funktion das Gesamtgewicht aller Pakete einer Sendung bestimmen. Jedes Paket besitzt das ganzzahlige Attribut gewicht in Gramm mit einem Wert größer null. Die Funktion erhält eine nichtleere Liste solcher Pakete und soll die Summe aller Einzelgewichte zurückgeben. Für die Beispielsendung mit den Gewichten 4, 7 und 5 lautet das erwartete Ergebnis 16. Der folgende Pseudocode enthält genau zwei unabhängige semantische Fehler; alle übrigen Zeilen sind fachlich korrekt.","typ":"absatz"},{"text":"01 funktion gesamtgewicht(pakete: Liste von Paket): Ganzzahl\n02   ganzzahl summe = 1\n03   fuer jedes p in pakete\n04     summe = summe - p.gewicht\n05   ende fuer\n06   rueckgabe summe\n07 ende funktion","typ":"absatz"},{"text":"Tragen Sie je Fehler die Zeilennummer und die vollständige korrigierte Zeile in die Tabelle ein.","typ":"absatz"},{"kopf":["Zeilennummer","vollständige korrigierte Zeile"],"typ":"tabelle","zeilen":[["",""],["",""]]}],"beispiel_id":"bsp-programmfehleranalyse-und-debugging-korrigieren-tabelle-01","freigabeart":"maschinell","loesung":[{"text":"Zeile 02: ganzzahl summe = 0 (fehlerhafte Initialisierung des Akkumulators). Zeile 04: summe = summe + p.gewicht (fehlerhafte arithmetische Aktualisierung des Akkumulators). Je vollständiges Paar aus richtiger Zeilennummer und korrigierter Zeile 2 Punkte, zusammen 4 Punkte. Fachlich gleichwertige Formulierungen der korrigierten Zeile sind anzuerkennen.","typ":"absatz"}],"operator_id":"operator.korrigieren","pruefungszuordnung":{"berufe":["FIAE"],"teil":"AP2"},"punkte":4,"punkterahmen":{"max":4,"min":4},"quellen":["ap2-fiae-2025-winter-ae2-a03-b-bb"]},{"artefakt_id":"artefakt.tabelle","aufgabe":[{"text":"Eine Abfüllmaschine verarbeitet nacheinander Steuersignale. Eine Funktion soll den Betriebszustand nach dem letzten Signal zurückgeben. Beim Signal einschalten wechselt der Zustand auf laufend, beim Signal ausschalten auf gestoppt; der Startzustand ist gestoppt. Für die Signalfolge [einschalten, ausschalten] wird gestoppt erwartet. Der folgende Pseudocode enthält genau zwei unabhängige semantische Fehler.","typ":"absatz"},{"text":"01 funktion ermittleEndzustand(signale: Liste von Text): Text\n02   text status = \"gestoppt\"\n03   text protokoll = \"gestoppt\"\n04   fuer jedes s in signale\n05     wenn s == \"einschalten\" dann\n06       protokoll = \"laufend\"\n07     sonst wenn s == \"ausschalten\" dann\n08       status = \"gestoppt\"\n09     ende wenn\n10   ende fuer\n11   rueckgabe protokoll\n12 ende funktion","typ":"absatz"},{"text":"Tragen Sie je Fehler Zeilennummer und vollständige korrigierte Zeile in die Tabelle ein.","typ":"absatz"},{"kopf":["Zeilennummer","vollständige korrigierte Zeile"],"typ":"tabelle","zeilen":[["",""],["",""]]}],"beispiel_id":"bsp-programmfehleranalyse-und-debugging-korrigieren-tabelle-02","freigabeart":"maschinell","loesung":[{"text":"Zeile 06: status = \"laufend\" (Zuweisung an die Zustandsvariable statt an protokoll). Zeile 11: rueckgabe status (Rückgabe der Zustandsvariable statt des unbeteiligten Protokollwerts). Je vollständiges Paar aus richtiger Zeilennummer und korrigierter Zeile 2 Punkte, zusammen 4 Punkte. Fachlich gleichwertige Formulierungen sind anzuerkennen.","typ":"absatz"}],"operator_id":"operator.korrigieren","pruefungszuordnung":{"berufe":["FIAE"],"teil":"AP2"},"punkte":4,"punkterahmen":{"max":4,"min":4},"quellen":["ap2-fiae-2025-winter-ae2-a03-b-bb"]},{"artefakt_id":"artefakt.tabelle","aufgabe":[{"text":"Ein Telefondienst berechnet den Preis eines Gesprächs. Die Funktion erhält die Gesprächsdauer in Sekunden als positive Ganzzahl und den Preis pro Minute in Euro als Dezimalzahl. Sie soll die Dauer in Minuten umrechnen und mit dem Minutenpreis multiplizieren. Für eine Dauer von 120 Sekunden und einen Minutenpreis von 0.10 Euro wird 0.20 erwartet. Der folgende Pseudocode enthält genau zwei unabhängige semantische Fehler.","typ":"absatz"},{"text":"01 funktion berechnePreis(dauerSekunden: Ganzzahl, preisProMinute: Dezimal): Dezimal\n02   dezimal minuten = dauerSekunden / 100\n03   dezimal preis = minuten + preisProMinute\n04   rueckgabe preis\n05 ende funktion","typ":"absatz"},{"text":"Tragen Sie je Fehler Zeilennummer und vollständige korrigierte Zeile in die Tabelle ein.","typ":"absatz"},{"kopf":["Zeilennummer","vollständige korrigierte Zeile"],"typ":"tabelle","zeilen":[["",""],["",""]]}],"beispiel_id":"bsp-programmfehleranalyse-und-debugging-korrigieren-tabelle-03","freigabeart":"maschinell","loesung":[{"text":"Zeile 02: dezimal minuten = dauerSekunden / 60 (fehlerhafter Umrechnungsfaktor Sekunden in Minuten). Zeile 03: dezimal preis = minuten * preisProMinute (fehlerhafte Rechenoperation, Multiplikation statt Addition). Je vollständiges Paar aus richtiger Zeilennummer und korrigierter Zeile 2 Punkte, zusammen 4 Punkte. Fachlich gleichwertige Formulierungen sind anzuerkennen.","typ":"absatz"}],"operator_id":"operator.korrigieren","pruefungszuordnung":{"berufe":["FIAE"],"teil":"AP2"},"punkte":4,"punkterahmen":{"max":4,"min":4},"quellen":["ap2-fiae-2025-winter-ae2-a03-b-bb"]},{"artefakt_id":"artefakt.tabelle","aufgabe":[{"text":"In einem Logistikbetrieb sucht eine Methode den ersten freien Lagerplatz. Die Liste belegung enthält je Platz einen Wahrheitswert (true = belegt). Zurückgegeben wird der Index des ersten freien Platzes, sonst -1. Der Pseudocode enthält genau zwei semantische Fehler bei Start- und Endindex.","typ":"absatz"},{"text":"01 finde_freien_platz(belegung: Liste von Wahrheitswerten) : Ganzzahl\n02   index = 1\n03   ende = laenge(belegung) - 2\n04   while index <= ende\n05     if belegung[index] == false\n06       return index\n07     end if\n08     index = index + 1\n09   end while\n10   return -1\n11 end finde_freien_platz","typ":"absatz"},{"text":"Zwei Testläufe schlagen fehl:","typ":"ueberschrift"},{"eintraege":["belegung = [false, true, true]: erwartet 0, tatsächlich -1.","belegung = [true, true, false]: erwartet 2, tatsächlich -1."],"typ":"liste"},{"text":"Nennen Sie in der Tabelle die beiden fehlerhaften Zeilennummern und geben Sie jeweils die vollständige korrigierte Zeile an.","typ":"absatz"},{"kopf":["Position (Zeilennummer)","vollständige korrigierte Zeile"],"typ":"tabelle","zeilen":[["",""],["",""]]}],"beispiel_id":"bsp-programmfehleranalyse-und-debugging-nennen-tabelle-01","freigabeart":"maschinell","loesung":[{"text":"Der erste Testlauf schlägt fehl, weil der freie Platz am Index 0 nie geprüft wird; der zweite, weil der letzte Index nicht mehr durchlaufen wird.","typ":"absatz"},{"text":"Zeile 02: index = 0 (Startindex) — 2 Punkte (Position + korrigierte Zeile). Zeile 03: ende = laenge(belegung) - 1 (Endindex) — 2 Punkte (Position + korrigierte Zeile).","typ":"absatz"},{"text":"Je vollständiges Position-Korrektur-Paar 2 Punkte, insgesamt 4 Punkte. Fachlich gleichwertige einzelne Formulierungen der korrigierten Zeile sind anzuerkennen, sofern der Startindex auf 0 und die obere Schleifengrenze auf den letzten gültigen Index gesetzt wird.","typ":"absatz"}],"operator_id":"operator.nennen","pruefungszuordnung":{"berufe":["FIAE"],"teil":"AP2"},"punkte":4,"punkterahmen":{"max":4,"min":4},"quellen":["ap2-fiae-2025-winter-ae2-a03-b-bb"]},{"artefakt_id":"artefakt.tabelle","aufgabe":[{"text":"Ein Ticketsystem stuft eingehende Supportanfragen anhand einer ganzzahligen, nichtnegativen Dringlichkeitspunktzahl in eine Serviceklasse ein. Vorgabe: Werte bis einschließlich 30 ergeben \"Basis\", Werte von 31 bis einschließlich 60 ergeben \"Standard\", Werte ab 61 ergeben \"Premium\". Beim Test schlagen zwei Fälle fehl:","typ":"absatz"},{"text":"Testfall 1: punkte = 30 → Soll \"Basis\", Ist \"Standard\".\nTestfall 2: punkte = 60 → Soll \"Standard\", Ist \"Premium\".","typ":"absatz"},{"text":"Im Listing liegen genau zwei semantische Fehler. Nennen Sie die beiden fehlerhaften Zeilennummern und geben Sie jeweils die vollständige korrigierte Zeile an.","typ":"absatz"},{"text":"01 funktion ermittleKlasse(punkte: int) : string\n02   wenn punkte < 30 dann\n03     rueckgabe \"Basis\"\n04   sonst wenn punkte < 60 dann\n05     rueckgabe \"Standard\"\n06   sonst\n07     rueckgabe \"Premium\"\n08   ende wenn\n09 ende funktion","typ":"absatz"},{"kopf":["Position (Zeilennummer)","vollständige korrigierte Zeile"],"typ":"tabelle","zeilen":[["",""],["",""]]}],"beispiel_id":"bsp-programmfehleranalyse-und-debugging-nennen-tabelle-02","freigabeart":"maschinell","loesung":[{"text":"Zeile 02: wenn punkte <= 30 dann — vollständiges Paar aus Position und Korrektur: 2 Punkte. Zeile 04: sonst wenn punkte <= 60 dann — vollständiges Paar: 2 Punkte.","typ":"absatz"},{"text":"Herleitung: Testfall 1 (punkte = 30) belegt Zeile 02, weil der Grenzwert 30 laut Vorgabe zu \"Basis\" gehört und der Vergleich daher <= sein muss. Testfall 2 (punkte = 60) belegt Zeile 04, weil der Grenzwert 60 zu \"Standard\" gehört. Gesamt 4 Punkte. Nur ein vollständiges Paar aus Zeilennummer und korrigierter Zeile wird mit 2 Punkten bewertet; gleichwertige korrekte Formulierungen sind anzuerkennen.","typ":"absatz"}],"operator_id":"operator.nennen","pruefungszuordnung":{"berufe":["FIAE"],"teil":"AP2"},"punkte":4,"punkterahmen":{"max":4,"min":4},"quellen":["ap2-fiae-2025-winter-ae2-a03-b-bb"]},{"artefakt_id":"artefakt.tabelle","aufgabe":[{"text":"Ein Zutrittssystem eines Forschungslabors prüft mit folgender Pseudocode-Funktion, ob eine Person eintreten darf. Eine Person hat die booleschen Merkmale gueltigerAusweis, istMitarbeiter, istGast, gueltigerTagescode und gesperrt. Zutritt gilt, wenn ein gültiger Ausweis vorliegt und die Person Mitarbeiter oder Gast ist, oder wenn ein gültiger Tagescode vorliegt und die Person nicht gesperrt ist.","typ":"absatz"},{"text":"01 Funktion zutrittErlaubt(p): boolean\n02   ausweisRegel = p.gueltigerAusweis UND (p.istMitarbeiter UND p.istGast)\n03   codeRegel = p.gueltigerTagescode UND p.gesperrt\n04   gib ausweisRegel ODER codeRegel zurück","typ":"absatz"},{"text":"Beim Testen treten zwei voneinander unabhängige Fehlwirkungen auf. Testfall 1: gueltigerAusweis=true, istMitarbeiter=true, istGast=false, gueltigerTagescode=false, gesperrt=false; erwartet Zutritt, tatsächlich verweigert. Testfall 2: gueltigerAusweis=false, istMitarbeiter=false, istGast=false, gueltigerTagescode=true, gesperrt=false; erwartet Zutritt, tatsächlich verweigert.","typ":"absatz"},{"text":"Der Ablauf enthält genau zwei semantische Fehler. Nennen Sie je Fehler die fehlerhafte Zeilennummer und tragen Sie die vollständige korrigierte Zeile ein.","typ":"absatz"},{"kopf":["Position (Zeilennummer)","vollständige korrigierte Zeile"],"typ":"tabelle","zeilen":[["",""],["",""]]}],"beispiel_id":"bsp-programmfehleranalyse-und-debugging-nennen-tabelle-03","freigabeart":"maschinell","loesung":[{"text":"Fehler 1 (2 Punkte): Zeile 02 verknüpft istMitarbeiter und istGast fälschlich mit UND. Korrektur: `ausweisRegel = p.gueltigerAusweis UND (p.istMitarbeiter ODER p.istGast)`. 1 P für die Zeilennennung 02, 1 P für die korrekte Zeile. Belegt durch Testfall 1: gültiger Ausweis, nur Mitarbeiter, kein Tagescode, nicht gesperrt – die codeRegel ist wegen fehlendem Tagescode neutral, sodass allein die ODER/UND-Verknüpfung den Fehler auslöst.","typ":"absatz"},{"text":"Fehler 2 (2 Punkte): Zeile 03 fehlt die Negation von gesperrt. Korrektur: `codeRegel = p.gueltigerTagescode UND (NICHT p.gesperrt)`. 1 P für die Zeilennennung 03, 1 P für die korrekte Zeile. Belegt durch Testfall 2: kein gültiger Ausweis (ausweisRegel neutral), gültiger Tagescode, nicht gesperrt – allein die fehlende Negation verhindert den Zutritt.","typ":"absatz"},{"text":"Beide Korrekturen sind erforderlich: Die Korrektur nur einer Zeile lässt jeweils einen der beiden Testfälle weiterhin fehlschlagen, sodass die zwei Fehlerpositionen aus den Beobachtungen eindeutig und zwingend folgen. Fachlich gleichwertige einzelne Formulierungen der Korrekturzeilen sind anzuerkennen.","typ":"absatz"}],"operator_id":"operator.nennen","pruefungszuordnung":{"berufe":["FIAE"],"teil":"AP2"},"punkte":4,"punkterahmen":{"max":4,"min":4},"quellen":["ap2-fiae-2025-winter-ae2-a03-b-bb"]}],"konzept_id":"fachkonzept.programmfehleranalyse-und-debugging","schema_version":3}