Преобразовать код из C++ в VB

Вопросы по языкам программирования Си и С++.
KPEATOP
Бывалый
Бывалый
 
Сообщения: 291
Зарегистрирован: 02.12.2002 (Пн) 16:33
Откуда: Russia

Преобразовать код из C++ в VB

Сообщение KPEATOP » 26.01.2009 (Пн) 16:49

Помогите преобразовать код из C++ в VB:

Функции вычисления значений гауссовых вейвлетов первых шести по-рядков описаны в файле wavelet.h, этот файл также содержит определения нормировочных множителей, здесь же определена функция ().0xg

/* wavelet.h
*/
#ifndef __WAVELET_H__
#define __WAVELET_H__
#ifndef __MATH_H
#include <math.h>
#endif
double gauss (double);
#define WAVELETS 6
#define g1coef (2 * M_PI)
#define g2coef (2 * M_PI)
#define g3coef (4 * M_PI)
#define g4coef (12 * M_PI)
#define g5coef (48 * M_PI)
#define g6coef (120 * M_PI)
107
#define g1coefsq 2.5066282746310005
#define g2coefsq 2.5066282746310005
#define g3coefsq 3.544907701811032
#define g4coefsq 6.1399602476789308
#define g5coefsq 12.279920495357862
#define g6coefsq 19.416259125556991
double g0wavelet (double);
double g1wavelet (double);
double g2wavelet (double);
double g3wavelet (double);
double g4wavelet (double);
double g5wavelet (double);
double g6wavelet (double);
#define g1waveletFast g0wavelet
#define g2waveletFast g1wavelet
#define g3waveletFast g2wavelet
#define g4waveletFast g3wavelet
#define g5waveletFast g4wavelet
#define g6waveletFast g5wavelet
inline double g0wavelet (double x)
{
return -gauss (x);
}
#endif


Реализации самих функций определены в файле wavelet.cpp:

/* wavelet.cpp
*/
#include "wavelet.h"
double gauss (double x)
{
return exp (- x * x / 2);
}
double g1wavelet (double x)
{
return - x * exp (- x * x / 2);
}
double g2wavelet (double x)
108
{
double xsqr = x * x;
return (1 - xsqr) * exp (- xsqr / 2);
}
double g3wavelet (double x)
{
double xsqr = x * x;
return (3 - xsqr) * x * exp (- xsqr / 2);
}
double g4wavelet (double x)
{
double xsqr = x * x;
return ((6 - xsqr) * xsqr - 3) * exp (- xsqr / 2);
}
double g5wavelet (double x)
{
double xsqr = x * x;
return ((10 - xsqr) * xsqr - 15) * x *
exp (- xsqr / 2);
}
double g6wavelet (double x)
{
double xsqr = x * x;
return (((15 - xsqr) * xsqr - 45) * xsqr + 15) *
exp (- xsqr /2);
}

Ramzes
Скромный человек
Скромный человек
Аватара пользователя
 
Сообщения: 5004
Зарегистрирован: 12.04.2003 (Сб) 11:59
Откуда: Из гробницы :)

Re: Преобразовать код из C++ в VB

Сообщение Ramzes » 26.01.2009 (Пн) 16:56

хоть убей, не вижу связи с C#, переезжаем в треп.

А еще, есть такой замечательноый BB тег [code] :!:

MIT
Мега гуру
Мега гуру
Аватара пользователя
 
Сообщения: 2211
Зарегистрирован: 17.09.2006 (Вс) 22:46

Re: Преобразовать код из C++ в VB

Сообщение MIT » 26.01.2009 (Пн) 18:09

Не вижу ничего сложного: в *.h у тебя константы и переменные, в *.cpp чистая математика, языкозависимого ничего нет.
Изображение
You can change your face, but can`t change your mind. No matter what you do.
Создайте еще более понятный интерфейс и мир создаст еще более тупого юзера. (с) Баш

Александр Дмитриев
Бывалый
Бывалый
Аватара пользователя
 
Сообщения: 296
Зарегистрирован: 05.01.2005 (Ср) 3:39
Откуда: Санкт-Петербург    Куда: /dev/null

Re: Преобразовать код из C++ в VB

Сообщение Александр Дмитриев » 26.01.2009 (Пн) 18:30

Код: Выделить всё
Option Explicit

' wavelet.bas

Const pi As Double = 3.14159265358979
Const WAVELETS As Long = 6
Const g1coef As Double = 2 * pi
Const g2coef As Double = 2 * pi
Const g3coef As Double = 4 * pi
Const g4coef As Double = 12 * pi
Const g5coef As Double = 48 * pi
Const g6coef As Double = 120 * pi
Const g1coefsq As Double = 2.506628274631
Const g2coefsq As Double = 2.506628274631
Const g3coefsq As Double = 3.54490770181103
Const g4coefsq As Double = 6.13996024767893
Const g5coefsq As Double = 12.2799204953579
Const g6coefsq As Double = 19.416259125557

Private xsqr As Double

Function gauss(x As Double) As Double
  gauss = Exp(-x * x / 2)
End Function

Function g0wavelet(x As Double) As Double
  g0wavelet = -gauss(x)
End Function

Function g1wavelet(x As Double) As Double
  g1wavelet = -x * Exp(-x * x / 2)
End Function

Function g2wavelet(x As Double) As Double
  xsqr = x * x
  g2wavelet = (1 - xsqr) * Exp(-xsqr / 2)
End Function

Function g3wavelet(x As Double) As Double
  xsqr = x * x
  g3wavelet = (3 - xsqr) * x * Exp(-xsqr / 2)
End Function

Function g4wavelet(x As Double) As Double
  xsqr = x * x
  g4wavelet = ((6 - xsqr) * xsqr - 3) * Exp(-xsqr / 2)
End Function

Function g5wavelet(x As Double) As Double
  xsqr = x * x
  g5wavelet = ((10 - xsqr) * xsqr - 15) * x * Exp(-xsqr / 2)
End Function

Function g6wavelet(x As Double) As Double
  xsqr = x * x
  g6wavelet = (((15 - xsqr) * xsqr - 45) * xsqr + 15) * Exp(-xsqr / 2)
End Function

Function g1waveletFast(x As Double) As Double
  g1waveletFast = g0wavelet(x)
End Function

Function g2waveletFast(x As Double) As Double
  g2waveletFast = g1wavelet(x)
End Function

Function g3waveletFast(x As Double) As Double
  g3waveletFast = g2wavelet(x)
End Function

Function g4waveletFast(x As Double) As Double
  g4waveletFast = g3wavelet(x)
End Function

Function g5waveletFast(x As Double) As Double
  g5waveletFast = g4wavelet(x)
End Function

Function g6waveletFast(x As Double) As Double
  g6waveletFast = g5wavelet(x)
End Function

В VB нет инлайновых функций, поэтому gauss написана как обычная. xsqr сделал на уровне модуля, потому что мне показалось, что так будет быстрее. В VB нет нчего достаточно похожего на макроопределения, поэтому gXwaveletFast пришлось описать в виде отдельных функций.

KPEATOP
Бывалый
Бывалый
 
Сообщения: 291
Зарегистрирован: 02.12.2002 (Пн) 16:33
Откуда: Russia

Re: Преобразовать код из C++ в VB

Сообщение KPEATOP » 27.01.2009 (Вт) 8:48

Спасибо большое. Только я не пойму как этот код будет работать ? Функции откуда то должны вызываться. Например, у меня программа начинается с процедуры:

Sub Main()

и как мне здесь вызывать эти функции ???

End Sub
Вечность пахнет нефтью

Viper
Артефакт VBStreets
Артефакт VBStreets
Аватара пользователя
 
Сообщения: 4394
Зарегистрирован: 12.04.2005 (Вт) 17:50
Откуда: Н.Новгород

Re: Преобразовать код из C++ в VB

Сообщение Viper » 27.01.2009 (Вт) 9:47

KPEATOP писал(а):Спасибо большое. Только я не пойму как этот код будет работать ? Функции откуда то должны вызываться. Например, у меня программа начинается с процедуры:

Sub Main()

и как мне здесь вызывать эти функции ???

End Sub
Функции вызывай там, где они тебе нужны. Хоть в Main, хоть где еще. Это уж от твоей программы зависит где использовать функции то.
Весь мир матрица, а мы в нем потоки байтов!


Вернуться в С/С++

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 6

    TopList