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

Сформировать массив из элементов матрицы - C++

Восстановить пароль Регистрация
 
Kartasskiy
0 / 0 / 0
Регистрация: 07.02.2011
Сообщений: 86
24.08.2011, 18:10     Сформировать массив из элементов матрицы #1
Дан двумерный
массив. Сформировать одномерный массив,каждый элемент которого равен количеству элементов
соответствующего столбца
двумерного массива,больших
числа n
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
24.08.2011, 18:10     Сформировать массив из элементов матрицы
Посмотрите здесь:

C++ Сформировать одномерный массив из элементов матрицы
C++ Сформировать одномерный массив Х из элементов матрицы А...
C++ Сформировать одномерный массив из максимальных элементов строк матрицы
C++ Сформировать массив из отрицательных элементов строки матрицы А
Сформировать одномерный массив из элементов матрицы C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
rangerx
1908 / 1517 / 139
Регистрация: 31.05.2009
Сообщений: 2,876
24.08.2011, 20:03     Сформировать массив из элементов матрицы #2
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
#include <iostream>
#include <cstddef>
 
int main()
{
    const std::size_t M = 3;
    const std::size_t N = 4;
 
    int arr2D[M][N];
 
    for(std::size_t i = 0; i < M; ++i)
    {
        for(std::size_t j = 0; j < N; ++j)
        {
            std::cout << "[" << i+1 << "][" << j+1 << "]:";
            std::cin >> arr2D[i][j];
        }
    }
 
    std::cout << "arr2D:\n";
    for(std::size_t i = 0; i < M; ++i)
    {
        for(std::size_t j = 0; j < N; ++j)
            std::cout << arr2D[i][j] << ' ';
        std::cout << '\n';
    }
 
    int n;
    std::cout << "n: ";
    std::cin >> n;
 
    int c;
    int arr[N];
 
    std::cout << "arr:\n";
    for(std::size_t j = 0; j < N; ++j)
    {
        c = 0;
 
        for(std::size_t i = 0; i < M; ++i)
            if(arr2D[i][j] > n) ++c;
 
        arr[j] = c;
        std::cout << arr[j] << ' ';
    }
 
    std::cout << '\n';
 
    return 0;
}
nameless
Эксперт C++
 Аватар для nameless
289 / 288 / 14
Регистрация: 16.06.2009
Сообщений: 486
24.08.2011, 21:30     Сформировать массив из элементов матрицы #3
Сообщение было отмечено автором темы, экспертом или модератором как ответ
немного побаловался с boost::multi_array:

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
#include <iostream>
#include <algorithm>
#include <functional>
#include <boost/multi_array.hpp>
#include <boost/random.hpp>
#include <boost/array.hpp>
#include <boost/bind.hpp>
#include <boost/function.hpp>
 
const int ROWS = 5;
const int COLS = 3;
 
boost::mt19937 rng;
boost::uniform_int <> range(0, 100);
boost::variate_generator <boost::mt19937, boost::uniform_int <> > gen(rng, range);
 
struct GenerateMatrix {
    int operator()() {
       return gen(); 
    }
};
 
typedef boost::multi_array <int, 2> Array2D;
 
 
struct GetArray {
    GetArray(Array2D::array_view <1>::type* _views, int _number) : views(_views), number(_number), index(-1) {  }
    int operator()() {
        this->index++;
        return std::count_if(this->views[this->index].begin(), this->views[this->index].end(), std::bind2nd(std::greater<int>(), this->number));
    }
 
private:
    Array2D::array_view <1>::type* views;
    int number, index;
};
 
int main() {
    typedef boost::multi_array_types::index_range range;
    Array2D matrix(boost::extents[ROWS][COLS]);
    boost::array <int, COLS> result_array;
    boost::multi_array_ref <int, 1> matrix_ref(matrix.data(), boost::extents[matrix.num_elements()]);
    int number = 60;
    
    std::generate(matrix_ref.begin(), matrix_ref.end(), GenerateMatrix());
    
    Array2D::array_view <1>::type views[COLS] = {
        matrix[boost::indices[range()][0]],
        matrix[boost::indices[range()][1]],
        matrix[boost::indices[range()][2]]
    };
 
    std::generate(result_array.begin(), result_array.end(), GetArray(views, number));
    
    std::cout << "Matrix: " << std::endl;
    for (std::size_t i = 0; i != matrix.size(); ++i) {
        std::copy(matrix[i].begin(), matrix[i].end(), std::ostream_iterator <int>(std::cout, "\t"));
        std::cout << '\n';
    }
    std::cout << "Final array: " << std::endl;
    std::copy(result_array.begin(), result_array.end(), std::ostream_iterator <int>(std::cout, "\t"));
    
    return 0;
}
4e87
4 / 4 / 1
Регистрация: 20.08.2011
Сообщений: 51
25.08.2011, 04:03     Сформировать массив из элементов матрицы #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
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
#include <iostream>
#include <algorithm>
#include <functional>
#include <boost/multi_array.hpp>
#include <boost/random.hpp>
#include <boost/array.hpp>
#include <boost/bind.hpp>
#include <boost/function.hpp>
 
const int ROWS = 5;
const int COLS = 3;
 
boost::mt19937 rng;
boost::uniform_int <> range(0, 100);
boost::variate_generator <boost::mt19937, boost::uniform_int <> > gen(rng, range);
 
struct GenerateMatrix {
    int operator()() {
       return gen(); 
    }
};
 
typedef boost::multi_array <int, 2> Array2D;
 
 
struct GetArray {
    GetArray(Array2D::array_view <1>::type* _views, int _number) : views(_views), number(_number), index(-1) {  }
    int operator()() {
        this->index++;
        return std::count_if(this->views[this->index].begin(), this->views[this->index].end(), std::bind2nd(std::greater<int>(), this->number));
    }
 
private:
    Array2D::array_view <1>::type* views;
    int number, index;
};
 
int main() {
    typedef boost::multi_array_types::index_range range;
    Array2D matrix(boost::extents[ROWS][COLS]);
    boost::array <int, COLS> result_array;
    boost::multi_array_ref <int, 1> matrix_ref(matrix.data(), boost::extents[matrix.num_elements()]);
    int number = 60;
    
    std::generate(matrix_ref.begin(), matrix_ref.end(), GenerateMatrix());
    
    Array2D::array_view <1>::type views[COLS] = {
        matrix[boost::indices[range()][0]],
        matrix[boost::indices[range()][1]],
        matrix[boost::indices[range()][2]]
    };
 
    std::generate(result_array.begin(), result_array.end(), GetArray(views, number));
    
    std::cout << "Matrix: " << std::endl;
    for (std::size_t i = 0; i != matrix.size(); ++i) {
        std::copy(matrix[i].begin(), matrix[i].end(), std::ostream_iterator <int>(std::cout, "\t"));
        std::cout << '\n';
    }
    std::cout << "Final array: " << std::endl;
    std::copy(result_array.begin(), result_array.end(), std::ostream_iterator <int>(std::cout, "\t"));
    
    return 0;
}
какой-то зловещий код для такой задачи)
co6ak
Кошковед
 Аватар для co6ak
403 / 496 / 29
Регистрация: 12.04.2010
Сообщений: 1,392
25.08.2011, 09:17     Сформировать массив из элементов матрицы #5
4e87, вбей в поиск "Написать программу Hello World!"
откроешь для себя много нового
Kartasskiy
0 / 0 / 0
Регистрация: 07.02.2011
Сообщений: 86
25.08.2011, 10:36  [ТС]     Сформировать массив из элементов матрицы #6
спасибо
Yandex
Объявления
25.08.2011, 10:36     Сформировать массив из элементов матрицы
Ответ Создать тему
Опции темы

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