Форум программистов, компьютерный форум, киберфорум
PascalABC.NET
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.76/25: Рейтинг темы: голосов - 25, средняя оценка - 4.76
0 / 0 / 0
Регистрация: 22.10.2019
Сообщений: 43

Написать функцию, которая циклически сдвигает одномерный массив вправо или влево на указанное число позиций.

16.12.2020, 13:11. Показов 5625. Ответов 25
Метки нет (Все метки)

Написать функцию, которая циклически сдвигает одномерный массив вправо или
влево на указанное число позиций. Сдвиг также должен быть кольцевым, то есть
те элементы, которые уходят вправо или влево за пределы массива, должны
помещаться с другого его конца.
Например, дан массив:
1 2 3 4 5 6
Кольцевой сдвиг вправо на 2 единицы:
5 6 1 2 3 4
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
16.12.2020, 13:11
Ответы с готовыми решениями:

Написать программу, которая сдвигает циклически вправо на заданное число позиций элементы массива
Написать программу, которая сдвигает циклически вправо на заданное число позиций элементы массива.

Написать функцию, которая циклически сдвигает одномерный массив вправо или влево на указанное число позиций
Написать функцию, которая циклически сдвигает одномерный массив вправо или влево на указанное число позиций. Сдвиг также должен быть...

Написать и протестировать функцию shift_l(mas,n,k), которая циклически сдвигает массив длины n влево на k позиций.
Помогите ребят!!!!препод задачи задачи для аттестации,сделал фактически все,кроме этой: Написать и протестировать функцию...

25
0 / 0 / 0
Регистрация: 22.10.2019
Сообщений: 43
16.12.2020, 16:10  [ТС]
Спасибо, а эту знаете как?
Найти сумму и количество всех двухзначных чисел, у которых сумма цифр кратная 5
0
16.12.2020, 18:19

Не по теме:

Хотел ответ в стиле PABC.NET дать. Но не успел… Работа отвлекла.
Чую — намаялся бы потом с таким TC-ом :–)

0
 Аватар для canadamoscow
1179 / 430 / 194
Регистрация: 23.03.2020
Сообщений: 1,021
Записей в блоге: 1
16.12.2020, 18:26
Pascal
1
2
3
4
5
6
7
8
9
10
11
Function LR(a: array of integer; k: integer): array of integer;
begin
  var n := a.Count;
  k := k mod n + if k < 0 then n else 0;
  Result := a?[n-k:] + a[:n-k];
end;
 
begin
 var a := ReadlnString('Введите элементы массива через пробел:').toIntegers;
 LR(a, ReadlnInteger('Сдвиг на:')).Println
end.
0
 Аватар для Sun Serega
2355 / 1458 / 526
Регистрация: 07.04.2017
Сообщений: 4,798
16.12.2020, 18:37
Цитата Сообщение от canadamoscow Посмотреть сообщение
k mod n + if k < 0 then n else 0
(k-1) mod n + 1
0
 Аватар для canadamoscow
1179 / 430 / 194
Регистрация: 23.03.2020
Сообщений: 1,021
Записей в блоге: 1
16.12.2020, 18:51
Цитата Сообщение от Sun Serega Посмотреть сообщение
(k-1) mod n + 1
не об этом речь.
Code
1
2
3
4
##
var (n, k) := (10, -12);
(k mod n + if k < 0 then n else 0).Println; //8 
((k-1) mod n + 1).Println; //-2
Если цель избавиться от a?[n-k:] (вопроса), то не поможет, т.к. тогда в случае ввода сдвига = 0, все равно будет ошибка
0
 Аватар для Sun Serega
2355 / 1458 / 526
Регистрация: 07.04.2017
Сообщений: 4,798
16.12.2020, 19:28
Нет, вы таки в правильную сторону думали. У вас неправильно используется безопасный срез. Его правильно использовать только тогда, когда вы ожидаете что индекс выйдет за пределы и вам надо автоматически сдвинуть его в допустимые границы (что делает .Clamp, но без лишний телодвижений).

Иначе - это свидетельствует о том что вы ленитесь внимательно разобраться в чём то типа ошибок единицы (как в данном случае).
Pascal
1
2
3
4
5
6
7
8
9
10
11
12
function LR(a: array of integer; k: integer): array of integer;
begin
  var n := a.Count;
  k := (k-ord(k>=1)) mod n + if k<1 then n else 1;
  Result := a[n-k:] + a[:n-k];
end;
 
begin
  var a := ReadlnString('Введите элементы массива через пробел:').ToIntegers;
//  var a := |1,2,3|;
  LR(a, ReadlnInteger('Сдвиг на:')).Println
end.
Добавлено через 3 минуты
Ну, или, лучше и не пытаться прикрутить общий алгоритм и к положительным, и к отрицательным...
Pascal
1
2
3
  k := if k < 1 then
    k mod c + c else
    (k-1) mod 3 + 1;
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
16.12.2020, 19:28

Циклический сдвиг списка вправо или влево на указанное число позиций
def func(l, n): return l + l try: s=input('Введите список чисел через пробел: ') l = list(map(int, s.split())) if...

Составить 2 функции. Одна из функций циклически сдвигает массив длины N вправо на k позиций, а другая - на k позиций вле
Составить 2 функции. Одна из функций циклически сдвигает массив длины N вправо на k позиций, а другая - на k позиций влево. 1. Составить...

написать программу, которая введен с клавиатуры двумерный массив циклически сдвигает на k позиций
Помогите пожалуста написать программу, которая введен с клавиатуры двумерный массив циклически сдвигает на k позиций (k вводится с...

Напишите функцию , которая циклически сдвигает х вправо на 1 позицию
Тема Побитовые операторы Напишите функцию , которая циклически сдвигает х вправо на 1 позицию. При этом младший разряд ...

Элементы массива циклически сдвинуты на k позиций влево или вправо.
const n=100; var x:array of real; Элементы массива циклически сдвинуты на k позиций влево или вправо.


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

Или воспользуйтесь поиском по форуму:
26
Ответ Создать тему
Новые блоги и статьи
Программа для com-порта
Uhbif79 05.06.2026
Всем привет, давно хотел изучить Qt, начинал, бросал, потом снова начинал. И сейчас вот смог написать свою первую программу. До этого имел опыт программирования микроконтроллеров, писал прошивки на. . .
Транскрипция 55-минутного видео через Whisper: WhisperDesktop облажался, спас Google Colab[
anaschu 01.06.2026
Понадобилось получить текст из свежезагруженного видео на YouTube. Казалось бы, задача на пять минут. Заняла полтора часа. Делюсь опытом — может кому пригодится последовательность решений. . . .
21 мат мед. Планы на развитие модели здравоСохранения
anaschu 01.06.2026
AnyLogic: план развития симуляционной модели рабочего коллектива — динамический абсентеизм, реальные данные, три сценария сравнения Продолжаю серию постов о дискретно-событийной модели рабочего. . .
20. Мат мед. Абсентеизм как отдельный тип простоя
anaschu 29.05.2026
Апдейт модели: исправленные баги, абсентеизм и новые механизмы Продолжаю развивать ранее описанную модель рабочего коллектива на AnyLogic. За последние несколько дней был проведён серьёзный. . .
19. здоровье, усталость и психотип работника влияют на производительность предприятия, и наоборот, производительность на здоровье, усталось и психотип
anaschu 28.05.2026
Дискретно-событийная модель рабочего коллектива на AnyLogic: здоровье, выгорание, психотипы и микростимуляция Привет, коллеги. Хочу поделиться итогами нескольких недель работы над симуляционной. . .
"Прокси" для последовательного порта
Eddy_Em 28.05.2026
Эту штуку написал я достаточно давно. Но сейчас вот понадобилось настроить датчик грозы, но при этом не отключать его от "метеодемона". Соответственно, надо запустить этот "прокси": метеодемон будет. . .
Рефакторинг программы уравнивания.
Massaraksh7 26.05.2026
Пример по предыдущей записи в блоге. Но, надо заметить, что, во-первых, там оптимизация не только математики, но и работы с базой данных, и с графами, а во-вторых, это ещё не всё.
Использование TThread в Lazarus для математических вычислений.
Massaraksh7 25.05.2026
Производя рефакторинг своих программ на предмет ускорения их работы, обратил внимание на такой аспект, как сокращение времени матвычислений. Дело в том, что приходится работать с большими матрицами. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru