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

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

12.10.2023, 15:54. Показов 3074. Ответов 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, 14:58
Студворк — интернет-сервис помощи студентам
Цитата Сообщение от testuser2 Посмотреть сообщение
поддерживал юникод
но InputBox не поддерживает
0
933 / 366 / 43
Регистрация: 10.05.2021
Сообщений: 1,564
Записей в блоге: 10
16.11.2023, 15:01
Цитата Сообщение от testuser2 Посмотреть сообщение
на более старых ревизиях vba и vb6 юникод не поддерживается для контролов
если стоит задача совместимости с "древними", то я бы в сторону API посмотрел — sokol92 показывал APIшный MsgBox с поддержкой юникода

Добавлено через 57 секунд
Цитата Сообщение от HackerVlad Посмотреть сообщение
но InputBox не поддерживает
ну написать свой на формах и внедрить… Где это будет использоваться?
0
Вернулся
 Аватар для HackerVlad
1748 / 644 / 45
Регистрация: 10.09.2021
Сообщений: 2,786
16.11.2023, 15:07
Цитата Сообщение от Jack Famous Посмотреть сообщение
ну написать свой на формах и внедрить… Где это будет использоваться?
Нафиг надо писать свой на формах когда легко переделать готовый.

Добавлено через 2 минуты
Цитата Сообщение от Jack Famous Посмотреть сообщение
Где это будет использоваться?
Это будет использоваться у меня в диалоге выбора папки например для создания новой папки.

Добавлено через 1 минуту
Цитата Сообщение от Jack Famous Посмотреть сообщение
sokol92 показывал APIшный MsgBox с поддержкой юникода
Это раз плюнуть, там всего одна API-функция MessageBoxW, гораздо сложнее с InputBox'ом, так как такой API не существует в винде.
0
 Аватар для Mikle Quits
785 / 308 / 17
Регистрация: 21.01.2023
Сообщений: 529
16.11.2023, 19:29
Цитата Сообщение от HackerVlad Посмотреть сообщение
при чём тут библиотека? рантайм - это не библиотека, не DLL
У слова "рантайм" два значения. Одно дословное - время выполнения (программы), а другое, таки, библиотека, из которой во время выполнения программа может черпать какие-то готовые решения. Да, не всегда DLL, может быть что угодно, даже EXE или целый программный комплекс.
В контексте слово "рантайм" появилось после фразы:
Цитата Сообщение от The trick Посмотреть сообщение
Интересно откуда он берет 64 битный рантайм?
То есть понятно, что речь не про время выполнения, оно не может быть 64 битным.
0
Модератор
10060 / 3905 / 885
Регистрация: 22.02.2013
Сообщений: 5,854
Записей в блоге: 79
16.11.2023, 20:10
Цитата Сообщение от testuser2 Посмотреть сообщение
Что такое ран-тайм, я если честно, толком не знаю.
msvbvm60.dll, vba6.dll, vbe7.dll - для vba. msvcrt.dll/msvcrxxx.dll - для С и С++. Рантайм - это библиотека времени выполнения.

Цитата Сообщение от HackerVlad Посмотреть сообщение
то раз плюнуть, там всего одна API-функция MessageBoxW, гораздо сложнее с InputBox'ом, так как такой API не существует в винде.
InputBox можно через диалоговое окно создать с юникодом и т.п. Вообще в новых системах уже давно следует использовать это.
2
Вернулся
 Аватар для HackerVlad
1748 / 644 / 45
Регистрация: 10.09.2021
Сообщений: 2,786
16.11.2023, 20:45
The trick, спасибо что сказал, да, можно наверное, но только начиная только с висты? а то что я написал через хук и субклассирование работает и для XP

Добавлено через 1 минуту
The trick, да и плюс там надо мучиться самому диалоговое окно создавать со всеми окнами. И для XP можно написать через много функций CreateWindowExW но заколебёшься всё описывать. Когда проще через сабклассинг переделать уже готовый.
0
Модератор
10060 / 3905 / 885
Регистрация: 22.02.2013
Сообщений: 5,854
Записей в блоге: 79
16.11.2023, 21:14
Цитата Сообщение от HackerVlad Посмотреть сообщение
CreateWindowExW
При чем тут эта функция когда я говорю про диалоговые окна. Вот глянь.
0
Вернулся
 Аватар для HackerVlad
1748 / 644 / 45
Регистрация: 10.09.2021
Сообщений: 2,786
16.11.2023, 21:17
The trick, сама суть, подумай, это ещё неделю надо потратить чтобы написать через API свой InputBox. А хук и субклассирование всего за 2-3 часа написал.

Добавлено через 19 секунд
The trick, а если и написать то ещё и в XP не будет работать
0
Модератор
10060 / 3905 / 885
Регистрация: 22.02.2013
Сообщений: 5,854
Записей в блоге: 79
16.11.2023, 21:38
Цитата Сообщение от HackerVlad Посмотреть сообщение
The trick, сама суть, подумай, это ещё неделю надо потратить чтобы написать через API свой InputBox. А хук и субклассирование всего за 2-3 часа написал.
Ну это костыли.

Цитата Сообщение от HackerVlad Посмотреть сообщение
The trick, а если и написать то ещё и в XP не будет работать
Все будет работать.
0
Вернулся
 Аватар для HackerVlad
1748 / 644 / 45
Регистрация: 10.09.2021
Сообщений: 2,786
17.11.2023, 08:04
Я посмотрел: https://nolongerset.com/modern-message-boxes/ там так и написано, что это огромная работа

Добавлено через 3 минуты
Цитата Сообщение от The trick Посмотреть сообщение
Ну это костыли
У тебя всё костыли

Добавлено через 31 секунду
Я написал професиональный код, а для тебя это костыли, и лайки перестал ставить

Добавлено через 5 часов 7 минут
testuser2, посмотри, какие очень крутые диалоги есть для VBA: https://accessui.com/Products/VBATaskDialog

Добавлено через 4 часа 58 минут
testuser2, а лучше посмотри сразу здесь: https://www.vbforums.com/showthread.php?777021 супер-крутые диалоги, написано, что поддерживает все версии VBA также...

Цитата Сообщение от The trick Посмотреть сообщение
InputBox можно через диалоговое окно создать с юникодом и т.п. Вообще в новых системах уже давно следует использовать это.
А как вызвать эту API-функцию, без манифеста???

Добавлено через 7 минут
Цитата Сообщение от The trick Посмотреть сообщение
При чем тут эта функция когда я говорю про диалоговые окна. Вот глянь.
Я понял про что ты... Я уже, конечно, смотрел в сторону функции DialogBoxIndirectParam... Но мне всегда казалось, что в ней очень сложно разобраться... Вот ты дал код, а он опять на С++, у меня нет готвого кода-примера на VB6, а это очень важно. очень жаль, что ты написал на С, но не написал это на VB/

Добавлено через 4 минуты
The trick, вообще, я только сейчас понял, примерно, о чём ты говоришь, значит можно создать универсальный InputBox который для XP будет вызывать DialogBoxIndirectParam и создавать своё окошко таким образом, а для Vista и выше будет вызывать TaskDialogIndirect. Но опять таки встревает вопрос как вызвать TaskDialogIndirect без манифеста и возможно ли это?

Добавлено через 59 секунд
The trick, и дайте код DialogBoxIndirectParam для VB6

Добавлено через 1 минуту
Что мне ваши эти С++... Не люблю си...
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
17.11.2023, 08:04

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

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

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

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

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


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

Или воспользуйтесь поиском по форуму:
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 и то, что с ним. . .
Сам себя обучал rest api
anaschu 02.07.2026
Педагогический лайфхак: Почему чистый REST API для ученика намного круче, чем готовые библиотеки Когда мы отказались от капризного JAR-файла AnyLogic и переписали код на стандартный HttpClient,. . .
rest api anylogic - выполнение модели на своём русском сайте
anaschu 02.07.2026
Как подружиться с AnyLogic Cloud API, победить провайдеров и развернуться Java-бэкенд в Docker на бесплатном хостинге: Двухдневный лог борьбы Всем привет! Хочу поделиться свежим (и довольно. . .
Где деньги лежат
kumehtar 02.07.2026
Это - японская подводная лодка I-52 (тип C2, кодовое имя Momi) вышла из Японии в марте 1944 года с миссией в оккупированную немцами Францию (Лорьян). Это была одна из «Янаги»-миссий по обмену. . .
Krabik для WoW 3.3.5a, многоязычный
AmbA 02.07.2026
Допилил бота, думаю что окончательно. Изменения: - добавлена многоязычность - добавлено снятие скриншотов - добавлено поддержание бафов хождения по воде (для жреца, дк и шамана) - и так, по. . .
Алиса нашла кучу ошибок компиляции и запуска в проекте, который без проблем компилировался и запускался)))
anaschu 30.06.2026
Я пока посмеюся, но завтра проверю. А вообще интерсно. Дал алисе файл, в котором точно нет ошибок компиляции и запуска, и попросил их найти. Нашла кучу))) Критические ошибки, мешающие компиляции и. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru