powered by simpleCommunicator - 2.0.51     © 2025 Programmizd 02
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Упрощение кода
25 сообщений из 93, страница 1 из 4
Упрощение кода
    #38908602
vdekameron
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Добрый день!
Подскажите пожалуйста как максимально можно упростить этот код( Думал циклом, но вряд ли получится. По крайней мере не вижу как.
Код: vbnet
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.
Public Sub procMoovingBlocks(ByVal VB As Single, ByVal Raznica As Integer)
  Gate7_Point1 VB, Raznica
End Sub
Private Sub Gate7_Point1(ByVal VB As Single, ByVal Raznica As Integer)
 intVSB = -0.1578 * VB ^ 2 + 13.443 * VB - 179.19
   RememberVSB = RememberVSB + intVSB
     If RememberVSB < Raznica + Con1 Then
        Gate5_Point1 VB, Raznica
     Else
        ' Открываем затвор7_1
End Sub
Private Sub Gate5_Point1(ByVal VB As Single, ByVal Raznica As Integer)
 intVSB = -0.16516 * VB ^ 2 + 14.052 * VB - 187.3005
   RememberVSB = RememberVSB + intVSB
     If RememberVSB < Raznica + Con1 Then
        Gate3_Point1 VB, Raznica
     Else
        ' Открываем затвор7_1
        ' Открываем затвор5_1
End Sub
Private Sub Gate3_Point1(ByVal VB As Single, ByVal Raznica As Integer)
 intVSB = -0.1553 * VB ^ 2 + 13.17 * VB - 175.57
   RememberVSB = RememberVSB + intVSB
     If RememberVSB < Raznica + Con1 Then
        Gate4_Point1 VB, Raznica
     Else
        ' Открываем затвор7_1
        ' Открываем затвор5_1
        ' Открываем затвор3_1
End Sub
Private Sub Gate4_Point1(ByVal VB As Single, ByVal Raznica As Integer)
 intVSB = -0.1578 * VB ^ 2 + 13.443 * VB - 179.19
   RememberVSB = RememberVSB + intVSB
     If RememberVSB < Raznica + Con1 Then
        Gate6_Point1 VB, Raznica
     Else
        ' Открываем затвор7_1
        ' Открываем затвор5_1
        ' Открываем затвор3_1
        ' Открываем затвор4_1
End Sub


PS Открываем затвор - будующие процедуры, которые в дальнейшем будут двигать графически нужный затвор на нужную ступень
...
Рейтинг: 0 / 0
Упрощение кода
    #38908611
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Чем они отличаются? Константами? Загнать константы в массив или БД и использовать одну процедуру
...
Рейтинг: 0 / 0
Упрощение кода
    #38908612
vdekameron
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Смысл в том, что таких процедур - Gate..Point.. будет 72, поэтому могу себе представить до каких размеров вырастит код
Заранее спасибо!!!!!!!!!!!!!!!!!!!!!
...
Рейтинг: 0 / 0
Упрощение кода
    #38908615
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я тебя уже учил НЕ ПОВТОРЯЙ КОД

делай это сразу, еще до его написания
...
Рейтинг: 0 / 0
Упрощение кода
    #38908617
vdekameron
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Shocker.ProЯ тебя уже учил НЕ ПОВТОРЯЙ КОД
Поэтому и задал такой вопрос, потому что не хочу повторять код. Во-первых это неправильно, во-вторых море время займет.
Если бы знал как сделать не отписывал бы
...
Рейтинг: 0 / 0
Упрощение кода
    #38908628
vdekameron
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Если по коду не понятно, то мне нужно в СТРОГОЙ последовательности пройтись по процедурам(всего 72). И наткнувшись в очередной процедуре на удовлетворяющее условие, выполнить движение объектов( тех затворов-процедур, которые были пройдены)
Не знаю понятно или нет
...
Рейтинг: 0 / 0
Упрощение кода
    #38908637
vdekameron
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Т.е. если прошли Gate7_Point1, Gate5_Point1,Gate3_Point1 и на Gate4_Point1 условие выполнилось, то нужно выполнить Move7_1, Move5_1, Move3_1
...
Рейтинг: 0 / 0
Упрощение кода
    #38908639
Фотография ПЕНСИОНЕРКА
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
vdekameron,

не увидела начальных значений
--RememberVSB
--Con1
...
Рейтинг: 0 / 0
Упрощение кода
    #38908651
vdekameron
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ПЕНСИОНЕРКАне увидела начальных значений
Код: vbnet
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.
Option Explicit
Private intVSB As Integer  ' &#194;&#238;&#228;&#238;&#241;&#225;&#240;&#238;&#241;
Private Const Con1 = 50
Private RememberVSB As Integer

Public Sub procMoovingBlocks(ByVal VB As Single, ByVal Raznica As Integer)
  Gate7_Point1 VB, Raznica
End Sub

Private Sub Gate7_Point1(ByVal VB As Single, ByVal Raznica As Integer)
 intVSB = -0.1578 * VB ^ 2 + 13.443 * VB - 179.19
   RememberVSB = RememberVSB + intVSB
     If RememberVSB < Raznica + Con1 Then
        Gate5_Point1 VB, Raznica
     Else
        ' Открываем затвор7_1
End Sub
Private Sub Gate5_Point1(ByVal VB As Single, ByVal Raznica As Integer)
 intVSB = -0.16516 * VB ^ 2 + 14.052 * VB - 187.3005
   RememberVSB = RememberVSB + intVSB
     If RememberVSB < Raznica + Con1 Then
        Gate3_Point1 VB, Raznica
     Else
        ' Открываем затвор7_1
        ' Открываем затвор5_1
End Sub
Private Sub Gate3_Point1(ByVal VB As Single, ByVal Raznica As Integer)
 intVSB = -0.1553 * VB ^ 2 + 13.17 * VB - 175.57
   RememberVSB = RememberVSB + intVSB
     If RememberVSB < Raznica + Con1 Then
        Gate4_Point1 VB, Raznica
     Else
        ' Открываем затвор7_1
        ' Открываем затвор5_1
        ' Открываем затвор3_1
End Sub
Private Sub Gate4_Point1(ByVal VB As Single, ByVal Raznica As Integer)
 intVSB = -0.1578 * VB ^ 2 + 13.443 * VB - 179.19
   RememberVSB = RememberVSB + intVSB
     If RememberVSB < Raznica + Con1 Then
        Gate6_Point1 VB, Raznica
     Else
        ' Открываем затвор7_1
        ' Открываем затвор5_1
        ' Открываем затвор3_1
        ' Открываем затвор4_1
End Sub
...
Рейтинг: 0 / 0
Упрощение кода
    #38908676
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
vdekameronТ.е. если прошли Gate7_Point1, Gate5_Point1,Gate3_Point1 и на Gate4_Point1 условие выполнилось, то нужно выполнить Move7_1, Move5_1, Move3_1Все эти циферки в названиях твоих процедур должны исчезнуть. Должен где-то определен массив данных, который определяет и константы и последовательность действий и т.п.
...
Рейтинг: 0 / 0
Упрощение кода
    #38908983
Фотография ПЕНСИОНЕРКА
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
vdekameron,

все ваши функции --с параметрами, значит они не головные
трудно угадывать, что должна делать программа, не понимая ее сути

по слову (затвор) мои предположения
--ленинградская дамба
--подъем воды при наводнении
--в зависимости от уровня угрозы --закрываются некоторые ворота, причем по какой то схеме, а не просто 1,,2,,3,,72
--если на каких-то воротах профилактика, возможно изменение схемы запирания

ничто другое в голову не пришло с фразой 72 затвора
...
Рейтинг: 0 / 0
Упрощение кода
    #38909549
vdekameron
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Shocker.ProДолжен где-то определен массив данных, который определяет и константы и последовательность действий и т.п

Массив каких данных? Можно хоть простейший пример того, что нужно сделать
...
Рейтинг: 0 / 0
Упрощение кода
    #38909568
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
vdekameronShocker.ProДолжен где-то определен массив данных, который определяет и константы и последовательность действий и т.п

Массив каких данных? Можно хоть простейший пример того, что нужно сделатьОткуда я знаю, я же не буду за тебя писать всю программу

Должно быть что-то типа того
Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
Private Sub Gate_Point(GatePointIndex As Integer, ByVal VB As Single, ByVal Raznica As Integer)
 intVSB = A1(GatePointIndex) * VB ^ 2 + A2(GatePointIndex) * VB - A3(GatePointIndex)
   RememberVSB = RememberVSB + intVSB
     If RememberVSB < Raznica + Con1 Then
        Gate_Point A4(GatePointIndex), VB, Raznica
     Else
        ' Открываем затвор GatePointIndex
End Sub

Как хранятся данные для функций A1-A4 и как осуществляется к ним доступ - это надо решить. Но факт, что они не должны храниться в коде
...
Рейтинг: 0 / 0
Упрощение кода
    #38910014
vdekameron
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Shocker.ProОткуда я знаю, я же не буду за тебя писать всю программу

Не прошу этого. Мне это и не нужно. Хочу САМ, но как можно правильнее. Буду тогда чесать правой рукой левое ухо.

Код: vbnet
1.
intVSB = -0.1578 * VB ^ 2 + 13.443 * VB - 179.19

- Это одна из 72 функций( все разные)
типа y=-0.1578 * x ^ 2 + 13.443 * x - 179.19

Если помощь в этом займет сильно много времени так и скажите, буду чесать ухо. Если готовы помочь, скажите что я непонятно объяснил, объясню более развернуто.
...
Рейтинг: 0 / 0
Упрощение кода
    #38910029
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ты уверен, что функции разные?
В приведенных примерах разные только константы, функции одинаковые
...
Рейтинг: 0 / 0
Упрощение кода
    #38910034
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вероятно, у тебя есть таблица из 72 строк:
код затвора константа1 константа2 константа3 код подчиненного затвора7.1-0.157813.443179.195.1
...
Рейтинг: 0 / 0
Упрощение кода
    #38910044
Фотография Konst_One
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
а ничего, что у ТС single тип данных? ему же скорее всего надо decimal, а в VB c этим сложнее
...
Рейтинг: 0 / 0
Упрощение кода
    #38910053
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Konst_Oneа ничего, что у ТС single тип данных? ему же скорее всего надо decimal, а в VB c этим сложнееНе думаю, что в данном случае недопустимы расчеты с плавающей запятой.
...
Рейтинг: 0 / 0
Упрощение кода
    #38910060
Фотография Konst_One
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ну автору виднее, я просто предупредил, что точность надо учитывать. это если он сравнивает свои результаты с эталонной таблицей
...
Рейтинг: 0 / 0
Упрощение кода
    #38910061
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Кстати, А зачем каждый подчиненный затвор открывает своих родителей? Разве не проще сделать так (показываю на изначальном примере, без оптимизации)
Код: vbnet
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.
Private Sub Gate7_Point1(ByVal VB As Single, ByVal Raznica As Integer)
 intVSB = -0.1578 * VB ^ 2 + 13.443 * VB - 179.19
   RememberVSB = RememberVSB + intVSB
     ' Открываем затвор7_1
     If RememberVSB < Raznica + Con1 Then
        Gate5_Point1 VB, Raznica
End Sub
Private Sub Gate5_Point1(ByVal VB As Single, ByVal Raznica As Integer)
 intVSB = -0.16516 * VB ^ 2 + 14.052 * VB - 187.3005
   RememberVSB = RememberVSB + intVSB
     ' Открываем затвор5_1
     If RememberVSB < Raznica + Con1 Then
        Gate3_Point1 VB, Raznica
End Sub
Private Sub Gate3_Point1(ByVal VB As Single, ByVal Raznica As Integer)
 intVSB = -0.1553 * VB ^ 2 + 13.17 * VB - 175.57
   RememberVSB = RememberVSB + intVSB
     ' Открываем затвор3_1
     If RememberVSB < Raznica + Con1 Then
        Gate4_Point1 VB, Raznica
End Sub
Private Sub Gate4_Point1(ByVal VB As Single, ByVal Raznica As Integer)
 intVSB = -0.1578 * VB ^ 2 + 13.443 * VB - 179.19
   RememberVSB = RememberVSB + intVSB
     ' Открываем затвор4_1
     If RememberVSB < Raznica + Con1 Then
        Gate6_Point1 VB, Raznica
End Sub

...
Рейтинг: 0 / 0
Упрощение кода
    #38910065
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
vdekameron,

кстати, про форматирование кода вроде ты говорил, что ты понял, а опять насажал лишних отступов
...
Рейтинг: 0 / 0
Упрощение кода
    #38910133
vdekameron
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Shocker.ProТы уверен, что функции разные?
В приведенных примерах разные только константы, функции одинаковые
Ну я имел в виду функции разные от того, что константы разные. Если посмотреть с той точки зрения что вы сказали, то да - функции все одинаковые, а константы в них разные.

Скорее такая таблица.
Код затвора константа1 константа2 константа3 код подчиненного затвора Какие щиты нужно открыть7.1-0.157813.443179.195.17.15.1-0.1651614.052-187.30053.17.1:5.13.1-0.155313.17-175.574.17.1:5.1:3.1

Вот подробно:
Код: vbnet
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.
Option Explicit
Private intVSB As Integer  
Private Const Con1 = 50
Private RememberVSB As Integer
'Из Кода формы я передаю параметры Верхнего бьефа - VB и Разницу - Raznica 
Public Sub procMoovingBlocks(ByVal VB As Single, ByVal Raznica As Integer)
  Gate7_Point1 VB, Raznica
End Sub
' intVSB - это Водосброс
'Нахожу водосброс
Private Sub Gate7_Point1(ByVal VB As Single, ByVal Raznica As Integer)
 intVSB = -0.1578 * VB ^ 2 + 13.443 * VB - 179.19
'Запоминаю его
   RememberVSB = RememberVSB + intVSB
' Если Водосброс меньше Разницы + 50 то нужно перейти в след. процедуру
'И так до тех пор, пока не выполнится условие Водосброс больше Разница+50, тогда выполняем процедуры 'стоящие после Else , Которые выполняются в том же порядке, что пройденные процедуры.
     If RememberVSB < Raznica + Con1 Then
        Gate5_Point1 VB, Raznica
     Else
        ' Открываем затвор7_1
End Sub

Private Sub Gate5_Point1(ByVal VB As Single, ByVal Raznica As Integer)
 intVSB = -0.16516 * VB ^ 2 + 14.052 * VB - 187.3005
   RememberVSB = RememberVSB + intVSB
     If RememberVSB < Raznica + Con1 Then
        Gate3_Point1 VB, Raznica
     Else
        ' Открываем затвор7_1
        ' Открываем затвор5_1
End Sub
...
Рейтинг: 0 / 0
Упрощение кода
    #38910148
vdekameron
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Shocker.ProКстати, А зачем каждый подчиненный затвор открывает своих родителей? Разве не проще сделать так (показываю на изначальном примере, без оптимизации)
Вот тут вы очень правы. Можно и так и это уже упрощает.
...
Рейтинг: 0 / 0
Упрощение кода
    #38910150
vdekameron
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Shocker.Proкстати, про форматирование кода вроде ты говорил, что ты понял, а опять насажал лишних отступов
Ну я понял что не нужно стесняться делать отступы, вот и делаю их так, чтобы мне удобно было быстро пробежать по коду.
...
Рейтинг: 0 / 0
Упрощение кода
    #38910180
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
vdekameronНу я понял что не нужно стесняться делать отступы, вот и делаю их так, чтобы мне удобно было быстро пробежать по кодуя говорил, что не надо делать отступы там, где операторы идут последовательно и не подчинены друг другу. Разве
RememberVSB = RememberVSB + intVSB
как-то подчинен
intVSB = -0.16516 * VB ^ 2 + 14.052 * VB - 187.3005
разве он не будет выполнен в любом случае после первого?

vdekameronВот тут вы очень правы. Можно и так и это уже упрощает.тогда зачем нужен столбец таблицы "Какие щиты нужно открыть"?
...
Рейтинг: 0 / 0
25 сообщений из 93, страница 1 из 4
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Упрощение кода
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]