[TPW] Zeigerprobleme

Registriert
Dez. 2002
Beiträge
184
Moin!

Hier die Aufgabe aus dem Informatikunterricht:

Erstellen Sie ein Programm, welches folgendes Möglichkeiten bietet:

  • Zeiger-Liste anlegen
  • Zeiger-Liste sortieren
  • Element in die Zeiger-Liste einfügen

Hier der Quellcode, der bisher vorhanden ist (hässlich und fehlerhaft, bitte ignorieren - dient nur zur Anschaulichkeit)! : Quellcode runterladen

Ich bräuchte dazu bitte bis Freitag, den 16.05.03 eine passende Lösung!


Greets


Schattenkanzler
 
Was war TPW gleich? Die pas schaut ganz nach Pascal aus. Wenn ich die Woche Zeit hab kann ich mal gucken ob ich letztes Semester was in Pascal gelernt hab... Ich garantier aber für nix :D
 
Holla die Waldfee, das ging schnell!

Ja, ist Turbo Pascal für Windoze!

Wäre cool! Danke!


Greets


Schattenkanzler
 
bäää,


so schlimmen quelltext hab ich schon lang nicht mehr gesehen :(((,

werd das wohl komplett neuschreiben
 
Jo, sag ja, der Source is Scheiße³!

Aber wenn du es neu schreibst, kannst du bitte kommentieren, damit ich weiß, was was ist/war?

Greets

Schattenkanzler
 
so erstmal das was ich hab (die umschreiberei dauert bald länger als neu schreiben :()

Code:
Program Zeiger;

TYPE
 String20 = string[20];
 Pstring20 = ^Element;
 Element = RECORD
             info : String20;
             next   : Pstring20;
           END;
VAR
    Pstart, Pend: Pstring20;


procedure pointer_init(var Pstart,Pend: Pstring20);
begin
    Pstart:= nil;
    Pend:= nil;
end;


procedure pointer_delete(var Pstart,Pend: Pstring20);
var
    tmp: Pstring20;
begin
    while Pstart <> nil do
        begin
            tmp:= Pstart;
            Pstart:= Pstart^.next;
            dispose(tmp);
        end;

    Pstart:= nil;    
    Pend:= nil;
end;


procedure pointer_new_begin (var Pstart,Pend: Pstring20; info: String20);
var
    tmp: Pstring20;
begin
    new(tmp);
    tmp^.info:= info;
    tmp^.next:= nil;

    if Pstart = nil then
        begin
            Pstart:= tmp;
            Pend:= tmp;
        end
     else
        begin
          tmp^.next:= Pstart;
          Pstart:= tmp;
        end;
end;


procedure pointer_new_end (var Pstart,Pend: Pstring20; info: String20);
var
    tmp: Pstring20;
begin
    new(tmp);
    tmp^.info:= info;
    tmp^.next:= nil;

    if Pstart = nil then
        begin
          Pstart:= tmp;
          Pend:= tmp;
        end
     else
        begin
          Pend^.next:= tmp;
          Pend:= tmp;
        end;
end;


procedure main_input(var Pstart,Pend: Pstring20);
var
   str, choose: String20;
begin
    repeat
        write('Bitte Mensch^.Inhalt angeben!');
        readln(str);
        write('am (E)nde oder am (A)nfang?');

        repeat
            readln(choose);
        until ((choose = 'e') or (choose = 'E') or (choose = 'a') or (choose = 'A'));
        
        if((choose = 'a') or (choose = 'A')) then pointer_new_begin(Pstart, Pend, str);
        if((choose = 'e') or (choose = 'E')) then pointer_new_end(Pstart, Pend, str);

        WriteLn('Zum Abbrechen bitte e oder E drücken!');
        readln(choose);
    until ((choose = 'e') or (choose = 'E'));
end;


procedure main_output(Pwork: Pstring20);
var
    i: cardinal;
begin
    i:= 0;

    writeln('Ausgabe der Liste');
    writeln('=================');
    writeln('');

    while Pwork <> nil do
        begin
            inc(i);
            writeln('Knoten ',i,' Inhalt: |',Pwork^.info,'|');
            Pwork := Pwork^.next;
        end;

    writeln('');
    writeln('Gesamt-Knoten: ',i);
end;


procedure main_edit();
begin


end;


begin
    pointer_init(Pstart,Pend);  //initialisierung
    main_input(Pstart,Pend);    //eingabe
    main_output(Pstart);        //ausgabe
    readln;                     //damit das programm nicht gleich beendet wird
    pointer_delete(Pstart,Pend); //Speicherplatz wieder freigeben
end.
 
Oh, dankeschön!

Eine Sache hatte ich noch vergessen!

Man soll angeben können, nach welchem Eintrag etwas eingefügt wird.

Beispielsweise:

- Liste: A B C D E F G H I J K L M N O P Q R S

Man will nach dem G ein X einfügen!

- Liste: A B C D E F G X H I J K L M N O P Q R S

Hoffe, dass is in deinem Source noch nicht drin...sonst hab ich mich ja grad dicke zum Affen gemacht :D


Greets
 
Ok, folgendes Problem:

Was zur Hölle soll die Zeile
Code:
i: cardinal;
...musste das in Integer umbenennen, da er mir sonst immer nen Fehler gegeben hat!

Und du solltest noch folgendes einbauen:
Code:
Uses WinCrt;
, denn sonst bekommst du diesen netten Zeitgenossen: "Runtime Error 105 at 0001:0208"... :D

Aber ansonsten funktioniert der Code einwandfrei! :D :D

Jetzt fehlen nur noch:
  • Irgendwo einfügen
  • Sortieren

Danke! Hast was gut bei mir!


Greets
 
ja das kann schon sein das die ein paar sachen umbennen musst, da ich kein pascal mehr hab sondern nur noch delphi und da sind ja doch ein paar sachen anders.

zum thema sortieren: das ist bei einer linearen liste gar nicht so einfach, werd mal sehen ob mir da was einfällt.
 
Also von der Theorie her: Durchlaufen, bis das kleinste oder größte Element gefunden wurde.
Dann so weiter, und halt immer eins weiter oder so...keine Ahnung!

Danke, dass du dir so viele Gedanken machst!

Greets
 
halb so wild, zum einen hatte ich den code schon (das gepostete) in leicht abgewandelter form und zum anderen brauch ich das sortieren demnächst wahrscheinlich selbst, werde wohl aber eher einen einfachen sortieralgorithmus nehmen.
 
Zuletzt bearbeitet:
Zurück
Oben