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

POinteri u Delphiu

[es] :: Pascal / Delphi / Kylix :: POinteri u Delphiu

Strane: 1 2

[ Pregleda: 5722 | Odgovora: 24 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

Nikolavlasotince
Nikola Stojiljkovic
Vlasotince/Beograd

Član broj: 139391
Poruke: 109
*.info-net.co.yu.



+1 Profil

icon POinteri u Delphiu14.04.2007. u 16:31 - pre 207 meseci
Moze li mi neko objasniti kako se koriste pointeri u Delphi-u i zasta sluze. Mislim da imaju nekakve veze sa nizovima ali ne znam bas kakve.

Pozdrav
 
Odgovor na temu

Miloš Baić
Miloš Baić
ERP (Dynamics NAV) programer
Beograd

Član broj: 72468
Poruke: 1155
*.dialup.neobee.net.



Profil

icon Re: POinteri u Delphiu14.04.2007. u 17:32 - pre 207 meseci
Pokazivači, Pointers, su promenljive koje mogu sadržati adresu nekog podatka u memoriji. Opisuju se sa ^Tip. Na osnovu operatora @ može da se definiše adresa nekog podatka. Pristup do podataka na osnovu adrese se vrši sa Ime_Pokazivaca^.
Code:
type
 Ptip = ^Real; //pokazivacki tip
var
 Prvi, Drugi: Real;
 Broj: Ptip; //pokazivacka promenljiva
begin
 Broj:= @ Prvi; //adresa promenljive Prvi
 Broj^:= 55.22; // Prvi := 55.22
 Drugi:= Broj^; // Drugi:= Prvi

Postoje pokazivači na potprograme, ali se nazivaju proceduralni tipovi (procedural types).
Someone's sitting in the shade today because someone planted a tree a long time ago.
 
Odgovor na temu

Nikolavlasotince
Nikola Stojiljkovic
Vlasotince/Beograd

Član broj: 139391
Poruke: 109
*.info-net.co.yu.



+1 Profil

icon Re: POinteri u Delphiu14.04.2007. u 18:23 - pre 207 meseci
Hvala na pomoci. Razumeo sam taj deo. Sta je ^TNode? Sta znaci nekapromenljiva^.nesto npr: q^.Num = .....
Da to nije mozda promenljiva koja je ubacena u pointer q pa onda .Num = ? ili nesto sl.

Pozdrav
 
Odgovor na temu

vlaiv
Vladimir Vlaisavljevic
Novi Sad

Član broj: 15993
Poruke: 352
*.ADSL.neobee.net.



+1 Profil

icon Re: POinteri u Delphiu15.04.2007. u 22:58 - pre 207 meseci
Citat:
Nikolavlasotince: Sta je ^TNode? Sta znaci nekapromenljiva^.nesto npr: q^.Num = .....
Da to nije mozda promenljiva koja je ubacena u pointer q pa onda .Num = ? ili nesto sl.


Konkretan primer koji si naveo

nekapromenljiva^.nesto je zapravo sledeci
slucaj

"nekapromenljiva" je pointer na strukturu koja kao clan sadrzi "nesto"

nekapromenljiva^ je zapravo ta struktura (na koju nekapromenljiva pokazuje)
a .nesto je klasicno referenciranje elementa strukture ...

^TNode je definicija pointera na neki tip, a to node mi govori da je u pitanju neka drvoidna
ili listoidna struktura ...

Pointeri na strukture se uglavnom u paskalu koriste za bas to - pravljenje dinamickih struktura -
lista, stabala i tome slicno...
 
Odgovor na temu

Nikolavlasotince
Nikola Stojiljkovic
Vlasotince/Beograd

Član broj: 139391
Poruke: 109
*.info-net.co.yu.



+1 Profil

icon Re: POinteri u Delphiu17.04.2007. u 13:28 - pre 207 meseci
Hvala sto si mi bar malo pojasnio rad sa pointerima.

POzdrav
 
Odgovor na temu

Milan Milosevic

Član broj: 67
Poruke: 932
77.46.225.*



+31 Profil

icon Re: POinteri u Delphiu17.04.2007. u 18:29 - pre 207 meseci
Izbegavaj u delphi-ju koriscenje dinamickog programiranja i koriscenja pointera na taj nacim mozes sebe da postedis frustracije, i cudnih gresaka u kodu koje fizicki nisu vidljive.
 
Odgovor na temu

Nikolavlasotince
Nikola Stojiljkovic
Vlasotince/Beograd

Član broj: 139391
Poruke: 109
*.info-net.co.yu.



+1 Profil

icon Re: POinteri u Delphiu18.04.2007. u 12:55 - pre 207 meseci
OK, hvala na savetu.
 
Odgovor na temu

priki

Član broj: 24732
Poruke: 700
212.103.132.*

ICQ: 174153511


+26 Profil

icon Re: POinteri u Delphiu21.04.2007. u 08:56 - pre 207 meseci
Citat:
Milan Milosevic: Izbegavaj u delphi-ju koriscenje dinamickog programiranja i koriscenja pointera na taj nacim mozes sebe da postedis frustracije, i cudnih gresaka u kodu koje fizicki nisu vidljive.


ne slazem se sa ovim
samo onaj ko nema dobru kontrolu sa onim sto radi moze ovako nesto napisati

 
Odgovor na temu

Milan Milosevic

Član broj: 67
Poruke: 932
77.46.225.*



+31 Profil

icon Re: POinteri u Delphiu21.04.2007. u 09:27 - pre 207 meseci
Dobro ond daj nam neki pozamasni kod koji je u potpunosti dinamicki uraden, pa da nesto naucimo.
 
Odgovor na temu

Srki_82
Srdjan Tot
Me @ My Home
Ljubljana

Član broj: 28226
Poruke: 1403
212.200.34.*

ICQ: 246436949


+10 Profil

icon Re: POinteri u Delphiu21.04.2007. u 09:47 - pre 207 meseci
@Milan Milosevic
Necu ti dati kod, ali cu ti dati primer... ceo VCL framework u Delphi-u. On je prilicno dobro uradjen, a sve se kreira dinamicki.

Citat:
...cudnih gresaka u kodu koje fizicki nisu vidljive.


Kakve su to cudne greske i sta znaci "fizicki nevidljiva greska u kodu"?
 
Odgovor na temu

priki

Član broj: 24732
Poruke: 700
212.103.132.*

ICQ: 174153511


+26 Profil

icon Re: POinteri u Delphiu21.04.2007. u 10:33 - pre 207 meseci
prva stvar:

delphi ima najbolji debuger na planeti zemlji
da ga koristis kako treba nikad ne bi ni pomislio da ovako nesto kazes
a kamoli da napises na ovakvom forumu

Citat:
Milan Milosevic: .... i cudnih gresaka u kodu koje fizicki nisu vidljive..


druga stvar,
@Srki_82 ti je sve rekao oko dinamickog kreiranja

pozdrav
 
Odgovor na temu

Milan Milosevic

Član broj: 67
Poruke: 932
77.46.225.*



+31 Profil

icon Re: POinteri u Delphiu21.04.2007. u 11:08 - pre 207 meseci
fizicki nevidljiva greska je greska koja se ne vidi na prvi pogled i debager je ne prepoznaje kao gresku nije greska ni u kodu jednostano dode do prekalpanja memoriskih lokacija u jednom trenutku i program podivlja. Ne kazem da greska nije do programera. Ali prosto ne uvidis gresku odmah a kasnije je kasno. Kad unapred znas sta ti je sta toga jednostavno nema. Miran si i ne gubis vreme.
 
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: POinteri u Delphiu21.04.2007. u 11:50 - pre 207 meseci
Debuger i ne moze da prepozna gresku, on sluzi da bi ti pronasao logicke greske u svom kodu (verovatno na to mislis kad kazes fizicki nevidljive greske u kodu). Greska u kodu moze da ti bude i to sto si stavio X := Y /100 umesto X := Y / 1000. Delphi ti nece reci da je to greska... otkud Delphi zna da ti neces bas to da uradis?
Zato ti vidis da ti program ne radi dobro, pa pokrenes debug, dodjes do dela gde program pocne cudno da se ponasa i vidis da X ima pogresnu vrednost... vratis se malo nazad da vidis gde postavljas X i vidis da si zaboravio jednu nulu.
Drugi primer gde se cesto gresi... deklarises globalnu i lokalnu promenljivu sa istim imenom i negde u kodu mislis da pristupas globalnoj promenljivoj, ali ustvari pristupas lokalnoj... kod izgleda dobro, Delphi ne prijavljuje gresku, ali opet ne radi.
Eto... greska se ne vidi, a dinamickog kreiranja nigde... sad ti mozes da kazes kako je programer kriv sto je promenljive nazvao istim imenom ili je zaboravio nulu i da se to lako ispravi, a ja kazem isto tako da je programer kriv sto nije proverio da li je objekat vec dinamicki kreiran pre nego sto ga je ponovo kreirao ili nije proverio da li je objekat kreiran pre nego sto je pokusao da ga unisti.
Poenta je u tome da ako nesto naucis, nije ti tesko to da koristis.
 
Odgovor na temu

priki

Član broj: 24732
Poruke: 700
212.103.132.*

ICQ: 174153511


+26 Profil

icon Re: POinteri u Delphiu21.04.2007. u 12:13 - pre 207 meseci
Citat:
Milan Milosevic: fizicki nevidljiva greska je greska koja se ne vidi na prvi pogled i debager je ne prepoznaje kao gresku nije greska ni u kodu jednostano dode do prekalpanja memoriskih lokacija u jednom trenutku i program podivlja. Ne kazem da greska nije do programera. Ali prosto ne uvidis gresku odmah a kasnije je kasno. Kad unapred znas sta ti je sta toga jednostavno nema. Miran si i ne gubis vreme.


stari, do preklapanja memorijskih lokacija moze doci jedino tvojom greskom
mislim da su memorijske lokacije nesto najvaznije o cemu brinu oni koji
projektuju programske jezike

jer Delphi ti je alat, kao sto je aparat za varenje alata za autolimara
i to je kao da si rekao, "pa bila neka greska na crevu i svi odleteli u vazduh"

zamolio bi te da ne postujes neke tvrdnje za koje nisi siguran
prvo pitaj, dobices odgovor

ovo sto si napisao je cista glupost

srdjos
 
Odgovor na temu

Milan Milosevic

Član broj: 67
Poruke: 932
77.46.225.*



+31 Profil

icon Re: POinteri u Delphiu21.04.2007. u 13:19 - pre 207 meseci
Pa mogu da navedem odprilike sta se kod mene desavalo. Ne mogu da vam dam kod jer je odavno promenjen. Svar ide ovako nekako.
Definisem lokalnu promenjivu V nekog tipa i to radi ok. Testiram proceduru sve radi ko sto je predvideno. Zati dalje u kodu recimo sam sprilike defnisao niz dinamicki var
n:array of extended;
i ko zna sta jos.
I tada pocinje da me zeza. I to tako sto u zavinosti od vrednosti nekog elementa niza menja se vrednost moje promenjive V. Onda muke i dovijanja da se to sredi. Onda isti problem na neku drugu promenjivu.
Sve je pisano korektno a opet ne radi.I to ne odmah vec kad stvar podmakne tako da ne mozes nikako da ispravis stavari. Onda sedes zamenis dinamisko niz sa nekim nizom
n:array[0..1000] of extended;
i nema vise greske sve radi ok.
Na takvu ja gresku mislim.
 
Odgovor na temu

priki

Član broj: 24732
Poruke: 700
212.103.132.*

ICQ: 174153511


+26 Profil

icon Re: POinteri u Delphiu21.04.2007. u 13:35 - pre 207 meseci
prva stvar
nadji malo literature i procitaj sta je codenaming (pravila definisanja promenjivih)
dakle, ako definises neku promenjivu, daj tom imenu neki smisao,
za cega je ta promenjiva namenjena, a ne slovo V ili n

recimo ovako

Code:

var
  nizExt: array of extended;


ili

Code:

var
  nizBoja: array of TColor;


druga stvar,

kod dinamickih nizova moras definisati njihovu velicinu
bez toga ti nece raditi

Code:

  SetLength(nizBoja, 100);


to sto si naveo je amaterska greska oko manipulisanja
clanovima u nizu ili sta si vec radis sa nizom
a nikakva greska od Delphija a kamoli da ima veze sa memorijom

postuj kod pa cemo videti

srdjos
 
Odgovor na temu

Milan Milosevic

Član broj: 67
Poruke: 932
77.46.225.*



+31 Profil

icon Re: POinteri u Delphiu21.04.2007. u 13:43 - pre 207 meseci
Pa to sam naveo kao primer promenjive su imale drugacije oznake. Trenutno primer nemam za to. Ako se ponovo javi takav slucaj otvoricu temu pa cemo ga detaljnije analizirati. To se ne desava vec duze vreme jer prosto kaoristim ono sto kod mene radi odlicno pa nemam potrebu da menjam.
 
Odgovor na temu

priki

Član broj: 24732
Poruke: 700
212.103.132.*

ICQ: 174153511


+26 Profil

icon Re: POinteri u Delphiu21.04.2007. u 13:51 - pre 207 meseci
Citat:
Milan Milosevic: Pa to sam naveo kao primer promenjive su imale drugacije oznake. Trenutno primer nemam za to. Ako se ponovo javi takav slucaj otvoricu temu pa cemo ga detaljnije analizirati. To se ne desava vec duze vreme jer prosto kaoristim ono sto kod mene radi odlicno pa nemam potrebu da menjam.


pajto, bez uvrede
ali izgleda da stvarno imas frke oko promenjivih

@srki_82 je odmah pogodio

probaj to da ispravis i da pocnes to da primenjujes
na nacin koji je svima razumljiv, pre svega tebi

ima i slucajeva da su ljudi dobijali otkaze
zbog nepostovanja namecoding-a u programerskim
firmama


[Ovu poruku je menjao priki dana 21.04.2007. u 15:08 GMT+1]
 
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: POinteri u Delphiu21.04.2007. u 22:02 - pre 207 meseci
Najverovatnija greska koju si imao kada si koristio dinamicke nizove je to sto si ili zaboravljao da alociras dovoljnu kolicinu memorije da podatke smestis u nju, ili si citao podatak sa indexom npr. 2345, a alocirao si memoriju i popunio niz sa 1000 elemenata.

Ne kazem da uvek treba koristiti dinamicko kreiranje objekata... zbog cega bi neko pisao:
Code:
var
  Niz: array of Integer;
begin
  SetLength(Niz, 10);
  .
  .
  .
  Niz := nil;
end;

kad moze
Code:
var
  Niz: array [0..9] of Integer;
begin
  .
  .
  .
end;

ili zasto
Code:
var
  Broj: ^Integer;
begin
  New(Broj);
  Broj^ := 5;
  .
  .
  .
  Dispose(Broj);
end;

umesto
Code:
var
  Broj: Integer;
begin
  Broj := 5;
  .
  .
  .
end;

ali kada treba recimo da kreiras od 5 - 50 edit kontrola da bi korisnik uneo atribute vezane za neki artikal ili sta vec, umesto da vizuelno kreiras 50 kontrola i da ih sakrijes, pa onda kroz kod da pojavis onoliko koliko ti treba, ti jednostavno u kodu dinamicki kreiras onoliko koliko ti treba i kada ti vise ne trebaju obrises ih.
Drugi primer... da uzmemo niz... treba ti program koji treba da ucita fajl CEO fajl u memoriju ako je moguce... ti mozes da napravis niz od mnooogo elemenata (recimo 10000000) i ako korisnik pokusa da ucita veci fajl jednostavno kazes da ne moze, a mozes da kada korisnik izabere fajl probas da zauzmes blok memorije velicine fajla i tako ces moci da podrzis i mnogo vece fajlove (naravno ako imas dosta memorije), ali za fajm velicine 1 bajt neces bezveze zauzeto jos 9999999 kao sto bi bio slucaj da nisi koristio dinamicki niz.

Zakljucak... ne treba bespotrebno preterivati sa upotrebom pointera i dinamickog kreiranja, ali ne treba bezati od pointera.
 
Odgovor na temu

Milan Milosevic

Član broj: 67
Poruke: 932
91.150.119.*



+31 Profil

icon Re: POinteri u Delphiu23.04.2007. u 11:43 - pre 207 meseci
To i ja kazem.U svemu se slazemo. Ne treba preterivati ako nema potrebe. I koristiti kad je to neophodno i isplatiljivo po pitanju memorije.
 
Odgovor na temu

[es] :: Pascal / Delphi / Kylix :: POinteri u Delphiu

Strane: 1 2

[ Pregleda: 5722 | Odgovora: 24 ] > FB > Twit

Postavi temu Odgovori

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