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

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

Восстановить пароль Регистрация
Другие темы раздела
C++ простые числа http://www.cyberforum.ru/cpp-beginners/thread137213.html
дана задача: вывести простые числа в диапазоне от 0 до 100000
C++ template+read only Доброго времени суток, уважаемые форумчане! Суть проблемы такая: Есть некий класс: template<typename T> class Tree { public: A(); void funk(A<T> *ptr); private: bool processing(A<T> *ptr) const; http://www.cyberforum.ru/cpp-beginners/thread137169.html
Не получается лабораторная.. C++
вообщем саму прогу я сделал, но не до конца, си++ не нравится функция, пишет какую то ошибку, не могу понять в чем проблема.. код: #include <iostream.h> #include <string.h> struct kadry { char rod; char mesto; union { char str;
C++ Программа для работы с картотекой абонентов.
Попытался написать программу на С++, но никак не получается Задание: На междугородной телефонной станции картотека абонентов, содержащая сведения о телефонах и их владельцах, организована как линейный список. Составить программу, которая: обеспечивает начальное формирование картотеки; производит вывод всей картотеки; вводит номер телефона и время разговора;
C++ Матрицы в файлах http://www.cyberforum.ru/cpp-beginners/thread137152.html
Добрый день! Изучаю дальше файлы, и есть парочка задач, но в них уже идёт работа с матрицей внутри файла: Задача 1. Даны два целых числа I, J и файл вещественных чисел, содержащий элементы прямоугольной матрицы (по строкам), причем первый элемент файла содержит количество столбцов матрицы. Вывести элемент матрицы, расположенный в I-й строке и J-м столбце (строки и столбцы нумеруются от 1)....
C++ Запись в словарь! Как мне записать слово в словарь причем сразу в определенное место? Например вот у меня в файле уже есть записанные строчки а в как мне вставить б между а и в ? подробнее

Показать сообщение отдельно
Mr.X
Эксперт С++
 Аватар для Mr.X
2804 / 1580 / 247
Регистрация: 03.05.2010
Сообщений: 3,675
01.06.2010, 14:27     Заполнить матрицу
Вообще-то, если начать заполнять матрицу с середины, то проще получится:
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 минут
Кстати, эта программа заполняет симметрично-загогулисто матрицу любого размера.
 
Текущее время: 16:14. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru