Указатель на указатель C++ Классы в С++ Дополнительный сборник задач с решениями



Download 193,71 Kb.
bet6/12
Sana12.03.2020
Hajmi193,71 Kb.
#42219
TuriУказатель
1   2   3   4   5   6   7   8   9   ...   12
Bog'liq
Задачи и решение-Bustanov

Задачи: Двумерные массивы C++


Чтобы приступить к решению задач, предложенных в этой статье, вам необходимо знать что такое двумерные (многомерные) массивы . Задачи расположены от простой к сложной. Так что, если вы новичок в программировании, начинайте с первой, чтобы лучше разобраться с остальными.

  1. Объявить двумерный массив, заполнить целыми числами и показать на экран. 

  2. #include

  3. using namespace std;

  4.  

  5. int main()

  6. {

  7. setlocale(LC_ALL, "rus");

  8.  

  9. const int RowCount = 3;

  10. const int ColumnCount = 4;

  11.  

  12. int ourMatrix[RowCount][ColumnCount] = {};

  13.  

  14. for (int rowNum = 0; rowNum < RowCount; rowNum++)

  15. {

  16. for (int columnNum = 0; columnNum < ColumnCount; columnNum++)

  17. {

  18. ourMatrix[rowNum][columnNum] = rowNum + columnNum;

  19. cout << ourMatrix[rowNum][columnNum] << "  ";

  20. }

  21. cout << endl;

  22. }

  23. return 0;

  24. }

Посмотреть код

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++”

Навигация по комментариям


← Старые комментарии

  1.  Айша:

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

Ответить

    1.  Olej:

01.02.2018 в 21:21

И на что вы рассчитываете?


Что кто-то станет решать за вас ваши домашние задания пока вы будете широко гулять?

Так за такое удовольствие деньги платят!



Ответить

    1.  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;
};

Ответить


    1.  Александр Р:

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;


}

Ответить

    1.  Никита:

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!";

Ответить

    1.  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);
}

Ответить


      1.  Almaz:

16.08.2019 в 23:23

упс, я взял определенные значения N и M



      1.  Almaz:

16.08.2019 в 23:25

cout << "[" << i << "]" << "[" << j << "] = " << arr[i][j] << endl


^ этого быть не должно, я забыл удалить

  1.  techopriest:

26.02.2018 в 12:31

int ourMatrix[MatrixSize][MatrixSize] = {}


зачем тут “{}”?

Ответить

  1.  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;
}

Ответить

    1.  Shom:

28.04.2018 в 10:00

Строка “SumColumn[i] += array[j][i];” складывает ещё незаполненные случайными числами ячейки массива.



Ответить

  1.  Анна:

04.02.2019 в 21:05

Я не знаю, актуальна ли ещё тема. последний коммент очень давний. Но меня интересует тот же вопрос, что в предъидущем комменте.


решение задачи 2 работает только с константой и только с тройкой. С остальными числами суммы неверные. Хотелось бы объяснений, если это возможно. И решение с рандомным вводом и с вводом размера массива с клавиатуры

Ответить

    1.  Александр Р:

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;


}

Ответить

    1.  Александр Р:

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;


}

Ответить

  1.  Анна:

07.02.2019 в 17:47

спасибо))



Ответить

    1.  Александр Р:

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;
}

Ответить

Download 193,71 Kb.

Do'stlaringiz bilan baham:
1   2   3   4   5   6   7   8   9   ...   12




Ma'lumotlar bazasi mualliflik huquqi bilan himoyalangan ©hozir.org 2024
ma'muriyatiga murojaat qiling

kiriting | ro'yxatdan o'tish
    Bosh sahifa
юртда тантана
Боғда битган
Бугун юртда
Эшитганлар жилманглар
Эшитмадим деманглар
битган бодомлар
Yangiariq tumani
qitish marakazi
Raqamli texnologiyalar
ilishida muhokamadan
tasdiqqa tavsiya
tavsiya etilgan
iqtisodiyot kafedrasi
steiermarkischen landesregierung
asarlaringizni yuboring
o'zingizning asarlaringizni
Iltimos faqat
faqat o'zingizning
steierm rkischen
landesregierung fachabteilung
rkischen landesregierung
hamshira loyihasi
loyihasi mavsum
faolyatining oqibatlari
asosiy adabiyotlar
fakulteti ahborot
ahborot havfsizligi
havfsizligi kafedrasi
fanidan bo’yicha
fakulteti iqtisodiyot
boshqaruv fakulteti
chiqarishda boshqaruv
ishlab chiqarishda
iqtisodiyot fakultet
multiservis tarmoqlari
fanidan asosiy
Uzbek fanidan
mavzulari potok
asosidagi multiservis
'aliyyil a'ziym
billahil 'aliyyil
illaa billahil
quvvata illaa
falah' deganida
Kompyuter savodxonligi
bo’yicha mustaqil
'alal falah'
Hayya 'alal
'alas soloh
Hayya 'alas
mavsum boyicha


yuklab olish