Generování binárních čísel

Následující prográmek (java) slouží pro generování binárních čísel na daný počet míst (porměnná pocetMist v kodu).

 

  1. Jednoduchou úpravou můžete program přepsat na generátor ternálních, kvartalních, hexadecimálních čísel. Zkrátka čísla v libovolné (ne jen dvojkové) soustavě.
  2. Pokud číselné znaky nahradíme univerzálnějíšími stringy, máme na světě univerzální generátor všech možných kombinací pro dané prvky na daný počet míst.
    Takto upravený program nám pak vyřeší třeba takovýto příklad: Vypište všechny možnosti, kterými lze natřít plot z šesti laťěk, máme li k dispozici 4 barvy (červená, modrá, žlutá, zelená) a každá laťka může být natřená právě jednou barvou.

 

Ukázka programu pro generování binárních čísel (Java):

public class GeneratorKombinaci{
    public static void main(String[] args) {

        int pocetMist=5;    //pocet mist na ktere dosazuju. V pripade cisel - do kolikaciferneho cisla mam generovat?


        int aktualniKombinace[]=new int[pocetMist];    //posledni vygenerovana kombinace
   
        //na zacatku nastavim prvni kombinaci
        for(int i=0    ;    i<pocetMist    ;    i++){
            aktualniKombinace[i]=0;
        }
       
        int prvekOdKonce=1;     //s kterym prvkem od konce prave pracuju
        boolean ukoncitGenerovani=false;
       
        //generuju dalsi kombinace
        while (!ukoncitGenerovani){
            boolean jednaJdeDale=true;
           
            do{
                jednaJdeDale=false;
                aktualniKombinace[pocetMist-prvekOdKonce] = aktualniKombinace[pocetMist-prvekOdKonce] + 1;         //zvednu posledni cifru o jedna
                if(aktualniKombinace[pocetMist-prvekOdKonce]>=2){    //pokud sem presvihla pocet znaku, ktere mam k dispozici {0,1} napisu prvni znak
                    aktualniKombinace[pocetMist-prvekOdKonce]=0;    //tedy nulu
                    jednaJdeDale=true;        //a jedna jde dále (zvetsim o jedno znak na dalsi (predchazejici) pozici
                    prvekOdKonce = prvekOdKonce+1;
                    if (prvekOdKonce>=pocetMist+1){        //ukonceni cyklu generovani
                        ukoncitGenerovani=true;
                        break;
                    }
                }
            }while(jednaJdeDale);
            vypisPole(aktualniKombinace);
            prvekOdKonce=1;
        }
    }


    public static void vypisPole(int [] pole){
        for(int i = 0 ; i < pole.length; i++){
            System.out.print(pole[i]+" ");    //vypis prvku pole a mezery
        }
        System.out.print("\n");    //novy radek
    }

Prográmek funguje na stejném principu jako počítadlo (tvoření posloupnosti čísel). Přidávám kuličky (zvětšuji čísla) v prvním řádku tak dlouho dokud mám k dispozici kuličky, jak mi dojdou přihodím na dalším řádku a první řádek vynuluju. Když mám zaplněných prvních n řádků, hledám další nezaplněný řádek na kterém přihodm kuličku a všechny před ním vynuluju. Atd.

Počítadlo na obrázku v pravo je pro desítkovou soustavu. Kdyby mělo jen dvě kuličky v řádku (0,1) bylo by to binární počítadlo.

Kam dál?