Форум программистов, компьютерный форум, киберфорум
C# для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.73/11: Рейтинг темы: голосов - 11, средняя оценка - 4.73
5 / 5 / 4
Регистрация: 02.03.2016
Сообщений: 43

Заполнение массива против часовой стрелки

10.03.2016, 19:43. Показов 2458. Ответов 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
            int[,] t = new int[12, 12];
            int n = 0;
 
            for (int z = 0; z < 5; z++)
            {
                for (int i = 1 + z; i < 10 - z; i++)//верх
                {
                    n++;
                    t[1 + z, i] = n;
                }
 
                for (int i = 1 + z; i < 10 - z; i++)//право 
                {
                    n++;
                    t[i, 10 -z] = n;
                }
 
                for (int i = 10 - z; i > 1 + z; i--) //низ
                {
                    n++;
                    t[10 - z, i] = n;
                }
                for (int i = 10 - z; i > 1 + z; i--)//лево
                {
                    n++;
                    t[i, 1 + z] = n;
                }
            }
         for (int i = 0; i < 12; i++)
            {
                for (int j = 0; j < 12; j++)
                {
                    Console.Write(t[i, j] + " ");
                }
                Console.WriteLine();
            }
Но это не важно, т.к. у меня это получилось. А вот заполнить массив ИЗ ЦЕНТРА до краев против часовой стрелки у меня никак не выходит, все перепробовал и по-разному подставлял, так нормально не получилось...
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
10.03.2016, 19:43
Ответы с готовыми решениями:

Поворот матрицы по и против часовой стрелки
вопрос вобщем то не новый, нагуглил кучу тем, но по больше части везде решение на паскале, а я хоть когда то и учил его, но уже почти...

Сортировка точек в порядке следования против часовой стрелки
Здравствуйте, снова задачка с курсов, нужна ваша помощь. Необходимо отсортировать точки в порядке следования против часовой стрелки,...

Заполнить двумерный массив цифрами по спирали, против часовой стрелки
Доброго времени суток. Вот задание : Заполнить двумерный массив цифрами по спирали, против часовой стрелки. Вот решение: ...

5
979 / 874 / 350
Регистрация: 26.04.2012
Сообщений: 2,647
10.03.2016, 19:53
Не это ли вам надо?
0
5 / 5 / 4
Регистрация: 02.03.2016
Сообщений: 43
10.03.2016, 20:16  [ТС]
EvilFromHell, не совсем...
вот для наглядности картинка
Миниатюры
Заполнение массива против часовой стрелки  
0
5 / 5 / 4
Регистрация: 02.03.2016
Сообщений: 43
10.03.2016, 20:34  [ТС]
И еще принципиально, чтобы массив заполнялся от 0 до 100, т.к. мне нужно реализовать визуализацию этого процесса, как здесь (Windows Form)
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
                 for (int z = 0; z < 5; z++)
                {
                    for (int i = 1 + z; i < 10 - z; i++)
                    {
                        System.Threading.Thread.Sleep(speed0);
                        but1[i, 1 + z].BackColor = Color.Yellow;
                        but1[i, 1 + z].Refresh();
                    }
 
                    for (int i = 1 + z; i < 10 - z; i++)
                    {
                        System.Threading.Thread.Sleep(speed0);
                        but1[10 - z, i].BackColor = Color.Yellow;
                        but1[10 - z, i].Refresh();
                    }
 
                    for (int i = 10 - z; i > 1 + z; i--)
                    {
                        System.Threading.Thread.Sleep(speed0);
                        but1[i, 10 - z].BackColor = Color.Yellow;
                        but1[i, 10 - z].Refresh();
                    }
                    for (int i = 10 - z; i > 1 + z; i--)
                    {
                        System.Threading.Thread.Sleep(speed0);
                        but1[1 + z, i].BackColor = Color.Yellow;
                        but1[1 + z, i].Refresh();
                    }
                }
Только тут получается немного по-другому идет "закручивание". Имеется ввиду по зеркальному отражению, относительно примера в начале темы
0
979 / 874 / 350
Регистрация: 26.04.2012
Сообщений: 2,647
11.03.2016, 21:08
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
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
 
namespace WindowsFormsApplication57
{
    public partial class Form1 : Form
    {
        public ArrayDrawer AD = new ArrayDrawer();
        public Form1()
        {
            InitializeComponent();
            this.DoubleBuffered = true;
            Timer t = new Timer() { Interval = 30 };
            t.Tick += (s, e) => { AD.Currentnumber++; Invalidate(); if (AD.Currentnumber == 100) t.Stop(); };
            t.Start();
        }
 
        private void Form1_Paint(object sender, PaintEventArgs e)
        {
            AD.Draw(e.Graphics);
        }
    }
 
    public class ArrayDrawer
    {
        public int Currentnumber { get { return currentNumber; } set {
                if (value > SquareSize * SquareSize) throw new ArgumentException("Число больше максимума");
                if (value < 0) throw new ArgumentException("Число меньше нуля");
                else currentNumber = value; } }
        public Point Location;
        public int OnePointWidth { get; set; } = 20;
        public int FontSize { get; set; } = 8;
        public int SquareSize { get; set; } = 10;
 
        public int[,] CurrentArray
        {
            get { return (int[,])arr.Clone(); }
        }
 
        private int[,] arr;
        private int currentNumber=1;
        public void Draw(Graphics g)
        {
            arr = new int[SquareSize+1, SquareSize+1];
            Point lastUsed = Point.Empty;
            int direction=0;
            for (int i = 1; i < Currentnumber+1; i++)
            {
                Point current = Point.Empty;
                if(lastUsed == Point.Empty)
                {
                    current = new Point(arr.GetLength(0)/2,arr.GetLength(1)/2);
                }
                else
                {
                    switch (direction)
                    {
                        case 0:
                            if(arr[lastUsed.X+1,lastUsed.Y] != 0)
                            {
                                current = new Point(lastUsed.X, lastUsed.Y + 1);
                            }
                            else
                            {
                                current = new Point(lastUsed.X + 1, lastUsed.Y);
                                direction++;
                            }
                            break;
 
                        case 1:
                            if (arr[lastUsed.X, lastUsed.Y-1] != 0)
                            {
                                current = new Point(lastUsed.X+1, lastUsed.Y);
                            }
                            else
                            {
                                current = new Point(lastUsed.X, lastUsed.Y - 1);
                                direction++;
                            }
                            break;
 
                        case 2:
                            if (arr[lastUsed.X-1, lastUsed.Y] != 0)
                            {
                                current = new Point(lastUsed.X, lastUsed.Y-1);
                            }
                            else
                            {
                                current = new Point(lastUsed.X - 1, lastUsed.Y);
                                direction++;
                            }
                            break;
 
                        case 3:
                            if (arr[lastUsed.X, lastUsed.Y + 1] != 0)
                            {
                                current = new Point(lastUsed.X - 1, lastUsed.Y);
                            }
                            else
                            {
                                current = new Point(lastUsed.X, lastUsed.Y + 1);
                                direction=0;
                            }
                            break;
                    }
                }
                arr[current.X, current.Y] = i;
                lastUsed = current;
                Point toDraw = new Point(Location.X + OnePointWidth * current.X, Location.Y + OnePointWidth * current.Y);
                g.DrawString(i.ToString(), new Font(FontFamily.GenericSerif, FontSize), Brushes.Black, toDraw);
                g.DrawRectangle(Pens.Red, new Rectangle(toDraw, new Size(OnePointWidth, OnePointWidth)));
            }
        } 
    }
}
0
979 / 874 / 350
Регистрация: 26.04.2012
Сообщений: 2,647
11.03.2016, 21:09
Скрин:
Миниатюры
Заполнение массива против часовой стрелки  
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
11.03.2016, 21:09
Помогаю со студенческими работами здесь

Как повернуть фигуру против часовой стрелки во время движения
Здравствуйте, помогите решить следующую проблему: Мне необходимо преобразовать 6-угольник в 3-угольник и при этом промежуточные фигуры...

Преобразовать квадратную матрицу, осуществив поворот элементов вокруг ее центра на 90 градусов против часовой стрелки
Прошу подскажите решение данной задачи, заранее большое спасибо

Поворот изображения против часовой стрелки в picturebox
Добрый день. Это поворот по часовой, pictureBox1.Image.RotateFlip(RotateFlipType.Rotate90FlipNone); ...

Смещение значений в dataGridview на одну позицию против часовой стрелки
Задали задачу : Создать таблицу со случайным количеством столбцов и строк (от 5 до 10). Все ячейки таблицы заполнить случайными числами...

Набор ромбов вращаются против часовой стрелки и меняют цвета
Помогите сделать... 11. Набор ромбов разного цвета, соединенные одним углом в центре формы, вращаются против часовой стрелки и меняют...


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

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
Новые блоги и статьи
Знаешь почему 90% людей редко бывают счастливыми?
kumehtar 14.04.2026
Потому что они ждут. Ждут выходных, ждут отпуска, ждут удачного момента. . . а удачный момент так и не приходит.
Фиксация колонок в отчете СКД
Maks 14.04.2026
Фиксация колонок в СКД отчета типа Таблица. Задача: зафиксировать три левых колонки в отчете. Процедура ПриКомпоновкеРезультата(ДокументРезультат, ДанныеРасшифровки, СтандартнаяОбработка) / / . . .
Настройки VS Code
Loafer 13.04.2026
{ "cmake. configureOnOpen": false, "diffEditor. ignoreTrimWhitespace": true, "editor. guides. bracketPairs": "active", "extensions. ignoreRecommendations": true, . . .
Оптимизация кода на разграничение прав доступа к элементам формы
Maks 13.04.2026
Алгоритм из решения ниже реализован на нетиповом документе, разработанного в конфигурации КА2. Задачи, как таковой, поставлено не было, проделанное ниже исключительно моя инициатива. Было так:. . .
Контроль заполнения и очистка дат в зависимости от значения перечислений
Maks 12.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеПерсонала", разработанного в конфигурации КА2. Задача: реализовать контроль корректности заполнения дат назначения. . .
Архитектура слоя интернета для сервера-слоя.
Hrethgir 11.04.2026
В продолжение https:/ / www. cyberforum. ru/ blogs/ 223907/ 10860. html Знаешь что я подумал? Раз мы все источники пишем в голове ветки, то ничего не мешает добавить в голову такой источник, который сам. . .
Подстановка значения реквизита справочника в табличную часть документа
Maks 10.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеПерсонала", разработанного в конфигурации КА2. Задача: при выборе сотрудника (справочник Сотрудники) в ТЧ документа. . .
Очистка реквизитов документа при копировании
Maks 09.04.2026
Алгоритм из решения ниже применим как для типовых, так и для нетиповых документов на самых различных конфигурациях. Задача: при копировании документа очищать определенные реквизиты и табличную. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru