Приветствую вас, уважаемые читатели. Сегодня в рамках рубрики по 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 статье, мы разберем такую же задачу, но уже с правильно написанными функциями, а также будем использовать динамический массив. Это я вам обещаю)
Вот теперь точно все, спасибо за внимание и не забудьте оставлять комментарии!
Скачать исходники
Будьте первым, кто оставит комментарий