Nažalost sam preumoran da se natjeram protumačit si cijeli program, ali imaš jedan detalj
[code:1]
LIST insertion_sort(LIST *L){
position p1,p;
LIST *LA;
int found;
p1=MAKE_NULL(LA);
p=FIRST(*L);
p1=FIRST(*LA);
found=0;
INSERT (RETRIEVE(p,*L),p1,LA);
p=NEXT(p,*L);
while(p!=END(*L)){
while(!found && (p1!=END(*LA))){
if (RETRIEVE(p,*L)<=RETRIEVE(p1,*LA)) <--od ovog dijela
found=1;
}
else p1=NEXT(p1,*LA); <--recimo do ovog dijela
INSERT (RETRIEVE (p,*L),p1,LA);
/*DELETE(p,L);*/
p=NEXT(p,*L);
}
L=LA;
return *L;
}
[/code:1]
Onaj if označen prvom strelicom nema vitičaste zagrade iza sebe pa se else ne odnosi ni na što. Ne znam na čemu je ovaj kod bio kompajliran, meni javlja parse error (devc++).
A pretpostavimo li da postoji ta zagrada...nek neko s većom sposobnošću razmišljanja u ove sate odgovori...Ili možda da kod ovako izgleda
[code:1]
LIST insertion_sort(LIST *L){
position p1,p;
LIST *LA;
int found;
p1=MAKE_NULL(LA);
p=FIRST(*L);
p1=FIRST(*LA);
found=0;
INSERT (RETRIEVE(p,*L),p1,LA);
p=NEXT(p,*L);
while(p!=END(*L)){
while(!found && (p1!=END(*LA))){ <-- sporni while
if (RETRIEVE(p,*L)<=RETRIEVE(p1,*LA))
found=1;
else p1=NEXT(p1,*LA);
} <--vitičasta zagrada u ovom redu, onda bi trebalo štimat, bar sintaktički
INSERT (RETRIEVE (p,*L),p1,LA);
/*DELETE(p,L);*/
p=NEXT(p,*L); <--poslije ovoga, recimo, found=0;
}
L=LA;
return *L;
}
[/code:1]
I fali ti found=0;, recimo tamo gore gdje sam označio... bez toga ti se ovaj (sporni) while vrti dok se ne ispuni if (RETRIEVE(p,*L)<=RETRIEVE(p1,*LA)) i više nikad.
Nažalost sam preumoran da se natjeram protumačit si cijeli program, ali imaš jedan detalj
Kod: |
LIST insertion_sort(LIST *L){
position p1,p;
LIST *LA;
int found;
p1=MAKE_NULL(LA);
p=FIRST(*L);
p1=FIRST(*LA);
found=0;
INSERT (RETRIEVE(p,*L),p1,LA);
p=NEXT(p,*L);
while(p!=END(*L)){
while(!found && (p1!=END(*LA))){
if (RETRIEVE(p,*L)<=RETRIEVE(p1,*LA)) <--od ovog dijela
found=1;
}
else p1=NEXT(p1,*LA); <--recimo do ovog dijela
INSERT (RETRIEVE (p,*L),p1,LA);
/*DELETE(p,L);*/
p=NEXT(p,*L);
}
L=LA;
return *L;
}
|
Onaj if označen prvom strelicom nema vitičaste zagrade iza sebe pa se else ne odnosi ni na što. Ne znam na čemu je ovaj kod bio kompajliran, meni javlja parse error (devc++).
A pretpostavimo li da postoji ta zagrada...nek neko s većom sposobnošću razmišljanja u ove sate odgovori...Ili možda da kod ovako izgleda
Kod: |
LIST insertion_sort(LIST *L){
position p1,p;
LIST *LA;
int found;
p1=MAKE_NULL(LA);
p=FIRST(*L);
p1=FIRST(*LA);
found=0;
INSERT (RETRIEVE(p,*L),p1,LA);
p=NEXT(p,*L);
while(p!=END(*L)){
while(!found && (p1!=END(*LA))){ <-- sporni while
if (RETRIEVE(p,*L)<=RETRIEVE(p1,*LA))
found=1;
else p1=NEXT(p1,*LA);
} <--vitičasta zagrada u ovom redu, onda bi trebalo štimat, bar sintaktički
INSERT (RETRIEVE (p,*L),p1,LA);
/*DELETE(p,L);*/
p=NEXT(p,*L); <--poslije ovoga, recimo, found=0;
}
L=LA;
return *L;
}
|
I fali ti found=0;, recimo tamo gore gdje sam označio... bez toga ti se ovaj (sporni) while vrti dok se ne ispuni if (RETRIEVE(p,*L)⇐RETRIEVE(p1,*LA)) i više nikad.
_________________ -山よ,山よ! 山は活きて居る!-
|