Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Frage zum Pascal-Programmcode (https://www.delphipraxis.net/72634-frage-zum-pascal-programmcode.html)

fcg 4. Jul 2006 12:28


Frage zum Pascal-Programmcode
 
Hi

habe folgenden Pascalcode

Delphi-Quellcode:
     Zeichentyp    = (z, b);

     AlphaNum      = record
                        case Zeichentyp of
                          z: (ziffer: Ziffer);
                          b: (buchst: Buchstabe);
                      end;
kann damit aber leider wenig anfangen!? Könnt ihr mir erläutern, was damit gemeint seien könnte?

Gruß
fcg

Angel4585 4. Jul 2006 12:33

Re: Frage zum Pascal-Programmcode
 
in deinem Fall sind die Records möglich:

Delphi-Quellcode:
//Wenn Zeichentyp den Wert "z" hat
record
Zeichentyp
ziffer
end;

//Wenn Zeichentyp den Wert "b" hat
record
zeichentyp
buchst
end;
Also je nachdem was für einen Wert "Zeichentyp" hat, ist eines der beiden anderen Elemente verfügbar.

RavenIV 4. Jul 2006 12:39

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 ;-)

Klaus01 4. Jul 2006 12:43

Re: Frage zum Pascal-Programmcode
 
.. man einen Wert auf verschiedene Weise interpretieren - das ist wohl der
Hauptgrund für solche Konstrukte.

Grüße
Klaus

Angel4585 4. Jul 2006 12:48

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:

fcg 4. Jul 2006 12:50

Re: Frage zum Pascal-Programmcode
 
ja, sind halt Uni Aufgaben ;-)

Delphi-Quellcode:
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;
Welche Werte kann dann eine Variable vom Typ Zeichentyp annehmen, da ja z,bb irgendwie nicht weiter definiert sind, oder?

Christian Seehase 4. Jul 2006 12:53

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.

Klaus01 4. Jul 2006 12:54

Re: Frage zum Pascal-Programmcode
 
.. hier mal etwas zur Erhellung -> http://www.db.informatik.uni-kassel..../pas_recv.html

Grüße
Klaus

[edit] da war der Christian schneller [/edit]


Alle Zeitangaben in WEZ +1. Es ist jetzt 13:29 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz