Diskussion:Programmierkurs: Delphi: Pascal: Sets
Abschnitt hinzufügenErscheinungsbild
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)
- 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)
- 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)