Как найти элементы над главной диагональю матрицы

0 / 0 / 0

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

Сообщений: 37

1

Найти минимальный элемент над главной диагональю и максимальный под главной диагональю матрицы

02.06.2010, 21:30. Показов 7152. Ответов 8


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

Дан массив mas[1..n,1..n]. Найти минимальный элемент над главной диагональю и максимальный под главной диагональю…(предворительно выделив главную диагональ).



0



STGE

773 / 578 / 324

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

Сообщений: 1,188

02.06.2010, 22:09

2

Pascal
1
2
3
4
5
6
7
8
9
10
...
max1:=a[1,2];   {max1 - максимум над главной диагональю}
max2:=a[2,1];   {max2 - максимум под главной диагональю}
for i:=1 to n-1 do
for j:=i+1 to n do
if a[i,j]>max1 then max1:=a[i,j];
for i:=2 to n do
for j:=1 to i-1 do
if a[i,j]>max2 then max2:=a[i,j];
...



0



0 / 0 / 0

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

Сообщений: 37

02.06.2010, 22:13

 [ТС]

3

хм??? шу-шуть не въеду…



0



STGE

773 / 578 / 324

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

Сообщений: 1,188

02.06.2010, 22:44

4

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

Решение

Altrex, я написал фрагмент программы поиска максимальных элементов над и под главной диагональю.
Ну как, есть контакт ?

Добавлено через 9 минут
Вижу контакта нет.

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
uses crt;
const n=5;
var a: array[1..n,1..n] of integer; 
     i,j: byte; max1,max2: integer;
begin
 randomize;
 clrscr;
 writeln('исходный массив: ');
 for i:=1 to n do
  begin
   for j:=1 to n do
    begin
     a[i,j]:=random(19)-9;
     write(a[i,j]:4);
    end;
   writeln;
  end;
 writeln;
 max1:=a[1,2];   {max1 - максимум над главной диагональю}
 max2:=a[2,1];   {max2 - максимум под главной диагональю}
 for i:=1 to n-1 do
  for j:=i+1 to n do
   if a[i,j]>max1 then max1:=a[i,j];
 for i:=2 to n do
  for j:=1 to i-1 do
   if a[i,j]>max2 then max2:=a[i,j];
 writeln('максимум над главной диагональю = ',max1);
 writeln('максимум под главной диагональю = ',max2);
end.

Добавлено через 1 минуту
Кстати, а каким образом выделить диагональ (цвет, в отдельный вектор, заполнить нулями или ещё что-то) ?



1



0 / 0 / 0

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

Сообщений: 37

02.06.2010, 22:44

 [ТС]

5

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

Кстати, а каким образом выделить диагональ (цвет, в отдельный вектор, заполнить нулями или ещё что-то) ?

цветом



0



STGE

773 / 578 / 324

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

Сообщений: 1,188

02.06.2010, 22:50

6

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

Решение

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
uses crt;
const n=5;
var a: array[1..n,1..n] of integer; 
     i,j: byte; max1,max2: integer;
begin
 randomize;
 clrscr;
 writeln('исходный массив: ');
 for i:=1 to n do
  begin
   for j:=1 to n do
    begin
     if i=j then textcolor(4)
     else textcolor(15);
     a[i,j]:=random(19)-9;
     write(a[i,j]:4);
    end;
   writeln;
  end;
 writeln;
 max1:=a[1,2];   {max1 - максимум над главной диагональю}
 max2:=a[2,1];   {max2 - максимум под главной диагональю}
 for i:=1 to n-1 do
  for j:=i+1 to n do
   if a[i,j]>max1 then max1:=a[i,j];
 for i:=2 to n do
  for j:=1 to i-1 do
   if a[i,j]>max2 then max2:=a[i,j];
 textcolor(15);
 writeln('максимум над главной диагональю = ',max1);
 writeln('максимум под главной диагональю = ',max2);
end.



0



Altrex

0 / 0 / 0

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

Сообщений: 37

02.06.2010, 22:51

 [ТС]

7

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

Pascal
1
uses crt;...end.

выводит только диагональ



0



773 / 578 / 324

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

Сообщений: 1,188

02.06.2010, 22:57

8

Так по условию сказано, что выделить только диагональ и надо.



0



AIEKCAH^P

105 / 102 / 89

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

Сообщений: 201

03.06.2010, 08:14

9

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

Решение

Это же элементарно исправить

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
uses crt;
const n=5;
var a: array[1..n,1..n] of integer;
     i,j: byte; max,min: integer;
begin
 randomize;
 clrscr;
 writeln('исходный массив: ');
 for i:=1 to n do
  begin
   for j:=1 to n do
    begin
     if i=j then textcolor(4)
     else textcolor(15);
     a[i,j]:=random(19)-9;
     write(a[i,j]:4);
    end;
   writeln;
  end;
 writeln;
 min:=a[1,2];   {max1 - минимальный над главной диагональю}
 max:=a[2,1];   {max2 - максимум под главной диагональю}
 for i:=1 to n-1 do
  for j:=i+1 to n do
   if a[i,j]<min then min:=a[i,j];
 for i:=2 to n do
  for j:=1 to i-1 do
   if a[i,j]>max then max:=a[i,j];
 textcolor(15);
 writeln('минимум над главной диагональю = ',min);
 writeln('максимум под главной диагональю = ',max);
 readln;
end.

Миниатюры

Найти минимальный элемент над главной диагональю и максимальный под главной диагональю матрицы
 



1



Мы все знаем, как найти элементы выше главной диагонали в квадратной матрице. А что если матрица не квадратная, а просто прямоугольная и как найти в ней все элементы выше главной диагонали? Обычным if (i <= j) не обойдешься.

Допустим есть такой код, который делает все элементы выше диагонали 0, остальные — рандомные:

int n = 10;
int m = 16;

int** arr = (int**)malloc(sizeof(int*)*m);

for (int i = 0; i < m; i++)
{
    arr[i] = (int*)malloc(sizeof(int)*n);
}

for (int i = 0; i < m; i++)
{
    for (int j = 0; j < n; j++)
    {
        arr[i][j] = rand() % 9 + 1;

        if (i <= j) //Какое-то корректное условие вместо данного
        {
            arr[i][j] = 0;
        }

        printf("%d ", arr[i][j]);
    }
    printf("n");

}

Как правильно решить такую задачу?

Kromster's user avatar

Kromster

13.5k12 золотых знаков43 серебряных знака72 бронзовых знака

задан 30 апр 2017 в 20:17

Владислав's user avatar

9

Если понимать искомую разделительную линию здесь, как диагональ прямоугольника, то можно предложить следующий подход:

 if (i * n < j * m) 
    arr[i][j] = 2;  //выше диагонали
 else if (i * n == j * m)
     arr[i][j] = 1; //точно на диагонали, таких элементов будет всего НОД(n,m) 
 else
     arr[i][j] = 0; //ниже диагонали

для 6×6:

1 2 2 2 2 2
0 1 2 2 2 2
0 0 1 2 2 2
0 0 0 1 2 2
0 0 0 0 1 2
0 0 0 0 0 1

для 6×9:

1 2 2 2 2 2
0 2 2 2 2 2
0 0 2 2 2 2
0 0 1 2 2 2
0 0 0 2 2 2
0 0 0 0 2 2
0 0 0 0 1 2
0 0 0 0 0 2
0 0 0 0 0 0

ответ дан 14 окт 2018 в 15:28

MBo's user avatar

MBoMBo

47.9k1 золотой знак17 серебряных знаков40 бронзовых знаков

следуя определению главной диагонали которая была дана в комментариях — следующий код напечатает все элементы стоящие выше главной диагонали (кроме самих элементов этой диагонали)

constexpr size_t n = 5, m = 4;
int mat[n][m] = 
{
    {1,  2,  3,  4},
    {5,  6,  7,  8},
    {9,  10, 11, 12},
    {10, 11, 12, 13},
    {14, 15, 16, 17}
};

for (size_t i = 0; i < n; i++)
{
    for (size_t j = i + 1; j < m; j++)
    {
        cout << mat[i][j] << ' ';
    }

    cout << 'n';
}

ответ дан 1 мая 2017 в 18:52

ampawd's user avatar

ampawdampawd

3,6841 золотой знак14 серебряных знаков30 бронзовых знаков

1

Частным
случаем матрицы является квадратная
мат
рица,
т.е.
матрица, имеющая одинаковое количество
строк и столбцов (рис.43).

X[1,1]

X[1,2]

X[1,3]

X[2,1]

X[2,2]

X[2,3]

X[3,1]

X[3,2]

X[3,3]

Рис.43

Элементы
матрицы, выделенные на рис.43, называются
главной
диагональю.
Отличительной
особенностью этих
элементов является то, что они имеют
одинаковые
номера строки и столбца.
Поэтому в i-ой
строке индексы элемента
главной диагонали
матрицы Х будут X[i,i].
Для обработки
элементов главной
диагонали
требуется изменять только одну
переменную,
поэтому необходимо всего один
цикл, а не два,
как при обработке
всей матрицы.
На рис.44 показан алгоритм
нахождения суммы положительных
элементов главной диагонали. Ниже
приведён фрагмент
программы к этому алгоритму.

• •

S:=0;

for
i:=1
to
N
do

if
X[i,i]>0 then

S:=S+X[i,i];

writeln(‘S=’
, S);

• • •

Рис.44

3.2.6. Обработка элементов побочной диагонали

Побочная
диагональ

(рис.45)
существует только в квадратной
матрице.

X[1,1]

X[1,2]

X[1,3]

X[2,1]

X[2,2]

X[2,3]

X[3,1]

X[3,2]

X[3,3]

Рис.45

Н
етрудно
заметить, что элемент побочной диагонали
матрицы Х в первой строке имеет индексы
Х[1,N],
во второй строке – Х[2, N-1], в третьей –
Х[3, N-2].
Отсюда можно заключить, что в i-ой
строке элемент побочной диагонали будет
иметь индексы Х[I,
N-I+1].

На
рис.46 показан алгоритм нахождения
количества равных
нулю элементов побочной диагонали. Ниже
представлен фрагмент
программы к этому алгоритму.

Рис.46

• • •

К:=0;

for
i:=1
to
N
do

if
X[i,N-i+1] = 0 then

K:=K+1

writeln(
‘K=’ , K) ;

• • •

3.2.7. Обработка элементов квадратных матриц, расположенных над и под главными и побочными диагоналями

На
рис. 47 приведена схема расположения
элементов относительно главной диагонали.

Г


лавная
диагональ (ГД) Элементы,
расположенные над ГД

гд

Гд

ГД

гд

Элементы,
расположенные под ГД

Рис.
47

Рассмотрим
элементы, расположенные над главной
диагональю матрицы. Для матрицы А
размером 4х4 эти элементы будут иметь
следующие индексы:

в
первой строке: A[1,2],
A[1,3],
A[1,4];

во
второй строке: A[2,3],
A[2,4];

в
третьей строке: A[3,4];

в
четвертой строке элементов нет.

Проанализировав
полученные индексы, можно определить,
что для элементов, расположенных выше
главной диагонали, номер столбца всегда
больше номера строки. Поэтому при
организации циклов для обработки этих
элементов нужно учитывать, что в первой
строке нужно рассматривать элементы,
начиная со второго столбца, во второй
строке – начиная с третьего столбца, в
третьей строке – начиная с четвертого
столбца. В общем случае элементы i-ой
строки нужно обрабатывать, начиная с
элемента из i+1
столбца и заканчивая элементом последнего
(N-го)
столбца.

