Как сгенерировать случайную букву?

Программирование на Visual Basic, главный форум. Обсуждение тем программирования на VB 1—6.
Даже если вы плохо разбираетесь в VB и программировании вообще — тут вам помогут. В разумных пределах, конечно.
Правила форума
Темы, в которых будет сначала написано «что нужно сделать», а затем просьба «помогите», будут закрыты.
Читайте требования к создаваемым темам.
tyomitch
Пользователь #1352
Пользователь #1352
Аватара пользователя
 
Сообщения: 12822
Зарегистрирован: 20.10.2002 (Вс) 17:02
Откуда: חיפה

Сообщение tyomitch » 19.10.2006 (Чт) 21:11

yaklit, хорош флудить во всех темах подряд.
Есть что добавить по теме -- добавляй. Нечего добавить -- удержись.
Изображение

SLIM
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1840
Зарегистрирован: 04.04.2008 (Пт) 18:21
Откуда: Краснодар

Сообщение SLIM » 03.07.2008 (Чт) 22:22

Решил поднять тему вновь.
Теперь вот такая задача
Нужно чтобы случайно генирировались числа от 1 до 9, но с условием чтобы были разными, т.е. не повторялись.
Пишите жизнь на чистовик.....переписать не удастся.....

GAGArin
Неистовый флудер
Неистовый флудер
 
Сообщения: 1777
Зарегистрирован: 23.12.2002 (Пн) 12:46
Откуда: я тут взялся, не знаю...

Сообщение GAGArin » 03.07.2008 (Чт) 23:10

Массив от одного до девяти заполнен от одного до девяти.

Генерируешь число, меняешь то что в первом элементе и в элементе со сгенерированным номером. Повторяешь для второго и всех остальных элементов. Итоговый массив просто тупо читаешь подряд. Он уже неплохо перемешан. Зависит от того где какой степени случайности ты ожидаешь и насколько это критично.

А так - если от 1 до 9 и задача не висит где-то в офигенно длинном цикле, то я бы кидал кубик и смотрел выпадало ли раньше то что выпало сейчас. Потому что неэффективно, но легко читаемо и не особо перегрузит при таком малом количестве вариантов.

SLIM
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1840
Зарегистрирован: 04.04.2008 (Пт) 18:21
Откуда: Краснодар

Сообщение SLIM » 04.07.2008 (Пт) 23:00

Генерируешь число, меняешь то что в первом элементе и в элементе со сгенерированным номером. Повторяешь для второго и всех остальных элементов. Итоговый массив просто тупо читаешь подряд. Он уже неплохо перемешан. Зависит от того где какой степени случайности ты ожидаешь и насколько это критично.

Вот это я совсем не понял. Есть массив из 9 элементов. генирирую число - это первй элемент. Генирирую опять - это второй, потом меняю то что в первом....на что меняю? и так для всех элем-ов. Т.е. грубо говоря мы не выполнили задачу. Повторение в массиве все равно будет.....

А так - если от 1 до 9 и задача не висит где-то в офигенно длинном цикле, то я бы кидал кубик и смотрел выпадало ли раньше то что выпало сейчас. Потому что неэффективно, но легко читаемо и не особо перегрузит при таком малом количестве вариантов.


Ну это то я впинципе понимаю. Алгоритм такой
1. Кидаем кубик - это первй элемент
2.Кидаем второй раз - это второй элемент
3.Сравниваем его с первым, если совпадает, то кидаем еще раз
4.Кидаем третий элемент, сравниваем с первым и вторым
и т.д.

Скажем так. Эту задачу я решил и так. Думал может есть другой алгоритм. Но вот проблема. Есть двумерный массив Array(i,j), размерность по 9. Вот его нужно заполнить так
1. Чтобы получаемый случайный j элемент не был равен не одному Array(1,j) и не одному Array(i,1). Блин надеюсь доступно объяснил. Сам путаюсь иногда.
Так вот проверку всех элементов Array(1,j) я проверяю и делаю неповторяющимися. А вто проверку по перпендикулярной линии (Array(1,j)) я делаю, но изменить не могу, так как тогда возможно повторение в Array(1,j).
Вот. Сложновато....
Пишите жизнь на чистовик.....переписать не удастся.....

GAGArin
Неистовый флудер
Неистовый флудер
 
Сообщения: 1777
Зарегистрирован: 23.12.2002 (Пн) 12:46
Откуда: я тут взялся, не знаю...

Сообщение GAGArin » 04.07.2008 (Пт) 23:14

было
123456789
выпало 7
723456189
выпало 4
743256189
Повторить 9 раз потом прочитать массив с начала.

SLIM
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1840
Зарегистрирован: 04.04.2008 (Пт) 18:21
Откуда: Краснодар

Сообщение SLIM » 04.07.2008 (Пт) 23:50

Вот блин. Я как-то и не подумал что можно сначала заполнить массив, а потом менять естами. Отличный алгоритм дя данной задачи. И как раз подойдет для двухмерного массива. Спасибо большое!!!!!! :cheers: :thumleft: :thumleft: :bounce: :bounce: :salut: Помог...
Пишите жизнь на чистовик.....переписать не удастся.....

SLIM
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1840
Зарегистрирован: 04.04.2008 (Пт) 18:21
Откуда: Краснодар

Сообщение SLIM » 05.07.2008 (Сб) 21:28

Не, этот алгоритм не подошел для таблици значений (двумерный массив)
Есть задумки как этио реализовать, позже выложу, но замена тут не причем. Сам факт заполнения массива изначально заданными значениями - идея хорошая.
Пишите жизнь на чистовик.....переписать не удастся.....

SLIM
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1840
Зарегистрирован: 04.04.2008 (Пт) 18:21
Откуда: Краснодар

Сообщение SLIM » 07.07.2008 (Пн) 18:51

Выкладываю свое решение. Хотелось бы избавиться от GoTo. Пока не знаю как.....


Код: Выделить всё
Private ArrayCipher(9, 9) As Long
Private Sub MakeArray()
Dim Index As Long
Dim i As Long
Dim j As Long
Dim Z As Long

Randomize

For i = 1 To 9
    For j = 1 To 9
        If j = 1 Then
            ArrayCipher(i, j) = Int(9 * Rnd) + 1
        Else
            ArrayCipher(i, j) = Int(9 * Rnd) + 1
            For Z = j - 1 To 1 Step -1
                If ArrayCipher(i, j) = ArrayCipher(i, Z) Then
                    j = j - 1
                    Exit For
                End If
            Next Z
        End If
    Next j
   
    If i > 1 Then
        For Index = (i - 1) To 1 Step -1
            For Z = 1 To 9
                If ArrayCipher(i, Z) = ArrayCipher(Index, Z) Then
                     i = i - 1
                     GoTo Foo
                End If
            Next Z
        Next Index
    End If
Foo:
Next i

End Sub
Пишите жизнь на чистовик.....переписать не удастся.....

Zenitchik
Постоялец
Постоялец
 
Сообщения: 369
Зарегистрирован: 21.12.2006 (Чт) 14:48

Сообщение Zenitchik » 07.07.2008 (Пн) 19:38

Хм...
У меня мысль:
Если упорядоченными заполнить массив значениями, так, что он будет удовлетворять изначальному условию, то потом, не нарушая условия, можно:
1) менять местами столбцы
2) менять местами строки
3) менять все значения равные А на Б и наоборот - "т.е. менять местами числа"
4) транспонировать.

Может, кто-то еще найдет такие операции.
Но в общем, пока получается, что нужно сгенерировать три перестановки и решение на транспонирование (булево).

Код писать лениво. Либо сегодня поздно ночью, либо завтра напишу.

ОФФ: Позвольте, а не для Судоку ли вы это творите?
Знание английского языка - затрудняет понимание кода

SLIM
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1840
Зарегистрирован: 04.04.2008 (Пт) 18:21
Откуда: Краснодар

Сообщение SLIM » 07.07.2008 (Пн) 20:07

ОФФ: Позвольте, а не для Судоку ли вы это творите?

