Prethodna tema :: Sljedeća tema |
Autor/ica |
Poruka |
aenima Forumaš(ica)
Pridružen/a: 17. 09. 2004. (17:03:42) Postovi: (57)16
Spol:
|
Postano: 16:39 sri, 26. 4. 2006 Naslov: Permutacije help !!! |
|
|
Može li mi netko molim vas pojasniti princip ovog koda tj. ovakvog tipa kodova. Shvaćam što kod radi ali neznam kako bi ja sam došao na ideju da napišem nešto takvo. Gledajući sam kod te znajući i čemu služi čini mi se nemoguće shvatiti zašto je baš takav. Hodajući korak po korak po kodu vidim da radi što bi trebao ali opet ga nebih znao pravilno reproducirati a ne želim ga učiti napamet. Preciznije, zanima me da li se i kako se to može izvesti bez funkcije unutar, dakle samo s funkcijom perm.
[code:1]
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
int n;
char** rijeci;
int * indeksi;
int unutra(int j , int k){
int i;
for(i=0;i<k;++i)
if(indeksi[i]==j)
return 1;
return 0;
}
void permutiraj(int k)b
int i;
if(k==n){
for(i=0;i<n;++i)
printf("%s ",rijeci[indeksi[i]]);
printf("\n");
return;
}
for(i=0;i<n;++i)
if(!unutra(i , k)){
indeksi[k]=i;
permutiraj(k+1);
}
}
int main(){ ...
/*u glavnoj f-ji alociramo mem za rijeci i indekse te ucitamo rijeci, nakon toga pozovemo f-ju permutiraj na ovaj način : */
permutiraj(0);
/* te potom oslobodimo memoriju koju smo bili alocirali*/
[/code:1]
[quote]
zadatak: Napišite program koji učitava prirodan broj n, te nakon toga n riječi ( smijete pretpostaviti da svaka učitana riječ ima manje od 314 znakova ). Program treba ispisati sve permutacije tih n riječi na način da svaka permutacija bude ispisana u zasebnom retku, a riječi u pojedinoj permutaciji budu odvojene razmakom. Redosljed kojim će permutacije biti ispisivane nije od važnosti.[/quote]
btw: sutra imam komisiju iz c-a pa bih bio vrlo zahvalan na pomoći !!!
:cry:
Može li mi netko molim vas pojasniti princip ovog koda tj. ovakvog tipa kodova. Shvaćam što kod radi ali neznam kako bi ja sam došao na ideju da napišem nešto takvo. Gledajući sam kod te znajući i čemu služi čini mi se nemoguće shvatiti zašto je baš takav. Hodajući korak po korak po kodu vidim da radi što bi trebao ali opet ga nebih znao pravilno reproducirati a ne želim ga učiti napamet. Preciznije, zanima me da li se i kako se to može izvesti bez funkcije unutar, dakle samo s funkcijom perm.
Kod: |
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
int n;
char** rijeci;
int * indeksi;
int unutra(int j , int k){
int i;
for(i=0;i<k;++i)
if(indeksi[i]==j)
return 1;
return 0;
}
void permutiraj(int k)b
int i;
if(k==n){
for(i=0;i<n;++i)
printf("%s ",rijeci[indeksi[i]]);
printf("\n");
return;
}
for(i=0;i<n;++i)
if(!unutra(i , k)){
indeksi[k]=i;
permutiraj(k+1);
}
}
int main(){ ...
/*u glavnoj f-ji alociramo mem za rijeci i indekse te ucitamo rijeci, nakon toga pozovemo f-ju permutiraj na ovaj način : */
permutiraj(0);
/* te potom oslobodimo memoriju koju smo bili alocirali*/
|
Citat: |
zadatak: Napišite program koji učitava prirodan broj n, te nakon toga n riječi ( smijete pretpostaviti da svaka učitana riječ ima manje od 314 znakova ). Program treba ispisati sve permutacije tih n riječi na način da svaka permutacija bude ispisana u zasebnom retku, a riječi u pojedinoj permutaciji budu odvojene razmakom. Redosljed kojim će permutacije biti ispisivane nije od važnosti. |
btw: sutra imam komisiju iz c-a pa bih bio vrlo zahvalan na pomoći !!!
|
|
[Vrh] |
|
vsego Site Admin
Pridružen/a: 06. 10. 2002. (22:07:09) Postovi: (3560)16
Spol:
Lokacija: /sbin/init
|
Postano: 16:58 sri, 26. 4. 2006 Naslov: |
|
|
Ne postoji recept kako doci do nekog koda (osim "programiraj puno, pa ce ti iskustvo pomoci", sto ti sada bas i ne koristi). :?
Zanemari da su to rijeci; permutiraj niz brojeva od 0 do n-1, sto program zapravo i radi (permutira niz [tt]indeksi[/tt]). 8) Ta permutacija je solidno rutinska stvar, pa tu nema mudrolija. :D Ostaje samo ispis koji je, opet, rutinski. 8)
Funkcija [tt]unutra()[/tt] ti olaksava stvar jer pomaze preglednosti. 8) Naravno, mozes i bez nje:
[code:1]void permutiraj(int k){
int i;
if(k==n){
for(i=0;i<n;++i)
printf("%s ",rijeci[indeksi[i]]);
printf("\n");
return;
}
for(i=0;i<n;++i) {
u = 0;
for(i=0;i<k;++i)
if(indeksi[i]==j)
u= 1;
if(!u){
indeksi[k]=i;
permutiraj(k+1);
}
}
}[/code:1]
Sretno sutra! :D
Ne postoji recept kako doci do nekog koda (osim "programiraj puno, pa ce ti iskustvo pomoci", sto ti sada bas i ne koristi).
Zanemari da su to rijeci; permutiraj niz brojeva od 0 do n-1, sto program zapravo i radi (permutira niz indeksi). Ta permutacija je solidno rutinska stvar, pa tu nema mudrolija. Ostaje samo ispis koji je, opet, rutinski.
Funkcija unutra() ti olaksava stvar jer pomaze preglednosti. Naravno, mozes i bez nje:
Kod: | void permutiraj(int k){
int i;
if(k==n){
for(i=0;i<n;++i)
printf("%s ",rijeci[indeksi[i]]);
printf("\n");
return;
}
for(i=0;i<n;++i) {
u = 0;
for(i=0;i<k;++i)
if(indeksi[i]==j)
u= 1;
if(!u){
indeksi[k]=i;
permutiraj(k+1);
}
}
} |
Sretno sutra!
_________________ U pravilu ignoriram pitanja u krivim topicima i kodove koji nisu u [code]...[/code] blokovima.
Takodjer, OBJASNITE sto vas muci! "Sto mi je krivo?", bez opisa u cemu je problem, rijetko ce zadobiti moju paznju.
|
|
[Vrh] |
|
Gost
|
|
[Vrh] |
|
vsego Site Admin
Pridružen/a: 06. 10. 2002. (22:07:09) Postovi: (3560)16
Spol:
Lokacija: /sbin/init
|
|
[Vrh] |
|
|