SlideShare une entreprise Scribd logo
1  sur  17
Télécharger pour lire hors ligne
Informatik gk 11
Grundlagen der imperativen Programmierung mit Pascal und Delphi
1. Grundlagen
1.1 erstes Programm
Aufgabe 1
Begin
Zahl a einlesen
Zahl b einlesen
c = a + b
Ausgabe Zahl c
End.
a) Beschreibe die Struktur des Programms.
b) Setze das Struktogramm in ein Delphi-Programm um.
Aufgabe 2
a) Welche Bedeutung hat das Semikolon in Pascal?
b) Unterscheidet Pascal (Delphi) Groß- und Kleinschreibung?
1.2 Einfache Datentypen
(1) numerische Datentypen
Integer: ganzzahliger Wert, (Bsp. 21, -2334) Wertebereich: -32 768 ... 32 767
Byte: ganzzahliger Wert, Wertebereich: 0..255
Real: reellwertige Zahl, zum Beispiel Zahlen mit Nachkommastellen, (Bsp: -34.987)
Wertebereich: -1038
.. 1038
(2) Zeichen und Zeichenketten
Char: Zeichen Beispiele: A, M, 1, ?, %, }, 
String: Zeichenkette Beispiele: Computer, 15.11.2002
(Hinweis: 15.11.2002 ist nicht numerisch, da die Angabe mehr als einen Punkt enthält.)
(3) Wahrheitswert
Boolean: logische Variable, die entweder den Wahrheitswert wahr (true) oder falsch
(false) aufnehmen kann
1.3 Write-Anweisung
1.4 Variablenkonzept
vgl. Unterricht
1
Var a: Real;
…
Writeln (‘Der Flächeninhalt beträgt’ , a:8:2 , ’Zentimeter’);
Textkonstante Zugriff auf eine
Variable
Textkonstante
Informatik gk 11
Grundlagen der imperativen Programmierung mit Pascal und Delphi
Aufgabe 1
Aus einem gegebenen Radius r eines Kreises sollen die Kreisfläche und der Kreisumfang
berechnet werden. Die Zahl Pi kann mit 3,14 angegeben werden.
a) Erstelle das Struktogramm,
b) setze das Struktogramm in ein Delphi-Programm um.
Aufgabe 2
Das folgende Programmfragment ist syntaktisch korrekt.
Var Preis: Real;
Preiserhoehung: Real;
...
Preis := 75;
Preiserhoehung := 5;
* Preis := Preis + Preiserhöhung;
** Preiserhöhung := Preiserhöhung *2;
Beschreibe mit Worten, was bei den Zuweisungen in Zeile * und ** passiert!
Benutze dazu das Modell der "Schubladenbox" aus dem Unterricht.
Aufgabe 3
Erkläre das Variablenkonzept in Pascal (Delphi).
Aufgabe 4
Warum müssen Variablen, mit denen im Anweisungsteil gearbeitet werden soll, vorher im
Vereinbarungsteil mit Angabe des Datentyps vereinbart werden?
1.5 Fehlerarten
(1) Syntaxfehler
Fehler, die der Compiler zum Zeitpunkt des Compilierens erkennt. Der Compiliervorgang
wird abgebrochen.
Bsp: Einer Variablen vom Typ Integer wird im Programm der Wert einer Variablen vom Typ
Real zugewiesen
(2) Laufzeitfehler
Fehler, die erst zum Zeitpunkt der Programmaufführung auftreten. Die Programmausführung
wird abgebrochen.
Bsp: Wertzuweisung eines Wertes außerhalb des Wertebereichs einer Variablen durch den
Benutzer während der Programmausführung.
Aufgabe 1
Gegeben ist folgender Pascal-Quelltext:
Program Beispiel 1;
(* Dieses Programm berechnet den
Flächeninhalt
eines Dreiecks *)
Var grundseite: Real;
hoehe : Real;
flaeche: Integer;
2
Informatik gk 11
Grundlagen der imperativen Programmierung mit Pascal und Delphi
Begin;
Write ('Eingabe Grundseite in cm: ')
Readln (grundseite);
Write ('Eingabe Hoehe in cm: ');
Readln (hoehe);
flaeche = grundseite * hoehe / 2;
Writeln;
Writeln;
* Write ('Die Dreicksfläche beträgt:’ * ,flaeche,' qcm');
Readln;
End.
a) Welche syntaktischen Fehler enthält der Programmcode?
b) Stelle den Programmablauf in einem Struktogramm dar!
c) Welche Ausgaben erfolgen beim Aufruf des write-Befehls in den Zeilen *?
Aufgabe 2
Welche syntaktischen Fehler weist folgendes Programm auf?
Program Zinsen;
(* Aus der Eingabe des Betrags und dem Zinssatz
werden die jährlichen Zinsen errechnet*)
Var Zinsen, Betrag: Real
Endkapital: Integer;
Begin
Write ('Eingabe Betrag:');
Readln (Betrag);
Write ('Eingabe', Zinssatz);
Zinsen := Betrag * 0.01 * Zinssatz / 360;
Endkapital := Betrag + Zinsen;
Writeln ('Die Zinsen betragen: ' , Zinsen:8:2,' Euro');
Writeln ('Der Endbetrag ist: ' ,Endkapital:8:2 ,' Euro');
End.
Aufgabe 3
Beim Fehlen der Kommata in der Write-Anweisung wird die Fehlermeldung
ERROR: ’)’ expected
ausgegeben. Warum lautet die Meldung nicht : ’,’ expected ?
1.6 Divisionsarten
(1) Ganzzahlige Division (2) Divisionsrest
Wert := 108 div 5; Wert := 108 mod 5;
Variableninhalt: Wert = 21 Variableninhalt: Wert = 3
(3) Divisionsoperator
Wert := 108 / 5;
Variableninhalt: Wert = 21.6
Aufgabe 1
Berechne die Werte der folgenden Ausdrücke:
a) 12 MOD 7
b) 12 DIV 7
c) 45 MOD 6 + 3
3
Informatik gk 11
Grundlagen der imperativen Programmierung mit Pascal und Delphi
d) 45 DIV (6 + 3)
e) (23 DIV 5) / 2
f) (23 MOD 5) / 2
Aufgabe 2
a) Werte den Ausdruck schrittweise aus:
a := 20 MOD 7 /15 DIV 4 +3-18 DIV 5*2
b) Welchen Datentyp hat das Ergebnis?
c) Programmiere die Zeile aus (a). Wo liegt der Fehler?
Aufgabe 3
Es gilt folgende Variablendeklaration:
Var a, b : Real;
c, e : Integer;
d: Boolean;
Welche Pascal-Anweisung wird durch den Compiler nicht beanstandet?
a) a := c / d;
b) c := a * b;
c) d := 'False';
d) b := c DIV e
1.7 Weiterführende Aufgaben
Aufgabe 1
Mithilfe der Steigungsformel
21
21
xx
yy
m
−
−
= kann man die Steigung einer Geraden durch die
Punkte P(x1/y1) und Q(x2/y2) berechnen.
a) Erstelle ein Struktogramm,
b) erstelle das entsprechende Delphi-Programm.
Aufgabe 2
Mit der Eingabe von p und q kann ein Programm mithilfe der p/q-Formel die Nullstellen des
Polynoms: f(x) = x² + px + q berechnen.
Hinweis:
• Wurzel  sqr(…), Quadrat  sqrt(…)
• Unit ergänzen.
a) Schreibe die Formel für die beiden Nullstellen x1 und x2 als Delphi-Term auf,
b) erstelle das Struktogramm,
c) programmiere!
4
Informatik gk 11
Grundlagen der imperativen Programmierung mit Pascal und Delphi
2 Verzweigungen
2.1 Einseitige Auswahl (IF - THEN)
Aufgabe 1
a) Beschreibe, was im Flussdiagramm dargestellt wird und wie der Programmfluss verläuft,
b) Schreibe das Flussdiagramm in ein Struktogramm um.
Aufgabe 2
Gegeben ist das folgende Programmfragment:
Program Wurzelberechnung;
(* Das Programm berechnet die Wurzel einer Zahl mit der Standartfunktion
sqrt(x) *)
Var zahl, wurzel : Real;
Write ('Eingabe einer Zahl:');
Readln (zahl);
if __________ ______ (***)
Wurzel := sqrt (zahl);
writeln (wurzel:8:2);
Ergänze die Bedingung der if-Anweisung an der Stelle (***), so dass eine sinnvolle Abfrage
entsteht.
Setze alle Begin – End Anweisungen an die richtige Stelle.
Anweisung 2
erfüllt
Anweisung 1.1
Anweisung 1
Bedingung
Syntax
If Bedingung (oder Wahrheitswert) then
Anweisung ;
Bsp: If (a < b) then
Write (' a ist kleiner als b');
5
Informatik gk 11
Grundlagen der imperativen Programmierung mit Pascal und Delphi
2.2 Zweiseitige Auswahl (IF - THEN - ELSE)
Aufgabe 1
a) Beschreibe, was im Flussdiagramm dargestellt wird und wie der Programmfluss verläuft,
b) Schreibe das Flussdiagramm in ein Struktogramm um.
Aufgabe 2
Ein Parkhaus hat folgenden Tarif:
Parkdauer Parkgebühr
bis 2 Stunden
jede weitere
angefangene Stunde
Höchstgebühr
überhaupt
kostenlos
2 €
30 €
Die Parkzeit wird in einer Variablen in Minuten eingegeben.
a) Entwirf ein Struktogramm zur Berechnung der Parkgebühr,
b) schreibe das entsprechende Pascal-Programm.
Syntax
if Bedingung (oder Wahrheitswert) then
Anweisung A
else
Anweisung B;
Bsp: if (a < b) then
Write ('a ist kleiner als b')
else
Write (' a ist größer oder
gleich b');
Anweisung 2
erfüllt
Anweisung A
Anweisung 1
nicht erfüllt
Anweisung B
Bedingung
6
Informatik gk 11
Grundlagen der imperativen Programmierung mit Pascal und Delphi
Aufgabe 3
Gegeben ist folgendes Programm:
Program Abfrage;
Var a, b, c, d, e, : Real;
Begin
Write ('Eingabe von a ');
Readln (a);
Write ('Eingabe von b ');
Readln(b);
Write ('Eingabe von c ');
Readln (c);
d := 0;
e := 0;
IF (a < b) THEN
d := a+b;
IF (a > c) THEN
IF (b > c) THEN
d := a*b (*)
ELSE
d := a*c (***)
ELSE
e := a+b+c;
Writeln (' d ', d:5:2);
Writeln (' e ', e:5:2);
END.
a) Zeichne zur besseren Übersicht ein Struktogramm des Pascal-Programms!
b) Was würde der Compiler bei einem Semikolon bei (*) interpretieren und somit eine
Fehlermeldung ausgeben?
c) Warum darf bei (***) kein Semikolon stehen, auch wenn die If-Then-Else Anweisung
normalerweise mit einem Semikolon beendet wird.
d) Welche Werte bilden sich in den Variablen d und e?
Werte der Variablen Ergebnisse
a b c d e
7 3 4
-3 11 46
9 -5 5
12 4 2
Aufgabe 4
In einem Unternehmen gilt folgende Rabattregel:
Kundennummer gewährter
Rabattsatz
kleiner als 3000
3000 bis 5000
größer als 5000
12 %
0%
10 %
7
Informatik gk 11
Grundlagen der imperativen Programmierung mit Pascal und Delphi
Mithilfe des folgenden Programms soll nach der Eingabe der Kundennummer der
entsprechende Rabattsatz berechnet werden.
Program Kundenrabatt;
Var Kdnr, Rabattsatz: Integer;
Begin
Write ('Eingabe Kundennummer:');
Readln (Kdnr);
Rabattsatz := 0;
IF (Kdnr <= 5000) THEN
IF (Kdnr < 3000) THEN
Rabattsatz := 12
ELSE
Rabattsatz := 10;
Write ('Der Rabatt beträgt: ');
Writeln (Rabattsatz);
End.
Beim Testen liefert das Programm fehlerhafte Ergebnisse.
a) Zeichne ein Struktogramm der Auswahlbedingungen und
b) ermittle die Fehlerstelle.
Aufgabe 8
Warum gibt folgendes Programm beim Compilieren eine Fehlermeldung?
Program Fehler;
Var a : Integer;
Begin
IF (4 < 2)
THEN IF (2 < 3)
THEN a := 3
ELSE a := 4;
ELSE a:= 5;
Write(' a = ', a);
End.
Aufgabe 9
Ein Parkhaus hat folgenden Tarif:
Parkdauer Parkgebühr
bis zu 1 ½ Stunden 3 €
jede weitere
angefangene Stunde
1,5 €
Höchstgebühr pro Tag 10 €
Höchstgebühr überhaupt 200 €
Die Parkdauer soll dabei in Minuten eingelesen werden.
8
Informatik gk 11
Grundlagen der imperativen Programmierung mit Pascal und Delphi
a) Entwirf ein Struktogramm zur Darstellung des Lösungsalgorithmus' und
b) schreibe ein Pascalprogramm, das die Aufgabe löst.
2.3 Arbeitsweise der Bedingungsanweisung /
Vergleichsoperatoren
Aufgabe 1
Warum wird im Struktogramm der zweiseitigen Auswahl nach ja / nein (wahr / falsch) und nicht nach
then / else unterschieden?
Aufgabe 2
Die Anweisung
IF (a < b) THEN
kann auch wie folgt umgeschrieben werden:
Var wert : Boolean;
Begin
wert := (a < b);
...
IF wert THEN
...
End;
Welchen programmtechnischen Vorteil könnte diese Form der Auswertung haben?
Aufgabe 3
Was wird bei der Programmausführung an der Stelle der Punkte der Bedingung
IF ... THEN
geprüft, bzw. erwartet?
(1) Vergleichsoperatoren der Bedingungsanweisung
>
<
=
größer
kleiner
gleich
>=
<=
<>
größer gleich
kleiner gleich
ungleich
(2) Boolesche Variablen (Wahrheitswerte)
Variablen vom Typ boolean können nur die Werte true oder false
(ausgeschrieben) annehmen.
Daher können diese Variablen auch an die Stelle eines Vergleichsoperators
treten
Bedingungsanweisung liefert einen
Wahrheitswert
Auswertung eines Ausdrucks, nicht die
Beantwortung einer Frage mit ja / nein
a < b
true / false
9
Informatik gk 11
Grundlagen der imperativen Programmierung mit Pascal und Delphi
2.4 Logische Operatoren
Die logischen Opoeratoren kombinieren zwei boolesche Ausdrücke, um ebenfalls einen
booleschen Wert zu liefern.
and und
Bei and und or wird zuerst
die linke Seite der
Operation ausgewertet.
Nur, wenn das Ergebnis
noch wahr werden kann,
wird auch die rechte Seite
betrachtet
true and true = true ;
true and false = false ;
false and true = false;
false and false = false;
or oder true or true = true ;
true or false = true ;
false or true = true;
false or false = false;
xor entweder – oder
(exclusive – or)
true xor true = false
true xor false = true
false xor true = true
false xor false = false
not nicht not (true && true) = false ;
Aufgabe 1
Welche Ausgabe liefert folgendes Programm?
Program Logische_Operationen;
Var a, b, c : Integer;
Begin
a := 5;
b := 3;
c := 99;
IF (a = 5) or (b > 2) THEN
Write (' Ich');
IF (a < 5) and (b > 2) THEN
Write (' Du ');
IF (a = 5) and (b = 2) THEN
Write (' hatten');
IF (c <> 6) and (b > 10) THEN
Write (' hast ')
ELSE
Write (' habe ');
IF (b = 3) and (c = 99) THEN
Write (' keinen ');
IF (a = 1) or (b = 2) THEN
Write (' viel ');
IF not ((a < 5) and (b > 2))
THEN Write (' Spaß! ');
End.
2.5 weiterführende Aufgabe
Nach Eingaben der Parameter a, b und c werden vorhandene Lösungen der allgemeinen
quadratischen Gleichung der Form ax² + bx + c = 0 berechnet.
a) Erstelle ein Struktogramm eines möglichen Lösungsalgorithmus mittels der p/q-Formel.
Beachte auch die Fälle: Diskriminante < 0 und Diskriminante = 0.
b) Schreibe das entsprechende Delphi-Programm.
10
Informatik gk 11
Grundlagen der imperativen Programmierung mit Pascal und Delphi
3 Schleifen
3.1 Zählergesteuerte Wiederholung (FOR - TO - DO)
Syntax
(1)
for Laufvariable := Anfangswert to Endwert
do
Anweisung;
(2)
for Laufvariable := Anfangswert to Endwert
do
Begin
Anweisung1;
Anweisung 2:
. . .
Anweisung n;
End;
Rückwärtszählschleife
Die Zählschleife kann durch die Anweisung downto statt to auch rückwärts zählen. Die
Schleifenbedingungen bleiben dieselben.
Anweisung zur
Wiederholung von
Anweisung 1;
Anweisung 2;
Anweisung 1;
Anweisung 2;
Anweisung 1;
Anweisung 2;
Anweisung 1;
Anweisung 2;
Anweisung 1;
Anweisung 2;
Anweisung 1;
Anweisung 2;
...
Anweisung 1;
Anweisung 2;
Schleifen-
steuerung
Schleifen-
körper
Endwert
erreicht
Zähler
Anweisungsblock
11
Informatik gk 11
Grundlagen der imperativen Programmierung mit Pascal und Delphi
Aufgabe 1
Die Summe der Zahlen 1 bis 100 soll berechnet werden.
a) Erstelle ein Struktogramm,
b) schreibe das zugehörige Programm.
Aufgabe 2
Verallgemeinere das Programm aus Aufgabe 1 so, dass ein Anfangswert a und ein Endwert
b eingelesen werden, zwischen denen alle ganzen Zahlen summiert werden.
Als mathematische Formel sieht das für a < b so aus:
Aufgabe 3
a) Ein 6-seitiger Würfel hat als Würfelergebnis die Zahlen 1-6. Schreibe eine Folge von 20
Zufallszahlen auf die entstanden sein kann, wenn ein Würfel 20 mal geworfen wurde.
b) Folgendes Programm erzeugt 20 Zufallszahlen im Zahlbereich 1-6
program Zufallszahlen;
{$APPTYPE CONSOLE}
uses
SysUtils;
var i, zahl : integer;
begin
randomize;
for i := 1 to 20 do
begin
zahl := random (6) +1;
writeln(i , '. ' , zahl);
end;
readln;
{ TODO -oUser -cConsole Main : Hier Code einfügen }
end.
Erzeuge 20 Zufallszahlen und vergleiche mit deinen aufgeschriebenen Zahlen.
c) Ändere das Programm so, dass bei der Programmausführung ein Zählwert eingelesen
wird, der bestimmt, wie oft die Schleife durchlaufen wird (wie viele Zufallszahlen ausgegeben
werden).
baaai
b
ai
++++++=∑=
...)2()1(
∑=
=+++++
100
1
100...4321 i
i
12
Informatik gk 11
Grundlagen der imperativen Programmierung mit Pascal und Delphi
Aufgabe 4
Bei einem Würfelspiel werden drei Würfel hintereinander geworfen. Ein Spieler tippt auf eine
Zahl und gewinnt in Abhängigkeit davon, wie oft seine Zahl geworfen wurde.
a) Schreibe ein Programm, das einen Tipp einholt, in einer Schleife dreimal würfelt, die
Anzahl der Treffer zählt und dann ausgibt.
b) Das Programm soll erweitert werden, dass ein Gewinn ausgeschüttet (ausgegeben) wird.
0 Treffer --> - 1 €
1 Treffer --> 1 €
2 Treffer --> 2 €
3 Treffer --> 5 €
c) Wird der Spieler auf lange Sicht gewinnen oder verlieren? Wie könnte das in einem
Programm überprüft werden?
3. 2 Fußgesteuerte Wiederholung (REPEAT - UNTIL)
Syntax
repeat
Anweisung 1;
Anweisung 2;
. . .
Anweisung n;
until Bedingung
repeat
Anweisungsblock
until
nicht erfüllt
Schleifen-
bedingung
erfüllt
13
Informatik gk 11
Grundlagen der imperativen Programmierung mit Pascal und Delphi
Aufgabe 1
Ergänze die Schleifenaustrittsbedingung, so dass der folgende Schleifenrumpf die Summe
der Zahlen 1 bis 100 berechnet:
Summe := 0;
Zahl := 1;
Repeat
Summe := Summe + Zahl;
Zahl := Zahl + 1;
until ____________
Aufgabe 2
Entwickle ein Programm, das aus einer Reihe von positiven Zahlen das arithmetische Mittel
(Durchschnitt)
n
aaaa
a n++++
=
...321
bildet.
Die Anzahl der Zahlen n ist beim Programmstart noch nicht bekannt, die Eingabe soll
beendet sein, wenn die Zahl -1 eingegeben wird.
3. 3 Kopfgesteuerte Wiederholung (WHILE - DO)
Syntax
While Bedingung Do
Begin
Anweisung 1;
Anweisung 2;
. . .
Anweisung n;
End;
nicht
erfüllt
Anweisungsblock
erfüllt
Schleifen-
bedingung
100...321
100
1
++++=∑=i
i
14
Informatik gk 11
Grundlagen der imperativen Programmierung mit Pascal und Delphi
Aufgabe 1
Gib dem folgenden Programmfragment eine geeignete Schleifeneintrittsbedingung und
beschreibe, welche Funktion das Programmstück mit dieser Bedingung erfüllt:
Summe := 0;
Zahl := 1;
WHILE ________________ DO
Begin
Summe := Summe + Zahl;
Zahl := Zahl + 1;
End;
Aufgabe 2
Ist der Schleifentyp richtig gewählt? Begründe!
a := 4;
while (a > 0) do
Begin
Writeln (a, sqrt(a));
a := a - 0.5;
End;
Aufgabe 3
Ersetze die Schleife:
FOR i := 2 TO 30 DO
Writeln (i);
a) durch eine repeat,
b) durch eine while- Schleife.
Aufgabe 4
a) Zeichne ein Struktorgramm zu folgendem Algorithmus
Program Berechnung;
Var Zahl, Wert, Zaehler : Integer;
Begin
Writeln ('Eingabe einer Zahl: ');
Readln (Zahl);
Wert := 1;
While Zahl > 0 do
Begin
Wert := Wert * Zahl;
Zahl := Zahl -1;
End;
Wert := Wert DIV 2;
Writeln ('Ergebnis = ', Wert);
End.
b) Welchen Wert gibt das Programm aus, wenn als Zahl 4 eingegeben wird?
15
Informatik gk 11
Grundlagen der imperativen Programmierung mit Pascal und Delphi
3.4 Weiterführende Aufgaben
Aufgabe 1
Mithilfe von Schleifen kann man die Multiplikation zweier Zahlen durch eine Folge von
Additionen ersetzen:
a) Entwirf ein Struktogramm mit geeigneter Schleife zur Beschreibung des Algorithmus und
b) schreibe das entsprechende Pascal-Programm.
Aufgabe 2
Vergleiche die drei Schleifentypen, indem du folgende Tabelle vervollständigst:
Schleifentyp
Schleife mit
konstanter
Anzahl von
Durchläufen
Abbrechende Schleifen
Wiederholung mit
Ausgangsbedingun
g
Schlüsselwörter FOR - TO - DO
FOR - DOWNTO -
DO
REPEAT - UNTIL WHILE - DO
Schleifenüberwachung Zähler
Anzahl der
Schleifendurchläufe
- mindestens/höchstens
- festgelegt / nicht festgelegt
Besonderheiten
- wann wird dieser Typ
benutzt?
Aufgabe 3
Auf dem MvLG Schulfest führt die Theater AG „Romeo und Julia“ um 18.00 auf der
Probebühne auf. Der Eintritt ist frei. Der Theatersaal fasst 45 Plätze. Den Kartenverkauf soll
ein Programm der Informatik AG regeln. Bei dem Programm gibt der Kunde (Eltern, Lehrer,
Schüler) die Anzahl der gewünschten Karten ein (z.B. 3), der Rechner gibt die Sitznummern
(1-45) auf dem Bildschirm aus, wünscht einen schönen Tag und ist für die nächste Eingabe
bereit.
Ist der Saal voll erscheint ein entsprechender Hinweis und das Programm beendet sich auf
Tastendruck.
a) Fertige ein Struktogramm an und
b) Entwickle das Programm!
Aufgabe 4
Wegen der großen Nachfrage soll es nun drei Vorstellungen geben: 11.00, 14.30 und 18.00.
Das Programm fragt nun nach der Uhrzeit der gewünschten Vorstellung und verfährt wie
oben.
Entwickle das Programm.
a · b = a + a + a + ... + a
b mal
16
Informatik gk 11
Grundlagen der imperativen Programmierung mit Pascal und Delphi
Aufgabe 5
Vom Schaum in einem Bierglas zerfällt pro Minute 15%.
a) Entwickle ein Programm, das die Zeit berechnet, nach der sich der Schaum auf 1 % der
Ausgangsmenge reduziert hat.
b) Erweitere das Programm um die Eingabe der Variablen n, so dass die Zeit gemessen
wird, bis sich der Schaum auf n% der Ausgangsmenge reduziert hat.
Aufgabe 6
Entwickle ein Programm, das eine in Dezimalschreibweise gegebene natürliche Zahl in
römischer Schreibweise ausgibt.
1 ~ I; 5 ~ V; 10 ~ X; 50 ~ L; 100 ~ C; D ~ 500; M ~ 1000
Aufgabe 7
Überall muß man sich in Schlangen einreihen: an der Tür zum Klassensaal, an der
Straßenbahnhaltestelle, bei der Passkontrolle, beim Arzt oder auf der Post. Für denjenigen,
der gerade in der Schlange steht, ist es wichtig zu wissen, wie lange er noch etwa warten
muß. Noch wichtiger ist herauszufinden, wie lange die Schlange überhaupt werden kann.
Die Einmündung einer Nebenstraße in eine Hauptstraße ist durch eine Ampelanlage
gesichert, die im Verlauf einer Minute 15 Sekunden lang 'Grün' zeigt. Während dieser
Grünphase können höchstens fünf Fahrzeuge die Ampel passieren. Die Erfahrung zeigt,
dass in jeder Minute etwa drei Fahrzeuge an die Ampel heranfahren.
Wie groß wird die durchschnittliche Länge der Schlange?
Hinweise
Der Vorgang soll mit dem Computer simuliert werden. Dazu wählt man als Zeiteinheit eine
Sekunde. Da im Mittel drei Autos in der Minute an der Ampel ankommen, ist die
Wahrscheinlichkeit, dass während einer Sekunde ein Auto ankommt, 1/20 .Wir veranlassen
daher den Computer, für jede Sekunde eine Zufallszahl zwischen 0 und 19 zu ermitteln. Ist
die Zufallszahl 0, so nähert sich ein Fahrzeug der Ampel, und die Schlange wächst um 1
Fahrzeug. Falls noch Fahrzeuge an der Ampel warten, kann alle 3 Sekunden ein Auto die
Ampel passieren. Es muss also die Warteschlage um 1 vermindert werden, falls der Wert der
Variablen 'Sekunde' kleiner 16 und durch 3 teilbar ist.
Aufgabe 8
Der Rechner „denkt“ sich ein Zahl zwischen 1 und 100.
Der Spieler tippt so lange Zahlen, bis gedachte und getippte Zahl übereinstimmen. Als
Hinweis gibt der Rechner bei jeder getippten Zahl aus, ob seine gedachte Zahl größer oder
kleiner als die getippte Zahl ist.
a) Schreibe ein entsprechendes Programm.
b) Wie viele Tipps benötigt ein Spieler höchstens, um die gedachte Zahl zu „raten“.
c) Wie viele Versuche würde ein Spieler höchstens benötigen bei einer Feldgröße von
1. 1000 Zahlen,
2. 5000 Zahlen,
3. 9000 Zahlen
4. 100000 Zahlen?
17

Contenu connexe

En vedette (20)

Vortragkremsmertens2012 120301113125
Vortragkremsmertens2012 120301113125Vortragkremsmertens2012 120301113125
Vortragkremsmertens2012 120301113125
 
Key
KeyKey
Key
 
Ord.3024 entericas 2013
Ord.3024  entericas 2013Ord.3024  entericas 2013
Ord.3024 entericas 2013
 
Eucarhil perezGESTAMB
Eucarhil perezGESTAMBEucarhil perezGESTAMB
Eucarhil perezGESTAMB
 
Presentacion oev capacitación observadores
Presentacion oev capacitación observadoresPresentacion oev capacitación observadores
Presentacion oev capacitación observadores
 
Karina noguera
Karina nogueraKarina noguera
Karina noguera
 
Recursos y actividades telematica
Recursos  y actividades telematicaRecursos  y actividades telematica
Recursos y actividades telematica
 
Workshop zu E-Partizipation und E-Identitäten
Workshop zu E-Partizipation und E-IdentitätenWorkshop zu E-Partizipation und E-Identitäten
Workshop zu E-Partizipation und E-Identitäten
 
La columna vertebral
La columna vertebralLa columna vertebral
La columna vertebral
 
ICT-Kompetenzen fuer Studium
ICT-Kompetenzen fuer StudiumICT-Kompetenzen fuer Studium
ICT-Kompetenzen fuer Studium
 