Для него родимого.
Может, кто-то еще найдет такие операции.
Но в общем, пока получается, что нужно сгенерировать три перестановки и решение на транспонирование (булево).

Идея то в общем нормальная. Я ее тоже рассматривал. Знаешь как выглядит заполнение изначально с заданным условием
123456789
234567891
345678912
456789123
567891234
678912345
789123456
891234567
912345678

Видишь закономерность? Просто я хочу уйти от шаблонов. Единственный вариант в этом случае: это генирирование случайности расположения строк и столбцов......о, кстати идея. Попоробую на скорость(да что там пробовать, быстрее будет. Первый код реально тормозит систему.....).

3) менять все значения равные А на Б и наоборот - "т.е. менять местами числа"

Любое изменение места числа приводит к ловинному изменению во всем массиве - а это уже закономерность, которую можно разгадать. Я этого не хочу. Я хочу сделать полную и тотальную случайность. А далее написать прогу для разгадывания головоломок судоку...
Пишите жизнь на чистовик.....переписать не удастся.....

Zenitchik
Постоялец
Постоялец
 
Сообщения: 369
Зарегистрирован: 21.12.2006 (Чт) 14:48

Сообщение Zenitchik » 07.07.2008 (Пн) 20:12

Любое изменение места числа приводит к ловинному изменению во всем массиве - а это уже закономерность, которую можно разгадать. Я этого не хочу. Я хочу сделать полную и тотальную случайность.

Вовсе нет. Это просто еще одна операция для перемешивания, добавляющая вариантов.
Мы генерим еще одну перестановку Y(X) и все X в массиве заменяем на Y(X).

И про транспонирование не забывайте.

Над прогой решающей судоку я сам какое-то время бился. Решить ее простым алгоритмическим путем не смог.
Задумал подступиться аналитически - генерить гигантскую систему линейных уравнений и решать методом Гаусса. Но лениво, ибо не жизненно важно.
Знание английского языка - затрудняет понимание кода

SLIM
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1840
Зарегистрирован: 04.04.2008 (Пт) 18:21
Откуда: Краснодар

Сообщение SLIM » 07.07.2008 (Пн) 20:29

генерить гигантскую систему линейных уравнений и решать методом Гаусса

Была такая идея. Но хлопотно это. Жажда :"А смогу ли я" не дает покоя. Думаю возможно проще. Думать все равно нужно.
Мы генерим еще одну перестановку Y(X) и все X в массиве заменяем на Y(X).

Думаю если перемешать в случайном порядке строк и столбцов + изменение значений элементов друг на друга (можно тоже случайных) большого выигрыша не даст.

И про транспонирование не забывайте.

А по русски можно? Что это значит?

Кстати генирирование случайных значений моим приведенным способом иногда приводит к зависанию и не отвисанию машины
Пишите жизнь на чистовик.....переписать не удастся.....

Zenitchik
Постоялец
Постоялец
 
Сообщения: 369
Зарегистрирован: 21.12.2006 (Чт) 14:48

Сообщение Zenitchik » 08.07.2008 (Вт) 22:38

изменение значений элементов друг на друга - РАЗУМЕЕТСЯ, тоже случайных - позволяет привести матрицу в состояние, недостижимое другими методами.

Транспонирование - это превращенеи строк в столбцы, а столбцов в строки.
Вы на каком курсе? Это на первом проходят, причем в первые же недели общего курса математики.
Знание английского языка - затрудняет понимание кода

SLIM
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1840
Зарегистрирован: 04.04.2008 (Пт) 18:21
Откуда: Краснодар

Сообщение SLIM » 09.07.2008 (Ср) 21:40

Ни на каком, я просто любитель. В этом году бросил свое экономическое и поступил на техническое (инженер программист). Так что вот. А в остальном над идеей подумаю. Все равно РЕСПЕКТ ТЕБЕ БРАТ!
Пишите жизнь на чистовик.....переписать не удастся.....

Пред.

Вернуться в Visual Basic 1–6

Кто сейчас на конференции

Сейчас этот форум просматривают: AhrefsBot, Google-бот и гости: 50

    TopList