Na FreeHostingu Endora běžà desĂtky tisĂc webĹŻ. PĹ™idejte se ještÄ› dnes!
VytvoĹ™it web zdarmaNa FreeHostingu Endora běžà desĂtky tisĂc webĹŻ. PĹ™idejte se ještÄ› dnes!
VytvoĹ™it web zdarmavar a:set of byte; b:set of char; cisla:set of 0..9;Prvky množin tedy mohou být pouze jednobajtové ordinální typy. Následující deklarace fungovat nebudou:
a:set of byte je něco jako b:array[0..255] of bytewriteln(SizeOf(a)); {napíše 32} writeln(SizeOf(b)); {napíše 256}To je velice zajímavé. Jak je možné, že množina, která obsáhne celý rozsah typu Byte, má pouze 32 bajtů? Odpověď je nasnadě: 32*8 = 256. Množiny jsou tedy uvnitř vlastně bitovými poli. Pokud napíšeme:
a:=[20..30] (mimochodem, ne každý ví, že tento zápis je povolen), tak bude nastaven 20. až 30. bit na 1.var a:set of byte; b:array[0..31] of byte absolute a; {A a B budou sdílet stejný paměťový prostor} c:byte; begin a:=[]; {prázdná množina} a:=a+[0]; {do množiny přidám 0. Jinak řečeno, nastavím 0.bit nultého bajtu} a:=a+[1]; {do množiny přidám 1. tedy - nastavím 1.bit nultého bajtu} a:=a+[8]; {do množiny přidám 8. tedy - nastavím 0.bit prvního bajtu} writeln(b[0]); {napíše 3} writeln(b[1]); {napíše 1} readln; end.Takže, budete-li někdy psát program, který často přistupuje přímo k jednotlivým bitům, tak množiny mohou být dobrá volba.
type tyden = (po,ut,st,ct,pa,so,ne); var cisla:set of 0..9; velka_an_pismena:set of 'A'..'Z'; dny:set of tyden;Jde o to, že dosud jsme předpokládali, že množina má vždy velikost 32 bajtů. Pořád sice platí, že může mít maximálně 32 bajtů, ale v těchto případech to bude méně. A překladače se navíc v tomto ohledu trošičku liší: