Форум программистов, компьютерный форум, киберфорум
Visual Basic
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.53/15: Рейтинг темы: голосов - 15, средняя оценка - 4.53
1 / 1 / 0
Регистрация: 20.03.2010
Сообщений: 14

Функция как аргумент функции

20.03.2010, 01:31. Показов 2942. Ответов 12
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Возможно, вопрос довольно глупый, но я, в ходе написания курсовой работы, застрял в одном месте.

Вообщем, пишу я тройку функций:
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
    Function y(ByVal x As Single) As Single
        Return k * (Math.E ^ (x / 3) + Math.E ^ (-x / 3)) / 2
    End Function
 
    Function summ(ByVal f() As Single, ByVal start As Integer, ByVal final As Integer, ByVal h As Integer) As Single
        Dim i As Integer, sum As Single
        sum = 0
        For i = start To final Step h
            sum = sum + f(i)
        Next
        Return sum
    End Function
 
    Function integra(ByVal fu() As Single, ByVal a As Single, ByVal b As Single, ByVal h As Single) As Single
        Return h / 3 * (fu(a) + fu(b) + 4 * summ(fu, a + h, b - h, h) + 2 * summ(fu, a + 2 * h, b - 2 * h, h))
    End Function
Задумка такова, чтобы при вызове функции summ или integra в них можно было задать в качестве аргумента функцию y. Однако, тот способ, которым пользуюсь я, заставляет компилятор думать, что я имею в виду не функцию, а одномерный массив.
Можно подумать, что надо просто правильно задать тип аргумента, но в перечне типов аргумента я не нашел ничего, что было бы похоже на тип аргумента - функция.
Вообще, обход этой трудности я уже нашел, просто заранее задавая функцию в виде одномерного массива с перечнем значений функции, но, может, есть всё-таки способ сделать так, чтобы компилятор понимал, что я хочу сделать аргументом функции - функцию?
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
20.03.2010, 01:31
Ответы с готовыми решениями:

Как передавать в аргумент функции массив, и можно ли возвращать его из функции?
привет друзья! можно ли в VB 6.0 передавать в аргумент функции массив и можно ли возвращать его из функции? хотя бы коротенький...

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

Функция как аргумент другой функции
Добрый вечер, уважаемые. Собственно, пытаюсь функцию запихнуть в аргументы другой функции. На подобии маткадовского root(f(x),x,a,b)....

12
 Аватар для ironegg
1905 / 782 / 31
Регистрация: 11.02.2010
Сообщений: 1,567
20.03.2010, 03:20
так чтоли
Visual Basic
1
2
3
4
5
6
7
8
9
Function a(ByVal x)
a = x * 2
End Function
Function b(ByVal x)
b = x * 3
End Function
Sub c()
MsgBox a(b(2))
End Sub
Цитата Сообщение от Az-Pekt Посмотреть сообщение
при вызове функции summ или integra ... задать в качестве аргумента функцию y
не вижу, чтото я в твоем коде аргумента y
0
1 / 1 / 0
Регистрация: 20.03.2010
Сообщений: 14
20.03.2010, 04:30  [ТС]
Это не совсем то, что я имел ввиду. В твоем коде ты в качестве аргумента используешь ЗНАЧЕНИЕ функции, а я думаю над тем, чтобы в аргументе была САМА функция, а не ее значение при некотором аргументе.
не вижу, чтото я в твоем коде аргумента y
Вся задумка как раз в том, чтобы использовать функцию без аргумента. Аналитическое выражение функции, а не ее значения при том или ином аргументе...
Но, чем больше я об этом пишу и задумываюсь, тем меньше мне кажется, что синтаксис Бэйсика такое позволяет.
0
 Аватар для ironegg
1905 / 782 / 31
Регистрация: 11.02.2010
Сообщений: 1,567
20.03.2010, 05:37
в приведенном тобой коде я вижу только ОПРЕДЕЛЕНИЕ функции y
Цитата Сообщение от Az-Pekt Посмотреть сообщение
Visual Basic
1
2
3
FUNCTION y(BYVAL x AS SINGLE) AS SINGLE
 RETURN k * (Math.E ^ (x / 3) + Math.E ^ (-x / 3)) / 2
 END FUNCTION
она нигде не используется!
покажи, как(где) ты хочешь ее использовать
0
1 / 1 / 0
Регистрация: 20.03.2010
Сообщений: 14
20.03.2010, 11:02  [ТС]
Допустим здесь
Visual Basic
1
2
3
    FUNCTION integra(BYVAL fu() AS SINGLE, BYVAL a AS SINGLE, BYVAL b AS SINGLE, BYVAL h AS SINGLE) AS SINGLE
        RETURN h / 3 * (fu(a) + fu(b) + 4 * summ(fu, a + h, b - h, h) + 2 * summ(fu, a + 2 * h, b - 2 * h, h))
    END FUNCTION
Самый первый аргумент функции integra - fu(). Естественно, компилятор воспринимает это как массив, потому и встал вопрос, как сделать аргументом функции функцию? Идеально при вызове функции integra я хочу просто писать:
Visual Basic
1
integra(y,1,9,1)
Где у - соответственно, моя функция.
0
 Аватар для ironegg
1905 / 782 / 31
Регистрация: 11.02.2010
Сообщений: 1,567
20.03.2010, 16:29
нет ответа! в коде функции integra как она будет использоваться?
0
1 / 1 / 0
Регистрация: 20.03.2010
Сообщений: 14
20.03.2010, 17:05  [ТС]
Как функция, к которой он будет обращаться дабы получить то или иное значение.
0
 Аватар для ironegg
1905 / 782 / 31
Регистрация: 11.02.2010
Сообщений: 1,567
20.03.2010, 23:18
я могу только строить догадки... вырази, в конце концов, свою мысль на VB. напиши простенький пример, наподобие как во втором посте.
может так?
Visual Basic
1
2
3
4
5
6
7
8
9
Function a(ByVal x)
    a = x * 2
End Function
Function b(Optional ByVal x = 5)
    b = x * 3
End Function
Sub c()
    MsgBox a(b)
End Sub
0
1 / 1 / 0
Регистрация: 20.03.2010
Сообщений: 14
21.03.2010, 13:21  [ТС]
Потому тема эта и создана, что я не знаю, как это выразить на VB)
Ну, вот смотри:
Visual Basic
1
2
3
4
5
6
7
8
9
function a(byval x as Single) as Single
return x^2 + 2
end function
 
function b(byval a as <функция> , Byval x as Single) as single
return a(x)^3 - a(3*x)^2
end function
 
msgbox(b(a,3))
То есть чтобы при вызове функции b, в которой аргументом служит функция a и переменная x, мы получали решение такого аналитического уравнения:
(x^2 + 2)^3 - ((3*x)^2 + 2)^2
Это уравнение получилось после подстановки аналитического выражения функции а(х) = x^2 + 2 в функцию b(a,x) = a(x)^3 - a(3*x)^2.
0
 Аватар для ironegg
1905 / 782 / 31
Регистрация: 11.02.2010
Сообщений: 1,567
21.03.2010, 14:01
Visual Basic
1
2
3
4
5
6
7
8
9
FUNCTION a(BYVAL x AS SINGLE) AS SINGLE
RETURN x^2 + 2
END FUNCTION
 
FUNCTION b(BYVAL x AS SINGLE) AS SINGLE
RETURN a(x)^3 - a(3*x)^2
END FUNCTION
 
msgbox(b(3))
работает так как надо?
0
1 / 1 / 0
Регистрация: 20.03.2010
Сообщений: 14
21.03.2010, 15:07  [ТС]
)
Смылс функции, как и программирования в целом - унификация и сведение всех действий к минимуму. То что ты написал работать будет, но не будет содержать тот смысл, который я вкладываю в вопрос. Более развернутый пример. Имеем ряд разных функций:
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
FUNCTION a(BYVAL x AS SINGLE) AS SINGLE
RETURN x^2 + 2
END FUNCTION
 
FUNCTION b(BYVAL x AS SINGLE) AS SINGLE
RETURN x^3 - (3*x)^2
END FUNCTION
 
FUNCTION с(BYVAL x AS SINGLE) AS SINGLE
RETURN x^(1/3) - x
END FUNCTION
 
FUNCTION d(BYVAL x AS SINGLE) AS SINGLE
RETURN ABS(x^3) - 4*x
END FUNCTION
И одну функцию, которая должна содержать аргумент - другую функцию:
Visual Basic
1
2
3
FUNCTION func(byval f as [функция],BYVAL x AS SINGLE) AS SINGLE
RETURN SQRT(ABS(f(x)^5 + 8))
END FUNCTION
Смысл в том, чтобы мы в func вместо f смогли вставить любую из выше перечисленных функций (a, b, c или d). Скажем, когда мы пишем:
Visual Basic
1
msgbox(func(b,10))
Мы получаем ответ на аналитическое выражение SQRT(ABS((10^3 - (3*10)^2)^5 + 8)). То есть мы подставили b равное x^3 - (3*x)^2 в func, которое равно SQRT(ABS(f(x)^5 + 8)), вместо f(x), и x = 10.

