Скажите правильно ли я думаю-Матрица c++

75
21 сентября 2021, 14:10

Изначально имел код который выводил матрицу.

Я делал 2 столбца по 3 числа в диапазоне от 1 до 6.

Потом начал экспериментировать что бы посмотреть что будет

Изначально было int a[N][M]; cin >> a[i][j]; cout << a[i][j];

Я убрал [M],[j]

и в итоге получаются значения

2 2 2 
4 4 4

Я думаю происходит следующие

a[N] = a[2]
i<=3 j<=2
i=1
j=1 Пишу число 1 a[i] = {1 , Место для второго числа }
j=2 Пишу число 2 a[i] = {2 , Место для второго числа } (Число 1 перезаписало в число 2)
i=2 
j=1 Пишу число 3 a[i] = {2,3}
j=2 Пишу число 4 a[i] = {2,4}(Число 3 перезаписало в число 4)
Так как a[i] = a[2] Но a[2]={2,4}
То i=3 не выполнится (массив уже полный)

Ну и дальше

i<=2 j<=3 a[2] = {2,4}
i=1 (взяли первый элемент массива)
j=1 2
j=2 2
j=3 2
i=2 (взяли 2 элемент массива)
j=1 4
j=2 4
j=3 4

Верно или я себе просто картинку подогнал что бы все сходилось?

Код:

#include <iostream>
using namespace std;
int main()
{
setlocale (LC_ALL, "RUS");
int i,j,N,M;
cout << "Введите количество строк матрицы " << endl;
cin >> N;
cout << "Введите количество столбцов матрицы" << endl;
cin >> M;
int a[N];
cout << "Введите числа матрицы" << endl;
for (i=1;i<=M;i++){
   for(j=1;j<=N;j++){
       cin >> a[i];
   }
}
cout << "Ваша матрица \n" ;
for (i=1;i<=N;i++){
   for(j=1;j<=M;j++){
       cout << a[i] <<"\t";
   }
           cout << endl;
}
return 0;
}
Answer 1

Даже если у вас скомпилируется GNUсное :) int a[N];, то вы все равно делаете ерунду - просто переписываете одни и те же элементы массива...

Опустим то, что M и N могут быть разными и вы можете выскочить за границы массива. И даже то, что элементы массива нумеруются с 0.

Вот только если все это опустить и не обращать внимания - то да, вот тут

for (i=1;i<=M;i++){
   for(j=1;j<=N;j++){
       cin >> a[i];
   }
}

вы просто N раз переписываете a[i] элемент, затирая то, что было введено ранее.

А тут

for (i=1;i<=N;i++){
   for(j=1;j<=M;j++){
       cout << a[i] <<"\t";
   }
   cout << endl;
}

вы выводите

a[1]  a[1]  a[1]  ... (M раз)
a[2]  a[2]  a[2]  ... (M раз)
a[3]  a[3]  a[3]  ... (M раз)
....
a[N]  a[N]  a[N]  ... (M раз)

(Напомню еще раз - в вашем массиве нет элемента a[N]).

READ ALSO
Не правильно работает меню на C++ [закрыт]

Не правильно работает меню на C++ [закрыт]

Хотите улучшить этот вопрос? Обновите вопрос так, чтобы он вписывался в тематику Stack Overflow на русском

70
Как сделать проверку заполнения одного из полей?

Как сделать проверку заполнения одного из полей?

Есть форма, валидация происходит через плагин jquery validation plugin

81
Как понять строчку (JQuery) кода $(&quot;.filter &gt; div*[filter !=&#39;&quot;+$(this).attr(&#39;filter&#39;)+&quot;&#39;]&quot;)

Как понять строчку (JQuery) кода $(".filter > div*[filter !='"+$(this).attr('filter')+"']")

На странице есть кнопки которые определенным образом фильруют картинкиПо нажатию одной из 4 кнопок, срабатывает фильтр и несколько картинок...

87