Mala pomoc

3

Mala pomoc

offline
  • Nom  Male
  • Građanin
  • Pridružio: 17 Nov 2004
  • Poruke: 168
  • Gde živiš: Shanghai, China

@bone

takoreci, bobby bi ovde dobio assertion failed.... Very HappyVery HappyVery HappyVery HappyVery Happy
dobro poznat pop-up.. ;-)

@offtopic.

u igri "Oni" (Bungie) u jednom trenutku je iskocio pop-up:
"Yep, it crashed"
igra je naravno odmah kalirala...
cudo bozije sta try...catch... moze da napravi... raspadne se program i jos ispadne simpaticno.. Very HappyVery HappyVery HappyVery Happy



Registruj se da bi učestvovao u diskusiji. Registrovanim korisnicima se NE prikazuju reklame unutar poruka.
offline
  • Pridružio: 04 Sep 2003
  • Poruke: 24135
  • Gde živiš: Wien

E, jesmo slepi
typedef struct elem {int broj; struct elem *sled;} Elem; void StaRadi (elem*niz) { elem *tekuci=niz; while (tekuci) tekuci=tekuci->sled; tekuci=niz; }

Prvo, ono sto je nazvao niz je ustvari samo jedan elemenat (cvor). While petlja ce da se izvrsi samo jednom, posto taj "niz" ima poiner koji je = NULL.
Na kraju ce opet samo taj pomocni elemenat da uzme vrednost jedinog elementa u tzv. "nizu".
Da je hteo da napravi kruznu listu, trebalo je da pretposlednja linija glasi tekuci->sled = niz;

Dopuna: 29 Jun 2005 23:08

@Bone
Imas strukturu koja se sastoji od integera i pointera. Struktura je jednaka NULL kada pointer pokazuje na NULL, ili kada je vrednost integera = 0 (iz ovog razloga Liste ne mogu sadrzati nulu kao legalnu vrednost).
Izaci ce iz petlje onog momenta kada "sled" bude pokazivao na NULL, znaci, u datom momentu se nalazi na zadnjem elementu liste, a ne iza zadnjeg, jer tamo ne moze ni da stigne.

Mogu da postavim moju implementaciju LinkedList ovde (radio sam je kao zadatak na fakultetu u ovom semestru), pa da na listingu pokazem da ce garant ostati na zadnjem elementu, inace moja implementacija nikad ne bi dobila pozitivnu ocenu.



offline
  • Nom  Male
  • Građanin
  • Pridružio: 17 Nov 2004
  • Poruke: 168
  • Gde živiš: Shanghai, China

@bobby

mislim da si totalno promasio smisao pointera.... ali totalno... kakve veze da li element ima vrednost broj = 0 sa tim da li je NULL? integer broj moze da ima koju god oces vrednost u opsegu int-a...

takodje apsolutno netacno da je samo trebalo da stavi tekuci->sled = niz i da ostavi while(tekuci)...???

pa de ti je tu logika???

ceka da tekuci bude NULL da onda u tekucem pokusa da pristupi necemu u njemu??????

prijatelju... ne prave se tako aeroplani....

offline
  • Pridružio: 04 Sep 2003
  • Poruke: 24135
  • Gde živiš: Wien

@Nom
Ili ja lose pisem, ili ti lose citas. A ni ja tebe nista nisam razumeo...

Kada napises while(tekuci) to u znaci while (tekuci == true) iliti while (tekuci != NULL) ili while (tekuci !=0).
Dalje, "elem" je struktura koja se sastoji od jednog integera i jednog pointera. Bilo da integer bude nula, ili da pointer bude NULL, ona while petlja ce se zavrsiti.
Iz ovog razloga, da ne bi bilo prepranih izlazaka iz petlje (time sto je neko ubaci nulu na sredini liste kao integer u strukturi "elem"), zabranjuje se (tekstualno, ili uslovnim grananjem) unosenje nule kao elementa u liste.
Dalje, kada tekuci, tj. njegov "sled" deo bude NULL, sto znaci da ne postoji sledeci elemenat u list, zavrsava se petlja, a elemenat tekuci ce biti (pokaziva ce) na zadnjem elementu u listi. Ako sada zelis da dodas elemenat na kraju liste, samo ces "sled" usmeriti na elemenat formiran bilo gde u memoriji.

Da se napomenem jos nesto sto vec jesam: u ovom semestru, iz predmeta Algoritmi i strukture podataka, na vezbama sam dobio da uradim implementaciju LinkedList, i to sam radio 3 meseca (toliko mi je dato vremena). Ukoliko i dalje mislis da neznam o cemu pricam, mogu ti dati mail mog profesora, pa diskutuj sa njim.

offline
  • Pridružio: 17 Mar 2004
  • Poruke: 293
  • Gde živiš: UK

Citat:Dalje, "elem" je struktura koja se sastoji od jednog integera i jednog pointera. Bilo da integer bude nula, ili da pointer bude NULL, ona while petlja ce se zavrsiti.


???

Mnogo si omashio, ali mnogo! Obnovi malo znachenje pointera.

offline
  • Pridružio: 04 Sep 2003
  • Poruke: 24135
  • Gde živiš: Wien

Ma da li ovde uopste neko cita sta ja pisem, ili ste samo resili da me malo... ?
Zasto si gore podebljao slova u kojima spominjem prvi deo strukture, a posle mi pominjes pointer?
Jel tebi jasno sta je struktuiran podatak (typedef, struct, record u paskalu...)?
To je skup razlicitih vrsta svega i svacega sto mozes posle nazvati zajednickim imenom. Ovde je to jedan integer, plus jedan poiner na sledeci elemenat istovetne strukture.

btw. da nisam naucio poinere ne bih polozio pola predmeta koje sam dao u ovom semestru.

Ukoliko od sada nadalje samo napisete te lamerske komentare tipa "obnovi gradivo" bez da argumentujete - iskoristicu i ja moje lamersko pravo da brisem postove i da banujem druge lamere sa foruma (sada su mi iskocili osiguraci).

offline
  • Pridružio: 17 Mar 2004
  • Poruke: 293
  • Gde živiš: UK

Ama choveche, prochitaj quotirano i podebljano, pa mi opet kazhi da si u pravu. Kakve veze ima integer chlan sa celim ovim problemom? To nam objasni (jer nisam jedini koji se to pita)

Ako cesh zbog toga da banujesh, shta da ti kazhem, super si admin.

offline
  • Pridružio: 04 Sep 2003
  • Poruke: 24135
  • Gde živiš: Wien

Ajmo pesice...

"tekuci" je objekat tipa "elem"
tip (struktura) "elem" se sastoji od jednog integera i jednog pointera.

kako mislis u glupom generickom uslovu, kao sto je onaj u while(tekuci) da preciziras kada da se petlja zavrsi (posto je "tekuci" struktura, a ne trivijalan tip kao recimo integer).

Lepo, zavrsice se kada bilo koji od trivijalnih tipova koji cine strukturu tog "tekuceg" bude nula. Ukoliko to bude onaj deo strukture koji je tipa integer, da je jednak nuli, petlja ce se zavrsiti. Ukoliko pa pointer iz te strukture bude jednak null, isto ce se petlja zavrsiti.
Sta vama ovde nije jasno?

Ukoliko je potrebno, nacrtacu sutra.

"tekuci" iterira kroz celu listu dok ne naidje na nulu ili na NULL pointer u BILO KOM OD ELEMENATA LISTE.

Ukoliko nikad niste radili operacije nad strukturama, to nije moj problem, ali nemojte da mi se podsmevate izjavama "da obnovim gradivo" ili slicno.

offline
  • Pridružio: 17 Mar 2004
  • Poruke: 293
  • Gde živiš: UK

@bobby :
Citat:"tekuci" je objekat tipa "elem"
NE, 'tekuci' je POINTER na taj tip. tekuci==true ako je taj pointer bilo shta osim nule!

Evo, da probam josh jednom, pa ako ni ovo ne upali, odustajem!

Dakle :

elem *tekuci=niz;
// POINTER tekuci pokazuje na pochetak liste

while (tekuci) tekuci=tekuci->sled;
Sve dok je POINTER validan, dodeljuj mu sledeci element iz trenutnog.
Recimo, da je lista izgledala ovako :
a1 = [0, &a2], a2 = [0, &a3], a3 = [0, 0] , dakle zadnji 'sled' pointer je prazan (kraj liste). Na pochetku petlje je tekuci=&a1. U prvoj iteraciji postaje tekuci = a1->sled = &a2, dakle i dalje je validan pointer (adresa)... u zadnjoj iteraciji je tekuci = a3->sled = 0 i tu se petlja prekida (while (tekuci) je false zbog NULL pointera)!

Na kraju je tekuci=niz, chisto iz zezanja, ili da zbuni ljude.

Chlan "broj" se NIGDE ne pominje, niti njegova vrednost ima ikakvog uticaja na funkciju!

Dopuna: 30 Jun 2005 23:08

Josh neshto da dodam :

To shto tebe zbunjuje, da je u 'while' uslovu OBJEKAT a ne POINTER, ne bi mogao ni da prevedesh u modernom kompajleru, jer se vrednost objekta ne evaluira u 'bool' tip automatski. U C++u bi morao da implementirash "conversion operator bool", recimo u gornjem sluchaju (i da zadovolji tvoje 'broj!=0') :

class elem { public:   int broj;   elem *sled;   operator bool() const   {     return broj != 0;   } };

Sa ovako definisanom strukturom/klasom bi mogao da pishesh recimo :
elem a; if (a) {    ... }

offline
  • Pridružio: 18 Apr 2003
  • Poruke: 5001
  • Gde živiš: Beograd

@bobby
U while (tekuci) se gleda kada je memorijska adresa jednaka nuli a ne kada je objekat tipa elem jednak nuli, jedino na taj nacin mozes i da znas gde je kraj liste...

Ko je trenutno na forumu
 

Ukupno su 581 korisnika na forumu :: 1 registrovan, 2 sakrivenih i 578 gosta   ::   [ Administrator ] [ Supermoderator ] [ Moderator ] :: Detaljnije

Najviše korisnika na forumu ikad bilo je 3466 - dana 01 Jun 2021 17:07

Korisnici koji su trenutno na forumu:
Korisnici trenutno na forumu: Hoegaarden