На занятии будет рассмотрен двумерный массив в Pascal и примеры работы с ним. Кроме того, предстоит знакомство с понятиями побочная диагональ матрицы в Паскаль и главная диагональ
Содержание:
- Двумерный массив в Pascal
- Описание, ввод и вывод элементов двумерного массива
- Главная и побочная диагональ при работе с двумерными матрицами в Pascal
Матрица или двумерный массив – это прямоугольная таблица чисел (или других элементов одного типа). Каждый элемент матрицы имеет два индекса (номер строки и номер столбца).
Исходные данные для решения многих задач можно представить в табличной форме:
Таблица результатов производственной деятельности нескольких филиалов фирмы может быть представлена так:
zavod1: array [1..4] of integer; zavod2: array [1..4] of integer; zavod3: array [1..4] of integer;
Или в виде двумерного массива так:
Объявление двумерного массива:
var A: array[1..3,1..4] of integer; begin {...}
begin var a := new integer[3,4]; {...} end.
Описание, ввод и вывод элементов двумерного массива
Варианты описания двумерного массива (традиционный pascal)
- Описание массива в разделе переменных:
- Описание массива через раздел type:
const N = 3; M = 4; var A: array[1..N,1..M] of integer;
const M=10; N=5; type matrix=array [1..M, 1..N] of integer; var A: matrix;
Ввод двумерного массива m x n с клавиатуры:
for i:=1 to N do for j:=1 to M do begin write('A[',i,',',j,']='); read ( A[i,j] ); end;
for var i:=0 to a.RowCount-1 do for var j:=0 to a.ColCount-1 do a[i,j]:=readinteger;
Заполнение случайными числами:
var a := MatrRandomInteger(3,4,0,10); // целые числа в диапазоне от 0 до 10 var a1 := MatrRandomReal(3,4,1,9) // веществ. числа в диапазоне от 1 до 9
«Красивый» вывод элементов двумерного массива m x n:
Следующий фрагмент программы выводит на экран значения элементов массива по строкам:
1 2 3 4 5 |
for i:=1 to N do begin for j:=1 to M do write ( A[i,j]:5 ); writeln; end; |
1 2 3 4 5 6 |
begin var a := MatrRandomInteger(3,4,0,10); var a1 := MatrRandomReal(3,4,1,9); a.Println; a1.Println(6,1) // 6 позиций всего на вывод, 1 знак после десят. запятой end. |
Результат:
8 2 1 3 5 8 0 8 6 3 9 3 3.3 4.7 3.7 5.4 2.9 1.7 2.3 4.0 8.3 3.7 8.4 1.4
Рассмотрим следующую задачу: Получены значения температуры воздуха за 4 дня с трех метеостанций, расположенных в разных регионах страны:
Номер станции | 1-й день | 2-й день | 3-й день | 4-й день |
---|---|---|---|---|
1 | -8 | -14 | -19 | -18 |
2 | 25 | 28 | 26 | 20 |
3 | 11 | 18 | 20 | 25 |
Т.е. запись показаний в двумерном массиве выглядела бы так:
t[1,1]:=-8; | t[1,2]:=-14; | t[1,3]:=-19; | t[1,4]:=-18; |
t[2,1]:=25; | t[2,2]:=28; | t[2,3]:=26; | t[2,4]:=20; |
t[3,1]:=11; | t[3,2]:=18; | t[3,3]:=20; | t[3,4]:=25; |
Или в pascalabc.NET:
var t := Matr(3,4,-8,-14,-19,-18,25,28,26,20,11,18,20,25); t.Println;
Объявление двумерного массива:
var t: array [1..3, 1..4] of integer;
Задание array 1: Необходимо:
- Распечатать температуру на 2-й метеостанции за 4-й день и на 3-й метеостанции за 1-й день.
- Распечатать показания термометров всех метеостанций за 2-й день.
- Определить среднюю температуру на 3-й метеостанции.
- Распечатать, в какие дни и на каких метеостанциях температура была в диапазоне 24-26 градусов тепла.
Дополните код:
Показать решение:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 |
var t: array [1..3, 1..4] of integer; s,i,j:integer; begin t[1,1]:=-8; t[1,2]:=-14; t[1,3]:=-19; t[1,4]:=-18; t[2,1]:=25; t[2,2]:=28; t[2,3]:=26; t[2,4]:=20; t[3,1]:=11; t[3,2]:=18; t[3,3]:=20; t[3,4]:=25; {1. Распечатать показания термометров на 2-й метеостанции за 4-й день и на 3-й метеостанции за 1-й день} writeln('1-е задание: ',t[2,4] , ' и ',t[...,...]); {2. Показания термометров всех метеостанций за 2-й день} for i:=1 to ... do writeln ('2-е задание: ',t[...,...]); {3. Определим среднее значение температуры на 3-й метеостанции:} i:=3; s:=0; for j:=1 to 4 do s:=...; {сумматор} writeln('3-е задание: ', s/4); {распечатаем всю таблицу} for i:=1 to 3 do for j:=1 to 4 do writeln(t[i,j]); {4. Распечатаем станции и дни с температурой 24-26 гр} writeln('4-е задание: '); for i:=1 to 3 do for ... ... do if (...) and (...) then writeln('станция ', i, ' день ', j) end. |
Самостоятельно подумайте, как находится сумма элементов массива pascal.
Задание array 2. Найти сумму элементов массива (прямоугольной таблицы) размером [m x n]
Задание array 4.
Найти сумму всех элементов массива (переменная sum
) 5 x 4, а также сумму элементов, составляющих столбцы таблицы (двумерного массива). Для хранения сумм столбцов чисел использовать одномерный массив (s
). Дополните код.
Показать решение:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 |
const m = 5; n = 4; var a: array[1..m,1..n] of byte; s: array[1..n] of byte; i,j, sum: byte; begin randomize; for i := 1 to m do begin for j := 1 to n do begin ... {инициализация элементов массива случайными числами} ... {вывод элементов массива} end; writeln end; writeln ('------------'); {для оформления} {обнуление значений массива суммы s[]:} ... {поиск сумм элементов по столбцам:} for i := 1 to n do begin for j := 1 to m do begin s[i]:=...; end; write(...) ; end; {поиск общей суммы:} sum:=0; ... {вычисление суммы элементов массива значений сумм по столбцам:} for ... ... write (' | sum = ', sum); readln end. |
Задание array 4_1.
Найти сумму элементов двумерного массива [m x n] по строкам:
2 8 1 9 : sum = 20 3 1 7 2 : sum = 13 4 5 6 2 : sum = 17
Методы матриц для работы со строками и столбцами:
begin var a := MatrRandomInteger(3,4); a.Println; a.Row(0).Sum.Println(); a.Row(1).Average.Println; a.Row(2).Product.Println; a.Col(0).Min.Println; a.Col(1).Max.Println; end.
Результат:
86 62 80 33 51 4 36 65 78 30 5 16 261 39 187200 51 62
Главная и побочная диагональ при работе с двумерными матрицами в Pascal
Главная диагональ квадратной матрицы n x n (т.е. той, у которой количество строк равно количеству столбцов) проходит с верхнего левого угла матрицы (элемент 1,1) до правого нижнего угла матрицы (элемент n,n).
Побочная диагональ квадратной матрицы n x n проходит с нижнего левого угла матрицы (элемент n,1) до правого верхнего угла матрицы (элемент 1,n).
Формулу поиска элементов диагоналей проще всего искать, нарисовав элементы матрицы:
Если индексы начинаются с единицы (традиционный Паскаль):
1,1 | 1,2 | 1,3 | 1,4 |
2,1 | 2,2 | 2,3 | 2,4 |
3,1 | 3,2 | 3,3 | 3,4 |
4,1 | 4,2 | 4,3 | 4,4 |
Если индексы начинаются с нуля (pascalAbc.NET):
0,0 | 0,1 | 0,2 | 0,3 |
1,0 | 1,1 | 1,2 | 1,3 |
2,0 | 2,1 | 2,2 | 2,3 |
3,0 | 3,1 | 3,2 | 3,3 |
Учитывая, что первая цифра в программе будет соответствовать счетчику i
, а вторая — счетчику j
, то из таблицы можно вывести формулы:
Главная диагональ матрицы в Паскаль имеет формулу:
i=j
Побочная диагональ матрицы в Паскале традиционном имеет формулу:
n=i+j-1
(или j=n-i+1
)
где n
— размерность квадратной матрицы
Побочная диагональ матрицы в pascalAbc.Net имеет формулу:
n=i+j+1
где n
— размерность квадратной матрицы
Пример: Вывести на экран сначала главную диагональ квадратной матрицы из N строк и N столбцов, а затем ее побочную диагональ.
Решение:
Пример: Заменить элементы главной и побочной диагонали квадратной матрицы нулями
Показать решение:
Паскаль:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 |
var i,j,n:integer; a: array[1..100,1..100]of integer; begin randomize; writeln ('введите размерность матрицы:'); readln(n); for i:=1 to n do begin for j:=1 to n do begin a[i,j]:=random(10); write(a[i,j]:3); end; writeln; end; writeln; for i:=1 to n do begin for j:=1 to n do begin if (i=j) or (n=i+j-1) then a[i,j]:=0; write(a[i,j]:3) end; writeln; end; end. |
PascalAbc.Net
1 2 3 4 5 6 7 8 9 10 11 12 |
begin var n := readinteger('введите размерность матрицы:'); var a := matrRandomInteger(n, n, -10, 10); a.Println(6); for var i := 0 to n - 1 do begin a[i, i] := 0; a[i, n - i - 1] := 0; end; writeln(); a.Println(6); end. |
Задание array 5:
Найти отдельно сумму элементов главной и побочной диагонали квадратной матрицы
1 7 3 7 2 1 8 3 5 7 6 4 8 2 3 1 ------- sum1 = 9 sum2 = 30
Пример:
Дана матрица 5х5. Найти сумму элементов, стоящих на двух соседних диагоналях с главной и параллельных ей.
Для решения задачи воспользуйтесь таблицей
Показать решение:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 |
var A:array[1..5,1..5] of integer; i,j:integer; sum,sum1,sum2:integer; begin randomize; for i:=1 to 5 do for j:=1 to 5 do A[i,j]:=random(10); write ('Исходный массив A: '); for i:=1 to 5 do begin writeln; for j:=1 to 5 do write (A[i,j]:2,' '); end; sum1:=0; for i:=1 to 5 do for j:=1 to 5 do if (i-j=1) then sum1:=sum1+A[i,j]; sum2:=0; for i:=1 to 5 do for j:=1 to 5 do if (j-i=1) then sum2:=sum2+A[i,j]; sum:=sum1+sum2; writeln; writeln('Сумма = ',sum); end. |
Задание array 6: Сформировать матрицу размерностью n. Вывести ее на экран. Затем преобразовать ее, заменив необходимые элементы на 0:
Задание array 7: Сформировать матрицу размерностью n. Вывести ее на экран. Затем преобразовать ее, заменив необходимые элементы на 0:
Задание array 8: Сформировать матрицу размерностью n. Вывести ее на экран. Затем преобразовать ее, заменив необходимые элементы на 0:
Задание array 9: Составить программу, позволяющую с помощью датчика случайных чисел сформировать матрицу размерностью N. Определить:
Рассмотрим еще один пример работы с двумерным массивом.
Пример: В двумерном массиве размером N
х M
определить среднее значение элементов. Найти индекс элемента массива, наиболее близкого к среднему значению.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 |
var index1,index2,i,j,N,M:integer; s,min,f:real; a:array[1..300,1..300] of real; begin N:=10; M:=5; for i:=1 to N do begin for j:=1 to M do begin a[i,j]:=random(20); s:=s+a[i,j]; write(a[i,j]:3); end; writeln; end; f:=s/(N*M); writeln('srednee znachenie ',f); min:=abs(a[1,1]-f); for i:=1 to N do begin for j:=1 to M do begin if abs(a[i,j]-f)<min then begin min:=abs(a[i,j]-f); index1:=i; index2:=j; end; end; end; writeln('naibolee blizkiy ',index1,' ',index2); end. |
Потренируйтесь в решении задач по теме, щелкнув по пиктограмме:
0 / 0 / 0 Регистрация: 09.05.2020 Сообщений: 14 |
|
1 |
|
Вывести элементы побочной диагонали матрицы10.05.2020, 19:55. Показов 19670. Ответов 6
Условие Формат входных данных входные данные
0 |
Максим 1994 115 / 72 / 48 Регистрация: 16.11.2012 Сообщений: 257 |
||||
10.05.2020, 21:46 |
2 |
|||
Сообщение было отмечено F- как решение РешениеПодойдет?? Если хочешь, то допили условия) N≤500 и вот Все числа не превосходят 1000 по модулю.
1 |
alo_wu |
10.05.2020, 21:54
|
Не по теме: Максим 1994, я конечно не докапываюсь, но динамическую память нужно удалять 😉
0 |
0 / 0 / 0 Регистрация: 09.05.2020 Сообщений: 14 |
|
11.05.2020, 15:22 [ТС] |
4 |
Максим 1994,спасибо большое!
0 |
1 / 1 / 0 Регистрация: 07.08.2020 Сообщений: 15 |
|
16.04.2021, 12:11 |
5 |
код работает только для одного теста
0 |
Yetty 7427 / 5021 / 2891 Регистрация: 18.12.2017 Сообщений: 15,694 |
||||
16.04.2021, 12:35 |
6 |
|||
код работает только для одного теста а так ?
0 |
макакий 1 / 1 / 0 Регистрация: 07.08.2020 Сообщений: 15 |
||||
16.04.2021, 13:01 |
7 |
|||
там двумерный массив a[500][500] Добавлено через 2 минуты Добавлено через 6 минут
0 |
Содержание:
- Обозначение
- Элементы матрицы
- Диагонали
Определение
Матрицей размера $m times n$ называется прямоугольная
таблица, содержащая $m cdot n$ чисел, состоящая из $m$ строк и $n$ столбцов.
Обозначение
Таблица берется либо в круглые скобки, либо окружается двумя параллельными вертикальными прямыми.
Пример
$A=left( begin{array}{rrr}{1} & {4} & {0} \ {-1} & {3} & {7}end{array}right)=left|left| begin{array}{rrr}{1} & {4} & {0} \ {-1} & {3} & {7}end{array}right|right|$
Если матрица содержит $m$ строк и $n$ столбцов, то матрица называется матрицей
размера $m times n$ или $m times n$-матрицей. Размер матрицы указывается справа
внизу возле ее имени, либо таблицы с обозначением элементов.
236
проверенных автора готовы помочь в написании работы любой сложности
Мы помогли уже 4 396 ученикам и студентам сдать работы от решения задач до дипломных на отлично! Узнай стоимость своей работы за 15 минут!
Пример
$A_{2 times 3}=left( begin{array}{rrr}{1} & {4} & {0} \ {-1} & {3} & {7}end{array}right)_{2 times 3}=left|left|left.begin{array}{rrr}{1} & {4} & {0} \ {-1} & {3} & {7}end{array}right|right|_{2 times 3}right.$
Элементы матрицы
Элементы матрицы $A$ обозначаются $a_{ij}$, где $i$ – номер строки, в которой находится элемент, а $j$ – номер столбца.
Пример
Задание. Чему равен элемент $a_{23}$
матрицы $A=left( begin{array}{rrr}{1} & {4} & {0} \ {-1} & {3} & {7}end{array}right)$ ?
Решение. Находим элемент, который стоит на пересечении второй строки и третьего столбца:
Таким образом, $a_{23} = 7$.
Ответ. $a_{23} = 7$
Определение
Строка матрицы называется нулевой, если все ее элементы равны нулю. Если хотя бы один из
элементов строки не равен нулю, то строка называется ненулевой.
Замечание. Аналогичное определение и для нулевого и ненулевого столбцов матрицы.
Пример
В матрице $A=left( begin{array}{rr}{0} & {0} \ {-1} & {0}end{array}right)$ первая строка является
нулевой (любой элемент этой строки равен нулю); вторая строка ненулевая, так как элемент $a_{21}=-1 neq 0$.
Диагонали
Определение
Главной диагональю матрицы называется диагональ, проведённая из левого верхнего угла матрицы в
правый нижний.
Побочной диагональю матрицы называется диагональ, проведённая из левого нижнего
угла матрицы в правый верхний.
Пример
: 1 и 6 – элементы главной диагонали.
: 3 и 4 – элементы побочной диагонали.
Для матрицы
элементы 1, 2, -1 образуют главную диагональ; а элементы 3, 2, 2 – побочную.
Читать дальше: виды матриц.
Дана квадратная матрица размером nxn
. Найти минимальный элемент среди элементов, расположенных ниже главной диагонали, найти максимальный элемент, среди элементов расположенных выше побочной диагонали. Найденные минимальный и максимальный элементы поменять местами и вывести их индексы.
// main_secondary_diagonal.cpp: определяет точку входа для консольного приложения. #include "stdafx.h" #include <iostream> #include <iomanip> using namespace std; int main(int argc, char* argv[]) { srand(time(NULL)); int size_array; // размер квадратной матрицы setlocale(LC_ALL, "rus"); cout << "Введите размер квадратной матрицы: "; cin >> size_array; // динамическое создание двумерного массива int **arrayPtr = new int* [size_array]; for (int count = 0; count < size_array; count++) arrayPtr[count] = new int [size_array]; for (int counter_rows = 0; counter_rows < size_array; counter_rows++) { for (int counter_columns = 0; counter_columns < size_array; counter_columns++) { arrayPtr[counter_rows][counter_columns] = rand() % 100; // заполнение массива случайными числами cout << setw(2) << arrayPtr[counter_rows][counter_columns] << " "; // вывод на экран двумерного массива } cout << endl; } cout << endl; int min = arrayPtr[1][0], // минимальный елемент массива, ниже главной диагонали row_min = 1, // номер строки минимального элемента column_min = 0; // номер столбца минимального элемента // поиск минимального элемента в массиве, ниже главной диагонали for (int counter_rows = 1; counter_rows < size_array; counter_rows++) { for (int counter_columns = 0; counter_columns < counter_rows ; counter_columns++) { if ( arrayPtr[counter_rows][counter_columns] < min ) { min = arrayPtr[counter_rows][counter_columns]; row_min = counter_rows; column_min = counter_columns; } } } cout << "min" << "[" << (row_min + 1) << "][" << (column_min + 1) << "]" << " = " << min << endl; int max = arrayPtr[0][0], // максимальный элемнет массива, выше побочной диагонали row_max = 0, // номер строки максимального элемента column_max = 0; // номер столбца максимального элемента for (int counter_rows = 0; counter_rows < size_array - 1; counter_rows++) { for (int counter_columns = 0; counter_columns < (size_array - counter_rows - 1); counter_columns++) { if ( arrayPtr[counter_rows][counter_columns] > max ) { max = arrayPtr[counter_rows][counter_columns]; row_max = counter_rows; column_max = counter_columns; } } } cout << "max" << "[" << (row_max + 1) << "][" << (column_max + 1) << "]" << " = " << max << endl; //////////////////перестановка элементов//////////////////////////////////////////////// arrayPtr[row_min][column_min] = max; arrayPtr[row_max][column_max] = min; //////////////////////////////////////////////////////////////////////////////////////// cout << "nМассив после перестановки максимального и минимального элементов:n"; for (int counter_rows = 0; counter_rows < size_array; counter_rows++) { for (int counter_columns = 0; counter_columns < size_array; counter_columns++) { cout << setw(2) << arrayPtr[counter_rows][counter_columns] << " "; // вывод на экран двумерного массива } cout << endl; } cout << endl; cout << "min" << "[" << (row_max + 1) << "][" << (column_max + 1) << "]" << " = " << min << endl; cout << "max" << "[" << (row_min + 1) << "][" << (column_min + 1) << "]" << " = " << max << endl; // удаление двумерного динамического массива for (int count = 0; count < size_array; count++) delete []arrayPtr[count]; system("pause"); return 0; }
Результат работы программы показан ниже:
П. Е.
ФИНКЕЛЬ Разработка урока по информатике
Автор:
Павел
Ефимович Финкель
Учитель
информатики
МБОУ
СОШ №1 им. А. И. Герцена муниципального
образования Тимашевский район
Краснодарский
край
Адрес
школы:
352700,
г. Тимашевск, ул. Ленина, 152
E–mail:
timsc1@mail.ru
Разработка
урока по информатике
Профильный
класс 10-11
Тема:
Обработка
диагоналей в квадратных матрицах
Ключевые
слова:
Информатика,
массив,
цикл с параметром, Паскаль, PascalABC,
проект, двумерный массив, матрица.
Аннотация
Данный
материал – разработка урока по
информатике.
Тема
«Программирование на языке Паскаль»
изучается в 10 или 11 профильном
«Информационно-технологическом» классе
Тема
урока: «Обработка
диагоналей в квадратных матрицах»
Изучение
данной темы осуществляется в программной
среде Turbo
Pascal
или PascalABC
К
этому моменту учащиеся должны знать
виды алгоритмов, записывать их на языке
Паскаль, уметь записывать операторы
цикла с параметром FOR,
иметь представление о двумерных массивах
(матрицах), объявление и заполнение
массивов в языке Паскаль,
Тема
массивы является обязательной темой в
заданиях ЕГЭ по информатике.
Обработка
диагоналей в квадратных матрицах
Цели
урока:
Образовательные:
-
Закрепить
определение двумерного массива, оператор
описания массива, характеристики
массива, -
научить
решать задачи на обработку двумерных
массивов.
Развивающие:
-
развить
навыки использования среды программирования; -
развить
логическое и алгоритмическое мышление
и активность работы учащихся.
Воспитательные:
-
воспитание
самостоятельности, и ответственности
за выполненную работу; -
формировать
у учащихся объективную самооценку; -
пробудить
интерес к обучению.
Необходимое
оборудование и материалы: компьютер,
проектор, Microsoft Office PowerPoint, среда
программирования Turbo
Pascal
или PascalABC.
План
урока:
-
Организационный
момент (1 минута) -
Актуализация
знаний. (7 минут) -
Объяснение
нового материала (15 минут) -
Физминутка
(1 минута) -
Закрепление
материала – решение задачи по новой
теме (7 минут) -
Практическая
работа – решение учащимися задач по
новой теме (7 минут) -
Итоги
урока. (1 минута) -
Домашнее
задание. (1 минута)
ХОД
УРОКА
-
Организационный
момент
Сообщение
темы и цели урока
-
Актуализация
знаний.
Вопросы
для повторения:
-
Разделы
программы на языке Паскаль -
Виды
алгоритмов -
Объявление
массива в языке Паскаль -
Операторы
циклов в языке Паскаль -
Генератор
случайных чисел Random
Учащиеся
самостоятельно заполняют кроссворд.
Кроссворд можно распечатать и раздать
каждому или вывести на доску с помощью
проектора.
Кроссворд:
По
горизонтали
-
Многократное
выполнение действий -
Команда
языка Паскаль -
Двумерная
таблица -
Набор
данных, обозначенных одним именем -
Что
означает оператор mod
в
языке Паскаль -
X:=5
По
вертикали
3)
подключаемая к программе библиотека
ресурсов в языке Паскаль
-
Создатель
языка Pascal -
Последовательность
действий -
В
языке Паскаль – Набор символов в кавычках -
Хранение
данных на диске -
Упорядочивание
элементов массива по возрастанию или
убыванию
-
Объяснение
нового материала
Квадратной
называется матрица, у которой количество
строк равно количеству столбцов, n=m.
A(5,5)
A(7,7)
т.е. A(n,n)
5 |
-7 |
-4 |
3 |
8 |
-3 |
9 |
8 |
5 |
-6 |
4 |
2 |
8 |
-9 |
-3 |
-5 |
8 |
-9 |
4 |
3 |
7 |
8 |
-4 |
-3 |
6 |
В
данном примере матрица 5х5 (5 строк и 5
столбцов)
Квадратная
матрица формируется также, как и обычная
прямоугольная матрица:
A:
array [1..5, 1..5] of integer;
W:
array [1..20, 1..20] of real;
Элемент
(2,5)
5
-7
-4
3
8
-3
9
8
5
-6
4
2
8
-9
-3
-5
8
-9
9
3
Элемент
(2,2)
7
8
-4
-3
6
Элемент
(4,4)
Элемент
(5,3)
В
квадратных матрицах используется
понятие диагонали. Существуют главная
диагональ и побочная.
5 |
-7 |
-4 |
3 |
8 |
-3 |
9 |
8 |
5 |
-6 |
4 |
2 |
8 |
-9 |
-3 |
-5 |
8 |
-9 |
4 |
3 |
7 |
8 |
-4 |
-3 |
6 |
Элементы,
которые лежат вдоль этой прямой,
называются главная диагональ.
В
данном случае легко определить адрес
этих элементов: (1,1) (2,2) (3,3) (4,4) (5,5)
Следовательно,
номер строки равен номеру столбца. i
= j.
Иногда
элемент обозначают a(i,i)
5 |
-7 |
-4 |
3 |
8 |
-3 |
9 |
8 |
5 |
-6 |
4 |
2 |
8 |
-9 |
-3 |
-5 |
8 |
-9 |
4 |
3 |
7 |
8 |
-4 |
-3 |
6 |
Элементы,
которые лежат вдоль этой прямой,
называются побочная диагональ.
В
данном случае адрес этих элементов
следующий: (1,5) (2,4) (3,3) (4,2) (5,1)
Легко
увидеть, что при возрастании номера
строки номер столбца уменьшается.
Для
записи таких элементов используется
формула ( i,
n–i+1
)
Для
n=5
I=1
A(1, 5-1+1) = A(1,5)
I=2
A(2, 5-2+1) = A(2, 4)
I=3
A(3, 5-3+1) = A(3, 3)
I=4
A(4, 5-4+1) = A(4, 2)
I=5
A(5,
5-5+1) = A(5,
1)
-
Физминутка
-
Закрепление
нового материала.
Рассмотрим
данную тему на примерах.
Пример
1.
Дана
квадратная матрица 7х7, заполненная
случайными числами. Подсчитать количество
отрицательных элементов на главной
диагонали и количество положительных
элементов на побочной диагонали. Оба
результата вывести на экран.
Формируем
матрицу, заполняем её случайными числами
и выводим матрицу на экран. Согласно
условию задачи, в матрице обязательно
должны быть отрицательные числа. Поэтому
будем использовать формулу random[10]
– 5;
//
объявляем двумерный массив
Uses
crt;
Var
I,j:
integer;
kolpol,
kolotr: integer;
//
две разные переменные. kolotr
– для подсчёта отрицательных элементов,
//
kolpol
– для подсчёта положительных элементов
A:
array
[1..7, 1..7] of
integer;
Begin
//
заполнение матрицы случайными числами
и вывод матрицы на экран
For
i:= 1 to 7 do begin
For
j:= 1 to 7 do begin
A[I,j]
:= random[10] – 5;
Write
(a[I,j]:4);
End;
Writeln;
End;
Writeln;
Теперь
обрабатываем диагонали матрицы.
Так
как для работы с диагоналями используется
только переменная i,
то будем использовать одинарный цикл.
For
i:= 1 to 7 do begin
If
a[I,i]<0 then kolotr:=kolotr+1; // вместо
этой
формулы
можно
использовать
inc(kolotr);
If
a[i,7-i+1]>0 then kolpol:=kolpol+1; // или
inc(kolpol);
End;
После
этого необходимо вывести результаты
на экран.
Writeln
(‘количество отрицательных на главной
диагонали = ‘, kolotr);
Writeln
(‘количество положительных на побочной
диагонали = ‘, kolpol);
End.
Вот
полный листинг программы:
Uses
crt;
Var
I,j:
integer;
kolpol,
kolotr: integer;
A:
array [1..7, 1..7] of integer;
Begin
For
i:= 1 to 7 do begin
For
j:= 1 to 7 do begin
A[I,j]
:= random[10] – 5;
Write
(a[I,j]:4);
End;
Writeln;
End;
Writeln;
For
i:= 1 to 7 do begin
If
a[I,i]<0 then kolotr:=kolotr+1;
If
a[i,7-i+1]>0 then kolpol:=kolpol+1;
End;
Writeln
(‘количество отрицательных на главной
диагонали = ‘, kolotr);
Writeln
(‘количество положительных на побочной
диагонали = ‘, kolpol);
End.
Код
программы значительно сокращается,
если делать заполнение матрицы случайными
числами.
Результат
выполнения программы на PascalABC
-
Практическая
работа – решение задач по новой теме
Далее
учащимся предлагаются карточки с
заданиями и для решения задач предлагается
изменить текст набранной программы.
В
матрице a[8,8]
подсчитать количество чётных элементов
на главной диагонали
В
матрице a[7,7]
найти сумму нечётных элементов на
побочной диагонали.
В
матрице a[6,6]
найти произведение элементов, кратных
3 на побочной диагонали.
-
Итоги
урока, выставление оценок.
-
Домашнее
задание.
Дома создать
программу решения задачи:
В
матрице a[5,5]
подсчитать количество не нулевых
элементов на главной и побочной диагонали.
Ввод данных осуществляется вручную.
Список
литературы:
-
Н. Д. Угринович
«Информатика и информационные технологии
10-11» Бином 2005 -
Н. Д. Угринович
«Информатика и ИКТ 10» Бином 2010 -
Н. Д. Угринович
«Практикум по информатике и информационным
технологиям» Бином 2004