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

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

Войти
Регистрация
Восстановить пароль
 
о_О_Кто_здесь
11 / 11 / 1
Регистрация: 06.06.2011
Сообщений: 152
#1

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

04.02.2014, 23:34. Просмотров 582. Ответов 5
Метки нет (Все метки)

Добрый день! Возник вопрос!
Как правильно сдвигать строчку в матрице? (своего рода сортировка)
Мне нужно указанную строку переместить вниз (например, вторую: это значит, что третья строка станет второй, четвёртая – третьей, и т.д., а вторая строка будет последней).

Я пытался сдвигать типо через свап напоминающую сортировку пузырьком.
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;
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
04.02.2014, 23:34
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Сдвиг стоки вниз и Удаление столбцов Матрицы (C++):

Сдвиг столбцов матрицы - C++
Добрый вечер. Может кто помочь со следующей задачей? Заполнить двумерный массив случайными числами и показать на экран. Сдвинуть все...

Написать функцию, осуществляющую циклический сдвиг строк и/или столбцов заданной матрицы - C++
2. Дана матрица порядка MxN (M строк, N столбцов). Необходимо заполнить ее значениями и написать функцию, осуществляющую циклический сдвиг...

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

Обеспечить сдвиг столбцов матрицы вправо или влево в зависимости от знака вводимого числа сдвигов - C++
Дана целочисленная матрица размерности n x m. Обеспечить сдвиг столбцов матрицы вправо или влево в зависимости от знака вводимого числа...

Удаление столбцов из динамической матрицы - C++
Здравствуйте, уважаемые форумчане! Возникла такая вот беда: Нужно из двумерного динамического массива удалить все столбцы, в которых...

Удаление столбцов из матрицы содержащих число 1 - C++
дана матрица необходимо удалить столбцы содержащие 1. Хелп плиз(( где то рядом но.... #include&lt;iostream&gt; #include&lt;iomanip&gt; ...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
о_О_Кто_здесь
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() получается
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
06.02.2014, 17:59
Привет! Вот еще темы с ответами:

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

Сдвиг двумерного массива вниз на одну позицию - C++
Есть задача:сдвинуть элементы двумерного массива вниз на одну позицию,а последнюю строку переместить на первую.Делал,но при...

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

Сдвиг элементов в столбце на две позиции вниз по кругу - C++
Добрый день уважаемые программисты. Начал изучать С++ очень и очень недавно. И вот возникла такая проблема. Написал программу, которая...


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

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
06.02.2014, 17:59
Ответ Создать тему
Опции темы

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