Programmiergrundlagen in Pascal Flashcards
Aus welchen Basis-Bausteinen besteht ein Pascal-Programm?
program heading [Programmkopf]
block -> declaration part [Deklarations-/Vereinbarungsteil]; statement part [Anweisungsteil]
Wie ist der Deklarationsteil gegliedert?
constant definition part
type definition part
variable declaration part
procedure and function declaration part
Wie ist der Anwendungsteil aufgebaut?
“begin” am Anfang, “end;” am Ende. Dazwischen statements [Anweisungen], getrennt durch “;”
Welche Spezialsymbole kennt Pascal?
\+ - * / . , : ; = <> < >= \:= .. ^ ' ( ) [ ] { }
Wie lautet die Erstazdarstellung für [ ] ?
(. .)
Wie lautet die Ersatzdarstellung für { } ?
(* *)
Welches Symbol ersetzt ^ ?
Einen Pfeil nach oben. Kann auch @ geschrieben werden.
Welche Schlüsselwörter kennt Pascal? Warum muss ich das wissen?
program begin end const type var array of record function procedure and not or div mod if then else for to downto do while repeat until nil (case file goto label packed set with) Werden im handgeschriebenen Programm unterstrichen.
Welche Zeichengruppen unterscheidet Pascal?
Buchstaben (letters), Ziffern (digits), Spezialsymbole (special symbols), Schlüsselwörter (reserved words)
Wie ist ein zulässiger Bezeichner (identifier) aufgebaut? Wie sollte er gewählt werden.
- beginnt mit einem Buchstaben; kann von weiteren Buchstaben oder Ziffern gefolgt werden
- wenn möglich “sprechende” Bezeichner wählen
- verschiedene Bezeichner sollten sich innerhalb der ersten 8 Zeichen unterscheiden
- bei Bezeichnern unterscheidet Pascal nicht zwischen Groß- und Kleinbuchstaben
Wie sieht der Programmkopf im geschriebenen Program aus?
program identifier;
ODER
program identifier (identifier);
ODER
program identifier (identifier, identifier);
…
identifier in der Klammer i.d.R. input und/oder output (Standardein- und -ausgabe)
Was gilt als Trennsmbol?
- Leerzeichen (blank)
- Zeilenende (eol)
- Spezialsymbole
- Kommentar
Was ist ein Standardbezeichner?
Ein in der Programmiersprache vordefinierter Bezeichner für Standardfunktionen, Standardtypen, etc.
Beispiele: writeln, output, char, integer,…
Welche Zahlenarten kennt Pascal?
- integer (ganze Zahl)
- real (kann jeden integer-Wert, Werte außerhalb der Integergrenzen (maxint) sowie Zahlen mit Fraktionsanteil darstellen)
Wie werden real-Zahlen dargestellt?
- Festpunktdarstellung (0.0; 0.873; -74.1; 73.36789)
- nicht Normalisierte Gleitpunktdarstellung (0E0; 8.73E+02; 741E-1; 0.7336789E2)
Wie werden Konstanten definiert und benannt?
const IDENTIFIER = value (integer, real, 'char', 'string'); ODER IDENTIFIER = (+-) [anderer constant identifier];
Bezeichner von Konstanten werden komplett groß geschrieben.
Wie werden Variablen deklariert?
var
identifier : type;
ODER
identifier, identifier : type;
Was wird im Vereinbarungsteil definiert? Was deklariert? Was ist der Unterschied?
Konstanten und Typen werden definiert, d.h. sie werden benannt.
Variablen und Prozeduren werden deklariert. Neben der Benennung wird ihnen z.B. bereits Speicherplatz reserviert etc.
Welche Standarddatentypen kennt Pascal?
- integer- und
- real-Zahlen,
- char,
- boolean;
string kann als vordefiniert angenommen werden, ist es aber eigentlich in Standardpascal nicht.
Welche Standardoperationen und Standardfunktionen können auf integer angewendet werden?
Operationen:
+, -, *
div (ganzzahlige Division), mod (Restbildung)
Funktionen:
abs(x) (Absolutbetrag), sqr(x) (Quadrat)
succ(x) (=x+1), pred(x) (=x-1)
Welche Standardoperationen und Standardfunktionen können auf real angewendet werden?
Operationen:
+, -, *, /
Funktionen:
abs(x) (Absolutbetrag), sqr(x) (Quadrat), sqrt(x) (Wurzel),
sin(x) (Sinus), cos(x) (Cosinus), arctan(x) (Arcustangens),
exp(x) (Exponentialfunktion e^x), ln(x) (nat. Logarithmus)
Welche Standardfunktionen können auf char angewendet werden?
ord(c) (Ordinalzahl des Zeichens c)
chr(i) (Zeichen mit der Ordinalzahl i)
chr(ord(c)) = c; ord(chr(i)) = i;
pred(c) (Vorgänger), succ(c) (Nachfolger)
Welche Standardoperationen und Standardfunktionen welrden als boolean ausgewertet?
boolesche Operatoren:
and, or, not
Vergleichsoperatoren:
=, <>, , >=
Funktion:
odd(x) (true für x : integer ungerade)
Prioritäten von Operationen
Klasse 1: not Klasse 2 (Punktoperatoren): * / div mod and Klasse 3 (Strichoperatoren): \+ - or Klasse 4 (Vergleichsoperatoren): = <> < >=
Was ist ein string? Wie wird er definiert?
ein array von char
string[integer constant]
-> integer constant gibt maximale Länge des string an
Datentyp?
definiert eine Menge von Werten mit auf diese Menge ausführbaren Operationen
Was ist eine typisierte Programmierspreche?
- jede Konstante / Variable (Datenobjekt) wird eindeutig einem Datentyp zugeordnet
- der Datentyp bestimmt die Werte, die ein Objekt annehmen und die Operationen, die auf es angewendet werden können
- jede Operation fordert Operanden eines bestimmten Typs und erzeut Ergebnisse eines bestimmten Typs
Was ist der Unterschied zwischen einer Konstante und einer Variable?
Konstante: bekommt bei der Definition einen Wert zugewiesen, der sich in der Programmausführung nicht ändert
Variable: bekommt erst während der Programmausführung einen Wert zugewiesen, der sich im weiteren Programmverlauf ändern kann
Was sind einfache Anweisungen?
- leere Anweisung
- assignment statement [(Wert-)Zuweisung] (variable identifier := expression)
- compound statement [zusammengesetzte Anweisung] (begin statement; statement; statement end)
- special statement [spezielle Anweisung] (z.B. read, writeln, etc.)
Was sind strukturierte Anweisungen?
- bedingte Anweisung
(if condition then statement (else statement)) - Laufanweisung
(for identifier := expression [to; downto] expression do statement) - while-Schleife
(while expression do statement) - repeat-Schleife
(repeat statement [; statement; …; statement] until expression)
Sequenz
Aufeinanderfolge von Anweisungen, die jeweils durch ein Semikolon getrennt sind
Welche Datentypen können mit read() eingelesen werden?
char, integer oder real
Welche Datentypen können mit write() ausgegeben werden?
char, integer, real, boolean oder string
In welcher Form können Daten mit write() ausgegeben werden?
x -> “normale” Ausgabe
x: b -> b legt die minimale Feldbreite fest; umfasst x weniger Zeichen, werden vorne Leerzeichen angefügt
x: b:k -> nur real; k gibt die maximale Anzahl an Nachkommastellen an, auf die ggf. gerundet wird
Wie sollten bedingte Anweisungen i.d.R. geschachtelt werden? Warum?
Nur den else-Zweig schachteln, um Zuordnung verschiedener else-Zweife zu den then-Zweigen zu vereinfachen und dangling else zu vermeiden.
Wie werden einfache Datentypen selbst definiert?
type
identifier = type
Bezeichner beginnt mit t (tBezeichner).
Wie wird ein Aufzählungstyp (enumerated type) definiert?
type
identifier = (identifier, identifier, …)
Beispiel:
tFarbe = (rot, gelb, gruen, blau);
Aufzählungstypen dürfen nicht aus Werten anderer Datentypen bestehen.
Wie wird ein Ausschnittstyp (subrange type) definiert?
type
identifier = constant..constant
Beispiel
tPositiveZahl = 1..maxint;
tEinstellig = 0..9;
Wann werden die einzelnen Schleifenarten sinnvoll eingesetzt?
repeat-Schleife: Schleife soll unabhängig von den Eingangswerten einmal durchlaufen werden
while-Schleife: Schleife soll für bestimmte Werte nicht durchlaufen werden
for-Schleife: die Anzahl der Schleifendurchläufe steht vor Eintritt in die Schleife fest
strukturierte Datentypen
Möglichkeit, bei Bedarf mehrere Werte (gleichen oder unterschiedlichen Typs) in einem Objekt zusammenzufassen
Arten von strukturierten Datentypen
- Feldtyp (array)
- Verbundtyp (record)
Wie wird ein (eindimensionaler) Feldtyp definiert?
array[index type] of component type
Indextyp muss endlich und kann Aufzählungs-, Ausschnittstyp, char, boolean sein.
Komponententyp ist beliebig.
Wie wird ein mehdimensionaler Feldtyp definiert?
array[index type, index type] of component type
Beispiel
tMatrix = array[tZeile, tSpalte] of integer;
Wie wird ein Verbundtyp definiert?
record field identifier, field identifier : type; field identifier : type end
Komponententypen sind beliebig.
Wie wird auf eine Komponente eines Verbunds zugegriffen?
Beispiel:
Zeit = record Stunde : 0..23; Minute : 0..59; Sekunde : 0..59 end;
write(‘Es ist ‘, Zeit.Stunde, ‘ Uhr, ‘, Zeit.Minute, ‘ Minuten und ‘, Zeit.Sekunde, ‘ Sekunden.’);
Bereichsüberschreitung
Tritt bei dem Versuch, ein Feldelement mit einem Indexwert anzusprechen, der nicht existiert.
Beispiel:
Zwerg = array[1..7] of tZwerg
Zwerg[8].Name := ‘Riese’;
=> Bereichsüberschreitung
indizierte Variable
einzelne Komponente eines Feldtyps
selektierte Variable
aufgerufene Komponente eines Verbundtyps
eof
Tastenkombination d (UNIX) bzw. z (MS-DOS)
Prüfung z.B.
if eof then
{ Eingabeende }
Funktionskopf
function identifier : result type; ODER function identifier (identifier, identifier : type; identifier : type) : result type;
Funktions- / Prozedurrumpf
Vereinbarungsteil
(lokale Konstanten-, Typen-, Variablen-, Funktionsvereinbarungen)
Anweisungsteil
Prozedurkopf
procedure identifier;
ODER
procedure identifier (identifier : type; var identifier, identifier : type; var identifier : type);
Funktionsaufruf
identifier(aktuelle Parameter)
Ein Funktionsaufruf ist Teil eines Ausdrucks.
(if identifier(aktuelle Parameter) then…
x := identifier(aktuelle Parameter);
etc.)
aktueller Parameter
Wert, mit dem ein formaler Parameter beim Aufruf besetzt wird
formaler Parameter
Im Funktions- / Prozedurkopf deklarierte / definierte Parameter
Prozeduraufruf
identifier(aktuelle Parameter);
Ein Prozeduraufruf ist ein eigenständiger Befehl.
in-Parameter
inIdentifier : type;
- lokale Konstante
- wird über Parameterliste übergeben und im Rahmen der Funktion / Prozedur nicht geändert
- Parameter in Funktionen sind immer in-Parameter
out-Parameter
var outIdentifier : type;
- wird nicht zur Berechnung innerhalb der Prozedur benutzt
- bekommt einen Wert zugewiesen, der nach Prozedurausführung nach außen “abgeliefert” wird
- eigentlich gibt es in Pascal keine echten out-Parameter
inout-Parameter
var ioIdentifier : type;
- wird über Parameterliste eingelesen
- wird während Prozedurausführung verändert
- gibt nach Prozedurausführung den geänderten Wert zurück
Wertübergabe (call-by-value)
in-Parameter
Referenzübergabe (call-by-reference)
io-Parameter;
tatsächlich auch out-Parameter
Voranstellung von “var”
-> var-Parameter
Wann ist eine Konstante / Variable lokal?
Ein Objekt ist lokal zu dem Block, in dem er vereinbart wird. Er kann von äußeren Blöcken nicht angesprochen werden.
Wann ist eine Konstante / Variable global?
Ein Objekt ist global zu allen dem Block, in dem es vereinbart ist, lokalen Blöcken.
Gültigkeitsbereich
Bereich, in dem ein Objekt angesprochen werden kann, also der Block, in dem es vereinbart ist, sowie in ihm geschachtelte Blöcke
Schachtelung
Deklaration einer Prozedur in einer Prozedur
Namenskonflikt
- ein bereits vergebener Bezeichner wird in einem inneren Block neu belegt
- sollte in jedem Fall vermieden werden
In diesem Fall gilt jeweils die in der Struktur am nächsten an einem inneren Block gelegene Vereinbarung.
statische Blockstruktur
Die sich aus den verschiedenen Blöcken durch Aneinanderreihung und Schachtelung ergebende, am (statischen) Programmtext ablesbare, Struktur eines Programms.
dynamische Blockstruktur
Ergibt sich auf den (dynamischen) Prozeduraufrufen während der Laufzeit.
Jede neu aufgerufene Prozedur erzeugt einen neuen Block in dem Block, aus dem sie aufgerufen wird.
Abhängig von Eingabedaten (da der Prozeduraufruf u.U. über Abfragen erfolgt).
Existenz, Lebensdauer
Eine Variable existiert, solange der Block, zu dem sie lokal ist, ausgeführt wird.
Lebensdauer <> Gültigkeitsbereich
Seiteneffekt
Schwierig zu kontrollierende und daher schnell zu Fehlern führende Effekte auf die Programmfunktion durch Prozeduren / Funktionen.
Zu vermeiden.
Entstehen durch:
- Modifikation globaler Variablen
- Änderungs- oder Ausgangsparameter in Funktionen