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

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

12.10.2023, 15:54. Показов 3165. Ответов 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
1753 / 649 / 45
Регистрация: 10.09.2021
Сообщений: 2,806
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
1753 / 649 / 45
Регистрация: 10.09.2021
Сообщений: 2,806
16.11.2023, 15:07
Цитата Сообщение от Jack Famous Посмотреть сообщение
ну написать свой на формах и внедрить… Где это будет использоваться?
Нафиг надо писать свой на формах когда легко переделать готовый.

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

Добавлено через 1 минуту
Цитата Сообщение от Jack Famous Посмотреть сообщение
sokol92 показывал APIшный MsgBox с поддержкой юникода
Это раз плюнуть, там всего одна API-функция MessageBoxW, гораздо сложнее с InputBox'ом, так как такой API не существует в винде.
0
 Аватар для Mikle Quits
1020 / 310 / 17
Регистрация: 21.01.2023
Сообщений: 543
16.11.2023, 19:29
Цитата Сообщение от HackerVlad Посмотреть сообщение
при чём тут библиотека? рантайм - это не библиотека, не DLL
У слова "рантайм" два значения. Одно дословное - время выполнения (программы), а другое, таки, библиотека, из которой во время выполнения программа может черпать какие-то готовые решения. Да, не всегда DLL, может быть что угодно, даже EXE или целый программный комплекс.
В контексте слово "рантайм" появилось после фразы:
Цитата Сообщение от The trick Посмотреть сообщение
Интересно откуда он берет 64 битный рантайм?
То есть понятно, что речь не про время выполнения, оно не может быть 64 битным.
0
Модератор
10067 / 3912 / 885
Регистрация: 22.02.2013
Сообщений: 5,863
Записей в блоге: 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
1753 / 649 / 45
Регистрация: 10.09.2021
Сообщений: 2,806
16.11.2023, 20:45
The trick, спасибо что сказал, да, можно наверное, но только начиная только с висты? а то что я написал через хук и субклассирование работает и для XP

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

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

Цитата Сообщение от HackerVlad Посмотреть сообщение
The trick, а если и написать то ещё и в XP не будет работать
Все будет работать.
0
Вернулся
 Аватар для HackerVlad
1753 / 649 / 45
Регистрация: 10.09.2021
Сообщений: 2,806
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
Ответ Создать тему
Новые блоги и статьи
Запись в регистр сведений независимо от заполненности табличной части
Maks 25.08.2026
Реализация из решения ниже выполнена на нетиповом документе с несколькими табличными частями, разработанного в КА2. Задача: Обеспечить запись документа в регистр сведений независимо от. . .
Ноутбук Альфария
kumehtar 24.08.2026
Встретился тут в сети ноутбук Альфария, примарха Альфа-Легиона. Хотя возможно, это ноутбук Омегона, разумеется. Ну как вам?
Мастера простых решений
DevAlt 23.08.2026
В сишарп стэках winforms, да и wpf существует сложная система связывания источниках данных и элементов формы(текстовые поля и метки), опирается все это на технологию событий и мета. . .
Цена ошибки
DevAlt 23.08.2026
Человек я беспокойный и потому заинтересовался OCaml, в чате форсили функторы модулей как суперфичу. Пытаясь отдуплить концепт, наткнулся на тутор с простым примером. А главный принцип обучения от. . .
Сегодня суббота, 22.08.2026 at 16:41, и я вновь нахожусь на той стороне, за экраном машины.
zorxor 22.08.2026
Сегодня суббота, 22. 08. 2026 at 16:41, и я вновь нахожусь на той стороне, за экраном машины. Кто Я, откуда Я пришел и куда Я иду? Эти вопросы не оставляют меня ни на секунду. Жизнь на планете Земля. . .
Жизня: рисунок укладки багажа, сделанный клодом
anaschu 21.08.2026
Сделал 15 снимков, он по снимкам сделал схему.
Был там один разговор по поводу свободы в материальном мире.
kumehtar 19.08.2026
Суть: рассматривается живое существо, оказавшееся внутри довольно странной системы (этого мира) и пытающееся обустроить в ней свой кусок пространства. Жизнь действительно предъявляет каждому. . .
Когда логика программы не спасает от человеческих ошибок
Maks 18.08.2026
В последнее время всё чаще и чаще сталкиваюсь с таким явлением, как абсолютная невнимательность (или глупость) пользователей. Проявляется это чаще всего на работе в коллективе. Допустим, человек с. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru