Форум программистов, компьютерный форум, киберфорум
C# для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.85/13: Рейтинг темы: голосов - 13, средняя оценка - 4.85
1 / 1 / 0
Регистрация: 11.04.2020
Сообщений: 67

Слишком длинный блок инструкций. Попытайтесь разбить его на вспомогательные методы

19.09.2021, 20:12. Показов 2682. Ответов 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
using System;
using System.Drawing;
using System.Drawing.Drawing2D;
 
 
namespace RefactorMe
{
class Printer
{
static float x, y;
static Graphics graphics;
 
public static void Initialize ( Graphics newGraphics )
{
graphics = newGraphics;
graphics.SmoothingMode = SmoothingMode.None;
graphics.Clear(Color.Black);
}
 
public static void SetPosition(float x0, float y0)
{
x = x0;
y = y0;
}
 
public static void MakeIt(Pen pen, double length, double angle)
{
var x1 = (float)(x + length * Math.Cos(angle));
var y1 = (float)(y + length * Math.Sin(angle));
 
graphics.DrawLine(pen, x, y, x1, y1);
 
x = x1;
y = y1;
}
 
public static void Change(double length, double angle)
{
x = (float)(x + length * Math.Cos(angle));
y = (float)(y + length * Math.Sin(angle));
}
}
 
public class ImpossibleSquare
{
public static void Draw(int width, int height, double angleRotation, Graphics graphics)
{
Printer.Initialize(graphics);
 
var size = Math.Min(width, height);
 
var diagonalLength = Math.Sqrt(2) * (size * 0.375f + size * 0.04f) / 2;
var x0 = (float)(diagonalLength * Math.Cos(Math.PI / 4 + Math.PI)) + width / 2f;
var y0 = (float)(diagonalLength * Math.Sin(Math.PI / 4 + Math.PI)) + height / 2f;
 
Printer.SetPosition(x0, y0);
 
Printer.MakeIt(Pens.Yellow, size * 0.375f, 0);
Printer.MakeIt(Pens.Yellow, size * 0.04f * Math.Sqrt(2), Math.PI / 4);
Printer.MakeIt(Pens.Yellow, size * 0.375f, Math.PI);
Printer.MakeIt(Pens.Yellow, size * 0.375f - size * 0.04f, Math.PI / 2);
 
Printer.Change(size * 0.04f, -Math.PI);
Printer.Change(size * 0.04f * Math.Sqrt(2), 3 * Math.PI / 4);
 
 
 
Printer.MakeIt(Pens.Yellow, size * 0.375f, -Math.PI / 2);
Printer.MakeIt(Pens.Yellow, size * 0.04f * Math.Sqrt(2), -Math.PI / 2 + Math.PI / 4);
Printer.MakeIt(Pens.Yellow, size * 0.375f, -Math.PI / 2 + Math.PI);
Printer.MakeIt(Pens.Yellow, size * 0.375f - size * 0.04f, -Math.PI / 2 + Math.PI / 2);
 
Printer.Change(size * 0.04f, -Math.PI / 2 - Math.PI);
Printer.Change(size * 0.04f * Math.Sqrt(2), -Math.PI / 2 + 3 * Math.PI / 4);
 
 
Printer.MakeIt(Pens.Yellow, size * 0.375f, Math.PI);
Printer.MakeIt(Pens.Yellow, size * 0.04f * Math.Sqrt(2), Math.PI + Math.PI / 4);
Printer.MakeIt(Pens.Yellow, size * 0.375f, Math.PI + Math.PI);
Printer.MakeIt(Pens.Yellow, size * 0.375f - size * 0.04f, Math.PI + Math.PI / 2);
 
Printer.Change(size * 0.04f, Math.PI - Math.PI);
Printer.Change(size * 0.04f * Math.Sqrt(2), Math.PI + 3 * Math.PI / 4);
 
 
Printer.MakeIt(Pens.Yellow, size * 0.375f, Math.PI / 2);
Printer.MakeIt(Pens.Yellow, size * 0.04f * Math.Sqrt(2), Math.PI / 2 + Math.PI / 4);
Printer.MakeIt(Pens.Yellow, size * 0.375f, Math.PI / 2 + Math.PI);
Printer.MakeIt(Pens.Yellow, size * 0.375f - size * 0.04f, Math.PI / 2 + Math.PI / 2);
 
Printer.Change(size * 0.04f, Math.PI / 2 - Math.PI);
Printer.Change(size * 0.04f * Math.Sqrt(2), Math.PI / 2 + 3 * Math.PI / 4);
}
}
}

P.S Задание в заголовке,как это сделать я не понимаю.Прошу объяснение,желательно кодом.
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
19.09.2021, 20:12
Ответы с готовыми решениями:

Вспомогательные методы
Приветствую. Вопрос такого плана: есть у меня проект для работы с экселем(выгружает данные), в котором есть основной класс с кучей...

Слишком длинный путь
Добрый день. При архивации файлов по сети возникает ошибка: FileNotFoundError: Системе не удается найти указанный путь:...

Слишком длинный текст?
День добрый! Проблема такая - при добавлении в материал объемного текста (на много страниц) при переходе на страницу с этим материалом...

