[ lordy007 @ 21.08.2007. 02:40 ] @
zdravo ja sam novi ovde i imam mnogo malo poznavanje od programiranje. Pa hocu da napravim neki program koju ce generise sve mozne kombinace od set [1..37] od 7 elementi (normalno za loto 7/37) pa moji prijatel je zahtevao od mene da naprvaim program koja ce generise sve mozne kombinacije i da gi snima vo text fajl. no ima i drugi zadatak. Od sve tih kombinacija treba da se odelat sve mozni kombinacija u razlicitih text falovima sa 3:4 4:3 5:2 2:5 (paren:neparen)
pr.1. da bi u text1 biti generisani svi kombinacija sa 3:4(paren:neparen) odnos
1,6,2,3,7,9,8
1,6,2,3,7,11,8
i tako dajle
pa znaci meni treba program sta ce generise u razlicitih text fajlovima razlicitih kombinacija sa 37 broja od 7 broja.
text: sve moznih kombinacijama
text1: 3:4 (paren:neparen)
text2: 4:3(paren:neparen)
text3: 5:2(paren:neparen)
text4: 2:5(paren:neparen)

sve je dobrodojdeno svi soveti i mislenja posto ja ne znam ni kao da pocnem :) hvala puno

[Ovu poruku je menjao lordy007 dana 21.08.2007. u 03:54 GMT+1]

[Ovu poruku je menjao lordy007 dana 21.08.2007. u 04:19 GMT+1]
[ viking13 @ 21.08.2007. 09:45 ] @
Citat:
lordy007: Pa hocu da napravim neki program koju ce generise sve mozne kombinace od set [1..37] od 7 elementi (normalno za loto 7/37)
...
sve je dobrodojdeno svi soveti i mislenja posto ja ne znam ni kao da pocnem :) hvala puno


Ima previše kombinacija da bi imalo smisla generisati svaku moguću i zapisati je u fajl. Čak i da to uradiš, ostaje pitanje na osnovu čega će tvoj prijatelj da izabere onu koju će da odigra?

Po meni je najbolje rešenje da mu program da onoliko kombinacija koliko mu treba po njegovim uslovima.

Iako dodatni uslovi deluju u početku pomalo komplikovano, stvar je u suštini veoma jednostavna.

Svi znamo kako izgleda izvlačenje brojeva. Prvo se izmešaju loptice, pa se izvuče 7 komada. :)

Primeni istu stvar na svoj program.

1. Izmešaš niz brojeva od 1 do 37
2. Uzmeš prvih 7 i zapišeš u fajl
3. Uzmeš prva 4 parna, zatim prva 3 neparna i zapišeš u drugi fajl
4. Uzmeš prva 3 parna, zatim prva 4 neparna i zapišeš u treći fajl
5. Uzmeš prvih 5 parnih, zatim prva 2 neparna i zapišeš u četvrti fajl
6. Uzmeš prva 2 parna, zatim prvih 5 neparnih i zapišeš u peti fajl
7. Ponoviš postupak od 1 do 6 onoliko puta koliko mu kombinacija treba

Što se tiče prvog koraka možda nabolje da kreneš sa procedurom Izmesaj_niz koju je Mijo napisao u ovoj poruci http://www.elitesecurity.org/t278642-0#1673727
[ Nedeljko @ 21.08.2007. 09:46 ] @
Da vidimo koliko slogova treba da ima svaki od tih fajlova

0:7 - 50,388
1:6 - 488,376
2:5 - 1,779,084
3:4 - 3,162,816
4:3 - 2,965,140
5:2 - 1,465,128
6:1 - 352,716
7:0 - 31,824

Ukupno 10,295,472

Da li i dalje želiš da ispisuješ sve te silne kombinacije?
[ viking13 @ 21.08.2007. 09:51 ] @
Citat:
Nedeljko: Da vidimo koliko slogova treba da ima svaki od tih fajlova

0:7 - 50,388
1:6 - 488,376
2:5 - 1,779,084
3:4 - 3,162,816
4:3 - 2,965,140
5:2 - 1,465,128
6:1 - 352,716
7:0 - 31,824

Ukupno 10,295,472

Da li i dalje želiš da ispisuješ sve te silne kombinacije?


Kombinatorika mi nikad nije bila jača strana, tako da ne znam da li su brojke tačne, ali se u potpunosti slažem sa tobom da je totalno bespotrebno to raditi.

Odmah sam se setio scene iz filma "Potera za Srećkom" gde Mićko drži par hiljada listića i kaže novinarki: "Nema ako dobijem, nego kad dobijem." :)

Mislim da je mnogo bolje da mu svaki put program da onoliko kombinacija koliko mu treba po njegovim uslovima.
[ lordy007 @ 21.08.2007. 12:39 ] @
jeste 10295472 kombinacije :) znam da je mnogo i jos zelim da napravim taj program...filozofija mog prijatelja je 80% i vise od tih parni neparni kombinacija se izvlekuje u loto...do dusa ja ne ni igram loto :) li jeste seusete zelim da napravim taj program.... :)
Citat:
Njedelko ucekujem vishe...


[Ovu poruku je menjao lordy007 dana 21.08.2007. u 23:56 GMT+1]
[ lordy007 @ 21.08.2007. 22:58 ] @
Citat:
Što se tiče prvog koraka možda nabolje da kreneš sa procedurom Izmesaj_niz koju je Mijo napisao u ovoj poruci http://www.elitesecurity.org/t278642-0#1673727

to mi ne treba meni samo treba da izgenerisem teh kombinacija u text fajlovima i nista druge :) hvala ipak
[ TraktoRISTA Mijo @ 22.08.2007. 06:01 ] @
e aj kas navalio;)..eo koda,nadam se da imaš Pascal,kompajliraj i piči!ak ne,mogu ja stavit i exe..


Code:

program Project2;

type niz=array[0..7]of integer;

  var
  kom:array[1..2]of niz;
  f1,f2,f3,f4:textfile;

  function omjer(p,np:integer;n:niz):boolean;
  var
  i,a,b:integer;
  begin
  a:=0; b:=0;
    for i:=1 to 7 do if (n[i] mod 2) = 0 then inc(a) else inc(b);
    if (a=p)and(b=np)then omjer:=true else omjer:=false;
  end;

  procedure prepisi;
  var
  i:integer;
  s,s1:string;
  begin

    for i:=1 to 7 do begin str(kom[2,i],s1); s:=s+s1+' ';end;

    if omjer(3,4,kom[2])then writeln(f1,s)
    else if omjer(4,3,kom[2])then writeln(f2,s)
    else if omjer(5,2,kom[2])then writeln(f3,s)
    else if omjer(2,5,kom[2])then writeln(f4,s) ;

  end;

  procedure generiraj(n,k:integer);
  var
  j,t:integer;
  begin
  kom[1,0]:=-1;
    for j:=1 to k do kom[1,j]:=j;
  t:=1;

    while t<>0 do
      begin
        for j:=0 to k do kom[2,j]:=kom[1,j];
      t:=k;
        while kom[2,t]=n-k+t do dec(t);
      kom[2,t]:=kom[2,t]+1;
        for j:=t+1 to k do kom[2,j]:=kom[2,j-1]+1;
      prepisi;
      kom[1]:=kom[2];
      end;

  end;

begin
assign(f1,'text1.txt');
assign(f2,'text2.txt');
assign(f3,'text3.txt');
assign(f4,'text4.txt');
rewrite(f1);
rewrite(f2);
rewrite(f3);
rewrite(f4);

generiraj(37,7);

close(f1);
close(f2);
close(f3);
close(f4);

readln;
end.


et,puno sreće tebi i tvom drugaru ;)..mada ne znam kak će ti ovo pomoć..

a što se tiče algoritma,za one koje zanima:
generiraju se kombinacije u leksikografskom poretku
dakle krenemo od prve kombinacije 1..k(kod nas je to od 1..7) i u svakom koraku radimo sljedeće:
krenemo od desna na ljevo u kombinaciji i tražimo prvi broj za kojeg nevrjedi n-k+p=kom[p],jer je maximalna vrijednost za broj na p-tom mjestu
n-k+p(npr za n=5,k=3 zadnja kombinacija sa max vrijednostima je 345,za p=2 max broj je 4)
kad ga nađemo,uvećamo ga za jedan,a brojevi koji su desno od njega su redom za jedan veći od prethodnika
ispišemo drugi red,i onda ga prekopiramo u prvi red matrice s kojom radimo
npr. n=6,k=4
poč.komb
1234
prvi broj od desna
4
uvećamo za 1
5
dalje nema brojeva,kombinacija
1235
...
2356
prvi broj
3
uvećamo
4
svi sljedeći brojevi desno
4+1=5,5+1=6
kombinacija
2456

inače,postoji mali bugić:prva kombinacija će biti ispisana zadnja,lako se da sredit,al to i nije tako bitno..to je iz razloga što koristimo matricu sa sam dva reda,umjesto sa nk(broj kombinacija)redova,što bi u ovom slučaju zauzelo puno memorije

ipak,smatram da pogađanjem kombinacija nebi daleko stigli..jer nama netreba jedna slučajna,već sve kombinacije..al valjalo bi probat
pozz
[ lordy007 @ 22.08.2007. 14:13 ] @
druze hvala puno :) ovo cu da kompajliram u delphi!THANKS ALOT ;)
[ lordy007 @ 23.08.2007. 01:19 ] @
nemogu to prevediti u delphi ..jer ne znam neke osnovni funkcii pascala mozes li mi pomoci nesto oko toga?
[ chachka @ 23.08.2007. 05:38 ] @
Umesto
Code:

assign(f1,'text1.txt');
assign(f2,'text2.txt');
assign(f3,'text3.txt');
assign(f4,'text4.txt');
rewrite(f1);
rewrite(f2);
rewrite(f3);
rewrite(f4);

generiraj(37,7);

close(f1);
close(f2);
close(f3);
close(f4);

readln;

Stavi:
Code:

rewrite(f1,'text1.txt');
rewrite(f2,'text2.txt');
rewrite(f3,'text3.txt');
rewrite(f4,'text4.txt');

generiraj(37,7);

closefile(f1);
closefile(f2);
closefile(f3);
closefile(f4);
[ Nemanja_666 @ 23.08.2007. 08:02 ] @
netrebas nista mjenjati samo ispod program stavi {$APPTYPE CONSOLE}
[ TraktoRISTA Mijo @ 23.08.2007. 23:49 ] @
treba i u uses list stavit SySUtils:
Code:

program Project2;

{$APPTYPE CONSOLE}

uses
  SysUtils;

type niz=array[0..7]of integer;

  var
  kom:array[1..2]of niz;
  f1,f2,f3,f4:textfile;

  function omjer(p,np:integer;n:niz):boolean;
  var
  i,a,b:integer;
  begin
  a:=0; b:=0;
    for i:=1 to 7 do if (n[i] mod 2) = 0 then inc(a) else inc(b);
    if (a=p)and(b=np)then omjer:=true else omjer:=false;
  end;

  procedure prepisi;
  var
  i:integer;
  s,s1:string;
  begin

    for i:=1 to 7 do begin str(kom[2,i],s1); s:=s+s1+' ';end;

    if omjer(3,4,kom[2])then writeln(f1,s)
    else if omjer(4,3,kom[2])then writeln(f2,s)
    else if omjer(5,2,kom[2])then writeln(f3,s)
    else if omjer(2,5,kom[2])then writeln(f4,s) ;

  end;

  procedure generiraj(n,k:integer);
  var
  j,t:integer;
  begin
  kom[1,0]:=-1;
    for j:=1 to k do kom[1,j]:=j;
  t:=1;

    while t<>0 do
      begin
        for j:=0 to k do kom[2,j]:=kom[1,j];
      t:=k;
        while kom[2,t]=n-k+t do dec(t);
      kom[2,t]:=kom[2,t]+1;
        for j:=t+1 to k do kom[2,j]:=kom[2,j-1]+1;
      prepisi;
      kom[1]:=kom[2];
      end;

  end;

begin
assign(f1,'text1.txt');
assign(f2,'text2.txt');
assign(f3,'text3.txt');
assign(f4,'text4.txt');
rewrite(f1);
rewrite(f2);
rewrite(f3);
rewrite(f4);

generiraj(37,7);

close(f1);
close(f2);
close(f3);
close(f4);

readln;
end.

ideš file/new/other../console application, prekopiraš ovo i to je to
[ lordy007 @ 25.08.2007. 05:26 ] @
puno hvala radi sovrseno! a toliko jednostavno :)