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

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

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Перегрузка operator< для двух экземпляров класса отрезок http://www.cyberforum.ru/cpp-beginners/thread1564800.html
Всем добра, в классе отрезок хочу перегрузить операцию < правильно ли я сделал ? При этом отрезок с координатами x1=1 y1=1 и x2=4 y2=4 должен быть равен отрезку x1=4 y1=4 и x2=1 y2=1; class Segment...
C++ Найти количество элементов последовательности, кратных числу K1 и не кратных числу K2 2)Дана последовательность целых чисел, за которой следует 0. Найти количество элементов этой последовательности, кратных числу K1 и не кратных числу K2. http://www.cyberforum.ru/cpp-beginners/thread1564795.html
Определить класс «Строка» – String длины n; написать несколько конструкторов C++
Определить класс «Строка» – String длины n. Написать несколько конструкторов, в том числе конструктор копирования. Реализовать методы для выполнения конкатенации строк, извлечения символа из заданной...
C++ Создать класс String – строку, используя динамическую память
Создать класс String – строку, используя динамическую память. Определить операторы "+" –сложение строк, "=" и "+=" – присваивания, как методы класса. Определить операторы сравнения "==", "!=", "<",...
C++ Может кто знает как составить из этих слов осмысленный текст? http://www.cyberforum.ru/cpp-beginners/thread1564715.html
Описание главной функции, оператор цикла while, оператор ввода и вывода строки, увеличение целой переменной на 10
C++ Убрать повторяющиеся символы из строки #include "stdafx.h" #include "iostream" #include "string" using namespace std; string a; bool used; int _tmain(int argc, _TCHAR* argv) { cout << "The original text - "; подробнее

Показать сообщение отдельно
gru74ik
Модератор
Эксперт CЭксперт С++
4196 / 1844 / 198
Регистрация: 20.02.2013
Сообщений: 4,991
Записей в блоге: 22
28.10.2015, 21:22
Цитата Сообщение от Okas43 Посмотреть сообщение
ибо их не изучали, а с ними не примут работу
Okas43, нате Вам тогда ужос-ужос без функций:
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
#include <iostream>
 
int main()
{
    const int ROW = 5;    // количество рядов (строк)
    const int COL = 5;    // количество столбцов (колонок)
 
    int arr[ROW][COL];    // объявили массив
 
    int prev_r = ROW;        // индекс ряда предыдущей ячейки
    int prev_c = COL - 2;    // индекс столбца предыдущей ячейки
 
    int add_to_row = 0;
    int add_to_col = 0;
 
    int start_value = 10;    // с этой циферьки начнётся заполнение массива
 
    for (int r = ROW - 1, c = COL - 1; r >= 0 && c >= 0; r += add_to_row, c += add_to_col)
    {
        arr[r][c] = start_value++;
 
        if (r < prev_r && c > prev_c) // если мы пришли сюда по диагонали снизу вверх, то
        {
            if (c+1 == COL || r-1 < 0) // если движение дальше по диагонали снизу вверх невозможно, то
            {
                if (r-1 < 0)// если невозможно пойти вертикально наверх, то
                {   // идём по горизонтали справа налево
                    add_to_row = 0;
                    add_to_col = -1;
                }
                else
                {   // иначе пойдём вертикально снизу вверх
                    add_to_row = -1;
                    add_to_col = 0;
                }
            }
            else
            {   // иначе продолжаем двигаться по диагонали снизу вверх
                add_to_row = -1;
                add_to_col = +1;
            }
        }
        else if (r < prev_r && c == prev_c)// если мы пришли сюда вертикально снизу вверх, то
        {
            if (c-1 < 0) // если невозможно пойти сверху вниз по диагонали
            {   // пойдём вертикально снизу вверх
                add_to_row = -1;
                add_to_col = +1;
            }
            else
            {
                // иначе разворачиваемся и идём сверху вниз по диагонали
                add_to_row = +1;
                add_to_col = -1;
            }
        }
        else if (r > prev_r && c < prev_c) // если мы пришли сюда по диагонали cверху вниз, то
        {
            if (r+1 == ROW || c-1 < 0) // если движение дальше в этом же направлении невозможно, то
            {
                if (c-1 < 0) // если невозможно пойти горизонтально справа налево, то
                {   // пойдём вертикально снизу вверх
                    add_to_row = -1;
                    add_to_col = 0;
                }
                else
                {   // иначе пойдём горизонтально справа налево
                    add_to_row = 0;
                    add_to_col = -1;
                }
            }
            else
            {   // иначе продолжаем двигаться сверху вниз по диагонали
                add_to_row = +1;
                add_to_col = -1;
            }
        }
        else if (r == prev_r && c < prev_c) // если мы пришли сюда горизонтально справа налево
        {
            if (r-1 < 0)    // если невозможно двигаться снизу вверх по диагонали
            {   // пойдём сверху вниз по диагонали
                add_to_row = +1;
                add_to_col = -1;
            }
            else
            {   // разворачиваемся и идём снизу вверх по диагонали
                add_to_row = -1;
                add_to_col = +1;
            }
        }
 
        prev_r = r;
        prev_c = c;
 
    }
 
    // выводим массив на экран монитора:
    for (int i = 0; i < ROW; ++i)
    {
        for (int j = 0; j < COL; ++j)
            std::cout << arr[i][j] << "\t";
        std::cout << "\n";
    }
 
    return 0;
}
0
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru