Форум программистов, компьютерный форум, киберфорум
Visual Basic
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.63/8: Рейтинг темы: голосов - 8, средняя оценка - 4.63
3 / 3 / 0
Регистрация: 15.04.2018
Сообщений: 18

Как перемешать двумерный массив?

15.04.2018, 13:45. Показов 1617. Ответов 16
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Задан двумерный массив, надо случайным образом переставить значения стоящие в нем. Вот код
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
Dim a(1 To 4, 1 To 4) As String
Dim k As Integer
 
Private Sub Command1_Click()
k = 0
For i = 1 To 3
  For j = 1 To 4
    a(i, j) = j + k
  Next j
  k = k + 4
Next i
i = 4
For j = 1 To 3
  a(i, j) = j + 12
Next j
a(4, 4) = " "
k = 0
For i = 1 To 4
  For j = 1 To 4
    Label1(j - 1 + k).Caption = a(i, j)
  Next j
  k = k + 4
Next i
End Sub
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
15.04.2018, 13:45
Ответы с готовыми решениями:

Как сделать двумерный безразмерный массив?
здравствуйте . У меня проблема как сделать двумерный безразмерный массив? у меня массив 10 на 10, а если введу 100 на 100 он не...

Как правильно создать двумерный массив
Здравствуйте я новичек помогите понять вот создаю двухмерный массивDim (10,25) теперь такой вопрос а как его в память компьютера объявить ...

Как превратить двумерный массив в одномерный?
Здравствуйте! Прошу помощи. Не знаю, как исправить код ниже для Эксель, чтобы одномерный массив полностью показывал элементы двумерного. ...

16
Заблокирован
15.04.2018, 14:02
Эта программа не будет работать. Вы объявили строковый массив
и пытаетесь заполнить его числами.

Добавлено через 2 минуты
Вам известны такие функции как STR() и VAL() ?
0
3 / 3 / 0
Регистрация: 15.04.2018
Сообщений: 18
15.04.2018, 14:15  [ТС]
ili1,
Цитата Сообщение от ili1 Посмотреть сообщение
Эта программа не будет работать
моя программа работает.
Цитата Сообщение от ili1 Посмотреть сообщение
Вы объявили строковый массив
и пытаетесь заполнить его числами.
а как иначе мне заполнить один его элемент пробелом? Что бы он отображался при выводе в Label1 как пробел.

Добавлено через 10 минут
Известны, если мне потребуется перевести я переведу, но сейчас не вижу в это необходимости, т. к. повторюсь пока все работает.
0
Заблокирован
15.04.2018, 14:27
Лучший ответ Сообщение было отмечено Jaron401 как решение

Решение

Jaron401,
чтобы число превратить в строковую переменную применяют
функцию STR(). Пример STR(4) - это будет строка " 4" - содержащая
перед четверкой пробел.

Добавлено через 10 минут
Jaron401
Чтобы перемешать матрицу в самом начале вводите строку
RANDOMIZE TIMER - для инициализации генератора случайных чисел
2.
Далее (после заполнения матрицы)
вы задаете цикл FOR - NEXT, в котором с помощью функции RND
задаете случайные значения индексам матрицы
i = 1 + 4 * RND
j = 1 + 4 * RND
Элементы a(1, 1) и a(i, j) переставляете местами
Следующая перестановка a(1, 2) и a(i, j) - это новый элемент
...
и так далее, всего 4 * 4 = 16 перестановок.
0
3 / 3 / 0
Регистрация: 15.04.2018
Сообщений: 18
15.04.2018, 14:27  [ТС]
ili1, Если мне все надо будет перевести в строку ( как я понял для того что бы перемешать), то не легче будет изначально массиву задать а Integer?
0
Заблокирован
15.04.2018, 14:29
Jaron401,
легче!! Именно это я и хотел вам объяснить.
0
3 / 3 / 0
Регистрация: 15.04.2018
Сообщений: 18
15.04.2018, 14:47  [ТС]
ili1, Я немного не понял вторую часть, как должен выглядеть цикл FOR..NEXT?
0
Заблокирован
15.04.2018, 14:56
Правильно спросили. Это двойной цикл
FOR i1 = 1 TO 4
FOR j1 =1 TO 4

NEXT j1, i1
0
3 / 3 / 0
Регистрация: 15.04.2018
Сообщений: 18
15.04.2018, 15:05  [ТС]
ili1, все равер не могу понять. Почему i1 и j1?

Добавлено через 2 минуты
ili1,
Цитата Сообщение от ili1 Посмотреть сообщение
переставляете местами
перестановка должна быть в теле внутреннего цикла? и как должна выглядеть так?
Visual Basic
1
2
3
t = a(1, 1)
   a(1, 1) = a(i, j)
   a(i, j) = t
0
Заблокирован
15.04.2018, 15:11
Visual Basic
1
2
3
    t = a(i1, j1)
    a(i1, j1) = a(i, j)
    a(i, j) = t
0
3 / 3 / 0
Регистрация: 15.04.2018
Сообщений: 18
15.04.2018, 15:17  [ТС]
ili1, а это правильно?
Visual Basic
1
2
3
4
5
6
7
For i1 = 1 To 4
 i = 1 + 4 * Rnd
  For j1 = 1 To 4
   j = 1 + 4 * Rnd
' престановка
  Next j1
 Next i1
1
Заблокирован
15.04.2018, 15:20
Jaron401
Нет. Так нельзя. Мы уже использовали i, j поэтому надо
задать другие переменные например ii, jj или p, q. Но другие!!

Добавлено через 1 минуту
Да. Второй случай верный.
0
3 / 3 / 0
Регистрация: 15.04.2018
Сообщений: 18
15.04.2018, 15:25  [ТС]
ili1,
Visual Basic
1
2
3
4
5
6
7
For i1 = 1 To 4
 i = 1 + 4 * Rnd
  For j1 = 1 To 4
   j = 1 + 4 * Rnd
' престановка
  Next j1
 Next i1
Добавлено через 1 минуту
все я понял
1
Заблокирован
15.04.2018, 15:29
Нет. это не верно. Верный пост #11.

Добавлено через 2 минуты
Да. Вы быстро учитесь. Это верно.
0
3 / 3 / 0
Регистрация: 15.04.2018
Сообщений: 18
15.04.2018, 15:52  [ТС]
ili1, Тем не менее возникает какая то ошибка. Я пробовал запускать несколько раз и и получилось только один. Вот мой код
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
Dim a(1 To 4, 1 To 4) As Integer
Dim k As Integer
Private Sub Command2_Click()
Randomize Timer
Dim t As Integer
k = 0
For i = 1 To 3
  For j = 1 To 4
    a(i, j) = j + k
  Next j
  k = k + 4
Next i
i = 4
For j = 1 To 3
  a(i, j) = j + 12
Next j
a(4, 4) = 0
   
 
For i1 = 1 To 4
 i = 1 + 4 * Rnd
  For j1 = 1 To 4
   j = 1 + 4 * Rnd
   t = a(i1, j1)
   a(i1, j1) = a(i, j)
   a(i, j) = t
   
    Next j1
 Next i1
 
 k = 0
For i = 1 To 4
  For j = 1 To 4
    Label1(j - 1 + k).Caption = a(i, j)
  Next j
  k = k + 4
Next i
End Sub
Компилятор выделяет эту строчку
Visual Basic
1
a(i1, j1) = a(i, j)
0
Заблокирован
15.04.2018, 16:18
Лучший ответ Сообщение было отмечено Jaron401 как решение

Решение

Это скорее всего округление. Вот пример из вашего кода
i = 1 + 4 * Rnd
поскольку переменная i целочисленная, то бейсик сам округляет
значение i до ближайшего целого число. Отсюда может быть
ошибка. Например число 4.7 будет округлено до 5. А индекс
не может быть равным 5. Как исправить? Надо записать формулу так
i = 0.5 + 4 * RND
Вот теперь число 5 уже не получится. (это я проглядел). Ну на ошибках
учатся.
В общем исправьте у себя в подобных формулах 1 на 0.5
0
3 / 3 / 0
Регистрация: 15.04.2018
Сообщений: 18
15.04.2018, 16:38  [ТС]
хорошо

Добавлено через 3 минуты
ili1, все получилось, работает. Спасибо
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
15.04.2018, 16:38
Помогаю со студенческими работами здесь

Как считать двумерный массив из текстового файла?!
В массиве три столбика и 300 строк, необходимо считать этот массив... Помогите, пожаааааалуйста....

Как создать двумерный массив из двух одномерных
Даны два одномерных массива по 3 елемента, надо составить двумерный массив 2 на 3, в первом столбце которого размещалось произведение...

Как создать двумерный массив объектов (например Label)
Как создать двумерный массив объектов (например Label)?

Как правильно объявить двумерный массив для пользовательского типа
Схема: Есть такой "базовый" Type: Private Type Linii Tip As Byte 'направление вектора Vid As String 'строковый...

Дан двумерный массив, вводя столбец и строку выделить как показано на картинках
Проблема в следующем, дан двумерный массив, вводя столбец и строку выделить как показано на картинках... вот код, спасибо! Dim a(100),...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
17
Ответ Создать тему
Новые блоги и статьи
Ритм жизни
kumehtar 27.02.2026
Иногда приходится жить в ритме, где дел становится всё больше, а вовлечения в происходящее — всё меньше. Плотный график не даёт вниманию закрепиться ни на одном событии. Утро начинается с быстрых,. . .
SDL3 для Web (WebAssembly): Сборка библиотек SDL3 и Box2D из исходников с помощью CMake и Emscripten
8Observer8 27.02.2026
Недавно вышла версия SDL 3. 4. 2 библиотеки SDL3. На странице официальной релиза доступны исходники, готовые DLL (для x86, x64, arm64), а также библиотеки для разработки под Android, MinGW и Visual. . .
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование . \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json> Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом. # Check if. . .
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так: https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347 Основана на STM32F303RBT6. На борту пять. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru