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

спираль с меню консоли

11.11.2019, 20:12. Показов 1836. Ответов 2
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Хелп, пожалуйста, не могу найти проблему в программе, буду очень благодарна


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
135
136
137
138
139
140
141
142
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
 
int main()
{
    int w, h;
    printf("vvedite dlinu spirali (1-12): ");
    scanf_s("%d", &w);
    printf_s("vvedite shirinu spirali  (1-12): ");
    scanf_s("%d", &h);
 
    if (w < 1 || w>12 || h < 1 || h>12)
    {
        printf_s("Nevernoye znacheniye shiriny ili dliny\n");
        return(1);
    }
    int a[12][12];
    int key = 1;
    int ch;
    int n = 0;
    int m = 0;
    int i, j;
 
    do
    {
        system("CLS");
        printf_s(" 1)zavorachivayetsya snaruzhi po chasovoy"); if (key == 1 || key == 49) printf_s("<-");
        printf_s("\n 2)zavorachivayetsya snaruzhi protiv chasovoy"); if (key == 2 || key == 50) printf_s("<-");
        printf_s("\n 3)zavorachivayetsya iznutri po chasovoy"); if (key == 3 || key == 51) printf_s("<-");
        printf_s("\n 4)zavorachivayetsya iznutri protiv chasovoy"); if (key == 4 || key == 52) printf_s("<-");
        ch=_getch();
        _kbhit();
        printf("%d", ch);
        switch (ch)
        {
        case '1':
            key = 1;
            break;
        case '2':
            key = 2;
                break;
        case '3':
            key = 3;
            break;
        case '4':
            key = 4;
                break;
        }
 
        switch (ch)
        {
            case 72:
                key--;
                break;
            case 80:
                key++;
                break;
            
        }
        if (key < 1 || key>4)
        {
            printf("Goodbay!\n");
            return(0);
        }
        
        if (key == 1  || key == 4 ) while (1)
        {
            m++;
            for (i = m - 1; i < w - m + 1; i++)
            {
                n++;
                a[m - 1][i] = key < 3 ? n : w * h + 1 - n;
            }
            if (n >= w * h)break;
 
            for (i = m; i < h - m + 1; i++)
            {
                n++;
                a[i][w - m] = key < 3 ? n : w * h + 1 - n;
            }
            if (n >= w * h)break;
 
            for (i = w - m - 1; i >= m - 1; i--)
            {
                n++;
                a[h - m][i] = key < 3 ? n : w * h + 1 - n;
            }
            if (n >= w * h)break;
 
            for (i = h - m - 1; i >= m; i--)
            {
                n++;
                a[i][m - 1] = key < 3 ? n : w * h + 1 - n;
            }
            if (n >= w * h)break;
        }
        if (key == 2  || key == 3 ) while (1)
        {
            m++;
            for (i = m - 1; i < h - m + 1; i++)
            {
                n++;
                a[i][m - 1] = key < 3 ? n : w * h + 1 - n;
            }
            if (n >= w * h)break;
 
            for (i = m; i < w - m + 1; i++)
            {
                n++;
                a[h - m][i] = key < 3 ? n : w * h + 1 - n;
            }
            if (n >= w * h)break;
 
            for (i = h - m - 1; i > m - 1; i--)
            {
                n++;
                a[i][w - m] = key < 3 ? n : w * h + 1 - n;
            }
            if (n >= w * h)break;
 
            for (i = w - m - 1; i >= m; i--)
            {
                n++;
                a[m - 1][i] = key < 3 ? n : w * h + 1 - n;
            }
            if (n >= w * h)break;
        }
        printf("\nvasha spiral:\n ");
        for (i = 0; i < n; i++)
        {
            for (j = 0; j < w; j++)
            {
                printf("%4d", a[i][j] ? a[i][j] : 0);
            }
            printf("\n");
        }
        return(0);
    }
    while (ch!=13);
}
0
11.11.2019, 20:12
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
11.11.2019, 20:12
Ответы с готовыми решениями:

Изобразить прямоугольную спираль из 5 витков. Обеспечить циклическое изменение (1 пиксел - 3 пиксела) толщины линий, которыми отрисована спираль
Спираль из 5 витков изобразил... помогите пожалуйста сделать анимацию изменения толщины линий unit Unit1; interface uses ...

Изобразить прямоугольную спираль из 5 витков. Обеспечить циклическое изменение (1 пиксел - 3 пиксела) толщины линий, которыми отрисована спираль
Спираль из 5 витков изобразил... помогите пожалуйста сделать анимацию изменения толщины линий unit Unit1; interface uses ...

Меню в консоли
namespace ConsoleApplication3 { class Program { static void Main(string args) { int i; ...

2
Just Do It!
 Аватар для XLAT
4101 / 2494 / 643
Регистрация: 23.09.2014
Сообщений: 8,116
Записей в блоге: 2
11.11.2019, 20:49 2
Цитата Сообщение от ilnfila Посмотреть сообщение
не могу найти проблему
может её там и нет?
0
Just Do It!
 Аватар для XLAT
4101 / 2494 / 643
Регистрация: 23.09.2014
Сообщений: 8,116
Записей в блоге: 2
12.11.2019, 19:32 3
вюер проблем для спирали:
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
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
///----------------------------------------------------------------Вьюер проблем 
/// Спираль.
/// со СИСТЕМОЙ ТЕСТИРОВАНИЯ для поиска проблем...
/// 
/// Тест проходит для следующих наборов данных:
///     1. когда кол-во столбцов больше кол-ва рядов.
///     2. когда кол-во столбцов равно  кол-ву рядов.
///     3. когда кол-во рядов    больше кол-ва столбцов.
///     4. Столбцы и ряды меняются по чёту/нечёту.
///         конкретно так:  4,4     4,5     4,6
///                         5,4     5,5     5,6
///                         6,4     6,5     6,6
/// Одновременно на экране отображаются 3 варианта спирали:
///     1. изнутри по часовой стерелке...
///     2. изнутри против часовой (ОТСУТСТВУЕТ!)...
///     3. снаружи по часовой ...
///     4. снаружи против часовой стреки.
///
/// Задачи стенда при поиске проблем:
///     1. избежание КРАША.
///     2. лучшая визуализация.
///----------------------------------------------------------------------------:
#include <iostream>
#include <iomanip>
#include <conio.h>
 
struct smystart
{   smystart()
    {   setlocale(0, "");
        system("mode 150, 60");
    }
}sys;
 
///----------------------------------------------------------------------------|
/// Встроенные отладочные процедуры(и макросы).
///----------------------------------------------------------------------------:
#define FORi(v) for(int i  = 0; i < v; ++i)
#define FORj(v) for(int j  = 0; j < v; ++j)
#define LOG(v)              std::cout << #v << " = " << v << "\n"
#define LOGS(v)             std::cout << v << "\n"
#define ENDL                std::cout << "\n";
#define BANNER(a,b,c)       std::cout <<"\n"<< a <<"\n"<< b <<"\n"<< c <<"\n";
#define ASSERT(v,str) if(v) std::cout << "\nERROR: [line] = " __LINE__ \
                                      << " -> " << str << "\n\n";
#define IS_OUT_ROUND(r,c) is_out_round(r, row, c, col, count)
#define SHOW_MATRIX   show        (arr, row, col)
#define RESET_MATRIX  reset_matrix(arr, row, col)
 
#define SHOW(N, color) cout << "\t" << #N << "\t = "; \
                mySetColor(color);                    \
                cout << N << "\n";                    \
                mySetColor()
#define S(N,C) mySetColor(C);std::cout<<N;mySetColor();
#define PAUSE    mySetColor(10);\
    ENDL;LOGS("продолжить... жми любую кнпоку!\n"); _getch(); system("cls");\
    mySetColor();
#include <Windows.h>
void mySetColor(UINT text = 7, UINT background = 0) // #include <Windows.h>
{   SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),
                                        (WORD)((background << 4) | text));
}
 
///----------------------------------------------------------------------------|
/// Для работы с двумерными динамическими массивами.
///----------------------------------------------------------------------------:
void arr_delete(int**& a, int r)
{   FORi(r) delete[] a[i];
            delete[] a;
}
int** arr_create(int** a, int r, int c)
{   if(a) arr_delete(a, r);
            a    = new int*[r];
    FORi(r) a[i] = new int [c];
    return a;
}
///----------------------------|
/// На экран.                  |
///----------------------------:
void show(int** a, int row, int col)
{   std::cout << "\n\n";
    for    (int r = 0; r < row; ++r)
    {   for(int c = 0; c < col; ++c)
        {   if((a[r][c] <= row*col) && (a[r][c] > 0))
            std::cout << std::setw(4)
                      << a[r][c] - 1;
            else
            {   std::cout 
                      << std::setw(4);
                      S("X", 12);
            } 
        }   ENDL;
    }
}
void reset_matrix(int** a, int row, int col)
{   for    (int r = 0; r < row; ++r)
        for(int c = 0; c < col; ++c)
            a[r][c] = -1;
}
 
bool is_out_round(int r, int row, int c, int col, int count)
{   mySetColor(12);
    bool b = false;
    if(r >= row )
    {   LOGS("ERROR: Выход за нижнюю границу матрицы!" ); b = true;}
    else if(r < 0)
    {   LOGS("ERROR: Выход за верхнюю границу матрицы!"); b = true;}
    if(c >= col)
    {   LOGS("ERROR: Выход за правую границу матрицы!" ); b = true;}
    else if(c < 0)
    {   LOGS("ERROR: Выход за левую границу матрицы!"  ); b = true;}
    if(b)
    {   count--;
        LOG(c);
        LOG(r);
        LOG(count);
    }
    mySetColor();
    return b;
}
 
int rotk(int k, int s = 1)
{   int a;
    if(s >  0) a = 3;
    else       a = 0;
    if(k == a) k = abs(a-3);
    else       k += s;
    return k;
}
 
///----------------------------------------------------------------------------|
/// Старт.
///----------------------------------------------------------------------------:
int main()
{   
    int   row = 4;
    int   col = 4;
    int** arr = NULL; 
        
    if(1) goto m; /// 1 - отключаем интерактивность на время тестирования!
    
    std::cout << "Введите количество рядов   : "; std::cin >> row;
    std::cout << "Введите количество столбцов: "; std::cin >> col;
    std::cout << "1 - по     часовой.\n";
    std::cout << "2 - против часовой.\n\n";
    int b0; std::cout << ">>> "; std::cin >> b0; std::cout << "\n";
    std::cout << "1 - во внутрь.\n";
    std::cout << "2 - из нутри.\n\n";
    int b1; std::cout << ">>> "; std::cin >> b1; std::cout << "\n";
    switch(b0)
    {   case 1: { break;}
        //case 2: { pr = &c; pc = &r; std::swap(col, row); break;}
        case 3: { break;}
        case 4: { break;}
        default: ;
    }
    m:;
                            BANNER(
"///----------------------------|",
"/// Начать тестирование....    |",
"///----------------------------:")              BANNER(
"///-------------------------------------------------|",
"/// Будет выполнено 9 раз для разных наборов данных |",
"///-------------------------------------------------:")
int test = 0;
 
for(row = 4; row < 7; row++){
for(col = 4; col < 7; col++){
    
        int   r = 0;
        int   c = 0;
    
    PAUSE;
    mySetColor(8);
    test++; LOG(test);
                                BANNER(
    "///----------------------------|",
    "/// Вводные.                   |",
    "///----------------------------:")
    mySetColor(11);
    LOG(row);
    LOG(col);
    mySetColor();
    ENDL;
 
    ///----------------------------|
    /// Динамический массив.       |
    ///----------------------------:
    arr = arr_create(arr, row, col);
    
    int a     = 0;
    int count = 1;
    int k     = 0;
    
    RESET_MATRIX;
    ENDL; LOGS("Изнутри почасовой------------------------------------------1:");
    if(row <= col)
    {   c = (row-1)/2; r = (row - 1)/2; a = c-1;
        while(true)
        {   if(IS_OUT_ROUND(r, c)) break;
            arr[r][c] = count;    
            if(count++ == (row * col)) break;
            switch(k)
            {   case 0:if(++c == col-1-a) k = 1;       break;
                case 1:if(++r == row-1-a) k = 2;       break;
                case 2:if(--c == 0+a)    {k = 3; }     break;
                case 3:if(--r == 0+a)    {k = 0; a--;} break;
            }
        }
    }
    else
    {   c = (col-1)/2; r = (col - 1)/2; a = c-1;
        k = 1;
        while(true)
        {   if(0)
            {
            std::cout   << "\n\n"; LOG(c);
                                   LOG(r);
            std::cout   << std::setw(4)
                        << count; _getch();
            }
            if(IS_OUT_ROUND(r, c)) break;
            arr[r][c] = count;
            if(count++ == (row * col)) break;
            switch(k)
            {   case 0:if(++c == col-1-a) {k = 1; a--;} break;
                case 1:if(++r == row-1-a) {k = 2; }     break;
                case 2:if(--c == 0+a)     {k = 3; }     break;
                case 3:if(--r == 0+a)     {k = 0; }     break;
            }
        }
    }
    SHOW_MATRIX;
    
    RESET_MATRIX;
    ENDL; LOGS("Снаружи по часовой-----------------------------------------2:");
    r = c = 0;
    a     = 0;
    count = 1;
    k     = 0;
    int s = 1;
    while(true)
    {   if(IS_OUT_ROUND(r, c)) break;
        arr[r][c] = count;
        if(count++ == (row * col)) break;
        switch(k)
        {   case 0:if(++c == col-1-a) {k = rotk(k,s);       }break;
            case 1:if(++r == row-1-a) {k = rotk(k,s);       }break;
            case 2:if(--c == 0+a)     {k = rotk(k,s); a++;  }break;
            case 3:if(--r == 0+a)     {k = rotk(k,s);       }break;
        }
    }
    SHOW_MATRIX; ENDL;
    
    RESET_MATRIX;
    ENDL; LOGS("Снаружи против часовой-------------------------------------3:");
    /// Тут попытка приспособить код для "по часовой"
    /// способом настройки входных данных. (т.е. сам код полностью индентичен)
    c     = 0;
    r     = row - 1;
    a     = 0;
    count = 1;
    k     = 0;
    s     =-1;
    while(true)
    {   if(IS_OUT_ROUND(r, c)) break;
        arr[r][c] = count;
        if(count++ == (row * col)) break;
        switch(k)
        {   case 0:if(++c == col-1-a) {k = rotk(k,s);       }break;
            case 1:if(++r == row-1-a) {k = rotk(k,s);       }break;
            case 2:if(--c == 0+a)     {k = rotk(k,s); a++;  }break;
            case 3:if(--r == 0+a)     {k = rotk(k,s);       }break;
        }
    }
    SHOW_MATRIX;
    
}} // Конец тестирования-------------------------------------------------------!
 
    ///----------------------------|
    /// Чистим память.             |
    ///----------------------------:
    arr_delete(arr, row);
    S("\n\nПРОГРАММА ЗАВЕРШЕНА!\n\n", 10);
    std::cin.get();
    return 0;
}
0
12.11.2019, 19:32
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
12.11.2019, 19:32
Помогаю со студенческими работами здесь

Меню в консоли
Возможно ли реализовать небольшое меню в консоли. Что-то типа такого : 1) Задать значения &lt;&lt;-- 2) Сбросить значения...

Меню в консоли
По условию нужно сделать что-то вроде меню в консоли. Чисто теоретически порядок знаю, но с реализацией проблемы((( в while массив из 5...

Меню в консоли
не могу разобраться как сделать рабочее меню в консоли . #include &lt;iostream&gt; using namespace std; int ost(int x, int st, int...

Меню в консоли
Здравствуйте! У меня есть класс с реализованным меню, вот код: /// &lt;summary&gt; /// Выбор происходит стрелками ...

Меню на консоли
Здравствуйте! Изучаю C++, для практики ради делаю консольное меню через класс. Может быть мне, пока что, ещё далеко до претендента на...


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

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

Редактор формул (кликните на картинку в правом углу, чтобы закрыть)
Опции темы

Новые блоги и статьи
Что означает знак восклицания в TypeScript
hw_wired 14.02.2025
TypeScript - удивительный язык программирования, который предоставляет множество возможностей для работы с типами данных. Особый интерес вызывает оператор утверждения ненулевого значения, который. . .
Как свернуть/скрыть секции кода в Visual Studio Code
hw_wired 14.02.2025
Ежедневно мы работам с файлами, содержащими сотни и тысячи строк кода. Навигация по такому объему становится настоящим испытанием, особенно когда нужно быстро найти нужный метод или переменную. . . .
Автоматическое создание файла requirements.tx­t в Python
hw_wired 14.02.2025
Дружелюбная среда для разработки на Python, один из самых широко используемых языков программирования, состоит не только из самого кода, но и целого ряда важных компонентов. И если вы когда-нибудь. . .
Передача переменных окружения в контейнер Docker
hw_wired 14.02.2025
При работе с Docker контейнерами возникает необходимость передать различные настройки и конфигурационные параметры - от строк подключения к базам данных до API ключей. И хотя можно жестко прописать. . .
Отличия Constructor и ngOnInit в Angular
hw_wired 14.02.2025
Разработка компонентов в Angular - непростая задача, особенно когда дело доходит до правильной инициализации и управления их жизненным циклом. Каждый разработчик рано или поздно сталкивается с. . .
Ошибка "Transport security has blocked a cleartext HTTP" в iOS
hw_wired 14.02.2025
В iOS-разработке часто возникают неожиданные препятствия, и одним из самых распространенных является сообщение об ошибке "Transport security has blocked a cleartext HTTP". Эта ошибка появляется,. . .
Ошибка "Cleartext HTTP traffic not permitted" в Android
hw_wired 13.02.2025
При разработке Android-приложений можно столнуться с неприятной ошибкой "Cleartext HTTP traffic not permitted", которая может серьезно затруднить отладку и тестирование. Эта проблема особенно. . .
Изменение версии по умолчанию в NVM
hw_wired 13.02.2025
Node Version Manager, или коротко NVM - незаменимый инструмент для разработчиков, использующих Node. js. Многие сталкивались с ситуацией, когда разные проекты требуют различных версий Node. js,. . .
Переименование коммита в Git (локального и удаленного)
hw_wired 13.02.2025
Git как система контроля версий предоставляет разработчикам множество средств для управления этой историей, и одним из таких важных средств является возможность изменения сообщений коммитов. Но зачем. . .
Отличия Promise и Observable в Angular
hw_wired 13.02.2025
В веб-разработки асинхронные операции стали неотъемлимой частью почти каждого приложения. Ведь согласитесь, было бы странно, если бы при каждом запросе к серверу или при обработке больших объемов. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru