Форум программистов, компьютерный форум, киберфорум
Visual Basic
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.91/11: Рейтинг темы: голосов - 11, средняя оценка - 4.91
1402 / 860 / 93
Регистрация: 08.02.2017
Сообщений: 3,673
Записей в блоге: 2

Быстрое ветвление

12.10.2023, 15:54. Показов 3078. Ответов 49

Студворк — интернет-сервис помощи студентам
Задался вопросом, нет ли такого, чтобы бстро прыгнуть в нужных учаток кода, без всяких проверок типа Goto "Метка" или Goto Num, и, да, конечно же такого, нет, но есть, что-то близкое. Такое нужно, когда задаешь опциональный параметр функции. Хорошая статейка, узнал про "On Num GoTo 10, 20, 30", и кое-что про обработку ошибок. Протестировал немножк. 4й, 5й варианты, вроде самые быстрые (там с хитринкой сделано )). Время выполнения, которое у меня получилось записал в коде.
Кликните здесь для просмотра всего текста
Visual Basic
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
Sub ТестВетвления()
  Const Citr& = 10000
  Const Cnt& = 10000
  Dim i&, j&, t!, arrOut() As Byte, arrInp() As Byte
  ReDim arrOut(Cnt): arrInp = arrOut
  
  Randomize         'заполняем байтовый массив рандомными днными
  For i = 1 To Cnt
      arrOut(i) = Rnd * 5
  Next
  
  t = Timer
'Вариант1 ####################################
'  For j = 1 To Citr                     '3,32
'      For i = 1 To Cnt
'          On arrOut(i) GoTo 1, 2, 3, 4, 5
'          GoTo 6
'1         arrInp(i) = 3: GoTo 6
'2         arrInp(i) = 1: GoTo 6
'3         arrInp(i) = 4: GoTo 6
'4         arrInp(i) = 5: GoTo 6
'5         arrInp(i) = 2
'6     Next
'  Next
'Вариант2 ####################################
'  For j = 1 To Citr                     '9,22
'      For i = 1 To Cnt
'          Select Case arrOut(i)
'          Case 1: arrInp(i) = 5
'          Case 2: arrInp(i) = 3
'          Case 3: arrInp(i) = 1
'          Case 4: arrInp(i) = 2
'          Case 5: arrInp(i) = 4
'          End Select
'      Next
'  Next
'Вариант3 ####################################
'  For j = 1 To Citr                      '6,8
'      For i = 1 To Cnt
'          If arrOut(i) = 1 Then
'              arrInp(i) = 4
'          ElseIf arrOut(i) = 2 Then arrInp(i) = 1
'          ElseIf arrOut(i) = 3 Then arrInp(i) = 3
'          ElseIf arrOut(i) = 4 Then arrInp(i) = 5
'          ElseIf arrOut(i) = 5 Then arrInp(i) = 2
'          End If
'      Next
'  Next
'Вариант0 ####################################
'  For j = 1 To Citr                      '1,6
'      For i = 1 To Cnt
'          arrInp(i) = arrOut(i)
'      Next
'  Next
'Вариант4 ####################################
'  For j = 1 To Citr                     '3,27
'      For i = 1 To Cnt
'          On arrOut(i) GoTo 1, 2, 3, 4, 5
'          GoTo 6
'          Select Case 0
'          Case 0
'1             arrInp(i) = 4
'          Case 0
'2             arrInp(i) = 5
'          Case 0
'3             arrInp(i) = 2
'          Case 0
'4             arrInp(i) = 3
'          Case 0
'5             arrInp(i) = 1
'          End Select
'6     Next
'  Next
'Вариант5 ####################################
  For j = 1 To Citr                      '3,23
      For i = 1 To Cnt
          On arrOut(i) GoTo 1, 2, 3, 4, 5
          GoTo 6
          If 0 Then
1             arrInp(i) = 2
          ElseIf 0 Then
2             arrInp(i) = 1
          ElseIf 0 Then
3             arrInp(i) = 4
          ElseIf 0 Then
4             arrInp(i) = 5
          ElseIf 0 Then
5             arrInp(i) = 3
          End If
6     Next
  Next
  
  t = Timer - t
  Debug.Print t
End Sub

ПыСы: "Знак хорошего стиля и традиций пример, оператор наш GoTo всегда под рукой!)"

Добавлено через 3 минуты
вот про это было интересно, то что можно обработать ошибку в отдельном месте кода и вернутся потом на прежнее место
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
Public Sub Example()
 
    On Error GoTo HandleError
 
    Err.Raise 1004 'Error handled
 
    Debug.Print "Resuming..."
 
    On Error GoTo 0
 
    Err.Raise 1004 'Error not handled
 
    Exit Sub
 
HandleError:
    Debug.Print "Handling Error..."
    Resume Next
 
