Как найти элементы побочной диагонали матрицы

На занятии будет рассмотрен двумерный массив в Pascal и примеры работы с ним. Кроме того, предстоит знакомство с понятиями побочная диагональ матрицы в Паскаль и главная диагональ

Содержание:

  • Двумерный массив в 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)

  1. Описание массива в разделе переменных:
  2. const N = 3;
          M = 4;
    var A: array[1..N,1..M] of integer;
  3. Описание массива через раздел type:
  4. 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: Необходимо:

  1. Распечатать температуру на 2-й метеостанции за 4-й день и на 3-й метеостанции за 1-й день.
  2. Распечатать показания термометров всех метеостанций за 2-й день.
  3. Определить среднюю температуру на 3-й метеостанции.
  4. Распечатать, в какие дни и на каких метеостанциях температура была в диапазоне 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). Дополните код.
двумерный массив в pascal

Показать решение:

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


    Студворк — интернет-сервис помощи студентам

    Условие
    Дан двумерный массив размера N×N. Требуется вывести на экран все элементы его побочной диагонали, начиная с элемента, расположенного в правом верхнем углу.

    Формат входных данных
    С клавиатуры вводится натуральное число N (N≤500). Следующие N строк содержат по N целых чисел, разделенных пробелом — элементы массива. Все числа не превосходят 1000 по модулю.
    Формат выходных данных
    Требуется вывести через пробел N целых чисел — элементы побочной диагонали массива.

    входные данные
    3
    1 2 3
    4 5 6
    7 8 9
    выходные данные
    3 5 7



    0



    Максим 1994

    115 / 72 / 48

    Регистрация: 16.11.2012

    Сообщений: 257

    10.05.2020, 21:46

    2

    Лучший ответ Сообщение было отмечено F- как решение

    Решение

    Подойдет?? Если хочешь, то допили условия) N≤500 и вот Все числа не превосходят 1000 по модулю.

    C++
    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
    35
    36
    37
    38
    
    #include <iostream>
    #include <stdlib.h>
     
    using namespace std;
     
    int main()
    {
        int N;
        cout << "N= ";
        cin >> N;
        int **mas = new int *[N];
        cout << "Enter Matrix "<<endl;
        for (int i = 0; i < N; ++i)
        {
            mas[i] = new int[N];
            for (int j = 0; j < N; ++j)
            {
                cin>>mas[i][j];
            }
        }
        cout << "Original Matrix " << endl;
        for (int i = 0; i < N; ++i)
        {
            for (int j = 0; j < N; ++j)
            {
                cout << mas[i][j] << " ";
            }
            cout << 'n';
        }
     
        cout << "diagonal "<<endl;
        for (int i = 0; i < N; ++i)
        {
            cout  << mas[i][N-i-1] << " ";
        }
     
        return 0;
    }



    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

    Цитата
    Сообщение от макакий
    Посмотреть сообщение

    код работает только для одного теста

    а так ?

    C++
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    
    #include <iostream>
     
    using namespace std;
     
    int main()
    {        
        int a[500][500], N;
        
        cin >> N;    
        
        for (int i = 0; i < N; ++i)         
            for (int j = 0; j < N; ++j)        
                cin >> a[i][j];   
        
        for (int i = 0; i < N; ++i)    
            cout << a[i][N-i-1] << " ";    
        cout << "n";
     
        return 0;
    }



    0



    макакий

    1 / 1 / 0

    Регистрация: 07.08.2020

    Сообщений: 15

    16.04.2021, 13:01

    7

    C++ (Qt)
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    
    такой код проходит один тест, а дальше дичь какая-то
    #include <iostream>
    #include <cmath>
    #include <iomanip>
    #include <string>
     
    using namespace std;
    int main(){
        int arr[1000][1000], n, count = 1;
        cin>>n;
        for(int i = 0 ; i<n; i++){
            for(int j = 0; j<n; j++){
                arr[i][j] = count;
                count++;
            }
        }
        
        for(int i = 0; i<n; i++){
            cout << arr[i][n-i-1] << " ";  
        }
        return 0;
    }

    там двумерный массив a[500][500]

    Добавлено через 2 минуты
    3
    1 2 3
    4 5 6
    7 8 9
    Correct
    3 5 7
    Output
    1 1 1

    Добавлено через 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

    Email:
    timsc1@mail.ru

    Разработка
    урока по информатике

    Профильный
    класс 10-11

    Тема:

    Обработка
    диагоналей в квадратных матрицах

    Ключевые
    слова
    :

    Информатика,
    массив,
    цикл с параметром, Паскаль,
    PascalABC,
    проект, двумерный массив, матрица.

    Аннотация

    Данный
    материал – разработка урока по
    информатике.

    Тема
    «Программирование на языке Паскаль»
    изучается в 10 или 11 профильном
    «Информационно-технологическом» классе

    Тема
    урока: «
    Обработка
    диагоналей в квадратных матрицах»

    Изучение
    данной темы осуществляется в программной
    среде
    Turbo
    Pascal
    или
    PascalABC

    К
    этому моменту учащиеся должны знать
    виды алгоритмов, записывать их на языке
    Паскаль, уметь записывать операторы
    цикла с параметром
    FOR,
    иметь представление о двумерных массивах
    (матрицах), объявление и заполнение
    массивов в языке Паскаль,

    Тема
    массивы является обязательной темой в
    заданиях ЕГЭ по информатике.

    Обработка
    диагоналей в квадратных матрицах

    Цели
    урока:

    Образовательные:

    • Закрепить
      определение двумерного массива, оператор
      описания массива, характеристики
      массива,

    • научить
      решать задачи на обработку двумерных
      массивов.

    Развивающие:

    • развить
      навыки использования среды программирования;

    • развить
      логическое и алгоритмическое мышление
      и активность работы учащихся.

    Воспитательные:

    • воспитание
      самостоятельности, и ответственности
      за выполненную работу;

    • формировать
      у учащихся объективную самооценку;

    • пробудить
      интерес к обучению.

    Необходимое
    оборудование и материалы:
     компьютер,
    проектор, Microsoft Office PowerPoint, среда
    программирования
    Turbo
    Pascal
    или
    PascalABC.

    План
    урока:

    1. Организационный
      момент (1 минута)

    2. Актуализация
      знаний. (7 минут)

    3. Объяснение
      нового материала (15 минут)

    4. Физминутка
      (1 минута)

    5. Закрепление
      материала – решение задачи по новой
      теме (7 минут)

    6. Практическая
      работа – решение учащимися задач по
      новой теме (7 минут)

    7. Итоги
      урока. (1 минута)

    8. Домашнее
      задание. (1 минута)

    ХОД
    УРОКА

    1. Организационный
      момент

    Сообщение
    темы и цели урока

    1. Актуализация
      знаний.

    Вопросы
    для повторения:

    • Разделы
      программы на языке Паскаль

    • Виды
      алгоритмов

    • Объявление
      массива в языке Паскаль

    • Операторы
      циклов в языке Паскаль

    • Генератор
      случайных чисел
      Random

    Учащиеся
    самостоятельно заполняют кроссворд.
    Кроссворд можно распечатать и раздать
    каждому или вывести на доску с помощью
    проектора.

    Кроссворд:

    По
    горизонтали

    1. Многократное
      выполнение действий

    2. Команда
      языка Паскаль

    3. Двумерная
      таблица

    4. Набор
      данных, обозначенных одним именем

    5. Что
      означает оператор
      mod
      в
      языке Паскаль

    6. X:=5

    По
    вертикали

    3)
    подключаемая к программе библиотека
    ресурсов в языке Паскаль

    1. Создатель
      языка
      Pascal

    2. Последовательность
      действий

    3. В
      языке Паскаль – Набор символов в кавычках

    4. Хранение
      данных на диске

    5. Упорядочивание
      элементов массива по возрастанию или
      убыванию

    1. Объяснение
      нового материала

    Квадратной
    называется матрица, у которой количество
    строк равно количеству столбцов,
    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,
    ni+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. Физминутка

    2. Закрепление
      нового материала.

    Рассмотрим
    данную тему на примерах.

    Пример
    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

    1. Практическая
      работа – решение задач по новой теме

    Далее
    учащимся предлагаются карточки с
    заданиями и для решения задач предлагается
    изменить текст набранной программы.

    В
    матрице
    a[8,8]
    подсчитать количество чётных элементов
    на главной диагонали

    В
    матрице
    a[7,7]
    найти сумму нечётных элементов на
    побочной диагонали.

    В
    матрице
    a[6,6]
    найти произведение элементов, кратных
    3 на побочной диагонали.

    1. Итоги
      урока, выставление оценок.

    1. Домашнее
      задание.

    Дома создать
    программу решения задачи:

    В
    матрице
    a[5,5]
    подсчитать количество не нулевых
    элементов на главной и побочной диагонали.
    Ввод данных осуществляется вручную.

    Список
    литературы:

    1. Н. Д. Угринович
      «Информатика и информационные технологии
      10-11» Бином 2005

    2. Н. Д. Угринович
      «Информатика и ИКТ 10» Бином 2010

    3. Н. Д. Угринович
      «Практикум по информатике и информационным
      технологиям» Бином 2004

    Добавить комментарий