AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Name aus Liste löschen

Ein Thema von der olli · begonnen am 14. Nov 2005 · letzter Beitrag vom 15. Nov 2005
 
der olli

Registriert seit: 18. Mai 2004
14 Beiträge
 
#1

Name aus Liste löschen

  Alt 14. Nov 2005, 19:36
Hi!

Wir realisieren im Informatikunterricht z.Z. eine Liste mit Namen, die eingegeben und gelöscht werden können (alles mit Hilfe von Zeigern), folgendermaßen aufgebaut: Zwei Listboxes (eine für die Platzierung, da es sich bei der Liste um Skispringer handelt und für den Namen und eine für die zum Namen zugehörige Wertung) und zwei Buttons, nächster Springer und Springer löschen. Bei Klick auf nächster Springer erscheinen zwei InputBoxes, zuerst eine für den Namen und danach eine für die zugehörige Wertung. Nach diesen Einträgen werden der Name und die Wertung gespeichert und sortiert nach Wertung in die jeweiligen Listboxes eingetragen. Die Procedure hierzu ist folgende (zu oberst die Deklaration der globalen Variablen):
Delphi-Quellcode:
type
  TZeiger = ^TSpringer;

  TSpringer = record
    name : String;
    wertung : Real;
    vorher,
    nachher : TZeiger
  end;

var
  Skispringen : TSkispringen;
  oben : TZeiger;
  platz : Integer;
Delphi-Quellcode:
procedure TSkispringen.bt_naechster_springerClick(Sender: TObject);
var aktuell, hilf, lauf : TZeiger;
begin
 new(aktuell);
 aktuell^.name := InputBox('Eingabe','Name','');
 aktuell^.wertung := StrToFloat(InputBox('Eingabe','Wertung',''));
 aktuell^.vorher := nil;
 aktuell^.nachher := nil;
 IF oben = nil THEN
  oben := aktuell
 ELSE
 begin
  IF aktuell^.wertung > oben^.wertung THEN
  begin
   oben^.vorher := aktuell;
   aktuell^.nachher := oben;
   oben := aktuell
  end
  ELSE
  begin
   lauf := oben;
   WHILE (lauf^.wertung > aktuell^.wertung) AND (lauf^.nachher <> nil) DO
    lauf := lauf^.nachher;
   IF (aktuell^.wertung > lauf^.wertung) THEN
   begin
    aktuell^.vorher := lauf^.vorher;
    aktuell^.nachher := lauf;
    hilf := lauf^.vorher;
    hilf^.nachher := aktuell;
    lauf^.vorher := aktuell
   end
   ELSE
   begin
    lauf^.nachher := aktuell;
    aktuell^.vorher := lauf
   end
  end
 end;
 ausgabe
end;
Und hier die Procedure zum ausgeben:
Delphi-Quellcode:
procedure TSkispringen.ausgabe;
var hilf : TZeiger;
begin
 li_skispringer.Clear;
 li_wertung.Clear;
 hilf := oben;
 platz := 0;
 WHILE (hilf <> nil) DO
 begin
  inc(platz);
  li_skispringer.Items.Add(IntToStr(platz) + '. ' + hilf^.name);
  li_wertung.Items.Add(FloatToStr(hilf^.wertung));
  hilf := hilf^.nachher;
 end
end;
Soweit, so gut. Klappt auch alles ohne Probleme. Nun habe ich mich eben hingesetzt und den Algorithmus programmiert, um einen Springer anhand seines Namens zu löschen:
Delphi-Quellcode:
procedure TSkispringen.bt_springer_loeschenClick(Sender: TObject);
var lauf : TZeiger;
    such : String;
begin
 such := InputBox('Eingabe','Name','');
 lauf := oben;
 WHILE NOT (lauf^.nachher = nil) AND (such = lauf^.name) DO
  lauf := lauf^.nachher;
 IF (lauf^.name = such) AND (lauf^.nachher = nil) THEN
  lauf^.vorher^.nachher := nil
 ELSE IF such = lauf^.name THEN
 begin
  lauf^.vorher^.nachher := lauf^.nachher;
  lauf^.nachher^.vorher := lauf^.vorher
 end
 ELSE IF such = oben^.name THEN
  oben^.nachher^.vorher := nil;
 // ELSE exit;
 ausgabe
end;
Hier hört das Programm leider auf zu funktionieren. Ich kann zwar den zu löschenden Namen eingeben, aber leider wird dieser nicht aus der Listbox gelöscht und ich komme einfach nicht drauf, wieso nicht. Ich hoffe, ich hab das verständlich erklärt und es kann mir jemand helfen.

Gruß,
Olli

P.S.: Ich weiß, dass sowas auch einfacher zu realisieren ist, aber wir müssen halt mit Zeigern arbeiten ...
  Mit Zitat antworten Zitat
 


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 12:27 Uhr.
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz