- •4. Организация программ со структурой вложенных циклов
- •4. Организация программ со структурой вложенных циклов
- •; // Конец второго внутреннего цикла
- •//Вычисление и печать таблицы умножения чисел от 1 до 100
- •Write(I*j); // умножение выполняется 10000 раз
- •Begin begin
- •WriteLn(s:7:2); WriteLn(s:7:2);
- •Вычисление определенного интеграла с заданной точностью
- •Пример программы вычисления определенного интеграла с точностью методом трапеций
- •Задания 4.1 на вычисление интеграла с точностью.
- •Вычисление наибольшего (наименьшего) значения функции с заданной точностью на заданном интервале
- •// Числения максимума
- •// Тервала
- •Задания 4.2 на нахождение экстремума функции с заданной точностью.
- •Обработка матриц
- •Менее предпочтительными, но допустимыми будут объявления типа
- •X:array[1.. MMax, 1..NMax] of Real;
- •X:array[1..12, 1..14] of Real;
- •Пример 1 выполнения задания на матрицы
- •Пример 2 выполнения задания на матрицы
- •Пример 3 выполнения задания на матрицы
- •Пример 4 выполнения задания на матрицы
- •Задания 4.3 на обработку матриц (вложенные циклы)
Пример 1 выполнения задания на матрицы
В матрице A(m,n), m12, n10, поменять местами строки с наибольшей и наименьшей суммами элементов.
Для решения поставленной задачи необходимо вычислить суммы элементов каждой строки матрицы, однако не требуется запоминать все вычисленные суммы. Поэтому после вычисления суммы элементов очередной строки матрицы следует сравнить вычисленное значение с текущими значениями максимальной и минимальной сумм и изменить в случае необходимости текущие значения максимума и минимума на только что вычисленное, а также запомнить номер строки, для которой эта сумма минимальна или максимальна.
После нахождения номеров строк, подлежащих обмену местами выполняется собственно обмен. Поскольку строка матрицы представляет собой одномерный массив (первый индекс имеет фиксированное значение), то эта операция выполняется с использованием обычного (не вложенного цикла), при этом обмен местами ведется с использованием промежуточной простой переменной b.
program matr1;
{$APPTYPE CONSOLE}
uses
SysUtils;
const
Mm=12; Nn=10;
type
matr=array[1..Mm,1..Nn] of Real;
var
A:matr;S,Smax,Smin,B:Real;
Imax,Imin,I,J,M,N:Integer;
.....................
begin
WriteLn('Введите количество строк и столбцов');
ReadLn(M,N);
WriteLn('Введите матрицу по строкам');
for I:=1 to M do
begin
for J:=1 to N do
Read(A[I,J]);
ReadLn;
end;
WriteLn('Исходная матрица');
for I:=1 to M do
begin
for J:=1 to N do
Write(A[I,J]:6:1,' ');
WriteLn;
end;
//задание начальных значений
Smax:=-1e30; //очень маленькое число
Smin:=1e30; //очень большое число
//строго говоря, свмое маленькое и самое большое
//значения для используемого типа данных)
{Другой вариант – нахождение суммы элементов первой строки и задание этого значения для максимума и минимума:
S:=0;
for J:=1 to N do
S:=S+A[1,J];
Smax:=S; Imax:=1;
Smin:=S; Imin:=1;
Далее строки можно рассматривать начиная со второй}
//цикл поиска строк с максимальной и минимальной
//суммами элементов
for I:=1 to M do
begin
S:=0; //задание начального значение суммы
// цикл вычисления суммы элементов очередной строки
for J:=1 to N do
S:=S+A[I,J];
if S>Smax then
begin
Smax:=S;
Imax:=I;
end
else
if S<Smin then
begin
Smin:=S;
Imin:=I;
end;
end;
for J:=1 to N do //цикл обмена местами найденных строк
begin
B:=A[Imin,J];
A[Imin,J]:=A[Imax,J];
A[Imax,J]:=B;
end;
WriteLn('Полученная матрица');
for I:=1 to M do
begin
for J:=1 to N do
Write(A[I,J]:6:1,' ');
WriteLn;
end;
WriteLn('imin=',Imin:2,' imax=',Imax);
ReadLn;
end.
Если матрицу описать как одномерный массив, элементами которого являются одномерные массивы, то обмен местами найденных строк может быть записан короче без использования цикла:
type mas=array[1..Nn] of Real;
matr=array[1..Mm] of mas;
var A:matr; S,Smax,Smin:Real; B:mas;
.................
B:=A[Imin];
A[Imin]:=A[Imax];
A[Imax]:=B;
..............