Форум программистов, компьютерный форум, киберфорум
QBasic
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.60/5: Рейтинг темы: голосов - 5, средняя оценка - 4.60
196 / 8 / 3
Регистрация: 30.04.2016
Сообщений: 733
1

Заполнить случайным образом одномерный массив из n элементов

03.09.2017, 18:27. Показов 841. Ответов 7
Метки нет (Все метки)

Задача: Заполнить случайным образом одномерный массив из n элементов и сдвинуть элементы циклически на одну
позицию вправо.
QBasic/QuickBASIC
1
2
3
4
5
6
7
8
9
10
11
12
13
CLS
RANDOMIZE TIMER
DIM A(10)
FOR I = 1 TO 10
    A(i) = INT(RND * 20) + 2
     LOCATE 3, 4 * i
     PRINT A(i);
NEXT i
     A(0) = A(10)
FOR I = 1 TO 10
      LOCATE 5, 4 * i
      PRINT A(I – 1);
NEXT i
На выходе имеем:
QBasic/QuickBASIC
1
2
12   18   8   2   2   19   19   17   5   8
 8    12  18   8   2   2   19   19   17   5
Всё-таки эту задачу я сделал. И, похоже, даже правильно,раз результат получился нужный.

Но возник вопрос:
А можно сдвинуть исходный массив на две позиции так,чтобы последний и предпоследний элементы массива оказались
на месте первого и второго. А если возможен сдвиг на две позиции, то возможен сдвиг и на три, четыре и т. д. позиции?
Как сделать это - у меня не получилось. У вас должно получиться.
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
03.09.2017, 18:27
Ответы с готовыми решениями:

Заполнить случайным образом одномерный массив из n элементов и сдвинуть элементы циклически на одну позицию вправо
Задача: Заполнить случайным образом одномерный массив из n элементов и сдвинуть элементы...

Заполните случайным образом одномерный массив из n элементов и обменяйте элементами местами
Помогите пожалуйста решить задачи:) 1) Заполните одномерный массив из n-элементов (n вводится с...

Заполните случайным образом одномерный массив из n элементов и сдвиньте элементы циклически на 1 позицию вправо
Заполните случайным образом одномерный массив из n элементов и сдвиньте элементы циклически на 1...

Заполните одномерный массив из 12 элементов случайным образом и найдите сумму чисел, которые по модулю меньше 6.
Народ выручате пожалуйста... 1.Заполните одномерный массив оценками, по 12 предметам,...

7
6143 / 910 / 305
Регистрация: 25.02.2011
Сообщений: 1,303
Записей в блоге: 1
04.09.2017, 22:26 2
QBasic/QuickBASIC
1
2
3
4
5
6
7
8
9
10
11
12
13
14
DIM a(1 TO 10) AS LONG
DIM i AS LONG, j AS LONG, n AS LONG
RANDOMIZE TIMER
n = 10 'кол-во элементов в массиве
PRINT "Исходный массив"
FOR i = 1 TO n
    a(i) = INT(RND * 20) + 2
    PRINT i, a(i)
NEXT i
j = 2 'сдвиг влево, j>=0, j<=n
PRINT "Массив со сдвигом"
FOR i = 1 TO n
    PRINT i, a((i + n - 1 - j) MOD n + 1)
NEXT i
0
Платежеспособный зверь
8754 / 4185 / 1608
Регистрация: 28.10.2009
Сообщений: 11,324
05.09.2017, 19:04 3
Решение неверное.
Массив не изменён.
0
6143 / 910 / 305
Регистрация: 25.02.2011
Сообщений: 1,303
Записей в блоге: 1
05.09.2017, 20:42 4
Цитата Сообщение от кот Бегемот Посмотреть сообщение
Решение неверное.
Я полностью повторил подход ТС к решению задачи - без изменения массива вывод его со смешением.

Задачу можно решать несколькими способами:
1. как сделано изначально, без изменения массива вывод со смещением, асимтотика алгоритма O(n), плюсы - быстрота реализации и нет необходимости выделять дополнительную память, минусы - затраты на вычисление/хранение индексов и не изменяется исходный массив
2. последовательный сдвиг массива несколько раз на 1 элемент, асимтотика - O((n+1)*m), n - кол-во элементов, m - на сколько нужно сдвигать, плюсы - используется только одна дополнительная переменная , минусы - долго по времени
3. использование дополнительных переменных/массивов для разового сдвига на несколько элементов, асимтотика O(n+m)
как вариант - работать с копией массива и копировать элементы в исходный массив со сдвигом (см. вар1), асимтотика O(2*n), плюсы - достаточно быстро, минусы - нужно выделять дополнительную память на копию массива (дополнительные переменные).
0
Платежеспособный зверь
8754 / 4185 / 1608
Регистрация: 28.10.2009
Сообщений: 11,324
06.09.2017, 20:50 5
Цитата Сообщение от m-ch Посмотреть сообщение
Я полностью повторил подход ТС к решению задачи - без изменения массива вывод его со смешением.
Какой смысл повторять неверный подход, если в условии задачи русским по белому написано:
Цитата Сообщение от Petro29 Посмотреть сообщение
сдвинуть элементы циклически на одну позицию вправо.
То есть, сформировать новый массив, в котором элементы смещены относительно прежнего. А то, что сделали вы решением не может быть уже потому, что решается простым печатанием нужных элементов.
0
196 / 8 / 3
Регистрация: 30.04.2016
Сообщений: 733
16.09.2017, 18:47  [ТС] 6
На первый запрос был дан ответ к такой задаче: Заполнить случайным образом
одномерный массив из n элементов и сдвинуть циклически на одну позицию.
Вот один из ответов:
QBasic/QuickBASIC
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
CLS
DIM a(1 TO 10) AS LONG
DIM i AS LONG, j AS LONG, n AS LONG
   RANDOMIZE TIMER
   n = 10  ‘Кол. элементов массива
   PRINT “ Исходный массив:”
     FOR i = 1 TO n
  a(i) = INT(RND * 20) + 2
    PRINT i, a(i)
NEXT i
j = 2  ‘Сдвиг влево,  J >=0,  j<=n
PRINT “ Массив со сдвигом.”
   FOR i = 1 TO n
PRINT  i, a((i + n – 1 – j) MOD n + 1)
NEXT i
На выходе поимели: (программа сложная из-за предпоследней строки)
Исходный массив:
QBasic/QuickBASIC
1
2
3
4
5
6
7
8
9
10
1                         16  
2                         12
3                         13
4                         7
5                         8
6                         17
7                         2
8                         17 
9                         18
10                       16
Массив со сдвигом

QBasic/QuickBASIC
1
2
3
4
5
6
7
1                         18
2                         16
3                         16
4                         12
5                         13
6                         7
7                         8
Не нравится такое выполнение. В задаче требовалось сдвинуть массив на одну позицию вправо, а сделано на две позиции, и не вправо, а влево. И зачем печатать номера элементов второй раз? И строки по вертикали (места много занимают). Что, нельзя по горизонтали?

Немного видоизменим задачу: Заполнить случайным образом (без использования оператора Randomize) одномерный массив из 6 элементов и сдвигать их 6 раз циклически, каждый раз на одну позицию вправо. На выходе должно быть так:
QBasic/QuickBASIC
1
2
3
4
   Номера элементов:
1   2   3   4   5   6
Исходный массив:
8   12   3   9   7   5
Сдвинутые массивы на 1 поз. вправо:
QBasic/QuickBASIC
1
2
3
4
5
6
1-й сдвиг:   5   8   12   3   9   7
2-й сдвиг:   7   5   8   12   3   9
3-й сдвиг:   9   7   5   8   12   3
4-й сдвиг:   3   9   7   5   8   12
5-й сдвиг:   12   3   9   7   5   8
6-й сдвиг:   8   12   3   9   7   5 (исходный массив)
Вот такую надо сделать программу. Кто сумеет?
0
Платежеспособный зверь
8754 / 4185 / 1608
Регистрация: 28.10.2009
Сообщений: 11,324
16.09.2017, 21:37 7
Уточните задачу иначе опять начнется ерунда.
Что Вы хотите, чтобы программа напечатала такие числа, которые у вас в примере или чтобы программа создала 5 новых массивов и распечатала их.
Это две разные задачи. Первая (которую вы попытались сделать) - это задача для детей 5 класса. Она примитивна как валенки и только дебилы имеют проблемы со сдвигом во время печати.
Вторая - формирование и распечатывание нового массива - это нормальная задача для людей что-то понимающих в программировании.
Определитесь.
0
6143 / 910 / 305
Регистрация: 25.02.2011
Сообщений: 1,303
Записей в блоге: 1
09.10.2017, 15:51 8
Цитата Сообщение от Petro29 Посмотреть сообщение
И строки по вертикали (места много занимают). Что, нельзя по горизонтали?
Разве сложно из вертикали перевести в горизонталь?

в сообщении № 4
Было приведено 3 варианта решения задачи. Один из вариантов без фактического изменения массива приложен.

Два других выгладываю.
с последовательным сдвигом массивов k раз на один элемент вправо:
QBasic/QuickBASIC
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
DIM a(1 TO 10) AS LONG
DIM i AS LONG, j AS LONG, n AS LONG, k AS LONG, t AS LONG
n = 10 'кол-во элементов
PRINT "Исходный массив"
FOR i = 1 TO n
    a(i) = INT(RND * 20 + 1)
    PRINT a(i);
NEXT i
PRINT
k = 5 'на сколько нужно сдвинуть массив
PRINT "Сдвигаем массив вправо последовательно"; k; "раз"
FOR j = 1 TO k
    t = a(n)
    FOR i = n TO 2 STEP -1
        a(i) = a(i - 1)
    NEXT i
    a(1) = t
    'выводим на печать каждый шаг, если нужно
    FOR i = 1 TO n
        PRINT a(i);
    NEXT i
    PRINT
NEXT j
PRINT "Итоговый массив со сдвигом вправо"
FOR i = 1 TO n
    PRINT a(i);
NEXT i
PRINT
Вариант работы с копией массива и сдвиг сразу на несколько элементов за раз
QBasic/QuickBASIC
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
DIM a(1 TO 10) AS LONG, b(1 TO 10) AS LONG
DIM i AS LONG, j AS LONG, n AS LONG, k AS LONG
n = 10 'кол-во элементов
PRINT "Исходный массив"
FOR i = 1 TO n
    a(i) = INT(RND * 20 + 1)
    b(i) = a(i) 'запоминаем копию массива
    PRINT a(i);
NEXT i
PRINT
k = 5 'на сколько нужно сдвинуть массив
PRINT "Итоговый массив со сдвигом вправо"
FOR i = 1 TO n
    a(i) = b((i + n - k - 1) MOD n + 1)
    PRINT a(i);
NEXT i
PRINT
Добавлено через 9 минут
Цитата Сообщение от Petro29 Посмотреть сообщение
Немного видоизменим задачу:
Без RND (вариант с последовательным сдвигом):
QBasic/QuickBASIC
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 10) AS LONG
DIM i AS LONG, j AS LONG, n AS LONG, k AS LONG, t AS LONG
n = 6
PRINT "ishodny massiv"
FOR i = 1 TO n
    READ a(i)
    PRINT a(i);
NEXT i
PRINT
k = 6
PRINT "so sdvigom"; k; "raz"
FOR j = 1 TO k
    t = a(n)
    FOR i = n TO 2 STEP -1
        a(i) = a(i - 1)
    NEXT i
    a(1) = t
    FOR i = 1 TO n
        PRINT a(i);
    NEXT i
    PRINT
NEXT j
 
DATA 8, 12, 3, 9, 7, 5
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
09.10.2017, 15:51

Задать случайным образом из промежутка [-9;9] одномерный массив A(N).
Ребят помогите плиз. Задать случайным образом из промежутка одномерный массив A(N). ...

Заполнить случайным образом одномерный массив из n элементов
Заполнить случайным образом одномерный массив из n элементов и определить минимальную сумму...

Одномерный массив из 7 элементов заполнить случайным образом числами от 5 до 9
Помогите написать пожалуйста программы! №1. Одномерный массив из 7 элементов заполнить случайным...

Одномерный массив из 7 элементов заполнить случайным образом числами от 5 до 9. Заменить все элементы массива меньше 5 нулями
Одномерный массив из 7 элементов заполнить случайным образом числами от 5 до 9. Заменить все...


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

Или воспользуйтесь поиском по форуму:
8
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2022, CyberForum.ru