Гость
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Упрощение кода / 25 сообщений из 93, страница 1 из 4
18.03.2015, 15:43
    #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
18.03.2015, 15:45
    #38908611
Shocker.Pro
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Упрощение кода
Чем они отличаются? Константами? Загнать константы в массив или БД и использовать одну процедуру
...
Рейтинг: 0 / 0
18.03.2015, 15:45
    #38908612
vdekameron
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Упрощение кода
Смысл в том, что таких процедур - Gate..Point.. будет 72, поэтому могу себе представить до каких размеров вырастит код
Заранее спасибо!!!!!!!!!!!!!!!!!!!!!
...
Рейтинг: 0 / 0
18.03.2015, 15:46
    #38908615
Shocker.Pro
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Упрощение кода
Я тебя уже учил НЕ ПОВТОРЯЙ КОД

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

не увидела начальных значений
--RememberVSB
--Con1
...
Рейтинг: 0 / 0
18.03.2015, 16:08
    #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
18.03.2015, 16:21
    #38908676
Shocker.Pro
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Упрощение кода
vdekameronТ.е. если прошли Gate7_Point1, Gate5_Point1,Gate3_Point1 и на Gate4_Point1 условие выполнилось, то нужно выполнить Move7_1, Move5_1, Move3_1Все эти циферки в названиях твоих процедур должны исчезнуть. Должен где-то определен массив данных, который определяет и константы и последовательность действий и т.п.
...
Рейтинг: 0 / 0
18.03.2015, 19:37
    #38908983
ПЕНСИОНЕРКА
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Упрощение кода
vdekameron,

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

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

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

Массив каких данных? Можно хоть простейший пример того, что нужно сделать
...
Рейтинг: 0 / 0
19.03.2015, 11:32
    #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
19.03.2015, 15:27
    #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
19.03.2015, 15:35
    #38910029
Shocker.Pro
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Упрощение кода
Ты уверен, что функции разные?
В приведенных примерах разные только константы, функции одинаковые
...
Рейтинг: 0 / 0
19.03.2015, 15:39
    #38910034
Shocker.Pro
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Упрощение кода
Вероятно, у тебя есть таблица из 72 строк:
код затвора константа1 константа2 константа3 код подчиненного затвора7.1-0.157813.443179.195.1
...
Рейтинг: 0 / 0
19.03.2015, 15:43
    #38910044
Konst_One
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Упрощение кода
а ничего, что у ТС single тип данных? ему же скорее всего надо decimal, а в VB c этим сложнее
...
Рейтинг: 0 / 0
19.03.2015, 15:48
    #38910053
Shocker.Pro
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Упрощение кода
Konst_Oneа ничего, что у ТС single тип данных? ему же скорее всего надо decimal, а в VB c этим сложнееНе думаю, что в данном случае недопустимы расчеты с плавающей запятой.
...
Рейтинг: 0 / 0
19.03.2015, 15:52
    #38910060
Konst_One
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Упрощение кода
ну автору виднее, я просто предупредил, что точность надо учитывать. это если он сравнивает свои результаты с эталонной таблицей
...
Рейтинг: 0 / 0
19.03.2015, 15:52
    #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
19.03.2015, 15:53
    #38910065
Shocker.Pro
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Упрощение кода
vdekameron,

кстати, про форматирование кода вроде ты говорил, что ты понял, а опять насажал лишних отступов
...
Рейтинг: 0 / 0
19.03.2015, 16:22
    #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
19.03.2015, 16:27
    #38910148
vdekameron
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Упрощение кода
Shocker.ProКстати, А зачем каждый подчиненный затвор открывает своих родителей? Разве не проще сделать так (показываю на изначальном примере, без оптимизации)
Вот тут вы очень правы. Можно и так и это уже упрощает.
...
Рейтинг: 0 / 0
19.03.2015, 16:28
    #38910150
vdekameron
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Упрощение кода
Shocker.Proкстати, про форматирование кода вроде ты говорил, что ты понял, а опять насажал лишних отступов
Ну я понял что не нужно стесняться делать отступы, вот и делаю их так, чтобы мне удобно было быстро пробежать по коду.
...
Рейтинг: 0 / 0
19.03.2015, 16:37
    #38910180
Shocker.Pro
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Упрощение кода
vdekameronНу я понял что не нужно стесняться делать отступы, вот и делаю их так, чтобы мне удобно было быстро пробежать по кодуя говорил, что не надо делать отступы там, где операторы идут последовательно и не подчинены друг другу. Разве
RememberVSB = RememberVSB + intVSB
как-то подчинен
intVSB = -0.16516 * VB ^ 2 + 14.052 * VB - 187.3005
разве он не будет выполнен в любом случае после первого?

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


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