Форум программистов, компьютерный форум, киберфорум
QBasic
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.83/6: Рейтинг темы: голосов - 6, средняя оценка - 4.83
198 / 10 / 3
Регистрация: 30.04.2016
Сообщений: 732

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

03.09.2017, 18:27. Показов 1153. Ответов 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
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
03.09.2017, 18:27
Ответы с готовыми решениями:

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

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

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

7
6180 / 945 / 313
Регистрация: 25.02.2011
Сообщений: 1,381
Записей в блоге: 1
04.09.2017, 22:26
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
Платежеспособный зверь
 Аватар для кот Бегемот
8966 / 4389 / 1655
Регистрация: 28.10.2009
Сообщений: 11,647
05.09.2017, 19:04
Решение неверное.
Массив не изменён.
0
6180 / 945 / 313
Регистрация: 25.02.2011
Сообщений: 1,381
Записей в блоге: 1
05.09.2017, 20:42
Цитата Сообщение от кот Бегемот Посмотреть сообщение
Решение неверное.
Я полностью повторил подход ТС к решению задачи - без изменения массива вывод его со смешением.

Задачу можно решать несколькими способами:
1. как сделано изначально, без изменения массива вывод со смещением, асимтотика алгоритма O(n), плюсы - быстрота реализации и нет необходимости выделять дополнительную память, минусы - затраты на вычисление/хранение индексов и не изменяется исходный массив
2. последовательный сдвиг массива несколько раз на 1 элемент, асимтотика - O((n+1)*m), n - кол-во элементов, m - на сколько нужно сдвигать, плюсы - используется только одна дополнительная переменная , минусы - долго по времени
3. использование дополнительных переменных/массивов для разового сдвига на несколько элементов, асимтотика O(n+m)
как вариант - работать с копией массива и копировать элементы в исходный массив со сдвигом (см. вар1), асимтотика O(2*n), плюсы - достаточно быстро, минусы - нужно выделять дополнительную память на копию массива (дополнительные переменные).
0
Платежеспособный зверь
 Аватар для кот Бегемот
8966 / 4389 / 1655
Регистрация: 28.10.2009
Сообщений: 11,647
06.09.2017, 20:50
Цитата Сообщение от m-ch Посмотреть сообщение
Я полностью повторил подход ТС к решению задачи - без изменения массива вывод его со смешением.
Какой смысл повторять неверный подход, если в условии задачи русским по белому написано:
Цитата Сообщение от Petro29 Посмотреть сообщение
сдвинуть элементы циклически на одну позицию вправо.
То есть, сформировать новый массив, в котором элементы смещены относительно прежнего. А то, что сделали вы решением не может быть уже потому, что решается простым печатанием нужных элементов.
0
198 / 10 / 3
Регистрация: 30.04.2016
Сообщений: 732
16.09.2017, 18:47  [ТС]
На первый запрос был дан ответ к такой задаче: Заполнить случайным образом
одномерный массив из 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
Платежеспособный зверь
 Аватар для кот Бегемот
8966 / 4389 / 1655
Регистрация: 28.10.2009
Сообщений: 11,647
16.09.2017, 21:37
Уточните задачу иначе опять начнется ерунда.
Что Вы хотите, чтобы программа напечатала такие числа, которые у вас в примере или чтобы программа создала 5 новых массивов и распечатала их.
Это две разные задачи. Первая (которую вы попытались сделать) - это задача для детей 5 класса. Она примитивна как валенки и только дебилы имеют проблемы со сдвигом во время печати.
Вторая - формирование и распечатывание нового массива - это нормальная задача для людей что-то понимающих в программировании.
Определитесь.
0
6180 / 945 / 313
Регистрация: 25.02.2011
Сообщений: 1,381
Записей в блоге: 1
09.10.2017, 15:51
Цитата Сообщение от 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
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
09.10.2017, 15:51
Помогаю со студенческими работами здесь

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

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

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

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

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


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

Или воспользуйтесь поиском по форуму:
8
Ответ Создать тему
Новые блоги и статьи
Подключение Box2D v3 к SDL3 для Android: физика и отрисовка коллайдеров
8Observer8 29.01.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами. Версия v3 была полностью переписана на Си, в. . .
Инструменты COM: Сохранение данный из VARIANT в файл и загрузка из файла в VARIANT
bedvit 28.01.2026
Сохранение базовых типов COM и массивов (одномерных или двухмерных) любой вложенности (деревья) в файл, с возможностью выбора алгоритмов сжатия и шифрования. Часть библиотеки BedvitCOM Использованы. . .
Загрузка PNG с альфа-каналом на SDL3 для Android: с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 28.01.2026
Содержание блога SDL3 имеет собственные средства для загрузки и отображения PNG-файлов с альфа-каналом и базовой работы с ними. В этой инструкции используется функция SDL_LoadPNG(), которая. . .
Загрузка PNG с альфа-каналом на SDL3 для Android: с помощью SDL3_image
8Observer8 27.01.2026
Содержание блога SDL3_image - это библиотека для загрузки и работы с изображениями. Эта пошаговая инструкция покажет, как загрузить и вывести на экран смартфона картинку с альфа-каналом, то есть с. . .
Влияние грибов на сукцессию
anaschu 26.01.2026
Бифуркационные изменения массы гриба происходят тогда, когда мы уменьшаем массу компоста в 10 раз, а скорость прироста биомассы уменьшаем в три раза. Скорость прироста биомассы может уменьшаться за. . .
Воспроизведение звукового файла с помощью SDL3_mixer при касании экрана Android
8Observer8 26.01.2026
Содержание блога SDL3_mixer - это библиотека я для воспроизведения аудио. В отличие от инструкции по добавлению текста код по проигрыванию звука уже содержится в шаблоне примера. Нужно только. . .
Установка Android SDK, NDK, JDK, CMake и т.д.
8Observer8 25.01.2026
Содержание блога Перейдите по ссылке: https:/ / developer. android. com/ studio и в самом низу страницы кликните по архиву "commandlinetools-win-xxxxxx_latest. zip" Извлеките архив и вы увидите. . .
Вывод текста со шрифтом TTF на Android с помощью библиотеки SDL3_ttf
8Observer8 25.01.2026
Содержание блога Если у вас не установлены Android SDK, NDK, JDK, и т. д. то сделайте это по следующей инструкции: Установка Android SDK, NDK, JDK, CMake и т. д. Сборка примера Скачайте. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru