G
Guest
Gast
Ziel dieser Aufgabe ist die Entwicklung eines ADT (abstrakten Datentyps) für Arrays, wie sie in JAVA
verwendet werden.
Als erster Versuch sei folgender ADT gegeben, wobei T der Typ der Arrayelemente sei:
Signatur
create !Array
set Array×int×T !Array
get Array×int !T
Axiome
A1 get(create(), i) = null
A2 get(set(A, i, x), j) =
x wenn i = j
get(A, j) sonst
Konstruktoren sind klarerweise create() und set(). get() liefert für ein leeres Array null zurück (A1),
ansonsten sucht es nach einem unter dem Index j eingetragenenWert (A2).
a) Behandelt oben definierter ADT das U¨ berschreiben korrekt, d.h. wenn zweimal ein Wert an die
Adresse i geschrieben wird, wird beim Auslesen der erste oder (richtigerweise) der zweite zur ¨ uckgeliefert?
b) JAVA-Arrays besitzen eine fixe L¨ange, die bereits im Konstruktor angegeben wird. Erweitern Sie
obigen ADT so, dass
• der Konstruktor create() eine L¨ange l bekommt, die immer fix bleibt und auch nicht durch set()
ver¨andert wird,
• die neue Methode length() die im Konstruktor ¨ ubergebene L¨ange bestimmt,
• nur f ¨ ur Indices zwischen 0 und der L¨ange minus 1 Werte gespeichert werden (ansonsten werden
Eintr¨age ignoriert). Es gen ¨ ugt dabei, Axiom A2 so anzupassen, dass get() nur f ¨ ur passende
Indizes Werte zur ¨ uckliefert. Sie k¨onnen dazu length() in einer Fallunterscheidung verwenden.
So irgendwie steig ich da nicht ganz durch was die von mir wollen, hab mich schon im Inet informiert, aber nix wirklich hilfreiches gefunden.
Jetzt hoff ich mal dass mir hier jemand helfen kann, bin echt echt schon am verzweifeln
Schonmal danke
verwendet werden.
Als erster Versuch sei folgender ADT gegeben, wobei T der Typ der Arrayelemente sei:
Signatur
create !Array
set Array×int×T !Array
get Array×int !T
Axiome
A1 get(create(), i) = null
A2 get(set(A, i, x), j) =
x wenn i = j
get(A, j) sonst
Konstruktoren sind klarerweise create() und set(). get() liefert für ein leeres Array null zurück (A1),
ansonsten sucht es nach einem unter dem Index j eingetragenenWert (A2).
a) Behandelt oben definierter ADT das U¨ berschreiben korrekt, d.h. wenn zweimal ein Wert an die
Adresse i geschrieben wird, wird beim Auslesen der erste oder (richtigerweise) der zweite zur ¨ uckgeliefert?
b) JAVA-Arrays besitzen eine fixe L¨ange, die bereits im Konstruktor angegeben wird. Erweitern Sie
obigen ADT so, dass
• der Konstruktor create() eine L¨ange l bekommt, die immer fix bleibt und auch nicht durch set()
ver¨andert wird,
• die neue Methode length() die im Konstruktor ¨ ubergebene L¨ange bestimmt,
• nur f ¨ ur Indices zwischen 0 und der L¨ange minus 1 Werte gespeichert werden (ansonsten werden
Eintr¨age ignoriert). Es gen ¨ ugt dabei, Axiom A2 so anzupassen, dass get() nur f ¨ ur passende
Indizes Werte zur ¨ uckliefert. Sie k¨onnen dazu length() in einer Fallunterscheidung verwenden.
So irgendwie steig ich da nicht ganz durch was die von mir wollen, hab mich schon im Inet informiert, aber nix wirklich hilfreiches gefunden.
Jetzt hoff ich mal dass mir hier jemand helfen kann, bin echt echt schon am verzweifeln
Schonmal danke