Programmierkurs: Delphi: Pascal: Grundlegende Datentypen

Aus Wikibooks
Zur Navigation springen Zur Suche springen

Grundlegende Datentypen[Bearbeiten]

Allgemeines[Bearbeiten]

Um in Pascal programmieren zu können, muss man wissen, dass verschiedene Datentypen existieren. Pascal ist dabei eine sehr genaue bzw. strikte Sprache, die jede falsche Verwendung von Datentypen mit einer Fehlermeldung ahndet. Doch was sind nun Datentypen?

Die von einem Programm verwendeten Daten werden in einer Bitfolge im Speicher abgelegt. Je nachdem, wie diese Bitfolge wieder ausgelesen wird, können sich wieder völlig andere Daten ergeben. Um hier keine ungewollten Programmabstürze zu produzieren, wird jedem Speicherbereich ein bestimmter Datentyp zugeordnet. Mit den Datentypen können verschiedene Operationen durchgeführt werden, zum Beispiel kann man mit Zahlen rechnen, mit Buchstaben jedoch nicht. Durch die strikte Verwendung von Datentypen ist sichergestellt, dass die gespeicherten Daten nur ihrer Bestimmung gemäß verwendet werden. Nun ja, fast immer, denn keine Regel ohne Ausnahme. Aber dazu später mehr.

Texttypen[Bearbeiten]

Für die Bearbeitung von Text gibt es zwei verschiedene Zeichentypen: für einzelne Zeichen und für Zeichenketten. Ein Zeichen ist dabei im Grunde alles das, was Sie mit Ihrer Tastatur auf den Bildschirm zaubern können, also Buchstaben, Ziffern (mit denen man aber nicht rechnen kann), Interpunktions- und andere Sonderzeichen usw.

Der Typ Char[Bearbeiten]

Der Typ Char dient dazu, ein einzelnes ASCII-Zeichen zu speichern.

var
  c: Char;
begin
  c := 'a'; // c den Buchstaben a zuweisen
end.


Um nicht druckbare Zeichen in einem Char zu speichern, oder einfach ein Zeichen mit einem bestimmten ASCII-Code einzufügen, kann das #-Zeichen, gefolgt von einer Ganzzahl genutzt werden:

var
  c: Char;
begin
  c := #64; // c das Zeichen mit dem ASCII-Code 64 zuweisen (= '@')
end.


Tipp:

Info bulb.png

Jedoch sind nicht alle Zeichen gleich ASCII-Zeichen. Solange wir uns in der Konsole befinden, gibt es für uns förmlich keine anderen Zeichen. Jedoch werden Sie feststellen, dass grafische Anwendungen wie Word auch Unicode anbieten. Unicode enthält aber mehr Zeichen als ASCII. Dadurch ist zum Speichern eines Zeichens auch mehr als ein Byte notwendig. Somit dürfte es auch klar sein, dass wir in Pascal ohne weiteres nicht mit Unicode arbeiten können. Und das wird sich auch mit Delphi (bis Version 2007) nicht ändern.


Der Typ String[Bearbeiten]

Der Typ String bezeichnet eine Zeichenkette mit variabler Länge. Das heißt, er kann keine Zeichen, ein Zeichen oder auch mehrere beinhalten.

Strings müssen im Quelltext immer von Apostrophen umschlossen werden, dies wird von Delphi standardmäßig blau hervorgehoben:

var
  s: string;
begin
  s := 'Dies ist ein String';
end.


Mehrere Strings lassen sich miteinander mit Hilfe des +-Operators zu einem größeren Text verknüpfen (konkatenieren). Wenn wir beispielsweise an „Dies ist ein String“ noch „ und wird in s gespeichert.“ hängen wollen, so können wir das mit dem so genannten Verknüpfungs- oder Verkettungsoperator tun. Dieser Operator ist ein Pluszeichen (+). Doch genug zur Theorie. Unser Beispiel sähe so aus:

s := 'Dies ist ein String';             // s = "Dies ist ein String"
s := s + ' und wird in s gespeichert.'; // s = "Dies ist ein String und wird in s gespeichert."


Auch Steuerzeichen können genauso wie bei Char verwendet werden:

s := s + #10;  // Linefeed an s anhängen (dezimale Schreibweise)
s := s + #$20; // Leerzeichen an s anhängen (hexadezimale Schreibweise)


So wird im Prinzip jedes Zeichen im String gespeichert. Dies erklärt auch, warum man mit Zahlen in einem String nicht rechnen kann, obwohl sie im String gespeichert werden können.

Um ein einzelnes Zeichen eines Strings anzusprechen, genügt es, in eckigen Klammern dahinter zu schreiben, welches Zeichen man bearbeiten oder auslesen möchte.

Writeln('Der erste Buchstabe des Strings ist ein "' + s[1] + '".');


Verwendung beider Typen untereinander[Bearbeiten]

Die Datentypen Char und String sind in gewisser Weise kompatibel. Man kann z.B. ein Char an einen String anhängen oder ein Zeichen aus einem String in einem Char speichern:

c := 'X';                      // c = "X"
s := 'Hier ein Zeichen: ' + c; // s = "Hier ein Zeichen: X"
c := s[3];                     // c = "e"


Ganzzahlige Typen[Bearbeiten]

Ganzzahlige Variablen können, wie der Name schon sagt, ganze bzw. natürliche Zahlen speichern. Der am häufigsten gebräuchliche Typ in dieser Variablenart ist „Integer“. Mit diesen Zahlen lässt sich dann auch rechnen.

Datentypen zum Umgang mit natürlichen Zahlen[Bearbeiten]

Eine Variable vom Typ „Integer“ bezeichnet eine 32 Bit große Ganzzahl mit Vorzeichen, es können somit Werte von -231 bis 231-1 dargestellt werden.

Das nachfolgende Beispiel zeigt einige Möglichkeiten zur Verwendung von Variablen. Nach jedem Schritt wird mittels Writeln der Name der Variable und danach der Wert der selbigen ausgegeben.

Code:

var
  i, j: Integer;
begin
  i := 10;
  WriteLn('i ', i);
  j := i;
  WriteLn('j ', j);
  i := 12;
  WriteLn('i ', i);
  WriteLn('j ', j);
  ReadLn;
end.

Ausgabe:

i 10
j 10
i 12
j 10


Hier wird deutlich, dass bei der Zuweisung einer Variablen an eine andere nur der Wert übertragen (kopiert) wird.

Außerdem kann wie gewohnt mit +, - und * gerechnet werden. Eine Division wird für Ganzzahltypen durch div dargestellt. Um den Rest einer Division zu erhalten, wird der mod-Operator verwendet. Der Compiler beachtet auch Punkt-vor-Strich Rechnung und Klammerung.

i := 10;        // i ist jetzt 10
i := i * 3 + 5; // i ist jetzt 35
i := 10 div 3;  // i ist jetzt 3
i := 10 mod 3;  // i ist jetzt 1 (Rest von 10 ÷ 3)


Weitere ganzzahlige Datentypen[Bearbeiten]
Name Wertbereich
Shortint -128..127
Smallint -32768..32767
Longint (entspricht Integer) -231..231-1
Int64 -263..263-1
Byte 0..255
Word 0..65535
Cardinal/Longword 0..232-1

Gleitkommazahlen[Bearbeiten]

Die Datentypen Single, Double und Extended[Bearbeiten]

Mit den ganzzahligen Datentypen lassen sich nur gerundete Divisionen durchführen. Brüche wie 1/2 sind daher nicht sinnvoll auszuwerten. Um auch Nachkommastellen berechnen zu können, existieren in Pascal die Gleitkommatypen Single, Double und Extended. Der Unterschied zwischen diesen Typen besteht in der Genauigkeit, mit der die Daten gespeichert werden. Die folgende Tabelle zeigt den jeweiligen Wertebereich der einzelnen Typen:

Name Wertbereich Speicherbedarf
Single -1,5 × 1045 .. 3,4 × 1038 4 Byte
Double -5,0 × 10324 .. 1,7 × 10308 8 Byte
Extended -3,6 × 104951 .. 1,1 × 104932 10 Byte

Daneben existieren unter Delphi noch die folgenden besonderen Typen:

Real48 -2,9 × 1039 .. 1,7 × 1038 6 Byte
Real Derzeit das Gleiche wie Double  
Comp -263+1 .. 263-1 8 Byte
Currency -922337203685477.5808..922337203685477.5807 8 Byte
  • Extended bietet zwar die höchste Genauigkeit, ist aber stark an das System gebunden. Wenn Daten in diesem Format gespeichert werden und auf anderen Rechnern verwendet werden sollen, kann dies zu Problemen führen.
  • Real48 ist veraltet und sollte nur noch zur Kompatibilität mit alten Pascal-Programmen verwendet werden.
  • Real sollte ebenfalls nicht unbedingt verwendet werden, da dieser Typ keine festgelegte Genauigkeit besitzt. In älteren Programmen war dieser Typ gleichbedeutend mit Real48, heute mit Double.
  • Comp ist ein „Mischtyp“ zwischen ganzen Zahlen und Gleitkommazahlen und ebenfalls veraltet (genaueres in der Hilfe von Delphi)
  • Currency ist ein spezieller Typ einer Festkommazahl zur Verwendung mit Währungen. Er weist ebenfalls ein besonderes Verhalten bei der Wertzuweisung auf, näheres in der Delphi-Hilfe.

Die Division können Sie nun mit Hilfe des Operators „/“ statt mit div durchführen. Als Zähler und Nenner können sowohl Ganzzahl- als auch Gleitkommavariablen verwendet werden. Bei der direkten Zuweisung eines gebrochenen Wertes wird die englische Schreibweise verwendet, sprich: das Komma wird durch einen Punkt ersetzt:

 x := 1.34;


Wahrheitswerte[Bearbeiten]

Der Datentyp Boolean[Bearbeiten]

Der Typ Boolean ermöglicht es, einen Wahrheitswert zu speichern. Mögliche Werte sind true (wahr) und false (falsch). Auch der Wert kann wiederum der Variable zugewiesen werden:

var
  a: Boolean;
begin
  a := True;
end.


Auf diesen Variablentyp wird im Kapitel Verzweigungen näher eingegangen.


Arrow left.png Pascal: Das erste Programm Inhaltsverzeichnis Pascal: Aufzählungen Arrow right.png