3
2810 / 1679 / 885
Регистрация: 14.04.2015
Сообщений: 5,723
19.09.2021, 20:24
rrll, видимо, имелось ввиду на то, что много места для однотипных printer.makeit и printer.change. аж 24 строки. Можно вынести в отдельный метод в цикл этих 6 базовых строк, и по условию менять значение переменных, они же подчиняются какому-то условию, не рандомно проставлены? Я про переменную angle, бегло обнаружив, что в ней меняются значения
0
1 / 1 / 0
Регистрация: 11.04.2020
Сообщений: 67
19.09.2021, 20:47  [ТС]
Здравствуйте AndreyVorobey,
Мне показывали такое решение,но я не че не понял.Когда пытался сам делать у меня ругалась визуалка на public static void.

C#
1
2
3
4
5
6
7
8
9
10
11
12
Painter.SetPosition(x0, y0);
PrintSide(0, sizeMin);
PrintSide(-PI / 2, sizeMin);
PrintSide(PI, sizeMin);
PrintSide(PI / 2, sizeMin);
public static void PaintSide(double angle, double sizeMin)
Printer.DrawIt(Pens.Yellow, sizeMin * A, angle);
Printer.DrawIt(Pens.Yellow, sizeMin * B * GetSqrt(2), angle + PI / 4);
Printer.DrawIt(Pens.Yellow, sizeMin * A, angle + PI);
Printer.DrawIt(Pens.Yellow, sizeMin * A - sizeMin * B, angle + PI / 2);
Printer.Move(sizeMin * B, angle - PI);
Printer.Move(sizeMin * B * GetSqrt(2), angle + 3 * PI / 4);
Посмотрите,может вам будет что то понятно.Это типо как раз сокращение мне сказали этих строк.
0
2810 / 1679 / 885
Регистрация: 14.04.2015
Сообщений: 5,723
20.09.2021, 11:43
rrll, public static void PaintSide - Это медот, он должен заключать в скобки {} все строки кода, которые к нему относятся.
C#
1
2
3
4
5
6
7
8
9
public static void PaintSide(double angle, double sizeMin)
{
Printer.DrawIt(Pens.Yellow, sizeMin * A, angle);
Printer.DrawIt(Pens.Yellow, sizeMin * B * GetSqrt(2), angle + PI / 4);
Printer.DrawIt(Pens.Yellow, sizeMin * A, angle + PI);
Printer.DrawIt(Pens.Yellow, sizeMin * A - sizeMin * B, angle + PI / 2);
Printer.Move(sizeMin * B, angle - PI);
Printer.Move(sizeMin * B * GetSqrt(2), angle + 3 * PI / 4);
}
и он должен быть не внутри другого метода, а внутри класса
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
20.09.2021, 11:43
Помогаю со студенческими работами здесь

Верстка в бутстрап. Блок уходит слишком низко, как его поднять?
Первый раз верстаю в бутстрап, и тут же столкнулся с проблемой. Верхней строкой идет меню-с этим все в порядке. А следующий блок за меню,...

Export to word Слишком длинный строковый параметр
Делаю экспорт в Word. Вылетает ошибка "Слишком длинный строковый параметр", если в richBox ввести много теста. Как сделать так, чтобы можно...

Слишком длинный строковой параметр. Что делать?
здравствуйте. Есть метод который принимает в себя значение из текстбокса. Метод заменяет "{memo}" в документе Word на текст из...

Слишком длинный путь к файлу, но это не так
Здравствуйте! Подскажите в чём проблема слишком длинного пути к файлу БД. У меня есть проект в общей папке с виртуальной машиной. На...

Слишком длинный путь или имя файла
Try Using fileStream = New IO.FileStream(IO.Path.Combine(DownloadPath, IO.Path.GetFileName(url)), IO.FileMode.Create) ...


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

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
Новые блоги и статьи
Использование значений реквизитов справочника в документе, с определенными условиями и правами
Maks 07.04.2026
1. Контроль срока действия договора Алгоритм из решения ниже реализован на примере нетипового документа "ЗаявкаНаРаботу", разработанного в конфигурации КА2. Задача: уведомлять пользователя, если. . .
Доступность команды формы по условию
Maks 07.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: сделать доступной кнопку (команда формы "ЗавершитьСписание") при. . .
Уведомление о неверно выбранном значении справочника
Maks 06.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "НарядПутевка", разработанного в конфигурации КА2. Задача: уведомлять пользователя, если в документе выбран неверный склад. . .
Установка Qt Creator для C и C++: ставим среду, CMake и MinGW без фреймворка Qt
8Observer8 05.04.2026
Среду разработки Qt Creator можно установить без фреймворка Qt. Есть отдельный репозиторий для этой среды: https:/ / github. com/ qt-creator/ qt-creator, где можно скачать установщик, на вкладке Releases:. . .
AkelPad-скрипты, структуры, и немного лирики..
testuser2 05.04.2026
Такая программа, как AkelPad существует уже давно, и также давно существуют скрипты под нее. Тем не менее, прога живет, периодически что-то не спеша дополняется, улучшается. Что меня в первую очередь. . .
Отображение реквизитов в документе по условию и контроль их заполнения
Maks 04.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеСпецтехники", разработанного в конфигурации КА2. Данный документ берёт данные из другого нетипового документа. . .
Фото всей Земли с борта корабля Orion миссии Artemis II
kumehtar 04.04.2026
Это первое подобное фото сделанное человеком за 50 лет. Снимок называют новым вариантом легендарной фотографии «The Blue Marble» 1972 года, сделанной с борта корабля «Аполлон-17». Новое фото. . .
Вывод диалогового окна перед закрытием, если документ не проведён
Maks 04.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: реализовать программный контроль на предмет проведения документа. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru