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

Permutacije help !!! (zadatak)
WWW:

Moja sarma
 
Započnite novu temu   Odgovorite na temu   printer-friendly view    Forum@DeGiorgi: Početna -> Kolegiji 1. godine, preddiplomski studij Matematika -> Programiranje 1 i 2
Prethodna tema :: Sljedeća tema  
Autor/ica Poruka
aenima
Forumaš(ica)
Forumaš(ica)


Pridružen/a: 17. 09. 2004. (17:03:42)
Postovi: (57)16
Spol: muško
Sarma = la pohva - posuda
= 1 - 0

PostPostano: 16:39 sri, 26. 4. 2006    Naslov: Permutacije help !!! Citirajte i odgovorite

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 !!!
Crying or Very sad


[Vrh]
Korisnički profil Pošaljite privatnu poruku Pošaljite e-mail
vsego
Site Admin
Site Admin


Pridružen/a: 06. 10. 2002. (22:07:09)
Postovi: (3560)16
Spol: zombi
Sarma = la pohva - posuda
854 = 1068 - 214
Lokacija: /sbin/init

PostPostano: 16:58 sri, 26. 4. 2006    Naslov: Citirajte i odgovorite

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). Confused

Zanemari da su to rijeci; permutiraj niz brojeva od 0 do n-1, sto program zapravo i radi (permutira niz indeksi). Cool Ta permutacija je solidno rutinska stvar, pa tu nema mudrolija. Very Happy Ostaje samo ispis koji je, opet, rutinski. Cool

Funkcija unutra() ti olaksava stvar jer pomaze preglednosti. Cool 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! Very Happy



_________________
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.
Drzim prodike
[Vrh]
Korisnički profil Pošaljite privatnu poruku
Gost






PostPostano: 2:00 čet, 27. 4. 2006    Naslov: Citirajte i odgovorite

Hvala puno, samo mala ispravka koda:

[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(j=0;j<n;++j) { // mislim da je ova petlja ide za j
u = 0;
for(i=0;i<k;++i)
if(indeksi[i]==j)
u= 1;
if(!u){
indeksi[k]=i;
permutiraj(k+1);
}
}
} [/code:1]

:wink:
Hvala puno, samo mala ispravka koda:

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(j=0;j<n;++j) { // mislim da je ova petlja ide za j 
              u = 0;
              for(i=0;i<k;++i)
                    if(indeksi[i]==j)
                            u= 1;
              if(!u){
                    indeksi[k]=i;
                    permutiraj(k+1);
              }
        }
}


Wink


[Vrh]
vsego
Site Admin
Site Admin


Pridružen/a: 06. 10. 2002. (22:07:09)
Postovi: (3560)16
Spol: zombi
Sarma = la pohva - posuda
854 = 1068 - 214
Lokacija: /sbin/init

PostPostano: 7:16 čet, 27. 4. 2006    Naslov: Citirajte i odgovorite

Da, stvarno... :blush: Copy/paste je majka mnogih gresaka... :oops:

Samo, onda i
[tt]indeksi[k]=i;[/tt]
treba biti
[tt]indeksi[k]=j;[/tt]

;)
Da, stvarno... Blush Copy/paste je majka mnogih gresaka... Embarassed

Samo, onda i
indeksi[k]=i;
treba biti
indeksi[k]=j;

Wink



_________________
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.
Drzim prodike
[Vrh]
Korisnički profil Pošaljite privatnu poruku
Prethodni postovi:   
Započnite novu temu   Odgovorite na temu   printer-friendly view    Forum@DeGiorgi: Početna -> Kolegiji 1. godine, preddiplomski studij Matematika -> Programiranje 1 i 2 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