NOVINKA - Online rekvalifikační kurz Java programátor. Oblíbená a studenty ověřená rekvalifikace - nyní i online.
NOVINKA – Víkendový online kurz Software tester, který tě posune dál. Zjisti, jak na to!
Avatar
Peto
Člen
Avatar
Peto:7.4.2016 15:37

Nazdar , viete mi niekto poradiat ako mam vytvorit 7 nahodnych cisel od 1 do 7 ? Nieco mam ale je to strasne pomale. Vdaka za vsetko.

 
Odpovědět
7.4.2016 15:37
Avatar
Neaktivní uživatel:7.4.2016 16:36

cyklus a Math.random() * (max - min) + min;

reference:
https://developer.mozilla.org/…/Math/random

Editováno 7.4.2016 16:36
Nahoru Odpovědět
7.4.2016 16:36
Neaktivní uživatelský účet
Avatar
Odpovídá na Neaktivní uživatel
Neaktivní uživatel:7.4.2016 16:48

nebo spis tohle

ve foru pro sedm okruhu ((Math.floor(Mat­h.random() * 10) % 7 ) + 1)

Nahoru Odpovědět
7.4.2016 16:48
Neaktivní uživatelský účet
Avatar
Odpovídá na Neaktivní uživatel
Drahomír Hanák:7.4.2016 17:11

Tohle podle mě není úplně správně. Předpokládejme, že Math.floor(Math.random() * 10) vrátí číslo od 0 do 9 každé s pravděpodobností 1 / 10. Potom pravděpodobnost, že dostaneme 0, 1 nebo 2 je 2 / 10 (pro 0 buď padne 0 nebo 7, pro 1: 1 nebo 8, pro 2: 2 nebo 9). Čísla od 3 do 6 včetně ale mají menší pravděpodobnost (1 / 10).

 
Nahoru Odpovědět
7.4.2016 17:11
Avatar
Odpovídá na Drahomír Hanák
Neaktivní uživatel:7.4.2016 17:24
Math.floor((Math.random() * 7)) + 1

by mohlo zlepsit situaci

Editováno 7.4.2016 17:25
Nahoru Odpovědět
7.4.2016 17:24
Neaktivní uživatelský účet
Avatar
Peto
Člen
Avatar
Peto:8.4.2016 11:32

Diky za rady , ale zabudol som povedat ze sa nesmu opakovat. Mam nieco taketo ale pri kontrole ci sa prvok nachadza v poli sa to dlho porovnava pretoze sa musi vygenerovat cislo ktore tam este nie je.

var pole = new Array();
var i = 0;
function urob(){
        if (i < 7) {
                var random =  Math.floor(Math.random()*7);
                test = inArray(random,pole);
                if (test==true){
                }else{
                        pole.push(random);
                        console.log(random);
                        i++;
                }

        }else{
                clearInterval(myVar);
                console.log('koniec');
        }
}
function inArray(prvok,pole){
        var length = pole.length;
        for(var i = 0; i < length; i++){
                if(pole[i] == prvok) return true;
        }
        return false;
}
Editováno 8.4.2016 11:33
 
Nahoru Odpovědět
8.4.2016 11:32
Avatar
Odpovídá na Peto
Neaktivní uživatel:8.4.2016 17:04

takze to shrnu, chces ziskat pole sedmi cisel z nichz kazde cislo je v rozsahu od 1 do 7 a je unikatni ... pak nechces vubec generovat nahodna cisla, ale poradi stanovenych cisel, takze potrebujes pool, mnozinu ze ktery budes brat cisla, to bude pole o sedmi prvcich (vsechna tvoje cisla klidne serazena, klidne rozhazena, to je asi fuk, ja budu rikat ze jsou serazeny od 1 do sedmi ... pak potrebujes druhy pole, ktery symbolizuje vyslednou mnozinu... do ni budes cisla z poolu hazet a ted k proces vyberu,

pro zjednoduseni ja budu z poolu odmazavat vzdy ten prvek, ktery jsem vybral, je to vizualne zretelnejsi

zde je kod:

var pool = [1, 2, 3, 4, 5, 6, 7]; // mnozina pro vyber
var randArr = []; // tvoje budouci pole

while (pool.length) { // dokud je v poolu co brat
  var ranIn = Math.floor((Math.random() * pool.length)); // nahodny int v rozsahu indexu poolu, poslouzi jako index prave zvoleneho prvku
  randArr.push(pool[ranIn]); // do vysledku ulozim vybranou hodnotu
  pool[ranIn] = 0; // vybranou hodnotu oznacim jako pouzitou, vim, ze nula tam byt nemuze, tak pouziju nulu

  repairArr(pool, 0); // pool musim opravit, sesunout vsechny prvky napravo od nuloveho prvku a snizit o jedna velikost pole
}

console.log("pole " + randArr); // vypis vysledku

// opravna funkce, muze vypadat i jinak, vice, ci mene, tahle odvede praci dobre, je tu prostor pro optimalizaci, ale to uz je an tobe ;-)
function repairArr(array, wrongElement) {
  var move = false;
  for (var e = 0; e < array.length - 1; e++) {
    if (array[e] == wrongElement) {
      move = true;
    }
    if (move) {
      array[e] = array[e + 1];
    }
  }
  array.length -= 1;
}

tady je fiddle: https://jsfiddle.net/…ll/1ee4brn3/

PS: priste pouzij tlacitko odpovedet, kdybych se neprochazel po hlavni strance,vubec bych si nevzpomnel, ze bys mohl jeste neco chtit

Editováno 8.4.2016 17:05
Akceptované řešení
+20 Zkušeností
Řešení problému
Nahoru Odpovědět
8.4.2016 17:04
Neaktivní uživatelský účet
Avatar
Peto
Člen
Avatar
Peto:9.4.2016 1:05

Kamo diky moc, vyzera to presne ako to potrebujem , ak by cosi este napisem ale mega si mi pomohol DAKUJEM

 
Nahoru Odpovědět
9.4.2016 1:05
Avatar
Odpovídá na Peto
Neaktivní uživatel:9.4.2016 11:54

Pokud jsem pomohl, můžeš mi to oplatit tím, že moje finální řešení označíš jako řešení vlákna, samozřejmě po tom, co se ujistíš, že všechno šlape a už nepotřebuješ nic víc.

PS: vážně zkus klepnout na to tlačítko odpovědět, ono to dá vědět člověku, na kterého reaguješ, já bych si toho nevšiml kdybych si nedával pozor na vlákna, ve kterých píšu.

Nahoru Odpovědět
9.4.2016 11:54
Neaktivní uživatelský účet
Avatar
Peto
Člen
Avatar
Odpovídá na Neaktivní uživatel
Peto:9.4.2016 14:39

Chcel som sa este opytat ci mi nevies nejako s tymto pomoct ? mam taky problem, mam tlacitko a potrebujem aby sa po jeho zakliknuti postupne zobrazovali cisla od 1 do 7 a potom sa vypisal nejaky oznam. to mam zabezpecene tak ze volam tvoju funkciu cez setInterval (funkcia). Lenze takto sa mi vygeneruje hned cele pole, ale ja potrebujem aby isli pismena po jednom,no ked tam dam break tak za nim uz nemozem nic vypisat. A potreboval by som aby sa po znovu kliknuti znova vypisovali tie cisla no povodne pole je uz prazdne.

 
Nahoru Odpovědět
9.4.2016 14:39
Avatar
Peto
Člen
Avatar
Odpovídá na Neaktivní uživatel
Peto:9.4.2016 15:07

Uz som to spravil, tak este raz diky moc

Editováno 9.4.2016 15:10
 
Nahoru Odpovědět
9.4.2016 15:07
Avatar
Odpovídá na Peto
Neaktivní uživatel:9.4.2016 15:26

Jasne, bylo mi jasny, ze to tak nejak dopadne. Je tu vic moznosti jak to udelat, mrkni na tenhle fiddle https://jsfiddle.net/…ll/1ee4brn3/ (je to ten samej, ale upravenej) ... pokud se nepletu je to to co hledas, setTimeout v cyklu zajisti postupne vypsani hodnot pomoci odebirani z konce... aby neslo tlacitko zmacknout znova hned za sebou (protoze to by se ti tam zacali ty cisla psat dost blaznive) pri stisknuti se nejdriv talcitko zablokuje, provede se nastaveni a pak se naplanuje jeho odblokovani az po poslednim zobrazeni, jeste muzes pridat to, ze ten div do kteryho to budes zobrazovat se na zacatku vzdycky vynuluje, to je na tobe... doufam, ze takhle je to ono.

EDIT: ted vidim, ze uz jsi to vyresil, necham to i tak tady, treba to nakonec k necemu jednou bude.

Editováno 9.4.2016 15:28
Nahoru Odpovědět
9.4.2016 15:26
Neaktivní uživatelský účet
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 12 zpráv z 12.