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

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

Войти
Регистрация
Восстановить пароль
 
NemoBLR
6 / 6 / 2
Регистрация: 28.05.2010
Сообщений: 24
#1

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

28.05.2010, 18:46. Просмотров 651. Ответов 9
Метки нет (Все метки)

необходимо заполнить матрицу
0
Изображения
 
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
28.05.2010, 18:46
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Заполнить матрицу (C++):

Заполнить матрицу случайными числами. Вернуть матрицу на 90o по часовой стрелке - C++
Заполнить матрицу случайными числами. Вернуть матрицу на 90o по часовой стрелке.

Заполнить матрицу случайными числами. Развернуть матрицу на 90(градусов) против часовой стрелки - C++
Заполнить матрицу случайными числами. Развернуть матрицу на 90o против часовой стрелки

Заполнить матрицу 9x9 случайными числами. Отобразить матрицу симметрично относительно главной диагонали - C++
Заполнить матрицу случайными числами. Отобразить матрицу симметрично относительно главной диагонали

Заполнить матрицу случайными числами. Разбить матрицу на квадраты размером 3х3. В центре каждого квадрата поме - C++
Помогите пожалуйста есть некоторые мысли, ну успешного ответа нет :((( #include <iostream> #include <conio.h> #include <ctime> ...

Заполнить матрицу - C++
Заполнить матрицу случайными числами. Отобразить симметрично относительно вертикальной оси секторы матрицы, которые лежат влево и вправо от...

Заполнить матрицу - C++
Здравствуйте, уважаемые форумчане! Мне нужно сделать программку, которая бы заполняла строку матрицы числом (или символом) , которое...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
silent_1991
Эксперт С++
4964 / 3040 / 149
Регистрация: 11.11.2009
Сообщений: 7,027
Завершенные тесты: 1
28.05.2010, 20:36 #2
И что это значит?
0
kazak
3035 / 2356 / 155
Регистрация: 11.03.2009
Сообщений: 5,402
Завершенные тесты: 1
28.05.2010, 20:44 #3
Цитата Сообщение от silent_1991 Посмотреть сообщение
И что это значит?
Порядок заполнения массива.
0
silent_1991
Эксперт С++
4964 / 3040 / 149
Регистрация: 11.11.2009
Сообщений: 7,027
Завершенные тесты: 1
28.05.2010, 20:51 #4
Мда уж... не сразу и догадался))) Отвык уже от таких заданий...
0
NemoBLR
6 / 6 / 2
Регистрация: 28.05.2010
Сообщений: 24
28.05.2010, 23:13  [ТС] #5
Цитата Сообщение от kazak Посмотреть сообщение
Порядок заполнения массива.
надо просто заполнить массив в такой последовательности как на рисунке последовательными числами
0
NemoBLR
6 / 6 / 2
Регистрация: 28.05.2010
Сообщений: 24
30.05.2010, 23:42  [ТС] #6
никто не знает как можно заполнить так матрицу, очень нужно please....
0
so1o
33 / 33 / 2
Регистрация: 16.11.2009
Сообщений: 201
31.05.2010, 01:08 #7
а я не понял че это такое
0
Mr.X
Эксперт С++
3049 / 1694 / 265
Регистрация: 03.05.2010
Сообщений: 3,867
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;
}
1
NemoBLR
6 / 6 / 2
Регистрация: 28.05.2010
Сообщений: 24
31.05.2010, 18:40  [ТС] #9
Большое Вам спасибо!
0
Mr.X
Эксперт С++
3049 / 1694 / 265
Регистрация: 03.05.2010
Сообщений: 3,867
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 минут
Кстати, эта программа заполняет симметрично-загогулисто матрицу любого размера.
1
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
01.06.2010, 14:27
Привет! Вот еще темы с ответами:

Заполнить матрицу - C++
дано квадратную матрицу в которой все элементы = 1, написать функцию void func (int** arr, int n), заполнит нужные области 0 (размер...

Заполнить матрицу А(15,15) - C++
Здравствуйте. Помогите пожалуйста решить задачу. Недавно начал изучать С++, пока ничего не понимаю в нем. Заранее спасибо. Задача. ...

Заполнить матрицу - C++
Заполните матрицу ЛП,от центра по спирали:вниз-влево-вверх-вправо.

Заполнить матрицу - C++
Заполнить матрицу размера nхn целыми числами 1, 2, …, n2. зигзагом http://s12.postimg.org/kho343tl9/098765.png #include &lt;iostream&gt; ...


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

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

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