.RU
Карта сайта

Задача 2

Задача 2.



  1. Для вещественного массива Х=(X1, X2, ..., Хn) найти сумму S и число k тех его элементов, которые попадают в заданный отрезок [A,B]; удалить из массива последний такой элемент. Если таких элементов нет, то выдать соответствующее сообщение.

  2. Отсортировать массив Х по возрастанию и найти среднее значение С четырех наибольших его элементов. Заменить каждый второй элемент массива Х на С.

Входные данные:

Массив Х=(X1, X2, ..., XN), A, B.

Выходные данные:

S, k, С; массив Х после удаления последнего его элемента, принадлежащего интервалу [A,B]; отсортированный массив Х и массив Х после замены каждого второго элемента на С.
Разобьем решение задачи в соответствии с заданием на два этапа.
Алгоритм

первого этапа

включает следующие действия:

Алгоритм

второго этапа

содержит такие шаги:

Опишем подробнее оба алгоритма.

^ Ввод массива.

Для работы с одномерным массивом Х сначала введем его размерность (N), т.е. количество элементов массива. Затем для ввода всех элеметов массива организуем цикл по номеру элемента i. В этом цикле введем очередной элемент Xi.

Поиск элементов X

i

[A,B], подсчет S, k, i

0.

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

S, k

присвоим начальное значение 0. Внутри цикла проверим условие: (X[i]>=A и X[i]<=B). Если условие выполняется, то методом накапливания вычислим

S

и

k

,

а

в переменной

i

0

запомним местоположение найденного элемента

.


Удаление элемента с номером i

0

из массива Х.

Удаление элемента осуществим в цикле, сдвинув на одну позицию влево элементы массива, начиная от х

i

0

+1

до

х

n

,

и разместив их на позициях с номерами от

i

0

по

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

Скомпонуем следующую форму и настроим ее свойства.

Исходная форма после переименования Форма с результатами
объектов

  1. Глобальные объявления



implementation


type mas=array[1..10] of real;
var X:mas;
N:integer;

  1. Процедура обработки щелчка на кнопке «Этап 1» (кн. Button_etap1)



procedure TForm1.Button_etap1Click(Sender: TObject);
Var
A,B,S:real;
i,i0,k:integer;
begin
A:=StrToFloat(Edit_A.Text);
B:=StrToFloat(Edit_B.Text);
N:=Memo_X.Lines.Count; // размерность X
k:=0; S:=0;
for i:=1 to N do
begin
X[i]:=StrToFloat(Memo_X.Lines[i-1]);
if (X[i]>=A) and (X[i]<=B) then
begin
k:=k+1;
S:=S+X[i];
i0:=i; // номер последнего элемента из интервала [A,B]
end;
end;
If (k=0) then
ShowMessage('Массив X не содержит элементов из интервала ['+
FloatToStr(A) + ',' + FloatToStr(B)+']')
else
begin
Edit_k.Text:=IntToStr(k);
Edit_S.Text:=FloatToStr(S);
for i:=i0 to N-1 do
X[i]:=X[i+1];
N:=N-1;
// вывод в поле Memo_X1 массива Х после удаления эл-та
for i:=1 to N do
Memo_X1.Lines.Add(FormatFloat('##0.0',X[i]))
end
end;

  1. Процедура обработки щелчка на кнопке «Этап 2» (кн. Button_etap2)



procedure TForm1.Button_etap2Click(Sender: TObject);
Var
C,min:real;
i,j,nmin:integer;
begin
for i:=1 to N-1 do
begin
min:=X[i]; nmin:=i;
for j:=i+1 to N do
if (X[j]begin
min:=X[j]; nmin:=j; //минимальный эл-т и его номер
end; // for j
X[nmin]:= X[i]; // перестановка элементов
X[i]:= min;
// вывод отсортированного массива Х в поле Memo_X2
Memo_X2.Lines.Add(FormatFloat('##0.0',X[i]))
end; //for i
//вывод последнего(N-го)эл-та
Memo_X2.Lines.Add(FormatFloat('##0.0',X[N]));
C:=(X[N]+X[N-1]+X[N-2]+X[N-3])/4;
Edit_C.Text:=FloatToStr(C);
i:=1;
while (i<=N) do
begin
if (i mod 2 =0) then X[i]:=C;
// вывод в поле Memo_X3 массива Х после его преобразования
Memo_X3.Lines.Add(FormatFloat('##0.0',X[i]));
i:=i+1
end;
end;

  1. Процедура обработки щелчка на кнопке «Очистка» (кн. Button_clear)



procedure TForm1.Button_clearClick(Sender: TObject);
begin
Edit_A.Clear ;
Edit_B.Clear ;
Edit_k.Clear ;
Edit_S.Clear ;
Memo_X.Clear ;
Edit_C.Clear ;
Memo_X1.Clear ;
Memo_X2.Clear ;
Memo_X3.Clear ;
end; 2014-07-19 18:44
  • Контрольная работа
  • Контрольная работа
  • Контрольная работа
  • Контрольная работа
  • Контрольная работа
  • Контрольная работа
  • Контрольная работа
  • Контрольная работа
  • Контрольная работа
  • Контрольная работа
  • Контрольная работа
  • Контрольная работа
  • Контрольная работа
  • Контрольная работа
  • Контрольная работа
  • Контрольная работа
  • Контрольная работа
  • Контрольная работа
  • Контрольная работа
  • Контрольная работа
  • Контрольная работа
  • Контрольная работа
  • Контрольная работа
  • Контрольная работа
  • Контрольная работа
  • © sanaalar.ru
    Образовательные документы для студентов.