
- •1 Основные определения. Размерность и описание массивов, индексирование их элементов
- •2 Ввод и вывод массивов
- •2.1 Ввод массивов
- •2.2 Создание пробных, отладочных массивов
- •2.3 Вывод одномерных массивов
- •2.4 Вывод матриц
- •3 Вычисление массива значений функции
- •4 Суммирование и перемножение элементов массивов
- •5 Типовые задачи обработки массивов
- •5.1 Задачи выборок
- •5.2 Преобразование одних массивов в другие
- •5.3 Выбор наименьших и наибольших элементов в массивах
- •5.4 Вычисление статистических характеристик массивов
- •6 Некоторые задачи работы с матрицами
- •7 Контрольные вопросы и упражнения
- •8 Задания для самостоятельной работы
- •9 Список рекомендуемой литературы
5.3 Выбор наименьших и наибольших элементов в массивах
Задачи этого типа постоянно встречаются в математической статистике, а также в различных технических и экономических расчетах.
Пример 5.6 В массиве экспериментальных данных t с числом элементов n, найти наименьшее значение min и определить его порядковый номер k в этом массиве.
Алгоритм решения этой задачи состоит в следующем. Первоначально принимаем за наименьший первый элемент массива, т.е. полагаем min=t1 и k=1. Затем сравниваем с ним каждый очередной элемент, начиная со 2–го. Если очередной элемент ti min, пропускаем его и берем для проверки следующий, если же ti <min, то за наименьший принимаем этот элемент, т.е. делаем переименовку : min=ti , k=i. Продолжаем сравнивать следующие элементы массива t уже с этим новым значением min. Если встречается число еще меньше, снова производим переименовку : min=ti , k=i и т.д. Последнее значение min после окончания просмотра всего массива и будет наименьшим его элементом, а значение k определит его порядковый номер в массиве.
Соответствующий фрагмент программы в предположении, что массив t находится в памяти ЭВМ, может иметь вид :
min:=t[1];
k:=1;
for i:=1 to n do
begin
if t[i]<=min then
begin
min:=t[i]; k:=i;
end;
end;
writeln(min,k);
{ продолжение программы }
Очевидно, если знак <= в операторе if заменить на >=, то получим фрагмент программы определяющей наибольший элемент массива. В этом случае, разумеется, логично заменить имя min на max. Если нас интересует лишь сама величина наименьшего или наибольшего элемента, а его место в массиве безразлично, то приведенный фрагмент упрощается удалением оператора k:=i.
Возможно в одном цикле одновременно определять наименьший и наибольший элементы. Покажем это на примере двумерного массива.
Пример 5.7. В матрице X(m n) найти наименьший элемент min и наибольший max и определить индексы каждого из них. Если обозначить индексы наименьшего и наибольшего элементов матрицы соответственно k1 ,l1 и k2 ,l2 , то задача может быть решена следующим фрагментом :
k1:=1; l1:=1; k2:=1; l2:=1; min:=X[1,1]; max:=X[1,1];
for i:=1 to m do
begin
for j:=1 to n do
begin
if X[i,j]<min then
begin
min:=X[i,j]; k1:=i; l1=j;
end
else if X[i,j]>max then
begin
max:=X[i,j]; k2:=i; l2:=j;
end
end;
end;
writeln('min=',min,' i=',k1,' j=',l1);
writeln('max=',max,' i=',k2,' j=',l2);
5.4 Вычисление статистических характеристик массивов
В практике массивами чаще всего представлены результаты каких–либо экспериментов или данные статистической отчетности предприятий. В таких случаях типовыми задачами обработки массивов являются вычисления их так называемых статистических характеристик. Важнейшими и наиболее употребительными из этих характеристик являются: среднее арифметическое, дисперсия и среднеквадратичное отклонение. Для массива xi (i = 1..n) эти величины вычисляются соответственно по формулам :
Как следует из этих выражений, основной объем работы при определении этих величин, связан с вычислением двух сумм :
и поэтому фрагмент программы вычисления указанных статистических характеристик, обозначенных соответственно xsr, dis, sko, может быть следующим :
s1:=0; s2:=0;
for i:=1 to n do
begin
s1:=s1+x[i];
s2:=s2+s2+sqr(x[i]);
end;
xsr:=s1/n; dis:=(s2/n–sqr(xsr))*n/(n–1); sko:=sqrt(dis);
writeln; write('xsr=',xsr,' dis=',dis,' sko=',sko);
Кроме среднего арифметического иногда используются еще три вида средних величин, вычисляемых по формулам:
среднее квадратическое (оно не равно среднеквадратическому отклонению)
;
среднее геометрическое
;
среднее гармоническое
.
Вычисление этих величин сводится в конечном итоге к вычислению соответствующих сумм и произведения и не представляет труда.