Mail.ruПочтаМой МирОдноклассникиВКонтактеИгрыЗнакомстваНовостиКалендарьОблакоЗаметкиВсе проекты

Объясните пожалуйста ситуацию в коде на c++. а все не надо, я понял

Azamat Yakupov Азамат Ученик (196), открыт 18 часов назад
Почему фрагмент кода
int k, l;
cin >> k >> l;
int k1;
for (int i = 0; i < n; i++){
for(int j = 0; j < m; j++){
k1 = a[i][k];
a[i][k]=a[i][l];
a[i][l] = k1;
}
}
меняет столбцы в двумерном массиве, а

int k, l;
cin >> k >> l;
int k1;
for (int i = 0; i < n; i++){
for(int j = 0; j < m; j++){
a[i][k1] = a[i][k];
a[i][k]=a[i][l];
a[i][l] = a[i][k1];
}
}
не меняет?


если что вот полный код:
#include <iostream>
#include <cmath>
using namespace std;

int main()
{
int n, m;
cin >> n >>m;
int a[100][100];
for (int i = 0; i < n; i++){
for(int j = 0; j < m; j++){
cin >> a[i][j];
}
}
int k, l;
cin >> k >> l;
int k1;
for (int i = 0; i < n; i++){
for(int j = 0; j < m; j++){
k1 = a[i][k];
a[i][k]=a[i][l];
a[i][l] = k1;
}
}

for (int i = 0; i < n; i++){
for(int j = 0; j < m; j++){
cout << a[i][j] << " ";
}
cout << endl;
}
return 0;
}
2 ответа
Андрей Высший разум (466405) 18 часов назад
Во первых, потому, что для каждого значения i ты m раз меняешь местами a[i][k] и a[i][l]. И если m чётное, по результату обменов ты получаешь массив БЕЗ изменений.

Столбцы меняются местами в массиве ОДНИМ циклом:
 int k, l;
cin >> k >> l;
for (int i = 0; i < n; i++){
int t = a[i][k];
a[i][k] = a[i][l];
a[i][l] = t;
}

Во вторых, чему равно k1, когда ты делаешь a[i][k1] = a[i][k]; и a[i][l] = a[i][k1];? У тебя в k1 абсолютно произвольное значение, т.к. переменную ты не инициализировал. И при выполнении a[i][k1] происходит обращение к какой-то произвольной ячейке памяти с непредсказуемыми последствиями.
Николай Веселуха Высший разум (370948) 14 часов назад
 #include <iomanip> 
#include <iostream>
#include <random>
#include <vector>

using namespace std;

int main() {
uniform_int_distribution<> uid(10, 99);
mt19937 gen{ random_device()() };
size_t n, m;
cin >> n >> m;
vector<vector<int>> matrix(n, vector<int>(m));
for (auto& row : matrix) {
for (auto& value : row) {
value = uid(gen);
cout << ' ' << setw(4) << value;
}
cout.put('\n');
}
cout.put('\n');
size_t k, l;
cin >> k >> l;
for (auto& row : matrix) {
swap(row[k], row[l]);
}
for (const auto& row : matrix) {
for (auto value : row) {
cout << ' ' << setw(4) << value;
}
cout.put('\n');
}
}
Похожие вопросы