Форум программистов, компьютерный форум, киберфорум
Visual Basic
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.88/8: Рейтинг темы: голосов - 8, средняя оценка - 4.88
159 / 104 / 124
Регистрация: 01.04.2014
Сообщений: 466
Записей в блоге: 7

Вычислить функцию с неопределенным числом параметров

23.05.2014, 11:36. Показов 1711. Ответов 9
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Требуется вычислить функцию y = max(a, b, c, ... ) где a, b, c, ... - целые числа
а y - максимальное из этих чисел. Причем некоторые числа могут быть
заданы в явном виде (например вместо "a" может стоять 11). Кроме того
число параметров (чисел) есть величина неопределенная.
Логика, размышления и решение:
Например в языке Си есть такое понятие как "перегрузка функций".
В Бейсике этого нет, однако и он не лаптем щи хлебает.
Нам ли сыновьям славного Бейсика уступить выскочке Си!
Я подумал:
а почему бы не подсунуть Бейсику Троянского коня. Суть дела
опирается на следующую аксиому (формулировка великого gehh).
Аксиома: Строковая переменная заменит 1000 параметров.
в самом деле, если ввести x$="a b c d e", то будут и волки сыты и
овцы целы. Один параметр заменяет все!!
Следующая программа решает эту задачу
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
Option Explicit
Dim x As String
Dim a%, b%, c%, d%, e%, i%, z%
Dim m() As String
Dim n() As Integer
 
Private Sub cmdD_Click()
    x = "a b c d e 1234"
    a = 11
    b = 0
    c = -33
    d = 777
    Print Max(x)
End Sub
 
Private Function Max(x As String) As Integer
    m = Split(x)
    z = UBound(m)
    ReDim n(z)
    For i = 0 To z
        Select Case m(i)
            Case "a": n(i) = Val(a)
            Case "b": n(i) = Val(b)
            Case "c": n(i) = Val(c)
            Case "d": n(i) = Val(d)
            Case "e": n(i) = Val(e)
            Case Else
                n(i) = Val(m(i))
        End Select
    Next i
    Max = n(0)
    For i = 1 To z
        If Max < n(i) Then Max = n(i)
    Next i
End Function
Успехов вам всем!
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
23.05.2014, 11:36
Ответы с готовыми решениями:

Вызвать функцию из dll с неопределённым числом параметров
Нужно вызвать из dll функцию с неопределённым числом параметров. пока что работаю с таким вызовом char res; char (*dll) (char* ...);...

Функции с неопределенным числом фактических параметров
создать и отладить программу, которая осуществляет обработку элементов последовательности, вызывая функцию с неопределенным числом...

Процедура с неопределённым числом параметров: можно ли использовать для чисел, введённых с клавиатуры?
Процедура с неопределённым числом параметров, можно ли использовать для чисел, введённых с клавиатуры? Она работает, но как сделать чтобы...

9
Модератор
10057 / 3902 / 884
Регистрация: 22.02.2013
Сообщений: 5,853
Записей в блоге: 79
23.05.2014, 11:49
Лучший ответ Сообщение было отмечено The trick как решение

Решение

В VB6 можно объявлять функции с переменным числом параметров, для этого есть специальное ключевое слово ParamArray:
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
Private Sub Form_Load()
    Dim max1 As Long, max2 As String
    
    max1 = Max(1, 5, 8, 2, 4, 7, 4, 22)
    max2 = Max("a", "v", "z", "w")
End Sub
 
Private Function Max(ParamArray v()) As Variant
    Dim x As Variant, i As Boolean
    For Each x In v
        If i Then
            If x > Max Then Max = x
        Else: Max = x: i = True
        End If
    Next
End Function
3
Супер-модератор
Эксперт функциональных языков программированияЭксперт Python
 Аватар для Catstail
38193 / 21126 / 4309
Регистрация: 12.02.2012
Сообщений: 34,732
Записей в блоге: 14
23.05.2014, 12:11
Цитата Сообщение от gehh Посмотреть сообщение
Один параметр заменяет все!!
- Правильно... Только почему не занести эти числа в обыкновенный массив? Будет быстрее, чем возиться со строками.
1
159 / 104 / 124
Регистрация: 01.04.2014
Сообщений: 466
Записей в блоге: 7
23.05.2014, 12:22  [ТС]
Конечно я знал, что можно использовать массив.
Но это все знают!! А вот использовать строковую переменную
(мне так кажется) и половина не догадается!!
Удачи вам!
0
Супер-модератор
Эксперт функциональных языков программированияЭксперт Python
 Аватар для Catstail
38193 / 21126 / 4309
Регистрация: 12.02.2012
Сообщений: 34,732
Записей в блоге: 14
23.05.2014, 12:27
Цитата Сообщение от gehh Посмотреть сообщение
и половина не догадается!!
- и правильно... Потому, что в данной задаче это нерационально. Точное решение привел The trick.
2
15155 / 6428 / 1731
Регистрация: 24.09.2011
Сообщений: 9,999
23.05.2014, 12:50
Более того, можно сравнивать значения разных типов.
Code
1
2
3
4
5
6
7
8
?Max("a", "v", "z", "w", 1, 5, 8, 2, 4, 7, 4, 22)
z
?Max(True, False)
False
?max(true,"A"),max(true,"z")
A             z
?max(false,"A"),max(false,"z")
A             z
Строки больше чисел и логических значений.
Code
1
2
3
4
5
6
7
8
?Max(true,1),max(false,1)
 1             1 
?max(true,0),max(false,0)
 0            False
?max(true,-1),max(false,-1)
True          False
?max(true,-1e-99),max(false,-1e-99)
-1E-99        False
При сравнении чисел и логических True преобразуется в -1, False в 0.
2
Модератор
10057 / 3902 / 884
Регистрация: 22.02.2013
Сообщений: 5,853
Записей в блоге: 79
23.05.2014, 12:52
Лучший ответ Сообщение было отмечено The trick как решение

Решение

Кстати по-сути, это ParamArray - это обыкновенный массив, "обернутый" в Variant переменную. С таким успехом можно написать и так:
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
Private Sub Form_Load()
    Dim Max11 As Long, Max12 As String
 
    Max11 = Max1(Array(1, 5, 3, 7, 8, 6, 5))
    Max12 = Max2(Array("a", "v", "z", "w"))
End Sub
 
' Так быстрее
Private Function Max1(v As Variant) As Variant
    Dim x As Variant, i As Long
    For Each x In v
        If i Then
            If x > Max1 Then Max1 = x
        Else: Max1 = x: i = True
        End If
    Next
End Function
Private Function Max2(v As Variant) As Variant
    Dim i As Long
    For i = 0 To UBound(v)
        If i Then
            If v(i) > Max2 Then Max2 = v(i)
        Else: Max2 = v(i)
        End If
    Next
End Function
2
159 / 104 / 124
Регистрация: 01.04.2014
Сообщений: 466
Записей в блоге: 7
23.05.2014, 16:41  [ТС]
Я тут поэксперементировал с кодом и получилась
интересная штука. Булева переменная мне вовсе
не пригодилась. Цикл сократился до одного оператора
И все работает! В чем тут дело??
Visual Basic
1
2
3
4
5
6
Private Function Max(ParamArray v()) As Variant
   Dim x As Variant
   For Each x In v
       If x > Max Then Max = x
   Next
End Function
0
Модератор
10057 / 3902 / 884
Регистрация: 22.02.2013
Сообщений: 5,853
Записей в блоге: 79
23.05.2014, 16:43
Цитата Сообщение от gehh Посмотреть сообщение
В чем тут дело??
В том, что если ты передашь все отрицательные числа, то твоя функция не будет работать.
1
159 / 104 / 124
Регистрация: 01.04.2014
Сообщений: 466
Записей в блоге: 7
23.05.2014, 17:39  [ТС]
Я вам очень благодарен за разъяснение.
Теперь я добавил только одну строчку в предыдущий код
(ввёл самое большое по модулю отрицательное число)
Все работает! И программа короче!!
Спасибо вам ещё раз!!
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
23.05.2014, 17:39
Помогаю со студенческими работами здесь

Унаследовать функцию с переменным числом параметров
Добрый день, форум! Вот такая задачка: Есть базовый класс A с методом void func(void). От этого класса унаследовался другой класс,...

Написать функцию со сменным числом параметров
нужно написать функцию со сменным числом параметров, которая находит углы n-угольника по заданным сторонам. заранее благодарю!

Написать функцию с переменным числом параметров
Задание дали такое: Написать функцию с переменным числом параметров, в соответствии с вариантом, продемонстрировать вызов функции с...

Массивы в функцию с переменным числом параметров
Как передать некоторое кол-во массивов в функцию с переменным числом параметров и вывести в функции сумму элементов каждого массива (на...

Написать функцию с переменным числом параметров
Среднее арифметическое из элементов в списке параметров , стоящие на четных местах. вот что у меня получилось, дальше никак: #include...


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

Или воспользуйтесь поиском по форуму:
10
Ответ Создать тему
Новые блоги и статьи
Переходник USB-CAN-GPIO
Eddy_Em 20.03.2026
Достаточно давно на работе возникла необходимость в переходнике CAN-USB с гальваноразвязкой, оный и был разработан. Однако, все меня терзала совесть, что аж 48-ногий МК используется так тупо: просто. . .
Оттенки серого
Argus19 18.03.2026
Оттенки серого Нашёл в интернете 3 прекрасных модуля: Модуль класса открытия диалога открытия/ сохранения файла на Win32 API; Модуль класса быстрого перекодирования цветного изображения в оттенки. . .
SDL3 для Desktop (MinGW): Рисуем цветные прямоугольники с помощью рисовальщика SDL3 на Си и C++
8Observer8 17.03.2026
Содержание блога Финальные проекты на Си и на C++: finish-rectangles-sdl3-c. zip finish-rectangles-sdl3-cpp. zip
Символические и жёсткие ссылки в Linux.
algri14 15.03.2026
Существует два типа ссылок — символические и жёсткие. Ссылка в Linux — это запись в каталоге, которая может указывать либо на inode «файла-ИСТОЧНИКА», тогда это будет «жёсткая ссылка» (hard link),. . .
[Owen Logic] Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора
ФедосеевПавел 14.03.2026
Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора ВВЕДЕНИЕ Выполняя задание на управление насосной группой заполнения резервуара,. . .
делаю науч статью по влиянию грибов на сукцессию
anaschu 13.03.2026
прикрепляю статью
SDL3 для Desktop (MinGW): Создаём пустое окно с нуля для 2D-графики на SDL3, Си и C++
8Observer8 10.03.2026
Содержание блога Финальные проекты на Си и на C++: hello-sdl3-c. zip hello-sdl3-cpp. zip Результат:
Установка CMake и MinGW 13.1 для сборки С и C++ приложений из консоли и из Qt Creator в EXE
8Observer8 10.03.2026
Содержание блога MinGW - это коллекция инструментов для сборки приложений в EXE. CMake - это система сборки приложений. Здесь описаны базовые шаги для старта программирования с помощью CMake и. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru