Pascal - Aufzeichnungen
Mit Pascal-Arrays können Sie Variablentypen definieren, die mehrere Datenelemente derselben Art enthalten können. Ein Datensatz ist jedoch ein weiterer in Pascal verfügbarer benutzerdefinierter Datentyp, mit dem Sie Datenelemente verschiedener Arten kombinieren können.
Datensätze bestehen aus verschiedenen Feldern. Angenommen, Sie möchten Ihre Bücher in einer Bibliothek verfolgen, möchten Sie möglicherweise die folgenden Attribute für jedes Buch verfolgen:
- Title
- Author
- Subject
- Buch-ID
Datensatz definieren
Um einen Datensatztyp zu definieren, können Sie die Typdeklarationsanweisung verwenden. Der Datensatztyp ist definiert als -
type
record-name = record
field-1: field-type1;
field-2: field-type2;
...
field-n: field-typen;
end;
Hier ist die Art und Weise, wie Sie den Buchdatensatz deklarieren würden -
type
Books = record
title: packed array [1..50] of char;
author: packed array [1..50] of char;
subject: packed array [1..100] of char;
book_id: integer;
end;
Die Datensatzvariablen werden wie gewohnt definiert als
var
r1, r2, ... : record-name;
Alternativ können Sie eine Datensatztypvariable direkt als - definieren
var
Books : record
title: packed array [1..50] of char;
author: packed array [1..50] of char;
subject: packed array [1..100] of char;
book_id: integer;
end;
Zugriff auf Felder eines Datensatzes
Um auf ein Feld eines Datensatzes zuzugreifen, verwenden wir den Member Access Operator (.). Der Mitgliedszugriffsoperator wird als Punkt zwischen dem Namen der Datensatzvariablen und dem Feld codiert, auf das wir zugreifen möchten. Das folgende Beispiel erläutert die Verwendung der Struktur:
program exRecords;
type
Books = record
title: packed array [1..50] of char;
author: packed array [1..50] of char;
subject: packed array [1..100] of char;
book_id: longint;
end;
var
Book1, Book2: Books; (* Declare Book1 and Book2 of type Books *)
begin
(* book 1 specification *)
Book1.title := 'C Programming';
Book1.author := 'Nuha Ali ';
Book1.subject := 'C Programming Tutorial';
Book1.book_id := 6495407;
(* book 2 specification *)
Book2.title := 'Telecom Billing';
Book2.author := 'Zara Ali';
Book2.subject := 'Telecom Billing Tutorial';
Book2.book_id := 6495700;
(* print Book1 info *)
writeln ('Book 1 title : ', Book1.title);
writeln('Book 1 author : ', Book1.author);
writeln( 'Book 1 subject : ', Book1.subject);
writeln( 'Book 1 book_id : ', Book1.book_id);
writeln;
(* print Book2 info *)
writeln ('Book 2 title : ', Book2.title);
writeln('Book 2 author : ', Book2.author);
writeln( 'Book 2 subject : ', Book2.subject);
writeln( 'Book 2 book_id : ', Book2.book_id);
end.
Wenn der obige Code kompiliert und ausgeführt wird, ergibt sich das folgende Ergebnis:
Book 1 title : C Programming
Book 1 author : Nuha Ali
Book 1 subject : C Programming Tutorial
Book 1 book_id : 6495407
Book 2 title : Telecom Billing
Book 2 author : Zara Ali
Book 2 subject : Telecom Billing Tutorial
Book 2 book_id : 6495700
Datensätze als Unterprogrammargumente
Sie können einen Datensatz als Unterprogrammargument auf sehr ähnliche Weise übergeben wie jede andere Variable oder jeden anderen Zeiger. Sie würden auf die Datensatzfelder auf ähnliche Weise zugreifen wie im obigen Beispiel -
program exRecords;
type
Books = record
title: packed array [1..50] of char;
author: packed array [1..50] of char;
subject: packed array [1..100] of char;
book_id: longint;
end;
var
Book1, Book2: Books; (* Declare Book1 and Book2 of type Books *)
(* procedure declaration *)
procedure printBook( var book: Books );
begin
(* print Book info *)
writeln ('Book title : ', book.title);
writeln('Book author : ', book.author);
writeln( 'Book subject : ', book.subject);
writeln( 'Book book_id : ', book.book_id);
end;
begin
(* book 1 specification *)
Book1.title := 'C Programming';
Book1.author := 'Nuha Ali ';
Book1.subject := 'C Programming Tutorial';
Book1.book_id := 6495407;
(* book 2 specification *)
Book2.title := 'Telecom Billing';
Book2.author := 'Zara Ali';
Book2.subject := 'Telecom Billing Tutorial';
Book2.book_id := 6495700;
(* print Book1 info *)
printbook(Book1);
writeln;
(* print Book2 info *)
printbook(Book2);
end.
Wenn der obige Code kompiliert und ausgeführt wird, ergibt sich das folgende Ergebnis:
Book 1 title : C Programming
Book 1 author : Nuha Ali
Book 1 subject : C Programming Tutorial
Book 1 book_id : 6495407
Book 2 title : Telecom Billing
Book 2 author : Zara Ali
Book 2 subject : Telecom Billing Tutorial
Book 2 book_id : 6495700
Zeiger auf Aufzeichnungen
Sie können Zeiger auf Datensätze auf sehr ähnliche Weise definieren, wie Sie Zeiger auf eine andere Variable wie folgt definieren:
type
record-ptr = ^ record-name;
record-name = record
field-1: field-type1;
field-2: field-type2;
...
field-n: field-typen;
end;
Jetzt können Sie die Adresse einer Datensatztypvariablen in der oben definierten Zeigervariablen speichern. Um eine Variable des erstellten Zeigertyps zu deklarieren, verwenden Sie das Schlüsselwort var -
var
r1, r2, ... : record-ptr;
Bevor Sie diese Zeiger verwenden, müssen Sie einen Speicher für eine Variable vom Typ Datensatzname erstellen, die von diesen Zeigern bearbeitet wird.
new(r1);
new(r2);
Um mit einem Zeiger auf diesen Datensatz auf die Mitglieder eines Datensatzes zuzugreifen, müssen Sie das ^ verwenden. Betreiber wie folgt -
r1^.feild1 := value1;
r1^.feild2 := value2;
...
r1^fieldn := valuen;
Vergessen Sie nicht, den gebrauchten Speicher zu entsorgen, wenn er nicht mehr verwendet wird.
dispose(r1);
dispose(r2);
Lassen Sie uns das erste Beispiel mit einem Zeiger auf den Buchdatensatz neu schreiben. Ich hoffe, dass Sie das Konzept leicht verstehen können -
program exRecords;
type
BooksPtr = ^ Books;
Books = record
title: packed array [1..50] of char;
author: packed array [1..50] of char;
subject: packed array [1..100] of char;
book_id: longint;
end;
var
(* Declare Book1 and Book2 of pointer type that refers to Book type *)
Book1, Book2: BooksPtr;
begin
new(Book1);
new(book2);
(* book 1 specification *)
Book1^.title := 'C Programming';
Book1^.author := 'Nuha Ali ';
Book1^.subject := 'C Programming Tutorial';
Book1^.book_id := 6495407;
(* book 2 specification *)
Book2^.title := 'Telecom Billing';
Book2^.author := 'Zara Ali';
Book2^.subject := 'Telecom Billing Tutorial';
Book2^.book_id := 6495700;
(* print Book1 info *)
writeln ('Book 1 title : ', Book1^.title);
writeln('Book 1 author : ', Book1^.author);
writeln( 'Book 1 subject : ', Book1^.subject);
writeln( 'Book 1 book_id : ', Book1^.book_id);
(* print Book2 info *)
writeln ('Book 2 title : ', Book2^.title);
writeln('Book 2 author : ', Book2^.author);
writeln( 'Book 2 subject : ', Book2^.subject);
writeln( 'Book 2 book_id : ', Book2^.book_id);
dispose(Book1);
dispose(Book2);
end.
Wenn der obige Code kompiliert und ausgeführt wird, ergibt sich das folgende Ergebnis:
Book 1 title : C Programming
Book 1 author : Nuha Ali
Book 1 subject : C Programming Tutorial
Book 1 book_id : 6495407
Book 2 title : Telecom Billing
Book 2 author : Zara Ali
Book 2 subject : Telecom Billing Tutorial
Book 2 book_id : 6495700
Die With-Anweisung
Wir haben diskutiert, dass auf die Mitglieder eines Datensatzes mit dem Mitgliedszugriffsoperator (.) Zugerechnet werden kann. Auf diese Weise muss der Name der Datensatzvariablen jedes Mal geschrieben werden. DasWith Anweisung bietet eine alternative Möglichkeit, dies zu tun.
Schauen Sie sich das folgende Code-Snippet aus unserem ersten Beispiel an:
(* book 1 specification *)
Book1.title := 'C Programming';
Book1.author := 'Nuha Ali ';
Book1.subject := 'C Programming Tutorial';
Book1.book_id := 6495407;
Die gleiche Aufgabe könnte mit dem geschrieben werden With Aussage als -
(* book 1 specification *)
With Book1 do
begin
title := 'C Programming';
author := 'Nuha Ali ';
subject := 'C Programming Tutorial';
book_id := 6495407;
end;