Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 18.06.2014, 16:17   #1
anakinskyoker
Пользователь
 
Регистрация: 18.06.2014
Сообщений: 15
По умолчанию Помогите переписать процедуру с Delphi на VB

Здравствуйте. Мне требуется созданную на Delphi процедуру для нахождения корней полиномов переписать на язык VB. Почему именно на VB? Так нужно, ибо дальше работать именно с ним т.к пишем аддон на API к системе Autodesk Inventor, а объектная модель ее на VB.

Вот кусок кода, что нужно переписать на VB:
Код:
unit zerofun;
interface
uses math;
 type
        funtype=function(x:double):double;
   
   procedure ppmetod(a,b,eps,h:double; fun:funtype; var n:integer; var x);
 implementation

procedure ppmetod(a,b,eps,h:double; fun:funtype; var n:integer; var x);
  
     var f:double; w:integer;
         xi,c,r:extended;
     xx:arraytype absolute x;
     begin
      c:=h; n:=0; xi:=a; f:=fun(xi);
      if f>0 then w:=1 else w:=-1;
      repeat
       xi:=xi+c; r:=xi-c; if r>=b then exit;
       f:=fun(xi);
       if (f*w/c<0) or (r=xi) then
        begin
         c:=-c/4;
         if (abs(c)<eps/4) or (r=xi) then
          begin
           n:=n+1;
           xx[n]:=xi;
           c:=h; w:=-w;
          end;
        end;
        until false;
   end;

Вот что написал я:
Код:
 Public Sub ppmetod(ByVal a As Double, ByVal b As Double, ByVal eps As Double, ByVal h As Double, ByVal fun As, ByVal n As Integer, ByVal x As Array)
        Dim f As Double
        Dim w As Integer
        Dim xi, c, r As Double
        Dim xx() As Double
        c = h
        n = 0
        xi = a
        f = fun(xi)
        If f > 0 Then w = 1 Else w = -1

        Do
            xi = xi + c
            r = xi - c
            If r >= b Then Exit Do
            f = fun(xi)
            If (f * w / c < 0) Or (r = xi) Then
                c = -c / 4
            End If
            If (Abs(c) < eps / 4) Or (r = xi) Then

                n = n + 1
                xx(n) = xi
                c = h
                w = -w
            End If
        Loop
    End Sub
У меня возникает вопрос как написать аналог
Код:
 type
        funtype=function(x:double):double;
на бейсике, чтобы можно было использовать функцию как параметр другой функции.
Спасибо.
anakinskyoker вне форума Ответить с цитированием
Старый 18.06.2014, 17:34   #2
Человек_Борща
Старожил
 
Аватар для Человек_Борща
 
Регистрация: 30.12.2009
Сообщений: 11,426
По умолчанию

fun - внешная функция вычисляющая что-то из передаваемой туда x.
Можно так:
Код:
unit zerofun;
interface
uses math;

   
   procedure ppmetod(a,b,eps,h:double; var n:integer; var x);
 implementation

function fun(x:double):double
begin
  //Магия
end;

procedure ppmetod(a,b,eps,h:double; var n:integer; var x);
  
     var f:double; w:integer;
         xi,c,r:extended;
     xx:arraytype absolute x;
     begin
      c:=h; n:=0; xi:=a; f:=fun(xi);
      if f>0 then w:=1 else w:=-1;
      repeat
       xi:=xi+c; r:=xi-c; if r>=b then exit;
       f:=fun(xi);
       if (f*w/c<0) or (r=xi) then
        begin
         c:=-c/4;
         if (abs(c)<eps/4) or (r=xi) then
          begin
           n:=n+1;
           xx[n]:=xi;
           c:=h; w:=-w;
          end;
        end;
        until false;
   end;
Человек_Борща вне форума Ответить с цитированием
Старый 18.06.2014, 17:46   #3
anakinskyoker
Пользователь
 
Регистрация: 18.06.2014
Сообщений: 15
По умолчанию

Цитата:
Сообщение от Человек_Борща Посмотреть сообщение
fun - внешная функция вычисляющая что-то из передаваемой туда x.
Спасибо за ответ, но вы не поняли сути вопроса, нужно эту процедуру переписать на бейсике, причем как-то указать эту fun в качестве параметра процедуры ppmetod. Подобная магия на VB у меня не работает

Function fun(ByVal x As Double) As Double

End Function

Public Sub ppmetod(ByVal a As Double, ByVal b As Double, ByVal eps As Double, ByVal h As Double, ByVal fun As Double, ByVal n As Integer, ByVal x As Array)
anakinskyoker вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Помогите написать процедуру поиска минимального элемент в 2-ух массивах (Delphi) oleg866 Помощь студентам 3 26.04.2014 22:13
Помогите переписать код Garmata Помощь студентам 1 26.11.2013 18:53
Переписать с C++ на Delphi iLnes Фриланс 9 09.10.2013 22:30
agent mail SendSMS переписать с Delphi 7 на Delphi 2010 KWN, lnc Компоненты Delphi 0 11.09.2012 14:02
помогите написать процедуру на delphi для работы со звуком smalsvoloch Помощь студентам 2 14.10.2009 21:48