- •Стандартные операции над одномерными массивами
- •Перестановка двух элементов
- •Вставка нового элемента в указанное место массива
- •Удаление элемента из указанного места массива
- •Пример обработки одномерного массива c перестановкой элементов
- •Процедура обработки щелчка на кнопке «Вычисление» (кн. Button_calc)
- •Глобальные объявления
- •Процедура обработки щелчка на кнопке «Этап 1» (кн. Button_etap1)
- •Процедура обработки щелчка на кнопке «Этап 2» (кн. Button_etap2)
- •Процедура обработки щелчка на кнопке «Очистка» (кн. Button_clear)
Удаление элемента из указанного места массива
Задача. Удалить элемент из k-ой позиции массива A.
|
|
|
|
|
|
|
|
|
|
|
Номер эл-та |
1 |
2 |
… |
k |
k+1 |
k+2 |
… |
n-1 |
n |
|
Массив А |
2 |
5 |
… |
|
… |
7 |
… |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// сдвигаем массив, начиная с k+1-го элемента, влево на 1 позицию
for i:=k to n-1 do
A[i]:=A[i+1];
n:=n-1; // уменьшаем размерность массива А на 1
Пример обработки одномерного массива c перестановкой элементов
Задача 1. Записать все элементы массива A=(A1, A2, ..., An), удовлетворяющие условию Ai>Q, подряд в массив B. Найти количество (k) и сумму (S) таких элементов. Если таких элементов нет, то выдать соответствующее сообщение.
Исходные данные: массив А, Q,n.
Выходные данные: массив B, k, S.
Блок-схема алгоритма представлена на рисунке 10.1.
Алгоритм включает следующие действия:
ввод массива A;
поиск элементов Ai>Q и подсчет суммы S и количества k таких элементов;
Опишем алгоритм подробнее.
Ввод массива. Для работы с одномерным массивом A сначала введем его размерность (n), т.е. количество элементов массива. Затем для ввода всех элементов массива организуем цикл по номеру элемента i. В этом цикле введем очередной элемент Ai.
Поиск элементов Ai>Q, подсчет S, k. Для подсчета указанных величин используем цикл по индексу элементов массива A, организованный для ввода массива. Перед циклом величинам S, k присвоим начальное значение 0. Внутри цикла проверим условие: Ai>Q. Если условие выполняется, то методом накапливания вычислим S и k.
С
компонуем
форму, показанную слева. Для ввода
массива А будем использовать многострочное
окно редактирования Memo_А, а для вывода
массива В – Memo_В (компонент
на странице Standard). Все кнопки на
форме, а также объекты Edit, связанные с
вводом/выводом данных, переименованы
понятным образом (т.е. изменено их
свойство Name).
Процедура обработки щелчка на кнопке Очистка аналогична предыдущим примерам, и мы её описывать не будем.
Процедура обработки щелчка на кнопке «Вычисление» (кн. Button_calc)
procedure TForm1.Button_calcClick(Sender: TObject);
type mas=array[1..10] of real;
var A,B:mas;
Q,S:real;
i,k,N:integer;
begin
Q:=StrToFloat(Edit_Q.Text);
N:=Memo_A.Lines.Count; // размерность А
k:=0; S:=0;
for i:=1 to N do
begin
A[i]:=StrToFloat(Memo_A.Lines[i-1]);
if A[i]>Q then
begin
k:=k+1;
B[k]:=A[i];
S:=S+B[k];
Memo_B.Lines.Add(FormatFloat('000.0',B[k]))
end;
end;
If k=0 then ShowMessage('Массив А не содержит элементов >'
+FloatToStr(Q))
else
begin
Edit_k.Text:=IntToStr(k);
Edit_S.Text:=FloatToStr(S)
end
end;
Задача 2.
Для вещественного массива Х=(X1, X2, ..., Хn) найти сумму S и число k тех его элементов, которые попадают в заданный отрезок [A,B]; удалить из массива последний такой элемент. Если таких элементов нет, то выдать соответствующее сообщение.
Отсортировать массив Х по возрастанию и найти среднее значение С четырех наибольших его элементов. Заменить каждый второй элемент массива Х на С.
Входные данные: Массив Х=(X1, X2, ..., XN), A, B.
Выходные данные: S, k, С; массив Х после удаления последнего его элемента, принадлежащего интервалу [A,B]; отсортированный массив Х и массив Х после замены каждого второго элемента на С.
Разобьем решение задачи в соответствии с заданием на два этапа.
Алгоритм первого этапа включает следующие действия:
ввод массива Х;
поиск элементов Xi[A,B], подсчет суммы S и количества k таких элементов; запоминание местоположения i0 очередного такого элемента;
удаление из массива Х элемента с наибольшим номером i0 и вывод массива на экран.
Алгоритм второго этапа содержит такие шаги:
сортировка полученного массива Х и вывод его на экран;
вычисление С как среднего значения последних четырех элементов;
преобразование массива Х путем замены каждого второго элемента на значение С и вывод его на экран.
Опишем подробнее оба алгоритма.
Ввод массива. Для работы с одномерным массивом Х сначала введем его размерность (N), т.е. количество элементов массива. Затем для ввода всех элеметов массива организуем цикл по номеру элемента i. В этом цикле введем очередной элемент Xi.
Поиск элементов Xi[A,B], подсчет S, k, i0. Для подсчета указанных величин используем цикл по индексу элементов массива Х, организованный для ввода массива. Перед циклом величинам S, k присвоим начальное значение 0. Внутри цикла проверим условие: (X[i]>=A и X[i]<=B). Если условие выполняется, то методом накапливания вычислим S и k, а в переменной i0 запомним местоположение найденного элемента.
Удаление элемента с номером i0 из массива Х. Удаление элемента осуществим в цикле, сдвинув на одну позицию влево элементы массива, начиная от хi0+1 до хn, и разместив их на позициях с номерами от i0 по n-1. Затем размерность массива уменьшим на 1.
Сортировка полученного массива Х. На 1-ом шаге ищем наименьшее значение среди элементов с 1-го по N-ый, и найденный элемент меняем местами с 1-ым. На 2-ом шаге ищем наименьшее значение среди элементов со 2-го по N-ый, и найденный элемент меняем местами со 2-ым. На i-ом шаге ищем наименьшее значение среди элементов с i-го по N-ый, и найденный элемент меняем местами с i -ым. Таким образом, сортировка осуществляется за N-1 шаг (цикл по i), причем на каждом шаге ищется минимальный элемент и его номер (цикл по j), а затем найденный минимальный элемент меняется местами с i-м элементом массива.
Вычисление С как среднего значения последних четырех элементов: С=(XN-3+ XN-2+ XN-1+ XN)/4.
Преобразование массива Х путем замены каждого второго элемента на значение С. Для этого организуем цикл по i= 1,2, …, [n/2], где [n/2] - наибольшее целое, не првосходящее n/2. Внутри цикла выполняем преобразование X2*i =С.
Алгоритмы первого и второго этапов представлены на рисунках 10.2, 10.3.
Да
C=
(XN+
XN-1+
XN-2+
XN-3)
/ 4
Скомпонуем следующую форму и настроим ее свойства.
Исходная форма после переименования Форма с результатами
объектов