Для
примера рассмотрим алгоритм нахождения
суммы положительных элементов,
расположенных над главной диагональю
(рис.
48).

S:=0;

For
i :=1 to N-1 do

For
j:= I +1 to N do

If
A[I,j]>0 then

S:=S+A[I,j];

Рис.
48

Рассмотрим
элементы, расположенные под главной
диагональю матрицы. Для матрицы А
размером 4х4 эти элементы будут иметь
следующие индексы:

в
первой строке элементов нет;

во
второй строке: A[2,1],

в
третьей строке: A[3,1],
А[3,2];

в
четвертой строке: A[4,1],
A[4,2],
A[4,3].

Проанализировав
полученные индексы, можно определить,
что для элементов, расположенных ниже
главной диагонали, номер столбца всегда
меньше номера строки. Поэтому при
организации циклов для обработки этих
элементов нужно учитывать, что во второй
строке нужно рассматривать элементы
строки, заканчивая элементами из первого
столбца, в третьей строке – заканчивая
элементами из второго столбца, в четвертой
строке – заканчивая элементами из
третьего столбца. В общем случае элементы
i-ой
строки нужно обрабатывать, начиная с
элемента из первого столбца и заканчивая
рассмотрение элементами из i-1
столбца.

Для
примера рассмотрим алгоритм нахождения
произведения отрицательных элементов,
расположенных под главной диагональю
(рис.
49).

P:=1;

For
i :=2 to N do

For
j:= 1 to I-1 do

If
A[I,j]<0 then

P:=P+A[I,j];

Рис.
49

На
рис. 50 приведена схема расположения
элементов относительно побочной
диагонали.

Э
лементы,
Побочная диагональ(ПД)

р

асположенные
над ПД

пд

Пд

Пд


пд

Элементы,
расположенные под ПД

Рис.
50

Рассмотрим
элементы, расположенные над побочной
диагональю матрицы. Для матрицы А
размером 4х4 эти элементы будут иметь
следующие индексы:

в
первой строке: A[1,1],
A[1,2],
A[1,3];

во
второй строке: A[2,1],
A[2,2];

в
третьей строке: A[3,1];

в
четвертой строке элементов нет.

В
общем случае элементы i-ой
строки нужно обрабатывать, начиная с
элемента первого столбца и заканчивая
элементом из N-i
столбца.

Для
примера рассмотрим алгоритм нахождения
количества нулевых элементов, расположенных
над побочной диагональю (рис.
51).

K:=0;

For
i :=1 to N-1 do

For
j:= 1 to N-i do

If
A[I,j]=0 then

K:=K+1;

Рис.51

Теперь
рассмотрим элементы, расположенные под
побочной диагональю матрицы. Для матрицы
А размером 4х4 эти элементы будут иметь
следующие индексы:

в
первой строке элементов нет;

во
второй строке: A[2,4],

в
третьей строке: A[3,3],
А[3,4];

в
четвертой строке: A[4,2],
A[4,3],
A[4,4].

В
общем случае элементы i-ой
строки нужно обрабатывать, начиная с
элемента из столбца под номером N+2-I
и заканчивая элементом из последнего
(N-го
столбца).

Для
примера рассмотрим алгоритм нахождения
максимального среди элементов,
расположенных под побочной диагональю
(рис. 52).

M
AX:=A[2,N];
{за начальное значения максимума берем
любой элемент, расположенный под побочной
диагональю}

For i :=2 to N do

For
j:= N+2-i to N do

If
A[I,j]>MAX then

MAX:=A[I,j];

Рис. 52

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]

  • #
  • #
  • #
  • #
  • #
  • #
  • #
  • #
  • #
  • #
  • #

Дана квадратная матрица размером 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;
}

Результат работы программы показан ниже:

На занятии будет рассмотрен двумерный массив в 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 голоса
    Рейтинг статьи
    Подписаться
    Уведомить о
    guest

    0 комментариев
    Старые
    Новые Популярные
    Межтекстовые Отзывы
    Посмотреть все комментарии