Zurück zur StartseiteInformatik · Realschule 9 · Fach wechseln
Kostenlos starten
Realschule 9 · Informatik
Informatiksysteme · Textuelle Programmierung

Die Strukturen eines Programms

Egal wie groß ein Programm ist: Es besteht immer aus denselben Bausteinen. Variablen speichern Daten, Verzweigungen wählen einen Weg, Schleifen wiederholen Anweisungen, und Funktionen fassen Code unter einem Namen zusammen. Stell dir den Ticketautomaten für das Deutschlandticket oder ein Handyspiel vor: Dahinter steckt immer dieselbe Handvoll Strukturen. Hier lernst du, sie in Pseudocode, im Programmablaufplan (PAP) und im Struktogramm zu lesen und selbst zu entwerfen.

Variablen, Konstanten und Datentypen

Ein Beispiel aus einem Abrechnungsprogramm: Der Preis eines Produkts kann sich ändern, der Mehrwertsteuersatz von 19 % bleibt dagegen im ganzen Programm gleich. In Python schreibt man Konstanten nur per Konvention in Großbuchstaben (MWST = 0.19); technisch könnte man sie trotzdem überschreiben.

Zuweisungen mit der Konstanten MWST, die einmal festgelegt wird, und der Variablen preis, die sich durch die Addition der Steuer ändert. MWST ← 0,19 preis ← 15,00 preis ← preis·(1+MWST) Konstante Variable bleibt gleich ändert sich

Im Pseudocode schreiben wir die Zuweisung mit einem Pfeil ←, in Python mit =. Im Text rechnen wir mit Komma (0,19), im Code gilt der Dezimalpunkt (0.19).

Eine Sequenz sind Anweisungen, die nacheinander ausgeführt werden. Im Struktogramm stehen sie als Blöcke untereinander:

Struktogramm einer Sequenz: x gleich 4, x gleich x plus 2, ausgeben x. x ← 4 x ← x + 2 ausgeben x
Üben★☆☆Nicht begonnen
Erkläre, was eine Variable in einem Programm ist, und gib ein Beispiel: Welchen Namen und welchen Inhalt hätte eine Variable in einem Videospiel, die die Punkte des…

Erkläre, was eine Variable in einem Programm ist, und gib ein Beispiel: Welchen Namen und welchen Inhalt hätte eine Variable in einem Videospiel, die die Punkte des Spielers speichert? Welche Operation würde ihren Wert beim Abschluss eines Levels ändern?

Lösen
Üben★☆☆Nicht begonnen
Erkläre den Unterschied zwischen einer Variablen und einer Konstanten in einem Programm, mit je einem Beispiel aus einem Abrechnungsprogramm (der Preis des Produkts im…

Erkläre den Unterschied zwischen einer Variablen und einer Konstanten in einem Programm, mit je einem Beispiel aus einem Abrechnungsprogramm (der Preis des Produkts im Gegensatz zum Mehrwertsteuersatz).

Lösen
Üben★☆☆Nicht begonnen
Die Daten eines Programms haben einen Typ: Ganzzahl, Dezimalzahl, Text oder Boolean. Gib für jedes Datum den am besten geeigneten Typ an und begründe ihn: das Alter…

Die Daten eines Programms haben einen Typ: Ganzzahl, Dezimalzahl, Text oder Boolean. Gib für jedes Datum den am besten geeigneten Typ an und begründe ihn: das Alter einer Person, ihre Körpergröße in Metern, ihr Name und ob sie bestanden hat oder nicht.

Lösen
Üben★☆☆Nicht begonnen
Lies dieses Fragment und erstelle die Ablaufverfolgung (Trace): Gib an, welcher Wert auf dem Bildschirm angezeigt wird, und erkläre, warum die zweite Anweisung keine…

Lies dieses Fragment und erstelle die Ablaufverfolgung (Trace):

Start

    x ← 4

    x ← x + 2

    ausgeben x

Ende

Gib an, welcher Wert auf dem Bildschirm angezeigt wird, und erkläre, warum die zweite Anweisung keine mathematische Gleichung, sondern eine Zuweisung ist.

Lösen

Kommentare im Quelltext

Ein Kommentar ist Text im Quelltext, den der Computer ignoriert. In Python beginnt er mit #. Kommentare richten sich an Menschen: an dich selbst in drei Wochen oder an eine Mitschülerin, die dein Programm verstehen oder ändern soll.

Ein guter Kommentar erklärt das Warum, nicht das, was man ohnehin sieht:

# schlecht:  n um 1 erhöhen

n = n + 1

# gut:  nächste Zahl prüfen, bis die Obergrenze erreicht ist

n = n + 1
Üben★☆☆Nicht begonnen
Was ist ein Kommentar im Quelltext? Erkläre, an wen sich Kommentare richten (nicht an den Computer, sondern an diejenigen, die den Code später lesen), und was ein guter…

Was ist ein Kommentar im Quelltext? Erkläre, an wen sich Kommentare richten (nicht an den Computer, sondern an diejenigen, die den Code später lesen), und was ein guter Kommentar erklären sollte (das Warum von Entscheidungen, nicht das, was man ohnehin sieht).

Lösen

Verzweigung: bedingte Anweisungen

Im PAP ist die Verzweigung eine Raute mit zwei Ausgängen ja und nein. Im Struktogramm ist es ein Block mit einem Dreieck oben und zwei Spalten darunter:

Struktogramm einer Verzweigung: Bedingung alter ≥ 18, links ja mit Ausgabe volljährig, rechts nein mit Ausgabe minderjährig. alter ≥ 18 ? ja nein ausgeben „volljährig“ ausgeben „minderjährig“

Die Bedingung vergleicht mit =, ≠, <, ≤, >, ≥ und lässt sich mit und, oder, nicht verknüpfen (in Python ==, !=, and, or, not). Das Ergebnis einer Bedingung ist immer ein Wahrheitswert: wahr oder falsch.

Mit mod berechnest du den Rest einer Division: 17 mod 5 = 2, denn 17 = 3 · 5 + 2. Die Bedingung a mod 3 = 0 prüft, ob a durch 3 teilbar ist (in Python %). Soll eine Zahl durch 3 und durch 5 teilbar sein, brauchst du und, nicht oder.

Üben★☆☆Nicht begonnen
Erkläre, was eine bedingte Anweisung (wenn ... dann ... sonst ...) ist, und schreibe zwei Beispiele für Entscheidungen aus dem Alltag, die mit dieser Struktur…

Erkläre, was eine bedingte Anweisung (wenn ... dann ... sonst ...) ist, und schreibe zwei Beispiele für Entscheidungen aus dem Alltag, die mit dieser Struktur ausgedrückt werden. Gib jeweils die Bedingung und die beiden möglichen Aktionen an.

Lösen
Üben★★☆Nicht begonnen
Schreibe in Pseudocode ein Programm, das die Punktzahl einer Klausur (eine Zahl von 0 bis 10) einliest und „bestanden“ ausgibt, wenn die Punktzahl 5 oder größer ist, und…

Schreibe in Pseudocode ein Programm, das die Punktzahl einer Klausur (eine Zahl von 0 bis 10) einliest und „bestanden“ ausgibt, wenn die Punktzahl 5 oder größer ist, und andernfalls „nicht bestanden“. Verwende eine Variable, eine Dateneingabe und eine Verzweigung.

Lösen
Üben★★☆Nicht begonnen
Dieses Programm klassifiziert eine Person nach ihrem Alter: Erstelle die Ablaufverfolgung für die Eingabe 17 und für die Eingabe 21 und gib jeweils an, welche Bedingung…

Dieses Programm klassifiziert eine Person nach ihrem Alter:

Start

    einlesen alter

    wenn alter ≥ 18 dann

        ausgeben "volljährig"

    sonst

        ausgeben "minderjährig"

    Ende wenn

Ende

Erstelle die Ablaufverfolgung für die Eingabe 17 und für die Eingabe 21 und gib jeweils an, welche Bedingung ausgewertet wird und was auf dem Bildschirm ausgegeben wird.

Lösen

Iteration: Schleifen und ihre Trace-Tabelle

Im Pseudocode und im Struktogramm unterscheidet man kopfgesteuerte Schleifen (Bedingung vorher prüfen: solange … tue) und fußgesteuerte (erst ausführen, dann prüfen). In Python gibt es nur while (kopfgesteuert) und for (Zählschleife). Alle Beispiele hier sind kopfgesteuert. Bei der fußgesteuerten Schleife steht die Bedingung unten im Struktogramm: Der Rumpf läuft mindestens einmal.

Struktogramm einer fußgesteuerten Schleife: ausgeben n, n gleich n minus 1, dann wiederhole solange n größer 0. ausgeben n n ← n − 1 wiederhole solange n > 0

Der PAP zeigt die Schleife als Rückpfeil zur Raute:

Programmablaufplan einer solange-Schleife: n wird eingelesen; solange n größer als 0 ist, wird n ausgegeben und 1 abgezogen; sonst endet das Programm. Start einlesen n n > 0 ? ja ausgeben n n ← n − 1 Ende

Dasselbe als Struktogramm: Der Schleifenkopf „solange n > 0“ umschließt den Rumpf.

Struktogramm einer Schleife: einlesen n, dann solange n größer 0 die Anweisungen ausgeben n und n gleich n minus 1. einlesen n solange n > 0 ausgeben n n ← n − 1
Üben★☆☆Nicht begonnen
Erkläre, was eine Schleife ist und welches Problem sie gegenüber dem vielfachen Wiederholen derselben Anweisungen löst. Schreibe in Pseudocode eine Schleife, die die…

Erkläre, was eine Schleife ist und welches Problem sie gegenüber dem vielfachen Wiederholen derselben Anweisungen löst. Schreibe in Pseudocode eine Schleife, die die Zahlen von 1 bis 5 ausgibt.

Lösen
Üben★★☆Nicht begonnen
Lies dieses Programm in Pseudocode: Erstelle die Ablaufverfolgung Schritt für Schritt (Wert von summe und n am Ende jedes Durchlaufs) und gib an, wie oft die Schleife…

Lies dieses Programm in Pseudocode:

Start

    summe ← 0

    n ← 1

    solange n ≤ 5 tue

        summe ← summe + n

        n ← n + 1

    Ende solange

    ausgeben summe

Ende

Erstelle die Ablaufverfolgung Schritt für Schritt (Wert von summe und n am Ende jedes Durchlaufs) und gib an, wie oft die Schleife wiederholt wird und welcher Wert am Ende ausgegeben wird.

Lösen
Üben★★☆Nicht begonnen
Das Flussdiagramm in der Abbildung stellt ein Programm mit einer Schleife dar: Es liest eine Zahl n ein und gibt, solange n größer als 0 ist, ihren Wert aus und zieht 1…

Das Flussdiagramm in der Abbildung stellt ein Programm mit einer Schleife dar: Es liest eine Zahl n ein und gibt, solange n größer als 0 ist, ihren Wert aus und zieht 1 ab, wie in der Abbildung gezeigt.

Start n einlesen n > 0 ? ja n ausgeben n ← n − 1 nein Ende

Wenn der Benutzer n = 3 eingibt: (a) Erstelle die Ablaufverfolgung und gib an, welche Werte n annimmt und was in jedem Durchlauf ausgegeben wird; (b) gib an, wie oft der Schleifenrumpf ausgeführt wird; (c) erkläre, was passieren würde, wenn der Benutzer n = 0 eingäbe.

Lösen
Üben★★☆Nicht begonnen
Schreibe in Pseudocode ein Programm, das den Countdown von 10 bis 1 ausgibt und nach dem Ende der Schleife „Abheben!“ ausgibt. Verwende eine Variable und eine…

Schreibe in Pseudocode ein Programm, das den Countdown von 10 bis 1 ausgibt und nach dem Ende der Schleife „Abheben!“ ausgibt. Verwende eine Variable und eine solange-Schleife.

Lösen
Üben★★☆Nicht begonnen
Dieses Programm addiert die Zahlen, die der Benutzer eingibt, bis er eine Null eingibt: Erstelle die Ablaufverfolgung für die Eingabefolge 4, 3, 0: Gib den Wert von n…

Dieses Programm addiert die Zahlen, die der Benutzer eingibt, bis er eine Null eingibt:

Start

    summe ← 0

    einlesen n

    solange n ≠ 0 tue

        summe ← summe + n

        einlesen n

    Ende solange

    ausgeben summe

Ende

Erstelle die Ablaufverfolgung für die Eingabefolge 4, 3, 0: Gib den Wert von n und summe nach jedem Einlesen an und was am Ende ausgegeben wird. Erkläre außerdem, warum das erste einlesen n außerhalb der Schleife steht.

Lösen
Üben★★☆Nicht begonnen
Dieses Programm sollte die Zahlen von 1 bis 5 ausgeben, hat aber einen Fehler: a) Finde den Fehler: Was fehlt im Schleifenrumpf? b) Erkläre, was passiert, wenn das…

