Как разбить одномерный массив строк пополам, или практически пополам - Pascal
Формулировка задачи:
Доброго времени суток друзья. Задался таким вопросом. Как мне разбить одномерный массив строк по полам. Или практически пополам,если массив не равномерный. Допустим в случае равного массива:
Исходный массив
A[1] = 'asd'
A[2] = 'axf'
A[3] = 'alr'
A[4] = 'rty'
Получилось два массива:
B = asd_axf
C = alr_rty
И как это сделать если массив не равномерный. Пишу программу для сортировки по методу Боуза Нельсона. Очень нужна реализация данной идеи.Помогите кто может.
Решение задачи: «Как разбить одномерный массив строк пополам, или практически пополам»
textual
Листинг программы
var
a, b, c: Array[Byte] Of String;
i, an, bn, cn: Byte;
begin
repeat
Write('Input n=');
ReadLn(an);
until (an > 0);
for i := 0 to an - 1 do
begin
Write('Input ', i + 1, ' string: '); ReadLn(a[i]);
end;
i := 0; bn := 0; cn := 0;
while (i < an div 2) do
begin
b[bn] := a[i]; Inc(bn);
Inc(cn); c[an div 2 - cn] := a[an - 1 - i];
Inc(i);
end;
if (Odd(an))
then
begin
b[bn] := a[an div 2];
Inc(bn);
end;
Write('Array A:');
for i := 0 to an - 1 do
Write(' | ', a[i]);
WriteLn(' |');
Write('Array B:');
for i := 0 to bn - 1 do
Write(' | ', b[i]);
WriteLn(' |');
Write('Array C:');
for i := 0 to cn - 1 do
Write(' | ', c[i]);
WriteLn(' |');
end.
Объяснение кода листинга программы
- Объявление переменных:
-
a,b,c- массивы строк -i,an,bn,cn- переменные типа Byte - Запрос ввода значения переменной
an(число элементов массива) до тех пор, пока введенное значение не будет больше нуля. - Заполнение массива
aстроками, введенными пользователем. - Инициализация переменных
i,bn,cnи запуск цикла, который разбивает массивaна массивыbиcпополам (примерно).- Копирование половины элементов из массива
aв массивbи аналогично копирование в массивc, если исходный массив имеет нечетное количество элементов.
- Копирование половины элементов из массива
- Вывод содержимого массивов
a,bиc. - Завершение программы.