![]() |
Frage zum Pascal-Programmcode
Hi
habe folgenden Pascalcode
Delphi-Quellcode:
kann damit aber leider wenig anfangen!? Könnt ihr mir erläutern, was damit gemeint seien könnte?
Zeichentyp = (z, b);
AlphaNum = record case Zeichentyp of z: (ziffer: Ziffer); b: (buchst: Buchstabe); end; Gruß fcg |
Re: Frage zum Pascal-Programmcode
in deinem Fall sind die Records möglich:
Delphi-Quellcode:
Also je nachdem was für einen Wert "Zeichentyp" hat, ist eines der beiden anderen Elemente verfügbar.
//Wenn Zeichentyp den Wert "z" hat
record Zeichentyp ziffer end; //Wenn Zeichentyp den Wert "b" hat record zeichentyp buchst end; |
Re: Frage zum Pascal-Programmcode
und wo steckt der Sinn von solchen Konstrukten?
Wir sind hier ja nicht bei "C", wo das Ziel ist, andere Leser des Quellcodes zu verwirren ;-) |
Re: Frage zum Pascal-Programmcode
.. man einen Wert auf verschiedene Weise interpretieren - das ist wohl der
Hauptgrund für solche Konstrukte. Grüße Klaus |
Re: Frage zum Pascal-Programmcode
Arbeitsspeicherplatz zu sparen :mrgreen:
da nur ein Teil des Records im Speicher reserviert werden muss und nicht das komplette Konstrukt :zwinker: |
Re: Frage zum Pascal-Programmcode
ja, sind halt Uni Aufgaben ;-)
Delphi-Quellcode:
Welche Werte kann dann eine Variable vom Typ Zeichentyp annehmen, da ja z,bb irgendwie nicht weiter definiert sind, oder?
type Ziffer = '0'..'9';
Buchstabe = 'A'..'Z'; Matrikelnummer = array [1..7] of Ziffer; Kennzeichen = record stadt: array [1..3] of Buchstabe; buchstaben: array [1..2] of Buchstabe; zahl: Integer; end; Zeichentyp = (z, b); AlphaNum = record case Zeichentyp of z: (ziffer: Ziffer); b: (buchst: Buchstabe); end; |
Re: Frage zum Pascal-Programmcode
Moin Raven,
das Ganze nennt sich auch "Variante Records" (entspricht also, AFAIK, ungefähr, den Unions in C). Sinn macht es vor allem dann, wenn Du mit den Records Daten aus Dateien ausliesen, bei denen bestimmte Stellen unterschiedliche Bedeutung haben können (z.B., wenn man Monitordaten, EDID, auslesen will, gibt es solche Stellen, bei denen ein Bereich einen String , oder aber auch andere Monitordaten enthalten kann). Du musst dann nicht verschiedene Records deklarieren, und vorher prüfen welchen Record-Typ Du brauchst. Normalerweise dürfen die varianten Teile nur am Ende des Records stehen. Man kann sich aber mit einem "Trick" behelfen, indem man einfach einen Datentyp deklariert, der nur aus einem varianten Teil besteht, und diesen dann an beliebiger Stelle in einem anderen Record als Datentyp verwendet. Nachteil: Der variante Teil ist immer so lang, wie der längste Teil. BTW: Beim IBM 370-Assembler ist es vergleichbar mit der Dummy-Section. |
Re: Frage zum Pascal-Programmcode
.. hier mal etwas zur Erhellung ->
![]() Grüße Klaus [edit] da war der Christian schneller [/edit] |
Alle Zeitangaben in WEZ +1. Es ist jetzt 10:17 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz