Ukládání hodnot do pole   otázka

VB6/VBA

Dobrý den,

chtěl bych se zeptat, jestli by mi někdo z Vás, mohl poradit s následujícím problémem. Chtěl bych vytvořit pole o 20ti hodnotách, které bych generoval pomocí cyklu For a každá hodnota pole, by byla náhodné číslo z intervalu <1-10> a zároveň byla v poli maximálně 2x. Tedy, aby mi v poli vznikla od každé hodnoty jedna dvojice.

Děkuji za rady, s pozdravem Kamil.

nahlásit spamnahlásit spam 0 / 2 odpovědětodpovědět

Zdarvím,

nevím s čím přesně máte problém. Postup může být následující:

1) Vytvořit dvacetiprvkové pole a pomocí cyklu For od 1 do 10 přiřadit každému prvku hodnotu. Hodnoty budou seřazené a budou vždy 2 stejné za sebou.

pole(2*i-2) = i
pole(2*i-1) = i

2) Pokud mají být čísla v náhodném pořadí, je potřeba je přeházet. To provede cyklus For od 0 do 19, který hodnotu každého prvku pole prohodí s hodnotou jiného náhodně zvoleného prvku v poli.

Vygenerování náhodného čísla od 0 do 19:

CInt(Int((20 * Rnd())))

Pokud máte problém s něčím konkrétním, tak jsem vložte svůj kód.

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Díky za radu, vygeneroval jsem si pole, které má 20 prvků a vypadá takto {1,2,3,4,5,6,7,8,9,10,10,9,8,7,6,5,4,3,2,1}, ale nevím, jak jste to myslel s tím prohazováním prvků uvnitř pole pomocí generování náhodného čísla. Můj kod zatím vypadá takto:

Public Sub NaplneniPole()
    ReDim Preserve pole(19) As Integer
    Dim i As Integer
    Dim pocet As Integer
    For i = 0 To UBound(pole) - 10
        pole(i) = i + 1
    Next i
    For i = 10 To UBound(pole)
        pole(i) = 20 - i
    Next i
    
End Sub

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Upravil jsem ten kód tak, aby se pole vygenerovalo tímto způsobem:

{1,1,2,2,3,3,4,4,5,5,6,6,7,7,8,8,9,9,10,10}, ale nemůžu přijít na to, jak v tomto poli rozházet prvky. Neměl by někdo nějaký nápad?

Public Sub NaplneniPole()
    ReDim pole(19) As Integer
    Dim i As Integer
    Dim pocet As Integer
    For i = 0 To UBound(pole) - 10
        pole(2 * i) = i + 1
        pole(2 * i + 1) = i + 1
    Next i
End Sub

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Tak už mi to rozházení hodnot v poli funguje, ale pokaždý tam mam jedno číslo 3x a jedno jen jednou a to číslo co je tam 3x je pokaždý hned to první v poli po přehození. Mohl by mi někdo poradit, čim by to asi mohlo být? Díky.

Public Sub NaplneniPole()
    ReDim pole(1 To 20) As Integer
    Dim i As Integer
    Dim e As Integer
    Dim c As Integer
    Dim pocet As Integer
    For i = 1 To 10
        pole(2 * i - 1) = i
        pole(2 * i) = i
    Next i
    c = 1
    For i = 1 To 20
        e = Int((20 * Rnd) + 1)
        pole(c) = pole(i)
        pole(i) = pole(e)
        pole(e) = pole(c)
    Next i
End Sub

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Při prohození vždy nastavíte jedno z těch čísel i do pole(1) (resp. pole(c)).

Neměl jste spíš na mysli toto?

  c = pole(i)
  pole(i) = pole(e)
  pole(e) = c
nahlásit spamnahlásit spam 0 odpovědětodpovědět

Díky moc, bylo to tím :-)

nahlásit spamnahlásit spam 0 odpovědětodpovědět
                       
Nadpis:
Antispam: Komu se občas házejí perly?
Příspěvek bude publikován pod identitou   anonym.
  • Administrátoři si vyhrazují právo komentáře upravovat či mazat bez udání důvodu.
    Mazány budou zejména komentáře obsahující vulgarity nebo porušující pravidla publikování.
  • Pokud nejste zaregistrováni, Vaše IP adresa bude zveřejněna. Pokud s tímto nesouhlasíte, příspěvek neodesílejte.

přihlásit pomocí externího účtu

přihlásit pomocí jména a hesla

Uživatel:  
Heslo:  

zapomenuté heslo

 

založit nový uživatelský účet

zaregistrujte se

 
zavřít

Nahlásit spam

Opravdu chcete tento příspěvek nahlásit pro porušování pravidel fóra?

Nahlásit Zrušit

Chyba

zavřít

feedback