Как найти четную строку матрицы в с

0 / 0 / 0

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

Сообщений: 16

1

Как определить четность столбца матрицы и нечетность строки

03.02.2010, 22:32. Показов 7337. Ответов 6


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

Подскажите пожалуйста (если можно то с примером) как 1. обозначать четный столбец, 2. не четную стоку в матрице, а то сказали надо делить на 2, т.е. после знака проценты 2 поставить? так не то получается. Спасибо за любой ответ и помощь.



0



Programming

Эксперт

94731 / 64177 / 26122

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

Сообщений: 116,782

03.02.2010, 22:32

Ответы с готовыми решениями:

Четность/нечетность элементов матрицы
Необходимо задать матрицу 5×5 и найти суммы всех ее четных и нечетных элементов.

Написала…

Определить чётность/нечётность функции
У = Х ² – 8 |х| + 12 функция чётная
«зеркалим» относительно оси ОХ

У = |Х ² – 8 х +…

Определить четность и нечетность слов в строке
Как определить в строке, четное и нечетность слов при помощи библиотек для работы со строками…

Выбрать значение удовлетворяющие условию, определить четность и нечетность
static void Main(string args)
{
int arr = { 6, 14, 5, 8, 3, 34, 56, 78, 6, 4,…

6

easybudda

Модератор

Эксперт PythonЭксперт JavaЭксперт CЭксперт С++

11757 / 7257 / 1720

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

Сообщений: 13,266

03.02.2010, 23:14

2

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
...
const int rows = 5; // строк в матрице
const int cols = 10; // столбцов в матрице
for ( int i = 0; i < rows; ++i ){
  if ( i % 2 ){ // если остаток от деления на 2 не равен нулю
    // нечётная строка
    for ( int j = 0; j < cols; ++j ){
      if ( j & 1 ){ // если младший бит установлен в 1
        // нечётный столбец...
...
//цикл по чётным строкам
for ( int i = 0; i < rows; i += 2 ){
  // цикл по нечётным столбцам
  for ( int j = 1; j < cols; j += 2 )
...



0



qwarta

73 / 73 / 11

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

Сообщений: 238

03.02.2010, 23:18

3

Смотря что делить.
Вот так должно быть правильно:

C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
#include <stdio.h>
 
int main(void)
{
  int matrica[3][3]={1,2,3,
                     4,5,6,
                     7,8,9};
  int i;
                    
  for(i=0;i<3;i++)
  {
    if((i+1)%2==0)
    {
      printf("          %dn",matrica[i][i]);
      printf("          Chetnayn");
    }
    else
    printf("Nechetnayn");
  }
  getch();
  return 0;
}

А вот здесь вчера мы решали задачу на эту тему:
https://www.cyberforum.ru/cpp-… 92013.html



1



Модератор

Эксперт PythonЭксперт JavaЭксперт CЭксперт С++

11757 / 7257 / 1720

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

Сообщений: 13,266

04.02.2010, 00:24

4

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

if((i+1)%2==0)

Кстати, постоянная заморочка – какие элементы массива чётными считать? Которые по по порядку второй, четвёртый и т.д., или у которых индексы 0, 2, 4, 6… ?



1



73 / 73 / 11

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

Сообщений: 238

04.02.2010, 16:38

5

Теперь я точно знаю, что 0 тоже четное число.



0



Быдлокодер

512 / 298 / 85

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

Сообщений: 892

04.02.2010, 17:22

6

qwarta, Согласно логике, 0 – четное число, и я бы рискнул его назвать таким.



0



0 / 0 / 0

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

Сообщений: 16

05.02.2010, 23:37

 [ТС]

7

Огромное всем спасибо!!!!!!!!!!



0



Формулировка задачи:

Подскажите пожалуйста (если можно то с примером) как 1. обозначать четный столбец, 2. не четную стоку в матрице, а то сказали надо делить на 2, т.е. после знака проценты 2 поставить? так не то получается. Спасибо за любой ответ и помощь.

Код к задаче: «Как определить четность столбца матрицы и нечетность строки»

textual

Листинг программы

#include <stdio.h>
 
int main(void)
{
  int matrica[3][3]={1,2,3,
                     4,5,6,
                     7,8,9};
  int i;
                    
  for(i=0;i<3;i++)
  {
    if((i+1)%2==0)
    {
      printf("          %dn",matrica[i][i]);
      printf("          Chetnayn");
    }
    else
    printf("Nechetnayn");
  }
  getch();
  return 0;
}

namespace matrix
{
class Program
{
    static void Main(string[] args)
    {
        Random rand = new Random();
        Console.WriteLine("Введите размерность матрицы MxM :");
        int M = Convert.ToInt32(Console.ReadLine());
        int[,] matrix = new int[M, M];
        int sum = 0;
        for (int j = 0; j < M; j++)
        {
            for (int m = 0; m < M; m++)
            {
                matrix[j, m] = rand.Next(-10, 10);
                Console.Write(matrix[j, m] + " ");

            }
            Console.WriteLine();
            if((j + 1) % 2 == 0)

            {
                for (int i = 0; i < M; i++)
                {
                    sum += matrix[j, i];
                }
            }
        }
        Console.Write(" Сумма четных строк матрицы = {0}", sum);
        Console.ReadKey();
    }


}
}

задан 26 сен 2016 в 5:48

KOD's user avatar

2

matrix.Where((x, i) => i % 2 == 0).SelectMany(x => x).Sum();

естественно матрица должна выглядеть как int[][] matrix = new int[M][]; и создание через for, new каждой строки, используйте Linq

ответ дан 26 сен 2016 в 5:56

Дмитрий Чистик's user avatar

Дмитрий ЧистикДмитрий Чистик

3,10411 серебряных знаков27 бронзовых знаков

2

Возможно на первых парах не стоит смотреть что такое Linq и пытаться понять. Так думаю будет проще: ccылка

       var sum = 0;
        // проходим по всем строкам
        for(int i = 0; i < M; i++){
            // если поппалась четная
            if(i%2 == 0){
                //cуммируем ее пройдя по всем ее элементам
                for(int j =0; j < M ; j++){

                    sum+= matrix[i,j];
                }

            }

        }

        Console.WriteLine(sum);

ответ дан 26 сен 2016 в 7:22

koks_rs's user avatar

koks_rskoks_rs

4,4653 золотых знака24 серебряных знака40 бронзовых знаков

1

Алексеев Е.Р., Чеснокова О.В. Самоучитель по программированию на C/C++.

190

6.2.2 Использование двойных указателей для работы с динамическими матрицами

Основной способ работы с динамическими матрицами базируется на

использовании двойных указателей. Рассмотрим следующий фрагмент программы. int main()

{

int N,M; float **a;

a=new float *[N];

}

С помощью оператора new создан массив из n элементов39, в котором каждый

элемент является адресом, по которому хранится указатель (фактически каждый указатель – адрес строки матрицы). Осталось определить значение элементов массива. Для этого организуем цикл (переменная цикла i изменяется от 0 до N-1), в котором

будет выделяться память для хранения очередной строки матрицы. Адрес этой строки будет записываться в a[i].

for(i=0;i<N;i++) a[i]=new float(M);

После этого определен массив N указателей, каждый из которых адресует массив из M чисел (в данном случае вещественных типа float). Фактически создана

динамическая матрица размера NxM. Обращение к элементу динамической матрицы идет так же, как и к элементу статической матрицы. Для того, чтобы обратиться к элементу ai , j в программе на C++ необходимо указать ее имя, и в квадратных скобках номер строки и столбца a[i][j].

Рассмотрим

основные

операции,

выполняемые

над

матрицами

(статическими

и

динамическими)

при

решении

задач.

Матрицы, как и

массивы,

нужно

вводить

(выводить)

поэлементно. Блок-схема ввода

элементов

матрицы

x[n][m]

изображена на рис. 6.3.

При

выводе

матрицы

элементы

располагаются

построчно, например:

6

9

7

13

5

8

3

8 .

3

7

88

33

55

77

88

37

Рисунок 6.3 Ввод элементов матрицы

Алгоритм построчного вывода элементов матрицы приведен на рис. 6.4.

39 В данном случае массив указателей на float.

Алексеев Е.Р., Чеснокова О.В. Самоучитель по программированию на C/C++.

191

Рисунок 6.4. Блоксхема построчного вывода матрицы

Ниже приведен текст программы, в которой организован ввод и вывод матрицы.

#include <iostream> using namespace std; int main()

{

int i,j,N,M,a[20][20];

cout<<“N=”;

//Ввод количества строк

cin>>N;

cout<<“M=”;

//Ввод количества столбцов

cin>>M;

cout<<“Ввод матрицы A”<<endl;

for(i=0;i<N;i++)

//Цикл по строкам

for(j=0;j<M;j++)

//Цикл по столбцам

cin>>a[i][j];

//Ввод элемента матрицы

cout<<“Вывод матрицы A”<<endl;

//Цикл по строкам

for(i=0;i<N;i++)

{

//Цикл по столбцам

for(j=0;j<M;j++)

cout<<a[i][j]<<“t”;

//Вывод элемента матрицы

cout<<endl;

//Переход на новую строку

}

}

Цикл для построчного вывода матрицы можно записать и так: for(i=0;i<N;cout<<endl,i++)

for(j=0;j<M;j++)

cout<<a[i][j]<<“t”;

При вводе матрицы элементы каждой строки можно разделять пробелами, символами табуляции или Enter40. На рис. 6.5 представлены результаты работы программы.

40 Можно между элементы каждой строки можно разделять пробелами или символами табуляции, а в конце строки нажимать Enter.

Алексеев Е.Р., Чеснокова О.В. Самоучитель по программированию на C/C++.

192

Рисунок 6.5. Вывод матрицы в виде таблицы.

Далее на примерах решения практических задач будут рассмотрены основные алгоритмы обработки матриц и их реализация в C++. Перед этим, напомним некоторые свойства матриц (рис. 6.6):

если номер строки элемента совпадает с номером столбца ( i= j ), это означает что элемент лежит на главной диагонали матрицы;

Рисунок 6.6 Свойства элементов матрицы

если номер строки превышает номер столбца ( i> j ), то элемент находится ниже главной диагонали;

если номер столбца больше номера строки ( i< j ), то элемент находится выше главной диагонали.

элемент лежит на побочной диагонали, если его индексы удовлетворяют

равенству i+ j=n1 ;

неравенство i+ j<n1 характерно для элемента находящегося выше побочной диагонали;

соответственно, элементу лежащему ниже побочной диагонали соответствует выражение i+ j>n1 .

ЗАДАЧА 6.1. Найти сумму элементов матрицы, лежащих выше главной диагонали.

Алгоритм решения данной задачи (рис. 6.7) построен следующим образом: обнуляется ячейка для накапливания суммы (переменная s). Затем с помощью двух

циклов (первый по строкам, второй по столбцам) просматривается каждый элемент матрицы, но суммирование происходит только в том случае если, этот элемент находится выше главной диагонали (при выполнении условия i< j ).

Алексеев Е.Р., Чеснокова О.В. Самоучитель по программированию на C/C++.

193

Рисунок 6.7: Блоксхема задачи 6.1 (алгоритм 1)

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

#include <iostream> using namespace std; int main()

{

int s,i,j,n,m,a[20][20]; cout<<“N=”; cin>>n; cout<<“M=”; cin>>m; cout<<“Input Matrix A”<<endl; for(i=0;i<n;i++)

for(j=0;j<m;j++)

cin>>a[i][j];

for(s=i=0;i<n;i++)

for(j=0;j<m;j++)

if (j>i) s+=a[i][j]; //Если элемент выше //главной диагонали, //то наращиваем сумму.

cout<<“S=”<<s<<endl;

}

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

Таким образом, внешний цикл работает от 0 до N-1, а второй от i+1 до M. Авторы

надеются, что читатель самостоятельно составит программу, соответствующую описанному алгоритму.

Алексеев Е.Р., Чеснокова О.В. Самоучитель по программированию на C/C++.

194

Рисунок 6.8: Блоксхема задачи 6.1 (алгоритм 2)

ЗАДАЧА 6.2. Вычислить количество положительных элементов квадратной матрицы, расположенных по ее периметру и на диагоналях. Напомним, что в квадратной матрице число строк равно числу столбцов.

Прежде чем преступить к решению задачи рассмотрим рисунок 6.9, на котором изображена схема квадратных матриц различной размерности.

Рисунок 6.9:Рисунок к задаче 6.2

Из условия задачи понятно, что не нужно рассматривать все элементы заданной матрицы. Достаточно просмотреть первую и последнюю строки, первый и последний столбцы, а так же диагонали. Все эти элементы отмечены на схеме, причем черным цветом выделены элементы, обращение к которым может произойти дважды. Например, элемент с номером (0,0) принадлежит как к нулевой строке, так и к нклевому столбцу, а элемент с номером (N-1,N-1) находится в последней строке и последнем столбце одновременно. Кроме того, если N – число нечетное (на рисунке 7.8 эта матрица расположена слева), то существует элемент с номером (N/2, N/2), который находится на пересечении главной и побочной диагоналей. При нечетном значении N (матрица справа на рис. 6.9) диагонали не пересекаются.

Итак, разобрав подробно постановку задачи, рассмотрим алгоритм ее решения. Для обращения к элементам главной диагонали вспомним, что номера строк этих элементов всегда равны номерам столбцов. Поэтому, если параметр i изменяется

Алексеев Е.Р., Чеснокова О.В. Самоучитель по программированию на C/C++.

195

циклически от 0 до N-1, то A[i][i] – элемент главной диагонали. Воспользовавшись свойством, характерным для элементов побочной диагонали получим:

i + j+ 1= N → j = N- i-1,

следовательно, для i=0,1,…,N-1 элемент А[i][N-i-1] – элемент побочной диагонали. Элементы, находящиеся по периметру матрицы записываются следующим образом: А[0][i] – нулевая строка, А[N-1][i] – последняя строка и соответственно А[i][0] – нулевой столбец, А[i][N-1] – последний столбец.

Текст программы решения задачи с пояснениями:

#include <iostream> using namespace std; int main()

{

int k,i,j,N,a[20][20]; cout<<“N=”; cin>>N; cout<<“Input Matrix A”<<endl; for(i=0;i<N;i++)

for(j=0;j<N;j++)

cin>>a[i][j];

//k – количество положительных элементов матрицы, //расположенных по ее периметру и на диагоналях. for(i=k=0;i<N;i++)

{

//Элемент лежит на главной диагонали. if(a[i][i]>0)k++;

//Элемент лежит на побочной диагонали. if(a[i][N-i-1]>0)k++;

}

for(i=1;i<N-1;i++)

{

//Элемент находится в нулевой строке. if(a[0][i]>0)k++;

//Элемент находится в последней строке. if(a[N-1][i]>0)k++;

//Элемент находится в нулевом столбце. if(a[i][0]>0)k++;

//Элемент находится в последнем столбце. if(a[i][N-1]>0)k++;

}

//Если элемент, находящийся на пересечении диагоналей //подсчитан дважды, то уменьшить вычисленное значение //к на один.

if ((N%2!=0)&&(a[N/2][N/2]>0))k–; cout<<“k=”<<k<<endl;

}

ЗАДАЧА 6.3. Проверить, является ли заданная квадратная матрица единичной.

Единичной называют матрицу, у которой элементы главной диагонали – единицы, а все остальные – нули. Например,

Алексеев Е.Р., Чеснокова О.В. Самоучитель по программированию на C/C++.

196

1

0

0

0

0

0

1

0

0

0

0

0

1

0

0 .

0

0

0

1

0

(0

0

0

0

1)

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

соединить в одно и составить программу, текст которой приведён далее:

#include <iostream> using namespace std; int main()

{

int pr,i,j,N, **a;

cout<<“N=”; cin>>N;

//Создаём квадратную

a=new int *[N];

for(i=0;i<N;i++)

//динамическую матрицу

a[i]=new int [N];

cout<<“Ввод элементов матрицы A”<<endl; for(i=0;i<N;i++)

for(j=0;j<N;j++)

cin>>a[i][j];

//Предположим, что матрица единичная и присвоим //переменной pr значение 1 (истина). Если значение этой //переменной при выходе из цикла не изменится, это будет //означать, что матрица действительно единичная. for(pr=1,i=0;i<N;i++)

for(j=0;j<N;j++)

if (((i==j) && (a[i][j]!=1)) || ((i!=j) && (a[i][j]!=0))) //Если элемент лежит на главной диагонали и не равен //единице или элемент лежит вне главной диагонали и не //равен нулю, то

{

//Переменной pr присвоить значение 0 (ложь), это будет //означать, что матрица единичной не является, //и выйти из цикла.

pr=0;

break;

}

//Проверка значения переменной pr и вывод соответствующего //сообщения.

if (pr) cout<<“Единичная матрицаn”;

else cout<<“Матрица не является единичнойn”;

}

ЗАДАЧА 6.4. Преобразовать исходную матрицу так, чтобы нулевой элемент каждой строки был заменен средним арифметическим элементов этой строки.

Для решения данной задачи необходимо найти в каждой строке сумму элементов,

Алексеев Е.Р., Чеснокова О.В. Самоучитель по программированию на C/C++.

197

которую разделить на их количество. Полученный результат записать в нулевой

элемент соответствующей строки. Текст программы:

#include <iostream> using namespace std; int main()

{

int i,j,N,M; double S, **a;

//Ввод размерности матрицы. cout<<“N=”; cin>>N; cout<<“M=”; cin>>M; //Выделение памяти под матрицу a=new double *[N];

for(i=0;i<N;a[i]=new double [M],i++); cout<<“Ввод элементов матрицы A”<<endl; for(i=0;i<N;i++)

for(j=0;j<M;cin>>a[i][j],j++);

//Цикл по i завершается записью среднего значения в //нулевой элемент строки и наращиванием i. for(i=0;i<N;a[i][0]=S/M,i++)

for(S=j=0;j<M;j++)

//Вычисление суммы

S+=a[i][j];

//элементов строки.

cout<<“Output Matrix A”<<endl; for(i=0;i<N;cout<<endl,i++)

for(j=0;j<M;cout<<a[i][j]<<“t”,j++);

}

ЗАДАЧА 6.5. Задана матрица A(n,m). Поменять местами ее максимальный и минимальный элементы.

Алгоритм решения этой задачи следующий: находим максимальный элемент матрицы (max) и его индексы (imax, jmax), а также минимальный (min) и его индексы (imin, jmin). После чего элементы A[imax][jmax] и A[imin][jmin] поменяем местами. Для поиска максимального элемента и его индексов в переменную max запишем A[0][0], в переменные imax, jmax, (номер строки и столбца, где находятся максимальный элемент) запишем 0. Затем в двойном цикле (цикл по переменной i – по строкам, цикл по переменной j – по столбцам) перебираем все элементы, и каждый из них сравниваем с максимальным (со значением переменной max). Если текущий элемент массива оказывается больше максимального, то его переписываем в переменную max, а в переменную imax – текущее значение индекса i, в переменную jmax – текущее значение j. Поиск минимального элемента матрицы аналогичен, и отличается только знаком.

Далее представлен текст программы решения задачи 6.5.

#include <iostream> using namespace std; int main()

{

int i,j,imax,jmax,imin,jmin,N,M; double min,max,b, **a; cout<<“N=”; cin>>N;

cout<<“M=”; cin>>M; a=new double *[N]; for(i=0;i<N;i++)

Алексеев Е.Р., Чеснокова О.В. Самоучитель по программированию на C/C++.

198

a[i]=new double [M];

cout<<“Ввод элементов матрицы A”<<endl; for(i=0;i<N;i++)

for(j=0;j<M;j++)

cin>>a[i][j];

//Двойной цикл для поиска максимального элемента для

//поиска максимального, минимального элементов и их

//индексов.

for(max=min=a[0][0],imax=jmax=imin=jmin=i=0;i<N;i++)

for(j=0;j<M;j++)

{

if (a[i][j]>max) {max=a[i][j]; imax=i;jmax=j;} if (a[i][j]<min) {min=a[i][j]; imin=i;jmin=j;}

}

//Обмен двух элементов матрицы. b=a[imax][jmax]; a[imax][jmax]=a[imin][jmin]; a[imin][jmin]=b;

//Вывод преобразованной матрицы. cout<<“Output Matrix A”<<endl; for(i=0;i<N;cout<<endl,i++)

for(j=0;j<M;j++)

cout<<a[i][j]<<“t”;

}

ЗАДАЧА 6.6. Преобразовать матрицу A(m,n) так, чтобы строки с нечетными индексами были упорядочены по убыванию, c четными – по возрастанию.

В связи с нумерацией строк в C++ с 0, необходимо помнить, что нулевая, вторая, четвертая строки упорядочиваются по убыванию, а первая, третья, пятая и т.д. – по возрастанию. Алгоритм решения этой задачи сводится к тому, что уже известный нам по предыдущей главе алгоритм упорядочивания элементов в массиве выполняется для каждой строки матрицы. Блок-схема приведена на рис. 6.10. Текст программы с

комментариями приведён далее.

#include <iostream> using namespace std; int main()

{

int i,j,k,N,M; double b, **a; cout<<“M=”; cin>>M; cout<<“N=”; cin>>N; a=new double *[N]; for(i=0;i<N;i++)

a[i]=new double [M];

cout<<“Ввод элементов матрицы A”<<endl; for(i=0;i<M;i++)

for(j=0;j<N;j++)

cin>>a[i][j];

Алексеев Е.Р., Чеснокова О.В. Самоучитель по программированию на C/C++.

199

Рисунок 6.10: Блоксхема алгоритма задачи 6.6

//Цикл по i – для перебора строк матрицы. for(i=0;i<M;i++)

//Если строка четна, то if(i%2==0)

{

//упорядочиваем элементы строки по возрастанию, for(k=1;k<N;k++)

for(j=0;j<N-k;j++) if(a[i][j]>a[i][j+1])

{

b=a[i][j];

a[i][j]=a[i][j+1];

a[i][j+1]=b;

}

}

else

//иначе, нечетные строки, упорядочиваем по убыванию. for(k=1;k<N;k++)

for(j=0;j<N-k;j++) if(a[i][j]<a[i][j+1])

{

b=a[i][j];

Алексеев Е.Р., Чеснокова О.В. Самоучитель по программированию на C/C++.

200

a[i][j]=a[i][j+1];

a[i][j+1]=b;

}

//Вывод преобразованной матрицы. cout<<“Преобразованная матрица A”<<endl; for(i=0;i<M;cout<<endl,i++)

for(j=0;j<N;cout<<a[i][j]<<“t”,j++);

}

ЗАДАЧА 6.7. Поменять местами элементы главной и побочной диагонали матрицы A(k,k).

Алгоритм решения задачи следующий: перебираем все строки матрицы (цикл по переменной i от 0 до k-1), и в каждой строке меняем местами элементы, расположенные на главной и побочной диагоналях (в i-й строке надо поменять местами элементы A[i]

[i] и А[i][k-i-1]). Текст программы с комментариями:

#include <iostream> using namespace std; int main()

{

int i,j,k; double b,**a;

cout<<“k=”; cin>>k; a=new double *[k];

for(i=0;i<k;a[i]=new double [k],i++); cout<<“Ввод элементов матрицы A”<<endl; for(i=0;i<k;i++)

for(j=0;j<k;cin>>a[i][j],j++); for(i=0;i<k;i++) //Цикл по строкам.

{

//В каждой строке обмен между элементами, лежащими на //главной и побочной диагоналях.

b=a[i][i]; a[i][i]=a[i][k-1-i]; a[i][k-1-i]=b;

}

//Вывод преобразованной матрицы. cout<<“Преобразованная матрица A”<<endl; for(i=0;i<k;cout<<endl,i++)

for(j=0;j<k;cout<<a[i][j]<<“t”,j++);

}

ЗАДАЧА 6.8. Заполнить матрицу A(6,6) числами 1 до 36 следующим образом

1

2

3

4

5

6

12

11

10

9

8

7

13

14

15

16

17

18 .

24

23

22

21

20

19

25

26

27

28

29

30

(36

35

34

33

32

31)

Последовательно построчно заполняем матрицу возрастающей арифметической последовательностью 1,2,3,… , 36 . Четные строки заполняем от 0-го элемента

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

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

Задача:

Напишите программу, которая принимает с клавиатуры число N, создает матрицу размера N на N, заполненную случайными числами, и выводит ее на экран. Затем определите количество четных чисел в этой матрице.

Все просто. Сначала стандартные операции по заполнению массива и выводу его на экран, а весь смысл в этом условии:

if (a[i][j] % 2 == 0 && a[i][j] !=0)
{
   sum++;
}

Если число делится на 2 без остатка и оно не 0, то прибавляем единичку, таким образом полный код будет такой:

#include <iostream>
#include <ctime>

using namespace std;

int main()
{
	srand(time(NULL));
	int n = 0; 
	int sum = 0;
	cin >> n; // Считываем с клавиатуры n
	int **a = new int* [n]; // Создаем массив указателей
	for (int i = 0; i < n; i++)
	{
		a[i] = new int [n]; // Создаем элементы
	}
	// А дальше работа как с обычным массивом. 
	for (int i = 0; i < n; i++)
	{
		for (int j = 0; j < n; j++)
		{
			a[i][j] = rand() % 10;
			cout << a[i][j] << " "; // Вывести элементы на консольку
			if (a[i][j] % 2 == 0 && a[i][j] !=0)
			{
				sum++;
			}

		}
		cout << endl; // Двумерный массив. Строка кончилась, переводим строку и на консоли
	}

	cout << "sum =" << sum << endl;
	// Удаление массива
	for (int i = 0; i < n; i++)
	{
		delete[]a[i]; // Удаляем каждый элемент
	}
	delete [] a; // А потом массив
	return 0;
}

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