Visual Basic, .NET, ASP, VBScript
 

   
   
     

Форум - Общий форум

Страница: 1 | 2 |

 

  Вопрос: Генератор случайных чисел! Добавлено: 21.11.07 17:10  

Автор вопроса:  Игорь | ICQ: 457394129 
Товарищи подскажите очень простую модель генератора случайных чисел, который выстроит мне числа например от 1 до 32 в случайном порядке, но с повторением максимум 2 раза?

Ответить

  Ответы Всего ответов: 21  

Номер ответа: 1
Автор ответа:
 Игорь



ICQ: 457394129 

Вопросов: 52
Ответов: 133
 Профиль | | #1 Добавлено: 21.11.07 17:12
Например (от 1 до 5): 1 4 2 4 5 1 3 2 5 3!

Ответить

Номер ответа: 2
Автор ответа:
 Игорь



ICQ: 457394129 

Вопросов: 52
Ответов: 133
 Профиль | | #2 Добавлено: 21.11.07 17:13
Или проще говоря генератор возьмёт например числа 1 1 2 2 3 3 4 4 5 5 и перемешает их между собой!

Ответить

Номер ответа: 3
Автор ответа:
 intel-DX



ICQ: 445091742 

Вопросов: 4
Ответов: 169
 Профиль | | #3 Добавлено: 21.11.07 18:50
x = 1 to 5

Randomize
x = Int((5 * Rnd) + 1 )

Ответить

Номер ответа: 4
Автор ответа:
 intel-DX



ICQ: 445091742 

Вопросов: 4
Ответов: 169
 Профиль | | #4 Добавлено: 21.11.07 19:13
извени недочитал всё


'intel-DX
'www.VBNet.ru
Option Explicit
Private Const Max As Integer = 15 'Do kakogo 4usla generufovat'
Dim Masiv() As Byte
'Generirovat' 4isla
Private Sub Command2_Click()
    ;Dim i As Integer
    ;Dim chisla As String
    ;Dim TEMP As Integer
    For i = 1 To Max
Rand:
        Randomize
        TEMP = Int((Max * Rnd) + 1)
        If Masiv(TEMP) = 2 Then
            GoTo Rand
        Else
            Masiv(TEMP) = Masiv(TEMP) + 1
            chisla = chisla & "->" & TEMP
        End If
    Next i
    MsgBox chisla, vbExclamation
End Sub
Private Sub Form_Load()
    ReDim Masiv(Max)
End Sub

Ответить

Номер ответа: 5
Автор ответа:
 Игорь



ICQ: 457394129 

Вопросов: 52
Ответов: 133
 Профиль | | #5 Добавлено: 21.11.07 19:24
Спасибо брат!

Ответить

Номер ответа: 6
Автор ответа:
 Игорь



ICQ: 457394129 

Вопросов: 52
Ответов: 133
 Профиль | | #6 Добавлено: 21.11.07 19:32
А вот теперь такой вопросик! Как перемешать числа, например имея числа 1 1 2 2 3 3 4 4, поставить их между собой в случайном порядке? Чтобы получилось вроде того: 1 3 2 4 2 4 1 3

Ответить

Номер ответа: 7
Автор ответа:
 intel-DX



ICQ: 445091742 

Вопросов: 4
Ответов: 169
 Профиль | | #7 Добавлено: 21.11.07 20:33


'intel-DX
'www.VBNet.ru
Option Explicit
Private Const Max As Integer = 15 'Do kakogo 4usla generufovat'
Dim Masiv() As Byte
'Fill Masiv
Private Sub Command1_Click()
    Dim i As Integer
    Dim indx As Integer
    ReDim Masiv(Max * 2)
    For i = 1 To Max * 2 Step 2
        indx = indx + 1
        Masiv(i) = indx
        Masiv(i + 1) = indx
    Next i
End Sub
'Generirovat' 4isla
Private Sub Command2_Click()
    Dim i As Integer
    Dim chisla As String
    Dim TEMP As Integer
    Dim Masiv2() As Byte
    
    ReDim Masiv2(Max * 2)
    
    For i = 1 To Max * 2
Rand:
        Randomize
        TEMP = Int((Max * Rnd * 2) + 1)
        If Masiv2(TEMP) <> 0 Then
            GoTo Rand
        Else
            Masiv2(TEMP) = Masiv(i)
        End If
    Next i
    For i = 1 To Max * 2
        chisla = chisla & "->" & Masiv2(i)
    Next i
        MsgBox chisla, vbExclamation
End Sub

Ответить

Номер ответа: 8
Автор ответа:
 intel-DX



ICQ: 445091742 

Вопросов: 4
Ответов: 169
 Профиль | | #8 Добавлено: 21.11.07 20:34


'intel-DX
'www.VBNet.ru
Option Explicit
Private Const Max As Integer = 15 'Do kakogo 4usla generufovat'
Dim Masiv() As Byte
'Fill Masiv
Private Sub Command1_Click()
    Dim i As Integer
    Dim indx As Integer
    ReDim Masiv(Max * 2)
    For i = 1 To Max * 2 Step 2
        indx = indx + 1
        Masiv(i) = indx
        Masiv(i + 1) = indx
    Next i
