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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 11, средняя оценка - 4.73
Ruslanishe
25 / 9 / 1
Регистрация: 17.10.2010
Сообщений: 203
#1

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

26.10.2011, 21:59. Просмотров 1637. Ответов 17
Метки нет (Все метки)

Здравствуйте форумчане! у меня вот такая вот задачка:
Написать процедуру обмена столбца и строки двухмерного массива. С ее помощью поменять местами те строки и столбцы, первые элементы которых совпадают.

вот что я набросал по ней:
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++
Дана матрица размером М:N,найти матрицу полученную из данной перестановкой строк 1ой строки с последней.2 ой с предпоследней и т.д.(матрица...

Перестановка строк матрицы - C++
Ребята помогите, если не сложно! Накипело задачку решить, а в С++ баран) Вот задание: Переставить строки матрицы в соответствии с...

Перестановка строк в массиве - C++
Здравствуйте, не могу никак сообразить, как сделать свою задачу: Необходимо переставить строки в матрице. Пример: Исходная матрица: ...

Перестановка строк в матрице - C++
Дана целочисленная матрица размера 6х9. Найти матрицу, получающуюся из данной: перестановкой строк первой с последней, второй с...

Перестановка строк в матрице - C++
Добрый день Дана заданная целочисленная матрица 6x9. Нужно чтобы по заданному пользователем распорядку чисел от 1 до 9 выстаивались в...

Перестановка строк матрицы - C++
Прошу прощения если такая тема есть, поиск не помог мне её найти. Дана матрица MxN: Переставить строки матрицы по возрастанию...

Перестановка строк в матрице (С++) - C++
Здравствуйте ребята,очень нужна помощь помогите пожалуйста написать программу.. смысл в том что в программе я должна ввести любую...

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
valeriikozlov
Эксперт C++
4669 / 2495 / 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++
4669 / 2495 / 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++
4669 / 2495 / 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++
4669 / 2495 / 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++
4669 / 2495 / 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++
4669 / 2495 / 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, извините меня! но функция что-то не так стала работать) неправильно заменяет!
Миниатюры
Перестановка строк со столбцами  
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
27.10.2011, 19:04     Перестановка строк со столбцами
Еще ссылки по теме:

Перестановка строк в двухмерном массиве - C++
Подскажите пожалуйста функцию осуществляющую перестановку строк в двухмерном массиве 7*7 следующим образом: первую и последнюю,вторую и...

Перестановка строк в обратном порядке - C++
объясните пожалуйста подробно код. #include &lt;iostream.h&gt; #include &lt;conio.h&gt; const int N = 2; const int M = 3; int x = { { 1,...

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

Перестановка строк и столбцов в матрице - C++
Добрый день программисты! Вопрос заключается в том как сделать так чтобы можно было переставлять строки и(или) столбцы в нужном порядке. ...

Перестановка строк без цикла - C++
дана произвольная матрица, записанная в файле, необходимо поменять местами две любые строчки этой матрицы, не используя цикл.


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

Или воспользуйтесь поиском по форуму:
valeriikozlov
Эксперт C++
4669 / 2495 / 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
Т.е. непонятно каким должен быть элемент в месте пересечения меняемых строки и столбца, то ли элемент столбца, то ли элемент строки?
И еще, в любом массиве первый элемент нулевой строки и нулевого столбца одинаков (он один и тот же) - обмен их нужно делать ?
Yandex
Объявления
27.10.2011, 19:04     Перестановка строк со столбцами
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru