2 / 2 / 0
Регистрация: 01.10.2018
Сообщений: 210
1

Массив: Вывести массив по заданной схеме...

25.02.2019, 18:04. Показов 1804. Ответов 19

Нужно вывести массив как показано на картинке, буду благодарен за помощь.
Миниатюры
Массив: Вывести массив по заданной схеме...  
__________________
Помощь в написании контрольных, курсовых и дипломных работ, диссертаций здесь
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
25.02.2019, 18:04
Ответы с готовыми решениями:

Массив: Линейный массив привести к матрице по заданной схеме...
Здравствуйте! Дан произвольный линейный массив x1,x2...xn, который вводит пользователь, из которого...

Заполнить двумерный массив A [6][6] по заданной схеме
31 25 19 18 7 1 32 26 20 17 8 2 33 27 21 16 9 3 34 28 22 15 10 4 35 29 23 14 11 5 36 30...

Заполнить двумерный массив A [6][6] по заданной схеме
Составить программу заполнения двумерного массива А по заданной схеме. Результаты выдать на экран...

Массив: Сформировать квадратную матрицу порядка n по заданной схеме...
Помогите пожалуйста, нужно чтобы матрица выводилась в этом виде #include <iostream> #include...

19
290 / 87 / 28
Регистрация: 25.01.2016
Сообщений: 529
Записей в блоге: 1
26.02.2019, 07:54 2
Не понятно
1
5666 / 3112 / 1299
Регистрация: 07.02.2019
Сообщений: 7,803
26.02.2019, 09:15 3
как я понял нужно преобразовать одномерный массив в двумерный по нарисованному алгоритму и вывести последний

Добавлено через 6 минут
ну или наоборот, непонятно
0
215 / 162 / 52
Регистрация: 09.12.2017
Сообщений: 520
26.02.2019, 09:22 4

Не по теме:

zayats80888, автор еще собирается с мыслями и в глубоких раздумьях, решает, что он хотел этим сказать.


0
610 / 415 / 151
Регистрация: 11.01.2019
Сообщений: 1,746
26.02.2019, 10:08 5
Вот как-то так:

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
#include <vector>
 
enum class dir_t {
    left_to_right = 1, top_to_bottom = 2, right_to_left = 3, bottom_up = 4
};
 
std::vector<int> spiral_traverse(const std::vector<std::vector<int>> & array) {
    if (array.size() == 0 || array[0].size() == 0) return std::vector<int>(std::vector<int>());
    if (array.size() != array[0].size()) return std::vector<int>();
    if (array.size() == 1 && array[0].size() == 1) return std::vector<int>(std::vector <int>(1, array[0][0]));
    std::vector<int> result;
    auto res_size = array.size() * array[0].size();
    int uppermost = 0, leftmost = 0;
    int lowermost = array.size() - 1;
    int rightmost = array[0].size() - 1;
    dir_t direction = dir_t::top_to_bottom;
    bool switch_dir_1 = true, switch_dir_2 = true;
    while (result.size() != res_size) {
        switch (direction) {
        case dir_t::top_to_bottom:
            for (int i = uppermost; i <= lowermost; ++i) result.push_back(array[i][switch_dir_1 ? rightmost : leftmost]);
            if (switch_dir_1) {
                direction = dir_t::right_to_left; 
                --rightmost;
            }
            else {
                direction = dir_t::left_to_right;
                ++leftmost;
            }
            switch_dir_1 = !switch_dir_1;
            break;
        case dir_t::right_to_left:
            for (int j = rightmost; j >= leftmost; --j) result.push_back(array[lowermost][j]);
            direction = dir_t::bottom_up;
            --lowermost;
            break;
        case dir_t::bottom_up:
            for (int i = lowermost; i >= uppermost; --i) result.push_back(array[i][switch_dir_2 ? leftmost : rightmost]);
            direction = dir_t::top_to_bottom;
            if (switch_dir_2) ++leftmost; else --rightmost;
            switch_dir_2 = !switch_dir_2;
            break;
        case dir_t::left_to_right:
            for (int j = leftmost; j <= rightmost; ++j) result.push_back(array[lowermost][j]);
            direction = dir_t::bottom_up;
            --lowermost;
            break;
        }
    }
    return result;
}
 
