Autor Beitrag
elsebaer
Hält's aus hier
Beiträge: 2



BeitragVerfasst: So 26.04.09 18:07 
Hallo an alle,

ich bin neu hier im Forum und hab auch gleich eine Frage. Wir sollen ein Prgogramm schreiben, dass Worte aus einem Memofeld einliest, dabei gleich sortiert (LIFO, FIFO, alphabetisch) und zur Kontrolle wiederum im Memofeld ausgibt. Dann sollen wir Worte suchen, einfügen und löschen können. Und da ist mein Problem:
Ich habe die Suchfunktion ausgereizt, aber nichts Passendes gefunden. Mein Problem ist sowieso, dass ich alle angehängten Dateien in meiner Delphi-Version nicht öffnen kann. :(

Also, wenn ein Wort mitten in der Liste steht, kann ich es löschen. Merkwürdigerweise wird dann bei der Ausgabe das letzte Wort verdoppelt. Das funktioniert schon mal nicht ganz. Mir ist klar, dass ich eine Fallunterscheidung machen muss. Denn wenn das erste oder das letzte Element betroffen sind, muss ich andere Dinge ausführen. Bspw. wenn das letzte Element betroffen ist, wird das vorletzte nil...

Aber ich komme einfach nicht weiter. Hier mal mein Quelltext:

ausblenden volle Höhe Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
44:
45:
46:
47:
procedure TForm1.Lschen1Click(Sender: TObject);

var geloescht: boolean;
    i, j: integer;

begin
  hilfe:= wurzel;
  lauf:= hilfe^.rechts;
  geloescht:= false;
  repeat
    if wurzel^.inhalt= Edit1.text //Abfrage für das erste Element in der Liste
      then begin
        lauf:= wurzel;
        wurzel:= wurzel^.rechts;
        dispose(lauf);
        geloescht:= true;
      end
      else
        if (lauf^.inhalt = Edit1.text) and (lauf^.rechts<>nil) //Abfrage für ein beliebiges Element in der Liste
          then begin
            hilfe^.rechts:= lauf^.rechts;
            dispose(lauf);
            geloescht:= true;
          end
        else
          if (lauf^.inhalt = Edit1.text) and (lauf^.rechts = nil) //Abfrage für das letzte Element in der Liste
            then begin
              hilfe^.rechts:= nil;
              dispose(lauf);
              geloescht:= true;
            end
           else
            begin
              lauf:= lauf^.rechts;
              hilfe:= hilfe^.rechts;
            end;
  until geloescht= true;
  Lauf:= wurzel;                                 //Ausgabe
    j:= 0;
  for i:= 1 to 9 do                              //es werden 10 Zeilen in dem Memofeld erstellt
    Memo2.Lines.Add('');
  repeat
      Memo2.Lines[j]:= lauf^.inhalt;            //die Zeilen werden mit Inhalt gefüllt
      lauf:= lauf^.rechts;                     //die Reihe wird durchgegangen
      inc(j);
  until lauf= nil;
end;


Es wäre sehr schön, wenn mir jemand helfen könnte.

Liebe Grüße

elsebaer


Zuletzt bearbeitet von elsebaer am So 26.04.09 18:42, insgesamt 2-mal bearbeitet
elsebaer Threadstarter
Hält's aus hier
Beiträge: 2



BeitragVerfasst: So 26.04.09 18:22 
Das Problem hat sich in Luft aufgelöst. Es lag nur an der Ausgabe. Und ich dachte schon, ich kriege es nicht mehr hin. ;)