Turbo Pascal für Windows - Ihre Homepage bei Arcor

Werbung
Turbo Pascal für Windows
1 Aufbau eines Pascal-Programms
Ein Pascal-Programm ist in folgende 3 Abschnitte gegliedert:
PROGRAM Programmname;  1. Programmkopf
USES wincrt;
CONST………;
VAR………….; 2.Deklarationsteil
BEGIN
….
3. Hauptprogramm
….
besteht aus Anweisungen und Blöcken von Anweisungen, die jeweils
….
durch BEGIN und END zusammengehalten werden
….
END.
Regeln: - fast alle Pascal-Befehle werden durch ein Semikolon voneinander getrennt
- Abarbeitung der Befehle in der Reihenfolge, in der sie im Programm stehen
- nach BEGIN kein „ ;“
- nach END folgt ein Punkt, falls es das Ende des Hauptprogramms darstellt
2 Ein- und Ausgabe
2.1 Ausgabe
WRITE(‘Hallo’);
WRITE(a);
WRITE(‘Hallo ‘,a)
WRITELN(....);
WRITELN;
schreibt Hallo
schreibt Wert der Variablen a (oder Konstanten)
schreibt beides hintereinander
das „Nächstgeschriebene“ fängt in einer neuen Zeile an
schreibt Leerzeile (lies: „writeline“)
CLRSCR; („clearscreen“)
löscht den Bildschirm
Aufgabe:
Schreibe ein Programm Textausgabe, das einen dreizeiligen Text mit Leerzeilen zwischen
den Zeilen ausgibt und speichere das Programm.
2.2 Eingabe
READLN(a); Mit readln (lies: „readline“) wird ein Zeichen, eine Zahl oder ein Wort an den
Rechner übergeben. Heißt soviel wie „lies“. Das Eingegebene wird hier der
Variablen a zugewiesen.
2.3 Formatierung der Ausgabe
1
GOTO XY(13,8); schreibt Hallo an die Koordinaten der entsprechenden Bildschirmstelle
WRITE(‘Hallo‘); (hier: Beginn mit Schreiben in die 13.Spalte und 8.Zeile des
Bildschirms)
WRITE(a:7:2);
bewirkt, dass der Wert der Variablen a mit insgesamt 7 Stellen und
davon 2 Stellen hinter dem „Komma“ angegeben wird
3 Konstanten und Variablen
3.1 Variablen
Variablen sind Speicherplätze im Rechner, in denen Objekte wie Zahlen, Buchstaben
oder Wörter gespeichert werden.
Eine Variable hat einen Namen, einen Datentyp (werden beide im Deklarationsteil des
Programms festgelegt) und einen Dateninhalt (wird im Hauptgang zugewiesen; jederzeit
veränderbar)
Bsp.: anzahl:=4
anzahl
4
Beispiele für Datentypen
INTEGER :ganze Zahl von -32 768 bis +32 767
LONGINT :größere bzw. kleinere ganze Zahlen als im obigen Bereich angegeben
REAL
:reelle Zahlen
BOOLEAN :logische Variable, kann nur die Worte TRUE (wahr) oder FALSE (falsch)
annehmen
CHAR
:beliebiges Zeichen aus dem Zeichensatz des Rechners
STRING
:Zeichenketten aus beliebigen Zeichen, z.B. Wort oder Satz
Beispiel:
PROGRAM….;
.
.
VAR anzahl, punkte:INTEGER;
verbrauch:REAL;
name:STRING;
.
.
3.2 Konstanten
Speicherplatz, der einen Namen und einen Dateninhalt hat
↑
der Dateninhalt wird im Gegensatz zur Vorgehensweise
bei Variablen auch im Deklarationsteil festgelegt und
lässt sich im Hauptprogramm nicht mehr verändern!
Bsp.: PROGRAM….;
.
2
.
CONST pi=3.1416;
VAR…
.
.
4 Kommentare
Damit der Programmtext übersichtlicher wird, fügt man i.a. einige erklärende Textzeilen ein.
Kommentare lassen sich in geschweiften Klammern einfügen. Sie werden beim Übersetzen
des Programms vom Rechner nicht beachtet.
Bsp. PROGRAM Primzahlen; {das Programm berechnet alle Primzahlen bis 10.000}
Welches Programm ist falsch, welches nicht (Begründung)?
PROGRAM falsch;
CONST
Elf=11;
BEGIN
Elf:=Elf*2;
WRITELN(Elf);
END.
PROGRAM richtig
VAR Elf:integer;
BEGIN
Elf:=11;
Elf:=Elf*2;
WRITELN(Elf);
END.
Aufgabe:
Tippe folgenes Programm in Turbo-Pascal und versuche es zu verstehen. Teste das Programm
mit unterschiedlichen Eingaben. Ändere anschließend auch die Datentypen
PROGRAM Vartest; {Programm zur Demonstration einfacher Datentypen}
USES wincrt;
CONST
drei= 3;
elfkommadrei=11.3;
VAR
ganz1,ganz2:INTEGER;
name:STRING[20];
BEGIN
{ Hauptprogramm}
CLRSCR;
WRITELN (´Gib eine ganze Zahl ein: ‘); {Eingabe}
READLN (ganz1);
WRITELN (´Noch eine: ‘);
READLN (ganz2);
WRITELN;
WRITE (´Gib deinen Namen ein: ‘);
READLN (name);
CLRSCR;
WRITELN (´Hallo ‘,name,´!‘);
{Ausgabe}
WRITELN;
WRITELN(´Die Konstanten dieses Programms ‘);
WRITELN(´sind ‘,drei,‘ und ‘,elfkommadrei);
3
WRITELN;
WRITELN(´Du hast folgende Zahlen eingegeben: `);
WRITELN (ganz1,´ und ‘,ganz2);
END.
5 Rechnen mit Pascal
5.1 Grundrechenarten
Addition(+), Subtraktion(-), Multiplikation(*), Division(/)
5.2 andere Rechenoperationen
i DIV j;
Bsp.: 16 DIV 5 = 3; 22 DIV 8 = 2 ganzzahlige Division
i MOD j; Bsp.: 16 MOD 5 = 1; 22 MOD = 6 Rest bei ganzzahliger Division
ABS(x);
Betrag von x
TRUNC(x); Abschneiden der Nachkommastellen
ROUND(x); rundet reelle Zahl zu ganzer Zahl
SQR(x);
„square“ (Quadrat) x²
SQRT(x); „squareroot“: Wurzel von x
SIN(x)
COS(x)
TAN(x)
EXP(x);
ex
LN(x);
natürlicher Logarithmus von x
Aufgabe1:
Schreibe ein Programm Paket, das nach Eingabe von Länge, Höhe und Breite eines Pakets
dessen Volumen und Oberfläche ausgibt.
Aufgabe 2:
Schreibe ein Programm Kugel, das das Volumen einer Kugel auf 2 Stellen hinter dem Komma
berechnet. (Ausgabe: Bildschirmmitte); Kommentare hinzufügen.
6 Wiederholungsanweisungen
6.1 Die FOR-Anweisung
Aufgabe: Schreibe ein Programm, das die Zahlen von 1..100 ausdruckt
Lösung
PROGRAM zaehle;
USES wincrt;
VAR i:integer;
BEGIN
FOR i:=1 to 100 DO {Die Zählvariable i wird von 1 bis 100 hochgezählt und in jedem
WRITELN(i);
Schleifendurchlauf ausgedruckt; falls der Schleifenrumpf (hier:
4
WRITELN(i)) aus mehr als einem Befehl besteht muss die
Schleife mit BEGIN und END geklammert werden}
END.
Aufgabe1
Schreibe ein Programm Summe1, das nach Eingabe von 10 reellen Zahlen deren Summe
ausgibt.
Aufgabe2
Schreibe ein Programm Summe2, das nach Eingabe einer natürlichen Zahl n die Summe
1 1 1
1
1     ...  ausgibt.
2 3 4
n
Wenn man vor Schleifenbeginn nicht weiß, wie oft eine Schleife durchlaufen wird, kann die
FOR-Anweisung nicht angewandt werden!
Wir benötigen ein anderes Schleifenkonstrukt:
6.2 Die REPEAT-Anweisung
Beginn der Schleife
führe Schleifenrumpf aus
nein
Bedingung erfüllt?
ja
Ende der Schleife
In Turbo-Pascal
REPEAT
Anweisung 1;
....
....
Anweisung n;
UNTIL Bedingung;
Aufgabe1
Schreibe ein Programm Summe3, das wiederholt zur Eingabe einer natürlichen Zahl
auffordert, solange bis eine Null eingegeben wird. Dann soll das Programm die Summe der
eingegebenen Zahlen ausgeben.
5
Aufgabe2
Schreibe ein Programm Summe4, das zusätzlich zu Summe3 noch den Mittelwert und die
Anzahl der Zahlen ausgibt.
6.3 Die WHILE-Anweisung
Die while-Schleife ähnelt der „repeat“-Schleife. Sie muss aber im Gegensatz zur REPEATSchleife nicht unbedingt einmal durchlaufen werden.
nein
Bedingung erfüllt?
Ende der Schleife
ja
führe Schleifenrumpf aus
In Turbo-Pascal
WHILE Bedingung DO
BEGIN
Anweisung 1;
….
….
Anweisung n;
END;
Bemerkungen:
Beispiele für Bedingungen: a = 4
x<8
h >= 13
s = ‘a‘ (falls s CHAR-Variable)
name = ‘info‘ (falls name STRING-Variable)
b = TRUE (falls b BOOLEAN-Variable)
a <> 4 (a ungleich 4)
(a <> 4) AND (b <> 8) (a ungleich 4 und b ungleich 8)
(a <> 4) OR (b <> 8) (a ungleich 4 oder b ungleich 8)
Aufgabe1
Schreibe ein Programm Summe5. Es soll das gleiche leisten wie Summe4 aus 6.2. Statt der
REPEAT-Schleife ist aber eine WHILE-Schleife zu verwenden.
7 Entscheidungen
Oft sollen bestimmte Anweisungen nur dann ausgeführt werden, wenn eine Bedingung (oder
mehrere) erfüllt ist (sind).
6
WENN Bedingung erfüllt DANN tue irgendetwas
7.1 Die IF-THEN-Konstruktion
Turbo-Pascal:
IF logischer Ausdruck THEN
Anweisung(en);
 sollen mehrere Anweisungen ausgeführt
werden, werden sie wieder mit BEGIN…END
zusammengefasst.
Beispiele für mögliche logische Ausdrücke
Zahl > 0
Ergebnis = 1
Wert = ´true´
Name = ´Sandra´
7.2 Die IF-THEN-ELSE-Konstruktion
Zweiseitige Entscheidung:
WENN Bedingung erfüllt DANN tue irgendetwas SONST tue etwas anderes
Turbo-Pascal:
IF logischer Ausdruck THEN
Anweisung(en);
ELSE
Anweisung(en) ; {BEGIN…END bei mehreren Anweisungen}
Vor ELSE darf kein „ ;“ stehen !
Aufgabe1
Schreibe ein Programm Minimum, das nach Eingabe von 10 natürlichen Zahlen die kleinste
der eingegebenen Zahlen ausgibt.
Aufgabe2
Schreibe ein Programm Zahlenraten: der Computer soll eine Zufallszahl zwischen 0 und 99
erzeugen (RANDOMIZE; zufallszahl:=RANDOM(99)). Nun soll diese Zahl erraten werden.
Der Computer teilt jeweils mit, ob die geratene Zahl zu klein oder zu groß ist. Falls die Zahl
erraten wurde, soll angegeben werden in welchem Versuch die Zahl geraten wurde.
Aufgabe3
Schreibe ein Programm gerade, das wiederholt zur Eingabe einer ganzen Zahl > 0 auffordert,
solange bis eine 0 eingegeben wird. Das Programm soll nach jeder eingegebenen Zahl
entscheiden, ob die eingegebene Zahl gerade oder ungerade ist und dies ausgeben.
Aufgabe4
Schreibe ein Programm geradeSumme, das wiederholt zur Eingabe einer ganzen Zahl
auffordert, solange bis eine 0 eingegeben wird. Dann soll die Summe der positiven und die
Summe der negativen Zahlen gesondert ausgegeben werden.
7
8 Felder
Der Computer dient dazu, große Datenmengen zu verarbeiten. Mit den bisher
kennengelernten Mitteln ist dies jedoch kaum möglich bzw. sehr mühsam. Will man z.B. nur
100 Zahlen eingeben, so ist dies schon sehr aufwendig:
VAR zahl1, zahl2, ... , zahl100: integer;
BEGIN
writeln(’1. Zahl:’);
readln(zahl1);
writeln(’2. Zahl:’);
readln(zahl2);
........................
writeln(’100. Zahl:’);
readln(zahl100);
Dieses Problem lässt sich durch die Benutzung eines Feldes (engl. array) elegant lösen. Die
100 Zahlen werden dabei alle in einem einzigen Feld mit dem Namen „zahl“ abgelegt. Dieses
Feld hat somit 100 Speicherplätze in denen die einzelnen Zahlen abgelegt werden:
zahl: 4
46

8
1.
2.
3.
Speicherplatz des Feldes (Index)
24
100.
Auf die einzelnen Speicherplätze eines Feldes kann dann mithilfe des Index zugegriffen
werden.
Bsp: zahl[3] = ......; zahl[100] = ......
Beispiel:
VAR
i:integer;
zahl: array [1..100] of integer;
{i: Laufvariable}
{Deklaration des Feldes}
BEGIN
FOR i := 1 TO 100 DO
BEGIN
writeln(i,’. Zahl: ’);
readln(zahl[i]);
END;
FOR i := 1 TO 100 DO
writeln(i,’. Zahl: ’,zahl[i]);
Aufgabe 1
Schreibe wie im Unterricht besprochen ein Programm das den Schnittpunkt zweier Geraden
berechnet. Eingegeben werden sollen die Steigungen und y-Achsenabschnitte der Geraden.
Aufgabe 2
Schreibe folgendes Programm: ein Feld der Größe 100 soll mit Zufallszahlen von 0 bis 499
8
belegt werden. Danach soll das Feld in einer zweiten Schleife durchlaufen werden. Dabei
sollen alle geraden Feldelemente ausgegeben werden.
Aufgabe 3
Wir programmieren die “Suchen-und-Ersetzen-Funktion“ in einem Text (z.B. Word). Es
soll ein Text mit 10 Wörtern eingegeben werden (Tipp: die einzelnen Wörter als Feldelemente
in einem Feld speichern – Datentyp String). Dann soll ein Wort eingegeben werden das ersetzt
werden soll und ein Wort durch das ersetzt wird. Bsp: ersetze im Text überall das Wort
„Hunger“ durch das Wort „Durst“.
Erweitere das Programm so, dass gezählt und ausgegeben wird, wieviele Worte ersetzt worden
sind.
Aufgabe 4
Zum Abschluss noch ein schwierigeres Programm:
Es sollen alle Primzahlen bis 10000 ausgegeben werden. Dies soll nach dem Verfahren „Sieb
des Eratosthenes“ erfolgen.
Die Feldvariable p, deren Komponenten vom Typ boolean sind, wird zunächst deklariert. Ihre
Elemente p[i] werden jeweils auf
false gesetzt: p[2]:=false, p[3]:=false, ... ,
p[10000]:=false.
Jetzt wird der Index auf 2 gesetzt und untersucht, ob p[i] false ist. Wenn ja, wird der Index,
also 2, ausgegeben. Dann werden alle Elemente mit Indizes, die ein Vielfaches von 2 sind auf
true gesetzt, vorausgesetzt, dass i  10000 ist: p[4]:=true, p[6]:=true, ... , p[10000]:=true.
Anschließend wird der Index i auf 3 gesetzt und das oben beschriebene verfahren wiederholt.
Dabei wird also 3 ausgegeben und alle Vielfachen werden auf true gesetzt.
Dieses Verfahren wird nun solange wiederholt, bis der Index i den Wert 10000 erreicht hat.
9 Prozeduren und Funktionen
9.1 Prozeduren
Beispiel
PROGRAM Test;
var a,b,c, ….;
PROCEDURE Hallo;
var d ….;
BEGIN
writeln(’Hallo’);
END;
PROCEDURE Du;
BEGIN
writeln(’Du’);
END;
BEGIN {Hauptprogramm}
Hallo;
Du;
readln;
END.


Eine Prozedur ist ein Unterprogramm (Teilprogramm) das durch Nennung des
Prozedurnamens (Bsp: Hallo, Du, …) aufgerufen wird.
Variablen des Hauptprogramms (globale Variablen) sind auch in Prozeduren gültig
(im Beispiel: a, b, c).
9


Eine Prozedur kann eine andere aufrufen (dabei muss die aufrufende Prozedur aber
immer vor der aufrufenden Prozedur stehen, im Beispiel könnten wir also in der
Prozedur
’Du’ die Prozedur ‚Hallo’ aufrufen, nicht aber umgekehrt).
Variablen und Konstanten, die in einer Prozedur deklariert werden, nennt man lokale
Variablen. Diese können nur in der Prozedur verwendet werden, in der sie definiert
sind. Im Hauptprogramm und in anderen Prozeduren sind sie nicht gültig (im Beispiel
d in der Prozedur ‚Hallo’).
Aufgabe1
Schreibe ein Programm, welches die Fakultät einer Zahl, die eingegeben werden soll,
ausgibt. Dabei sind die drei Prozeduren „Eingabe“, „Berechnung“ und „Ausgabe“ zu
verwenden. Das Hauptprogramm soll folgendermaßen aussehen:
BEGIN
Eingabe;
{Zahl von der die Fakultät berechnet werden soll}
Berechnung; {Berechnung der Fakultät}
Ausgabe;
{Ausgabe des Ergebnisses}
END.
Aufgabe2
Entwickle ein Programm, welches zu einer Menge von 10 einzugebenden Zahlen deren
Minimum bestimmt und angibt, ob sich mindestens zwei gleiche Zahlen in der Menge
befinden. Gestalt des Hauptprogramms:
BEGIN
Eingabe;
{Eingabe der 10 Zahlen}
Minimum;
{Bestimmung und Ausgabe des Minimums}
gleiche_Elemente {Untersuchung und Ausgabe ob in der Menge mindestens zwei gleiche Elemente
vorkommen}
END.
Erweiterung des Prozedurkonzepts
1 Wertübergabe an Prozeduren
Bsp: PROGRAM multiplikation; USES wincrt;
VAR
a:integer;
b:real;
PROCEDURE mult (x:integer; y:real);
BEGIN
writeln (‘Das Produkt der beiden Zahlen beträgt ‘,xy:7:2);
END;
BEGIN {Hauptprogramm}
writeln (‘Geben Sie eine ganze Zahl ein: ‘);
readln (a);
writeln (‘Geben Sie eine reelle Zahl ein: ‘);
readln (b);
mult (a,b);
END.
10
Hinter dem Prozedurnamen wird eine Liste von Parametern aufgeführt, die an die Prozedur
übergeben werden. Die Prozedur „mult“ muss mit genau einem Wert vom Typ integer und
einem Wert vom Typ real aufgerufen werden und zwar in dieser Reihenfolge.
Beispiele für Prozeduraufrufe:
.
.
BEGIN {Hauptprogramm}
a:=1;
b:=2.5;
c:=3;
mult (a,b);
o.k.
mult (a,c);
o.k.
mult (1,3.5); o.k.
mult (2.4,2); falsche Reihenfolge
mult (a,b,c); falsche Anzahl an Werten
Bsp2: PROGRAM wertuebergabe; USES wincrt;
VAR
a:integer;
PROCEDURE test (x:integer);
BEGIN
x:=x+5;
writeln (x);
END;
BEGIN {Hauptprogramm}
a:=4;
writeln (a);
test (2);
test (a);
writeln (a);
END.
Was druckt das Programm ?
4
7
9
4
2 Variablenübergabe an Prozeduren
Bsp: PROGRAM multiplikation2; USES wincrt;
VAR
a:integer;
b,c:real;
PROCEDURE mult2 (x:integer; y:real; VAR z:real);
BEGIN
z:=xy;
END;
BEGIN {Hauptprogramm}
writeln (‘Geben Sie eine ganze Zahl ein: ‘);
readln (a);
writeln (‘Geben Sie eine reelle Zahl ein: ‘);
readln (b);
mult2 (a,b,c);
11
writeln (‘Das Produkt der beiden Zahlen beträgt ‘,c:7:2);
END.
Es wäre wünschenswert, von der Prozedur auch Werte zurückzubekommen. Deshalb können
Variablen an die Prozedur übergeben werden, die nach Durchlaufen der Prozedur verändert
wieder zurückgegeben werden. Diesen Variablen wird das Schlüsselwort „VAR“
vorangestellt.
Beispiele für Prozeduraufrufe:
.
.
a:=1; b:=2.5; d:=3;
mult2 (a,b,c); o.k.
mult2 (1,2,3); falscher Aufruf; an dritter Stelle muss eine
Variable stehen
Bsp: PROGRAM variablenuebergabe; USES wincrt;
VAR
x:integer;
PROCEDURE eins (a:integer);
BEGIN
a:=a+2;
writeln (a);
END;
PROCEDURE zwei (VAR a:integer);
BEGIN
a:=a+2;
writeln (a);
END;
BEGIN {Hauptprogramm}
x:=3;
writeln (x);
eins (x);
writeln (x);
zwei (x);
writeln (x);
END.
Was druckt das Programm ?
3
5
3
5
5
Bsp2: PROGRAM variablenuebergabe2; USES wincrt;
VAR
x,y:integer;
PROCEDURE eins (x:integer; VAR a:integer);
BEGIN
x:=x2;
writeln (x);
a:=x;
END;
BEGIN {Hauptprogramm}
x:=2;
eins (x,y);
12
writeln (x);
writeln (y);
END.
Was druckt das Programm ?
4
2
4
Aufgabe 3
Schreibe ein Programm das folgendes leistet:
Im Hauptprogramm soll eingegeben werden, ob
1.
2.
3.
4.
5.
das Volumen eines Kegels
die Oberfläche eines Quaders
die Summe der Zahlen von 1 bis n
der Mittelwert von n Zufallszahlen zwischen 1 und 100
das Kapitel nach n Jahren
berechnet werden soll.
Danach sollen die erforderlichen Parameter ebenfalls im Hauptprogramm eingegeben
werden.
Dies sind bei
1.
2.
3.
4.
5.
Radius der Grundfläche und Höhe des Kegels
Länge, Breite und Höhe des Quaders
n
n
Anfangskapital, Zinssatz und Anzahl der Jahre.
Diese Parameter sollen dann jeweils an eine Prozedur übergeben werden. In der
entsprechenden Prozedur soll dann das jeweilige Ergebnis berechnet werden. Dann soll das
Ergebnis an das Hauptprogramm zurückübergeben werden.
Die Ausgabe des Ergebnisses soll erst im Hauptprogramm erfolgen (keine Ausgabe
innerhalb der Prozeduren).
9.2 Funktionen
Funktionen sind den Prozeduren recht ähnliche Konstruktionen, die sich jedoch von den
Prozeduren dadurch unterscheiden, dass sie genau einen Wert als Ergebnis haben. Man ruft
eine Funktion wie eine Prozedur mit oder ohne Variablenübergabe auf. Zurückgegeben wird
aber nur ein einziger Wert.
Bsp: FUNCTION mult (x:integer; y:real): real;
BEGIN
mult:=x*y;
END;
Aufgerufen wird diese Funktion dann z.B. mit y:=mult(2,3.1) oder writeln(mult(a,b)). Es
werden also keine Variablen zurückübergeben wie dies bei Prozeduren der Fall war, sondern
nur ein Wert.
13
Aufgabe 4
Schreibe ein Programm das nach Eingabe einer reellen Basis b und eines ganzzahligen
Exponenten e die Potenz be berechnet und ausgibt. Das Programm soll eine Funktion
enthalten, die be berechnet. Sowohl die Eingabe von b und e als auch die Ausgabe des
Ergebnisses soll aber im Hauptprogramm stattfinden ! Erweitere das Programm um eine
weitere Funktion deiner Wahl !
Aufgabe 5
Was druckt folgendes Programm ?
PROGRAM uebung;


VAR r,s:integer;


PROCEDURE uebung2(x,y,z:integer; VAR a,b:integer);
VAR v:real;
w:integer
BEGIN
r:=x+1;
s:=y/2;
v:=r·z/s;
writeln(v-1);
w:=s·3;
writeln(w+1);
r:=r+1;
a:=r·2;
writeln(r);
b:=a·2;
END;


BEGIN
r:=4;
s:=3;
writeln(s);
uebung2(1,2,3,r,s);
writeln(r);
writeln(s);
END.
Lösung: 3,5,4,3,6,12
14
Herunterladen