Задачи: Двумерные массивы C++
Чтобы приступить к решению задач, предложенных в этой статье, вам необходимо знать что такое двумерные (многомерные) массивы . Задачи расположены от простой к сложной. Так что, если вы новичок в программировании, начинайте с первой, чтобы лучше разобраться с остальными.
Объявить двумерный массив, заполнить целыми числами и показать на экран.
#include
using namespace std;
int main()
{
setlocale(LC_ALL, "rus");
const int RowCount = 3;
const int ColumnCount = 4;
int ourMatrix[RowCount][ColumnCount] = {};
for (int rowNum = 0; rowNum < RowCount; rowNum++)
{
for (int columnNum = 0; columnNum < ColumnCount; columnNum++)
{
ourMatrix[rowNum][columnNum] = rowNum + columnNum;
cout << ourMatrix[rowNum][columnNum] << " ";
}
cout << endl;
}
return 0;
}
Посмотреть код
2) Объявить двумерный массив и заполнить его построчно с клавиатуры. После заполнения – показать заполненную матрицу на экран и посчитать сумму элементов отдельно в каждом столбце и каждой строке.
#include
#include
using namespace std;
int main()
{
setlocale(LC_ALL, "rus");
const int MatrixSize = 3;
int ourMatrix[MatrixSize][MatrixSize] = {};
int rowSum[MatrixSize] = {}; // для записи суммы по строкам
int columnSum[MatrixSize] = {}; // ... по столбцам
cout << "Заполните матрицу " << MatrixSize << 'х' << MatrixSize << " числами построчно.\n";
for (int rowNum = 0; rowNum < MatrixSize; rowNum++)
{
for (int columnNum = 0; columnNum < MatrixSize; columnNum++)
{
cout << rowNum + 1 << "-я строка ";
cout << columnNum + 1 << "-й столбец: ";
cin >> ourMatrix[rowNum][columnNum];
}
cout << endl;
}
// вывод на экран + подсчет суммы
for (int rowNum = 0; rowNum < MatrixSize; rowNum++)
{
cout << " | ";
for (int columnNum = 0; columnNum < MatrixSize; columnNum++)
{
cout << setw(4) << ourMatrix[rowNum][columnNum] << " ";
rowSum[rowNum] += ourMatrix[rowNum][columnNum];
columnSum[rowNum] += ourMatrix[columnNum][rowNum];
}
cout << "|" << endl;
}
cout << "\nСумма по строкам!\n";
for (int i = 0; i < MatrixSize; i++)
{
cout << i + 1 << "-я строка: " << rowSum[i] << endl;
}
cout << "\nСумма по столбцам!\n";
for (int i = 0; i < MatrixSize; i++)
{
cout << i + 1 << "-й столбец: " << columnSum[i] << endl;
}
return 0;
}
Посмотреть код
3) Заполнить двумерный массив случайными числами от 10 до 100. Посчитать сумму элементов отдельно в каждой строке и определить номер строки, в которой эта сумма максимальна.
#include
#include
#include
#include
using namespace std;
int main()
{
setlocale(LC_ALL, "rus");
const int MatrixSize = 7;
int ourMatrix[MatrixSize][MatrixSize] = {};
int rowSum[MatrixSize] = {}; // для записи сумм в строках
int numMaxRow = 0; // номер строки с максимальной суммой
srand(time(NULL));
for (int rowNum = 0; rowNum < MatrixSize; rowNum++)
{
cout << " | ";
for (int columnNum = 0; columnNum < MatrixSize; columnNum++)
{
ourMatrix[rowNum][columnNum] = 10 + rand() % 91;
cout << setw(4) << ourMatrix[rowNum][columnNum] << " ";
}
cout << "|" << endl;
}
// подсчет суммы отдельно в каждой строке
for (int rowNum = 0; rowNum < MatrixSize; rowNum++)
{
for (int columnNum = 0; columnNum < MatrixSize; columnNum++)
{
rowSum[rowNum] += ourMatrix[rowNum][columnNum];
}
}
cout << "\nСумма по строкам!\n";
for (int i = 0; i < MatrixSize; i++)
{
cout << i + 1 << "-я строка: " << rowSum[i] << endl;
}
for (int i = 1; i < MatrixSize; i++)
{
if (rowSum[i] > rowSum[numMaxRow])
{
numMaxRow = i;
}
}
cout << "Строка, сумма элементов которой максимальна: " << numMaxRow + 1;
cout << endl << endl;
return 0;
}
Посмотреть код
Ваши вопросы, которые возникли при решении задач, оставляйте в комментариях к этой статье.
4.3
26
13.08.2014 | Posted in Задачи по программированию на C++. Практика программирования.
Навигация по записям
Задачи: Функции C++Указатели С++. Часть 1
81 thoughts on “Задачи: Двумерные массивы C++” Навигация по комментариям
← Старые комментарии
Айша:
01.02.2018 в 07:46
В метании молота состязается n спортcменов. Каждый из них сделал m бросков. Победителем соревнований объявляется тот спортсмен, у которого максимален наилучший результат по всем броскам. Таким образом, программа должна найти значение максимального элемента в данном массиве, а также его индексы (то есть номер спортсмена и номер попытки).
Входные данные
Программа получает на вход два числа n и m, являющиеся числом строк и столбцов в массиве. Далее во входном потоке идет n строк по m чисел, являющихся элементами массива.
Выходные данные
Программа выводит значение максимального элемента, затем номер строки и номер столбца, в котором он встречается. Если в массиве несколько максимальных элементов, то нужно вывести минимальный номер строки, в которой встречается такой элемент, а если в этой строке таких элементов несколько, то нужно вывести минимальный номер столбца. Не забудьте, что все строки и столбцы нумеруются с 0.
Примеры
входные данные
3 3
3 1 2
1 3 4
3 3 3
выходные данные
4
1 2
Ответить
Olej:
01.02.2018 в 21:21
И на что вы рассчитываете?
Что кто-то станет решать за вас ваши домашние задания пока вы будете широко гулять?
Так за такое удовольствие деньги платят!
Ответить
Oleg:
13.03.2018 в 18:52
#include “stdafx.h”
#include
#include
#include
#include // setw(отступ)
using namespace std;
int main() {
setlocale(0, “”);
srand(time(NULL));
const int ROWSIZE = 3;
const int COLSIZE = 3;
int arr[ROWSIZE][COLSIZE] = {};
// заполнение массива с клавиатуры
/*
for (int rowNum = 0; rowNum < ROWSIZE; rowNum++) {
for (int colNum = 0; colNum < COLSIZE; colNum++) {
cout << "Пожалуйста, введите исходные значения массива: ";
cout << rowNum + 1 << "-я строка ";
cout << colNum + 1 <> arr[rowNum][colNum];
}
}
*/
// Заполняем массив случайными числами
for (int rowNum = 0; rowNum < ROWSIZE; rowNum++) {
cout << "Строка " << rowNum + 1 << ": ";
for (int colNum = 0; colNum < COLSIZE; colNum++) {
arr[rowNum][colNum] = 1 + rand() % 9;
cout << setw(2) << arr[rowNum][colNum];
}
cout << endl;
}
// Находим максимальное число, а если их несколько то находим самую первую строку и столбец, где оно встречается
int row[ROWSIZE]{};
int col[COLSIZE]{};
int temp = 0;
int temp1 = 0;
for (int r = 0; r < ROWSIZE; r++) {
for (int c = 0; c < COLSIZE; c++) {
if (col[0] < arr[c][r]) {
col[0] = arr[c][r];
temp = r;
temp1 = c;
}
else c;
}
}
cout << "Максимальное: " << col[0] << " COL: " << temp1 + 1 << " ROW: " << temp + 1 << endl;
system("pause");
return 0;
};
Ответить
Александр Р:
07.02.2019 в 16:48
#include
#include
#include
#include
#include
int main ()
{
setlocale(LC_ALL, “rus”);
srand(time(NULL));
int N, M;
printf (“Введите количество спортсменов: “);
scanf (“%d”, &N);
printf (“Введите количество попыток: “);
scanf (“%d”, &M);
int **A = new int *[N];
for (int count = 0; count < N; count++)
A[count] = new int [N];
int nMax = 0, iMax, jMax;
int i, j;
printf ("\nТаблица с результатами: \n");
for (i = 0; i < N; i++)
{
printf ("Спортсмен №%d: ", i+1);
for (j = 0; j < M; j++)
{
A[i][j] = rand()%25 + 1;
printf ("%3d ", A[i][j]);
if(nMax == A[i][j])
{
if(i < iMax && j < jMax)
nMax = A[i][j];
else
nMax != A[i][j];
}
if(nMax < A[i][j])
{
nMax = A[i][j];
iMax = i;
jMax = j;
}
}
printf ("\n");
}
printf ("\nЛучший результат – %d у спорстмена №%d в попытке №%d!", nMax, iMax + 1, jMax + 1);
for (int count = 0; count < N; count++)
delete [] A[count];
return 0;
}
Ответить
Никита:
30.04.2019 в 22:02
int main()
{
setlocale(LC_ALL, “rus”);
SetConsoleCP(1251);
SetConsoleOutputCP(1251);
srand(time(NULL));
const int n = 5, m = 7;
int MM[n][m]{}, max = 0,r,s,R,S;
for (int i = 0; i < n; i++)
{
for (int j = 0; j < m; j++)
{
MM[i][j] = 15 + rand() % 55;
cout << MM[i][j] << "|";
}
cout << endl;
}
for (int i = 0; i < n; i++)
{
for (int j = 0; j max)
{
max = MM[i][j];
r = i;
s = j;
}
if (max==MM[i][j] && i != r && j != s)
{
cout << "Opapa! U nas 2 Pobeditelya!\n";
R = i;
S = j;
cout << "Pobedu delyat uchastnik #" << r + 1 << " i uchastnik #" << R + 1 << " S rezultatom " << max << " metrov!\n Pozdravlyaem!";
return 0;
}
}
}
cout << "Pobedil uchastnik #" << r+1 << " s " << s+1 << " poputki, S rezultatom " << max << " metrov!\n Pozdravlyaem!";
Ответить
Almaz:
16.08.2019 в 23:22
#include
#include
using namespace std;
int main()
{
srand(time(NULL));
setlocale(LC_ALL, “Rus”);
const int N = 10, M = 15;
int arr[N][M], minn=999999, countmx=0, max=-1, digitsr, digitsl;
bool flag = false;
for (int i = 0; i < N; i++)
{
for (int j = 0; j < M; j++)
{
arr[i][j] = rand() % 150;
cout << "[" << i << "]" << "[" << j << "] = " << arr[i][j] << endl;
if (arr[i][j] == max)
{
countmx += 1;
if (!flag)
{
minn = j;
flag = true;
}
if (j max)
{
max = arr[i][j];
digitsr = i;
digitsl = j;
}
}
}
if (countmx != 0)
cout << "Мин. номер столбца = " << minn;
else
{
cout << "Максимальное значение элемента = " << max << endl;
cout << "Номер строки = " << digitsr << endl;
cout << "Номер столбца = " << digitsl;
}
return (0);
}
Ответить
Almaz:
16.08.2019 в 23:23
упс, я взял определенные значения N и M
Almaz:
16.08.2019 в 23:25
cout << "[" << i << "]" << "[" << j << "] = " << arr[i][j] << endl
^ этого быть не должно, я забыл удалить
techopriest:
26.02.2018 в 12:31
int ourMatrix[MatrixSize][MatrixSize] = {}
зачем тут “{}”?
Ответить
Dmitry:
09.03.2018 в 13:48
ОБЪяСНИТЕ ПОЖАЛУЙСТА!!! почему сумма в столбцах выводится не правильно??
#include
#include
using namespace std;
int main()
{
setlocale(LC_ALL, “rus”);
srand(time(NULL));
const int RowCount = 10;
int array[RowCount][RowCount] = {};
int SumRow[RowCount] = {}, SumColumn[RowCount] = {};
for (int i = 0; i < RowCount; i++) {
for (int j = 0; j < RowCount; j++) {
array[i][j] = i*j;
cout << setw(4) << array[i][j] << " ";
SumRow[i] += array[i][j];
SumColumn[i] += array[j][i];
}
cout << endl;
}
for (int i = 0; i < 10; i++) {
cout << "Сумма в " << i + 1 << " строке = " << SumRow[i] << " ";
cout << "Сумма в " << i + 1 << " столбце = " << SumColumn[i] << endl;
}
system("pause");
return 0;
}
Ответить
Shom:
28.04.2018 в 10:00
Строка “SumColumn[i] += array[j][i];” складывает ещё незаполненные случайными числами ячейки массива.
Ответить
Анна:
04.02.2019 в 21:05
Я не знаю, актуальна ли ещё тема. последний коммент очень давний. Но меня интересует тот же вопрос, что в предъидущем комменте.
решение задачи 2 работает только с константой и только с тройкой. С остальными числами суммы неверные. Хотелось бы объяснений, если это возможно. И решение с рандомным вводом и с вводом размера массива с клавиатуры
Ответить
Александр Р:
07.02.2019 в 16:40
Задача №2 с рандомным вводом.
#include
#include
#include
#include
int main ()
{
setlocale(LC_ALL, “rus”);
srand(time(NULL));
int N, M, i, j;
printf (“Введите количество строк двумерного массива: “);
scanf (“%d”, &N);
printf (“Введите количество столбцов двумерного массива: “);
scanf (“%d”, &M);
int **A = new int *[N];
for (int count = 0; count < N; count++)
A[count] = new int [N];
printf ("\nИсходный двухмерный массив: \n");
for (i = 0; i < N; i++)
{
for (j = 0; j < N; j++)
{
A[i][j] = rand()%99+ 1;
printf ("%4d ", A[i][j]);
}
printf ("\n");
}
printf ("\nСумма элементов по строкам\n");
int sumi;
for (i = 0; i < N; i++)
{
sumi = 0;
for (j = 0; j < N; j++)
{
sumi += A[i][j];
}
printf ("%d-я строка: %d \n", i, sumi);
}
printf ("\nСумма элементов по столбцам\n");
int sumj;
for (j = 0; j < N; j++)
{
sumj = 0;
for (i = 0; i < N; i++)
{
sumj += A[i][j];
}
printf ("%d-й столбец: %d \n", j, sumj);
}
for (int count = 0; count < N; count++)
delete [] A[count];
return 0;
}
Ответить
Александр Р:
07.02.2019 в 16:45
Задача №2 с вводом значений массива с клавиатуры
#include
int const N = 4;
int main ()
{
setlocale(LC_ALL, “rus”);
int A[N][N];
int i, j;
printf (“\nÇàïîëíèòå äâóìåðíûé ìàññèâ %dx%d ÷èñëàìè ïîñòðî÷íî: \n”, N, N);
for (i = 0; i < N; i++)
{
for (j = 0; j < N; j++)
{
printf ("A[%d][%d] = ", i, j);
scanf ("%d", &A[i][j]);
}
}
printf ("\nÈñõîäíûé äâóìåðíûé ìàññèâ: \n");
for (i = 0; i < N; i++)
{
for (j = 0; j < N; j++)
{
printf ("%2d", A[i][j]);
}
printf ("\n");
}
printf ("\nÑóììà ýëåìåíòîâ ïî ñòðîêàì\n");
int sumi;
for (i = 0; i < N; i++)
{
sumi = 0;
for (j = 0; j < N; j++)
{
sumi += A[i][j];
}
printf ("%d-ÿ ñòðîêà: %d \n", i, sumi);
}
printf ("\nÑóììà ýëåìåíòîâ ïî ñòîëáöàì\n");
int sumj;
for (j = 0; j < N; j++)
{
sumj = 0;
for (i = 0; i < N; i++)
{
sumj += A[i][j];
}
printf ("%d-é ñòîëáåö: %d \n", j, sumj);
}
return 0;
}
Ответить
Анна:
07.02.2019 в 17:47
спасибо))
Ответить
Александр Р:
08.02.2019 в 09:55
ух, в рандоме сделал описку в циклах по столбцам, подправил
int main ()
{
setlocale(LC_ALL, “rus”);
srand(time(NULL));
int N, M, i, j;
printf (“Введите количество строк двумерного массива: “);
scanf (“%d”, &N);
printf (“Введите количество столбцов двумерного массива: “);
scanf (“%d”, &M);
int **A = new int *[N];
for (int count = 0; count < N; count++)
A[count] = new int [N];
printf ("\nИсходный двухмерный массив: \n");
for (i = 0; i < N; i++)
{
for (j = 0; j < M; j++)
{
A[i][j] = rand()%99+ 1;
printf ("%4d ", A[i][j]);
}
printf ("\n");
}
printf ("\nСумма элементов по строкам\n");
int sumi;
for (i = 0; i < N; i++)
{
sumi = 0;
for (j = 0; j < M; j++)
{
sumi += A[i][j];
}
printf ("%d-я строка: %d \n", i, sumi);
}
printf ("\nСумма элементов по столбцам\n");
int sumj;
for (j = 0; j < N; j++)
{
sumj = 0;
for (i = 0; i < M; i++)
{
sumj += A[i][j];
}
printf ("%d-й столбец: %d \n", j, sumj);
}
for (int count = 0; count < N; count++)
delete [] A[count];
return 0;
}
Ответить
Do'stlaringiz bilan baham: |