Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 02.04.2019, 03:49   #1
Stevo
Пользователь
 
Регистрация: 22.03.2019
Сообщений: 25
По умолчанию [VB] При помощи датчика случайных чисел получить матрицу A порядка N (N – целое случайное четное число в диапазоне от 6 до 15). Поменять местами 1ую строку со 2ой, 3ью с 4ой и т.д.

Здравствуйте, помогите пожалуйста решить задачу,не могу установить четность числа и поменять местами строки в матрице, заранее спасибо!

Задача:
При помощи датчика случайных чисел получить матрицу A порядка N (N – целое случайное четное число в диапазоне от 6 до 15). Поменять местами 1ую строку со 2ой, 3ью с 4ой и т.д. Вывести обе матрицы.

Код:
Sub matrica()
Dim N As Byte, A() As Byte
ReDim A(N)
Randomize Timer
N = Int(Rnd * 9 + 6)
End Sub
Stevo вне форума Ответить с цитированием
Старый 03.04.2019, 15:07   #2
сфинкс
Форумчанин
 
Аватар для сфинкс
 
Регистрация: 17.06.2012
Сообщений: 960
По умолчанию

надеюсь поможет алгоритм qb64
Код:
randomize timer
5 n=int(6+rnd*10): if n/2<>int(n/2) then 5' моя фишка: крутящаяся строка 
dim a(n+1,n): for i=1 to n:for j=1 to n
10 a(i,j)=int(6+rnd*10): if a(i,j)/2<>int(a(i,j)/2) then 10' или проще если без чётности 
?a(i,j);:next:?:next:?:?
for i=1 to n:a(n+1,i)=a(1,i):a(1,i)=a(2,i):a(2,i)=a(n+1,i):next
for i=1 to n:a(n+1,i)=a(3,i):a(3,i)=a(4,i):a(4,i)=a(n+1,i):next
for i=1 to n:for j=1 to n:?a(i,j);:next:?:next
Результат:
Код:
 10  10  12  8  10  8
 8  6  10  12  10  6
 8  14  6  8  14  8
 6  6  12  10  8  6
 8  10  6  8  12  8
 14  14  12  14  10  12


 8  6  10  12  10  6
 10  10  12  8  10  8
 6  6  12  10  8  6
 8  14  6  8  14  8
 8  10  6  8  12  8
 14  14  12  14  10  12
учитывая: "чётное число в диапазоне от 6 до 15"
значит возможно без условий:
n=int(2*(3+rnd*5))

тогда код ещё проще
Код:
randomize timer:n=int(2*(3+rnd*5)):dim a(n+1,n)
for i=1 to n:for j=1 to n:a(i,j)=int(rnd*10):?a(i,j);:next:?:next:?:?
for i=1 to n:a(n+1,i)=a(1,i):a(1,i)=a(2,i):a(2,i)=a(n+1,i):next
for i=1 to n:a(n+1,i)=a(3,i):a(3,i)=a(4,i):a(4,i)=a(n+1,i):next
for i=1 to n:for j=1 to n:?a(i,j);:next:?:next

отвечаю только на вопросы автора темы и...
Случайные и Массивы https://programmersforum.ru/showthread.php?t=344371 Учим C# & basic & excel & python https://programmersforum.ru/showthre...=327446&page=5 ничего нерекомендую

Последний раз редактировалось сфинкс; 03.04.2019 в 16:13.
сфинкс вне форума Ответить с цитированием
Старый 03.04.2019, 15:55   #3
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

Код:
Sub matrica()
Dim N As Byte, Dim A() As Byte, Tmp As Byte
Dim i As Integer,  j As Integer

Randomize Timer
N = Int(Rnd * 9 + 6)
ReDim A(N,N)
' заполнить матрицу случайными числами
for i=0 to N-1
  for j=0 to N-1
    A(i,j) =  Int(Rnd() * 100 + 1)
  next j
Next i


' обменять строки местами
for i=0 to Int(N/2)-1
  for j=0 to N-1
    Tmp = A(i*2,j)
    A(i*2,j) = A(i*2+1,j) 
    A(i*2+1,j) = Tmp
  next j
Next i


End Sub

Последний раз редактировалось Serge_Bliznykov; 03.04.2019 в 16:00.
Serge_Bliznykov вне форума Ответить с цитированием
Старый 06.04.2019, 16:26   #4
Stevo
Пользователь
 
Регистрация: 22.03.2019
Сообщений: 25
По умолчанию

Цитата:
Сообщение от Serge_Bliznykov Посмотреть сообщение
Код:
Sub matrica()
Dim N As Byte, Dim A() As Byte, Tmp As Byte
Dim i As Integer,  j As Integer

Randomize Timer
N = Int(Rnd * 9 + 6)
ReDim A(N,N)
' заполнить матрицу случайными числами
for i=0 to N-1
  for j=0 to N-1
    A(i,j) =  Int(Rnd() * 100 + 1)
  next j
Next i


' обменять строки местами
for i=0 to Int(N/2)-1
  for j=0 to N-1
    Tmp = A(i*2,j)
    A(i*2,j) = A(i*2+1,j) 
    A(i*2+1,j) = Tmp
  next j
Next i


End Sub
Спасибо, но можете, пожалуйста, объяснить построково логику программы, а то я пытаюсь, но никак понять не могу. И есть ли здесь проверка на четность числа?
Stevo вне форума Ответить с цитированием
Старый 06.04.2019, 19:00   #5
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

Цитата:
Сообщение от Stevo Посмотреть сообщение
И есть ли здесь проверка на четность числа?
нет.
а зачем она нужна?
меняется i*2 строка со строкой i*2+1
т.е.
i=0 нулевая строчка меняется с первой
i=1 вторая строчка меняется с третьей
i=2 четвертая строчка меняется с пятой и т.д.


