Sie sind vermutlich noch nicht im Forum angemeldet - Klicken Sie hier um sich kostenlos anzumelden Impressum 
Header

Willkommen in unserem Forum!!

Ich denke es wird Zeit, dass ich diesen Text hier mal ändere. Ich freue mich, dass dieses Forum so gut genutzt wird.

Das ist die größte Belohnung für mich!  So, viel Spaß mit diesem Forum!

Sie können sich hier anmelden
Dieses Thema hat 0 Antworten
und wurde 146 mal aufgerufen
 Üben, sonstige Fragen
LUPAC Offline

Sitzenbleiber

Beiträge: 3

29.11.2006 16:27
Info Allgemein Antworten

1. Syntax

Ein Pascalprogramm hat immer folgenden Aufbau:

{"Programmkopf":}
PROGRAM ProgrammName;
USES Unit1, Unit2, Unit3; {für Ausgabe auf Bildschirm: USES crt;}

{Deklarationsteil:}
CONST
Konstante1 = Wert; {Wertzuweisung mit Gleichheitszeichen}
Konstante2 = Wert;
TYPE
Typ1 = Typendefinition1; {Definitionszuweisung mit Gleichheitszeichen}
Typ2 = Typendefinition2;
VAR
Variable1, Variable2: TypA; {Typenzuweisung mit Doppelpunkt}
Variable3, Variable4: TypB;

PROCEDURE TueDies (Parameter: Typ);
{Prozedurdeklaration}
FUNCTION RechneWas (Parameter: Typ): ErgebnisTyp;
{Funktionsdeklaration}

{Programmteil:}
BEGIN

{Hauptprogramm}

END. {Punkt!}

* Ob groß, klein oder groß und klein gemischt geschrieben wird, ist egal. PROGRAM, program und ProGram sind das gleiche.
* In einer Zeile dürfen auch mehrere Anweisungen stehen. Zeilenaufteilung und Einrückungen dienen der besseren Lesbarkeit.
* Am Ende jeden Befehles steht ein Strichpunkt. Ausnahmen: vor ELSE darf kein Strichpunkt stehen; vor END und UNTIL kann ein Strichpunkt stehen, muß aber nicht; nach dem letzten END muß ein Punkt stehen.
* Kommentare stehen in geschwungenen oder "gesternten" Klammern: {ein Kommentar}, (*noch ein Kommentar*).
* Bezeichner (Programm-, Prozedur-, Funktions-, Konstanten-, Typen- und Variablennamen) werden nur bis zu einer Länge von 63 Zeichen berücksichtigt (können aber länger sein), dürfen Buchstaben und Ziffern enthalten, jedoch keine Leerzeichen, keine Satzzeichen und keine dt. Sonderzeichen (Umlaute, ß), dürfen nicht mit einer Ziffer beginnen und keine reservierten Wörter (BEGIN, END, IF, THEN usw.) sein.
* Variablen sind Platzhalter, deren Wert während des Programmes verändert werden kann, Konstante können ihren Wert nicht ändern.
* Die im Deklarationsteil des Hauptprogrammes vereinbarten Typen, Konstanten und Variablen gelten global, d.h. in allen Teilen des Programmes. Die in der Deklaration von Prozeduren und Funktionen vereinbarten Typen, Konstanten und Variablen gelten lokal, d.h. für die Prozedur oder Funktion, in der sie vereinbart wurden.
* Bezeichner können nur dann in einem Programmteil verwendet werden, wenn sie vorher für diesen Programmteil deklariert wurden. D.h. einer Variablen kann erst dann ein Wert zugewiesen werden, wenn sie vorher vereinbart wurde; eine Prozedur kann nur dann aufgerufen werden, wenn sie vorher deklariert wurde.

2. Einfache Datentypen
Art der Daten Name Wertebereich Beispiele Byte
ganze Zahlen INTEGER -32768..32767 0, 123, -9999, 1995 2
WORD 0..65535 2
SHORTINT -128..127 1
BYTE 0..255 1
LONGINT -2,14..2,14 Mia. 4
Kommazahlen REAL 2.9e-39..1.7e38 3.14, -0.08, 2.607e03, 1.23e-4 6
DOUBLE 5.0e-324.. 1.7e308 8
EXTENDED 3.4e-4932.. 1.1e4932 10
einzelne Zeichen CHAR 'a', '?', '3', ' ' (Leerz.), #13, #27 1
Zeichenketten STRING 'Hans', '1995', '' (Leerstring) -255
Wahr/Falsch BOOLEAN TRUE, FALSE TRUE, x>5, FALSE, n/2=16 1

* Das Ergebnis einer Operation kann einen anderen Datentyp haben als die beteiligten Operanden! So ist die Division ganzer Zahlen mit / immer vom Typ REAL.
* Man kann einer REAL-Variablen zwar einen INTEGER-Wert zuweisen, aber nicht umgekehrt. Um eine Kommazahl in eine ganze Zahl zu verwandeln, verwendet man die Funktionen TRUNC (Nachkommastellen abschneiden) oder ROUND (runden): IntZahl:= TRUNC (RealZahl);
* Kommazeichen ist der Punkt. Man kann REAL-Zahlen in Exponentialdarstellung schreiben, muß aber nicht: 672.2 oder 6.722e2 (e2 bedeutet: x 102), 0.0034 oder 3.4e-3 (e-3 heißt: x 10-3).
* CHAR-Werte stellt man dar durch Zeichen in Hochkommata ('2', 'M') oder durch den ASCII-Wert mit # davor (#65 = 'A', #13 = Returntaste). Den ASCII-Wert ermitteln kann man mit der Funktion ORD: AsciiWert:= ORD ('M') (AsciiWert muß eine Ganzzahl-Variable sein); den ASCII-Wert in sein Zeichen umwandeln kann mit der Funktion CHR: WriteLn (CHR (AsciiWert)).
* STRINGs werden in Hochkommata gesetzt. '' ist ein String ohne Inhalt (Leerstring). Ein String kann bis zu 255 Zeichen lang sein. Will man seine Länge einschränken, setzt man bei der Variablendeklaration die erlaubte Anzahl der Zeichen in eckige Klammern dahinter: VAR KurzWort: STRING [10]. Die tatsächliche Länge eines Strings ermittelt man mit der Funktion LENGTH: StrLen := LENGTH (name).
* BOOLEAN-Variablen können nur den Wert TRUE oder FALSE annehmen. Man kann ihnen aber jeden Ausdruck zuweisen, der als Ergebnis TRUE oder FALSE hat (auch andere Variablen oder Funktionen vom Typ BOOLEAN): Fertig:= Zaehler=0.

3. Operatoren

Arithmetische: *, /, DIV, MOD, SHL, SHR, +, -
/ Division, Ergebnis ist vom Typ REAL
DIV Ganzzahldivision, Ergebnis ist vom Typ INTEGER
MOD liefert den Rest einer Ganzzahldivision, ist vom Typ INTEGER
SHL (Shift left) verschiebt alle Bits um eine Stelle nach links
SHR (Shift right) verschiebt alle Bits um eine Stelle nach rechts

Vergleichsoperatoren: =, <, >, <=, >=, <> (ungleich), IN

Logische: NOT, AND, OR, XOR

Zuweisung: :=. Beachte den Unterschied zwischen der Zuweisung eines Wertes (:=) und dem Vergleich zweier Werte (=):
IF zahl=10 THEN ... {Vergleich}
zahl:= zahl+1; {Zuweisung}

PROGRAM IntegerDemo;
USES crt;
VAR a,b: Integer;
BEGIN
Write ('a='); ReadLn (a);
Write ('b='); ReadLn (b);
WriteLn (a); WriteLn (b);
WriteLn ('a+b=',a+b);
WriteLn ('a-b=',a-b);
WriteLn ('a*b=',a*b);
WriteLn ('a/b=',a/b);
WriteLn (a:4,'/',b:4,'=',a/b:4:5);
ReadLn;
END.

PROGRAM RealDemo;
USES crt;
VAR x,y: Real;
BEGIN
Write ('x='); ReadLn (x);
Write ('y='); ReadLn (y);
WriteLn (x); WriteLn (y);
WriteLn ('x+y=',x+y);
WriteLn ('x-y=',x-y);
WriteLn ('x*y=',x*y:0:5);
WriteLn ('x/y=',x/y:4:7);
ReadLn;
END.

PROGRAM CharDemo;
USES crt;
VAR taste: Char;
BEGIN
REPEAT
taste:= ReadKey;
Write (Taste,' hat Nr. ');
WriteLn (Ord (taste));
UNTIL taste=#27;
END.

PROGRAM StringDemo;
USES crt;
VAR name: String;
BEGIN
Write ('Dein Name: ');
ReadLn (name);
WriteLn (name);
WriteLn (name:20);
WriteLn (name, ' besteht aus ',Length (name), ' Zeichen.');
WriteLn (name+name+name);
ReadLn;
END.

4. Einfache Aus- und Eingabebefehle

Die folgenden Befehle und Funktionen gehören zum Großteil zur Unit CRT (cathode ray tube = Kathodenstrahlröhre, Bildschirm), also: USES crt;!
Ausgabe

Mit WRITE und WRITELN können alle einfachen Datentypen ausgegeben werden. Mehrere Parameter werden durch Beistrich getrennt. Auch arithmetische Ausdrücke und Funktionsaufrufe sind als Parameter erlaubt. WRITELN setzt den Cursor im Anschluß an die Ausgabe an den Anfang der nächsten Zeile (Return).

Write ('Geben Sie eine ganze Zahl ein: ');
WriteLn (zahl);
WriteLn ('Lieber ', Vorname, '! Du hast ', UebGw, 'kg Übergewicht.');
Write (Celsius*5/9-32);
WriteLn ('Das Ergebnis lautet ', Sqr (wert)+Ord (ziffer));
WriteLn; {ohne Parameter; setzt den Cursor auf den Anfang der nächsten Zeile}

Realzahlen werden in Exponentialdarstellung ausgegeben. Dies kann geändert werden durch die Formatierungsanweisung RealZahl:Weite:Nachkommastellen. Weite gibt an, wieviele Stellen mindestens für den ganzzahligen Anteil freigehalten werden sollen. Nachkommastellen ist die Anzahl der Ziffern hinter dem Komma, fehlt dieser Parameter, wird in Exponentialdarstellung ausgegeben.
WriteLn (Sqrt (zahl):0:2);

Zur Ausgabe auf dem Drucker benötigt man die Unit PRINTER. Als erster Parameter muß LST (Abk. für Lister) stehen.
WriteLn (Lst, 'Das kommt aus dem Drucker.');

GOTOXY (x,y) setzt den Cursor auf die x-te Spalte in die y-te Zeile (x: 1..80, y: 1..25) des Bildschirms. Die momentane Cursorposition kann man mit den Funktionen WHEREX und WHEREY ermitteln. GOTOXY kann nicht zur Ausgabe auf dem Drucker verwendet werden!
GotoXY (10,5);
GotoXY (spalte, WhereY+1);

CLRSCR: löscht den Bildschirm (clear screen).
CLREOL: löscht von der Cursorposition bis zum Ende der Zeile (clear end of line).
TEXTCOLOR (Farbnummer): legt die Zeichenfarbe für die Ausgabe fest.
TEXTBACKGROUND (Farbnummer): legt die Hintergrundfarbe für die Ausgabe fest.
Eingabe

READ und READLN lesen die Tastatureingabe in die als Parameter angegebene Variable ein. Der Programmablauf wird erst fortgesetzt, wenn der Benutzer seine Eingabe mit der Returntaste abgeschlossen hat. READLN setzt den Cursor im Anschluß an die Eingabe an den Anfang der nächsten Zeile. Achtung: Falls die Eingabe mit dem Variablentyp unverträglich ist, bricht das Programm mit einer Fehlermeldung ab!
Read (Vorname);
ReadLn (zahl);
ReadLn; {ohne Parameter; hält den Programmlauf an, bis Returntaste gedrückt wird}

Die Funktion READKEY liest ein einzelnes Zeichen von der Tastatur, ohne es auf dem Bildschirm auszugeben, und übergibt es als Funktionswert (Typ CHAR).

Die Funktion KEYPRESSED liefert den Wert TRUE, falls der Tastaturpuffer noch Zeichen enthält, ansonsten FALSE: REPEAT {TueWas} UNTIL KeyPressed;
5. Bedingte Anweisung
Einfache Entscheidung

Oft soll ein Anweisungsteil nur ausgeführt werden, wenn eine Bedingung erfüllt ist, z.B. WENN du müde bist, dann gehe ins Bett (sonst schau dir den Nachtfilm an).

IF Bedingung THEN Anweisung
ELSE Anweisung;

