Форум программистов, компьютерный форум, киберфорум
Pascal (Паскаль)
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.69/32: Рейтинг темы: голосов - 32, средняя оценка - 4.69
0 / 0 / 0
Регистрация: 04.12.2008
Сообщений: 12

Перемещение элементов внутри одномерного массива

12.12.2008, 11:50. Показов 6944. Ответов 10
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Задача. Требуется переместить несколько элементов внутри массива.
1. Есть одномерный массив из n ( =10 ) элементов, заполнен произвольно (цифры взяты по возрастанию для наглядности), например: 10 11 12 13 14 15 16 17 18 19
2. Требуется переметить в этом массиве m ( =2 ) элементов влево после k ( =4 ) элемента на p ( =3 ) шагов.

3. Было: 10 11 12 13 14 15 16 17 18 19

n=10 (число элементов в массиве)
k=4 (это номер элемента массива «число=13», после которого надо передвинуть два элемента влево),
m=2 (т. е. это два элемента массива-«числа 14 и 15» – которые надо передвинуть влево),
p=3 (передвинуть на 3 шага).

4. Результат должен быть такой: 10 14 15 хх хх хх хх хх хх хх

5. В этом примере количество элементов m=2, которое надо передвинуть, и количество позиций p=3, на которое надо передвинуть, взято небольшое, чтобы не загромождать пример.
Вопрос заключается в следующем: как лучше сделать, как правильнее:
А). Сначала первое число «14» переместить на 3 позиции, потом второе число переместить на 3 позиции … (если бы надо было большее число элементов перемещать, то таким же образом до самого последнего элемента) – И всё это организовать в цикле?
ИЛИ
Б). Переместить «число 14» на один шаг, затем «число 15» на один шаг, … и так перемещать оба числа 3 раза - в данном примере p=3 (если бы надо было переместить большее число раз, чем 3, то таким же образом до последнего шага)- И всё это тоже организовать в цикле?
ИЛИ
В). Есть что-то другое?
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
12.12.2008, 11:50
Ответы с готовыми решениями:

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

Найти min элемент одномерного массива описав процедуры ввода элементов массива, процедура нахождения min элемента массива.
Можете глянуть две задачки на pascale ? 1)Определить сумму элементов, массива целых чисел...

Вычислить S=P1-P2, где Р1-произведение элементов числового одномерного массива А, а Р2-произведение элементов массива В
Вычислить S=P1-P2, где Р1-произведение элементов числового одномерного массива А, а Р2-произведение...

10
 Аватар для GalaX
701 / 573 / 59
Регистрация: 18.11.2008
Сообщений: 2,147
12.12.2008, 13:24
имхо лучше по пункту А:
Pascal
1
2
3
4
5
6
7
8
9
10
11
12
a := array(10, 11, 12, 13, 14, 15, 16, 17, 18, 19);
n := 10;
k := 4;
m := 2;
p := 3;
 
for i:=k+1 to i<=k+m do begin
    tmp = a[i-p];
    a[i-p] = a[i];
    a[i] = tmp;
    inc(i);
end;
0
0 / 0 / 0
Регистрация: 04.12.2008
Сообщений: 12
12.12.2008, 14:39  [ТС]
GalaX! Я поняла, что первый алгоритм предпочтительнее. В Вашем «коде» : числа «14» и «15» передвинуты на 3 шага влево, но Вы же еще поставили числа «11» и «12» на те места, с которых ушли «14» и «15», т. е. поменяли их местами.

Было: 10 11 12 13 14 15 16 17 18 19
Стало: 10 14 15 13 11 12 16 17 18 19

Вопрос. Когда требуется ПЕРЕМЕСТИТЬ, то надо только:
1).
Было: 10 11 12 13 14 15 16 17 18 19
Стало: 10 14 15 13 14 15 16 17 18 19, т. е. нас не должно заботить то, что остается на тех местах, с которых мы сдвигаем элементы массива?
ИЛИ
2).
Было: 10 11 12 13 14 15 16 17 18 19
Стало: 10 14 15 13 11 12 16 17 18 19, т. е. надо поставить «11» и «12» на те места, с которых ушли «14» и «15»?
0
 Аватар для GalaX
