ВУЗ: Не указан
Категория: Не указан
Дисциплина: Не указана
Добавлен: 10.07.2024
Просмотров: 138
Скачиваний: 0
промежуточного минимума, тогда переходим к анализу очередного элемента последова- тельности (массива) без каких либо изменений;
ПРИМЕЧАНИЕ. Перебор элементов последовательности начинаем с первого элемента, в силу особенностей использования вложенных операторов цикла. Если начинать перебирать элементы, используя параметр цикла равный двум, тогда мы «потеряем» часть элементов первой строки или столбца.
∙Выводим найденный результат на экран и завершаем работу программы.
Блок схема для решения задачи выглядит следующим образом:
При реализации этой схемы на алгоритмическом языке Паскаль учтем следующие обстоятельства:
∙ Во-первых, все переменные должны быть описаны. Для описания массива необходимо будет указать его размерность (число элементов). Но оно заранее не известно, поскольку будет введено пользователем в ответ на запрос о размерности массива. Однако указать неизвестное число эле- ментов массива при его описании невозможно. Для решения этой проблемы поступим так. В раз- деле описаний констант опишем константу k, имеющую смысл размерности нашего массива (числа элементов последовательности), приняв ее значение равным 100. Таким образом, мы как бы резервируем пространство памяти, отведенное для хранения массивов. Значение константы k можно взять любым, достаточно большим значением, обеспечивающим работу с реальными мас- сивами компонент исходных векторов. Поскольку регулярный тип массив не относится к стан- дартным типам данных, в разделе описания типов вводим тип с именем matr, определив его как двумерный массив размерности k на k элементов. Затем в разделе описаний переменных введем переменную x – типа matr в качестве массива компонент исходной матрицы, i и j – целого типа, в качестве вспомогательных переменных, параметров цикла обеспечивающих возможность по- элементного перебора элементов матрицы. Перемененные n и m– целого типа, имеющие смысл реального значения размерности массива (числа строк и столбцов матрицы). Кроме того, понадо- бятся вспомогательные переменные max и min – вещественного типа, в качестве промежуточных
- 38 -
максимума и минимума из элементов матрицы, а также целые переменные imax. jmax, imin, jmin для определения индексов максимального и минимального элементов матрицы.
ПРИМЕЧАНИЯ.
1.Константа k обеспечивает возможность правильно описать массив. Если ее не определить, тогда необходимо при описании массива использовать жесткое указание на число его компонент, напрямую указав значение 100. Но в этом случае размерность массива будет жестко определена и придется вводить все сто элементов без возможности работать с произвольной размерностью.
2.Описать нестандартную переменную типа массив можно и не вводя раздел описания типов и не указывая тип matr. Синтаксис языка Паскаль допускает описание переменной путем указания не имени ее типа, а с указанием описания типа. Например:
var x : array[1..k,1..k] of real;
∙Во-вторых, поскольку число шагов, которые необходимо будет сделать для перебора всех эле- ментов массива и в процессе ввода и в процессе его обработки заранее известно, воспользуемся оператором цикла с параметром. Используя переменную i в качестве параметра внешнего цикла (обеспечивая перебор элементов матрицы по строкам) и переменную j в качестве параметра внутреннего цикла (обеспечивая перебор элементов матрицы по столбцам). Однако еще раз заме- тим, что конечным значением параметров цикла будет не значение k (вспомогательное значение, используемое при описании массива), а значение n и m (реальная размерность массива, где n – число строк в матрице, m – число столбцов матрицы);
∙В-третьих, при вводе элементов массива организуем «диалог» с помощью сочетания операто- ров вывода и ввода, применяя операторные скобки, поскольку в операторе цикла с параметром
может быть использован только один оператор языка Паскаль.
∙ В-четвертых, до начала цикла по перебору элементов матрицы для поиска максимального и минимального элементов и их индексов необходимо определить начальные значения перемен- ных max, min, imax. jmax, imin, jmin, выбрав на роль такого элемента первый элемент
max:=х[1,1]; imax:=1; jmax:=1; min:=х[1,1]; imin:=1; jmin:=1;
С учетом этих особенностей реализация алгоритма на языке Паскаль выглядит так:
program PR2 (input, output); uses crt;
const k=100;
type matr= array[1..k,1..k] of real; var x: matr;
max,min: real; i,j,n,m,imax,imin,jmax,jmin: integer;
begin
clrscr;
writeln(‘Введи число строк матрицы, n=‘); readln(n); writeln(‘Введи число столбцов матрицы, m=‘); readln(m); writeln(‘Введи массив по строкам’);
for i:=1 to n do begin for j:=1 to m do begin
write (‘х[‘,i,’,’,j,’]= ‘);readln(х[i,j]); end; writeln; end; max:=x[1,1]; imax:=1; jmax:=1;
min:=x[1,1]; imin:=1; jmin:=1; for i:=1 to n do begin
- 39 -
{Заголовок программы} {Подключение модуля} {Описание константы} {Описание типа массив}
{Описание переменных}
{Начало программы} {Процедура очистки экрана}
{Ввод размерности массива}
{Вывод пояснений к программе} {Заголовок внешнего цикла} {Заголовок внутреннего цикла} {Ввод элементов массива}
{Установка начальных значений}
{Заголовок внешнего цикла}
for j:=1 to m do begin |
|
|
{Заголовок внутреннего цикла} |
||||
|
if max<x[i,j] then begin |
|
|
{Проверка элемента на условие максимума} |
|||
|
|
|
|
|
{Переопределение максимального элемента} |
||
max:=x[i,j]; imax:=i; jmax:=j; end; |
|
|
|||||
if min>x[i,j] then begin |
|
|
{Проверка элемента на условие минимума} |
||||
min:=x[i,j]; imin:=i; jmin:=j; end; |
|
|
{Переопределение минимального элемента} |
||||
end; end; |
|
|
{Закрытие операторных скобок} |
||||
writeln(‘Максимальный элемент -’,max, ‘ |
его индексы -’,imax,’ |
, ‘, jmax); |
{Вывод результата на экран} |
||||
writeln(‘Минимальный элемент -’,min, ‘ |
его индексы -’,imin,’ , |
‘, jmin); |
|
||||
{Процедура «задержки» экрана } |
|||||||
repeat until keypressed; |
|
|
|||||
end. |
|
|
{Конец программы} |
Пример 7. Дана матрица n×m. Найти число элементов этой матрицы, не превосходящих среднего
арифметического
Решение.
Для решения задачи образуем из элементов матрицы двумерный массив. Решение будем проводить по следующей схеме:
∙Необходимо ввести реальную размерность массива;
∙Необходимо поэлементно ввести элементы матрицы (массива);
∙Перебираем поэлементно массив, накапливая из них сумму;
Замечание. В данной задаче можно совместить в одном действии ввод элемента массива и накопление суммы его элементов, поскольку при пошаговом выполнении тела операторов цикла сначала будет введена первая компонента матрицы и ее можно будет сразу добавить в накапливаемую сумму. На втором шаге будут введена вторая компонента, и она будет добавлена к сумме, в которой находится первая компонента матрицы. На третьем шаге соответствующие действия будут выполнены над третьей компонентой матриц, и в сумме окажется накоплена сумма из первых трех компонент. И так далее до последней компоненты. Однако следует учесть, что сумма должна быть определена до начала циклов по вводу элементов матрицы,
ееначальное значение принять равным нулю, для обеспечения правильности расчетов.
∙Рассчитываем среднее арифметическое элементов матрицы, разделив накопленную сумму элементов на количество элементов в матрице;
∙«Зануляем» счетчик элементов;
∙Вновь перебираем поэлементно массив, сравнивая каждое очередное значение со значени- ем среднего арифметического. Если очередной элемент не превосходит значение среднего арифметического, тогда счетчик элементов увеличиваем на единицу. Если очередной эле- мент превосходит значение промежуточного минимума, тогда переходим к анализу оче- редного элемента последовательности (массива) без каких либо изменений;
∙Выводим найденный результат на экран и завершаем работу программы.
Блок схема для решения задачи, с учетом замечания, выглядит следующим образом:
- 40 -
При реализации этой схемы на алгоритмическом языке Паскаль учтем следующие обстоятельства:
∙ Во-первых, все переменные должны быть описаны. В разделе описаний констант опишем кон- станту t, имеющую смысл размерности нашего массива (числа элементов последовательности), приняв ее значение равным 100. Поскольку регулярный тип массив не относится к стандартным типам данных, в разделе описания типов вводим тип с именем matr, определив его как двумер- ный массив размерности t на t элементов. Затем в разделе описаний переменных введем пере- менную x – типа matr в качестве массива компонент исходной матрицы, i и j – целого типа, в качестве вспомогательных переменных, параметров цикла обеспечивающих возможность поэле- ментного перебора элементов матрицы, а также, переменную k – целого типа в качестве счетчика количества элементов матрицы не превосходящих среднего арифметического значения. Переме- ненные n и m– целого типа, имеющие смысл реального значения размерности массива (числа строк и столбцов матрицы). Кроме того, понадобятся вспомогательные переменная S– вещест- венного типа, в качестве среднего арифметического значения элементов матрицы.
ПРИМЕЧАНИЕ.
Описать нестандартную переменную типа массив можно и не вводя раздел описания типов и не указывая тип matr. Синтаксис языка Паскаль допускает описание переменной путем указания не имени ее типа, а с указанием описания типа. Например:
var x : array[1..t,1..t] of real;
∙ Во-вторых, поскольку число шагов, которые необходимо будет сделать для перебора всех эле- ментов массива и в процессе ввода и в процессе накопления суммы заранее известно, воспользу- емся оператором цикла с параметром. Используя переменную i в качестве параметра внешнего цикла (обеспечивая перебор элементов матрицы по строкам) и переменную j в качестве пара- метра внутреннего цикла (обеспечивая перебор элементов матрицы по столбцам). Однако еще раз заметим, что конечным значением параметров цикла будет не значение t (вспомогательное значение, используемое при описании массива), а значения n и m (реальная размерность массива, где n – число строк в матрице, m – число столбцов матрицы);
∙ В-третьих, при вводе элементов массива организуем «диалог» с помощью сочетания операто- ров вывода и ввода, применяя операторные скобки, поскольку в операторе цикла с параметром может быть использован только один оператор языка Паскаль.
- 41 -