Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.

Problem u Delphiu sa kazaljkama (pointers)???

[es] :: Pascal / Delphi / Kylix :: Problem u Delphiu sa kazaljkama (pointers)???

[ Pregleda: 2291 | Odgovora: 4 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

rogi86
Igor Surjan
Split

Član broj: 73463
Poruke: 3
193.198.39.*



Profil

icon Problem u Delphiu sa kazaljkama (pointers)???07.11.2005. u 00:11 - pre 197 meseci
bok!
Treba mi rješenje za problem u delphiu (pascal).
lmam proceduru u kojoj unosim clanove liste!
Kod kazaljki svaki novi clan dođe ispred starog, kao po defaultu!
Meni treba nemjestit da unošenje novih članova bude ispod starih članova kao kod običnih nizova!!!

Izgubio sam sate za ovaj problem, vi ste mi zadnja nada prije nego predam nedovršen program profesoru!

Pozdrav iz Splita

Igor!
Rogi
 
Odgovor na temu

Nikola Radojicic
Impol Seval AD Sevojno
Uzice

Član broj: 65384
Poruke: 32
195.178.56.*



Profil

icon Re: Problem u Delphiu sa kazaljkama (pointers)???07.11.2005. u 06:07 - pre 197 meseci
Mozda nisam najbolje shvatio postavljeni problem, ali mislim da treba imati jedan podatak u slogu koji ce se zvati ident broj, koji ce uvek kod novog sloga biti veci za 1 od prethodnog, tako da ce konacna lista imati indeks po tom identu.
 
Odgovor na temu

Srki_82
Srdjan Tot
Me @ My Home
Ljubljana

Član broj: 28226
Poruke: 1403
82.208.201.*

ICQ: 246436949


+10 Profil

icon Re: Problem u Delphiu sa kazaljkama (pointers)???07.11.2005. u 07:53 - pre 197 meseci
Sa pointerima mozes da radis kako hoces. Ako sam te dobro razumeo, zelis da imas jedan pointer na pocetak liste i da svaki sledeci bude iza njega... to bi bilo ovako:
Code:
type
  PMojTip = ^TMojTip;
  TMojTip = record
    Podatak: Integer;
    Sledeci: PMojTip;
  end;

To bi bila deklaracija tipa, a funkcija za dodavanje bi bila ovakva:
Code:
var
  PrviClan, PoslednjiClan: PMojTip;

function DodajNov(Podatak: Integer): PMojTip;
begin
  if PrviClan = nil then
  begin
    New(PrviClan);
    PrviClan^.Podatak := Podatak;
    PrviClan^.Sledeci := nil;
    PoslednjiClan := PrviClan;
  end
  else
  begin
    New(PoslednjiClan^.Sledeci);
    PoslednjiClan^.Sledeci^.Podatak := Podatak;
    PoslednjiClan^.Sledeci^.Sledeci := nil;
    PoslednjiClan := PoslednjiClan^.Sledeci;
  end;
  DodajNov := PoslednjiClan;
end;

Pisao sam najjednostavnije sto znam... nadam se da ti je jasno kako ovo radi.
 
Odgovor na temu

rogi86
Igor Surjan
Split

Član broj: 73463
Poruke: 3
193.198.39.*



Profil

icon Re: Problem u Delphiu sa kazaljkama (pointers)???07.11.2005. u 20:54 - pre 197 meseci
Problem nije riješen!!!

Tu je program
code:
Code:

program dinamicka_lista;

{$APPTYPE CONSOLE}

uses
  SysUtils;

type kazaljka=^osoba;

      osoba=record
             ime:string[10];
             mb:integer;
             sl:kazaljka;
            end;

 var lista:kazaljka;
     odl:integer;

// tu se unose clanovi tako da zadnji uneseni ide na prvo mjesto liste

   procedure unos (var lista:kazaljka);
    var p:kazaljka;
     begin
      new(p);
      writeln('Unesi ime');
      readln(p^.ime);
      writeln('Unesi maticni broj');
      readln(p^.mb);
      p^.sl:=lista;
      lista:=p;
     end;

// tu se unose calnovi tako da zadnji uneseni bude na zadnjem mjestu pri ispisu
   [red] tu je problem [/red]

   procedure dodavanje (var lista:kazaljka);
   var p,w,d:kazaljka;
   begin
      
   [red] ??????????????????????????[/red]   

  end;


   end;

    procedure ispis(lista:kazaljka);
     var p:kazaljka;
      begin
       writeln('Sadrzaj liste');
       p:=lista;
        if p=nil then
         writeln('Lista je prazna')
          else
           while p<>nil do
            begin
             writeln(p^.ime, '  ', p^.mb);
             p:=p^.sl;
            end;
      end;

   procedure pretrazi(lista:kazaljka);
     var p:kazaljka;
         f,matbr:integer;
     begin
       f:=0;
       if lista=nil then
        writeln('Lista je prazna')
         else
          begin
            writeln('Unesi maticni broj');
            readln(matbr);
            p:=lista;
            while p<>nil do
             begin
              if p^.mb=matbr then
                begin
                 writeln('Trazena osoba je ', p^.ime);
                 f:=1;
                end;
              p:=p^.sl;
             end;
             if f=0 then writeln('Trazena osoba ne postoji u listi');
          end;
     end;



   procedure brisi(var lista:kazaljka);
    var p,w:kazaljka;
        matbr:integer;
     begin
       writeln('Unesi maticni broj');
       readln(matbr);
       p:=lista;
       if p^.mb=matbr then
         begin
          lista:=p^.sl;
          dispose(p);
         end
          else
           begin
            w:=p^.sl;
             while w^.mb<>matbr do
              begin
               p:=w;
               w:=p^.sl;
              end;
             p^.sl:=w^.sl;
             dispose(w);
           end;
     end;

  procedure brisanje_poc(var lista:kazaljka);
  var p:kazaljka;
  begin
       p:=lista;
       lista:=p^.sl;
       dispose(p);
   end;

  procedure brisanje_kraj(var lista:kazaljka);
  var p,w:kazaljka;
  begin
       p:=lista;
          w:=p^.sl;
             while w^.sl<>nil do
              begin
               p:=w;
               w:=p^.sl;
              end;
             p^.sl:=w^.sl;
             dispose(w);
         end;

begin
 lista:=nil;
 repeat
  writeln;
  writeln ('1. Unos');
  writeln ('2. Pretrazivanje');
  writeln ('3. Brisanje');
  writeln ('4. Dodavanje na kraj');
  writeln ('5. Brisanje sa pocetka');
  writeln ('6. Brisanje sa kraja');
  writeln ('9. Izlaz');
  readln(odl);
   case odl of
    1:unos(lista);
    2:pretrazi(lista);
    3:brisi(lista);
    4:dodavanje(lista);
    5:brisanje_poc(lista);
    6:brisanje_kraj(lista);
   end;
   writeln;
   ispis(lista);
 until odl=9;
end.



Rogi
 
Odgovor na temu

Srki_82
Srdjan Tot
Me @ My Home
Ljubljana

Član broj: 28226
Poruke: 1403
82.208.201.*

ICQ: 246436949


+10 Profil

icon Re: Problem u Delphiu sa kazaljkama (pointers)???07.11.2005. u 23:17 - pre 197 meseci
Pa, objasnio sam ti kako da dodas na kraj... ne znam sta ti nije jasno!? Treba ti jos jedan poniter koji ce stalno pokazivati na poslednji podatak da ne bi svaki put trcao od pocetka do kraja (ako imas mnogo podataka to moze da bude sporo). Samo na zadnji podatak dodas nov i to je to. Ako bas neces da koristis pointer za kraj mozes ovako da uradis
Code:
T := Lista;
while T^.Sl <> nil do
  T := T^.Sl;

Kada se zavrsi while petlja u promenljivaoj T ces imati zadnji element i onda dodajes kao sto sam ti objasnio.

[Ovu poruku je menjao Srki_82 dana 08.11.2005. u 00:18 GMT+1]
 
Odgovor na temu

[es] :: Pascal / Delphi / Kylix :: Problem u Delphiu sa kazaljkama (pointers)???

[ Pregleda: 2291 | Odgovora: 4 ] > FB > Twit

Postavi temu Odgovori

Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.