Diskussion:Programmierkurs: Delphi: Pascal: Sets

Seiteninhalte werden in anderen Sprachen nicht unterstützt.
Aus Wikibooks

Fehler korrigiert[Bearbeiten]

Ich habe mal einen Fehler korrigiert und zwar: „Dazu gehören alle natürlichen Zahlen ... z. B. Integer“. Integer speichert nicht nur natürliche Zahlen, sondern alle ganzen Zahlen, also auch negative Zahlen.

Mengentypen[Bearbeiten]

Mengentypen in Delphi brauchen für jeden möglichen Wert des Basistyps ein Bit, um zu speichern, ob dieser enthalten ist. Daher muss der Basistyp ein ordianler Typ sein, der höchstens 256 verschiedene Werte annehmen kann. Ein Set ist daher 256 Bit, also 32 Byte groß. (Ein Set von LongInt-Werten wäre 0,5 GByte groß und ist nicht möglich) CorvusCorax

Alternative zu for z in Lottozahlen[Bearbeiten]

bei der Kompilierung des Abschnitts

for z in Lottozahlen do
    Writeln(z);

mit dem Free Pascal Compiler 2.4.0 bekomme ich folgende Fehlermeldung:

sets.pas(28,8) Fatal: Syntax error, ":=" expected but "in" found
Fatal: Compilation aborted
Error: /usr/bin/ppcx64 returned an error exitcode (normal if you did not specify a source file to be compiled)

Gibt es noch eine alternative Methode? -- 188.193.213.5 01:05, 16. Apr. 2010

Du kannst eine "einfache" Schleife mit Index über die Elemente benutzen:
 for i := 1 to 6 do 
     Writeln( Lottozahlen[i] );
Ich habe den Eindruck, dass dein Compiler nicht auf dem neuesten Stand ist. Allerdings habe ich jetzt nicht geprüft, mit welchem Stand der Autor des Buches arbeitet. -- Jürgen 08:51, 16. Apr. 2010 (CEST)[Beantworten]
Funktioniert leider auch nicht, da man bei einem Set keine einzelnen Elemente mit eckigen Klammern abfragen kann. Ich muss mich wohl nach einem anderen Compiler umsehen, oder das ganze mit Arrays realisieren. hp_sebastian 14:04, 16. Apr. 2010 (CEST)[Beantworten]
Das Buch ist größtenteils auf dem Stand Delphi 2006. FreePascal scheint die for...in-Schleife nicht zu kennen. Laut deren Handbuch musst du unter FreePascal Sets folgendermaßen auswerten:
type
  TLottozahl = 1..49;
  TLottoSet = set of TLottozahl;

var
  z: TLottozahl;
  Lottozahlen: TLottoSet

begin

  // Die obere füllende Schleife sollte normal funktionieren

  { alle Lottozahlen sortiert ausgeben }
  for z := 1 to 49 do
  begin
    if z in Lottozahlen then
      Writeln(z);
  end;
end.
Ich hab's allerdings auch nicht ausprobiert. --Dannys9 12:24, 18. Apr. 2010 (CEST)[Beantworten]