pascal

Programovacie jazyky, rady, poradňa...
pascal
Novice
Novice
Príspevky: 2
Registrovaný: 26 jan 2010, 21:34

pascal

Príspevok od používateľa pascal »

vie mi niekto poradiť generovanie z poľa čísel - (v poli je tak 70 čísel - nie idúcich za sebou), aby z toho poľa generovalo všetky možné pätice čísel do súboru tak že čísla sa v jednej 5tici neopakujú ale na poradí nezáleží. a žiadne dvve dvojice nebudú mať rovnaké prvky? teda aby mi nevypisovalo dva krát 1 2 3 4 5 a 1 2 3 5 4 ale bralo to za jednu päticu, a hľadal ďalšiu?
alebo aspoň nejakú rozumnú podmienku na ošetrenie aby tie n-tice vynechával... - stačí mi to dostať do poľa alebo do recordu.. potrebujem to v pascale ... alebo stačí ak mi niekto slovne navrhne algoritmus... alebo ak by niekto dokázal povedať čo je na tomto zle ako to upraviť ...

Kód: Vybrať všetko


procedure Generovaniecisel(Var T1:Tabulka1; Var cisla: array of integer);
 Var pocet1:longint;
    k,q,i,j,m,n,l,konpoc,x,s: longint;
    pocettipov,cis1,cis2,cis3,cis4,cis5,cis6:longint;
    pouzite: boolean;
    pom,r,w: longint;
    subText:text;


begin{10}

    pom:=0;
   T1[1].cislo11:=cisla[0];
   T1[1].cislo12:=cisla[1];
   T1[1].cislo13:=cisla[2];
   T1[1].cislo14:=cisla[3];
   T1[1].cislo15:=cisla[4];
   T1[1].cislo16:=cisla[5];
 pocet1:=1;

x:=7;{pocet vzgenerovanzch cisel}
for i:=0 to x do
for j:=1 to x do
for k:=2 to x do
for l:=3 to x do
for m:=4 to x do
 if (i<>k) and (i<>j) and (i<>l) and (i<>m) and (i<>n) and (j<>k) and (j<>l) and (j<>m)
  and (j<>n) and (k<>l) and (k<>m) and (k<>n) and (l<>m) and (l<>n) and (n<>m) then
begin

   for r:=1 to pocet do
if (T1[r].cislo11=cisla[i]) or (T1[r].cislo12=cisla[i]) or (T1[r].cislo13=cisla[i]) or
(T1[r].cislo14=cisla[i]) or (T1[r].cislo15=cisla[i]) or (T1[r].cislo16=cisla[i]) then
if (T1[r].cislo11=cisla[j]) or (T1[r].cislo12=cisla[j]) or (T1[r].cislo13=cisla[j]) or
(T1[r].cislo14=cisla[j]) or (T1[r].cislo15=cisla[j]) or (T1[r].cislo16=cisla[j]) then
if (T1[r].cislo11=cisla[k]) or (T1[r].cislo12=cisla[k]) or (T1[r].cislo13=cisla[k]) or
(T1[r].cislo14=cisla[k]) or (T1[r].cislo15=cisla[k]) or (T1[r].cislo16=cisla[k]) then
if (T1[r].cislo11=cisla[l]) or (T1[r].cislo12=cisla[l]) or (T1[r].cislo13=cisla[l]) or
(T1[r].cislo14=cisla[l]) or (T1[r].cislo15=cisla[l]) or (T1[r].cislo16=cisla[l]) then
if (T1[r].cislo11=cisla[m]) or (T1[r].cislo12=cisla[m]) or (T1[r].cislo13=cisla[m]) or
(T1[r].cislo14=cisla[m]) or (T1[r].cislo15=cisla[m]) or (T1[r].cislo16=cisla[m]) then
if (T1[r].cislo11=cisla[n]) or (T1[r].cislo12=cisla[n]) or (T1[r].cislo13=cisla[n]) or
(T1[r].cislo14=cisla[n]) or (T1[r].cislo15=cisla[n]) or (T1[r].cislo16=cisla[n])  then
pouzite:=true

else

 pouzite:=false;






   if pouzite=false then
   begin


   T1[pocet1+1].cislo11:=cisla[i];
   T1[pocet1+1].cislo12:=cisla[j];
   T1[pocet1+1].cislo13:=cisla[k];
   T1[pocet1+1].cislo14:=cisla[l];
   T1[pocet1+1].cislo15:=cisla[m];
   T1[pocet1+1].cislo16:=cisla[n];
pocet1:=pocet1+1;

 end;
 end;


end;

            for r:=1 to pocet1 do
            begin
            write('moznost cislo: ',r,'   ',T1[r].cislo11,' ',T1[r].cislo12,' ',T1[r].cislo13,' ',T1[r].cislo14,' ',T1[r].cislo15,' ',T1[r].cislo16);
            writeln;

            end;

         readln;

       end;{10}

audiotrack
VIP
VIP
Používateľov profilový obrázok
Príspevky: 25958
Registrovaný: 09 sep 2005, 18:39
Kontaktovať používateľa:

Re: pascal

Príspevok od používateľa audiotrack »

vybereš prvých n (v tvojom prípade 7) čísel z poľa, počínajúc prvým prvkom a končiac 7. Potom posunieš ukazovateľ o jedna, a vyberáš prvky 2 - 8. Ďalej 3 - 9 a tak ďalej až kým ukazovateľ+n nebude počet čísel+1. Vzhľadom na túto pozdnú hodinu sa mi to nechce dávať do pascalu, ale verím že to zvládneš ;)
pascal
Novice
Novice
Príspevky: 2
Registrovaný: 26 jan 2010, 21:34

Re: pascal

Príspevok od používateľa pascal »

asi som sa zle vyjadril tak radšej ešte raz polopate :-) mám mnozinu cisel povedzme {0,1,2,4,5,7,8,9,10,12}
to číslo x som dal len preto aby som nemusel pracovať s celou množinou ale iba s pár číslami, ale potrebujem z toho dostať nejaký takýto výsledok

0 1 2 4 5 7
0 1 2 4 5 8
0 1 2 4 5 9
0 1 2 4 5 10
0 1 2 4 5 12
a tu zacne byt problem s mojou zakladnou podmienkou a mojimi cyklami

Kód: Vybrať všetko

for i:=0 to x do
for j:=1 to x do
for k:=2 to x do
for l:=3 to x do
for m:=4 to x do
if (i<>k) and (i<>j) and (i<>l) and (i<>m) and (i<>n) and (j<>k) and (j<>l) and (j<>m)
  and (j<>n) and (k<>l) and (k<>m) and (k<>n) and (l<>m) and (l<>n) and (n<>m)
by nasledovala postupnost
0 1 2 4 7 5 ale to sú v podtate tie isté čísla ako prvá postupnosť 0 1 2 4 5 7(iba posledné dve sú v inom poradí) a ja chcem každú kombináciu čísel iba raz. nezáleží mi na poradí prvkou takže chcem aby pokračovalo týmto :
0 1 2 4 7 8
0 1 2 4 7 9
Napísať odpoveď