Search
 
 
  Engleski
 
 
 
Open in this window (click to change)
Forum@DeGiorgi: Početna
Forum za podršku nastavi na PMF-MO
Login Registracija FAQ Smajlići Članstvo Pretražnik Forum@DeGiorgi: Početna

pomoć sa queueom
WWW:

Moja sarma
 
Započnite novu temu   Odgovorite na temu   printer-friendly view    Forum@DeGiorgi: Početna -> Kolegiji 2. godine -> Strukture podataka i algoritmi
Prethodna tema :: Sljedeća tema  
Autor/ica Poruka
piko
Forumaš(ica)
Forumaš(ica)


Pridružen/a: 09. 10. 2009. (18:20:25)
Postovi: (26)16
Sarma = la pohva - posuda
= 4 - 0

PostPostano: 3:38 pon, 2. 11. 2009    Naslov: pomoć sa queueom Citirajte i odgovorite

bio bih jako zahvalan na pomoći sa ovim problemom!

ne radi se ni o implementaciji, ni o nekakvom algoritmu već o pomoćnoj funkciji pa se valjda može riješiti ovdje.

ili da mi samo netko kaže u čemu je stvar...

QUEUE je implementiran pomoću [b]pointera[/b], i sve što želim je provjeriti je li int x unutar reda Q.
[b]ali[/b], funkcija se mora moći izvršavati više puta na [b]istom[/b] redu.

znači, želim provjeriti je li 7 u redu Q, pa pozovem funkciju. onda želim provjeriti je li 327 u Q, i opet pozovem funkciju.

ali u čemu je problem:
ako bi išli najjednostavnije,

[code:1]int jel_unutra(int n, QUEUE Q){
while(!EMPTY(Q)){
if(n==FRONT(Q)) return 1;
DEQUEUE(&Q);
}
return 0;
} [/code:1]

onda nakon samo jedne provjere cijeli red iščezne (jer je implementiran preko pointera, pa DEQUEUE ne ostaje samo u funkciji).

zato sam probao uvesti pomoćni red A, koji će kupiti sve što "otpadne" od prvog reda prilikom DEQUEUE-anja, npr

[table]
Q 2 4 6 17 4
A [/table]

nakon [tt]DEQUEUE(&Q);[/tt]

[table]
Q 4 6 17 4
A 2[/table]

kako operacije sa redom sve idu u istom smjeru, mogu isprazniti cijeli Q, i napuniti cijeli A (pritom bilježeći jel traženi element unutra)

[table]
Q
A 2 4 6 17 4[/table]

i onda opet sve vratim u Q:

[table]
Q 2 4 6 17 4
A [/table]

činilo mi se da se tako red Q neće izbrisati i da ću moći višestruko provjeravati je li neki element unutra. u C-u bi to izgledalo ovako (uz implementaciju reda pomoću pointera):

[code:1]int jel_unutra(int x,QUEUE Q){
QUEUE A;
MAKE_NULL(&A);
int unutra = 0;
int y;

while (!EMPTY(Q)) {
y = FRONT(Q);
if(x==FRONT(Q))unutra=1;
DEQUEUE(&Q);
ENQUEUE(y, &A);
}

while (!EMPTY(A)){
y = FRONT(A);
DEQUEUE(&A);
ENQUEUE(y, &Q);
}

return unutra;
}[/code:1]

i funkcija stvarno radi ako je riječ o samo jednoj provjeri, no ako ju pozovem dva ili više puta, program se ruši :( :( :(

u čemu je greška? zašto ovo ne radi za više poziva?

ili možda postoji neki drugi način za višestruko provjeravanje je li neki element u redu? funkcija bi trebala raditi u petlji, znači da se red ne uništi kad se pozove funkcija.

svaki savjet bit će obilato obasut sarmom :zlatnizub:
bio bih jako zahvalan na pomoći sa ovim problemom!

ne radi se ni o implementaciji, ni o nekakvom algoritmu već o pomoćnoj funkciji pa se valjda može riješiti ovdje.

ili da mi samo netko kaže u čemu je stvar...

QUEUE je implementiran pomoću pointera, i sve što želim je provjeriti je li int x unutar reda Q.
ali, funkcija se mora moći izvršavati više puta na istom redu.

znači, želim provjeriti je li 7 u redu Q, pa pozovem funkciju. onda želim provjeriti je li 327 u Q, i opet pozovem funkciju.

ali u čemu je problem:
ako bi išli najjednostavnije,

Kod:
int jel_unutra(int n, QUEUE Q){
   while(!EMPTY(Q)){
      if(n==FRONT(Q)) return 1;
      DEQUEUE(&Q);
   }
   return 0;
}


onda nakon samo jedne provjere cijeli red iščezne (jer je implementiran preko pointera, pa DEQUEUE ne ostaje samo u funkciji).

zato sam probao uvesti pomoćni red A, koji će kupiti sve što "otpadne" od prvog reda prilikom DEQUEUE-anja, npr

Q246174
A     


nakon DEQUEUE(&Q);

Q46174
A2   


kako operacije sa redom sve idu u istom smjeru, mogu isprazniti cijeli Q, i napuniti cijeli A (pritom bilježeći jel traženi element unutra)

Q
A246174


i onda opet sve vratim u Q:

Q246174
A     


činilo mi se da se tako red Q neće izbrisati i da ću moći višestruko provjeravati je li neki element unutra. u C-u bi to izgledalo ovako (uz implementaciju reda pomoću pointera):

Kod:
int jel_unutra(int x,QUEUE Q){
    QUEUE A;
    MAKE_NULL(&A);
    int unutra = 0;
    int y;
   
    while (!EMPTY(Q)) {
                      y = FRONT(Q);
                      if(x==FRONT(Q))unutra=1;
                      DEQUEUE(&Q);
                      ENQUEUE(y, &A);
                      }
   
    while (!EMPTY(A)){
          y = FRONT(A);
          DEQUEUE(&A);
          ENQUEUE(y, &Q);
          }                 
                           
    return unutra;
}


i funkcija stvarno radi ako je riječ o samo jednoj provjeri, no ako ju pozovem dva ili više puta, program se ruši Sad Sad Sad

u čemu je greška? zašto ovo ne radi za više poziva?

ili možda postoji neki drugi način za višestruko provjeravanje je li neki element u redu? funkcija bi trebala raditi u petlji, znači da se red ne uništi kad se pozove funkcija.

svaki savjet bit će obilato obasut sarmom Zlatni zub


[Vrh]
Korisnički profil Pošaljite privatnu poruku
Gino
Forumaš(ica)
Forumaš(ica)


Pridružen/a: 11. 09. 2008. (10:54:06)
Postovi: (370)16
Sarma = la pohva - posuda
-29 = 108 - 137
Lokacija: Pula

PostPostano: 9:26 pon, 2. 11. 2009    Naslov: Citirajte i odgovorite

magao bi tokom punjenja reda brojat kolko si ih stavio unutra,
tako da znas kolko ih ima
onda pogledas dal je na frontu ako nije stavis ga na rear i pogledas novi front, ako je sad to taj, eventualno one preostale ponovno izvrtis, sa reara na front, da redosljed ne bude promjenjen, ako to nije bitno onda nis, to radis u jednoj for petlji, gdje ti se npr smanjuje broj elemenata koje jos trebas provjerit,
jer bez toga, bi to radio beskonacno, mozda, jer red ne bi bio prazan

ako u redu imas sve elemente razlicite, onda je dovoljno zapamtit prvog i stat kad ponovno dodes na njega, onda ne treba brojat kolko ih ima
magao bi tokom punjenja reda brojat kolko si ih stavio unutra,
tako da znas kolko ih ima
onda pogledas dal je na frontu ako nije stavis ga na rear i pogledas novi front, ako je sad to taj, eventualno one preostale ponovno izvrtis, sa reara na front, da redosljed ne bude promjenjen, ako to nije bitno onda nis, to radis u jednoj for petlji, gdje ti se npr smanjuje broj elemenata koje jos trebas provjerit,
jer bez toga, bi to radio beskonacno, mozda, jer red ne bi bio prazan

ako u redu imas sve elemente razlicite, onda je dovoljno zapamtit prvog i stat kad ponovno dodes na njega, onda ne treba brojat kolko ih ima



_________________
Mario Berljafa
[Vrh]
Korisnički profil Pošaljite privatnu poruku
markotron
Forumaš(ica)
Forumaš(ica)


Pridružen/a: 26. 10. 2008. (12:07:29)
Postovi: (95)16
Spol: kućni ljubimac
Sarma = la pohva - posuda
= 28 - 28
Lokacija: Umag

PostPostano: 10:35 pon, 2. 11. 2009    Naslov: Citirajte i odgovorite

Mozda se moze zaobici ta funkcija. Jer cudno mi je da ako vec trebas tu funkciju da koristis QUEUE. Bolje bi ti bilo koristiti LIST ili tako nesto.
Mozda se moze zaobici ta funkcija. Jer cudno mi je da ako vec trebas tu funkciju da koristis QUEUE. Bolje bi ti bilo koristiti LIST ili tako nesto.



_________________
reductio ad absurdum
[Vrh]
Korisnički profil Pošaljite privatnu poruku MSNM
Prethodni postovi:   
Započnite novu temu   Odgovorite na temu   printer-friendly view    Forum@DeGiorgi: Početna -> Kolegiji 2. godine -> Strukture podataka i algoritmi Vremenska zona: GMT + 01:00.
Stranica 1 / 1.

 
Forum(o)Bir:  
Ne možete otvarati nove teme.
Ne možete odgovarati na postove.
Ne možete uređivati Vaše postove.
Ne možete izbrisati Vaše postove.
Ne možete glasovati u anketama.
You cannot attach files in this forum
You can download files in this forum


Powered by phpBB © 2001, 2002 phpBB Group
Theme created by Vjacheslav Trushkin
HR (Cro) by Ančica Sečan