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

Максимальный по модулю элемент матрицы добавить к элементам из заданного интервала [a, b] всех четных столбцов - C++

Восстановить пароль Регистрация
 
masikus
2 / 2 / 0
Регистрация: 03.03.2013
Сообщений: 36
27.03.2014, 03:59     Максимальный по модулю элемент матрицы добавить к элементам из заданного интервала [a, b] всех четных столбцов #1
Помогите решить задачу с использованием вектора и итераторов:
Дана целая матрица A[n][n]. Если минимальный элемент каждой последующей строки меньше минимального элемента предыдущей строки, то максимальный по модулю элемент матрицы добавить к элементам из заданного интервала [a,b] всех четных столбцов матрицы. Найти номер первой строки, не содержащей ни одного четного элемента, и циклически сдвинуть в ней элементы так, чтобы элемент главной диагонали стал первым элементом строки. Отсортировать заданный столбец матрицы по возрастанию. Удалить из матрицы строку, в которой больше всего отрицательных элементов.
Я разобрался только с тем как задавать матрицы через vector, а с итераторами не могу разобраться.

C++ (Qt)
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
#include <iostream>
#include <vector>
 
using namespace std;
 
int main (void)
{
    const int row=4;
    const int col=4;
    vector<vector<int> > tab(row);
 
    for(int i=0; i<row;i++)
    {
        tab[i].resize(col);
        for(int j=0; j<col; j++)
        {
        tab[i][j]=rand() % 30-10; 
        cout<<tab[i][j]<<" ";}
        cout<<'\n';
    }
 
 
    cout<<endl;
    system("pause");
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
27.03.2014, 03:59     Максимальный по модулю элемент матрицы добавить к элементам из заданного интервала [a, b] всех четных столбцов
Посмотрите здесь:

C++ Найти максимальный по модулю элемент матрицы
C++ Найти максимальный по модулю элемент матрицы..
C++ Максимальный элемент матрицы заменить на нуль и вывести на печать угол матрицы, в котором расположен этот максимальный элемент
Дана прямоугольная матрица. Получить новую матрицу путём деления всех элементов исходной матрицей на её максимальный по модулю элемент. C++
Получить матрицу путем деления всех элементов данной матрицы на ее наибольший по модулю элемент C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
GetVariable
 Аватар для GetVariable
163 / 119 / 5
Регистрация: 17.03.2013
Сообщений: 283
27.03.2014, 07:24     Максимальный по модулю элемент матрицы добавить к элементам из заданного интервала [a, b] всех четных столбцов #2
что именно не понятно? Приводите код, пусть даже не рабочий, будем разбираться/помогать.
masikus
2 / 2 / 0
Регистрация: 03.03.2013
Сообщений: 36
27.03.2014, 07:29  [ТС]     Максимальный по модулю элемент матрицы добавить к элементам из заданного интервала [a, b] всех четных столбцов #3
как вот мне например найти максимальный элемент матрици с помощью итераторов.
через for я знаю как это сделать, а вот через итераторы vectora не могу понять
GetVariable
 Аватар для GetVariable
163 / 119 / 5
Регистрация: 17.03.2013
Сообщений: 283
27.03.2014, 07:40     Максимальный по модулю элемент матрицы добавить к элементам из заданного интервала [a, b] всех четных столбцов #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
#include <iostream>
#include <algorithm>
#include <vector>
 
int main()
{
    size_t size_num = 6;
    int numbers[6] = {-6, 5, 9, 1, 2, 6};
 
    std::vector<int> vnumb(numbers, numbers+size_num);
 
    std::vector<int>::iterator vbegin = vnumb.begin();
    std::vector<int>::iterator vend   = vnumb.end();
 
    for(std::vector<int>::iterator it = vnumb.begin(); it != vend; ++it)
        std::cout << *it << std::endl;
 
    std::cout << std::endl;
 
    std::cout << *std::max_element(vbegin, vend) << std::endl;
    
    std::cout << std::endl;
 
    // example sort
    std::sort(vbegin, vend);
 
    for(std::vector<int>::iterator it = vnumb.begin(); it != vend; ++it)
        std::cout << *it << std::endl;
 
    return 0;
}
masikus
2 / 2 / 0
Регистрация: 03.03.2013
Сообщений: 36
27.03.2014, 08:37  [ТС]     Максимальный по модулю элемент матрицы добавить к элементам из заданного интервала [a, b] всех четных столбцов #5
Цитата Сообщение от GetVariable Посмотреть сообщение
C++ (Qt)
1
std::vector<int>::iterator vbegin = vnumb.begin(); std::vector<int>::iterator vend = vnumb.end();
А как задавать эти итераторы для двухмерного вектора например заданного так
C++ (Qt)
1
vector<vector<int> > vnumb(4,vector<int>(4, 0));
Для одномерного вектора я разобрался как итераторы работают
GetVariable
 Аватар для GetVariable
163 / 119 / 5
Регистрация: 17.03.2013
Сообщений: 283
27.03.2014, 08:39     Максимальный по модулю элемент матрицы добавить к элементам из заданного интервала [a, b] всех четных столбцов #6
можно использовать auto, компилятор сам разберётся.

C++
1
auto vbegin = vnumb.begin();
До С++11, ключевое слово auto использовалось как спецификатор хранения переменной (как, например, register, static, extern). В С++11 auto позволяет не указывать тип переменной явно, говоря компилятору, чтобы он сам определил фактический тип переменной, на основе типа инициализируемого значения.
masikus
2 / 2 / 0
Регистрация: 03.03.2013
Сообщений: 36
27.03.2014, 08:56  [ТС]     Максимальный по модулю элемент матрицы добавить к элементам из заданного интервала [a, b] всех четных столбцов #7
Вот например такой код, как его заставить работать?

C++ (Qt)
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
#include <iostream>
#include <algorithm>
#include <vector>
 
using namespace std; 
int main()
{
    size_t size_str = 4;
    size_t size_col = 4;
 
  vector<vector<int> > vnumb(size_str,vector<int>(size_col, 0));
      auto vbegin = vnumb.begin();
      auto vend   = vnumb.end();
 
 for(int i=0; i<size_str;i++)
    {
        vnumb[i].resize(size_col);
        for(int j=0; j<size_col; j++)
        {
            vnumb[i][j]=rand() % 666; 
            cout<<vnumb[i][j]<<" ";
        }
        cout<<'\n';
    }
 
 cout << max_element(vbegin,vend);
 
 system("pause");
    return 0;
 
}
GetVariable
 Аватар для GetVariable
163 / 119 / 5
Регистрация: 17.03.2013
Сообщений: 283
27.03.2014, 09:18     Максимальный по модулю элемент матрицы добавить к элементам из заданного интервала [a, b] всех четных столбцов #8
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
#include <iostream>
#include <algorithm>
#include <iterator>
#include <vector>
 
using namespace std;
 
int main()
{
    size_t size_str = 4;
    size_t size_col = 4;
 
  vector<vector<int> > vnumb(size_str, vector<int>(size_col, 0));
 
    for(int i=0; i<size_str;i++)
    {
        vnumb[i].resize(size_col);
 
        for(int j=0; j<size_col; j++)
        {
            vnumb[i][j]=rand() % 666;
            cout<<vnumb[i][j]<<" ";
        }
 
        cout<<'\n';
    }
 
    std::cout << std::endl;
 
    /* Standart method
    for(size_t i = 0; i < vnumb.size(); ++i)
    {
        for(size_t j = 0; j < vnumb.at(i).size(); ++j)
            std::cout << vnumb.at(i).at(j) << " ";
 
        std::cout << std::endl;
    }*/
 
    /*for(auto it = vnumb.begin(); it != vnumb.end(); ++it) //AUTO
    {
        for(auto nit = (*it).begin(); nit != (*it).end(); ++nit)
            std::cout << *nit << " ";
 
        std::cout << std::endl;
    }*/
 
    for(vector<vector<int> >::iterator it = vnumb.begin(); it != vnumb.end(); ++it)
    {
        for(vector<int>::iterator nit = (*it).begin(); nit != (*it).end(); ++nit)
            std::cout << *nit << " ";
 
        std::cout << std::endl;
    }
 
    int max_element = vnumb.at(0).at(0);
 
    for(vector<vector<int> >::iterator it = vnumb.begin(); it != vnumb.end(); ++it)
        for(vector<int>::iterator nit = (*it).begin(); nit != (*it).end(); ++nit)
            if(*nit > max_element)
                max_element = *nit;
 
 
    std::cout << "Max_element: " << max_element << std::endl;
 
    system("pause");
    return 0;
 
}
masikus
2 / 2 / 0
Регистрация: 03.03.2013
Сообщений: 36
27.03.2014, 12:04  [ТС]     Максимальный по модулю элемент матрицы добавить к элементам из заданного интервала [a, b] всех четных столбцов #9
Разобрался только с тем как отсортировать столбец матрицы с остальным туго(

вот что есть
C++ (Qt)
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
72
73
74
#include <iostream>
#include <algorithm>
#include <iterator>
#include <vector>
const    size_t size_str = 5;
const    size_t size_col = 5;
 
using namespace std;
 
int print (vector<vector<int> > temp)
{
    for(vector<vector<int> >::iterator it = temp.begin(); it != temp.end(); ++it)
    {
        for(vector<int>::iterator nit = (*it).begin(); nit != (*it).end(); ++nit)
            cout << *nit << " ";
 
        cout << std::endl;
    }
    return 0;
}
 
int main()
{
 
setlocale(0,"");
vector<vector<int> > vnumb(size_str, vector<int>(size_col));
 
    for(int i=0; i<size_str;i++)
    {
        vnumb[i].resize(size_col);
 
        for(int j=0; j<size_col; j++)
        {
            vnumb[i][j]=rand() % 15-5;
        }
 
    }
 print(vnumb);//Вывод массива 
 
 //Максимальнный элемент
    int max_element = vnumb.at(0).at(0);
    for(vector<vector<int> >::iterator it = vnumb.begin(); it != vnumb.end(); ++it)
        for(vector<int>::iterator nit = (*it).begin(); nit != (*it).end(); ++nit)
            if(*nit > max_element)
                max_element = *nit;
 
 
    std::cout << "Max_element: " << max_element << std::endl;
 
 /////////////////////////////////////////////////////////////////////////////////////////////////////////////
 
//Сортировка столбца
size_t ksort; 
int temp;
cout << "Какой столбец отсортировать? ";
cin >> ksort;
 for (int i = 0; i < size_col - 1; i++)
 {
        for (int k = 0; k < size_col - 1; k++)
            if (vnumb[k][ksort] > vnumb[k + 1][ksort])
            {
                temp = vnumb[k][ksort];
                vnumb[k][ksort] = vnumb[k+1][ksort];
                vnumb[k+1][ksort] = temp;
            }
 
    }
print(vnumb);
////////////////////////////////////////////////////////////////////////////////////////////////////////////////
 
    system("pause");
    return 0;
 
}
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
31.03.2014, 11:02     Максимальный по модулю элемент матрицы добавить к элементам из заданного интервала [a, b] всех четных столбцов
Еще ссылки по теме:

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

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

Или воспользуйтесь поиском по форуму:
masikus
2 / 2 / 0
Регистрация: 03.03.2013
Сообщений: 36
31.03.2014, 11:02  [ТС]     Максимальный по модулю элемент матрицы добавить к элементам из заданного интервала [a, b] всех четных столбцов #10
Помогите с первыми 2 заданиями
Если минимальный элемент каждой последующей строки меньше минимального элемента предыдущей строки, то максимальный по модулю элемент матрицы добавить к элементам из заданного интервала [a,b] всех четных столбцов матрицы. Найти номер первой строки, не содержащей ни одного четного элемента, и циклически сдвинуть в ней элементы так, чтобы элемент главной диагонали стал первым элементом строки.
Yandex
Объявления
31.03.2014, 11:02     Максимальный по модулю элемент матрицы добавить к элементам из заданного интервала [a, b] всех четных столбцов
Ответ Создать тему
Опции темы

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