Форум программистов, компьютерный форум CyberForum.ru

Поменять местами элементы указанных столбцов - C++

Восстановить пароль Регистрация
 
fleks84
0 / 0 / 0
Регистрация: 04.02.2012
Сообщений: 11
04.02.2012, 19:31     Поменять местами элементы указанных столбцов #1
Дано задание: "Дан двухмерный массив целых чисел. Написать программу которая вводит два целых неотрицат числа соотв номерам столбцов и меняет местами элементы указанных столбцов"
Вот что пока получается

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
//Заполняем двумерный массив с клавиатуры
 
#include <iostream>
#include <iomanip>
#include <conio>
 
using namespace std;
 
 
//функция выводит массив на экран
void printArray(int array[][2], const int row, const int column)
{
    cout << "\n\nPoluchennyj massiv\n";
 
    for(int i = 0; i < row; i++)
    {
        for(int j = 0; j < column; j++)
            cout << setw(4) << array[i][j];
 
        cout << endl;
    }
}
 
int main()
{
 
//просим ввести номера строк
    int stroka1, stroka2;
 
    cout << "Vvedite nomer 1 stolbca";
    cin >>  stroka1;
    cout << "Vvedite nomer 2 stolbca";
    cin >>  stroka2;
    cout << endl;
 
 
 
    const int row = 2, column = 2; //размеры массива
    int array[row][column];        //двумерный массив
 
    for(int i = 0; i < row; i++)   //строки массива
    {
        cout << "Vvodim " << i + 1 << " stroku\n"; //подсказка
 
        for(int j = 0; j < column; j++)   //столбцы массива
        {
            cout << "Vvedite celoe chislo: ";  //выводим подсказку
            cin >> array[i][j];                //запоминаем введенное значение
        }
    }
 
    //инверсия массива
/*void invertArray(int arr[], const int len)
{
    int temp;
 
    for(int i = 0; i < len / 2; i++)
    {
        temp = arr[i];
        arr[i] = arr[len - i - 1];
        arr[len - i - 1] = temp;
    }
}
*/
    printArray(array, row, column);   //печатаем полученный массив
    
    getch();
    return 0;
}
Надергал с интернета, сам в С++ не разбираюсь, кто чем может ..
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
04.02.2012, 19:31     Поменять местами элементы указанных столбцов
Посмотрите здесь:

C++ В заданной целочисленной матрице поменять местами столбец с номером 1 и последний из столбцов
[C++] Поменять местами столбец с номером 1 и последний из столбцов, содержащих только положительные элементы C++
Поменять местами столбец с номером 1 и последний из столбцов, содержащих только положительные элементы C++
Поменять местами первый и последний элементы. Все единичные элементы массива заменить нулями C++
В матрицах поменять местами значения заданных столбцов C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
soon
 Аватар для soon
2536 / 1301 / 81
Регистрация: 09.05.2011
Сообщений: 3,086
Записей в блоге: 1
04.02.2012, 19:49     Поменять местами элементы указанных столбцов #2
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
#include <iomanip>
#include <iostream>
#include <algorithm>
#include <cstdlib>
#include <ctime>
 
int main()
{
    std::srand(std::time(nullptr));
    const std::size_t rows = 5;
    const std::size_t cols = 5;
    int arr[rows][cols];
    for(auto& i: arr)
    {
        for(auto& j: i)
        {
            j = std::rand() % 21;
            std::cout << std::setw(4) << j;
        }
        std::cout << std::endl;
    }
    std::size_t fst, snd;
    std::cin >> fst >> snd;
    if(std::max(fst, snd) > cols)
    {
        std::cout << "input error" << std::endl;
        return 0;
    }
    for(std::size_t i = 0; i < rows; ++i)
        std::swap(arr[i][fst], arr[i][snd]);
    std::cout << "-------------------" << std::endl;
    for(const auto& i: arr)
    {
        for(const auto& j: i)
            std::cout << std::setw(4) << j;
        std::cout << std::endl;
    }
    return 0;
}
http://liveworkspace.org/code/a5eafe...2806c584d00ed4
fleks84
0 / 0 / 0
Регистрация: 04.02.2012
Сообщений: 11
04.02.2012, 20:07  [ТС]     Поменять местами элементы указанных столбцов #3
Супер! Правда у меня на Builder 6 12 ошибок это не умаляет проделанной работы.
Мне бы попроще чего нибудь, профессионалы, примерно так же как оформлено мое первое сообщение.
soon
 Аватар для soon
2536 / 1301 / 81
Регистрация: 09.05.2011
Сообщений: 3,086
Записей в блоге: 1
04.02.2012, 20:24     Поменять местами элементы указанных столбцов #4
Так пробуйте. Без C++11
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
#include <iomanip>
#include <iostream>
#include <algorithm>
#include <cstdlib>
#include <ctime>
 
int main()
{
    std::srand(std::time(0));
    const std::size_t rows = 5;
    const std::size_t cols = 5;
    int arr[rows][cols];
    for(std::size_t i = 0; i < rows; ++i)
    {
        for(std::size_t j = 0; j < cols; ++j)
        {
            arr[i][j] = std::rand() % 21;
            std::cout << std::setw(4) << arr[i][j];
        }
        std::cout << std::endl;
    }
    std::size_t fst, snd;
    std::cin >> fst >> snd;
    if(std::max(fst, snd) > cols)
    {
        std::cout << "input error" << std::endl;
        return 1;
    }
    for(std::size_t i = 0; i < rows; ++i)
        std::swap(arr[i][fst], arr[i][snd]);
    std::cout << "-------------------" << std::endl;
    for(std::size_t i = 0; i < rows; ++i)
    {
        for(std::size_t j = 0; j < cols; ++j)
            std::cout << std::setw(4) << arr[i][j];
        std::cout << std::endl;
    }
    return 0;
}
Будут ошибки - кидайте.
fleks84
0 / 0 / 0
Регистрация: 04.02.2012
Сообщений: 11
04.02.2012, 20:31  [ТС]     Поменять местами элементы указанных столбцов #5
Ошибок нет, отлично! Я правильно понимаю что когда указываю номер столбца 1 и 2 то реально он 0 и 1?
soon
 Аватар для soon
2536 / 1301 / 81
Регистрация: 09.05.2011
Сообщений: 3,086
Записей в блоге: 1
04.02.2012, 20:44     Поменять местами элементы указанных столбцов #6
Цитата Сообщение от fleks84 Посмотреть сообщение
когда указываю номер столбца 1 и 2 то реально он 0 и 1?
Когда вводите 0 и 1, то поменяются 1 и 2, да.
fleks84
0 / 0 / 0
Регистрация: 04.02.2012
Сообщений: 11
04.02.2012, 21:06  [ТС]     Поменять местами элементы указанных столбцов #7
ПасиБ! Поубирал std:: и вставил using namespace std; - очень даже все красиво стало )

Добавлено через 4 минуты
Финальный вариант
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
#include <iomanip.h>
#include <iostream.h>
#include <conio.h>
 
using namespace std;
 
int main()
{
    srand(time(0));
    const size_t rows = 5;
    const size_t cols = 5;
    int arr[rows][cols];
    for(size_t i = 0; i < rows; ++i)
    {
        for(size_t j = 0; j < cols; ++j)
        {
            arr[i][j] = rand() % 21;
            cout << setw(4) << arr[i][j];
        }
        cout << endl;
    }
    size_t fst, snd;
    cin >> fst >> snd;
    if(max(fst, snd) > cols)
    {
        cout << "input error" << endl;
        return 1;
    }
    for(size_t i = 0; i < rows; ++i)
        swap(arr[i][fst], arr[i][snd]);
    cout << "-------------------" << endl;
    for(size_t i = 0; i < rows; ++i)
    {
        for(size_t j = 0; j < cols; ++j)
            cout << setw(4) << arr[i][j];
        cout << endl;
    }
    getch();
    return 0;
}
Serejke_qq
 Аватар для Serejke_qq
149 / 107 / 9
Регистрация: 06.07.2011
Сообщений: 224
Завершенные тесты: 2
05.02.2012, 00:19     Поменять местами элементы указанных столбцов #8
Цитата Сообщение от fleks84 Посмотреть сообщение
ПасиБ! Поубирал std:: и вставил using namespace std; - очень даже все красиво стало )
"очень даже красиво" - это как раз с использованием std:: (более правильно), потому что, как минимум более безопасно в больших проектах...
fleks84
0 / 0 / 0
Регистрация: 04.02.2012
Сообщений: 11
05.02.2012, 10:22  [ТС]     Поменять местами элементы указанных столбцов #9
Ок, взял на заметку.

Добавлено через 31 минуту
А по этой же программе поможете еще раз?
Надо добавить одну или несколько функций которые будут реализовать работу массива, можно функцию ввода-вывода.
У меня пока выходит такое, но 3 ошибки, чтото неправильно с функцией, присваиванием
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
#include <iomanip>
#include <iostream>
#include <conio>
using namespace std;
 
int main()
{
    srand(time(0));
    const size_t rows = 5;
    const size_t cols = 5;
    int arr[rows][cols];
 
 
 
    size_t fst, snd;
    cin >> fst >> snd;
    if(max(fst, snd) > cols)
    {
        cout << "input error" << endl;
        return 1;
    }
    for(size_t i = 0; i < rows; ++i)
        swap(arr[i][fst], arr[i][snd]);
    cout << "-------------------" << endl;
    for(size_t i = 0; i < rows; ++i)
    {
        for(size_t j = 0; j < cols; ++j)
            cout << setw(4) << arr[i][j];
        cout << endl;
    }
    printArray(arr, rows, cols);
    getch();
    return 0;
}
 
//печать массива
void printArray(int arr[][], const int rows, const int cols)
{
    for(size_t i = 0; i < rows; ++i)
    {
        for(size_t j = 0; j < cols; ++j)
        {
            arr[i][j] = rand() % 21;
            cout << setw(4) << arr[i][j];
        }
        cout << endl;
    }
}
soon
 Аватар для soon
2536 / 1301 / 81
Регистрация: 09.05.2011
Сообщений: 3,086
Записей в блоге: 1
05.02.2012, 10:35     Поменять местами элементы указанных столбцов #10
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
#include <iomanip>
#include <iostream>
#include <algorithm>
#include <cstdlib>
#include <ctime>
 
template <class Matrix>
void print(const Matrix& arr, const std::size_t& rows, const std::size_t& cols)
{
    for(std::size_t i = 0; i < rows; ++i)
    {
        for(std::size_t j = 0; j < cols; ++j)
            std::cout << std::setw(4) << arr[i][j];
        std::cout << std::endl;
    }
}
 
int main()
{
    std::srand(std::time(0));
    const std::size_t rows = 5;
    const std::size_t cols = 5;
    int arr[rows][cols];
    for(std::size_t i = 0; i < rows; ++i)
    {
        for(std::size_t j = 0; j < cols; ++j)
        {
            arr[i][j] = std::rand() % 21;
            std::cout << std::setw(4) << arr[i][j];
        }
        std::cout << std::endl;
    }
    std::size_t fst, snd;
    std::cin >> fst >> snd;
    if(std::max(fst, snd) > cols)
    {
        std::cout << "input error" << std::endl;
        return 1;
    }
    for(std::size_t i = 0; i < rows; ++i)
        std::swap(arr[i][fst], arr[i][snd]);
    std::cout << "-------------------" << std::endl;
    /*for(std::size_t i = 0; i < rows; ++i)
    {
        for(std::size_t j = 0; j < cols; ++j)
            std::cout << std::setw(4) << arr[i][j];
        std::cout << std::endl;
    }*/
    print(arr, rows, cols);
    return 0;
}
fleks84
0 / 0 / 0
Регистрация: 04.02.2012
Сообщений: 11
05.02.2012, 10:55  [ТС]     Поменять местами элементы указанных столбцов #11
Я еще не надоел? А можно реализовать swap как функцию?
soon
 Аватар для soon
2536 / 1301 / 81
Регистрация: 09.05.2011
Сообщений: 3,086
Записей в блоге: 1
05.02.2012, 11:23     Поменять местами элементы указанных столбцов #12
Цитата Сообщение от fleks84 Посмотреть сообщение
А можно реализовать swap как функцию?
C++
1
2
3
4
5
6
7
template <class T>
void my_swap(T& a, T& b)
{
    T c = a;
    a = b;
    b = c;
}
go
Эксперт C++
3582 / 1362 / 128
Регистрация: 16.04.2009
Сообщений: 4,528
05.02.2012, 11:29     Поменять местами элементы указанных столбцов #13
Цитата Сообщение от soon Посмотреть сообщение
tempate <class T>
C++
1
template <class T>
soon
05.02.2012, 11:33
  #14

Не по теме:

go, Точно, набрал и не посмотрел. Поправил.

fleks84
0 / 0 / 0
Регистрация: 04.02.2012
Сообщений: 11
05.02.2012, 11:34  [ТС]     Поменять местами элементы указанных столбцов #15
не) в этой задаче надо swap сделать
soon
 Аватар для soon
2536 / 1301 / 81
Регистрация: 09.05.2011
Сообщений: 3,086
Записей в блоге: 1
05.02.2012, 11:37     Поменять местами элементы указанных столбцов #16
Цитата Сообщение от fleks84 Посмотреть сообщение
не) в этой задаче надо swap сделать
Swap не зависит от задания. Берете функцию, вставляете в код, меняете std::swap на my_swap
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
05.02.2012, 11:40     Поменять местами элементы указанных столбцов
Еще ссылки по теме:

C++ Дана матрица размера MxN. Поменять местами столбец с номером N и первый из столбцов, содержащих только отрицательные элементы.
C++ В массиве А поменять местами значения 1-го и К-го столбцов
C++ Поменять местами элементы главной и побочной диагонали матрицы и найти столбцы, элементы которых убывают

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
fleks84
0 / 0 / 0
Регистрация: 04.02.2012
Сообщений: 11
05.02.2012, 11:40  [ТС]     Поменять местами элементы указанных столбцов #17
Очень всем признателен за оперативность и помощь!
Yandex
Объявления
05.02.2012, 11:40     Поменять местами элементы указанных столбцов
Ответ Создать тему
Опции темы

Текущее время: 21:11. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru