Форум программистов, компьютерный форум, киберфорум
Наши страницы
C для начинающих
Войти
Регистрация
Восстановить пароль
 
Шмебулок
0 / 0 / 0
Регистрация: 21.10.2018
Сообщений: 36
1

Нарисовать матрицу звёздочками по спирали, начиная с правого верхнего угла (упростить код)

24.12.2018, 16:30. Просмотров 284. Ответов 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
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <conio.h>
void gotoxy (int row, int col)
{
    printf("\033[%d;%dH", row, col);
}
int main()
{
    int i, j;
    const int M=25, N=80;
    const int d=100;
    system("cls");
    for (j=79; j>1; j--)
    {
        for (i=1; i<M; i++)
        {
            gotoxy(i,j);
            printf("*");
            usleep(d);
        }
        break;
    }
    for (i=24; i>1; i--)
    {
        for (j=79; j>1; j--)
        {
            gotoxy(i,j);
            printf("*");
            usleep(d);
        }
        break;
    }
    for (j=1; j<N; j++)
    {
        for (i=24; i>0; i--)
        {
            gotoxy(i,j);
            printf("*");
            usleep(d);
        }
        break;
    }
    for (i=0; i<M; i++)
    {
        for (j=0; j<N-1; j++)
        {
            gotoxy(i,j);
            printf("*");
            usleep(d);
        }
        break;
    }
getch();
    return 0;
}
0
QA
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
24.12.2018, 16:30
Ответы с готовыми решениями:

Заполнение прямоугольной матрицы по спирали, начиная с левого верхнего угла
Помогите с решением Дана пустая прямоугольнай матрица .Заполнить ее целыми числами от 1 до по...

Обход матрицы по спирали по часовой стрелке, начиная с левого верхнего угла
Выполнить обход матрицы по спирали по часовой стрелке, начиная с левого верхнего угла. Вывести...

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

Заполнить матрицу значениями вектора от левого верхнего угла по спирали
Привет есть задачка: &quot;Заполнить матрицу значениями вектора b1, b2, ..., b81 от левого верхнего...

Заполнить матрицу змейкой, начиная с правого верхнего угла
2)Заполнить двумерный массив m на n (m и n вводятся с клавиатуры, оба числа не больше 10) змейкой...

3
D3m1an
206 / 160 / 77
Регистрация: 11.08.2016
Сообщений: 590
Завершенные тесты: 1
24.12.2018, 16:45 2
Шмебулок, Заполнение матрицы по спирали
Здесь имеется пример заполнения массива по спирали.

Только я вот понять не могу, итоговый массив заполненный полностью звёздочками будет одинаков, от куда бы Вы не начали его заполнять
0
Шмебулок
0 / 0 / 0
Регистрация: 21.10.2018
Сообщений: 36
24.12.2018, 17:45  [ТС] 3
Мне просто нужно как бы нарисовать путь по спирале звёздочками, задание в том чтобы узреть как звёздочки рисуют матрицу)
0
D3m1an
206 / 160 / 77
Регистрация: 11.08.2016
Сообщений: 590
Завершенные тесты: 1
25.12.2018, 18:07 4
Шмебулок, попробуйте этого Франкенштейна :

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
#include <stdio.h>
#include <stdlib.h>
 
#define valid(i, j) 0 <= i && i < m && 0 <= j && j < n && !s[i][j]
int main(int c, char **v)
{
    int i, j, m = 0, n = 0;
 
    /* default size: 5 */
    if (c >= 2) m = atoi(v[1]);
    if (c >= 3) n = atoi(v[2]);
    if (m <= 0) m = 5;
    if (n <= 0) n = m;
 
    int **s = calloc(1, sizeof(int *) * m + sizeof(int) * m * n);
    s[0] = (int*)(s + m);
    for (i = 1; i < m; i++)
        s[i] = s[i - 1] + n;
 
    int dx = 1, dy = 0, val = 0, t;
    for (i = j = 0; valid(i, j); i += dy, j += dx ) 
    {
        for (; valid(i, j); j += dx, i += dy)
        {    
            s[i][j] = 8;
            system("clear");
            for(int i = 0; i < m; i++)
                for(int j = 0; j < n || !putchar('\n'); j++)
                    printf("%*d", t, s[i][j]);
            for(int i = 1000; i ; i--)
                for(int j = 100; j ; j--); 
        }
        
        j -= dx; i -= dy;
        t = dy; dy = dx; dx = -t;
    }
 
 
    return 0;
}
Чуток перепилить и будут звездошки а пока я с мобильника большее не могу ))
0
25.12.2018, 18:07
Answers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
25.12.2018, 18:07

Заполнить матрицу начиная с левого верхнего угла закручивающейся по спирали
Как заполнить матрицу размера (m,p) натуральными числами от 1-го до (m-p) начиная с левого верхнего...

Заполнить квадратную матрицу, начиная от левого верхнего угла по спирали (возникает исключение)
Задача : Заполнить квадратную матрицу начинаю от левого верхнего угла по спирали : вправо - вниз -...

Заполнение матрицы по спирали с верхнего правого угла
заполнение матрицы по спирали начиная с перхнего правого угла Добавлено через 18 часов 29 минут...


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

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

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