Dies ist eine statische Kopie unseres alten Forums. Es sind keine Interaktionen möglich.
This is a static copy of our old forum. Interactions are not possible.

migu

free rider

  • "migu" is male
  • "migu" started this thread

Posts: 2,643

Date of registration: Dec 11th 2001

Occupation: Developer

1

Monday, January 28th 2002, 3:28pm

Programmieren I: Aufgabe 11.2

Hallo *!

Jetzt sitze ich schon ziemlich lange an ProgrI, Aufgabe 11.2 und komme auf keinen grünen Zweig.

Aufgabe ist ja, ein Element aus der "Liste" zu löschen.
Nur komme ich sher schlecht an das Element heran.
Es ist mir schon gelungen, eins zu löschen, aber der Ansatz ist glaube ich nicht so gut, denn er funktioniert nicht immer:

Meine remove-Prozedur geht die Liste durch, bis sie der Index des aktuellen Elements eins vor dem gesuchten ist.
(set-cdr! l (cddr l)) ; l ist hier die "Arbeitsliste"
Hier wird praktisch ein Element übersprungen. Ist es aber das letzte Element, zeigt der Kopf-Pointer natürlich immer noch auf das alte letzte Element. Problem!

Wenn ihr was wisst, wär's schön.

migu (der keine Lust auf die LinAlgA-Klausur hat)
tar: Anlegen eines leeren Archivs wird feige verweigert.

Mieks

Alter Hase

  • "Mieks" is male

Posts: 106

Date of registration: Jan 14th 2002

Location: Linden

2

Monday, January 28th 2002, 5:15pm

Hm, wenn man die Liste nicht kapiert (so ergings mir) hab ich ne ganz einfache, nicht optimale, ein wenig Speicheraufwendige, Allzwecklösung :)) . Die funktioniert theoretisch bei jeder Liste. Lies einfach die alte Liste Element für Element aus und schreib sie in eine neue Liste Element für Element rein (mit (make) get und add). Das Element, das raus soll, überspringt man. Dann noch die neue Liste zurückgeben statt der alten und fertich. Is nicht perfekt, schnallt aber jeder und es funktioniert und darauf kommts den da die Prüfen an.
Realität ist der bedauerliche Zustand, der auf mangelnden Alkoholkonsum zurückzuführen ist.

cowhen

Muuuh!

  • "cowhen" is male

Posts: 1,374

Date of registration: Dec 13th 2001

3

Monday, January 28th 2002, 9:40pm

habs so gemacht:

(set-cdr! prev 'leer) ;wenn das element nach dem ges. das ende ist, dann wird der zeiger des vorgängers auf das ende gestzt.
)
(if (equal? liste (cdr list)) (set-cdr! list prev) '()) ;;
wenn letztes element gelöscht wird muss der pointer auf den kopf gesetzt werden.
#T


hth,

cowhen

PS:
kannst auch das komplette prog haben, wollte es nur hier nich veröffentlichen um nix vorweg zu nehmen...
plenty of time to relax when you are dead