End Sub
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
12.10.2023, 15:54
Ответы с готовыми решениями:

ветвление,цикл For
пожалуйста,помогите написать программу! вот задание: Задача : Дано: натуральное n ( 1 <= n <= 12 )., действительные y1,..,yn. ...

Авторизация через ветвление/циклы
Добрый день! Недавно столкнулся с проблемой авторизации скрипта на коммутаторы. Поскольку у меня есть 3 разных вида коммутаторов решил...

Из трех данных чисел выбрать наименьшее и наибольшее. (Ветвление) перевести из Pascal
Из трех данных чисел выбрать наименьшее и наибольшее. var a,b,c,max:integer; begin read(a,b,c); if a > b then ...

49
Вернулся
 Аватар для HackerVlad
1748 / 644 / 45
Регистрация: 10.09.2021
Сообщений: 2,786
16.11.2023, 00:16
Студворк — интернет-сервис помощи студентам
Добавлено через 2 часа 40 минут
Цитата Сообщение от The trick Посмотреть сообщение
Интересно откуда он берет 64 битный рантайм?
Может, там 32 битные можно только компилить?
Цитата Сообщение от testuser2 Посмотреть сообщение
просто скопировать в 32битный vba и он со 98%-й уверенностью будет также работать. К слову о том, о чем может быть непервый раз повторю, почему бы я не для себя не ставлю каких то особенных границ между vba и vb.
А вот уникодный InputBox, который я написал, вряд ли будет работать у тебя в 32-битном VBA если просто скопировать код моего модуля и вставить тебе в VBA. К сожалению нужен манифест стилей... А в VBA это возможно???
0
1402 / 860 / 93
Регистрация: 08.02.2017
Сообщений: 3,673
Записей в блоге: 2
16.11.2023, 01:47  [ТС]
Цитата Сообщение от The trick Посмотреть сообщение
Интересно откуда он берет 64 битный рантайм?
Исходя из всего он видимо перекомпилирует vba-шный бинарик C-шным компилятором и делает из него библиотеку каким-то образчиком. Что такое ран-тайм, я если честно, толком не знаю.
Цитата Сообщение от HackerVlad Посмотреть сообщение
К сожалению нужен манифест стилей... А в VBA это возможно???
Все я окончтельно прокололся, я не знаю, что такое манифест стилей, видимо если он нужен, то скорее всего без него работать не будет.
0
Вернулся
 Аватар для HackerVlad
1748 / 644 / 45
Регистрация: 10.09.2021
Сообщений: 2,786
16.11.2023, 02:46
testuser2, так а ты попробуй и скажи мне, пожалуйста, проверь

Добавлено через 34 секунды
Цитата Сообщение от testuser2 Посмотреть сообщение
Что такое ран-тайм
Обработчик ошибок времени выполнения

Добавлено через 54 минуты
testuser2, модуль возьми отсюда: Как создать на VB6 уникодный InputBox? Чтобы при вводе в InputBox можно было получать китайские иероглифы и так далее
и проверь, скажи будет у тебя работать в VBA или нет, спасибо тебе скажу за это, у меня просто нету у самого VBA
0
 Аватар для Mikle Quits
786 / 309 / 17
Регистрация: 21.01.2023
Сообщений: 529
16.11.2023, 08:24
Цитата Сообщение от HackerVlad Посмотреть сообщение
Обработчик ошибок времени выполнения
Чего?
Рантайм - это просто некая библиотека, необходимая экзешнику для работы. Она может содержать набор готовых функций, может быть виртуальной машиной, может и то, и другое (как msvbvm). Могут там, конечно, содержаться и обработчики ошибок, но это никак не назовёшь основной функцией рантайма.
1
1402 / 860 / 93
Регистрация: 08.02.2017
Сообщений: 3,673
Записей в блоге: 2
16.11.2023, 08:52  [ТС]
Цитата Сообщение от HackerVlad Посмотреть сообщение
так а ты попробуй и скажи мне, пожалуйста
Все работает, только получение размеров экрана поменял на WinApi ну и по мелочи еще кое-что
Цитата Сообщение от HackerVlad Посмотреть сообщение
и проверь, скажи будет у тебя работать в VBA или нет
Инпут-бокс не кажет иероглиф и манифест там не нашел как импортировать
Миниатюры
Быстрое ветвление  
1
1402 / 860 / 93
Регистрация: 08.02.2017
Сообщений: 3,673
Записей в блоге: 2
16.11.2023, 08:56  [ТС]
Цитата Сообщение от Mikle Quits Посмотреть сообщение
Рантайм - это просто некая библиотека, необходимая экзешнику для работы.
D vba это видимо vbe7.dll, вот основные библиотеки vba - Excel
Code
1
2
3
4
5
6
7
8
VBA           C:\Program Files (x86)\Common Files\Microsoft Shared\VBA\VBA7.1\VBE7.DLL
{000204EF-0000-0000-C000-000000000046}
Excel         C:\Program Files (x86)\Microsoft Office\Root\Office16\EXCEL.EXE
{00020813-0000-0000-C000-000000000046}
stdole        C:\Windows\SysWOW64\stdole2.tlb
{00020430-0000-0000-C000-000000000046}
Office        C:\Program Files (x86)\Common Files\Microsoft Shared\OFFICE16\MSO.DLL
{2DF8D04C-5BFA-101B-BDE5-00AA0044DE52}
0
Вернулся
 Аватар для HackerVlad