Launch
LaunchLaunch
Launch
 
Simtest Version 1
Simtest Version 1Simtest Version 1
Simtest Version 1
 
Webquest Mode
Webquest ModeWebquest Mode
Webquest Mode
 
Prof. Hans Ebert - Ökonomie in der Krise
Prof. Hans Ebert - Ökonomie in der KriseProf. Hans Ebert - Ökonomie in der Krise
Prof. Hans Ebert - Ökonomie in der Krise
 
Word basico practica 2
Word basico practica 2Word basico practica 2
Word basico practica 2
 
Holidays 2009
Holidays 2009Holidays 2009
Holidays 2009
 
Los_videojuegos_son_buenos
Los_videojuegos_son_buenosLos_videojuegos_son_buenos
Los_videojuegos_son_buenos
 
Was ist Barrierefreiheit? Ein Kurztest
Was ist Barrierefreiheit? Ein KurztestWas ist Barrierefreiheit? Ein Kurztest
Was ist Barrierefreiheit? Ein Kurztest
 
Water problems in poland2
Water problems in poland2Water problems in poland2
Water problems in poland2
 
Como crear tu pagina web
Como crear tu pagina webComo crear tu pagina web
Como crear tu pagina web
 

Similaire à SchüLerscript Imperative Programmierung Mit Der Delphi Konsole

Übungsaufgaben
ÜbungsaufgabenÜbungsaufgaben
Übungsaufgabenmaikinger
 
Übungsaufgaben SS2010
Übungsaufgaben SS2010Übungsaufgaben SS2010
Übungsaufgaben SS2010maikinger
 
SEROM 2018 - 11/14/17/20 - C++ gestern heute und morgen
SEROM 2018 - 11/14/17/20 - C++ gestern heute und morgenSEROM 2018 - 11/14/17/20 - C++ gestern heute und morgen
SEROM 2018 - 11/14/17/20 - C++ gestern heute und morgenDr. Herwig Henseler
 
ADC Core 2017 - Warum warten auf die IDE?
ADC Core 2017 - Warum warten auf die IDE?ADC Core 2017 - Warum warten auf die IDE?
ADC Core 2017 - Warum warten auf die IDE?Robin Sedlaczek
 
BASTA! 2017 Jubiläumskonferenz - Warum warten auf die IDE!?
BASTA! 2017 Jubiläumskonferenz - Warum warten auf die IDE!?BASTA! 2017 Jubiläumskonferenz - Warum warten auf die IDE!?
BASTA! 2017 Jubiläumskonferenz - Warum warten auf die IDE!?Robin Sedlaczek
 
Schneller Einstieg in OpenCL mit C++ Bindings
Schneller Einstieg in OpenCL mit C++ BindingsSchneller Einstieg in OpenCL mit C++ Bindings
Schneller Einstieg in OpenCL mit C++ BindingsPatrick Charrier
 
#ADC 2016 - C# Script in Action
#ADC 2016 - C# Script in Action#ADC 2016 - C# Script in Action
#ADC 2016 - C# Script in ActionRobin Sedlaczek
 
Schulung: Einführung in das GPU-Computing mit NVIDIA CUDA
Schulung: Einführung in das GPU-Computing mit NVIDIA CUDASchulung: Einführung in das GPU-Computing mit NVIDIA CUDA
Schulung: Einführung in das GPU-Computing mit NVIDIA CUDAJörn Dinkla
 
.NET Summit 2016 München: EcmaScript 2015+ with TypeScript
.NET Summit 2016 München: EcmaScript 2015+ with TypeScript.NET Summit 2016 München: EcmaScript 2015+ with TypeScript
.NET Summit 2016 München: EcmaScript 2015+ with TypeScriptManfred Steyer
 