Dieses Programm sollte die Zahlen von 1 bis 5 ausgeben, hat aber einen Fehler:

Start

    n ← 1

    solange n ≤ 5 tue

        ausgeben n

    Ende solange

Ende
  1. a) Finde den Fehler: Was fehlt im Schleifenrumpf?
  1. b) Erkläre, was passiert, wenn das Programm so ausgeführt wird, wie es geschrieben ist.
  1. c) Schreibe den korrigierten Pseudocode.
Lösen

Schleifen und Verzweigungen kombinieren

Die drei Grundstrukturen Sequenz (Anweisungen nacheinander), Verzweigung und Iteration lassen sich beliebig ineinander schachteln. Ein Beispiel ist die Zugangskontrolle mit höchstens drei Versuchen:

Programmablaufplan einer Zugangskontrolle: Nach versuche gleich 0 prüft eine Schleife, ob noch Versuche übrig sind, liest das Passwort und erhöht bei falscher Eingabe die Versuche; bei richtiger Eingabe wird der Zugang erlaubt, sonst gesperrt. Start versuche ← 0 versuche < 3 ? nein Zugang gesperrt ja einlesen passwort Passwort richtig? ja Zugang erlaubt nein versuche ← versuche + 1
Üben★★☆Nicht begonnen
Das Flussdiagramm in der Abbildung stellt die Zugangskontrolle eines Geräts dar: Es gibt höchstens drei Versuche, das richtige Passwort einzugeben, wie in der Abbildung…

Das Flussdiagramm in der Abbildung stellt die Zugangskontrolle eines Geräts dar: Es gibt höchstens drei Versuche, das richtige Passwort einzugeben, wie in der Abbildung gezeigt.

Start versuche ← 0 Noch Versuche? nein Zugang gesperrt ja Passwort einlesen Passwort richtig? ja Zugang erlaubt nein versuche ← versuche + 1

(a) Erkläre den vollständigen Ablauf des Programms, wenn der Benutzer das Passwort zweimal falsch und beim dritten Mal richtig eingibt. (b) Gib an, wie oft das Programm höchstens nach dem Passwort fragt. (c) Begründe, warum die Variable versuche nur in einem der Zweige der zweiten Raute erhöht wird.

Lösen
Üben★★★Nicht begonnen
Ein Mitschüler behauptet, dass der folgende Pseudocode immer funktioniert und der effizienteste ist, um zu zählen, wie viele Zahlen zwischen zwei beliebigen positiven…

Ein Mitschüler behauptet, dass der folgende Pseudocode immer funktioniert und der effizienteste ist, um zu zählen, wie viele Zahlen zwischen zwei beliebigen positiven ganzen Zahlen $A$ und $B$ ($A \le B$) gleichzeitig durch $3$ und durch $5$ teilbar sind:

Start

    einlesen A, B

    gesamt ← 0

    solange A ≤ B tue

        wenn (A mod 3 = 0) oder (A mod 5 = 0) dann

            gesamt ← gesamt + 1

        Ende wenn

        A ← A + 1

    Ende solange

    ausgeben gesamt

Ende

(a) Widerlegen Sie zwei Schwächen seines Vorschlags: einen Fehler in der bedingten Logik gemessen an der geforderten Spezifikation und eine algorithmische Ineffizienz (analysieren Sie, wie viele Durchläufe und Bedingungsauswertungen durchgeführt werden, wenn $B - A = 1\,000\,000$).

(b) Wenn zwingend eine solange-Schleife verwendet werden muss, schreiben Sie den Algorithmus neu und optimieren Sie Startwert und Schrittweite so, dass möglichst wenige Durchläufe nötig sind und innerhalb der Schleife keine Verzweigung ausgewertet wird.

(c) Entwerfen Sie eine mathematische Lösung in konstanter Zeit $O(1)$ ohne Schleifen in Pseudocode und begründen Sie die verwendete Formel formal.

Lösen
Üben★★★Nicht begonnen
Entwerfen Sie in Pseudocode den Steuerungsalgorithmus für eine per Taster geregelte Fußgängerampel, der den Verkehr einer Hauptstraße sicher steuert und die folgenden…

Entwerfen Sie in Pseudocode den Steuerungsalgorithmus für eine per Taster geregelte Fußgängerampel, der den Verkehr einer Hauptstraße sicher steuert und die folgenden Anforderungen erfüllt:

  1. Im Ruhezustand zeigt die Fahrzeugampel Grün.

  2. Um Staus durch ständige Anforderungen zu vermeiden, muss zwischen zwei aufeinanderfolgenden Fußgängerphasen eine Mindestgrünzeit für Fahrzeuge von $30$ Sekunden gewährleistet sein.

  3. Sobald diese Mindestzeit verstrichen ist und ein Tastendruck eines Fußgängers erkannt wurde, lautet die zwingende Abfolge: Gelb für Fahrzeuge für $3$ Sekunden, Rot für Fahrzeuge und Grün für Fußgänger für $15$ Sekunden und schließlich blinkendes Grün für Fußgänger für $4$ Sekunden, bevor das Grün für Fahrzeuge wiederhergestellt wird.

(a) Schreiben Sie den Pseudocode des Systems, strukturiert innerhalb einer Endlosschleife zur Überwachung.

(b) Analysieren Sie, welchen Blockadefehler die Kreuzung erleiden würde, wenn der Sensor im dauerhaft aktiven Zustand ausfiele (Taster klemmt), und begründen Sie, wie Ihr Entwurf verhindert, dass die Hauptstraße dauerhaft zusammenbricht.

(c) Begründen Sie technisch, warum es in nebenläufigen Echtzeit-Steuerungssystemen vorzuziehen ist, einen Zeitstempel der Uhr (aktuelle_zeit()) abzufragen, statt die CPU durch passives blockierendes Warten (warten()) anzuhalten.

Lösen
Üben★★★Nicht begonnen
Analysieren Sie den folgenden Algorithmus, der Indexpaare $(i, j)$ verarbeitet: (a) Leiten Sie eine Formel her und begründen Sie sie algebraisch, die angibt, wie oft…

Analysieren Sie den folgenden Algorithmus, der Indexpaare $(i, j)$ verarbeitet:

Start

    einlesen N

    zaehler ← 0

    für i von 1 bis N tue

        für j von i bis N tue

            wenn (i + j) mod 2 = 0 dann

                zaehler ← zaehler + 1

            Ende wenn

        Ende für

    Ende für

    ausgeben zaehler

Ende

(a) Leiten Sie eine Formel her und begründen Sie sie algebraisch, die angibt, wie oft insgesamt die Bedingung wenn in Abhängigkeit von $N$ ausgewertet wird (berechnen Sie die Summe der Durchläufe der inneren Schleife bezogen auf die äußere).

(b) Sagen Sie den exakten Endwert von zaehler voraus, wenn die Eingabe $N = 5$ ist, und erstellen Sie dazu eine Trace-Tabelle, die die Werte von $i$, $j$, das Ergebnis der Bedingung und die Aktualisierungen von zaehler zeigt.

