Uppgift 8 ­ PM1/PK HT-02


Uppgift 8 måste lämnas senast tisdag 19/11 kl. 08:00. Lämna in den med hjälp av inlämningssystemet i slutet av denna sidan.

Efter denna laboration ska du kunna...

Före laborationen

Din inlämning

Överst i din fil ska följande finnas (inom kommentartecken):

Uppgiften

Problem 1

En mängd är en datastruktur som fungerar som en (ändlig) matematisk mängd), det vill säga den innehåller en (godtycklig) samling element. På det sättet liknar den listor men den skiljer sig från listor på två punkter:

Du ska implementera en abstrakt datatyp ''a set som skall representera mängder som innehåller element av godtycklig (likhets-)typ. Eftersom mängder är så lika listor, förutom de nyss nämnda skillnaderna, är en enkel variant att använda listor för att hålla reda på vilka element som finns i mängden, men att skriva operationerna på den abstrakta datatypen , så man vet att listan alltid representerar en korrekt mängd.

Tänk på att det kan vara lättare använda datatype i stället för abstype under programutveckling och felsökning, och att göra om det hela till abstype först när man är klar.

OBS! Notera att körexemplen i den här uppgiften blir av en mer abstrakt typ, eftersom abstype-typer inte kan visas upp. I exemplen kommer mängder att skrivas {a, b, c}, men det är alltså inte så det faktiskt ser ut. Använder du datatype skall du få en lista istället som innehåller samma element men i godtycklig ordning. När du byter till abstype kommer du förstås inte att se något alls av hur datastrukturen egentligen ser ut.

Du ska skapa primitiver för att hantera mängder. Tänk på att en invariant för hur du representerar mängder är att den interna listan aldrig får innehåller några dubletter.

Problem 2

Givet ovanstående primitiver, men utan att utnyttja att du vet hur mängder ser ut "inuti", definiera följande funktioner utanför datatypen:

Exempel:

- isSubset(x, x);
> val it = true : bool
- isSubset(addToSet("a",emptySet), x);
> val it = true : bool
- val y = addToSet("b", addToSet("c", emptySet));
> val y = {"c", "b"} : string set
- isSubset(y, x);
> val it = false : bool
- listToSet(["a","b"])
> val it = {"a","b"} : string set
- unionSet(x, y)
> val it = {"a", "b", "c"} : string set
- intersectionSet(x, y);
> val it ={"b"} : string set

Inlämning

Hämta ett formulär för att lämna in uppgiften genom att fylla i fälten nedan.

ID:
PIN:
formulär för inlämning

lhe@csd.uu.se The page has been accessed [an error occurred while processing this directive] times.

Valid HTML 4.01!