Funktionale Reaktive Programmierung mit Sodium
Funktionale Reaktive Programmierung mit SodiumFunktionale Reaktive Programmierung mit Sodium
Funktionale Reaktive Programmierung mit SodiumTorsten Fink
 
ICIS User Group - Oberflächentests mittels LCT deklarativ angehen
ICIS User Group - Oberflächentests mittels LCT deklarativ angehenICIS User Group - Oberflächentests mittels LCT deklarativ angehen
ICIS User Group - Oberflächentests mittels LCT deklarativ angehenKai Donato
 
Polymorphic Table Functions in 18c
Polymorphic Table Functions in 18cPolymorphic Table Functions in 18c
Polymorphic Table Functions in 18cAndrej Pashchenko
 
Java Streams und Lambdas
Java Streams und LambdasJava Streams und Lambdas
Java Streams und LambdasNane Kratzke
 
Live Hacking - Durch Refactoring zu sauberem Code
Live Hacking - Durch Refactoring zu sauberem CodeLive Hacking - Durch Refactoring zu sauberem Code
Live Hacking - Durch Refactoring zu sauberem CodeRoland Mast
 
LAIK: A Library for Fault Tolerant Distribution of Global Data
LAIK: A Library for Fault Tolerant Distribution of Global DataLAIK: A Library for Fault Tolerant Distribution of Global Data
LAIK: A Library for Fault Tolerant Distribution of Global DataDai Yang
 
Den falschen plan perfekt ausführen
Den falschen plan perfekt ausführenDen falschen plan perfekt ausführen
Den falschen plan perfekt ausführenNils Langner
 
GPU-Computing mit CUDA und OpenCL in der Praxis
GPU-Computing mit CUDA und OpenCL in der PraxisGPU-Computing mit CUDA und OpenCL in der Praxis
GPU-Computing mit CUDA und OpenCL in der PraxisJörn Dinkla
 

Similaire à SchüLerscript Imperative Programmierung Mit Der Delphi Konsole (20)

Übungsaufgaben
ÜbungsaufgabenÜbungsaufgaben
Übungsaufgaben
 
Übungsaufgaben SS2010
Übungsaufgaben SS2010Übungsaufgaben SS2010
Übungsaufgaben SS2010
 
WiSe 2013 | Programmierpraktikum C++ - 01_Basics
WiSe 2013 | Programmierpraktikum C++ - 01_BasicsWiSe 2013 | Programmierpraktikum C++ - 01_Basics
WiSe 2013 | Programmierpraktikum C++ - 01_Basics
 
SEROM 2018 - 11/14/17/20 - C++ gestern heute und morgen
SEROM 2018 - 11/14/17/20 - C++ gestern heute und morgenSEROM 2018 - 11/14/17/20 - C++ gestern heute und morgen
SEROM 2018 - 11/14/17/20 - C++ gestern heute und morgen
 
C++11 und c++14
C++11 und c++14C++11 und c++14
C++11 und c++14
 
ADC Core 2017 - Warum warten auf die IDE?
ADC Core 2017 - Warum warten auf die IDE?ADC Core 2017 - Warum warten auf die IDE?
ADC Core 2017 - Warum warten auf die IDE?
 
BASTA! 2017 Jubiläumskonferenz - Warum warten auf die IDE!?
BASTA! 2017 Jubiläumskonferenz - Warum warten auf die IDE!?BASTA! 2017 Jubiläumskonferenz - Warum warten auf die IDE!?
BASTA! 2017 Jubiläumskonferenz - Warum warten auf die IDE!?
 
Schneller Einstieg in OpenCL mit C++ Bindings
Schneller Einstieg in OpenCL mit C++ BindingsSchneller Einstieg in OpenCL mit C++ Bindings
Schneller Einstieg in OpenCL mit C++ Bindings
 
#ADC 2016 - C# Script in Action
#ADC 2016 - C# Script in Action#ADC 2016 - C# Script in Action
#ADC 2016 - C# Script in Action
 
Web-Services mit Go
Web-Services mit GoWeb-Services mit Go
Web-Services mit Go
 
Schulung: Einführung in das GPU-Computing mit NVIDIA CUDA
Schulung: Einführung in das GPU-Computing mit NVIDIA CUDASchulung: Einführung in das GPU-Computing mit NVIDIA CUDA
Schulung: Einführung in das GPU-Computing mit NVIDIA CUDA
 
.NET Summit 2016 München: EcmaScript 2015+ with TypeScript
.NET Summit 2016 München: EcmaScript 2015+ with TypeScript.NET Summit 2016 München: EcmaScript 2015+ with TypeScript
.NET Summit 2016 München: EcmaScript 2015+ with TypeScript
 
Funktionale Reaktive Programmierung mit Sodium
Funktionale Reaktive Programmierung mit SodiumFunktionale Reaktive Programmierung mit Sodium
Funktionale Reaktive Programmierung mit Sodium
 
ICIS User Group - Oberflächentests mittels LCT deklarativ angehen
ICIS User Group - Oberflächentests mittels LCT deklarativ angehenICIS User Group - Oberflächentests mittels LCT deklarativ angehen
ICIS User Group - Oberflächentests mittels LCT deklarativ angehen
 
Polymorphic Table Functions in 18c
Polymorphic Table Functions in 18cPolymorphic Table Functions in 18c
Polymorphic Table Functions in 18c
 
Java Streams und Lambdas
Java Streams und LambdasJava Streams und Lambdas
Java Streams und Lambdas
 
Live Hacking - Durch Refactoring zu sauberem Code
Live Hacking - Durch Refactoring zu sauberem CodeLive Hacking - Durch Refactoring zu sauberem Code
Live Hacking - Durch Refactoring zu sauberem Code
 
LAIK: A Library for Fault Tolerant Distribution of Global Data
LAIK: A Library for Fault Tolerant Distribution of Global DataLAIK: A Library for Fault Tolerant Distribution of Global Data
LAIK: A Library for Fault Tolerant Distribution of Global Data
 
Den falschen plan perfekt ausführen
Den falschen plan perfekt ausführenDen falschen plan perfekt ausführen
Den falschen plan perfekt ausführen
 
GPU-Computing mit CUDA und OpenCL in der Praxis
GPU-Computing mit CUDA und OpenCL in der PraxisGPU-Computing mit CUDA und OpenCL in der Praxis
GPU-Computing mit CUDA und OpenCL in der Praxis
 

