dynamicke dat.struktury pascal

Programovacie jazyky, rady, poradňa...
sashi
Amateur
Amateur
Príspevky: 12
Registrovaný: 17 dec 2012, 19:24

dynamicke dat.struktury pascal

Príspevok od používateľa sashi »

Mám problém s usporiadaním obojsmerneho cyklickeho spajaneho zoznamu v pascale. je to triedenie vymenou, vymienaju sa len hodnoty.
zadefinovany je takto:

Kód: Vybrať všetko

type ukazovatel=^zaznam;
     zaznam=record
            predchadzajuci:ukazovatel;
            hodnota:integer;
            dalsi:ukazovatel;
     end;                       

Kód: Vybrať všetko

procedure Utried;
var p,q:ukazovatel;
    x:integer;
 begin
  if start=nil then writeln('Nie je co triedit')
               else if start^.dalsi=start then writeln('zoznam je jednoprvkovy')

               else begin
                     p:=start;

                     repeat
                     q:=start^.predchadzajuci;

                            repeat
                             if q^.hodnota<q^.predchadzajuci^.hodnota then begin
                                                            x:=q^.hodnota;
                                                            q^.hodnota:=q^.predchadzajuci^.hodnota;
                                                            q^.predchadzajuci^.hodnota:=x;
                                                           end;
                             q:=q^.predchadzajuci;

                            until q^.predchadzajuci=p;
                            p:=p^.dalsi;
                     until p=start^.predchadzajuci;
                    end;
 end;       


daco vymeni, ale zle, nechapem preco. vedel by niekto pomoct?
audiotrack
VIP
VIP
Používateľov profilový obrázok
Príspevky: 25958
Registrovaný: 09 sep 2005, 18:39
Kontaktovať používateľa:

Re: dynamicke dat.struktury pascal

Príspevok od používateľa audiotrack »

učiteľom, ktorí učia dávať premenným názvy p,q,x a podobne ničnehovoriace písmenka by som znížil plat o 15€ na každé písmenko :)

buď zmeň

Kód: Vybrať všetko

q:=start^.predchadzajuci;
na

Kód: Vybrať všetko

q:=p^.predchadzajuci;
alebo zmeň

Kód: Vybrať všetko

until q^.predchadzajuci=p;
na

Kód: Vybrať všetko

until q=p;
prípadne

Kód: Vybrať všetko

until q=start;
Ty skončíš o jedno pred štartom ( until q^.predchadzajuci=p; ) a začneš o jedno od štartu ( q:=start^.predchadzajuci; ) a keďže týmto štartom (v premennej p) stále hýbeš po obvode, tak v každom cykle práve jeden prvok netriediš, a to ten, na ktorom je práve štart
sashi
Amateur
Amateur
Príspevky: 12
Registrovaný: 17 dec 2012, 19:24

Re: dynamicke dat.struktury pascal

Príspevok od používateľa sashi »

vďaka, druhá možnosť fungujee
Napísať odpoveď