(c) Ein Schüler behauptet: „Da die verschachtelte Schleife Zahlenpaare durchläuft, würde das Ersetzen von für j von i bis N durch für j von 1 bis N und das Teilen des Endergebnisses durch $2$ für jedes $N$ genau dasselbe Ergebnis liefern.“ Zeigen Sie durch eine formale Argumentation oder ein Gegenbeispiel, ob diese Behauptung wahr oder falsch ist.

Lösen

Funktionen: das Programm in Teile zerlegen

Zwei Vorteile: Du kannst den Code wiederverwenden, ohne ihn zu kopieren, und du kannst jeden Teil getrennt verstehen und testen. Ein Fehler in der Formel wird nur an einer Stelle behoben. Der Aufruf eines Unterprogramms hat in beiden Darstellungen ein eigenes Symbol: ein Rechteck mit doppelten Seitenstrichen. Im PAP steht es als eigenes Symbol (vordefinierter Prozess) im Ablauf, im Struktogramm als Block in der Sequenz. Links siehst du das Symbol im PAP, rechts im Struktogramm:

Symbol für den Aufruf eines Unterprogramms: Rechteck mit doppelten Seitenlinien, links im PAP, rechts im Struktogramm. kreisflaeche(2) kreisflaeche(2)

So sieht ein kleines Programm aus, das die Funktion zweimal aufruft, als Struktogramm:

