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

Сдвиг стоки вниз и Удаление столбцов Матрицы - C++

Восстановить пароль Регистрация
 
о_О_Кто_здесь
11 / 11 / 1
Регистрация: 06.06.2011
Сообщений: 152
04.02.2014, 23:34     Сдвиг стоки вниз и Удаление столбцов Матрицы #1
Добрый день! Возник вопрос!
Как правильно сдвигать строчку в матрице? (своего рода сортировка)
Мне нужно указанную строку переместить вниз (например, вторую: это значит, что третья строка станет второй, четвёртая – третьей, и т.д., а вторая строка будет последней).

Я пытался сдвигать типо через свап напоминающую сортировку пузырьком.
C++
1
2
3
4
5
6
7
void Swap( int& a, int& b)
//функция обмена двух переменных
{
    int temp = a;//запоминаем значение первой переменной
    a = b;//первой переменной присваиваем значение второй
    b = temp;//значению второй переменной присваиваем ранее запомненное значение первой
}
т.е.:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
void sdvig(matrix &A,int &str)
{   
int n = A.size();
int temp;
for (int k=0;k<n;k++)
for (int i=0;i<n;i++)
 for(int j=0;j<n;j++)
     {
      temp=A[str][i]; // c указанной строки 
          A[str][i]= A[j][i];
          A[j][i]=temp;  
     }
}
Но получается совсем не то, что хочется. Прошу советов.
Думаю, можно еще сделать по виду проще.
Указанную строку push_back() т.е. в конец, и потом erase с начала вектора и первую попавшуюся нужную строчку делет.
Но такой способ я пробовал. Никак не смог добавить копию строки. Очень был бы признателен за объяснение. Как правильнее обращаться с вектором векторов...



2. Вопрос. Удаление стобца от к1 до кn включительно. Не совсем еще понял как, пытаюсь сделать. Пока у меня удалился 1 элемент из 1 строчки и вылезла ошибка.
т.е. я пытался реализовать у себя такое понятие:
т.к. такого понятия столбца, да и тем более удаление стобца там нет, есть строка. Нужно по индексу искать и удалять в строке цифры (типо A[j][K] пройтись по каждой строке и удалить указанный [K] в каждой строке.
полный код:

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
70
71
#include<iostream>
#include<ctime>
#include <iterator>
#include <cmath>
#include <vector>
#include <fstream>
using namespace std;
 
int generation () //генерация рандомных чисел в диапазоне 7-10
{   
    int i,a=7,b=10;
    return i =rand()%(b-a+1)+a;
}
 
 
typedef vector<int> row;
typedef vector<row> matrix; 
void Display( const matrix A, int n) //вывод
{   
    for (int i=0; i<n; i++)
    {   
        for (int j=0; j<n; j++)
        cout << A[i][j]<<'\t';
        cout<<endl;
    }
}
 
void sdvig(matrix &A,int &str)
{   int n = A.size();
   int temp;
 // for (int k=0;k<n;k++)
 
 for (int i=0;i<n;i++)
 
         for(int j=0;j<n;j++)
         {
     
           temp=A[str][i];
           A[str][i]= A[j][i];
           A[j][i]=temp;
         
        }
}
 
int main()
{
    srand(time(NULL));
    setlocale(LC_ALL, "Russian");
    matrix A;
    int row2, col1, col2;
    int n;
    n=generation();
        cout<<" Выполнение задания: "<< endl;
    cout<<" "<< endl;
    cout<<" Размер Матрицы A:"<<"["<<n<<"]"<<"x"<<"["<<n<<"]"<<endl;
    cout<<" "<< endl;
    row Row(n,0);// строка из n нулей
    for (int i=0; i<n; i++)
    { // заполняем очередную строку
        for (int j=0; j<=i; j++)    
        Row[j]=(i-j+1)*(i-j+1);// и добавляем её к матрице
        A.push_back(Row);
    }
    Display(A,n); //матрица на экран
    cout<<" Укажите строку, которую нужно переместить вниз: ";cin>>row2;cout<<endl;
        sdvig(A,row2); //перемещение строки вниз
        Display(A,n); //матрица на экран
        //Delet(); пока не уверен как точно сделать удаление стобца от к1 до кn включительно. Скорее всего т.к. такого понятия столбца там нет, есть строка. Думаю, нужно будет по индексу искать и удалять в строке         цифры (типо A[j][K] пройтись по каждой строке и удалить указанный [K] в каждой строке.
    system("pause");
    return 0;
}
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
о_О_Кто_здесь
11 / 11 / 1
Регистрация: 06.06.2011
Сообщений: 152
06.02.2014, 13:41  [ТС]     Сдвиг стоки вниз и Удаление столбцов Матрицы #2
Никто не знает?
vovacreme
-16 / 61 / 13
Регистрация: 14.01.2014
Сообщений: 145
06.02.2014, 14:15     Сдвиг стоки вниз и Удаление столбцов Матрицы #3
Сообщение было отмечено автором темы, экспертом или модератором как ответ
Насчет сдвига:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
void sdvig(matrix &A,int &str)
{   int n = A.size();
    vector<int> temp;
 // for (int k=0;k<n;k++)
         for(int j=str+1;j<n;j++, str++)
         {
     
           temp=A[str];
           A[str]= A[j];
           A[j]=temp;
         
        }
}
о_О_Кто_здесь
11 / 11 / 1
Регистрация: 06.06.2011
Сообщений: 152
06.02.2014, 14:24  [ТС]     Сдвиг стоки вниз и Удаление столбцов Матрицы #4
vovacreme, Спасибо! Все работает! я очень Вам благодарен, понял что делал я не так.
vovacreme
-16 / 61 / 13
Регистрация: 14.01.2014
Сообщений: 145
06.02.2014, 17:45     Сдвиг стоки вниз и Удаление столбцов Матрицы #5
Сообщение было отмечено автором темы, экспертом или модератором как ответ
Между прочим, сдвиг можно сделать намного проще, использовав библиотечный алгоритм rotate. Подключаем
C++
1
#include <algorithm>
, и тогда:

C++
1
2
3
4
void sdvig(matrix &A,int &str)
{   
    std::rotate(A.begin()+str-1,A.begin()+str,A.end());
}
о_О_Кто_здесь
11 / 11 / 1
Регистрация: 06.06.2011
Сообщений: 152
06.02.2014, 17:59  [ТС]     Сдвиг стоки вниз и Удаление столбцов Матрицы #6
vovacreme, спасибо за совет. Даже проще push_back() получается
Yandex
Объявления
06.02.2014, 17:59     Сдвиг стоки вниз и Удаление столбцов Матрицы
Ответ Создать тему
Опции темы

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