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

Заполнить матрицу - C++

Восстановить пароль Регистрация
 
NemoBLR
6 / 6 / 2
Регистрация: 28.05.2010
Сообщений: 24
28.05.2010, 18:46     Заполнить матрицу #1
необходимо заполнить матрицу
Изображения
 
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
silent_1991
Эксперт C++
4938 / 3014 / 149
Регистрация: 11.11.2009
Сообщений: 7,024
Завершенные тесты: 1
28.05.2010, 20:36     Заполнить матрицу #2
И что это значит?
kazak
 Аватар для kazak
3029 / 2350 / 155
Регистрация: 11.03.2009
Сообщений: 5,401
28.05.2010, 20:44     Заполнить матрицу #3
Цитата Сообщение от silent_1991 Посмотреть сообщение
И что это значит?
Порядок заполнения массива.
silent_1991
Эксперт C++
4938 / 3014 / 149
Регистрация: 11.11.2009
Сообщений: 7,024
Завершенные тесты: 1
28.05.2010, 20:51     Заполнить матрицу #4
Мда уж... не сразу и догадался))) Отвык уже от таких заданий...
NemoBLR
6 / 6 / 2
Регистрация: 28.05.2010
Сообщений: 24
28.05.2010, 23:13  [ТС]     Заполнить матрицу #5
Цитата Сообщение от kazak Посмотреть сообщение
Порядок заполнения массива.
надо просто заполнить массив в такой последовательности как на рисунке последовательными числами
NemoBLR
6 / 6 / 2
Регистрация: 28.05.2010
Сообщений: 24
30.05.2010, 23:42  [ТС]     Заполнить матрицу #6
никто не знает как можно заполнить так матрицу, очень нужно please....
so1o
33 / 33 / 2
Регистрация: 16.11.2009
Сообщений: 192
31.05.2010, 01:08     Заполнить матрицу #7
а я не понял че это такое
Mr.X
Эксперт С++
 Аватар для Mr.X
2802 / 1578 / 247
Регистрация: 03.05.2010
Сообщений: 3,666
31.05.2010, 04:30     Заполнить матрицу #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
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
#include<iostream>
#include<iomanip>
 
const size_t m = 9;//Фиксированное значение.
const size_t n = 10;//Может быть любым >= 5.
 
int matrix[m][n];
 
struct T_point
{
    size_t i_;
    size_t j_;
    T_point
        (
            size_t  i = 0,
            size_t  j = 0
        ) : i_(i), j_(j)
    {}
 
    bool operator== (T_point p)
    {
        return i_ == p.i_ && j_ == p.j_;
    }
 
    bool operator!= (T_point p)
    {
        return !(*this == p);
    }
};
 
size_t  val = 1;
 
void fill_line
    (
        T_point&  p_beg,
        int       i_shift,
        int       j_shift
    )
{ 
    T_point  p_end(p_beg.i_ + i_shift, p_beg.j_ + j_shift);
    int i_step = i_shift ? i_shift / abs(i_shift) : 0; 
    int j_step = j_shift ? j_shift / abs(j_shift) : 0;
    
    for( ; p_beg != p_end; p_beg.i_ += i_step, p_beg.j_ += j_step, ++val)
    {
        matrix[p_beg.i_][p_beg.j_] = val;        
        matrix[m - 1 - p_beg.i_][n - 1 - p_beg.j_] = m * n + 1 - val;        
    }
}
 
void  fill_line_vniz
    (
        T_point&  p_beg,        
        int       vniz_shift
    )
 
{
    fill_line(p_beg, vniz_shift, 0);    
}
 
void fill_line_vverx
    (
        T_point&  p_beg,        
        int       vverx_shift
    )
 
{
    fill_line(p_beg, -vverx_shift, 0);    
}
 
void fill_line_vpravo
    (
        T_point&  p_beg,        
        int       vpravo_shift
    )
 
{
    fill_line(p_beg, 0, vpravo_shift);    
}
 
void fill_line_vlevo
    (
        T_point&  p_beg,        
        int       vlevo_shift
    )
 
{
    fill_line(p_beg, 0, -vlevo_shift);    
}
 
void fill_oborot_vlevo
    (
        T_point&  p_beg,        
        size_t&   vert_abs_shift,
        size_t&   horis_abs_shift
    )
{    
    fill_line_vpravo (p_beg, horis_abs_shift++);
    fill_line_vverx  (p_beg, vert_abs_shift++);
    fill_line_vlevo  (p_beg, horis_abs_shift++);
    fill_line_vniz   (p_beg, vert_abs_shift++);
}
 
void fill_matrix()
{
    T_point  p_beg(2, 2);
    size_t   vert_abs_shift   = 1;
    size_t   horis_abs_shift  = n - 4;
    
    for(size_t oborot_count = 1; oborot_count <= 2; ++oborot_count)
    {
        fill_oborot_vlevo(p_beg, vert_abs_shift, horis_abs_shift);
    }    
    fill_line_vpravo(p_beg, (n + 1) / 2);
}
 
void print_matrix()
{
    for(size_t i = 0; i < m; ++i)
    {
        for(size_t j = 0; j < n; ++j)
        {            
            std::cout << std::setw(5) << matrix[i][j];
        }
        std::cout << std::endl;
    }
}
 
int main()
{
    fill_matrix();
    print_matrix();
    return 0;
}
NemoBLR
6 / 6 / 2
Регистрация: 28.05.2010
Сообщений: 24
31.05.2010, 18:40  [ТС]     Заполнить матрицу #9
Большое Вам спасибо!
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
01.06.2010, 14:27     Заполнить матрицу
Еще ссылки по теме:

Заполнить матрицу случайными числами. Вернуть матрицу на 90o по часовой стрелке C++
C++ Заполнить матрицу случайными числами. Разбить матрицу на квадраты размером 3х3. В центре каждого квадрата поме

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

Или воспользуйтесь поиском по форуму:
Mr.X
Эксперт С++
 Аватар для Mr.X
2802 / 1578 / 247
Регистрация: 03.05.2010
Сообщений: 3,666
01.06.2010, 14:27     Заполнить матрицу #10
Вообще-то, если начать заполнять матрицу с середины, то проще получится:
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
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
#include<iostream>
#include<iomanip>
 
const int m = 9;//Фиксированное значение.
const int n = 10;//Может быть любым >= 5.
 
const int EMPTY_VAL  = 0;
int matrix[m][n]     = {EMPTY_VAL};
 
enum T_napravl
{
    VLEVO,
    VVERX,
    VPRAVO,
    VNIZ,
    MAX_NAPRAVL_COUNT
};
 
void fill_cell
    (
        int  i, 
        int  j,
        int  val
    )
{
    matrix[i][j] = val;        
    matrix[m - 1 - i][n - 1 - j] = m * n + 1 - val;    
}
 
bool is_correct_empty_cell(int i, int j)
{
    return    0 <= i && i < m
           && 0 <= j && j < n
           && matrix[i][j] == EMPTY_VAL;
}
 
bool good_go_to_cell
    (
        int& i,
        int& j,
        int  i_new,
        int  j_new
    )
{
    bool res;    
    if(res = is_correct_empty_cell(i_new, j_new))
    {
        i = i_new;   
        j = j_new;        
    }
    return res;     
}
 
bool good_go_to_napravl
    (
        T_napravl  napravl,
        int&       i,
        int&       j
    )
{
    switch(napravl)
    {
    case VLEVO  : return good_go_to_cell(i,  j,  i,      j - 1);
    case VVERX  : return good_go_to_cell(i,  j,  i - 1,  j    );
    case VPRAVO : return good_go_to_cell(i,  j,  i,      j + 1);
    case VNIZ   : return good_go_to_cell(i,  j,  i + 1,  j    );
    default     : return false;
    }
}
 
bool get_next_cell(int& i, int& j)
{    
    static T_napravl  cur_napravl = VLEVO;
    for(int napravl_count = 0; napravl_count < MAX_NAPRAVL_COUNT; ++napravl_count)
    {
        cur_napravl 
            = static_cast<T_napravl>((cur_napravl + napravl_count) % MAX_NAPRAVL_COUNT);
        if(good_go_to_napravl(cur_napravl, i, j))
        {             
            return true;
        }
    }    
    return false;
}
 
void fill_matrix()
{
    int  val  = (m * n + 1) / 2;
    int  i    = (m - 1)     / 2;
    int  j    = (n - 1)     / 2;
    do
    {
        fill_cell(i, j, val--);        
    }while(get_next_cell(i, j));
}
 
void print_matrix()
{
    for(int i = 0; i < m; ++i)
    {
        for(int j = 0; j < n; ++j)
        {            
            std::cout << std::setw(5) << matrix[i][j];
        }
        std::cout << std::endl;
    }
}
 
int main()
{
    fill_matrix();
    print_matrix();
    return 0;
}
Добавлено через 1 час 46 минут
Кстати, эта программа заполняет симметрично-загогулисто матрицу любого размера.
Yandex
Объявления
01.06.2010, 14:27     Заполнить матрицу
Ответ Создать тему
Опции темы

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