2015-10-24 3 views
1

Итак, у меня есть эта домашняя работа, чтобы напечатать матрицу с 3 строками и 4-мя колонами до сих пор, что мне это удается (в основном, читая этот форум), так как наш преподаватель в университете не будет объясните, как это делается. Так что сократилось до предела. Мой код выглядит так. Мне удается распечатать матрицу, тогда я действительно не знаю, как это работает, поэтому я пытаюсь просто переместить строку 1 в матрицу temp, а затем переместить ее обратно. Но это действительно не выглядит правильным, но я действительно не знаю другого способа сделать это. Что мне делать?Перестановка 2 строк в матрице C++

int matrix[3][4] = { { 1,2,3,3 },{ 4,5,6,2 },{ 7,8,9,3 } }; 
int temp[3][4]; 

for (int i = 0; i < 3; i++) { 
    for (int j = 0; j < 4; j++) 

     cout << " " << matrix[i][j]; 
    cout << endl; 
} 


for (int i = 0; i < 3; i++) { 

    temp[1][4] = matrix[1][4]; 
    matrix[3][4] = matrix[1][4]; 
    matrix[1][4] = temp[1][4]; 
} 
for (int i = 0; i < 3; i++) { 
    for (int j = 0; j < 4; j++) 

     cout << " " << matrix[i][j]; 
    cout << endl; 
} 


    return 0; 

} 
+1

что вы пытаетесь достичь. PLS сказать. рад помочь :) –

+1

Согласен, что непонятно, что вы хотите делать. Во всяком случае, ваш второй цикл, конечно, ошибочен. Подумайте, что он делает. Он выполняет итерацию 3 раза, без использования переменной 'i', так что все 3 раза совпадают. И что делает итерация? Только это: 'matrix [3] [4] = matrix [1] [4];'. Ничего больше (нормально, он также устанавливает «temp [1] [4]'). Если вы хотите поменять местами, правильный порядок: 'temp = a; a = b; b = temp; '. Итак, в вашем случае: temp [1] [4] = matrix [1] [4]; матрица [1] [4] = матрица [3] [4]; матрица [3] [4] = temp; '. И, честно говоря, вам не нужна матрица переменной temp, вам просто нужна она. –

ответ

2

Существует стандартная функция std::swap, объявленная в заголовке <utility> что позволяет обменивать два массива. В противном случае вы можете написать соответствующий код самостоятельно.

Вот демонстративная программа, которая показывает оба подхода.

#include <iostream> 
#include <utility> 


int main() 
{ 
    const size_t M = 3; 
    const size_t N = 4; 

    int matrix[M][N] = 
    { 
     { 1, 2, 3, 3 }, 
     { 4, 5, 6, 2 }, 
     { 7, 8, 9, 3 } 
    }; 

    for (const auto &row : matrix) 
    { 
     for (int x : row) std::cout << x << ' '; 
     std::cout << std::endl; 
    } 

    std::cout << std::endl; 

    std::swap(matrix[0], matrix[2]); 

    for (const auto &row : matrix) 
    { 
     for (int x : row) std::cout << x << ' '; 
     std::cout << std::endl; 
    } 

    std::cout << std::endl; 

    for (size_t i = 0; i < N; i++) 
    { 
     int tmp = matrix[0][i]; 
     matrix[0][i] = matrix[2][i]; 
     matrix[2][i] = tmp; 
    } 

    for (const auto &row : matrix) 
    { 
     for (int x : row) std::cout << x << ' '; 
     std::cout << std::endl; 
    } 

} 

Его выход

1 2 3 3 
4 5 6 2 
7 8 9 3 

7 8 9 3 
4 5 6 2 
1 2 3 3 

1 2 3 3 
4 5 6 2 
7 8 9 3 
+0

Thx за помощью мне нужна последняя форма с tmp :). Ты лучший. Однако в следующий раз, чтобы обменять col 2 и col 4. Я пробовал ваш метод, но на этот раз он работает над этим, он меняет элементы, но печатает только последнюю строку 7893, и он действительно переменился на 7398, но остальные 2 строки пропускают почему :( для (INT I = 0; г <3; я ++) \t { \t \t \t \t \t Int tmp1 = матрица [I] [1]; \t \t \t матрицу [I] [1] = матрица [I] [ 3]; \t \t \t Матрица [i] [3] = tmp1; Понятия не имею, зачем это цитируется как код !!! Я положил 4 пробела ..... – Nikola

+0

@Nikola Вот цикл для (size_ t i = 0; i

+0

Досудебная работа по-прежнему печатает всего одну строку ( – Nikola

1

если вы хотите обменять вторую строку и третью строку, которую вы можете сделать так, помните, индекс массива начинается с 0 вместо 1

for (int i = 0; i < 4; i++) { 
     temp = matrix[1][i]; 
     matrix[1][i] = matrix[2][i]; 
     matrix[2][i] = temp; 
    } 
Смежные вопросы