Struktogramm einer Sequenz mit zwei Aufrufen des Unterprogramms kreisflaeche: a gleich kreisflaeche(1), b gleich kreisflaeche(2), ausgeben b. a ← kreisflaeche(1) b ← kreisflaeche(2) ausgeben b Die Funktion kreisflaeche wird einmal geschrieben und zweimal aufgerufen: mit Radius 1 liefert sie etwa 3,14, mit Radius 2 etwa 12,57, also das Vierfache. Funktion kreisflaeche(radius) zurückgeben π·radius² ausgeben kreisflaeche(1) radius = 1 ≈ 3,14 ausgeben kreisflaeche(2) radius = 2 ≈ 12,57
Üben★☆☆Nicht begonnen
Erkläre, was eine Funktion in einem Programm ist, und nenne zwei Vorteile davon, den Code in benannte Funktionen aufzuteilen (Wiederverwenden ohne Kopieren, jeden Teil…

Erkläre, was eine Funktion in einem Programm ist, und nenne zwei Vorteile davon, den Code in benannte Funktionen aufzuteilen (Wiederverwenden ohne Kopieren, jeden Teil getrennt verstehen und testen).

Lösen
Üben★★★Nicht begonnen
Entwerfen Sie in Pseudocode einen Algorithmus für das Spiel „Zahlenraten“, bei dem die Rollen vertauscht sind: Der Benutzer denkt sich eine geheime ganze Zahl zwischen…

Entwerfen Sie in Pseudocode einen Algorithmus für das Spiel „Zahlenraten“, bei dem die Rollen vertauscht sind: Der Benutzer denkt sich eine geheime ganze Zahl zwischen $1$ und $100$ aus und der Computer muss sie mit der optimalen Strategie der binären Suche erraten.

(a) Schreiben Sie den Pseudocode des Algorithmus. In jedem Durchlauf schlägt der Computer die Mitte des aktuellen Intervalls vor und der Benutzer antwortet, ob die geheime Zahl „größer“ oder „kleiner“ ist oder ob die Maschine „richtig geraten“ hat.

(b) Bauen Sie einen Validierungsmechanismus ein, der erkennt, ob der Benutzer einen Widerspruch begeht oder schummelt (zum Beispiel, wenn sich die Grenzen des Suchintervalls überkreuzen, weil die untere Grenze die obere übersteigt), und das Programm mit einer begründenden Warnmeldung beendet.

(c) Begründen Sie formal, wie viele Versuche der Computer höchstens benötigt, um jede Zahl im Bereich $[1; 100]$ zu erraten, und sagen Sie vorher, wie viele Versuche höchstens erforderlich wären, wenn der Bereich auf $[1; 1\,000]$ erweitert würde.

Lösen
Üben★★★Nicht begonnen
Ein IT-Sicherheitsanalyst überprüft den folgenden Pseudocode, der die Zugangskontrolle mit Karte und PIN an einem Bankterminal steuern soll: (a) Identifizieren Sie einen…

Ein IT-Sicherheitsanalyst überprüft den folgenden Pseudocode, der die Zugangskontrolle mit Karte und PIN an einem Bankterminal steuern soll:

Start

    geheime_pin ← 3852

    versuche ← 0

    gesperrt ← falsch

    solange versuche < 3 und nicht gesperrt tue

        einlesen eingegebene_pin

        wenn eingegebene_pin = geheime_pin dann

            ausgeben "Willkommen im System"

        sonst

            versuche ← versuche + 1

            ausgeben "PIN falsch"

        Ende wenn

    Ende solange

    wenn versuche = 3 dann

        gesperrt ← wahr

        ausgeben "Karte aus Sicherheitsgründen gesperrt"

    Ende wenn

Ende

(a) Identifizieren Sie einen schwerwiegenden Fehler im Kontrollfluss, der auftritt, wenn der Benutzer beim ersten Versuch die richtige PIN eingibt, und begründen Sie ihn.

(b) Sagen Sie das Verhalten des Programms und den Endwert der Variablen versuche und gesperrt voraus, wenn der Benutzer die Eingabefolge 1111, 3852, 9999 eingibt.

(c) Schreiben Sie den Algorithmus in Pseudocode neu und korrigieren Sie den Ablauf so, dass ein sauberer sofortiger Ausstieg nach einem Treffer und eine strikte Sperrung nach drei aufeinanderfolgenden Fehlversuchen gewährleistet sind, wobei unter keinen Umständen die Willkommensmeldung erscheinen darf, wenn die Karte gesperrt wird.

Lösen
Üben★★★Nicht begonnen
Beim Entwurf einer hydraulischen Anlage werden zylindrische Buchsen aus Sphäroguss mit ringförmigem Querschnitt (Kreisring) und einer Dichte $\rho = 7{,}2\text{ g/cm}^3$…

Beim Entwurf einer hydraulischen Anlage werden zylindrische Buchsen aus Sphäroguss mit ringförmigem Querschnitt (Kreisring) und einer Dichte $\rho = 7{,}2\text{ g/cm}^3$ verwendet.

(a) Entwerfen Sie in Pseudocode eine Funktion area_anillo(radio_int, radio_ext), die die Fläche des Kreisrings ($\pi \cdot (r_{ext}^2 - r_{int}^2)$) berechnet und zurückgibt. Die Funktion muss prüfen, dass $radio\_ext > radio\_int > 0$ gilt; verletzen die Parameter diese physikalische Bedingung, muss sie $-1{,}0$ als Fehlercode zurückgeben. Verwenden Sie $\pi \approx 3{,}1416$.

(b) Entwerfen Sie eine zweite Funktion masa_tubo(radio_int, radio_ext, longitud, densidad), die area_anillo aufruft, um das Volumen und die Gesamtmasse des Abschnitts in Kilogramm zu berechnen (die Abmessungen werden in Zentimetern und die Dichte in $\text{g/cm}^3$ eingegeben). Gibt area_anillo einen Fehler zurück oder ist die Länge kleiner oder gleich null, muss die Funktion den Wert $-1{,}0$ weitergeben.

(c) Führen Sie die vollständige Ablaufverfolgung der Ausführung von masa_tubo(4{,}0, 5{,}0, 100{,}0, 7{,}2) durch, geben Sie die in jede Funktion eingehenden und aus ihr ausgehenden Werte an und begründen Sie das erhaltene numerische Ergebnis.

Lösen
Üben★★★Nicht begonnen
Der Qualitätssicherungsausschuss einer Schule bewertet den folgenden Algorithmus, der die Endnote eines technischen Moduls aus drei Teilnoten (…

Der Qualitätssicherungsausschuss einer Schule bewertet den folgenden Algorithmus, der die Endnote eines technischen Moduls aus drei Teilnoten ($N_1, N_2, N_3 \in [0{,}0; 10{,}0]$) bestimmen soll. Die offizielle Vorschrift lautet: „Der Schüler gilt als ‚bestanden‘, wenn der gewichtete Mittelwert ($30\,\%$ für $N_1$, $30\,\%$ für $N_2$ und $40\,\%$ für $N_3$) gleich oder größer als $5{,}0$ ist, sofern keine der Einzelnoten kleiner als $4{,}0$ ist; andernfalls gilt er als ‚nicht bestanden‘.“

Start

    einlesen N1, N2, N3

    mittel ← N1 · 0,3 + N2 · 0,3 + N3 · 0,4

    wenn mittel ≥ 5,0 oder (N1 ≥ 4,0 und N2 ≥ 4,0 und N3 ≥ 4,0) dann

        ausgeben "bestanden"

    sonst

        ausgeben "nicht bestanden"

    Ende wenn

Ende

(a) Erklären Sie ausführlich, warum das Programm keinen Syntaxfehler erzeugt und normal ausgeführt wird, obwohl es einen kritischen Logikfehler in der Verzweigung enthält.

(b) Entwerfen Sie zwei Testtripel von Noten $(N_1, N_2, N_3)$, die den Fehler des Algorithmus offenlegen: eines, das ein falsch positives Ergebnis verursacht (das Programm erklärt „bestanden“, obwohl es „nicht bestanden“ sein müsste), und eines, das ein falsch negatives Ergebnis verursacht (oder begründen Sie, ob Letzteres mit dem aktuellen Ausdruck möglich ist).

(c) Schreiben Sie den Algorithmus in Pseudocode neu, indem Sie die logische Bedingung korrigieren und eine vorherige Prüfung ergänzen, die verifiziert, dass die drei eingegebenen Noten im gültigen Bereich $[0{,}0; 10{,}0]$ liegen.

Lösen
Üben★★★Nicht begonnen
Ein unerfahrener Programmierer hat das Spiel „Zahlenraten“ mit einer einzigen Funktion umgesetzt, die direkt auf globale Variablen zugreift: (a) Begründen Sie drei…

Ein unerfahrener Programmierer hat das Spiel „Zahlenraten“ mit einer einzigen Funktion umgesetzt, die direkt auf globale Variablen zugreift:

globale Variablen: geheimzahl, versuche

funktion runde_spielen()

    ausgeben "Gib eine Zahl ein (1-100): "

    einlesen tipp

    versuche ← versuche + 1

    wenn tipp = geheimzahl dann

        ausgeben "Richtig geraten in ", versuche, " Versuchen!"

    sonst

        wenn tipp < geheimzahl dann

            ausgeben "Die Geheimzahl ist größer"

        sonst

            ausgeben "Die Geheimzahl ist kleiner"

        Ende wenn

    Ende wenn

Ende funktion

(a) Begründen Sie drei Nachteile dieses Entwurfs anhand der Konzepte Kopplung, Seiteneffekte und mangelnde Kohäsion. Warum verhindert das Vermischen der Konsolen-Ein-/Ausgabe mit der Vergleichslogik, dass diese Funktion in einer grafischen Oberfläche oder einer Webanwendung wiederverwendet werden kann?

(b) Definieren Sie die modulare Architektur neu, indem Sie drei Funktionen mit geringer Kopplung erstellen: eine reine Vergleichsfunktion (die den Tipp und die Geheimzahl erhält und eine Ergebniskennung zurückgibt), eine Eingabevalidierungsfunktion (die den Bereich $[1; 100]$ prüft) und eine Funktion zur Zustandsaktualisierung. Geben Sie für jede die genaue Signatur (Name, Parameter mit Typ und Rückgabetyp) und ihre Zuständigkeiten an.

(c) Schreiben Sie in Pseudocode das Hauptprogramm, das diese Funktionen durch Parameterübergabe und Rückgabewerte koordiniert, ohne eine einzige globale Variable zu verwenden.

Lösen

Auf einen Blick

Alle Aufgaben zu diesem Abschnitt anzeigen