Как найти сумму положительных элементов двумерного массива

0 / 0 / 0

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

Сообщений: 9

1

Вычисление суммы всех положительных элементов двумерного массива

18.11.2017, 15:02. Показов 12533. Ответов 12


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

Доброго времени суток. Вынужден обратиться за вашей помощью. Мне необходимо выполнить :»Дан массив C(NxM) с элементами вещественного типа. Написать программу для вычисления суммы всех положительных элементов массива.» Я до конца не понимаю как это сделать, прошу предоставить алгоритм решения



0



SlavaSokolov

174 / 134 / 105

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

Сообщений: 719

18.11.2017, 15:06

2

Evilick, даю подсказку простой алгоритм на C++

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
Создаём масссив
Заполняем значениями
Объявляем переменную, в которой будет хранится сумма
Делаем один цикл for
{
   Второй цикл for
   {
       Берём значение из масива.
       Сравниваем его с нулём.
       Принимаем решение
   }
}
Выводим сумму на экран



1



0 / 0 / 0

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

Сообщений: 9

18.11.2017, 15:53

 [ТС]

3

можно немного подробней



0



Herji

299 / 208 / 174

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

Сообщений: 655

18.11.2017, 16:35

4

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

можно немного подробней

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
Создаём двумерный масссив вещественных чисел С, размерностью MxN
Заполняем значениями
Объявляем вещественную переменную, в которой будет хранится сумма, значение ставим "0"
Делаем один цикл for для столбов (M)
{
   Второй цикл for для строк (N)
   {
       Берём значение из масива. //C[столб][строка]
       Сравниваем его с нулём. //>0
       Принимаем решение // прибавляем значение к сумме, или не прибавляем
   }
}
Выводим сумму на экран

Добавлено через 3 минуты
Вы попробуйте хотя бы, а мы исправим, если что)



0



Evilick

0 / 0 / 0

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

Сообщений: 9

18.11.2017, 16:46

 [ТС]

5

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
#include <iostream>
#include <cmath>
using namespace std;
int main()
{
const int N = 3;
 const int M = 4;
 
 int C[N][M]
 {
     {1,3,5,6},
 {2,6,8,9},
 {23,12,31,11}
 };
 float summa = 0;
 for (int i = 0; i < N; i++) 
 {
for (int j=0;j<M;j++)
{ 
 C[N][M]>0
 
}
 
 
 
    system("pause");
    return 0;
}



0



SlavaSokolov

174 / 134 / 105

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

Сообщений: 719

18.11.2017, 16:49

6

Уже что-то. Вот вы выбрали элемент.

C++
1
C[N][M]

Так дела не делаются.
Вам надо использовать оператор if(условие).

C++
1
2
3
4
if (C[N][M] > 0) //Если условие в скобках верно( в нашем случае если элемент положительный), то выполнить команды, которые записаны в теле (это то, что находится между {})
{
   Что-то сделать//Проявите фантазию. 
}



0



Herji

299 / 208 / 174

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

Сообщений: 655

18.11.2017, 16:59

7

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

Решение

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
#include <iostream>
#include <cmath>
 
using namespace std;
int main()
{
    const int N = 3; //const - молодец)
    const int M = 4;
 
    //int C[N][M] //!!!!!!! =========
    float C[N][M] = // !!!!! прочитайте про типы данных, Вам нужны вещественные, 
                    // раз у Вас float на выходе - поставил тут его же
                    {
                        {1.999,-3.0,-5.123,-6.0134}, // дописал
                        {2.13,-6.234,-8.0,9.1},
                        {-23.3,-12.214,-31.2145,11.36}
                    };
 
    float summa = 0;
 
    for (int i = 0; i < N; i++) 
    {
        for (int j=0;j<M;j++)
        { 
            //C[M][N] - всегда одно число, циклы запускаем для 
            //"пробежки" по всему массиву, меняем переменные i и j, соотв-но,
            //и бегаем по C[i][j]
            if(C[i][j]>0) summa+=C[i][j]; // прибавляем, если больше нуля
        }
    } //следим за скобками
 
    cout << "nn Summ = " << summa; //бонус
 
system("pause");
return 0;
}



1



0 / 0 / 0

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

Сообщений: 9

18.11.2017, 17:07

 [ТС]

8

можно ли модернизировать, что бы весь массив заполнялся рандомными числами, а не только одна ячейка как у меня? И спасибо большое, очень помог)



0



299 / 208 / 174

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

Сообщений: 655

18.11.2017, 17:47

9

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

можно ли модернизировать, что бы весь массив заполнялся рандомными числами

можно, разрешаю.

После объявления массива два цикла по аналогии, к С[i][j] присваивай ((rand()%11) — 5) — даст диапазон [-5;5];
Числа будут целыми и одними и теми же для любого запуска.

Почитай про rand() и srand().
Намёк: вещественные рандомные получатся с использованием деления



0



0 / 0 / 0

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

Сообщений: 3

28.10.2018, 19:24

10

как сделать эту задачу в динамическом массиве?



0



0 / 0 / 0

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

Сообщений: 3

12.11.2018, 12:46

11

Программисты, ау! Помогите кто может, объясните!!



0



JAlHund

98 / 64 / 36

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

Сообщений: 152

12.11.2018, 13:02

12

Тоже самое, только вначале

C++
1
2
3
int** Mas = new int *[n];
    for (int i = 0; i < n; ++i)
        Mas[i] = new int [m];

, а в конце

C++
1
2
3
for (i = 0; i < n; i++)
        delete[] Mas[i];
    delete [] Mas;



0



7427 / 5021 / 2891

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

Сообщений: 15,694

12.11.2018, 15:05

13

JAlHund, по условию числа вещественные

lby, используйте тип double



0



uses crt;
var mas:array [1..10,1..10] of integer;
    i,j,sum:integer;
procedure suma(var mas:array [1..10,1..10] of integer; sum:integer);
begin
         for i:=1 to 10 do
         begin
              for j:=1 to 10 do
                  begin
                       if j mod 2=0 then
                          if mas[i,j]>0 then
                               sum:=sum+mas[i,j];
                  end;
         end;
         write('Сумма положительных элементов четных столбцов = ',sum);
end;
begin
     randomize;
     sum:=0;
     for i:=1 to 10 do
         begin
              for j:=1 to 10 do
                  begin
                       mas[i,j]:=random(101);
                       write(mas[i,j]:3);
                  end;
              writeln;
         end;
     suma(mas,sum);
end.

Содержание

  1. Двумерные массивы
  2. Главная и побочная диагонали матрицы
  3. Пример двумерного массива
  4. Заполнение и вывод на экран
  5. Сумма элементов двумерного массива
  6. Задачи с решением

Двумерные массивы

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

  • i — порядковый номер строки
  • — порядковый номер столбца

В качестве примера на рисунке ниже приведен двумерный массив из целых чисел размером 5 на 5 элементов. Его называют квадратным или матрицей. В прямоугольном — количество строк и столбцов отличаются.

двумерный массив паскаль

Описание двумерного массива на Паскале отличается от одномерного только добавлением второй размерности в квадратных скобках.

Главная и побочная диагонали матрицы

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

Посмотрите на рисунок ниже. Элементы главной диагонали располагаются в ячейках оранжевого цвета. Главный признак, по которому можно их идентифицировать — значения индексов одинаковы.

главная и побочная диагональ - двумерный массив

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

Пример двумерного массива

Заполнение и вывод на экран

Рассмотрим  пример программы на паскале. Заполнение будем проводить случайными числами, так как ручной ввод для отладки программы на Паскале не удобен.

План действий:

  • опишем массив, укажем все необходимые переменные;
  • заполним случайными значениями;
  • сделаем вывод на экран в виде таблицы.

Текст программы

var i,j:integer;
a: array [1..5,1..5]of integer;
begin
  {заполнение случайными числами}
for i:=1 to 5 do 
  for j:=1 to 5 do
      a[i,j]:=random(10);
 {вывод на экран} 
for i:=1 to 5 do 
  begin
  for j:=1 to 5 do
      write(a[i,j]:3);
      writeln;
  end;
end.

Второй вариант немного короче. Отличается от первого тем, что заполнение и вывод проходит в одном цикле. Можно использовать в качестве шаблона для решения однотипных задач на Паскаль.

const n=5; m=5;
var 
i,j:integer;
a: array [1..n,1..m] of integer;
begin
  {заполнение случайными числами и вывод на экран}
for i:=1 to n do 
  begin
  for j:=1 to m do 
    begin
      a[i,j]:=random(10);
      write(a[i,j]:3);
    end;
      writeln;
  end;
{здесь будет код обработки по условию задачи}
end.

При составлении программ, этот код будет присутствовать практически в каждой задаче. Здесь происходит подготовка исходного массива, заданного случайными числами.

двумерный массив паскаль

Результат работы программы

Обработка элементов по условию задачи будет различаться и записываться в продолжении указанного выше текста программы на Паскаль. После обработки следует код вывода результата работы программы.

Сумма элементов двумерного массива

Запишем код обработки элементов, который вычислит их сумму.

Для правильной работы программы на Паскале, необходимо в раздел описания переменных добавить переменную для вычисления суммы S.

Код обработки и вывода результата. Его нужно добавить в текст программы на Паскаль, указанной выше.

s:=0;
  for i:=1 to 5 do 
  for j:=1 to 5 do 
      s:=s+a[i,j];
  write('Сумма элементов = ',s);

Задачи с решением

Задача 1. Вычислить сумму и количество положительных элементов целочисленного массива A[1..n,1..n], находящихся над главной диагональю.

Посмотреть решение

Решение: В этом примере размер матрицы задается через константу, что удобно использовать при отладке программы. Постоянные величины в Паскаль записывают перед разделом Var.

const n=4;
var i,j,s,k:integer;
a: array [1..n,1..n]of integer; 
begin 
{заполнение случайными числами и вывод на экран} 
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; 
  {код обработки по условию задачи} 
  s:=0;k:=0;
  for i:=1 to n do 
  begin 
  for j:=i+1 to n do 
    begin 
      s:=s+a[i,j];
      k:=k+1; 
    end;  
  end; 
  writeln('Сумма элементов = ',s);
  write('Количество элементов = ',k);
end.

Задача 2. Задана квадратная матрица. Получить транспонированную матрицу (перевернутую относительно главной диагонали).

Посмотреть решение

Решение:

const n=5;
var i,j:integer;
a,b: array [1..n,1..n]of integer; 
begin 
{заполнение случайными числами и вывод на экран}
writeln('Исходная матрица'); 
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; 
  {код обработки по условию задачи} 
  for i:=1 to n do 
  for j:=1 to n do   
      b[i,j]:=a[j,i];
  writeln('Транспонированная матрица');
  for i:=1 to n do 
  begin 
  for j:=1 to n do 
    begin  
    write(b[i,j]:3); 
    end; writeln; 
  end;  
end.

Двумерные
массивы 181

Кроме
одномерных массивов, в практических
задачах часто используются и двумерные
массивы. Двумерный массив представляет
собой таблицу из однотипных элементов,
организованную по строкам и столбцам.
Элемент такого массива записывается
так: A[I][J],
где первый индекс I
представляет собой номер строки, а
второй индекс J
является номером столбца. Местоположение
каждого элемента массива в памяти
компьютера определяется этими индексами.

В языке
С/С++ используется следующее описание
двумерного массива:

Тип_элементов
Имя_массива[число строк][число столбцов];

Описание
вполне аналогичное описанию одномерного
массива.

Нахождение суммы элементов массива

Исходная ситуация традиционна для
работы с двумерными массивами: дан
массив A[I,J],
где индексы I,
J
принимают значения от 1 до N.
В данном случае будем считать элементы
массива целыми числами (имеющими тип
int).
Сумма элементов двумерного массива
вычисляется по следующей формуле:

.
(4.1)

Алгоритм
вычисления S
по соотношению (4.1) достаточно простой
и программа, его реализующая, не требует
пояснения с использованием блок-схемы
(как и ряд других программ, рассматриваемых
в примерах этой главы). В листинге 4.1
приведена реализация решения данной
задачи. Для определенности мы установили
размерность массива: 10 строк и 10 столбцов.
Как и в разработках предыдущих глав, в
данной программе обеспечено первоначальное
заполнение элементов массива с помощью
датчика случайных чисел.

Листинг
4.1. Вычисление суммы значений элементов
двумерного массива

#include
<iostream>

using
namespace std;

#include
<conio.h>

#include
<math.h>

#define
N 10

#define
NM 11

void
main()

{

int
A[NM][NM];

int
J,I,S;

for
(I=1;I<=N; I++)

for
(J=1;J<=N; J++)

A[I][J]=rand()%100;

S=0;

for
(I=1;I<=N; I++)

for
(J=1;J<=N; J++)

S=
S + A[I][J];

cout<<«Сумма
элементов двумерного массива=»<<S;

_getch();

}

Сумма элементов с заданными свойствами

Несколько
изменим формулировку предыдущего
задания. Будем считать, что требуется
просуммировать только те элементы,
значения которых являются нечетными
числами, а кроме того, эти значения
должны располагаться в интервале от 10
до 100. В листинге 4.2 приведена программа,
реализующая решение данной задачи.

Листинг
4.2. Вычисление суммы значений элементов
массива при условии

#include
<iostream>

using
namespace std;

#include
<conio.h>

#include
<math.h>

#define
N 10

#define
NM 11

void
main()

{

int
A[NM][NM];

int
J,I,S;

for
(I=1;I<=N; I++)

for
(J=1;J<=N; J++)

A[I][J]=rand()%100;

S=0;

for
(I=1;I<=N; I++)

for
(J=1;J<=N; J++)

if(((A[I][J]%2)==1)&&(A[I][J]>=10)&&(A[I][J]<=100))

S= S + A[I][J];

cout<<«Сумма
элементов двумерного массива=»<<S;

_getch();

}

Расчет среднего арифметического

В данном
случае нам требуется вычислить среднее
арифметическое значение только
положительных значений элементов
двумерного массива. В листинге 4.3
приведена программа, реализующая решение
данной задачи. Здесь мы использовали
две переменные:

  • S —
    для суммы интересующих нас элементов;

  • M —
    количество элементов, по которым
    подсчитывается сумма.

Листинг
4.3. Вычисление среднего арифметического

#include
<iostream>

using
namespace std;

#include
<conio.h>

#include
<math.h>

#define
N 10

#define
NM 11

void
main()

{

int
A[NM][NM];

int
J,I,M;

float
S;

for
(I=1;I<=N; I++)

for
(J=1;J<=N; J++)

A[I][J]=rand()%100;

S=0;

M=0;

for
(I=1;I<=N; I++)

for
(J=1;J<=N; J++)

if (A[I][J]>0)

{ S= S + A[I][J];

M=M+1;}

S=S/M;

cout<<«‘Среднее
арифметическое равно «<<S;

_getch();

}

Соседние файлы в папке файлы по информатике

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

На занятии будет рассмотрен двумерный массив в 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 комментариев
    Старые
    Новые Популярные
    Межтекстовые Отзывы
    Посмотреть все комментарии