Ahojte, nevite prosim nekdo, jak se poprat s timto ukolem. Ja bych ho dokazala vyresit, ale jinak nez nam byla stanovena kriteria.
Podstata problému: Protože Pascal umožňuje zpracovávat množiny s omezenou kardinalitou (např. u typu set of BYTE je to max. 256 prvků), je vaším úkolem toto omezení obejít pomocí definice abstraktního datového typu "tSet", který budete v Pascalu implementovat jako pole několika množin "set of byte". V jazyce C, kde typ množina není obsažen vůbec, budete používat pole prvků typu unsigned char.
K práci s datovým typem tSet nadefinujte a implementujte následující metody:
procedure CreateSet(var M: tSet); - vytvoří novou množinu M s kardinalitou K prvků, kde K je konstanta
procedure ClearSet (var M : tSet); - z M se stane prázdná množina
procedure AddSet (var M : tSet; n : integer); - Přidá do množiny M prvek n. Pokud dojde k chybě (prvek nemůže být součástí množiny), nedělá procedura nic.
procedure DelSet (var M : tSet; n : integer); - ubere z množiny M prvek n. Pokud dojde k chybě (prvek nemůže být součástí množiny), nedělá procedura nic.
function InSet (M : tSet; n : integer) : boolean; - vrátí True, pokud se prvek n v množině M nachází. Vrátí False, pokud se prvek n v množině M nenachází nebo pokud prvek být v množině nemůže.
procedure DiffSet (var M1 : tSet; M2 : tSet); - rozdíl množin M1 a M2 (tj. výsledek obsahuje prvky množiny M1, které se nenacházejí v M2). Výsledek se vrací v M1.
function EquSet (M1 : tSet; M2 : tSet) : boolean; - Test množin M1 a M2 na rovnost.
procedure UnionSet (var M1 : tSet; M2 : tSet); - provede sjednocení množin M1 a M2, výsledek uloží do M1
procedure IntersectSet (var M1 : tSet; M2 : tSet); - provede průnik množin M1 a M2, výsledek uloží do M1
Fórum › Pascal
Množina s libovolnou kardinalitou
Buhehe... přesně na tohle zadání se mě ptali tři lidi tři roky po sobě, přibližně ve stejnou dobu. Jsi čtvrtá. Ten učitel vážně nemá fantazii :-).
V zadání je chyba. Z definice množiny (množina je soubor prvků, z nichž každý je v ní obsažen maximálně jednou) vyplývá, že jestli se do ní má vkládat typ byte (což je v zadání požadováno - "set of byte"), tak se jich tam může nacpat stejně jenom 256, pak už by to nebyla množina (protože byte nabývá jenom 256 různých hodnot). Kdyby se tam měly vkládat integery, tak se to zase nedá složit z několika množin "set of...", protože integer do setu nenacpeš.
Podle toho zadání jsem zbastlil takové poměrně kostrbaté řešení založené na dynamických polích, do kterých se vkládají přímo čísla: http://mircosoft.ic.cz/download/mnoziny.pas.
Kdybys chtěla něco prakticky použitelného, tak v téhle jednotce http://mircosoft.ic.cz/download/NFSUP.PAS jsem to vyřešil bitovými poli (což je technika, kterou používají i standardní množiny) a trochou Assembleru.
Vyřiďte už někdo konečně autorovi toho zadání, že si má vymyslet něco nového, že už mě to nebaví :smile20:
Moje stránka.
Přidej příspěvek
Ano, opravdu chci reagovat → zobrazí formulář pro přidání příspěvku
×Vložení zdrojáku
×Vložení obrázku
×Vložení videa
Uživatelé prohlížející si toto vlákno
Podobná vlákna
Množina s libovolnou mocností — založil Mich
Množina — založil ukulele
Juliova množina z JS — založil Matěj Andrle
Množina relacie — založil Nika
Množina bez násobků — založil Sak
Moderátoři diskuze