Stránka 2 z 2

Napsal: 07 led 2022, 19:26
od dobrman
vyzkoušej tohle, zkoušel jsem to, jdou čísla i písmena a libovolný počty.
(není to moje, je to odchyceno z netu)

Napsal: 07 led 2022, 20:03
od PotPalo
Hotovo. Môžeš zadať až 100 hodnôt a z nich vybrať 2 až 10 kombinácii. To už je za dve Víney. :beer:

edit: maličká chybička v súbore opravená o 1:47 menšou zmenou.

Napsal: 08 led 2022, 10:52
od jiri255
...ten první excel není špatný, ale používá makra, ale ten druhý excel, tak ten je super :beer: díky, díky, díky, a když na něj tak koukám a dívám se, jak to funguje, tak si asi vezmu lopatu někde se s ní zahrabu a budu tam dlouho a dlouho přemýšlet o tom, jak je možný, že sem to nedokázal dát dohromady a navíc to umí i kombinace s použitím víc jak jednoho znaku to jsem na začátku vlastně vůbec nedomyslel a úplně na to zapoměl
...může být i varianta:
X, 1A, JHG, 2, PP, K2, 00 a toho třeba kombinace 6ti a tenhle vzorec řeší úplně všechno, jdu na tom provést zatěžkávací test :-)

Napsal: 09 led 2022, 14:08
od jiri255
...tak jsem to prošel na různých kombinacích (kombinace čísel,písmen, spec. znaků, textů,atd..) a řekl bych, že to funguje na 100% neobjevil jsem nic na čem by to selhalo :beer: ,takže ještě jednou moc díky je to naprosto perfektní.

Napsal: 09 led 2022, 15:16
od PotPalo
Akurát je to móóóc neefektívne. V BASICu ZX Spectra by taký program bol na pár riadkov. Zadali by sa hodnoty, koľko kombinácii chceme, a už by to išlo, a to bez obmedzenia počtu výpočtov. V Exceli to zaberie neskutočne veľa miesta opakujúcim sa vzorcom, a vypočítava sa iba pokiaľ je ten vzorec. :?

Napsal: 10 led 2022, 20:09
od LADER
V programu wxMaxima to jde napsat takto:

Kód: Vybrat vše

FN(P, S, K, M):= block([X, D: length(S), J:K],
    if length(P)=M then ( Q: endcons(P, Q),  return() ),   
    while J<=D do ( X: endcons(S[J], P), J: J+1, FN(X, S, J, M) )
)$
Kombinace(S,M):=block([Q:[],P:[]], FN(P, S, 1, M), Q)$

Pokud by se někomu chtělo přepsat do basicu, pak:
Funkci Kombinace(S,M) je předají dvě proměnné:
S - je to vstupní pole dat (například [1,2,3,4,5])
M - je počet hodnot (například 4)
Funkce Kombinace(S,M) volá rekurzivní funkci FN(P, S, K, M) (ta pak volá sama sebe).
Funkce Kombinace(S,M) vrací výsledek v poli Q (poslední položka ve funkci)
No a důležité je vědět, že proměnné S, P, Q jsou pole.

Kód: Vybrat vše

P:[]
je dimenzování prázdného pole.

Kód: Vybrat vše

D: length(S)
je zjištění délky pole.
Příkaz

Kód: Vybrat vše

Q: endcons(P, Q)
připojí pole P na konec pole Q.
Jinak je to stejné jako basic.

Výsledek bude vypadat takto:

Kód: Vybrat vše

Kombinace([1,2,3,4,5], 4);
matrix(
      [1,   2,   3,   4],
      [1,   2,   3,   5],
      [1,   2,   4,   5],
      [1,   3,   4,   5],
      [2,   3,   4,   5]
   )

nebo třeba:

Kód: Vybrat vše

Kombinace([A,B,C,D,E,F,G], 5);
matrix(
      [A,   B,   C,   D,   E],
      [A,   B,   C,   D,   F],
      [A,   B,   C,   D,   G],
      [A,   B,   C,   E,   F],
      [A,   B,   C,   E,   G],
      [A,   B,   C,   F,   G],
      [A,   B,   D,   E,   F],
      [A,   B,   D,   E,   G],
      [A,   B,   D,   F,   G],
      [A,   B,   E,   F,   G],
      [A,   C,   D,   E,   F],
      [A,   C,   D,   E,   G],
      [A,   C,   D,   F,   G],
      [A,   C,   E,   F,   G],
      [A,   D,   E,   F,   G],
      [B,   C,   D,   E,   F],
      [B,   C,   D,   E,   G],
      [B,   C,   D,   F,   G],
      [B,   C,   E,   F,   G],
      [B,   D,   E,   F,   G],
      [C,   D,   E,   F,   G]
   )