Skip to content

Двумерный массив. Задача 1

Приветствую вас, уважаемые читатели. Сегодня в рамках рубрики по C++, мы начнем разбирать примеры по двумерным массивам. Скорее всего будет 2 задачи, в которых будут представлены некоторые методы работы с массивами и некоторыми их элементами.

Наша задача заключается в следующем:

Для заданной матрицы размером 8 на 8 найти такие k, что k-ая строка матрицы совпадает с k-ым столбцом.
Найти сумму элементов в тех строках, которые содержат хотя бы один отрицательный элемент.

Начнем:

#include <conio.h>
#include <iostream>
#include <cstdlib>
#include <ctime>

using namespace std;

По традиции подключаем библиотеки и пространство имен.

int main()
{
    setlocale(LC_ALL, "Russian");
    srand(time(0));
    const int N(8);
    int A[N][N];
    int i, j, k = 0,  count = 0;
    for(i = 0; i < N; i++ )
	{
		for(j = 0;  j < N;  j++ )
		{
			A[i][j] = rand()%11 - 3 ;
			cout << A[i][j] << "     ";
		}
		cout << endl;
	}

В первой части main объявляем двумерный массив размерностью 8 на 8, используя константу N, и переменные, которые понадобятся в ходе выполнения программы. Далее в цикле(внимание, цикл по 2 индексам!) заполняем наш массив рандомными числами и выводим на экран. Пока ничего сложного.

for(i = 0; i < N; i++ )
     {
     for(j = 0;  j < N;  j++ )
          {
               if(A[i][j] == A[j][i])
	       {
		    count++;
	       }
	       if (count == N)
	       {
		    cout << " \n " << i + 1 << " строка совпадает с " << i + 1 << " столбцом " << endl;
		    k ++;
	       }
	  }
	  count = 0;
     }
     if(k == 0)
     cout << "\n\n Нет совпадающих строк и столбцов" << endl;

А вот тут уже посложнее! Итак, ну думаю понятно, что если мы сравниваем строки и столбцы, то лучше это делать поэлементно в цикле.

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

Далее после прохождения цикла по j, необходимо счетчик count обнулить, иначе может возникнуть ошибка при следующем заходе в цикл. Также вы заметили, что есть еще один счетчик k. Он отвечает как раз за тот случай, когда не нашлось совпадающих строк и столбцов, и в этом случае мы выведем эту информацию на экран.
И последняя часть кода, она будет попроще:

int result = 0;
for(i = 0; i < N; i++ )
     {
     for(j = 0;  j < N;  j++ )
          {
          if(A[i][j] < 0)
          {
          for(count = 0; count < N; count ++)
               {
               result += A[i][count];
               }
          cout << "\n Сумма элементов на " << i + 1  << " строке равна "<< result << endl;
          j = N;
          result = 0;
          }
     }
}
_getch();
return 0;
}

Заходим в наш массив по циклу: как только мы находим отрицательный элемент, то далее считаем сумму элементов на этой строке(здесь воспользовались дополнительным индексом count), далее переходим на следующую строку в массиве, чтобы это сделать можно написать j = N, и тогда мы перейдем на новую строку. Также не забываем обнулять переменную result, чтобы не было ошибок.

Ну вот и весь код. Разобрали некоторые принципы работы с двумерным массивом C++, также не забудьте, что будет и 2 задача.

И да, чуть не забыл: как вы заметили, пока что весь код мы пишем в main. Это не совсем грамотно с точки зрения программиста, именно поэтому в 5 статье, мы разберем такую же задачу, но уже с правильно написанными функциями, а также будем использовать динамический массив. Это я вам обещаю)

Вот теперь точно все, спасибо за внимание и не забудьте оставлять комментарии!

Скачать исходники

Опубликовано вC++

Будьте первым, кто оставит комментарий

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

    Ваш e-mail не будет опубликован. Обязательные поля помечены *