Я хочу чтобы была также возможность подставить и другую функцию вместо f. Например c:
Visual Basic
1
msgbox(func(с,7))
Чтобы получить ответ на аналитическое выражение SQRT(ABS((7^(1/3) - 7)^5 + 8)).

Уже и не знаю, как яснее изложить свою мысль)
0
 Аватар для ironegg
1905 / 782 / 31
Регистрация: 11.02.2010
Сообщений: 1,567
21.03.2010, 15:57
оно?
http://www.microsoft.com/Rus/M... r/134.mspx
http://www.thevbzone.com/secrets.htm
сам я тебе не помошник. так глубоко я не копаю
1
1 / 1 / 0
Регистрация: 20.03.2010
Сообщений: 14
21.03.2010, 18:20  [ТС]
О, похоже на то, спс)
По правде говоря, я уже давно нашел альтернативу более прямолинейную и менее элегентную, чем того хотелось, но всё-таки. Выяснить этот вопрос - уже было дело принципа, да и самопросвещения) Судя по тому, что написано в первой ссылке, в ВБ сделать этого нельзя, хотя некоторая симуляция того есть. Попробую разобраться, посмотреть можно ли использовать это в рамках моей задумки.
Вообщем, считаем этот вопрос исчерпаным и закрытым.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
21.03.2010, 18:20
Помогаю со студенческими работами здесь

Функция, возвращает квадрат аргумента, если аргумент число; хвост списка, если аргумент список; иначе сам аргумент
Помогите, пожалуйста, с заданием: Написать функцию, которая возвращает квадрат аргумента, если аргумент число; хвост списка, если аргумент...

Функция возвращает значение и аргумент функции
Можете пожалуйста простым языком объяснить, чем отличается возвращенное значение от аргумента в языке С++? Если можно, то с примером.

Вывести на экран таблицу значений функции в два столбца: аргумент и функция
Вывести на экран таблицу значений функции в два столбца: аргумент и функция: f=sqrt(1+x)-3cos(x) для х принадлежит с шагом 0,2. Выявить...

Для функции у=-5х+10 найдите, какое значение приобретает функция, если аргумент
Для функции у=-5х+10 найдите, какое значение приобретает функция, если аргумент -12,5; 1; -2,5; 2,5;-1,5

Рекурсивные процедуры и функции: Логическая функция возвращает True, если её аргумент - простое число
Помогите написать программу: Логическая функция возвращает True, если её аргумент - простое число


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

Или воспользуйтесь поиском по форуму:
13
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): сборка C/C++ проекта из консоли
8Observer8 30.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
Установка Emscripten SDK (emsdk) и CMake на Windows для сборки C и C++ приложений в WebAssembly (Wasm)
8Observer8 30.01.2026
Чтобы скачать Emscripten SDK (emsdk) необходимо сначало скачать и уставить Git: Install for Windows. Следуйте стандартной процедуре установки Git через установщик. Система контроля версиями Git. . .
Подключение Box2D v3 к SDL3 для Android: физика и отрисовка коллайдеров
8Observer8 29.01.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами. Версия v3 была полностью переписана на Си, в. . .
Инструменты COM: Сохранение данный из VARIANT в файл и загрузка из файла в VARIANT
bedvit 28.01.2026
Сохранение базовых типов COM и массивов (одномерных или двухмерных) любой вложенности (деревья) в файл, с возможностью выбора алгоритмов сжатия и шифрования. Часть библиотеки BedvitCOM Использованы. . .
Загрузка PNG с альфа-каналом на SDL3 для Android: с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 28.01.2026
Содержание блога SDL3 имеет собственные средства для загрузки и отображения PNG-файлов с альфа-каналом и базовой работы с ними. В этой инструкции используется функция SDL_LoadPNG(), которая. . .
Загрузка PNG с альфа-каналом на SDL3 для Android: с помощью SDL3_image
8Observer8 27.01.2026
Содержание блога SDL3_image - это библиотека для загрузки и работы с изображениями. Эта пошаговая инструкция покажет, как загрузить и вывести на экран смартфона картинку с альфа-каналом, то есть с. . .
Влияние грибов на сукцессию
anaschu 26.01.2026
Бифуркационные изменения массы гриба происходят тогда, когда мы уменьшаем массу компоста в 10 раз, а скорость прироста биомассы уменьшаем в три раза. Скорость прироста биомассы может уменьшаться за. . .
Воспроизведение звукового файла с помощью SDL3_mixer при касании экрана Android
8Observer8 26.01.2026
Содержание блога SDL3_mixer - это библиотека я для воспроизведения аудио. В отличие от инструкции по добавлению текста код по проигрыванию звука уже содержится в шаблоне примера. Нужно только. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru