Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.

varijacije bez ponavljanja

[es] :: Pascal / Delphi / Kylix :: varijacije bez ponavljanja

[ Pregleda: 3353 | Odgovora: 5 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

miniplazma

Član broj: 240037
Poruke: 68
*.crnagora.net.



Profil

icon varijacije bez ponavljanja16.05.2010. u 13:07 - pre 169 meseci
Trebam da napisem program za generisanje svih varijacija bez ponavljanja k-te klase od n elemenata.Znam kako da uradim varijacije sa ponavljanjem,treba li u tom kodu nesto da promjenim ili da pisem novi program.Ako trebam da pisem novi mogu li neke ideje jer bas ne znam kako.Moze i rekurzivno i nerekurzivno
Code:
program varijacije_sa_pon;

type niz=array[1..10] of integer;

var

    x,y,z:niz;

    nn,kk,i,br:integer;

procedure stampaniza(n:integer;a:niz);

var

    i:integer;

begin

    for i:=1 to n do

        write(a[i]);

    writeln;

end;

function jednaki (n:integer;x,y:niz):boolean;

begin

    jednaki:=true;

    for i:=1 to n do

        if x[i]<>y[i] then

            begin

                jednaki:=false;

                break;

            end;

end;

procedure sledeca_var(n,k:integer;var x:niz);

var

    i,j:integer;

begin

    i:=k;

    while ((x[i]=n)and(i>0)) do

        i:=i-1;

    x[i]:=x[i]+1;

    for j:=i+1 to n do

        x[j]:=1;

end;

begin

    write('n=');

    readln(nn);

    write('k=');

    readln(kk);

        br:=1;

    for i:=1 to kk do

        begin

            x[i]:=1;

            y[i]:=nn;

        end;

    while not jednaki(kk,x,y) do

        begin

            stampaniza(kk,x);

            sledeca_var(nn,kk,x);

            br:=br+1;

        end;

    stampaniza(kk,x);

    writeln('Broj varijacija sa ponavljanjem: ',br);

    readln;

end.
 
Odgovor na temu

salaczr

Član broj: 160654
Poruke: 103
*.dynamic.isp.telekom.rs.



+5 Profil

icon Re: varijacije bez ponavljanja17.05.2010. u 10:03 - pre 169 meseci
Code:
write('n=');

    readln(nn);

    write('k=');

    readln(kk);

        br:=1;

    for i:=1 to kk do

        begin

            x[i]:=1;

            y[i]:=nn;

        end;

Ovo parce koda ce popuniti niz Y sa samo jednom vrednoscu nn, a niz X sa jedinicama. Mislim da to i nisi hteo. Opisi malo bolje problem da bi mogli da ti pomognemo.
 
Odgovor na temu

miniplazma

Član broj: 240037
Poruke: 68
*.crnagora.net.



Profil

icon Re: varijacije bez ponavljanja17.05.2010. u 11:06 - pre 169 meseci
ovo je kod za varijacije sa ponavljanjem
ako je n=3 a k=2 prvi niz x popunjava sa 2 jedinice(prva moguca varijacija sa ponavljanjem),niz y sa dvije 3(poslednja moguca varijacija).dok su razliciti radi sledece:
stampan niz x
11
-zatim povecava zadnju cifru dok ne bude jednaka n,tj 3.bice:
12
13
-kada je zadnja cifra jednaka 3 ,pomjera se indeks niza mjesto unazad i svi clanovi niza posl njega se postavljaju na jedan.i ponovo se zadnji clan povecava dok ne bude jednak n
21
22
23
indeks se pomjeri na prethodni,i povecava se do n
31
32
33
_____________________
sad za varijacije bez ponavljanja ,npr n=4 ,k=3 bi trebalo da popuni x sa 123 a y sa 432
i trebalo bi da stampa:
123
124
132
134
213
214
321
324
412
413
423
431
432

da radim sa skupovima,pa da redom dodajem u skup sve brojeve koji se javljaju prije broja koji mijenjam i da prvi koji nije u skupu stavim na tu poziciju? ili nesto drugo?
 
Odgovor na temu

miniplazma

Član broj: 240037
Poruke: 68
*.crnagora.net.



Profil

icon Re: varijacije bez ponavljanja17.05.2010. u 22:35 - pre 169 meseci
Ovo je neki moj pokušaj,ali ne radi prog kako treba,preskače neke varijacije

Code:
program varijacije_bez_ponavljanja;

type niz=array[1..10] of integer;

    broj=1..40;

    skup=set of broj;

var

    x,y,z:niz;

    nn,kk,i,br,q:integer;

procedure stampaniza(n:integer;a:niz);

var

    i:integer;

begin

    for i:=1 to n do

        write(a[i]);

    writeln;

end;

function jednaki(a,b:niz;n:integer):boolean;

{vraca true ako su nizovi a i b duzine n jednaki}

var

    i:integer;

begin

    jednaki:=true;

    for i:=1 to n do

        if a[i]<>b[i] then

            begin

                jednaki:=false;

                break;

            end;

end;

procedure sledeca_var(n,k:integer;var x:niz);

var

    i,j:integer;

    s:skup;

begin

    i:=k;

    while ((x[i]=n) and(i>1)) do

        i:=i-1;

    s:=[];

    for j:=1 to i-1 do

        s:=s+[x[j]];

    while (not(x[i] in s) and (x[i]<n)) do

        x[i]:=x[i]+1;

    while ((x[i] in s)and(i>1)) do

        i:=i-1;

    for j:=i+1 to k do

        x[j]:=j;

end;

begin

    write('n= ');

    readln(nn);

    write('k= ');

    readln(kk);

    br:=0;

    for i:=1 to kk do

        x[i]:=i;

    for i:=1 to kk do

        y[i]:=nn+1-i;

    while not jednaki(x,y,kk) do

        begin

            stampaniza(kk,x);

            sledeca_var(nn,kk,x);

        end;

    stampaniza(kk,x);

    readln;

    

end.
 
Odgovor na temu

Picsel
Beograd

Član broj: 39817
Poruke: 440
95.180.79.*



+7 Profil

icon Re: varijacije bez ponavljanja18.05.2010. u 21:33 - pre 169 meseci
Code:
type nizInt=array[1..10] of integer;
type nizBool=array[1..10] of boolean;

var ukupanbroj,nn,kk:integer;
     niz1:nizBool;
     niz2:nizInt;

procedure varijacije(n,k,trenutnacifra:integer; uvarijaciji:nizBool; varijacija:nizInt);
var i:integer;
begin
  if trenutnacifra>k
    then begin
             {ispis trenutne varijacije}
             ukupanbroj:=ukupanbroj+1;
             for i:=1 to k do
               write(varijacija[i]);
             writeln;
           end
    else begin
             for i:=1 to n do
               if not uvarijaciji[i]
                 then begin
                           uvarijaciji[i]:=true;
                           varijacija[trenutnacifra]:=i;
                           varijacije(n,k,trenutnacifra+1,uvarijaciji,varijacija);
                           uvarijaciji[i]:=false;
                        end;
          end;
end;

begin
  readln(nn,kk);
  varijacije(nn,kk,1,niz1,niz2);
  writeln('Ukupan broj varijacija: ',ukupanbroj);
  readln;
end.


Ovako nesto? Procedura pokusava da u varijaciju doda neki broj od 1 do n koji vec nije stavljen u do sad generisan deo varijacije, i tako za svaku cifru. Kad napravi varijaciju, ispise.
 
Odgovor na temu

miniplazma

Član broj: 240037
Poruke: 68
*.crnagora.net.



Profil

icon Re: varijacije bez ponavljanja18.05.2010. u 21:40 - pre 169 meseci
da :)
hvala puno
 
Odgovor na temu

[es] :: Pascal / Delphi / Kylix :: varijacije bez ponavljanja

[ Pregleda: 3353 | Odgovora: 5 ] > FB > Twit

Postavi temu Odgovori

Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.