int main()
{
    auto array = spiral_traverse({ {1} });
    array = spiral_traverse({ {4,1}, {3,2} });
    array = spiral_traverse({ {7,8,1}, {6,9,2}, {5,4,3} });
    array = spiral_traverse({ {10,11,16,1}, {9,12,15,2}, {8,13,14,3}, {7,6,5,4} });
    array = spiral_traverse({ {13,14,23,22,1}, {12,15,24,21,2}, {11,16,25,20,3}, {10,17,18,19,4}, {9,8,7,6,5} });
    array = spiral_traverse({ {16,17,36,29,28,1}, {15,18,35,30,27,2}, {14,19,34,31,26,3}, {13,20,33,32,25,4}, {12,21,22,23,24,5}, {11,10,9,8,7,6} });
    return 0;
}
Добавлено через 1 минуту
PS: Думаю, что вывести на экран результирующий одномерный массив array вы сможете сами
1
Параллельный Кот
1904 / 826 / 350
Регистрация: 25.03.2016
Сообщений: 2,045
26.02.2019, 19:18 6
Дело было вечером - делать было нечего. Предлагаю еще один вариант. Поскольку ТС не уточнил, требуется ли заполнение матрицы или вывод элементов по указанному пути обхода, предусмотрел оба варианта.
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
#include <iostream>
#include <functional>
#include <string>
#include <sstream>
#include <vector>
 
using namespace std;
using Row = vector<int>;
using Matrix = vector<Row>;
using AccessFuncPtr = function<void(int &x)>;
 
struct Pos {
    long i, j;
};
 
struct Rect {
    long top, left, bottom, right;
 
    bool isCorrect() const {
        return ((top <= bottom) && (left <= right));
    }
 
    bool isContains(const Pos &pos) const {
        return ((pos.i >= top) && (pos.i <= bottom) && (pos.j >= left) && (pos.j <= right));
    }
};
 
struct Step {
    Pos mov;
    Pos ret;
    Rect ch_rect;
};
 
void traversal(Matrix &a, Pos pos, const vector<Step> &step_list, AccessFuncPtr access_func) {
    Rect rect = {0, 0, static_cast<long>(a.size() - 1), static_cast<long>(a[0].size() - 1)};
    while (rect.isCorrect()) {
        for (const Step &step : step_list) {
            // Если позиция не была исправлена,
            if (!rect.isCorrect() || !rect.isContains(pos)) {
                // значит обход не может быть продолжен.
                return;
            }
 
            while (rect.isContains(pos)) {
                // Вызов функции доступа к элементам матрицы.
                access_func(a[static_cast<size_t>(pos.i)][static_cast<size_t>(pos.j)]);
 
                // Перемещение текущей позиции.
                pos.i += step.mov.i;
                pos.j += step.mov.j;
            }
 
            // Исправление некорректной позиции.
            pos.i += step.ret.i;
            pos.j += step.ret.j;
 
            // Изменение размера области обхода.
            rect.top += step.ch_rect.top;
            rect.left += step.ch_rect.left;
            rect.bottom += step.ch_rect.bottom;
            rect.right += step.ch_rect.right;
        }
    }
}
 
string to_string(const Matrix &a) {
    stringstream ss;
    for (const auto &row : a) {
        for (const auto &x : row) {
            ss.width(5);
            ss << x;
        }
 
        ss << endl;
    }
 
    return ss.str();
}
 
int main() {
    const vector<Step> u_form = {
    //    di  dj   ->i ->j     t   l   b   r
        {{+1,  0}, {-1, -1}, { 0,  0,  0, -1}}, // Вниз*   | Вверх-Влево  | <Правый край.
        {{ 0, -1}, {-1, +1}, { 0,  0, -1,  0}}, // Влево*  | Вверх-Вправо | ^Нижний край.
        {{-1,  0}, {+1, +1}, { 0, +1,  0,  0}}, // Вверх*  | Вниз-Вправо  | >Левый край.
        {{+1,  0}, {-1, +1}, { 0, +1,  0,  0}}, // Вниз*   | Вверх-Вправо | >Левый край.
        {{ 0, +1}, {-1, -1}, { 0,  0, -1,  0}}, // Вправо* | Вверх-Влево  | ^Нижний край.
        {{-1,  0}, {+1, -1}, { 0,  0,  0, -1}}, // Вверх*  | Вниз-Влево   | <Правый край.
    };
 
    size_t m, n;
    cin >> m >> n;
 
    Matrix a = Matrix(m, Row(n));
 
    // Заполнение матрицы по указанному пути обхода.
    int it = 1;
    traversal(a, {0, static_cast<long>(n - 1)}, u_form, [&it](int &x) { x = it++; });
 
    // Вывод заполненной матрицы.
    cout << to_string(a) << endl;
 
    // Вывод элементов в порядке следования по указанному пути обхода.
    traversal(a, {0, static_cast<long>(n - 1)}, u_form, [](int &x) { cout << x << " "; });
    cout << endl;
 
    return 0;
}
Пример с обходом по спирали

Поскольку функция получилась относительно универсальной, можно сделать и другие варианты обхода от края к центру. Например, по спирали.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
const vector<Step> spiral_form = {
//    di  dj   ->i ->j     t   l   b   r
    {{+1,  0}, {-1, -1}, { 0,  0,  0, -1}}, // Вниз*   | Вверх-Влево  | <Правый край.
    {{ 0, -1}, {-1, +1}, { 0,  0, -1,  0}}, // Влево*  | Вверх-Вправо | ^Нижний край.
    {{-1,  0}, {+1, +1}, { 0, +1,  0,  0}}, // Вверх*  | Вниз-Вправо  | >Левый край.
    {{ 0, +1}, {+1, -1}, {+1,  0,  0,  0}}, // Вправо* | Вниз-Влево   | vВерхний край.
};
 
size_t m, n;
cin >> m >> n;
 
Matrix a = Matrix(m, Row(n));
 
// Заполнение матрицы по указанному пути обхода.
int it = 1;
traversal(a, {0, static_cast<long>(n - 1)}, spiral_form, [&it](int &x) { x = it++; });
 
// Вывод заполненной матрицы.
cout << to_string(a) << endl;
1
756 / 566 / 313
Регистрация: 24.02.2017
Сообщений: 2,005
26.02.2019, 20:28 7
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
#include <iostream>
#include <sstream>
using namespace std;
 
int main()
{
 string str="04 14 24 34 44 43 42 41 40 30 20 10 00 01 11 21 31 32 33 23 13 03 02 12 22";
 stringstream s(str);
 int arr[5][5];
 int n;
 
 for(int i=0;i<5;i++){
    for(int j=0;j<5;j++){
       arr[i][j]=i+j;
       cout<<arr[i][j]<<"  ";
      }
    cout<<"\n";
  }
 cout<<"\n\n\n";
 while(s>>n)
   cout<< arr[n/10][n%10]<<"  ";
 cout<<"\n";
 
  system("pause");
  return 0;
}
0
2 / 2 / 0
Регистрация: 01.10.2018
Сообщений: 210
26.02.2019, 22:08  [ТС] 8
valen10,я валенок и тз не указал но вот как должен выглядеть каркас( преподаватель не принимает никакие другие варианты((
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
#include "pch.h" 
#include <iostream> 
#include <math.h> 
#include <iomanip> 
using namespace std;
 
int main()
{
    setlocale(LC_ALL, "Russian");
    int  n, i, j, k, l;
    cout << "введите размерность массива" << endl;
    cin >> n;
    int m = n * n;
    int* b = new int[n*n];
    int** Mas = new int *[n];
    for (int i = 0; i < n; ++i)
        Mas[i] = new int[n];
 
    cout << "Enter\n";
    for (int i = 0; i < n; i++)
    {
        for (int j = 0; j < n; j++)
        {
            cin >> Mas[i][j];
        }
    }
    for (int i = 0; i < n; i++)
    {
        for (int j = 0; j < n; j++)
        {
            cout << Mas[i][j] << " ";
        }
        cout << "\n";
    }
    // тут нужно присвоить массиву b значения из двумерного массива Mas как показано на картинке
    cout << "полученный массив" << endl;
    for (int H = 0; H < m; H++)
    {
        cout << b[H];
    }
 
    return(0);
}
Добавлено через 19 минут
повар1, Можешь объяснить что происходит здесь ? ( мне нужно сначала присвоить значения двумерного массива в этом порядке, а потом вывести их)
C++
1
2
3
while(s>>n)
   cout<< arr[n/10][n%10]<<"  ";
 cout<<"\n";
0
756 / 566 / 313
Регистрация: 24.02.2017
Сообщений: 2,005
26.02.2019, 22:49 9
У нас есть строка в которой указан путь обхода массива. В этой строке например значение 04 означает: 0 - i строка, 4 - j элемент. Эту стоку вводим в поток ввода-вывода s. Из потока выводим с помощью while(s>>n) значения ij в int n (пробел в строке это разделитель значений). Если n/10 то получим индекс i. Если n%10 то получим индекс j.

Добавлено через 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
#include <iostream>
#include <sstream>
using namespace std;
 
int main()
{
 string str="04 14 24 34 44 43 42 41 40 30 20 10 00 01 11 21 31 32 33 23 13 03 02 12 22";
 stringstream s(str);
 int arr[5][5];
 int b[25];
 int n;
 
 for(int i=0;i<5;i++){
    for(int j=0;j<5;j++){
       arr[i][j]=i+j;
       cout<<arr[i][j]<<"  ";
      }
    cout<<"\n";
  }
 cout<<"\n\n\n";
 int i=0;
 while(s>>n){
   b[i]=arr[n/10][n%10];
   cout<<b[i]<<"  ";
   i++;
 }
 
 cout<<"\n";
 
  system("pause");
  return 0;
}
0
2 / 2 / 0
Регистрация: 01.10.2018
Сообщений: 210
27.02.2019, 17:13  [ТС] 10
повар1, а можешь сделать тот же вывод но для этого кода? Я просто вообще не догоняю что то, а препод просит оформить именно в такой форме((
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
#include "pch.h" 
#include <iostream> 
#include <math.h> 
#include <iomanip> 
using namespace std;
 
int main()
{
    setlocale(LC_ALL, "Russian");
    int  n, i, j, k, l;
    cout << "введите размерность массива" << endl;
    cin >> n;
    int m = n * n;
    int* b = new int[n*n];
    int** Mas = new int *[n];
    for (int i = 0; i < n; ++i)
        Mas[i] = new int[n];
 
    cout << "Enter\n";
    for (int i = 0; i < n; i++)
    {
        for (int j = 0; j < n; j++)
        {
            cin >> Mas[i][j];
        }
    }
    for (int i = 0; i < n; i++)
    {
        for (int j = 0; j < n; j++)
        {
            cout << Mas[i][j] << " ";
        }
        cout << "\n";
    }
    // тут нужно присвоить массиву b значения из двумерного массива Mas как показано на картинке
    cout << "полученный массив" << endl;
    for (int H = 0; H < m; H++)
    {
        cout << b[H];
    }
 
    return(0);
}
0
756 / 566 / 313
Регистрация: 24.02.2017
Сообщений: 2,005
27.02.2019, 18:48 11
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
#include <iostream>
 
using namespace std;
 
int main()
{
    setlocale(LC_ALL, "Russian");
    int  n=5;
    int bypass[25]={4,14,24,34,44,43,42,41,40,30,20,10,0,1,11,21,31,32,33,23,13,3,2,12,22};
 
    int* b = new int[n*n];
    int** Mas = new int *[n];
    for (int i = 0; i < n; ++i)
        Mas[i] = new int[n];
 
    cout << "Enter\n";
    for (int i = 0; i < n; i++)
    {
        for (int j = 0; j < n; j++)
        {
             cin >> Mas[i][j];
        }
    }
    for (int i = 0; i < n; i++)
    {
        for (int j = 0; j < n; j++)
        {
            cout << Mas[i][j] << " ";
        }
        cout << "\n";
    }
    for (int H = 0; H < 25; H++)
    {
         b[H]=Mas[bypass[H]/10][bypass[H]%10];
    }
    cout << "полученный массив" << endl;
    for (int H = 0; H < 25; H++)
    {
        cout << b[H]<<"  ";
    }
  return 0;
}
0
2 / 2 / 0
Регистрация: 01.10.2018
Сообщений: 210
27.02.2019, 19:04  [ТС] 12
повар1, есть еще один момент, двумерный массив динамический. там может быть 1 2 3 4 5 6 или более строк и столбцов. А тут только для статического
0
Параллельный Кот
1904 / 826 / 350
Регистрация: 25.03.2016
Сообщений: 2,045
27.02.2019, 21:12 13
Лучший ответ Сообщение было отмечено DrKappa как решение

Решение

Цитата Сообщение от DrKappa Посмотреть сообщение
А тут только для статического
Только это заметили? Логично же, что в строке жестко прописан порядок обхода только для массива 5x5. Странно, что из двух предложенных вариантов вами был выбран наименее подходящий.

Не знаю, что там еще запрещает ваш преподаватель, разрешены ли функции и структуры. Максимально упростил. Если еще и enum под запретом, замените его на обычные константы со значениями от 0 до 7 в порядке перечисления.
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
#include <iostream>
using namespace std;
 
int main() {
//    setlocale(LC_ALL, "Russian");
    int n;
    cout << "Введите размер массива" << endl;
    cin >> n;
 
    int m = n * n;
    int* b = new int[m];
    int** a = new int* [n];
    for (int i = 0; i < n; ++i) {
        a[i] = new int[n];
    }
 
    cout << "Matrix:" << endl;
    for (int i = 0; i < n; i++) {
        for (int j = 0; j < n; j++) {
            cin >> a[i][j];
        }
    }
 
    for (int i = 0; i < n; i++) {
        for (int j = 0; j < n; j++) {
            cout.width(4);
            cout << a[i][j] << " ";
        }
        cout << endl;
    }
 
    // тут нужно присвоить массиву b значения из двумерного массива Mas как показано на картинке
    enum {mov_i, mov_j, ret_i, ret_j, ch_top, ch_left, ch_bottom, ch_right};
    int step_list[][8] = {
    //   di  dj    ->i ->j     t   l   b   r
        {+1,  0,    -1, -1,    0,  0,  0, -1}, // Вниз*   | Вверх-Влево  | <Правый край.
        { 0, -1,    -1, +1,    0,  0, -1,  0}, // Влево*  | Вверх-Вправо | ^Нижний край.
        {-1,  0,    +1, +1,    0, +1,  0,  0}, // Вверх*  | Вниз-Вправо  | >Левый край.
        {+1,  0,    -1, +1,    0, +1,  0,  0}, // Вниз*   | Вверх-Вправо | >Левый край.
        { 0, +1,    -1, -1,    0,  0, -1,  0}, // Вправо* | Вверх-Влево  | ^Нижний край.
        {-1,  0,    +1, -1,    0,  0,  0, -1}  // Вверх*  | Вниз-Влево   | <Правый край.
    };
 
    int pos_i = 0;
    int pos_j = n - 1;
    int top = 0;
    int left = 0;
    int bottom = n - 1;
    int right = n - 1;
    int insert_pos = 0;
 
    while ((top <= bottom) && (left <= right)) {
        for (const auto &step : step_list) {
            // Если позиция не была исправлена,
            if ((top > bottom) || (left > right) || (pos_i < top) || (pos_i > bottom) || (pos_j < left) || (pos_j > right)) {
                // значит обход не может быть продолжен.
                break;
            }
 
            while ((pos_i >= top) && (pos_i <= bottom) && (pos_j >= left) && (pos_j <= right)) {
                b[insert_pos++] = a[pos_i][pos_j];
 
                // Перемещение текущей позиции.
                pos_i += step[mov_i];
                pos_j += step[mov_j];
            }
 
            // Исправление некорректной позиции.
            pos_i += step[ret_i];
            pos_j += step[ret_j];
 
            // Изменение размера области обхода.
            top += step[ch_top];
            left += step[ch_left];
            bottom += step[ch_bottom];
            right += step[ch_right];
        }
    }
 
    cout << "Полученный массив: " << endl;
    for (int i = 0; i < m; i++) {
        cout << b[i] << " ";
    }
 
    return(0);
}
1
2 / 2 / 0
Регистрация: 01.10.2018
Сообщений: 210
27.02.2019, 22:42  [ТС] 14
valen10, я валенок еще тот и знаю что прошу слишком много, но все же если у вас есть свободное время объясните пожалуйста : как значения из step_list присваиваются элементам enum, что это значит
C++
1
while ((top <= bottom) && (left <= right))
, Как работает исправление некорректной позиции, почему переменная bottom и right равны n-1 и
C++
1
while ((top <= bottom) && (left <= right))
как это работает?

Добавлено через 13 минут
valen10, и
C++
1
2
3
4
5
6
7
 while ((pos_i >= top) && (pos_i <= bottom) && (pos_j >= left) && (pos_j <= right)) {
                b[insert_pos++] = a[pos_i][pos_j];
 
                // Перемещение текущей позиции.
                pos_i += step[mov_i];
                pos_j += step[mov_j];
            }
как это работает? как происходит смена mov i и mov j ?
0
Параллельный Кот
1904 / 826 / 350
Регистрация: 25.03.2016
Сообщений: 2,045
28.02.2019, 00:31 15
Цитата Сообщение от DrKappa Посмотреть сообщение
как значения из step_list присваиваются элементам enum
Где? В enum, грубо говоря, хранятся именованные константы. Здесь они используются для доступа к одному из элементов массива без использования магических чисел.

Цитата Сообщение от DrKappa Посмотреть сообщение
что это значит
C++
1
while ((top <= bottom) && (left <= right))
Проверка правильности границ. Номер верхней строки не может быть больше номера нижней. Номер левого столбца не может быть больше номера правого. Возможно, это и не обязательно проверять (подумать надо). По сути, если границы будут не правильными, тогда и текущая позиция не будет в них попадать ни при каком условии. Можно и на while (true) заменить. Наверное.

Цитата Сообщение от DrKappa Посмотреть сообщение
почему переменная bottom и right равны n-1
Отвечу вопросом на вопрос: как соотносятся между собой количество элементов массива и максимальный индекс этого же массива?

Цитата Сообщение от DrKappa Посмотреть сообщение
как это работает?
Устанавливаются границы (top, left, bottom, right), фиксируется текущая позиция (pos_i, pos_j). И дальше в цикле изменяется текущая позиция, пока это возможно. Каждая строка массива step_list содержит 8 чисел: 1е и 2е - это изменение текущей позиции. Изменение позиции выполняется до тех пор, пока она не выскочит за установленные границы. После этого используются 3е и 4е числа - восстановление правильной позиции. Это два действия: шаг назад и шаг в правильном направлении. И после этого используются последние четыре числа - изменение границ. После прохода вдоль одной из границ её необходимо сдвинуть в направлении к центру.

Массив: Вывести массив по заданной схеме...
1
2 / 2 / 0
Регистрация: 01.10.2018
Сообщений: 210
28.02.2019, 14:52  [ТС] 16
valen10, а тут
C++
1
for (const auto &step : step_list)
мы определяем тип данных в step_list или?
0
Параллельный Кот
1904 / 826 / 350
Регистрация: 25.03.2016
Сообщений: 2,045
28.02.2019, 23:53 17
Цитата Сообщение от DrKappa Посмотреть сообщение
мы определяем тип данных в step_list или?
Здесь просто по порядку просматриваются все строки массива в цикле range-based for. Спецификатор auto позволяет не писать тип данных вручную (здесь это должен быть int[8]).
0
2 / 2 / 0
Регистрация: 01.10.2018
Сообщений: 210
01.03.2019, 18:15  [ТС] 18
valen10, при обходе матрицы больше 5 возникает проблемка, после обхода правой, нижней и левой стенки дальше массив должен закручиваться змейкой в центр. При обходе массива больше 5 он на 7 обходе ломает эту змейку и идет иначе? Как можно это поправить?
Миниатюры
Массив: Вывести массив по заданной схеме...  
0
Параллельный Кот
1904 / 826 / 350
Регистрация: 25.03.2016
Сообщений: 2,045
01.03.2019, 18:38 19
DrKappa, вот это поворот! Разве обходы не должны чередоваться? По вашему рисунку это не понятно. Сделайте тогда рисунок для 7 и 8, например, чтобы уточнить этот момент.
0
5666 / 3112 / 1299
Регистрация: 07.02.2019
Сообщений: 7,803
01.03.2019, 18:48 20
Цитата Сообщение от DrKappa Посмотреть сообщение
При обходе массива больше 5 он на 7 обходе ломает
ничего не ломает, присмотритесь, это исходный массив "сломан"
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
01.03.2019, 18:48
Помогаю со студенческими работами здесь

Сортировка: Как сделать так, чтобы двумерный массив выводился по заданной схеме...
Помогите.Как сделать так, что бы двумерный массив выводился так : . . . 3 . ... 6 1 2 9 ...

Массив: Создать двумерный массив, заполнив его согласно заданной схеме

Заполнить массив по заданной схеме
Заполнить массив следующим образом: \begin{pmatrix} 1&amp; 2&amp; 3&amp; 4&amp; 5&amp; 6&amp; 7&amp; 8&amp; 9&amp; 10&amp; \\ ...

Заполнить массив по заданной схеме
Двумерный массив: 1 1 1 1 1 1 1 2 3 4 5 6 1 3 6 10 15 21 1 4 10 20 25 56 1 5...


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2023, CyberForum.ru