Занятие строится таким образом, что после прослушивания теоретического материала (10 –15 мин.), учащимся предлагается практическое задание, которое выполняется ими за 20 - 30 мин. и корректируется в процессе изучения материала в более сложную задачу по изучаемой теме.
Автор сознательно избегал сложных примеров, будучи убежденными, в том, что гораздо важнее для учащихся понимание алгоритмов предлагаемых задач, приобретение навыков разработки алгоритмов, их программирования и выполнения на компьютере в течение одного занятия. Такой подход к изучению языка программирования позволяет сосредоточить внимание на самом процессе программирования, который в данном случае более важен для изучения языка, чем решение сложной задачи, наверняка трудной большинству учащихся. Такие задачи, по мнению авторов, неоправданно занимают большое количество учебного времени, превращая учителя из инициатора процесса обучения в диктатора.
Занятие 11ч1.doc
Преобразование матриц
Занятие 11
1. Урок 1. Элементарные преобразования матриц. Перестановка двух строк (столбцов).
2. Урок 2. Элементарные преобразования матриц. Добавление к одной строке другой, умноженной на
любое число.
3. Урок 3. Типовые задачи преобразования двумерных массивов данных.
4. Контрольные вопросы и упражнения.
Урок 1. Элементарные преобразования матриц. Перестановка двух строк (столбцов)
1.1. Перестановка двух строк.
1.2. Перестановка двух столбцов.
Данная задача аналогична задаче замены значений двух переменных. Существуют два алгоритма решения этой
задачи. Первый алгоритм основан на введении третьей промежуточной переменной, которой присваивается значение
одной из данных переменных. Второй алгоритм позволяет обходиться без промежуточной переменной. Вспомним эти
алгоритмы.
Второй алгоритм
Пусть
a:=n;{Начальное значение}
b:=m;{Начальное значение}
Первый алгоритм
Пусть
a:=n;{Начальное значение}
b:=m;{Начальное значение}
k:=a;{Промежуточная переменная} a:=ab;{n m}
a:=b;
b:=k;
Результат
a:=m;
b:=n;
b:=a+b;{n m + m}
a:=ba;{n n + m}
Результат
a:=m;
b:=n;
1.1. Перестановка двух строк (столбцов)
Такая задача существует на практике, когда необходимо отсортировать таблицу по некоторому ключу,
которым может быть значение элемента столбца. Например, сортировка в порядке возрастания (убывания) номеров
строк матрицы по значению первого столбца строк.
Рассмотрим перестановку двух строк на примере следующей задачи.
Задача. Дана некоторая матрица A m, n (F), состоящая из m строк и n столбцов, значения элементов которой
случайные целые положительные числа лежащие в диапазоне (2, 8). Поменять местами, указанные с клавиатуры две
строки исходной матрицы.
Постановка задачи.
1. Количество строк и столбцов вводить с клавиатуры, отвечая на сообщения: "Введи количество строк",
"Введи количество столбцов".
2. Исходную матрицу вывести на экран дисплея с сообщением "Исходная матрица случ. целых чисел в
диапазоне (2, 8)".
3. Номера, меняемых строк вводить с клавиатуры, отвечая на сообщения: "Поменять местами строку", "На
строку".
4. Преобразованную матрицу вывести на экран с сообщением "Преобразованная матрица"
{Определение двумерного массива}
{Определение одномерного массива}
Program V1L12P1; {Перестановка двух строк матрицы}
Uses Crt;
Var a :array[1..10,1..10] of integer;
k :array[1..10] of integer;
c,i,j,m,n,f,p :integer;
{}
begin
ClrScr;
Randomize;
Write('Введи количество строк матрицы ');
Read(m);
Write('Введи количество столбцов матрицы ');
Read(n);
{Формирование исходного массива}
WriteLn('Исходная матрица случайных целых чисел в диапазоне (2, 8)');
for i:=1 to m do
67 Элементарные преобразования матриц. Перестановка двух строк (столбцов). Добавление к одной строке другой. Типовые задачи
begin
for j:=1 to n do
begin
{Фильтр диапазона случайных чисел}
repeat
c:=Random(9);
until(c>=2)and(c<9);
a[i,j]:=c;
Write(a[i,j]:4);
end;
{Формирование значений элементов матрицы}
WriteLn
end;
{}
Write('Поменять местами строку '); Read(f);
Write('На строку '); Read(p);
{Ввод номера первой заменяемой строки}
{Ввод номера второй заменяемой строки}
{Цикл формирования промежуточного массива первой
указанной строки матрицы и запись второй указанной
строки на место первой}
for i:=1 to m do
for j:=1 to n do
if i=f then
begin
k[j]:=a[i,j];
a[i,j]:=a[p,j]
{Промежуточный массив указанной строки матрицы}
Запись второй указанной строки на место строки,
указанной первой}
end;
{Цикл замены второй указанной строки}
WriteLn('Преобразованаая матрица');
for i:=1 to m do
begin
for j:=1 to n do
begin
if i=p then a[i,j]:=k[j]; {Замена второй указанной строки}
Write(a[i,j]:4)
{Печать преобразованного массива}
end;
WriteLn;
end;
{}
ReadKey
end.
Возможный результат работы программы
Введи количество строк матрицы 3
Введи количество столбцов матрицы 4
Исходная матрица случайных чисел в диапазоне (2, 8)
5 4 8 3
2 6 5
8
5
4 2 5
Поменять местами строку 1
На строку 3
Преобразованная матрица
5
8
5
4 2 5
2 6 5
4 8 3
Аналогичная задача с заменой пары столбцов, номера которых указываются с клавиатуры.
Program V1L12P2; {Перестановка двух столбцов матрицы}
Uses Crt;
Var a :array[1..10,1..10] of integer;
k :array[1..10] of integer;
c,i,j,m,n,f,p :integer;
begin
ClrScr;
Randomize;
Write('Введи количество строк матрицы ');
68 Read(m);
Write('Введи количество столбцов матрицы ');
Read(n);
{Формирование исходного массива}
WriteLn('Исходная матрица случайных целых чисел в диапазоне (2, 8)');
for i:=1 to m do
begin
for j:=1 to n do
begin
repeat
c:=Random(9);
until(c>=2)and(c<9);
a[i,j]:=c;
Write(a[i,j]:4);
end;
WriteLn
end;
{}
Write('Поменять местами столбец ');
Read(f);
Write('на столбец ');
Read(p);
for i:=1 to m do
for j:=1 to n do
if j=f then
begin
k[i]:=a[i,j];
a[i,j]:=a[i,p]
end;
{}
WriteLn('Преобразованная матрица');
for i:=1 to m do
begin
for j:=1 to n do
begin
if j=p then a[i,j]:=k[i];
Write(a[i,j]:4)
end;
WriteLn;
end;
{}
ReadKey
end.
Возможный результат работы программы
Введи количество строк матрицы 3
Введи количество столбцов матрицы 4
Исходная матрица случайных чисел в диапазоне (2, 8)
7 2 6 2
3 3 4 7
2 8 3 6
Поменять местами столбец 1
на столбец 3
Преобразованная матрица
6 2 7 2
4 3 3 7
3 8 2 6
Сравните программы V1L12P1, V1L12P2 и попробуйте объяснить разницу в них.
Урок 2. Элементарные преобразования матриц. Добавление к одной строке другой, умноженной на любое
число
2.1. Добавление к одной строке другой, умноженной на любое число.
2.1. Добавление одной строки к другой, умноженной на любое число
69 Элементарные преобразования матриц. Перестановка двух строк (столбцов). Добавление к одной строке другой. Типовые задачи
Эту операцию следует понимать как сложение с записью результата в одну из слагаемых строк. Данное
преобразование, как и рассмотренные примеры выше, применяется в вычислительной математике при решении систем
линейных уравнений.
Рассмотрим это преобразование на примере метода Гаусса приведения матрицы к упрощенному виду.
Алгоритм этого метода состоит из следующих шагов:
выбирается одна из ненулевых не рассмотренных ранее строк;
в выбранной строке выбирается ненулевой элемент, после чего значения элементов выбранной строки
делятся на выбранный элемент (или умножаются на элемент, обратный выбранному элементу);
добавляя к остальным строкам выбранную строку, умноженную на подходящее число, добиваются того,
что все элементы столбца матрицы с преобразованной строкой, кроме выбранного элемента столбца этой
строки, становятся равными нулю.
Задача. Дана некоторая матрица A m, n (F), состоящая из m строк и n столбцов, значения элементов которой
случайные целые положительные числа лежащие в диапазоне (2, 8). Привести матрицу к упрощенному виду по
методу Гаусса.
Постановка задачи.
1. Количество строк и столбцов вводить с клавиатуры, отвечая на сообщения: "Введи количество строк
матрицы", "Введи количество столбцов матрицы".
2. Исходную матрицу вывести на экран дисплея с сообщением "Исходная матрица случайных целых чисел в
диапазоне (2, 8)".
3. Номер строки и номер элемента столбца вводить с клавиатуры, отвечая на сообщения: "Выберите строку",
"Выберите элемент в строке".
4. Преобразованную матрицу вывести на экран с сообщением "Преобразованная матрица"
Program V1L12P3; {Преобразование матрицы методом Гаусса}
Uses Crt;
Var a :array[1..10,1..10] of real; b :array[1..10] of real;
k :real; c,i,j,m,n,f,p,z :byte;
{}
begin
ClrScr;
Randomize;
Write('Введи количество строк матрицы '); Read(m);
Write('Введи количество столбцов матрицы '); Read(n);
{Формирование исходного массива}
WriteLn('Исходная матрица случ. целых чисел в диапазоне (2, 8)');
for i:=1 to m do
begin
for j:=1 to n do
begin
{Цикл формирования исходной матрицы}
repeat
{Цикл пока случайное число не попадет в указанный диапазон}
c:=Random(9);
until(c>=2)and(c<9); {Логическое условие попадания числа в диапазон}
a[i,j]:=c;
Write(a[i,j]:8:2);
end;
WriteLn
end;
{}
Write('Выберите строку '); Read(f);
Write('Выберите элемент в строке '); Read(p);
k:=a[f,p];
WriteLn('Преобразование выбранной строки');
for i:=1 to m do
begin
{Присвоение переменной значения выбранного элемента}
for j:=1 to n do
begin
if i=f then a[i,j]:=a[i,j]/k; {Логическое условие деления элементов строки}
Write(a[i,j]:8:2); {Печать преобразованной матрицы}
end;
WriteLn
end;
for i:=1 to m do
begin
70
{Перевод строки}
{Цикл преобразования строк матрицы} for j:=1 to n do
if i<>f then b[j]:=a[f,j]*(a[i,p])+a[i,j];
for z:=1 to n do
{Формирование вектора 'b'}
if i<>f then a[i,z]:=b[z];
{Замена строк матрицы}
end;
{Печать преобразованного массива}
WriteLn('Преобразованная матрица');
for i:=1 to m do
begin
for j:=1 to n do
Write(a[i,j]:8:2);
WriteLn;
end;
{}
ReadKey
end.
Возможный результат работы программы
3.00
6.00
3.00
Введи количество строк матрицы 3
Введи количество столбцов матрицы 4
Исходная матрица случайных чисел в диапазоне (2, 8)
3.00 2.00
5.00 8.00
2.00 4.00
Выберите строку 2
Выберите элемент в строке 3
Преобразование выбранной строки
3.00
3.00 2.00
2.00 {Произведено деление значений элементов строки на 3}
1.67 2.67
2.00 4.00
3.00
Преобразованная матрица
0.33 3.33
1.67 2.67
4.67 6.67
1.00
2.00 {В столбце значения 0, кроме выбранного ранее и деленного на}
5.00 {самого себя, т.е. 1}
2.00
3.00
4.00
2.00
1.00
4.00
0.00
1.00
0.00
Урок 3. Типовые задачи преобразования двумерных массивов данных
3.1. Преобразования элементов двумерного массива по логическим условиям.
3.1. Преобразования элементов двумерного массива по логическим условиям
Такая задача предполагает просмотр и нахождение значения элемента массива, по какому бы либо
логическому условию и преобразование его. Покажем это преобразование на нижеследующем примере.
Задача. Дан некоторый двумерный массив, состоящий из m строк и n столбцов целых чисел, лежащих в
диапазоне (7, 5). Исключить из массива отрицательные значения элементов, заменяя их числом 99.
Постановка задачи.
Значения строк и столбцов массива данных вводить с клавиатуры.
1.
2. Массив данных получить генерацией случайных чисел с распечаткой его на экране дисплея.
3. Результат решения задачи выводить на экран дисплея с сообщением "Преобразованный массив".
Program V1L12P4; {Исключение отрицательных значений элементов матрицы}
Uses Crt;
Var a:array[1..10,1..10] of integer; i,j,m,n,c,d :integer;
{}
begin
ClrScr;
Randomize;
Write('Введи количество строк '); Read(m);
Write('Введи количество столбцов '); Read(n); WriteLn;
{}
WriteLn('Массив случайных целых чисел в диапазоне (7, 5):');
for i:=1 to m do
begin
for j:=1 to n do
begin
c:=Random(5);
d:=Random(7);
a[i,j]:=cd;
71 Элементарные преобразования матриц. Перестановка двух строк (столбцов). Добавление к одной строке другой. Типовые задачи
Write(a[i,j]:4);
end;
WriteLn
end;
WriteLn('Преобразованный массив');
for i:=1 to m do
begin
for j:=1 to n do
begin
if a[i,j]<0 then a[i,j]:=99; {Логич. усл. и преобразование}
Write(a[i,j]:4)
end;
WriteLn
end;
ReadKey
end.
Возможный результат работы программы
Введи количество строк матрицы 3
Введи количество столбцов матрицы 4
Массив случайных целых чисел в диапазоне (7, 5)
3 2 0 3
4 1 6 0
0 1 1 3
Преобразованный массив
99 2 0 99
99 1 99 0
0 1 99 3
Для решения задач контрольных вопросов и упражнений используйте программы или фрагменты программ
данного занятия.
Контрольные вопросы и упражнения
1. Перечислите элементарные преобразования строк и столбцов матрицы.
2. Перечислите элементарные преобразования строк и столбцов, используемые при приведении матрицы к
упрощенному виду по методу Гаусса.
3. Даны натуральные числа m и n. Найти сумму элементов каждой строки, записать в массив S и
напечатать. Определить и напечатать значение максимального элемента массива S.
4. Даны натуральные числа m и n, действительная матрица A размера m * n. Найти и напечатать значения и
индексы максимального и минимального элементов матрицы.
5. Даны натуральные числа m и n, действительная матрица A размера m * n. Найти произведение
элементов каждого столбца, записать в массив P и напечатать. Определить и напечатать значение
минимального элемента первого столбца.
6. Дана матрица A целых положительных чисел, преобразовать матрицу, используя часть метода Гаусса
таким образом, чтобы в выбранном столбце матрицы оказались нули.
7. Дана матрица A целых положительных чисел. Повернуть матрицу относительно нижнего левого элемента
на 180 градусов.
8. Дана матрица A целых положительных чисел. Подсчитать количество одинаковых значений элементов
матрицы.
9. Дана матрица A положительных и отрицательных действительных чисел. Сформировать массив B из
значений главной диагонали исходной матрицы.
10. Даны две матрицы A и B, причем матрица B состоит только из нулей и единиц. Сформировать третью
матрицу C, состоящую из нулей и элементов матрицы A, которым соответствуют единичные элементы
матрицы B.
Для заметок, вопросов и ответов
______________________________________________________________________________________________________
______________________________________________________________________________________________________
______________________________________________________________________________________________________
______________________________________________________________________________________________________
______________________________________________________________________________________________________
______________________________________________________________________________________________________
72 ______________________________________________________________________________________________________
______________________________________________________________________________________________________
______________________________________________________________________________________________________
______________________________________________________________________________________________________
______________________________________________________________________________________________________
______________________________________________________________________________________________________
______________________________________________________________________________________________________
______________________________________________________________________________________________________
______________________________________________________________________________________________________
______________________________________________________________________________________________________
______________________________________________________________________________________________________
______________________________________________________________________________________________________
______________________________________________________________________________________________________
______________________________________________________________________________________________________
______________________________________________________________________________________________________
______________________________________________________________________________________________________
______________________________________________________________________________________________________
______________________________________________________________________________________________________
______________________________________________________________________________________________________
______________________________________________________________________________________________________
______________________________________________________________________________________________________
______________________________________________________________________________________________________
73
Преобразование матриц
Преобразование матриц
Преобразование матриц
Преобразование матриц
Преобразование матриц
Преобразование матриц
Преобразование матриц
Материалы на данной страницы взяты из открытых истончиков либо размещены пользователем в соответствии с договором-офертой сайта. Вы можете сообщить о нарушении.