End Sub
'Generirovat' 4isla
Private Sub Command2_Click()
    Dim i As Integer
    Dim chisla As String
    Dim TEMP As Integer
    Dim Masiv2() As Byte
    
    ReDim Masiv2(Max * 2)
    
    For i = 1 To Max * 2
Rand:
        Randomize
        TEMP = Int((Max * Rnd * 2) + 1)
        If Masiv2(TEMP) <> 0 Then
            GoTo Rand
        Else
            Masiv2(TEMP) = Masiv(i)
        End If
    Next i
    For i = 1 To Max * 2
        chisla = chisla & "->" & Masiv2(i)
    Next i
        MsgBox chisla, vbExclamation
End Sub

Ответить

Номер ответа: 9
Автор ответа:
 Docal



ICQ: 408802757 

Вопросов: 9
Ответов: 147
 Профиль | | #9 Добавлено: 21.11.07 21:18
 intel-DX Ты почему в асю не выходиш?

Ответить

Номер ответа: 10
Автор ответа:
 gekko



Вопросов: 39
Ответов: 127
 Web-сайт: kalamfur.ru
 Профиль | | #10
Добавлено: 22.11.07 17:08
Ребята, а вот второй вопросец вроде так проще:
Private Sub Command1_Click()
Randomize
For i = 1 To Len(Label1.Caption)
a = Int(Rnd * Len(Label1.Caption)) + 1
z = z & Mid(Label1.Caption, a, 1)
If a > 1 And a < Len(Label1.Caption) Then
Label1.Caption = Mid(Label1.Caption, 1, a - 1) & Mid(Label1.Caption, a + 1, Len(Label1.Caption) - a + 1)
ElseIf a = 1 Then
Label1.Caption = Mid(Label1.Caption, 2, Len(Label1.Caption) - 1)
Else
Label1.Caption = Mid(Label1.Caption, 1, Len(Label1.Caption) - 1)
End If
Next i
Label1.Caption = z
End Sub

Или я чего недопонял =)

Ответить

Номер ответа: 11
Автор ответа:
 Winand



Вопросов: 87
Ответов: 2795
 Web-сайт: winandfx.narod.ru
 Профиль | | #11
Добавлено: 22.11.07 21:39
gekko кто тебя учил код форматировать? Никто?=) Меня тоже.
Хотелось бы просто хотя бы отступы видеть

Ответить

Номер ответа: 12
Автор ответа:
 Winand



Вопросов: 87
Ответов: 2795
 Web-сайт: winandfx.narod.ru
 Профиль | | #12
Добавлено: 22.11.07 22:08
Во! Генерирует массив чисел от 1 до 32, каждое повторяется 1 или 2 раза. Затем массив перемешивается.
Обратите внимание на извращенный способ обмена значений ячеек при перемешивании массива=)

Option Explicit
Dim arr() As Long

Private Sub Form_Load()
Dim i As Long, j As Long, f As Long
Call Randomize

For i = 1 To 32
    f = Int(Rnd * 2) + 1 '1-2
    'f = Int(Rnd * 3) '0-2
    For j = 1 To f
        ReDim Preserve arr(UUBound + 1)
        arr(UUBound) = i
    Next j
Next i


For i = 0 To UUBound 'Рандомизация
    f = Int(Rnd * (UUBound + 1))
    arr(i) = arr(i) + arr(f)
    arr(f) = arr(i) - arr(f)
    arr(i) = arr(i) - arr(f)
Next i

For i = 0 To UUBound
    Debug.Print arr(i)
Next i
End Sub

Private Function UUBound() As Long
On Error GoTo 1:
UUBound = UBound(arr)
Exit Function
1: UUBound = -1
End Function

Ответить

Номер ответа: 13
Автор ответа:
 intel-DX



ICQ: 445091742 

Вопросов: 4
Ответов: 169
 Профиль | | #13 Добавлено: 23.11.07 00:41
: )

Ответить

Номер ответа: 14
Автор ответа:
 



Администратор

ICQ: 278109632 

Вопросов: 42
Ответов: 3949
 Web-сайт: domkratt.com
 Профиль | | #14
Добавлено: 23.11.07 13:58
Господи.... из такого простого вопроса такую демагогию развели =) Топикстартер, смотри любую книгу с олимпиадными задачами, там тебе миллион способов дадут, хоть с конечными автоматами, хоть с графами, хоть с чем =) Ну и самый простой, конечно)

Ответить

Номер ответа: 15
Автор ответа:
 Winand



Вопросов: 87
Ответов: 2795
 Web-сайт: winandfx.narod.ru
 Профиль | | #15
Добавлено: 23.11.07 17:07
Ну и какой "самый простой" способ?

Ответить

Страница: 1 | 2 |

Поиск по форуму



© Copyright 2002-2011 VBNet.RU | Пишите нам