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

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

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль

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

Ответ
 
Опции темы Поиск в этой теме
Старый 22.07.2012, 01:05   #1
Morpho
Пользователь
 
Регистрация: 22.07.2012
Сообщений: 29
По умолчанию [C++] Программа не обращается к функции

Всем привет)
Переделываю с Delphi на С++ курсовую, для практики.
Возникла проблема, компилятор ругается: Call to undifined function 'KeplerEquation'
В чём может быть проблема?.. На С++ только учусь, т.ч. сильно не ругайте)
(обращение к этой функции в самом низу)
Код:
#pragma hdrstop

#include "Unit2.h"
#include "math.h"

struct TClassic
{
  double EarthSCRange;    
  double e;               
  double ArgLatitude;    
  double ArgPericenter;   
  double AscNode;         
  double Incl;           
  double RealAnomaly;    
  double PeriRad;      
  double FocParameter;
  double SCRange;
  double SemiMajorAxis;
  double SemiMinorAxis;
  double Period;
  double AverDegVel;
  double DegVel;
  double OrbVel;
  double ApoVel;
  double PeriVel;
  double NormVel;
  double RadVectVel;
  double EccentrAnom;
  double AverAnomaly;
  double PerigeeMoment;
  double OrbVelDeg;
  double DragonPeriod;
  double AnomPeriod;
  double AverMotion;
  double OscPeriod;
};

struct TOrbit
{
  double Time;
  TClassic Classic;
};

#define Pi 3.14
#define RE 6371.21
#define Ecl 23.71*3.14/180
#define mu 0.398603e+6
#define OmE 0.7292115e-4
#define c20 1.082627e-3
#define ts 86164.03
#define tc 86400
#define als 499.00478353
#define vl 299792.458
#define ToGrad 180/Pi
#define ToRad Pi/180
// ---
void Parameters( TOrbit &AOrbit )
{
  AOrbit.Classic.RealAnomaly   = AOrbit.Classic.ArgLatitude-AOrbit.Classic.ArgPericenter;
  AOrbit.Classic.FocParameter  = AOrbit.Classic.PeriRad*(1+AOrbit.Classic.e);
  AOrbit.Classic.SCRange       = AOrbit.Classic.FocParameter/(1+AOrbit.Classic.e*cos(AOrbit.Classic.RealAnomaly*ToRad));
  AOrbit.Classic.SemiMajorAxis = AOrbit.Classic.FocParameter/(1-AOrbit.Classic.e*AOrbit.Classic.e);
  AOrbit.Classic.SemiMinorAxis = AOrbit.Classic.SemiMajorAxis*sqrt(1-AOrbit.Classic.e*AOrbit.Classic.e);
  AOrbit.Classic.Period        = 2*Pi*AOrbit.Classic.SemiMajorAxis*sqrt(AOrbit.Classic.SemiMajorAxis/mu);
  AOrbit.Classic.AverDegVel    = 2*Pi/AOrbit.Classic.Period;
  AOrbit.Classic.DegVel        = sqrt(mu*AOrbit.Classic.FocParameter)/(AOrbit.Classic.SCRange*AOrbit.Classic.SCRange);
  AOrbit.Classic.OrbVel        = sqrt((mu/AOrbit.Classic.FocParameter)*(1+pow(AOrbit.Classic.e,2)+2*AOrbit.Classic.e*cos(AOrbit.Classic.RealAnomaly*ToRad)));
  AOrbit.Classic.ApoVel        = sqrt(mu/AOrbit.Classic.FocParameter)*(1-AOrbit.Classic.e);
  AOrbit.Classic.PeriVel       = sqrt(mu/AOrbit.Classic.FocParameter)*(1+AOrbit.Classic.e);
  AOrbit.Classic.NormVel       = sqrt(mu/AOrbit.Classic.FocParameter)*(1+AOrbit.Classic.e*cos(AOrbit.Classic.RealAnomaly*ToRad));
  AOrbit.Classic.RadVectVel    = sqrt(mu/AOrbit.Classic.FocParameter)*AOrbit.Classic.e*sin(AOrbit.Classic.RealAnomaly*ToRad);
  AOrbit.Classic.EccentrAnom   = 2*atan(sqrt((1-AOrbit.Classic.e)/(1+AOrbit.Classic.e))*tan(AOrbit.Classic.RealAnomaly*ToRad/2))*ToGrad;
  AOrbit.Classic.AverAnomaly   = AOrbit.Classic.EccentrAnom-AOrbit.Classic.e*sin(AOrbit.Classic.EccentrAnom*ToRad);
  AOrbit.Classic.PerigeeMoment = AOrbit.Time-AOrbit.Classic.AverAnomaly/AOrbit.Classic.AverDegVel;
  AOrbit.Classic.OrbVelDeg     = acos(AOrbit.Classic.e*sin(AOrbit.Classic.RealAnomaly*ToRad)/sqrt(1+pow(AOrbit.Classic.e,2)+2*AOrbit.Classic.e*cos(AOrbit.Classic.RealAnomaly*ToRad)))*ToGrad;
  AOrbit.Classic.OscPeriod     = 2*Pi*AOrbit.Classic.SemiMajorAxis*sqrt(AOrbit.Classic.SemiMajorAxis/mu);
  AOrbit.Classic.DragonPeriod  = AOrbit.Classic.OscPeriod*(1+(3/2)*c20*pow(RE/AOrbit.Classic.FocParameter,2)*(2-(5/2)*pow(sin(AOrbit.Classic.Incl*ToRad),2))*pow((1-pow(AOrbit.Classic.e,2)),3/2)/pow(1+AOrbit.Classic.e*cos(AOrbit.Classic.RealAnomaly*ToRad),2)+pow(1+AOrbit.Classic.e*cos(AOrbit.Classic.AscNode*ToRad),3)/(1-pow(AOrbit.Classic.e,2)*(1-3*pow(sin(AOrbit.Classic.Incl*ToRad),2)*pow(sin(AOrbit.Classic.ArgLatitude*ToRad),2))));
  AOrbit.Classic.AnomPeriod    = AOrbit.Classic.OscPeriod*(1+(3/2)*c20*pow(RE/AOrbit.Classic.SemiMajorAxis,2)*pow((1+AOrbit.Classic.e*cos(AOrbit.Classic.RealAnomaly*ToRad))/(1-pow(AOrbit.Classic.e,2)),3));
  AOrbit.Classic.AverMotion    = 2*Pi/AOrbit.Classic.AnomPeriod;
};
//---
double KeplerEquiation(double e, double M)
{
  #define Eps 1e-9
  double Eold, Enew;

  Eold = M;
  while(fabs(Eold-Enew)<Eps)
  {
    Enew = M + e*sin(Eold);
    Eold = Enew;
  }
  return Enew;
}
//---
void SetTime(double ATime, TOrbit AOrbit)
{
  double AverAnomaly, EccentrAnom, RealAnomaly, ArgLatitude;

  AverAnomaly = AOrbit.Classic.DegVel * ( ATime - AOrbit.Classic.PerigeeMoment);
  EccentrAnom = KeplerEquation( AOrbit.Classic.e, AverAnomaly );    // здесь ошибка
  RealAnomaly = 2 * atan(sqrt((1-AOrbit.Classic.e)/(1+AOrbit.Classic.e))*tan(0.5*EccentrAnom));
  ArgLatitude = RealAnomaly + AOrbit.Classic.PeriRad;
  AOrbit.Time = ATime;
  AOrbit.Classic.AverAnomaly = AverAnomaly;
  AOrbit.Classic.EccentrAnom = EccentrAnom;
  AOrbit.Classic.RealAnomaly = RealAnomaly;
  AOrbit.Classic.ArgLatitude = ArgLatitude;

}
#pragma package(smart_init)
Morpho вне форума Ответить с цитированием
Старый 22.07.2012, 03:14   #2
p51x
Старожил
 
Регистрация: 15.02.2010
Сообщений: 15,833
По умолчанию

Код:
double KeplerEquiation(double e, double M)
Код:
KeplerEquation
Ачепятки они такие.....
p51x вне форума Ответить с цитированием
Старый 22.07.2012, 12:11   #3
Morpho
Пользователь
 
Регистрация: 22.07.2012
Сообщений: 29
По умолчанию

Не первый раз на эти грабли наступаю
Спасибо большое
Morpho вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Программа на СИ++, используя функции работы с файлами и функции <string.h> Аня Popova Фриланс 9 13.09.2010 15:52
Программа на Си.Функции champion92 Общие вопросы C/C++ 2 16.12.2009 21:19
Каким образом процессор обращается к портам Ivan_32 Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 1 30.07.2009 12:29