Чтобы приступить к решению задач, предложенных в этой статье, вам необходимо знать что такое двумерные (многомерные) массивы . Задачи расположены от простой к сложной. Так что, если вы новичок в программировании, начинайте с первой, чтобы лучше разобраться с остальными.
1. Объявить двумерный массив, заполнить целыми числами и показать на экран.
2) Объявить двумерный массив и заполнить его построчно с клавиатуры. После заполнения – показать заполненную матрицу на экран и посчитать сумму элементов отдельно в каждом столбце и каждой строке.
3) Заполнить двумерный массив случайными числами от 10 до 100. Посчитать сумму элементов отдельно в каждой строке и определить номер строки, в которой эта сумма максимальна.
Ваши вопросы, которые возникли при решении задач, оставляйте в комментариях к этой статье.
В метании молота состязается n спортcменов. Каждый из них сделал m бросков. Победителем соревнований объявляется тот спортсмен, у которого максимален наилучший результат по всем броскам. Таким образом, программа должна найти значение максимального элемента в данном массиве, а также его индексы (то есть номер спортсмена и номер попытки).
Входные данные
Программа получает на вход два числа n и m, являющиеся числом строк и столбцов в массиве. Далее во входном потоке идет n строк по m чисел, являющихся элементами массива.
Выходные данные
Программа выводит значение максимального элемента, затем номер строки и номер столбца, в котором он встречается. Если в массиве несколько максимальных элементов, то нужно вывести минимальный номер строки, в которой встречается такой элемент, а если в этой строке таких элементов несколько, то нужно вывести минимальный номер столбца. Не забудьте, что все строки и столбцы нумеруются с 0.
Примеры
входные данные
3 3
3 1 2
1 3 4
3 3 3
выходные данные
4
1 2
И на что вы рассчитываете?
Что кто-то станет решать за вас ваши домашние задания пока вы будете широко гулять?
Так за такое удовольствие деньги платят!
#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;
};
#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;
}
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!";
#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);
}
упс, я взял определенные значения N и M
cout << "[" << i << "]" << "[" << j << "] = " << arr[i][j] << endl
^ этого быть не должно, я забыл удалить
int ourMatrix[MatrixSize][MatrixSize] = {}
зачем тут “{}”?
ОБЪяСНИТЕ ПОЖАЛУЙСТА!!! почему сумма в столбцах выводится не правильно??
#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;
}
Строка “SumColumn[i] += array[j][i];” складывает ещё незаполненные случайными числами ячейки массива.
Я не знаю, актуальна ли ещё тема. последний коммент очень давний. Но меня интересует тот же вопрос, что в предъидущем комменте.
решение задачи 2 работает только с константой и только с тройкой. С остальными числами суммы неверные. Хотелось бы объяснений, если это возможно. И решение с рандомным вводом и с вводом размера массива с клавиатуры
Задача №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;
}
Задача №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;
}
спасибо))
ух, в рандоме сделал описку в циклах по столбцам, подправил
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;
}
ПОДСКАЖИТЕ ПОЖАЛУЙСТА почему неправильно и как это исправить
#include
#include
using namespace std;
int main()
{
setlocale(LC_ALL, “rus”);
int strok=0;
int stolb=0;
int mas[strok][stolb]={};
int strokSUM=0;
int stolbSUM=0;
cout <> strok;
cout <> stolb;
cout << endl;
cout << "==== Заполните матрицу " << strok << "x" << stolb << " ==== " << endl;
cout << endl;
for (int i=0; i<strok; i++){
for (int j=0; j<stolb; j++){
cout << i+1 << "-я строка ";
cout << j+1 <> mas[strok][stolb];
}
cout << endl;
}
for (int i = 0; i < strok; i++){
cout << " | ";
for (int j = 0; j < stolb; j++){
cout << setw(4) << mas[i][j] << " ";
strokSUM[i] += mas[i][j];
stolbSUM[i] += mas[j][i];
}
cout << "|" << endl;
}
return 0;
}
int strok=0;
int stolb=0;
1. Строки и колонки должны иметь константное значение.
const int strok и const int stolb должно быть.
2. Как ты собираешься создать массив?) у тебя 0 строк и колонок.
cout << "Строка, сумма элементов которой максимальна: " << numMaxRow + 1;
Почему именно numMaxRow + 1 (то есть + 1)?
Без +1 некорректно работает, а из +1 нормально. Какую роль здесь играет +1 ?
Корректно работает. В массиве нумерация элементов начинается с 0.
Т.е. то, что мы считаем первой строкой в массиве имеет индекс 0. И для лучшего восприятия мы добавляем +1. Т.е. на выходе строка с индексом 0 будет под номером 1 при отображении в консоли.
Вроде правильно и понятно объяснил))
#include
using namespace std;
int main() {
int arr[100][100];
int n, m, max = 0, sti, stj;
cin >> n >> m;
for (int i = 0; i < n; i++) {
for (int j = 0; j > arr[i][j];
}
}
for (int i = 0; i < n; i++) {
for (int j = 0; j max) {
max = arr[i][j];
}
sti = i + 1;
stj = j + 1;
}
}
cout << "Max = " << max << endl << sti << " " << stj;
}