1748 / 644 / 45
Регистрация: 10.09.2021
Сообщений: 2,786
16.11.2023, 13:27
Цитата Сообщение от testuser2 Посмотреть сообщение
Инпут-бокс не кажет иероглиф и манифест там не нашел как импортировать
Я же говорил без манифеста не будет работать. В VBA получается нельзя сделать уникодный InputBox?

Добавлено через 1 минуту
Mikle Quits, В информатике время выполнения — это время, в течение которого выполняется программа, в отличие от других этапов жизненного цикла программы, таких как время компиляции, время установления связей и время загрузки.

Добавлено через 31 секунду
Цитата Сообщение от Mikle Quits Посмотреть сообщение
Рантайм - это просто некая библиотека
при чём тут библиотека? рантайм - это не библиотека, не DLL
0
Вернулся
 Аватар для HackerVlad
1748 / 644 / 45
Регистрация: 10.09.2021
Сообщений: 2,786
16.11.2023, 13:28
Вот смотри
Миниатюры
Быстрое ветвление  
1
Вернулся
 Аватар для HackerVlad
1748 / 644 / 45
Регистрация: 10.09.2021
Сообщений: 2,786
16.11.2023, 13:30
testuser2, ищи как поставить манифест на VBA, может надо "надеть" манифест на Excel.exe, если это возможно вообще конечно, в VBA разделе можешь спросить, я не знаю просто...
0
933 / 366 / 43
Регистрация: 10.05.2021
Сообщений: 1,564
Записей в блоге: 10
16.11.2023, 13:34
HackerVlad,
Лучше всегда в контексте смотреть, но, в этом случае, то же самое
1
Вернулся
 Аватар для HackerVlad
1748 / 644 / 45
Регистрация: 10.09.2021
Сообщений: 2,786
16.11.2023, 13:53
Jack Famous, так ты ввёл ещё добавку "library"

Добавлено через 15 минут
Jack Famous, вот ссылки на видипедию: https://ru.wikipedia.org/wiki/... 0%B8%D1%8F
https://en.wikipedia.org/wiki/Runtime
https://dic.academic.ru/dic.nsf/ruwiki/1455992

и так далее можете дальше гуглить. Нигде не написано, что это библиотека.
0
1402 / 860 / 93
Регистрация: 08.02.2017
Сообщений: 3,673
Записей в блоге: 2
16.11.2023, 14:00  [ТС]
Цитата Сообщение от HackerVlad Посмотреть сообщение
ищи как поставить манифест на VBA
Не хочу, йа не "дружу с народами" в такой степени )
0
Вернулся
 Аватар для HackerVlad
1748 / 644 / 45
Регистрация: 10.09.2021
Сообщений: 2,786
16.11.2023, 14:02
Цитата Сообщение от testuser2 Посмотреть сообщение
Все работает, только получение размеров экрана поменял на WinApi
В модуле уникодного инпутбокса там же нет получения размеров экрана...

Добавлено через 47 секунд
testuser2, Китай это дружественная страна, нужно любить китайцев.
0
1402 / 860 / 93
Регистрация: 08.02.2017
Сообщений: 3,673
Записей в блоге: 2
16.11.2023, 14:07  [ТС]
А так если что
Изображения
 
0
Вернулся
 Аватар для HackerVlad
1748 / 644 / 45
Регистрация: 10.09.2021
Сообщений: 2,786
16.11.2023, 14:09
testuser2, а как ты это сделал?
0
1402 / 860 / 93
Регистрация: 08.02.2017
Сообщений: 3,673
Записей в блоге: 2
16.11.2023, 14:11  [ТС]
просто в редакторе
Миниатюры
Быстрое ветвление  
1
1402 / 860 / 93
Регистрация: 08.02.2017
Сообщений: 3,673
Записей в блоге: 2
16.11.2023, 14:15  [ТС]
Цитата Сообщение от HackerVlad Посмотреть сообщение
В модуле уникодного инпутбокса там же нет получения размеров экрана...
Это про диалог выбора папки было сказано.
0
933 / 366 / 43
Регистрация: 10.05.2021
Сообщений: 1,564
Записей в блоге: 10
16.11.2023, 14:18
testuser2, если не ошибаюсь, то и штатные текстбокс/листбокс прекрасно выводят юникод.
Лично я не понимаю эти пляски с бубном ради того, что и так можно сделать штатными средствами гораздо быстрее. Однако, тягу к исследованиям понимаю — сам такой

P.S.: вроде, это всё сильно не по теме ветвления. Может к HackerVlad в тему по вопросу переместимся?
1
Вернулся
 Аватар для HackerVlad
1748 / 644 / 45
Регистрация: 10.09.2021
Сообщений: 2,786
16.11.2023, 14:21
testuser2, а как ты это сделал?
Цитата Сообщение от Jack Famous Посмотреть сообщение
ради того, что и так можно сделать штатными средствами
так напишите просто IntupBox штатными средствами, и китайщина не поддерживается, увы
0
1402 / 860 / 93
Регистрация: 08.02.2017
Сообщений: 3,673
Записей в блоге: 2
16.11.2023, 14:39  [ТС]
Цитата Сообщение от Jack Famous Посмотреть сообщение
если не ошибаюсь, то и штатные текстбокс/листбокс прекрасно выводят юникод.
Но это на современном vba а на более старых ревизиях vba и vb6 юникод не поддерживается для контролов, на сколько знаю

Добавлено через 18 минут
Хотя сам движок фактически поддерживал юникод, строки же юникодные в vb
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
16.11.2023, 14:39

Поочередное быстрое нажатие кнопок F1 и F2
Помогите пожалуйста. Я не знаю как сделать чтобы кнопки сами быстро(очень быстро( нажимались. Мне надо чтобы нажималась кнопка F1 и вторая...

Быстрое определение максимального значения
В rs есть поле id, записи расположены по фамилии, имени, отч, как быстрее определить max значение id, не перестраивая Rs по id?

Быстрое обновление DataGrid из большой таблицы (+++)
Есть БД на MS SQL Server 2000 и таблицы (порядка 60 тыс. записей) Так же есть форма, где есть Grid, который отображает данные,...

Быстрое копирование динамических строковых массивов с помощью API
Известен ли способ, скажем с помощью копирования областей памяти API Быстрого копирования динамических строковых массивов Скажем для...

Ветвление
Стороны одного треугольника равны A1,B1,C1. Написать алгоритм и программу проверки равенства ему другого треугольника. Заранее...


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

Или воспользуйтесь поиском по форуму:
40
Ответ Создать тему
Новые блоги и статьи
Море в объективе
kumehtar 06.07.2026
Хотел написать много проникновенных слов, но передумал. Оно само - говорит. Кто слышит тот слышит.
Оказывается, Unreal Engine позволяет качество на порядки выше, чем было в Lineedge
Etyuhibosecyu 05.07.2026
Жаль, конечно, что я не узнал об этом, пока Lineedge существовала, а то бы Noname2331 написал, что волки превращаются в пиксельную кашу, а я бы его попросил скачать какую-нибудь бриллиантовую или Pro. . .
Doom для терминала без стрельбы и монстров. 3D Raycasting на ascii.
dcc0 05.07.2026
Попросил нейронную сеть deepai. org написать рейкастинг 3D с библиотекой ncurses для Linux. Чтобы можно было ходить на стрелочки. Чтобы стены были отрисованы символами. Справилась. Первый вариант. . .
Установка статуса документа по условию
Maks 05.07.2026
Алгоритм из решения ниже реализован на нетиповом документе "НарядПутевка" разработанного в КА2. Задача: в табличной части "Материалы" документа при записи автоматически устанавливать статус. . .
Сезонность и суточность закисления почв
anaschu 04.07.2026
200 часов это все равно моловато. Есть ситуации, но нестандартные, когда смена происходит за 5 лет. Но обычно это 50 лет и более. Наверное, закисление почвы происходит сезонно в средней. . .
В чем ценность человеческого опыта в глобальном смысле?
kumehtar 03.07.2026
Возможно, ценность человека не в том, что он однажды достигает мудрости, а в том, что он становится носителем карты пути. Он знает не только истину, но и последовательность внутренних изменений,. . .
интеграция AnyLogic с самописным REST API и переход на Odoo
anaschu 03.07.2026
Успешная интеграция AnyLogic с самописным REST API и переход на промышленную Odoo WMS Сегодня проделал огромный путь от простой симуляции физических процессов до построения полноценной. . .
Поиск всех путей на ориентированном графе. Linux
dcc0 02.07.2026
Переработка старого кода из моей статьи. Через несколько переработок от PHP кода к C89 (надеюсь, 89). Но довольно запутанно получилось. Код для Linux. Но если убрать time и то, что с ним. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru