IT rekvalifikace s garancí práce. Seniorní programátoři vydělávají až 160 000 Kč/měsíc a rekvalifikace je prvním krokem. Zjisti, jak na to!
Hledáme nové posily do ITnetwork týmu. Podívej se na volné pozice a přidej se do nejagilnější firmy na trhu - Více informací.

Diskuze: VB - hody kostkou, dokud nepadne šest

Aktivity
Avatar
Ing. Coletta Ribolová:8.10.2021 22:05

Ahoj, jsem programátorský nováček a potřebovala bych poradit s příklady ve Visual Basicu. Mám za úkol vytvořit program, který hází kostkou tak dlouho, doku nepadne 6 a zobrazit, kolik to bude hodů. Program mi nechodí správně, prosím co je tam špatně? děkuji

Zkusil jsem: viz. program na obrázku

Chci docílit: příklad

 
Odpovědět
8.10.2021 22:05
Avatar
weverka
Člen
Avatar
Odpovídá na Ing. Coletta Ribolová
weverka:9.10.2021 9:56

Co dělá výše, uvedený program? VB neummím, dělám v C, ale mohl bych pomoci.

Nahoru Odpovědět
9.10.2021 9:56
Weby jsou budoucnost IT
Avatar
Odpovídá na Ing. Coletta Ribolová
Ondřej Šrytr:9.10.2021 12:35

Ahoj,

teď to máš řešené tak, že další iterace cyklu Do se provede pouze v případě, že hod kostky se bude rovnat 6. Takže upravit, aby cyklus se provedl pouze v případě, kdy hod kostky nebude 6. Pokud bude 6, cyklus dál nebude pokračovat a kód se bude provádět dál. Takže něco ve smyslu:

Do
    kostka = Round (Rnd() * 5) + 1
    ret = ret + Chr(10) + Str (kostka)
    i = i + 1
Loop While kostka <> 6

Co koukám na dokumentaci k cyklu na stránkách Microsoftu , stačilo by možná nahradit While za Until:

Do
    kostka = Round (Rnd() * 5) + 1
    ret = ret + Chr(10) + Str (kostka)
    i = i + 1
Loop Until kostka = 6
 
Nahoru Odpovědět
9.10.2021 12:35
Avatar
Odpovídá na Ondřej Šrytr
Ing. Coletta Ribolová:10.10.2021 23:25

Díky moc, už mi to funguje. :-)

 
Nahoru Odpovědět
10.10.2021 23:25
Avatar
Alesh
Tvůrce
Avatar
Odpovídá na Ing. Coletta Ribolová
Alesh:11.10.2021 0:20

Tu kostku máte oba špatně, máte ji "cinknutou" (málo hází 1 a 6 oproti ostatním číslům), správně ji je potřeba udělat takto:

Dim MyValue As Integer
MyValue = Int((6 * Rnd) + 1)    ' Generate random value between 1 and 6.

viz https://docs.microsoft.com/…rnd-function

 
Nahoru Odpovědět
11.10.2021 0:20
Avatar
Peter Mlich
Člen
Avatar
Peter Mlich:11.10.2021 9:03

To je snadne overit tabulkou pro krajni meze, zda to vychazi spravne
Je jedno jestli pouzijes floor (INT) nebo round. Ale INT to prevadi na integer, to muze byt sikovnejsi pro dalsi zpracovani.

volim levou cast, stred a pravou cast, excel meze=1/6-0,0001 a 1/6+(1/6)/2 a 1/6+0,0001

Round (Rnd() * 5) + 1 || Int((6 * Rnd) + 1) || excel =ZAOKROUHLIT(A1*5;0)+C1 || =CELÁ.ČÁST(A1*6+C1)
0       0       1       |       0       0       1
0,083333333     0,416666667     1       |       0,083333333     0,5     1
0,166566667     0,832833333     2       |       0,166566667     0,9994  1
0,166766667     0,833833333     2       |       0,166766667     1,0006  2
0,25    1,25    2       |       0,25    1,5     2
0,333233333     1,666166667     3       |       0,333233333     1,9994  2
0,333433333     1,667166667     3       |       0,333433333     2,0006  3
0,416666667     2,083333333     3       |       0,416666667     2,5     3
0,4999  2,4995  3       |       0,4999  2,9994  3
0,5001  2,5005  4       |       0,5001  3,0006  4
0,583333333     2,916666667     4       |       0,583333333     3,5     4
0,666566667     3,332833333     4       |       0,666566667     3,9994  4
0,666766667     3,333833333     4       |       0,666766667     4,0006  5
0,75    3,75    5       |       0,75    4,5     5
0,833233333     4,166166667     5       |       0,833233333     4,9994  5
0,833433333     4,167166667     5       |       0,833433333     5,0006  6
0,916666667     4,583333333     6       |       0,916666667     5,5     6
0,9999  4,9995  6       |       0,9999  5,9994  6
1,0001  5,0005  6       |       1,0001  6,0006  7

Cili, je videt, ze v prvnim pripade pri hodnote 0,166566667 mela byt jednicka a uz je tam dvojka. A take by tam nemelo byt, ze pro 1,0001 vychazi 6.

Editováno 11.10.2021 9:04
 
Nahoru Odpovědět
11.10.2021 9:03
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 6 zpráv z 6.