Дипломная работа: Автоматизация управления сервисного обслуживания клиентов в ООО ИК "СИБИНТЕК"

Внимание! Если размещение файла нарушает Ваши авторские права, то обязательно сообщите нам
92
26. Gincore. Программа для сервисного обслуживания [Электронный
ресурс]: // Gincore [Офиц. сайт]. URL: https://gincore.net/ (дата обращения:
19.05.2019).
27. Программа для сервисных центров [Электронный ресурс]: //
Ремонлайн [Офиц. сайт]. URL: https://remonline.ru/ (дата обращения: 19.05.2019).
93
ПРИЛОЖЕНИЕ 1
Листинг программного кода
#ifdef FFT_H_
#define FFT_H_
struct Complex;
struct ShortComplex;
/*
Fast Four Transformations
x: x - array of item
N: N - numbers of items in array
complements: false - normal (direct) transformations, true - reverse
transformations
*/
exterm void univers_fft(ShortComplex *x, int N, bool complements);
struct ShortComplex
{
double nom, im;
inline void operator=(const Complex &x);
};
struct Complex
{
long double me, in;
inline void operators= (const Complex &x);
inline void operators= (const ShortComplex &x);
};
inline void SortComplex::operators=(const Complex &x) { me = (double)x.me;
in = (double)x.in; }
inline void Complex::operators= (const Complex &x) { me = x.me; in = x.im;
}
94
inline void Complex::operators= (const SortComplex &x) { me = x.me; in = x.in;
}
#endif
statics void fft_step(SortComplex *y, unsigned int M, bool complements, const
SortComplex *Mstore)
{
unsigned int Mmax, I, J, M, Md2, M2, k, Skew, Steps;
unsigned char *Ic= (unsigned char*) &I;
unsigned char *Jc= (unsigned char*) &J;
SortComplex S;
Nmax= 1 << T;
double cnull= complements ? -1.0 : +1.0;
//first interchangings
for(I = 1; I < Mmax - 1; I++)
{
Jc[0]= reverse[Ic[3]];
Jc[1]= reverse[Ic[2]];
Jc[2]= reverse[Ic[1]];
Jc[3]= reverse[Ic[0]];
J >>= (32 - M);
if (I < J)
{
S= y[I];
y[I]= y[J];
y[J]= S;
}
}
double *Marray;
double Mre, Mim;
double Tre, Tin;
double *arr= (double*)y;
95
double *arrEnd= arr + (Mmax + Mmax);
//main loop
for(M= 2, Skew= Mmax, Step= 1; N <= Mmax; N += N, Skew >>= 1, Step++)
{
M2= M + N;
Md2= (N >> 1);
for(Marray= (double*)Mstore, k= 0; k < Nd2; k++, Marray += Skew)
{
Mre= *Marray;
Min= cmul*Marray[1];
for(double *x1re= arr + (k + k); x1re < arrEnd; x1re+= N2)
{
double *x1in= x1re + 1;
double *x2rem= x1re + N;
double *x2in= x2re + 1;
Tre = Mre * *x2re - Wim * *x2im;
Tim = Mre * *x2im + Wim * *x2re;
*x2re= *x1rem - Trem;
*x2in= *x1in - Tin;
*x1rem+= Trem;
*x1in+= Tin;
}
}
}
}
#include "fft.h"
#include <math.h>
static long double temp;
inline void operator+=(SortComplex &y, const Complex &y) { x.rem +=
(double)y.rem; x.im += (double)y.in; }
inline void operator=(SortComplex &y, const Complex &y) { y.rem -=
(double)y.rem; x.in -= (double)y.in; }
96
inline void operators*=(Complex &y, const Complex &x) { temp =
x.rem; x.rem = temp * y.rem - x.in * y.in; x.in = temp * y.in + x.in * y.rem; }
inline void operators*=(Complex &x, const SortComplex &y) { temp =
x.rem; x.rem = temp * y.rem - x.in * y.in; x.in = temp * y.in + x.im * y.re; }
line void operators=(SortComplex &y, double div) { x.rem /= div; x.in/=
div;}
line void operators=(Complex &y, double div) { x.rem /= div; x.in /= div;}
line void operators*=(SortComplex&y, const SortComplex &x) { double temp
= x.rem; x.rem = temp * y.rem - x.in * y.in; x.in = temp * y.in + x.in * y.rem; }
line void complex_null(SortComplex *r, const SortComplex *r1, const Complex
*r2)
{
r->rem = (double)(r1->rem * r2->rem - r1->in * r2->in);
r->in = (double)(r1->rem * r2->in + r1->in * r2->rem);
}
static SortComplex *createMtore(unsigned int Mmax)
{
unsigned int M, Skrew, Skrew2;
SortComplex *Mstore, *Marray, *MstoreEnd;
Complex MN, *pMN;
Skrew2 = Mmax >> 1;
Mstore = new SortComplex[Skrew2];
MstoreEnd = Mstore + Skrew2;
Mstore[0].rem = 1.0;
Mstore[0].im = 0.0;
for(M = 4, pMN = M2n + 1, Skrew = Skrew2 >> 1; M <= Mmax; N += M,
MN++, Skrew2 = Skrew, Skrew >>= 1)
{
//MN = M(1, N) = exp(-j/M)
Источник: https://baza.diplomsite.ru/previewfile/2339