* Der ELSE-Teil kann entfallen.
* Vor dem ELSE darf kein Strichpunkt stehen.
* Besteht ein Anweisungsteil aus mehreren Befehlen, müssen sie zwischen BEGIN und END eingeschlossen werden.
* Die Bedingung muß ein Ausdruck, eine Variable oder eine Funktion sein, deren Wert vom Typ BOOLEAN ist.
* Meist ist die Bedingung eine Überprüfung auf
Gleichheit =
IF a=b THEN WriteLn ('Zahlen haben gleichen Wert');
Ungleichheit >, <, >=, <=, <> (ungleich)
IF b<>0 THEN c:= a/b ELSE WriteLn ('Division durch Null!');
Enthaltensein IN [Wertemenge]

Die Wertemenge kann eine Aufzählung von Elementen ([#13,#27]) oder ein Wertebereich aus einem ordinalen Datentyp (['a'..'z']) sein: VAR ;taste: Char;
taste:= ReadKey;
IF taste IN ['j','J','n','N'] THEN BEGIN...
* Vergleiche können auch verknüpft (AND, OR, XOR) oder negiert (NOT) werden:
9;IF (a>2) AND (a<=9) THEN WriteLn ('OK, Zahl zwischen 3 und 9');
IF (a<=2) OR (a>9) THEN WriteLn ('UPS, Zahl nicht zwischen 3 und 9');
IF NOT (a=3) THEN WriteLn ('Zahl verschieden von 3');
* Bedingungen können auch geschachtelt werden: IF Bedingung THEN IF Bedingung...

PROGRAM UeberweisungsGebuehr;
USES crt;
VAR betrag, gebuehr: real;
BEGIN
ClrScr;
Write ('Wieviele öS wollen Sie überweisen? '); ReadLn (betrag);
IF betrag <=100 THEN gebuehr:=5 ELSE gebuehr:=10;
WriteLn ('Überweisungsgebühr beträgt ', gebuehr:8:2, ' öS.');
END.

Mehrfachentscheidung

Manchmal muß eine Mehrfachentscheidung getroffen werden, z.B. FALLS Punktezahl 0-21: Nicht genügend, 22-28: Genügend, 29-37: Befriedigend, 38-43: Gut, 44-48: Sehr gut, SONST Fehler beim Punkteaddieren.

CASE Variable OF
Wert1: Anweisung;
Wert2: Anweisung;
Wert3: Anweisung
ELSE Anweisung;
END;

* Jeder CASE-Block muß mit END abgeschlossen werden.
* Vor dem ELSE darf ein Strichpunkt stehen, der ELSE-Teil kann entfallen.
* Besteht ein Anweisungsteil aus mehreren Befehlen, müssen sie zwischen BEGIN und END eingeschlossen werden.
* Die Variable muß von einem ordinalen (aufzählbaren) Datentyp sein (also nicht REAL oder STRING). Wert kann auch eine Aufzählung von Werten (Wert1a, Wert1b, Wert1c) oder ein Wertebereich (Untergrenze..Obergrenze) aus einem ordinalen Datentyp sein.

PROGRAM MiniCalc;
USES crt;
VAR zahl1, zahl2: real;
taste: char;
BEGIN
ClrScr; WriteLn ('Grundrechnungsarten'); WriteLn;
Write ('Erste Zahl: '); ReadLn (zahl1);
Write ('Zweite Zahl: '); ReadLn (zahl2);
Write ('Rechenoperation (+ - * /): '); ReadLn (taste);
CASE taste OF
'+': WriteLn (zahl1+zahl2:8:2);
'-': WriteLn (zahl1-zahl2:8:2);
'*': WriteLn (zahl1*zahl2:8:2);
'/': IF zahl2<>0 THEN WriteLn (zahl1/zahl2:8:2)
ELSE WriteLn ('Division durch Null!');
ELSE WriteLn ('Falsche Taste!');
END;
END.

...
ReadLn(ch);
CASE ch OF
'+','-','*','/': WriteLn('Operator'); {Aufzählung}
'0'..'9': WriteLn('Digit'); {Bereich}
'A'..'Z','a'..'z': WriteLn('Letter') {Aufzählung von Bereichen}
ELSE WriteLn('Special character');
End;

6. Schleifen
Determinierte Schleife (Zählschleife)

Die Anzahl der Wiederholungen steht bereits fest; z.B. schreibe 20mal deinen Namen oder zähle von 100 bis 1 herunter und gib die Quadratzahlen dazu aus.

FOR Variable:= Startwert TO Endwert DO Anweisung;

FOR Variable:= Endwert DOWNTO Anfangswert DO Anweisung;

* Variable muß von einem ordinalen Datentyp sein.
* Besteht der Anweisungsteil aus mehreren Befehlen, dann BEGIN - END.

PROGRAM Begruessung;
USES crt;
VAR i: integer; name: string;
BEGIN
ClrScr;
Write ('Wie heißt du? ');
FOR i:=1 TO 20 DO
WriteLn ('Grüß dich, ', name);
ReadLn;
END.

PROGRAM CountDown;
USES crt;
VAR zaehler: integer;
BEGIN
ClrScr;
FOR zaehler:=60 DOWNTO 1 DO
BEGIN
GotoXY (38,10); ClrEol;
Write ('Noch ', zaehler,' Sekunden');
Delay (1000); {wartet 1000 ms}
END;
WriteLn ('Fertig!'); ReadLn;
END.

Fußgesteuerte Schleife

Wiederholungen, bei denen man eine Bedingung für den Abbruch festlegt, z.B. schreibe etwas auf den Bildschirm, bis der Benutzer eine Taste drückt.

REPEAT
Anweisung(en)
UNTIL Abbruchbedingung;

* BEGIN - END ist nicht nötig, auch wenn der Anweisungsteil aus mehreren Befehlen besteht.
* Die REPEAT-Schleife wird mindestens einmal durchlaufen.

PROGRAM BunteSternchen;
USES crt;
BEGIN
ClrScr;
REPEAT
GotoXY (Random (80)+1, Random (24)+1); {Random (x) erzeugt Zufallszahlen}
TextBackground (Random (16)); {zwischen 0 und x-1}
TextColor (Random (16));
Write ('*');
UNTIL KeyPressed;
END.

Kopfgesteuerte Schleife

Wiederholungen, bei denen eine Bedingung angegeben ist, unter der sie überhaupt durchgeführt werden (abweisende Schleife), z.B. solange nicht eine Taste gedrückt wird, erzeuge Töne.

WHILE Eintrittsbedingung DO
Anweisung;

* Wenn der Anweisungsteil aus mehreren Befehlen besteht, dann BEGIN - END.
* Wenn Eintrittsbedingung schon beim ersten Mal nicht erfüllt ist, wird die Schleife gar nicht ausgeführt.

PROGRAM KatzenMusik;
USES crt;
BEGIN
ClrScr;
WriteLn ('Press any key to quit the funny music');
WHILE NOT KeyPressed DO
BEGIN
Sound (Random (5000)); {Sound (f) erzeugt einen Ton von f Hz, der solange erklingt,}
Delay (100); {bis die Tonhöhe durch einen neuen Sound-Befehl geändert wird}
END; {oder der Ton durch NoSound wieder abgeschaltet wird}
NoSound;
END.

Schleifenabbruch

Bei allen diesen Schleifen kann im Schleifenkörper ein Abbruch mit EXIT oder HALT erfolgen. EXIT springt aus einer Prozedur oder Funktion in den aufrufenden Programmteil zurück, EXIT im Hauptprogramm bricht das Programm ab. HALT bricht immer das Programm ab.

PROGRAM NamenEingeben;
USES crt;
VAR name: string;
BEGIN
ClrScr;
REPEAT
Write ('Namen eingeben (Abbruch mit Return!)');
ReadLn (name);
IF name='' THEN exit; {Ohne diese Zeile würde das Programm vor dem Austritt aus}
WriteLn ('Hallo ',name); {der Schleife noch einmal 'Hallo' schreiben}
UNTIL name='';
END.

Wem das ein zu großes Durcheinander ist, der kann auch einfach auf http://home.tele2.at/thersites/informatik/paseinf.html gehen.
Dort steht das gleiche, da es ja kopiert wurde aber jeweils farbig unterlegt ist etc..
Gruß LUPAC

«« Info
Pneumatik »»
 Sprung  
Footer

Moderatoren: DL4UNY, Shojo und Pumba

Xobor Ein Kostenloses Forum von Xobor.de
Einfach ein Forum erstellen
Datenschutz