Generátor náhodných čísel - úprava kódu – Visual Basic – Fórum – Programujte.com
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu

Generátor náhodných čísel - úprava kódu – Visual Basic – Fórum – Programujte.comGenerátor náhodných čísel - úprava kódu – Visual Basic – Fórum – Programujte.com

 

Pavel
~ Anonymní uživatel
383 příspěvků
11. 1. 2019   #1
-
0
-

Dobrý den,
lze upravit kód tak, aby čísla označená tučně se do kódu načítala z určité buňky? Teď je generátor nastavený "natvrdo" na generování 16ti čísel, potřebuju před začátkem generování zadat kolik čísel se bude generovat, tato hodnota je pokaždé jiná.

Dim cislo(16) As Byte
Dim n, k As Byte
Dim zhoda As Boolean

    For i = 2 To 5
      For j = 1 To 4
        'počítadlo vygenerovaných čísel
        n = n + 1
        Do
            'inicializátor náhodných čísel
            Randomize
            'generuj a vlož do bunky
            cislo(n) = Int((16 - 1 + 1) * Rnd + 1)
            Cells(i, j) = cislo(n)
            zhoda = False
            'porovnaj s doteraz generovanými číslami
            For k = 1 To n - 1
                If cislo(k) = cislo(n) Then
                    zhoda = True
                    Exit For
                End If
            Next k
            'ak sa niektoré zhodujú generuj znova
        Loop While zhoda
       Next j
    Next i

Nahlásit jako SPAM
IP: 95.82.135.–
Pavel
~ Anonymní uživatel
383 příspěvků
11. 1. 2019   #2
-
0
-

#1 Pavel
Oprava,text není celý, tak znovu:

lze upravit kód tak, aby čísla označená tučně se do kódu načítala z určité buňky? Teď je generátor nastavený "natvrdo" na generování 16ti čísel, potřebuju před začátkem generování zadat kolik čísel se bude generovat, tato hodnota je pokaždé jiná. Hodnotu (počet gerovaných čísel) měním v buňce (třeba A1)

A druhá úprava: potřeboval bych nastavit aby se náhodná čísla generovala v rozsahu 9 až zvolený počet, prostě aby generátor nepracoval s čísli 1,2,3,4,5,6,7 a 8.

Děkuji tomu, kdo by mě s tímto pomohl :-)

Nahlásit jako SPAM
IP: 95.82.135.–
jerry
~ Anonymní uživatel
512 příspěvků
12. 1. 2019   #3
-
0
-

#2 Pavel
tak místo hodnoty 16 dej proměnnou třeba N a tu zjisti od uživatele ...

Nahlásit jako SPAM
IP: 109.81.214.–
Pavel
~ Anonymní uživatel
383 příspěvků
12. 1. 2019   #4
-
0
-

#3 jerry
Můžeš mě to prosím konkrétně napsat?

Díky

Nahlásit jako SPAM
IP: 95.82.135.–
jerry
~ Anonymní uživatel
512 příspěvků
12. 1. 2019   #5
-
0
-

#4 Pavel
já vubec nechápu co děláš ...

generátor náhodných čísel v .NET je Random::Next(min,max) a vrátí ti číslo v rozsahu <min,max)

generátor je dostupný v C#, C++/CLI, VisualBasic  pro VisualStudio. ty nepíšeš v čem to chceš ani v čem to děláš  ... prostě chaos, máš tam nějaký cykly který nemaj opodstatnění ...

jestli si dostal za ukol napsat algoritmus generátoru náhodných čísel Normální rozložení nebo Uniformní rozložení tak na to je specielní algoritmus a najdeš ho na internetu v céčku, teď ho u sebe nemám ale hledem "random number generator normal distribution c language"

a jestli si dostal za úkol jenom naplnit pole N náhodnými hodnotami tak na to použiješ generátor náhodných čísel z .NET a menuje se to Random

https://docs.microsoft.com/cs-cz/dotnet/api/system.random?view=netframework-4.7.2

a dělá se to jednim cyklem a to je všechno .

Dim N as Integer

Input "Zadej pocet cisel", N
Dim PoleNahCisel(N) As Integer

Random rnd = new Random()

For i = 1 To N

   PoleNahCisel[i]=rnd.Next(0,10) rem náhodná celá kladná císla uniformní rozdelení 0 do 9 , 10 už tam nikdy nebude

Next i

jestli potřebuješ generovat jiné rozdelení třeba Cauchy a pod. doporučuju

https://numerics.mathdotnet.com/

je to jeden soubor MathNet.Iridium.dll a ten vložíš do adresáře kde máš exe soubor a současně ho vložíš do projektu jako v referencích a pak už s ním pracuješ třeba

g_rnd_cauchy = gcnew MathNet::Numerics::Distributions::CauchyLorentzDistribution();

těch rozdělení je tam víc ...
 

Nahlásit jako SPAM
IP: 2a00:1028:83be:235a:7d3f:a5f5:ed5e:e378...–
Pavel
~ Anonymní uživatel
383 příspěvků
12. 1. 2019   #6
-
0
-

#5 jerry
Je v to Excelu VBA, nemám to jako úkol :-), Potřebuju to na rozlosovaní účastníků soutěže a zadání by znělo takhle: vygeneruj náhodné pořadí čísel  v intervalu 10 až 52 (pokaždé jiné argumenty - zapisuji do Cells) aby se čísla neopakovala.  Počet generovaných čísel bude: 52-10 tedy 42 Čisla vypiš do sloupce. Počet generovaných čísel se právě mění dle zadání argumentů.

Nahlásit jako SPAM
IP: 95.82.135.–
Pavel
~ Anonymní uživatel
383 příspěvků
12. 1. 2019   #7
-
0
-

#5 jerry
Tady je jiné řešení, ale bez toho automatického určení kolik čísel se bude generovat, je zde natvrdo nastaveno 10, Potřeboval bych to upravit tak, aby to číslo 10 nahrazovalo číslo, které získám rozdílem  Cells(2, 8).Value a Cells(2, 7).Value. Prostě počet generovaných čísel bude tolik, kolik je rozdíl Cells(2, 8).Value a Cells(2, 7).Value

Dim i As Byte, NahodneCislo As Long, HodnotaLow As Long, HodnotaHigh As Long, Kontrola As String, k As String
Const PocetNahodnychCisel = 10

  Randomize
  ReDim Vysledok(1 To 1, 1 To PocetNahodnychCisel)

  With Worksheets("List1")
    HodnotaLow = .Cells(2, 7).Value
    HodnotaHigh = .Cells(2, 8).Value

    For i = 1 To PocetNahodnychCisel
      Do
        NahodneCislo = Int(HodnotaLow + (HodnotaHigh + 1 - HodnotaLow) * Rnd())
        k = "•" & NahodneCislo & "•"
      Loop Until InStr(1, Kontrola, k) = 0
      
      Vysledok(1, i) = NahodneCislo
      Kontrola = Kontrola & k
    Next i
    
    .Cells(5, 1).Resize(, PocetNahodnychCisel) = Vysledok
  End With

Nahlásit jako SPAM
IP: 95.82.135.–
jerry
~ Anonymní uživatel
512 příspěvků
12. 1. 2019   #8
-
0
-

#7 Pavel

tady to máš popsaný

https://www.techonthenet.com/excel/formulas/rnd.php

Nahlásit jako SPAM
IP: 2a00:1028:83be:235a:7d3f:a5f5:ed5e:e378...–
Pavel
~ Anonymní uživatel
383 příspěvků
12. 1. 2019   #9
-
0
-

#8 jerry
Díky#8 jerry

Nahlásit jako SPAM
IP: 95.82.135.–
remmidemmi0
Věrný člen
13. 1. 2019   #10
-
0
-

Pavle, nerad ti beru radost z programování, ale programově generovaná čísla nebudou nikdy náhodná. Vždy se budou řídit nějakým řádem, tedy programem a pak nemůžeš říkat, že jsou náhodná. Pouze se zdánlivě jeví jako náhodná.

Jestli chceš opravdu generovat skutečná náhodná čísla, musíš použít hardwarový generátor náhodných čísel, ovšem nikoliv zase mikropočítačový, ale skutečně hardwarový,realizovaný z analogových obvodů.

Nahlásit jako SPAM
IP: 130.255.17.–
Zjistit počet nových příspěvků

Přidej příspěvek

Toto téma je starší jak čtvrt roku – přidej svůj příspěvek jen tehdy, máš-li k tématu opravdu co říct!

Ano, opravdu chci reagovat → zobrazí formulář pro přidání příspěvku

×Vložení zdrojáku

×Vložení obrázku

Vložit URL obrázku Vybrat obrázek na disku
Vlož URL adresu obrázku:
Klikni a vyber obrázek z počítače:

×Vložení videa

Aktuálně jsou podporována videa ze serverů YouTube, Vimeo a Dailymotion.
×
 
Podporujeme Gravatara.
Zadej URL adresu Avatara (40 x 40 px) nebo emailovou adresu pro použití Gravatara.
Email nikam neukládáme, po získání Gravatara je zahozen.
-
Pravidla pro psaní příspěvků, používej diakritiku. ENTER pro nový odstavec, SHIFT + ENTER pro nový řádek.
Sledovat nové příspěvky (pouze pro přihlášené)
Sleduj vlákno a v případě přidání nového příspěvku o tom budeš vědět mezi prvními.
Reaguješ na příspěvek:

Uživatelé prohlížející si toto vlákno

Uživatelé on-line: 0 registrovaných, 7 hostů

Moderátoři diskuze

 

Hostujeme u Českého hostingu       ISSN 1801-1586       ⇡ Nahoru Webtea.cz logo © 20032024 Programujte.com
Zasadilo a pěstuje Webtea.cz, šéfredaktor Lukáš Churý