SchüLerscript Imperative Programmierung Mit Der Delphi Konsole

  • 1. Informatik gk 11 Grundlagen der imperativen Programmierung mit Pascal und Delphi 1. Grundlagen 1.1 erstes Programm Aufgabe 1 Begin Zahl a einlesen Zahl b einlesen c = a + b Ausgabe Zahl c End. a) Beschreibe die Struktur des Programms. b) Setze das Struktogramm in ein Delphi-Programm um. Aufgabe 2 a) Welche Bedeutung hat das Semikolon in Pascal? b) Unterscheidet Pascal (Delphi) Groß- und Kleinschreibung? 1.2 Einfache Datentypen (1) numerische Datentypen Integer: ganzzahliger Wert, (Bsp. 21, -2334) Wertebereich: -32 768 ... 32 767 Byte: ganzzahliger Wert, Wertebereich: 0..255 Real: reellwertige Zahl, zum Beispiel Zahlen mit Nachkommastellen, (Bsp: -34.987) Wertebereich: -1038 .. 1038 (2) Zeichen und Zeichenketten Char: Zeichen Beispiele: A, M, 1, ?, %, }, String: Zeichenkette Beispiele: Computer, 15.11.2002 (Hinweis: 15.11.2002 ist nicht numerisch, da die Angabe mehr als einen Punkt enthält.) (3) Wahrheitswert Boolean: logische Variable, die entweder den Wahrheitswert wahr (true) oder falsch (false) aufnehmen kann 1.3 Write-Anweisung 1.4 Variablenkonzept vgl. Unterricht 1 Var a: Real; … Writeln (‘Der Flächeninhalt beträgt’ , a:8:2 , ’Zentimeter’); Textkonstante Zugriff auf eine Variable Textkonstante
  • 2. Informatik gk 11 Grundlagen der imperativen Programmierung mit Pascal und Delphi Aufgabe 1 Aus einem gegebenen Radius r eines Kreises sollen die Kreisfläche und der Kreisumfang berechnet werden. Die Zahl Pi kann mit 3,14 angegeben werden. a) Erstelle das Struktogramm, b) setze das Struktogramm in ein Delphi-Programm um. Aufgabe 2 Das folgende Programmfragment ist syntaktisch korrekt. Var Preis: Real; Preiserhoehung: Real; ... Preis := 75; Preiserhoehung := 5; * Preis := Preis + Preiserhöhung; ** Preiserhöhung := Preiserhöhung *2; Beschreibe mit Worten, was bei den Zuweisungen in Zeile * und ** passiert! Benutze dazu das Modell der "Schubladenbox" aus dem Unterricht. Aufgabe 3 Erkläre das Variablenkonzept in Pascal (Delphi). Aufgabe 4 Warum müssen Variablen, mit denen im Anweisungsteil gearbeitet werden soll, vorher im Vereinbarungsteil mit Angabe des Datentyps vereinbart werden? 1.5 Fehlerarten (1) Syntaxfehler Fehler, die der Compiler zum Zeitpunkt des Compilierens erkennt. Der Compiliervorgang wird abgebrochen. Bsp: Einer Variablen vom Typ Integer wird im Programm der Wert einer Variablen vom Typ Real zugewiesen (2) Laufzeitfehler Fehler, die erst zum Zeitpunkt der Programmaufführung auftreten. Die Programmausführung wird abgebrochen. Bsp: Wertzuweisung eines Wertes außerhalb des Wertebereichs einer Variablen durch den Benutzer während der Programmausführung. Aufgabe 1 Gegeben ist folgender Pascal-Quelltext: Program Beispiel 1; (* Dieses Programm berechnet den Flächeninhalt eines Dreiecks *) Var grundseite: Real; hoehe : Real; flaeche: Integer; 2
  • 3. Informatik gk 11 Grundlagen der imperativen Programmierung mit Pascal und Delphi Begin; Write ('Eingabe Grundseite in cm: ') Readln (grundseite); Write ('Eingabe Hoehe in cm: '); Readln (hoehe); flaeche = grundseite * hoehe / 2; Writeln; Writeln; * Write ('Die Dreicksfläche beträgt:’ * ,flaeche,' qcm'); Readln; End. a) Welche syntaktischen Fehler enthält der Programmcode? b) Stelle den Programmablauf in einem Struktogramm dar! c) Welche Ausgaben erfolgen beim Aufruf des write-Befehls in den Zeilen *? Aufgabe 2 Welche syntaktischen Fehler weist folgendes Programm auf? Program Zinsen; (* Aus der Eingabe des Betrags und dem Zinssatz werden die jährlichen Zinsen errechnet*) Var Zinsen, Betrag: Real Endkapital: Integer; Begin Write ('Eingabe Betrag:'); Readln (Betrag); Write ('Eingabe', Zinssatz); Zinsen := Betrag * 0.01 * Zinssatz / 360; Endkapital := Betrag + Zinsen; Writeln ('Die Zinsen betragen: ' , Zinsen:8:2,' Euro'); Writeln ('Der Endbetrag ist: ' ,Endkapital:8:2 ,' Euro'); End. Aufgabe 3 Beim Fehlen der Kommata in der Write-Anweisung wird die Fehlermeldung ERROR: ’)’ expected ausgegeben. Warum lautet die Meldung nicht : ’,’ expected ? 1.6 Divisionsarten (1) Ganzzahlige Division (2) Divisionsrest Wert := 108 div 5; Wert := 108 mod 5; Variableninhalt: Wert = 21 Variableninhalt: Wert = 3 (3) Divisionsoperator Wert := 108 / 5; Variableninhalt: Wert = 21.6 Aufgabe 1 Berechne die Werte der folgenden Ausdrücke: a) 12 MOD 7 b) 12 DIV 7 c) 45 MOD 6 + 3 3
  • 4. Informatik gk 11 Grundlagen der imperativen Programmierung mit Pascal und Delphi d) 45 DIV (6 + 3) e) (23 DIV 5) / 2 f) (23 MOD 5) / 2 Aufgabe 2 a) Werte den Ausdruck schrittweise aus: a := 20 MOD 7 /15 DIV 4 +3-18 DIV 5*2 b) Welchen Datentyp hat das Ergebnis? c) Programmiere die Zeile aus (a). Wo liegt der Fehler? Aufgabe 3 Es gilt folgende Variablendeklaration: Var a, b : Real; c, e : Integer; d: Boolean; Welche Pascal-Anweisung wird durch den Compiler nicht beanstandet? a) a := c / d; b) c := a * b; c) d := 'False'; d) b := c DIV e 1.7 Weiterführende Aufgaben Aufgabe 1 Mithilfe der Steigungsformel 21 21 xx yy m − − = kann man die Steigung einer Geraden durch die Punkte P(x1/y1) und Q(x2/y2) berechnen. a) Erstelle ein Struktogramm, b) erstelle das entsprechende Delphi-Programm. Aufgabe 2 Mit der Eingabe von p und q kann ein Programm mithilfe der p/q-Formel die Nullstellen des Polynoms: f(x) = x² + px + q berechnen. Hinweis: • Wurzel  sqr(…), Quadrat  sqrt(…) • Unit ergänzen. a) Schreibe die Formel für die beiden Nullstellen x1 und x2 als Delphi-Term auf, b) erstelle das Struktogramm, c) programmiere! 4
  • 5. Informatik gk 11 Grundlagen der imperativen Programmierung mit Pascal und Delphi 2 Verzweigungen 2.1 Einseitige Auswahl (IF - THEN) Aufgabe 1 a) Beschreibe, was im Flussdiagramm dargestellt wird und wie der Programmfluss verläuft, b) Schreibe das Flussdiagramm in ein Struktogramm um. Aufgabe 2 Gegeben ist das folgende Programmfragment: Program Wurzelberechnung; (* Das Programm berechnet die Wurzel einer Zahl mit der Standartfunktion sqrt(x) *) Var zahl, wurzel : Real; Write ('Eingabe einer Zahl:'); Readln (zahl); if __________ ______ (***) Wurzel := sqrt (zahl); writeln (wurzel:8:2); Ergänze die Bedingung der if-Anweisung an der Stelle (***), so dass eine sinnvolle Abfrage entsteht. Setze alle Begin – End Anweisungen an die richtige Stelle. Anweisung 2 erfüllt Anweisung 1.1 Anweisung 1 Bedingung Syntax If Bedingung (oder Wahrheitswert) then Anweisung ; Bsp: If (a < b) then Write (' a ist kleiner als b'); 5
  • 6. Informatik gk 11 Grundlagen der imperativen Programmierung mit Pascal und Delphi 2.2 Zweiseitige Auswahl (IF - THEN - ELSE) Aufgabe 1 a) Beschreibe, was im Flussdiagramm dargestellt wird und wie der Programmfluss verläuft, b) Schreibe das Flussdiagramm in ein Struktogramm um. Aufgabe 2 Ein Parkhaus hat folgenden Tarif: Parkdauer Parkgebühr bis 2 Stunden jede weitere angefangene Stunde Höchstgebühr überhaupt kostenlos 2 € 30 € Die Parkzeit wird in einer Variablen in Minuten eingegeben. a) Entwirf ein Struktogramm zur Berechnung der Parkgebühr, b) schreibe das entsprechende Pascal-Programm. Syntax if Bedingung (oder Wahrheitswert) then Anweisung A else Anweisung B; Bsp: if (a < b) then Write ('a ist kleiner als b') else Write (' a ist größer oder gleich b'); Anweisung 2 erfüllt Anweisung A Anweisung 1 nicht erfüllt Anweisung B Bedingung 6
  • 7. Informatik gk 11 Grundlagen der imperativen Programmierung mit Pascal und Delphi Aufgabe 3 Gegeben ist folgendes Programm: Program Abfrage; Var a, b, c, d, e, : Real; Begin Write ('Eingabe von a '); Readln (a); Write ('Eingabe von b '); Readln(b); Write ('Eingabe von c '); Readln (c); d := 0; e := 0; IF (a < b) THEN d := a+b; IF (a > c) THEN IF (b > c) THEN d := a*b (*) ELSE d := a*c (***) ELSE e := a+b+c; Writeln (' d ', d:5:2); Writeln (' e ', e:5:2); END. a) Zeichne zur besseren Übersicht ein Struktogramm des Pascal-Programms! b) Was würde der Compiler bei einem Semikolon bei (*) interpretieren und somit eine Fehlermeldung ausgeben? c) Warum darf bei (***) kein Semikolon stehen, auch wenn die If-Then-Else Anweisung normalerweise mit einem Semikolon beendet wird. d) Welche Werte bilden sich in den Variablen d und e? Werte der Variablen Ergebnisse a b c d e 7 3 4 -3 11 46 9 -5 5 12 4 2 Aufgabe 4 In einem Unternehmen gilt folgende Rabattregel: Kundennummer gewährter Rabattsatz kleiner als 3000 3000 bis 5000 größer als 5000 12 % 0% 10 % 7
  • 8. Informatik gk 11 Grundlagen der imperativen Programmierung mit Pascal und Delphi Mithilfe des folgenden Programms soll nach der Eingabe der Kundennummer der entsprechende Rabattsatz berechnet werden. Program Kundenrabatt; Var Kdnr, Rabattsatz: Integer; Begin Write ('Eingabe Kundennummer:'); Readln (Kdnr); Rabattsatz := 0; IF (Kdnr <= 5000) THEN IF (Kdnr < 3000) THEN Rabattsatz := 12 ELSE Rabattsatz := 10; Write ('Der Rabatt beträgt: '); Writeln (Rabattsatz); End. Beim Testen liefert das Programm fehlerhafte Ergebnisse. a) Zeichne ein Struktogramm der Auswahlbedingungen und b) ermittle die Fehlerstelle. Aufgabe 8 Warum gibt folgendes Programm beim Compilieren eine Fehlermeldung? Program Fehler; Var a : Integer; Begin IF (4 < 2) THEN IF (2 < 3) THEN a := 3 ELSE a := 4; ELSE a:= 5; Write(' a = ', a); End. Aufgabe 9 Ein Parkhaus hat folgenden Tarif: Parkdauer Parkgebühr bis zu 1 ½ Stunden 3 € jede weitere angefangene Stunde 1,5 € Höchstgebühr pro Tag 10 € Höchstgebühr überhaupt 200 € Die Parkdauer soll dabei in Minuten eingelesen werden. 8
  • 9. Informatik gk 11 Grundlagen der imperativen Programmierung mit Pascal und Delphi a) Entwirf ein Struktogramm zur Darstellung des Lösungsalgorithmus' und b) schreibe ein Pascalprogramm, das die Aufgabe löst. 2.3 Arbeitsweise der Bedingungsanweisung / Vergleichsoperatoren Aufgabe 1 Warum wird im Struktogramm der zweiseitigen Auswahl nach ja / nein (wahr / falsch) und nicht nach then / else unterschieden? Aufgabe 2 Die Anweisung IF (a < b) THEN kann auch wie folgt umgeschrieben werden: Var wert : Boolean; Begin wert := (a < b); ... IF wert THEN ... End; Welchen programmtechnischen Vorteil könnte diese Form der Auswertung haben? Aufgabe 3 Was wird bei der Programmausführung an der Stelle der Punkte der Bedingung IF ... THEN geprüft, bzw. erwartet? (1) Vergleichsoperatoren der Bedingungsanweisung > < = größer kleiner gleich >= <= <> größer gleich kleiner gleich ungleich (2) Boolesche Variablen (Wahrheitswerte) Variablen vom Typ boolean können nur die Werte true oder false (ausgeschrieben) annehmen. Daher können diese Variablen auch an die Stelle eines Vergleichsoperators treten Bedingungsanweisung liefert einen Wahrheitswert Auswertung eines Ausdrucks, nicht die Beantwortung einer Frage mit ja / nein a < b true / false 9
  • 10. Informatik gk 11 Grundlagen der imperativen Programmierung mit Pascal und Delphi 2.4 Logische Operatoren Die logischen Opoeratoren kombinieren zwei boolesche Ausdrücke, um ebenfalls einen booleschen Wert zu liefern. and und Bei and und or wird zuerst die linke Seite der Operation ausgewertet. Nur, wenn das Ergebnis noch wahr werden kann, wird auch die rechte Seite betrachtet true and true = true ; true and false = false ; false and true = false; false and false = false; or oder true or true = true ; true or false = true ; false or true = true; false or false = false; xor entweder – oder (exclusive – or) true xor true = false true xor false = true false xor true = true false xor false = false not nicht not (true && true) = false ; Aufgabe 1 Welche Ausgabe liefert folgendes Programm? Program Logische_Operationen; Var a, b, c : Integer; Begin a := 5; b := 3; c := 99; IF (a = 5) or (b > 2) THEN Write (' Ich'); IF (a < 5) and (b > 2) THEN Write (' Du '); IF (a = 5) and (b = 2) THEN Write (' hatten'); IF (c <> 6) and (b > 10) THEN Write (' hast ') ELSE Write (' habe '); IF (b = 3) and (c = 99) THEN Write (' keinen '); IF (a = 1) or (b = 2) THEN Write (' viel '); IF not ((a < 5) and (b > 2)) THEN Write (' Spaß! '); End. 2.5 weiterführende Aufgabe Nach Eingaben der Parameter a, b und c werden vorhandene Lösungen der allgemeinen quadratischen Gleichung der Form ax² + bx + c = 0 berechnet. a) Erstelle ein Struktogramm eines möglichen Lösungsalgorithmus mittels der p/q-Formel. Beachte auch die Fälle: Diskriminante < 0 und Diskriminante = 0. b) Schreibe das entsprechende Delphi-Programm. 10
  • 11. Informatik gk 11 Grundlagen der imperativen Programmierung mit Pascal und Delphi 3 Schleifen 3.1 Zählergesteuerte Wiederholung (FOR - TO - DO) Syntax (1) for Laufvariable := Anfangswert to Endwert do Anweisung; (2) for Laufvariable := Anfangswert to Endwert do Begin Anweisung1; Anweisung 2: . . . Anweisung n; End; Rückwärtszählschleife Die Zählschleife kann durch die Anweisung downto statt to auch rückwärts zählen. Die Schleifenbedingungen bleiben dieselben. Anweisung zur Wiederholung von Anweisung 1; Anweisung 2; Anweisung 1; Anweisung 2; Anweisung 1; Anweisung 2; Anweisung 1; Anweisung 2; Anweisung 1; Anweisung 2; Anweisung 1; Anweisung 2; ... Anweisung 1; Anweisung 2; Schleifen- steuerung Schleifen- körper Endwert erreicht Zähler Anweisungsblock 11
  • 12. Informatik gk 11 Grundlagen der imperativen Programmierung mit Pascal und Delphi Aufgabe 1 Die Summe der Zahlen 1 bis 100 soll berechnet werden. a) Erstelle ein Struktogramm, b) schreibe das zugehörige Programm. Aufgabe 2 Verallgemeinere das Programm aus Aufgabe 1 so, dass ein Anfangswert a und ein Endwert b eingelesen werden, zwischen denen alle ganzen Zahlen summiert werden. Als mathematische Formel sieht das für a < b so aus: Aufgabe 3 a) Ein 6-seitiger Würfel hat als Würfelergebnis die Zahlen 1-6. Schreibe eine Folge von 20 Zufallszahlen auf die entstanden sein kann, wenn ein Würfel 20 mal geworfen wurde. b) Folgendes Programm erzeugt 20 Zufallszahlen im Zahlbereich 1-6 program Zufallszahlen; {$APPTYPE CONSOLE} uses SysUtils; var i, zahl : integer; begin randomize; for i := 1 to 20 do begin zahl := random (6) +1; writeln(i , '. ' , zahl); end; readln; { TODO -oUser -cConsole Main : Hier Code einfügen } end. Erzeuge 20 Zufallszahlen und vergleiche mit deinen aufgeschriebenen Zahlen. c) Ändere das Programm so, dass bei der Programmausführung ein Zählwert eingelesen wird, der bestimmt, wie oft die Schleife durchlaufen wird (wie viele Zufallszahlen ausgegeben werden). baaai b ai ++++++=∑= ...)2()1( ∑= =+++++ 100 1 100...4321 i i 12
  • 13. Informatik gk 11 Grundlagen der imperativen Programmierung mit Pascal und Delphi Aufgabe 4 Bei einem Würfelspiel werden drei Würfel hintereinander geworfen. Ein Spieler tippt auf eine Zahl und gewinnt in Abhängigkeit davon, wie oft seine Zahl geworfen wurde. a) Schreibe ein Programm, das einen Tipp einholt, in einer Schleife dreimal würfelt, die Anzahl der Treffer zählt und dann ausgibt. b) Das Programm soll erweitert werden, dass ein Gewinn ausgeschüttet (ausgegeben) wird. 0 Treffer --> - 1 € 1 Treffer --> 1 € 2 Treffer --> 2 € 3 Treffer --> 5 € c) Wird der Spieler auf lange Sicht gewinnen oder verlieren? Wie könnte das in einem Programm überprüft werden? 3. 2 Fußgesteuerte Wiederholung (REPEAT - UNTIL) Syntax repeat Anweisung 1; Anweisung 2; . . . Anweisung n; until Bedingung repeat Anweisungsblock until nicht erfüllt Schleifen- bedingung erfüllt 13
  • 14. Informatik gk 11 Grundlagen der imperativen Programmierung mit Pascal und Delphi Aufgabe 1 Ergänze die Schleifenaustrittsbedingung, so dass der folgende Schleifenrumpf die Summe der Zahlen 1 bis 100 berechnet: Summe := 0; Zahl := 1; Repeat Summe := Summe + Zahl; Zahl := Zahl + 1; until ____________ Aufgabe 2 Entwickle ein Programm, das aus einer Reihe von positiven Zahlen das arithmetische Mittel (Durchschnitt) n aaaa a n++++ = ...321 bildet. Die Anzahl der Zahlen n ist beim Programmstart noch nicht bekannt, die Eingabe soll beendet sein, wenn die Zahl -1 eingegeben wird. 3. 3 Kopfgesteuerte Wiederholung (WHILE - DO) Syntax While Bedingung Do Begin Anweisung 1; Anweisung 2; . . . Anweisung n; End; nicht erfüllt Anweisungsblock erfüllt Schleifen- bedingung 100...321 100 1 ++++=∑=i i 14
  • 15. Informatik gk 11 Grundlagen der imperativen Programmierung mit Pascal und Delphi Aufgabe 1 Gib dem folgenden Programmfragment eine geeignete Schleifeneintrittsbedingung und beschreibe, welche Funktion das Programmstück mit dieser Bedingung erfüllt: Summe := 0; Zahl := 1; WHILE ________________ DO Begin Summe := Summe + Zahl; Zahl := Zahl + 1; End; Aufgabe 2 Ist der Schleifentyp richtig gewählt? Begründe! a := 4; while (a > 0) do Begin Writeln (a, sqrt(a)); a := a - 0.5; End; Aufgabe 3 Ersetze die Schleife: FOR i := 2 TO 30 DO Writeln (i); a) durch eine repeat, b) durch eine while- Schleife. Aufgabe 4 a) Zeichne ein Struktorgramm zu folgendem Algorithmus Program Berechnung; Var Zahl, Wert, Zaehler : Integer; Begin Writeln ('Eingabe einer Zahl: '); Readln (Zahl); Wert := 1; While Zahl > 0 do Begin Wert := Wert * Zahl; Zahl := Zahl -1; End; Wert := Wert DIV 2; Writeln ('Ergebnis = ', Wert); End. b) Welchen Wert gibt das Programm aus, wenn als Zahl 4 eingegeben wird? 15
  • 16. Informatik gk 11 Grundlagen der imperativen Programmierung mit Pascal und Delphi 3.4 Weiterführende Aufgaben Aufgabe 1 Mithilfe von Schleifen kann man die Multiplikation zweier Zahlen durch eine Folge von Additionen ersetzen: a) Entwirf ein Struktogramm mit geeigneter Schleife zur Beschreibung des Algorithmus und b) schreibe das entsprechende Pascal-Programm. Aufgabe 2 Vergleiche die drei Schleifentypen, indem du folgende Tabelle vervollständigst: Schleifentyp Schleife mit konstanter Anzahl von Durchläufen Abbrechende Schleifen Wiederholung mit Ausgangsbedingun g Schlüsselwörter FOR - TO - DO FOR - DOWNTO - DO REPEAT - UNTIL WHILE - DO Schleifenüberwachung Zähler Anzahl der Schleifendurchläufe - mindestens/höchstens - festgelegt / nicht festgelegt Besonderheiten - wann wird dieser Typ benutzt? Aufgabe 3 Auf dem MvLG Schulfest führt die Theater AG „Romeo und Julia“ um 18.00 auf der Probebühne auf. Der Eintritt ist frei. Der Theatersaal fasst 45 Plätze. Den Kartenverkauf soll ein Programm der Informatik AG regeln. Bei dem Programm gibt der Kunde (Eltern, Lehrer, Schüler) die Anzahl der gewünschten Karten ein (z.B. 3), der Rechner gibt die Sitznummern (1-45) auf dem Bildschirm aus, wünscht einen schönen Tag und ist für die nächste Eingabe bereit. Ist der Saal voll erscheint ein entsprechender Hinweis und das Programm beendet sich auf Tastendruck. a) Fertige ein Struktogramm an und b) Entwickle das Programm! Aufgabe 4 Wegen der großen Nachfrage soll es nun drei Vorstellungen geben: 11.00, 14.30 und 18.00. Das Programm fragt nun nach der Uhrzeit der gewünschten Vorstellung und verfährt wie oben. Entwickle das Programm. a · b = a + a + a + ... + a b mal 16
  • 17. Informatik gk 11 Grundlagen der imperativen Programmierung mit Pascal und Delphi Aufgabe 5 Vom Schaum in einem Bierglas zerfällt pro Minute 15%. a) Entwickle ein Programm, das die Zeit berechnet, nach der sich der Schaum auf 1 % der Ausgangsmenge reduziert hat. b) Erweitere das Programm um die Eingabe der Variablen n, so dass die Zeit gemessen wird, bis sich der Schaum auf n% der Ausgangsmenge reduziert hat. Aufgabe 6 Entwickle ein Programm, das eine in Dezimalschreibweise gegebene natürliche Zahl in römischer Schreibweise ausgibt. 1 ~ I; 5 ~ V; 10 ~ X; 50 ~ L; 100 ~ C; D ~ 500; M ~ 1000 Aufgabe 7 Überall muß man sich in Schlangen einreihen: an der Tür zum Klassensaal, an der Straßenbahnhaltestelle, bei der Passkontrolle, beim Arzt oder auf der Post. Für denjenigen, der gerade in der Schlange steht, ist es wichtig zu wissen, wie lange er noch etwa warten muß. Noch wichtiger ist herauszufinden, wie lange die Schlange überhaupt werden kann. Die Einmündung einer Nebenstraße in eine Hauptstraße ist durch eine Ampelanlage gesichert, die im Verlauf einer Minute 15 Sekunden lang 'Grün' zeigt. Während dieser Grünphase können höchstens fünf Fahrzeuge die Ampel passieren. Die Erfahrung zeigt, dass in jeder Minute etwa drei Fahrzeuge an die Ampel heranfahren. Wie groß wird die durchschnittliche Länge der Schlange? Hinweise Der Vorgang soll mit dem Computer simuliert werden. Dazu wählt man als Zeiteinheit eine Sekunde. Da im Mittel drei Autos in der Minute an der Ampel ankommen, ist die Wahrscheinlichkeit, dass während einer Sekunde ein Auto ankommt, 1/20 .Wir veranlassen daher den Computer, für jede Sekunde eine Zufallszahl zwischen 0 und 19 zu ermitteln. Ist die Zufallszahl 0, so nähert sich ein Fahrzeug der Ampel, und die Schlange wächst um 1 Fahrzeug. Falls noch Fahrzeuge an der Ampel warten, kann alle 3 Sekunden ein Auto die Ampel passieren. Es muss also die Warteschlage um 1 vermindert werden, falls der Wert der Variablen 'Sekunde' kleiner 16 und durch 3 teilbar ist. Aufgabe 8 Der Rechner „denkt“ sich ein Zahl zwischen 1 und 100. Der Spieler tippt so lange Zahlen, bis gedachte und getippte Zahl übereinstimmen. Als Hinweis gibt der Rechner bei jeder getippten Zahl aus, ob seine gedachte Zahl größer oder kleiner als die getippte Zahl ist. a) Schreibe ein entsprechendes Programm. b) Wie viele Tipps benötigt ein Spieler höchstens, um die gedachte Zahl zu „raten“. c) Wie viele Versuche würde ein Spieler höchstens benötigen bei einer Feldgröße von 1. 1000 Zahlen, 2. 5000 Zahlen, 3. 9000 Zahlen 4. 100000 Zahlen? 17