Цитата:
Сообщение от Stevo Посмотреть сообщение
пожалуйста, объяснить построково логику программы
так долго и непродуктивно.
лучше спросите, какая конкретно строчка непонятна, я поясню
Serge_Bliznykov вне форума Ответить с цитированием
Старый 07.04.2019, 09:57   #6
сфинкс
Форумчанин
 
Аватар для сфинкс
 
Регистрация: 17.06.2012
Сообщений: 960
По умолчанию

чётность возможно задавать

и вместо:
N = Int(Rnd * 9 + 6)

возможно задавать чётность

читаем у меня выше:
n=int(2*(3+rnd*5))

и чётность нужна для перестановок
строк нечётных n и строк чётных n+1

и чтобы понять важно комментировать самим

Код:
for i=0 to N-1 ' строки N штук 
  for j=0 to N-1 ' ячейки в строке N штук 
    A(i,j) =  Int(Rnd() * 100 + 1) ' массив А заполнен случайными 
  next j ' конец цикла  
Next i ' конец цикла  

для понимания допустим N=6 

' обменять строки местами
for i=0 to Int(N/2)-1 ' строки массива от 0 до 2 итого 3 штуки как N/2=6/2
  for j=0 to N-1 ' ячейки в строке N штук 
    Tmp = A(i*2,j) ' элемент А заменяемый 
    A(i*2,j) = A(i*2+1,j) ' замена 
    A(i*2+1,j) = Tmp ' элемент А заменяющий 
  next j ' конец цикла  
Next i ' конец цикла
Случайные и Массивы https://programmersforum.ru/showthread.php?t=344371 Учим C# & basic & excel & python https://programmersforum.ru/showthre...=327446&page=5 ничего нерекомендую

Последний раз редактировалось сфинкс; 07.04.2019 в 16:21.
сфинкс вне форума Ответить с цитированием
Старый 07.04.2019, 15:27   #7
Stevo
Пользователь
 
Регистрация: 22.03.2019
Сообщений: 25
По умолчанию

Цитата:
Сообщение от Serge_Bliznykov Посмотреть сообщение
так долго и непродуктивно.
лучше спросите, какая конкретно строчка непонятна, я поясню
Вот это вот все желательно
Код:
for i=0 to N-1
  for j=0 to N-1
    A(i,j) =  Int(Rnd() * 100 + 1)
  next j
Next i


' обменять строки местами
for i=0 to Int(N/2)-1
  for j=0 to N-1
    Tmp = A(i*2,j)
    A(i*2,j) = A(i*2+1,j) 
    A(i*2+1,j) = Tmp
Stevo вне форума Ответить с цитированием
Старый 07.04.2019, 20:01   #8
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

это заполнение массива случайными числами от 1 до 100
Цитата:
Сообщение от Stevo Посмотреть сообщение
Код:
for i=0 to N-1  цикл по переменной i от нуля до N-1
  for j=0 to N-1 цикл по переменной j от нуля до N-1
    A(i,j) =  Int(Rnd() * 100 + 1) элемент массива в i-й строке j-м столбце заполнить целым случайным числом от 1 до 100
  next j 
Next i
обменять строки местами
Цитата:
Сообщение от Stevo Посмотреть сообщение
Код:
for i=0 to Int(N/2)-1 цикл по переменной i от нуля до половины массива
  for j=0 to N-1 цикл по столбцам от 0 до N-1


  это обмен двух ячеек массива местами:
    Tmp = A(i*2,j) в переменную tmp сохранить значение массива в i*2 строке и j-м столбце
    A(i*2,j) = A(i*2+1,j) в элемент массива в i*2 строке и j-м столбце записать элемента массива из следующей строки
    A(i*2+1,j) = Tmp в элемент массива следующей строки (это i*2+1 строкf и j-й столбец) записать сохранённое значение из переменной tmp
Serge_Bliznykov вне форума Ответить с цитированием
Старый 12.04.2019, 15:44   #9
Stevo
Пользователь
 
Регистрация: 22.03.2019
Сообщений: 25
По умолчанию

А как сделать так, чтобы результат выводился в таблице и чтобы в ячейках разные числа были, а не одно?
Stevo вне форума Ответить с цитированием
Старый 12.04.2019, 16:17   #10
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

Цитата:
Сообщение от Stevo Посмотреть сообщение
А как сделать так, чтобы результат выводился в таблице и чтобы в ячейках разные числа были, а не одно?
так:
Цитата:
Сообщение от Serge_Bliznykov Посмотреть сообщение
это заполнение массива случайными числами от 1 до 100
Цитата:
Сообщение от Stevo
Код:
for i=0 to N-1  цикл по переменной i от нуля до N-1
  for j=0 to N-1 цикл по переменной j от нуля до N-1
    A(i,j) =  Int(Rnd() * 100 + 1) элемент массива в i-й строке j-м столбце заполнить целым случайным числом от 1 до 100
  next j 
Next i
Serge_Bliznykov вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Случайное целое число в диапазоне JavaScript Lektorfuja JavaScript, Ajax 1 08.12.2016 22:03
Сформировать матрицу А6&#215;6 случайных целых чисел в диапазоне от 0 до 100. Напечатать матрицу. Predgornoe Общие вопросы C/C++ 2 08.01.2015 22:14
Сформировать массив 20 целых случайных чисел в диапазоне от минус 30 до 30. Напечатать его. Поменять местами максимальный и минима arai94 Помощь студентам 0 16.11.2013 17:59
Дано целое число в диапазоне 100–999. Вывести строку-описание данного числа. nadyaH Помощь студентам 4 28.10.2013 18:03