| Тема. Алгоритмы обработки табличных величин.
Продолжаем рассматривать некоторые типичные задачи обработки табличных величин:
- вычисления суммы значений всех ее элементов;
- вычисления суммы и количества значений элементов, отвечающих определенным условиям
- нахождения наибольшего и наименьшего элементов
- поиск заданного элемента
Задачи на нахождение суммы (произведения) элементов
|
1. Найти произведение всех элементов массива А [1..N].
Р: = 1;
For i: = 1 to N do P:= Р * А [i];
|
2. Найти сумму положительных элементов массива A [1..N].
S: = 0;
For i: = 1 to N do If A [i]> 0 Then S = S + A [i];
|
Такие задачи достаточно часто решают на практике. Приведем лишь несколько примеров.
- Так, синоптики определяют,
- Наибольшую, наименьшую и среднюю температуру за день
- Среднее количество осадков в течение месяца
- В процессе определения победителей в некоторых соревнованиях отвергают наибольшее и наименьшее оценки судей и вычисляют среднее арифметическое тех оценок, которые остались.
- Администрацию вашего учебного заведения может интересовать, сколько учеников 9-х классов имеют семестровые оценки по информатике: 10, 11. 12
- Есть ли в вашем классе ученики, получившие оценку 8 за последние практическую работу, и т.
Во всех задачах, которые рассмотрим в этом пункте, будем вводить:
- значения элементов табличной величины с многострочного текстового поля,
- значения других переменных - из текстовых полей.
Если результатом является значение элементов табличной величины
то выводить их в многострочное текстовое поле
Если результатом является значение других переменных
то выводить их в надписи
Пример 6. Определить сумму значений всех элементов табличной величины.
Анализ решения:
- Разработка элементов табличной величины будет осуществляться с использованием цикла.
- Используем переменную s для накопления суммы значений элементов табличной величины. Перед циклом предоставим ей значение 0
- В цикле последовательно пересматривать элементы табличной величины и добавлять их значения к переменной s.
Алгоритм проекта
Интерфейс проекта
 |
Программный код
procedure TForm1.Button1Click(Sender: TObject);
var a: array[0..9] of real; i:integer; s: real;
begin
Randomize; s:=0;
for i:= 0 to 9 do
begin
memo1.Lines[i]:=floattostr(random(20)-9.5); // визуализация массива, заполняем строки поля memo1
a[i] := strtofloat(memo1.Lines[i]); { данные из строк поля memo1 перевести в числа и присвоить соответствующим элементам массива }
s:=s + a[i]; // накапливаем сумму значений элементов массива
end;
label1.caption:='summa = ' + floattostr(s);
end;
procedure TForm1.Button2Click(Sender: TObject);
begin
memo1.Clear; // очистить поле memo1
label1.caption:=' ' ;
end;
procedure TForm1.Button3Click(Sender: TObject);
begin
form1.Close;
end;
|
Пример 7. Многострочное поле memo1 содержит действительные числа. Известно, что их количество не превышает 20. Ввести эти числа как значения элементов массива . Определить сумму и количества положительных элементов массива, среднее арифметическое суммы значений этих элементов. Вывести значение этих элементов в многострочное текстовое поле memo2.
- Поскольку по условию количество элементов может быть каждый раз произвольным, но не превышающим 20, в строке var объявляем размерность массива [0..19].
- Для определения реального количества элементов для каждого такого ввода (свойству readonly поля memo1 присвоить значение false) воспользуемся свойством memo1.lines.count, определяющем количество заполненных строк поля.
Интерфейс проекта


|
Программный код
procedure TForm1.Button1Click(Sender: TObject);
Var a:array[0..19] of real; i, k,n: integer; z,s: real;
begin
n:= memo1.lines.count;
s:= 0; k:=0;
for i := 0 to n-1 do
begin
a[i] := strtofloat(memo1.lines[i]);
if a[i] > 0 then begin s:= s + a[i]; k:= k+1; memo2.lines.append(floattostr(a[i]));end;
end;
z:= s/k;
edit1.text := floattostr(s);
edit2.text := inttostr(k);
edit3.text := floattostrF(z,ffgeneral,6,3);
end;
procedure TForm1.Button2Click(Sender: TObject);
begin
edit1.text :='';
edit2.text :='';
edit3.text :='';
memo2.clear;
end;
|
Пример 8. Найти наибольшее значение элементов линейного массива.
Алгоритм задания

|
Описание программы поиска элемента с наибольшим или наименьшим значением
Элементы табличной величины записанные в памяти, доступ к ячейкам которой осуществляется по номерам элементов.
Исполнитель может одновременно открывать доступ к одной ячейки.
Выполним такой алгоритм:
1. прочитаем из памяти первый элемент таблицы, запомним его как максимальное - предоставим его значение величине max;
2. затем последовательно считываем очередной элемент таблицы
- если его значение больше max, «забудем» о предыдущее значение и запомним значение уже этого элемента как max ;
- если его значение меньше max, приступать к следующему шагу без изменения значения max .
Поиск наименьшего элемента массива осуществляется по аналогичному алгоритму, находя в соответствии элемент (min), который меньше всех просмотренных элементов.
|
procedure TForm1.Button2Click(Sender: TObject);
begin
label2.caption:= '';memo1.Clear
;end;
|
procedure TForm1.Button2Click(Sender: TObject);
var a:array[1..10] of real; i: integer; max: real;
begin
randomize;
for i:= 1 to 10 do
begin
a[i]:= random(60) + 0.5; // формируем массив
memo1.lines[i] := 'a['+inttostr(i) + ' ]= '+ floattostr(a[i]); //вывод элементов массива построчно в многострочное поле
end;
max:=a[1]; //первый элемент массива считаем максимальным
for i:= 2 to 10 do
if a[i]> max //сравниваем очередной элемент массива с наибольшим на данный момент then max:= a[i]; //меняем значение наибольшего элемента
label2.caption:= floattostr(max);
end;
|
Табличная форма отображения массива
| |