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

Перестановка строк со столбцами - C++

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 11, средняя оценка - 4.73
Ruslanishe
25 / 9 / 1
Регистрация: 17.10.2010
Сообщений: 203
26.10.2011, 21:59     Перестановка строк со столбцами #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
#include <iostream.h>
#include <conio.h>
#include <math.h>
#include <time.h>
 
#define rows 5
#define columns 5
 
void Vvod( int x[rows][columns] )
{
   for ( int i = 0; i < rows; i++ )
    {
        for ( int j = 0; j < columns; j++ )
        {
            x[i][j] = rand()%10+1;
            }
    }
}
 
void Vivod( int x[rows][columns] )
{
    for ( int i = 0; i < rows; i++ )
    {
        for ( int j = 0; j < columns; j++ )
        {
            cout << x[i][j] << "  ";
        }
            cout << endl;
    }
}   
 
void Zamena( int x[rows][columns] )
{
     int q,b;
     int w;
     for ( int i = 0; i < rows; ++i )
    {
        for ( int j = 0; j < columns; ++j )
        {
             if ( x[i][0] == x[0][j] )
             {
                    q = i;
                    w = j;
                    
                  b = x[q][j];
                  x[q][j] = x[i][w];
                  x[i][w] = b;  
                  }                  
        }
     }                                        
}
int main()
{
    int x[rows][columns];
    int i, j;
    setlocale (LC_CTYPE, "Russian");
    srand(time(0));
    cout << "ГЊГ*òðèöГ*:" << endl << endl;
    Vvod( x );
    Vivod ( x );
    cout << endl;
    cout << "Ïîñëå Г§Г*ìåГ*Г»:" << endl << endl;
    
    Zamena( x );
    Vivod ( x ); 
    getch();
}
и как раз запутался с заменой как их поменять не понимаю! посоветуйте что-нибудь!
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
26.10.2011, 21:59     Перестановка строк со столбцами
Посмотрите здесь:

перестановка строк в матрице С++ C++
Перестановка строк матрицы C++
C++ Перестановка строк матрицы
C++ [C++] Перестановка строк и столбцов матрицы
Перестановка строк в матрице (С++) C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
valeriikozlov
Эксперт C++
 Аватар для valeriikozlov
4660 / 2486 / 321
Регистрация: 18.08.2009
Сообщений: 4,550
26.10.2011, 22:06     Перестановка строк со столбцами #2
Цитата Сообщение от Ruslanishe Посмотреть сообщение
и как раз запутался с заменой как их поменять не понимаю! посоветуйте что-нибудь!
Ruslanishe, Давайте пока без кода. Например есть двумерный массив у которого вторая строка начинается на 3, второй столбец начинается на 3, и четвертый столбец начинается на 3. Все остальные строки и столбцы начинаются на различные между собой числа. Где должны оказаться вторая строка, второй и четвертый столбец?
Ruslanishe
25 / 9 / 1
Регистрация: 17.10.2010
Сообщений: 203
26.10.2011, 22:13  [ТС]     Перестановка строк со столбцами #3
Цитата Сообщение от valeriikozlov Посмотреть сообщение
Где должны оказаться вторая строка, второй и четвертый столбец?
ну как я себе представляю:
четвёртый столбец останется на месте!
а вторая строка и второй столбец поменяются местами!
valeriikozlov
Эксперт C++
 Аватар для valeriikozlov
4660 / 2486 / 321
Регистрация: 18.08.2009
Сообщений: 4,550
26.10.2011, 22:15     Перестановка строк со столбцами #4
Цитата Сообщение от Ruslanishe Посмотреть сообщение
ну как я себе представляю:
четвёртый столбец останется на месте!
а вторая строка и второй столбец поменяются местами!
и тогда еще один вариант:
вторая строка начинается на 3, четвертая строка начинается на 3, и второй столбец начинается на 3. Все остальные строки и столбцы начинаются на различные между собой числа. Где должны оказаться вторая и четвертая строка и второй столбец?
Ruslanishe
25 / 9 / 1
Регистрация: 17.10.2010
Сообщений: 203
26.10.2011, 22:18  [ТС]     Перестановка строк со столбцами #5
Цитата Сообщение от valeriikozlov Посмотреть сообщение
и тогда еще один вариант:
вторая строка начинается на 3, четвертая строка начинается на 3, и второй столбец начинается на 3. Все остальные строки и столбцы начинаются на различные между собой числа. Где должны оказаться вторая и четвертая строка и второй столбец?
В данном случае четвёртая строка на месте!
а вторая строка и столбец поменяются местами
valeriikozlov
Эксперт C++
 Аватар для valeriikozlov
4660 / 2486 / 321
Регистрация: 18.08.2009
Сообщений: 4,550
26.10.2011, 22:22     Перестановка строк со столбцами #6
Ruslanishe, Два данных Вами варианта ответа наводят на ненаписанную в задании мысль:
уже замененные столбцы и строки не менять.
Так делаем?
Ruslanishe
25 / 9 / 1
Регистрация: 17.10.2010
Сообщений: 203
26.10.2011, 22:24  [ТС]     Перестановка строк со столбцами #7
Цитата Сообщение от valeriikozlov Посмотреть сообщение
Два данных Вами варианта ответа наводят на ненаписанную в задании мысль:
уже замененные столбцы и строки не менять.
я подумал вы приводите примеры разных матриц) поэтому так написал!
valeriikozlov
Эксперт C++
 Аватар для valeriikozlov
4660 / 2486 / 321
Регистрация: 18.08.2009
Сообщений: 4,550
26.10.2011, 22:28     Перестановка строк со столбцами #8
Цитата Сообщение от Ruslanishe Посмотреть сообщение
я подумал вы приводите примеры разных матриц) поэтому так написал!
я так и делал.
Так какой ответ на вопрос:

Цитата Сообщение от valeriikozlov Посмотреть сообщение
уже замененные столбцы и строки не менять.
Так делаем?
Ruslanishe
25 / 9 / 1
Регистрация: 17.10.2010
Сообщений: 203
26.10.2011, 22:32  [ТС]     Перестановка строк со столбцами #9
Цитата Сообщение от valeriikozlov Посмотреть сообщение
уже замененные столбцы и строки не менять.
Так делаем?
да их не нужно менять!
valeriikozlov
Эксперт C++
 Аватар для valeriikozlov
4660 / 2486 / 321
Регистрация: 18.08.2009
Сообщений: 4,550
26.10.2011, 22:42     Перестановка строк со столбцами #10
Цитата Сообщение от Ruslanishe Посмотреть сообщение
да их не нужно менять!
тогда в Вашем коде, вот эту часть:

Цитата Сообщение от Ruslanishe Посмотреть сообщение
void Zamena( int x[rows][columns] )
{
int q,b;
int w;
for ( int i = 0; i < rows; ++i )
{
for ( int j = 0; j < columns; ++j )
{
if ( x[i][0] == x[0][j] )
{
q = i;
w = j;
b = x[q][j];
x[q][j] = x[i][w];
x[i][w] = b;
}
}
}
}
замените на:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
void Zamena( int x[rows][columns] )
{
     int y,b;
     int a[columns]={0};
     for ( int i = 0; i < rows; ++i )
    {
        for ( int j = 0; j < columns; ++j )
        {
             if ( x[i][0] == x[0][j] && a[j]==0 )
             {
                 for(y=1; y<columns; y++)
                 {
                     b=x[i][y];
                     x[i][y]=x[y][j];
                     x[y][j]=b;
 
                  }            
                 a[j]=1;
        }
     }                                        
}
Ну и от себя немного добавлю: по-моему зря введены две переменные rows и columns. Достаточно одной, ведь обмен строк и столбцов возможен только в квадратной матрице (невозможно обменять строку на столбец с различной длинной).
Ruslanishe
25 / 9 / 1
Регистрация: 17.10.2010
Сообщений: 203
26.10.2011, 23:04  [ТС]     Перестановка строк со столбцами #11
Цитата Сообщение от valeriikozlov Посмотреть сообщение
по-моему зря введены две переменные rows и columns. Достаточно одной, ведь обмен строк и столбцов возможен только в квадратной матрице (невозможно обменять строку на столбец с различной длинной).
Вы правы, просто я писал другую программу! и чтобы дважды не писать одно и тоже скопировал!

Добавлено через 8 минут
смотря на работу Вышей функции я так понял что когда вы спрашивали
уже замененные столбцы и строки не менять.
Так делаем?
Вы имели ввиду: если мы заменим в первый столбец и строку ( т.к. у них один первый элемент )
то больше уже ничто не будет меняться?

Добавлено через 5 минут
и ещё там скобки не хватает фигурной! в каком место её точно поставить?
valeriikozlov
Эксперт C++
 Аватар для valeriikozlov
4660 / 2486 / 321
Регистрация: 18.08.2009
Сообщений: 4,550
26.10.2011, 23:07     Перестановка строк со столбцами #12
Цитата Сообщение от Ruslanishe Посмотреть сообщение
Вы имели ввиду: если мы заменим в первом столбце и строке ( т.к. у них одинаковый первый элемент )
то больше уже ничто не будет меняться?
нет, не так.
если мы заменим в первом столбце и строке ( т.к. у них одинаковый первый элемент ), то другие столбцы или строки с такими же первыми элементами не будем менять с первым столбцом или строкой.
Т.е. после замены первого столбца и строки ( если у них одинаковый первый элемент ), обмен дальше продолжаться будет.

Добавлено через 1 минуту
Цитата Сообщение от Ruslanishe Посмотреть сообщение
и ещё там скобки не хватает фигурной! в каком место её точно поставить?
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
void Zamena( int x[rows][columns] )
{
     int y,b;
     int a[columns]={0};
     for ( int i = 0; i < rows; ++i )
    {
        for ( int j = 0; j < columns; ++j )
        {
             if ( x[i][0] == x[0][j] && a[j]==0 )
             {
                 for(y=1; y<columns; y++)
                 {
                     b=x[i][y];
                     x[i][y]=x[y][j];
                     x[y][j]=b;
 
                  }            
                 a[j]=1;
             }
        }
     }                                        
}
Ruslanishe
25 / 9 / 1
Регистрация: 17.10.2010
Сообщений: 203
26.10.2011, 23:09  [ТС]     Перестановка строк со столбцами #13
скобку только что случайно поставил и угадал))

Добавлено через 1 минуту
Цитата Сообщение от valeriikozlov Посмотреть сообщение
нет, не так.
если мы заменим в первом столбце и строке ( т.к. у них одинаковый первый элемент ), то другие столбцы или строки с такими же первыми элементами не будем менять с первым столбцом или строкой.
Т.е. после замены первого столбца и строки ( если у них одинаковый первый элемент ), обмен дальше продолжаться будет.
Извините, это я тогда скобку не так поставил он мне неправильно заменил!
функция рабочая большое спасибо!
Ruslanishe
25 / 9 / 1
Регистрация: 17.10.2010
Сообщений: 203
27.10.2011, 14:22  [ТС]     Перестановка строк со столбцами #14
valeriikozlov, извините меня! но функция что-то не так стала работать) неправильно заменяет!
Миниатюры
Перестановка строк со столбцами  
valeriikozlov
Эксперт C++
 Аватар для valeriikozlov
4660 / 2486 / 321
Регистрация: 18.08.2009
Сообщений: 4,550
27.10.2011, 19:04     Перестановка строк со столбцами #15
Цитата Сообщение от Ruslanishe Посмотреть сообщение
извините меня! но функция что-то не так стала работать) неправильно заменяет!
тут вот что не получается:
например имеем массив -
3 6 1 9 2
7 3 7 6 6
5 2 1 6 4
6 4 2 1 7
8 7 4 6 2
нужно менять третью строку и первый столбец (которые начинаются на 6). Что должно получится:
3 6 1 9 2
7 4 7 6 6
5 2 1 6 4
6 3 2 4 7
8 7 4 6 2
или
3 6 1 9 2
7 4 7 6 6
5 2 1 6 4
6 1 2 4 7
8 7 4 6 2
Т.е. непонятно каким должен быть элемент в месте пересечения меняемых строки и столбца, то ли элемент столбца, то ли элемент строки?
И еще, в любом массиве первый элемент нулевой строки и нулевого столбца одинаков (он один и тот же) - обмен их нужно делать ?
Ruslanishe
25 / 9 / 1
Регистрация: 17.10.2010
Сообщений: 203
27.10.2011, 19:13  [ТС]     Перестановка строк со столбцами #16
Цитата Сообщение от valeriikozlov Посмотреть сообщение
И еще, в любом массиве первый элемент нулевой строки и нулевого столбца одинаков (он один и тот же) - обмен их нужно делать ?
Да нужно!

Цитата Сообщение от valeriikozlov Посмотреть сообщение
тут вот что не получается:
например имеем массив -
3 6 1 9 2
7 3 7 6 6
5 2 1 6 4
6 4 2 1 7
8 7 4 6 2
нужно менять третью строку и первый столбец (которые начинаются на 6). Что должно получится:
3 6 1 9 2
7 4 7 6 6
5 2 1 6 4
6 3 2 4 7
8 7 4 6 2
или
3 6 1 9 2
7 4 7 6 6
5 2 1 6 4
6 1 2 4 7
8 7 4 6 2
Т.е. непонятно каким должен быть элемент в месте пересечения меняемых строки и столбца, то ли элемент столбца, то ли элемент строки?
Читая задание, я думал что меняются те строки и столбцы первые элементы которых одинаковы и эти строки и столбцы должны быть как бы на одних уровнях, т.е.
3 9 7 8
5 4 8 9
7 5 2 1
9 6 3 4
тут должны меняться строка: 3 6 7 8 и столбец 3 5 7 9 ( т.к. у них один общий элемент)
и должны меняться 2 строка : 7 5 2 1 и 2 столбец 7 8 2 3

Т.е. должны меняться строки и столбцы у которых одинаковый первый элемент И они обе должны быть по счёту одинаковы ( оба первые или вторые и т.д.)
valeriikozlov
Эксперт C++
 Аватар для valeriikozlov
4660 / 2486 / 321
Регистрация: 18.08.2009
Сообщений: 4,550
27.10.2011, 21:26     Перестановка строк со столбцами #17
Цитата Сообщение от Ruslanishe Посмотреть сообщение
Т.е. должны меняться строки и столбцы у которых одинаковый первый элемент И они обе должны быть по счёту одинаковы ( оба первые или вторые и т.д.)
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
#include <iostream.h>
#include <conio.h>
#include <math.h>
#include <time.h>
 
#define rows 5
#define columns 5
 
void Vvod( int x[rows][columns] )
{
   for ( int i = 0; i < rows; i++ )
    {
        for ( int j = 0; j < columns; j++ )
        {
            x[i][j] = rand()%10+1;
            }
    }
}
 
void Vivod( int x[rows][columns] )
{
    for ( int i = 0; i < rows; i++ )
    {
        for ( int j = 0; j < columns; j++ )
        {
            cout << x[i][j] << "  ";
        }
            cout << endl;
    }
}   
 
void Zamena( int x[rows][columns] )
{
     int y,b;
     for ( int i = 0; i < rows; ++i )
     {
         if ( x[i][0] == x[0][i] )
         {
             for(y=1; y<rows; y++)
             {
                 b=x[i][y];
                 x[i][y]=x[y][i];
                 x[y][i]=b;
             }
         }
     }       
}
int main()
{
    int x[rows][columns];
    int i, j;
    setlocale (LC_CTYPE, "Russian");
    srand(time(0));
    cout << "Матрица:" << endl << endl;
    Vvod( x );
    Vivod ( x );
    cout << endl;
    cout << "После замены:" << endl << endl;
    
    Zamena( x );
    Vivod ( x ); 
    getch();
}
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
28.10.2011, 06:11     Перестановка строк со столбцами
Еще ссылки по теме:

C++ Сортировка строк матрицы C++ (перестановка строк)
C++ Перестановка строк матрицы
C++ Перестановка строк матрицы по условию

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

Или воспользуйтесь поиском по форуму:
Ruslanishe
25 / 9 / 1
Регистрация: 17.10.2010
Сообщений: 203
28.10.2011, 06:11  [ТС]     Перестановка строк со столбцами #18
Спасибо! всё работает) потом вылажу ещё задачу ! Я свой вариант сдал уже преподу! Эти просто так решаю чтобы закрепить !
Yandex
Объявления
28.10.2011, 06:11     Перестановка строк со столбцами
Ответ Создать тему
Опции темы

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