Diskussion:Programmierkurs: Delphi: Pascal: Sets

Letzter Kommentar: vor 14 Jahren von Dannys9 in Abschnitt Alternative zu for z in Lottozahlen

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
Zurück zur Seite „Programmierkurs: Delphi: Pascal: Sets“.