701 / 573 / 59
Регистрация: 18.11.2008
Сообщений: 2,147
13.12.2008, 09:49
не совсем понял вопроса... помоему этот вопрос нужно спрашивать у тебя... как тебе надо?
вообщем:

если надо так "10 14 15 13 11 12 16 17 18 19":
Pascal
1
2
3
4
5
for i:=k+1 to i<=k+m do begin
    tmp = a[i-p];
    a[i-p] = a[i];
    a[i] = tmp;
end;
если надо так "10 14 15 13 14 15 16 17 18 19":
Pascal
1
2
3
for i:=k+1 to i<=k+m do begin
    a[i-p] = a[i];
end;
т.е. просто убираем пару строчек
0
0 / 0 / 0
Регистрация: 04.12.2008
Сообщений: 12
15.12.2008, 11:10  [ТС]
С перестановкой «11 и 12» понятно, а вот с оператором «for» - не очень! Ведь условия работы оператора «for»: «ОТ» и «ДО» – должны быть конкретные значения, а не в виде условия (больше, меньше, …), как «i<=k+m», так я поняла, когда разбиралась с операторами. А вот в операторах «while», «if» «ДО» какого значения будет работать оператор – может быть задан в виде условия. Или я что-то не так уяснила?
0
 Аватар для GalaX
701 / 573 / 59
Регистрация: 18.11.2008
Сообщений: 2,147
15.12.2008, 11:20
ой, точно
я чет запутался немного, в паскале в for ведь действительно не должно быть условия...
тогда получается так должно быть:
for i:=k+1 to k+m do begin
0
0 / 0 / 0
Регистрация: 04.12.2008
Сообщений: 12
15.12.2008, 11:37  [ТС]
А вот так я делала, и у меня перемещается только один элемент, а именно «14», а вот «15» на новом месте НЕТ.
Было: 10 11 12 13 14 15 16 17 18 19
Стало: 10 14 «12» 13 14 15 16 17 18 19
И не могу понять почему?
0
 Аватар для GalaX
701 / 573 / 59
Регистрация: 18.11.2008
Сообщений: 2,147
15.12.2008, 11:57
тогда попробуй так:
for i:=k+1 to k+m+1 do begin
0
0 / 0 / 0
Регистрация: 04.12.2008
Сообщений: 12
15.12.2008, 13:32  [ТС]
Так "k+m+1" - тоже пробовала, результат тот же! Первое число встает куда надо, а второе НЕТ. Где-то у меня что-то запирается - орератор отрабатывает только один раз и запрещает перенос второго числа. Это маленький кусочек из другой задачки. Если вечером сегодня не найду в чем дело. То большая просьба (я завтра выложу весь листинг) - посмортеть его.
0
 Аватар для GalaX
701 / 573 / 59
Регистрация: 18.11.2008
Сообщений: 2,147
15.12.2008, 18:27
Цитата Сообщение от GAS Посмотреть сообщение
То большая просьба (я завтра выложу весь листинг) - посмортеть его.
ок... если что - ложи...
0
0 / 0 / 0
Регистрация: 04.12.2008
Сообщений: 12
16.12.2008, 14:05  [ТС]
Это был кусочек - часть другой задачки. Я обозначу ее целиком, поэтому открою на форуме, как новую тему.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
16.12.2008, 14:05
Помогаю со студенческими работами здесь

Количество элементов одномерного массива меньших, чем среднее арифметическое значение всех элементов массива
Нужно написать программу и блок-схему к ней. Алгоритм поиска количества элементов одномерного...

Формирование одномерного массива по заданному условию внутри процедуры
Задача: Функция F(x) определена с помощью ряда F(x)=\sum_{n=1}^{\infty}(x^n)/(n^3). Из заданного...

Составьте программу вычисления суммы тех элементов одномерного массива A(N), что расположены перед первым нулевым элементом данного массива.
Составьте программу вычисления суммы тех элементов одномерного массива A(N), что расположены перед...

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

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


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

Или воспользуйтесь поиском по форуму:
11
Ответ Создать тему
Новые блоги и статьи
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка.
Programma_Boinc 23.12.2025
Рецензия / Мнение/ Перевод Ниже машинный перевод статьи The Thinkpad X220 Tablet is the best budget school laptop period . Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы,. . .
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Как объединить две одинаковые БД Access с разными данными
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru