AGB  ·  Datenschutz  ·  Impressum  







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

ADT-Liste Listenelement anhaengen

Ein Thema von ajaxson · begonnen am 7. Apr 2008 · letzter Beitrag vom 9. Apr 2008
Antwort Antwort
ajaxson

Registriert seit: 6. Sep 2007
14 Beiträge
 
#1

ADT-Liste Listenelement anhaengen

  Alt 7. Apr 2008, 16:48
hy

ich hab eine ADT-Liste erstellt und hab nun ein Problem mit der Listenoperation element_anhaengen...
Delphi-Quellcode:
procedure anhaengen(element:integer;var liste:TRIngliste);
var neues:TZeiger;
begin
 NEW(neues);
 neues^.inhalt:=element;
 neues^.naechster:=ringliste.erstes;
 if not (leer(liste)) then begin
                      ringliste.letzte^.naechster:=neues;
                      ringliste.letzte:=neues;
                      ringliste.aktuelles:=neues;
                     end
               else begin
                      Ringliste.erstes:=neues;
                      Ringliste.aktuelles:=neues;
                      Ringliste.letzte:=neues;
                    end;
end;
es werden irgendwie keine listen elemente angehängt

kann mir einner helfen?
  Mit Zitat antworten Zitat
shmia

Registriert seit: 2. Mär 2004
5.508 Beiträge
 
Delphi 5 Professional
 
#2

Re: ADT-Liste Listenelement anhaengen

  Alt 7. Apr 2008, 17:08
Wieso hast du einen Übergabeparameter namens liste, wenn du doch auf der wohl globalen Variable ringliste rumreitest ?
Und wieso programmierst du eine ganz gewöhnliche procedure anhaengen anstatt aus TRIngliste eine Klasse zu machen ?
Andreas
  Mit Zitat antworten Zitat
ajaxson

Registriert seit: 6. Sep 2007
14 Beiträge
 
#3

Re: ADT-Liste Listenelement anhaengen

  Alt 7. Apr 2008, 17:15
mh ok hat sich erledigt...lag am hauptprogramm und nicht an der unit adtliste..
die unit dürfte funktionieren..ich poste mal das ganze ding..

Delphi-Quellcode:
unit ADTRIngliste;

interface
uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs;

type TInhalt=integer;
     TZeiger=^TElement;
     TElement=Record
               inhalt:TInhalt;
               naechster:TZeiger;
              end;

     TRingliste = Record
               erstes,aktuelles,letzte:TZeiger;
             end;

procedure erzeugen(var liste:TRIngliste);
procedure gehe_naechstes(var liste:TRIngliste);
procedure anhaengen(element:integer;var liste:TRIngliste);
procedure loeschen(var liste:TRIngliste);
function leer(liste:TRIngliste):boolean;
procedure gehe_erstes(var liste:TRIngliste);
function hole(liste:TRIngliste):TInhalt;
procedure SchreibeEintrag(var liste:TRingliste;inhalt:TInhalt);

var Ringliste:TRingliste;


implementation

procedure erzeugen(var liste:TRIngliste);
begin
  Ringliste.erstes:=NIL;
  Ringliste.aktuelles:=NIL;
  Ringliste.letzte:=NIL;
end;

function leer(liste:TRIngliste):boolean;
begin
 if Ringliste.erstes=NIL then result:=true
                         else result:=false;
end;

procedure gehe_erstes(var liste:TRIngliste);
begin
if not leer(liste) then Ringliste.aktuelles:=Ringliste.erstes
              else showmessage('Liste Leer');
end;

Procedure gehe_naechstes(var liste:TRIngliste);
begin
 if not (leer(liste)) then
                RIngliste.aktuelles:=Ringliste.aktuelles^.naechster
               else
                showmessage('Liste Leer');
end;

function hole(liste:TRIngliste):TInhalt;
begin
  if not (leer(liste)) then result:=ringliste.aktuelles^.inhalt
               else
                showmessage('Liste Leer');
end;

procedure anhaengen(element:integer;var liste:TRIngliste);
var neues:TZeiger;
begin
 NEW(neues);
 neues^.inhalt:=element;
 neues^.naechster:=ringliste.erstes;
 if not (leer(liste)) then begin
                      ringliste.letzte^.naechster:=neues;
                      ringliste.letzte:=neues;
                      ringliste.aktuelles:=neues;
                     end
               else begin
                      Ringliste.erstes:=neues;
                      Ringliste.aktuelles:=neues;
                      Ringliste.letzte:=neues;
                    end;
end;

function davor(liste:TRingliste):TZeiger;
var zeiger:TZeiger;
begin
    if liste.aktuelles=liste.erstes then result:=NIL
    else begin
        zeiger:=liste.erstes;
        while zeiger^.naechster <> liste.aktuelles do zeiger:=zeiger^.naechster;
    end;
   result:=zeiger;
end;

procedure SchreibeEintrag(var liste:TRingliste;inhalt:TInhalt);
begin
 if not(leer(liste)) then
  ringliste.aktuelles^.inhalt:=inhalt;
end;

procedure loeschen(var liste:TRingliste);
var voraktuelles,blub:TZeiger;
begin
    if not(leer(liste)) then
    begin
        if liste.erstes=liste.letzte then
        begin
            dispose(liste.aktuelles);
            liste.aktuelles:=NIL;
            liste.letzte:=NIL;
            liste.erstes:=NIL;
        end
        else if liste.aktuelles=liste.letzte then
        begin
            voraktuelles:=davor(liste);
            dispose(liste.letzte);
            liste.letzte:=voraktuelles;
            liste.letzte^.naechster:=liste.erstes;
            liste.aktuelles:=liste.erstes;
        end
        else if liste.aktuelles=liste.erstes then
        begin
            liste.aktuelles:=liste.aktuelles^.naechster;
            dispose(liste.erstes);
            liste.erstes:=liste.aktuelles;
            liste.aktuelles:=liste.erstes;
        end
        else begin
            voraktuelles:=davor(liste);
            blub:=liste.aktuelles^.naechster;
            dispose(liste.aktuelles);
            liste.aktuelles:=blub;
            voraktuelles^.naechster:=liste.aktuelles;
        end;
    end;
end;

end.
  Mit Zitat antworten Zitat
shmia

Registriert seit: 2. Mär 2004
5.508 Beiträge
 
Delphi 5 Professional
 
#4

Re: ADT-Liste Listenelement anhaengen

  Alt 7. Apr 2008, 17:20
Zitat von ajaxson:
mh ok hat sich erledigt...lag am hauptprogramm und nicht an der unit adtliste..
die unit dürfte funktionieren..ich poste mal das ganze ding..
Das ist trotzdem noch schlecht programmiert.
Alle deine Funktionen haben einen Übergabeparameter var liste:TRIngliste.
Aber du benützt den Übergabeparameter nicht.
Stattdessen verwendest du immer die globale Variable Ringliste.
Andreas
  Mit Zitat antworten Zitat
ajaxson

Registriert seit: 6. Sep 2007
14 Beiträge
 
#5

Re: ADT-Liste Listenelement anhaengen

  Alt 7. Apr 2008, 17:31
und wie wär es besser? soll ich var:liste etc.. rauslassen?

ich verwende ja die unit in meinem hauptprogramm..müssen sich da die proceduren nicht auf die liste beziehen...
  Mit Zitat antworten Zitat
shmia

Registriert seit: 2. Mär 2004
5.508 Beiträge
 
Delphi 5 Professional
 
#6

Re: ADT-Liste Listenelement anhaengen

  Alt 7. Apr 2008, 18:19
Zitat von ajaxson:
und wie wär es besser? soll ich var:liste etc.. rauslassen?

ich verwende ja die unit in meinem hauptprogramm..müssen sich da die proceduren nicht auf die liste beziehen...
Du solltest schon etwas mitdenken.
Angenommen du willst zwei Listen haben.
Du würdest also schreiben:
Delphi-Quellcode:
var
  ListeA, ListeB : TRIngliste;

...
  erzeugen(ListeA);
  erzeugen(ListeB);
  anhaengen(42, ListeA);
  anhaengen(66, ListeB);
So und jetzt schau dir mal deine Prozeduren an!
Delphi-Quellcode:
procedure erzeugen(var liste:TRIngliste);
begin
  { FALSCH
  Ringliste.erstes:=NIL;
  Ringliste.aktuelles:=NIL;
  Ringliste.letzte:=NIL;
  }

  // Richtig
  liste.erstes:=NIL;
  liste.aktuelles:=NIL;
  liste.letzte:=NIL;
end;
Und das gilt nicht nur für "erzeugen", sondern für alle deine Prozeduren.
Du solltest deine globale Variable Ringliste auskommentieren.
Andreas
  Mit Zitat antworten Zitat
ajaxson

Registriert seit: 6. Sep 2007
14 Beiträge
 
#7

Re: ADT-Liste Listenelement anhaengen

  Alt 9. Apr 2008, 16:59
achso..gut jetzt hats klick gemacht...ich werds überarbeiten..

danke für deine hilfe
  Mit Zitat antworten Zitat
Antwort Antwort


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 16:22 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz