#1 20.12.08 14:28
[c++]помогите исправить ошибку
Есть код:
Код::
#include <math.h>
#include <conio.h>
#include <complex>
#include <iostream>
#define PI 3.1415926535897932385
using namespace std;
class Z
{
int Q;
float teta;
int k, l;
int a_teta[9];
void Init(void)
{
k = 1;
a_teta[0] = PI/2;
a_teta[1] = PI/3;
a_teta[2] = PI/4;
a_teta[3] = 1.884;
a_teta[4] = PI/2;
a_teta[5] = 1.345;
a_teta[6] = 1.1775;
a_teta[7] = 1.744;
a_teta[8] = PI/2;
teta=a_teta[l-2];
};
// âñïîìîãàòåëüíûå ôóíêöèè
float Gkl()
{
return sin((l-k) * teta) / (l*l - k*k);
};
public:
void SetQ( int inQ ) { Q = inQ; };
void SetL( int inL ) { l = inL; };
void Z11( complex<float> &z)
{
z = std::complex<float>(1.0, -Q/(k*PI)*(teta+(sin(2*k*teta))/(2*k)) );
};
void Z12( complex<float> &z)
{
z = std::complex<float>(0, -(Q/PI)*2*Gkl() );
};
void Z21( complex<float> &z)
{
z = std::complex<float>( 0, (-Q/PI)*2*Gkl() );
};
void Z22( complex<float> &z)
{
z = std::complex<float>( 1, -Q/(l*PI)*(teta-(sin(2*l*teta))/(2*l)) );
};
void Zkopt( complex<float> &z, complex<float> &z11, complex<float> &z12, complex<float> &z21)
{
z = std::complex<float>(sqrt(1+z12.imag()*z21.imag()), -z11.imag());
};
};
//---------------------------------------------------------------
int main(int argc, char* argv[])
{
// íàø êëàññ
Z z;
// ýëåìåíòû ìàòðèöû
complex<float> z11;
complex<float> z12;
complex<float> z21;
complex<float> z22;
complex<float> zkopt;
// çàäàíèå ïàðàìåòðîâ
z.SetQ( 100 );
int inL;
while ((inL<2) || (inL>10)) {
std::cout << "vvodim 2<l<10" << std:: endl;
std::cin >>inL;
z.SetL(inL);}
// âîçâðàò çíà÷åíèé
z.Z11( z11 );
z.Z12( z12 );
z.Z21( z21 );
z.Z22( z22 );
z.Zkopt( zkopt,z11,z12,z21);
// ðàñïå÷àòêà
std::cout << z11 << std::endl;
std::cout << z12 << std::endl;
std::cout << z21 << std::endl;
std::cout << z22 << std::endl;
std::cout << zkopt << std::endl;
// çàäåðæêà íà ýêðàíå
int c = getch();
return 0;
}
//---------------------------------------------------------------------------В ходе тестов, я выяснила что при расчете функций Gkl Z11 Z12 Z21 Z22 значения k и teta не беруться из Void Init... Объясните почему или помогите пожалуйста исправить ошибку, а то я чет совсем заучилась....%)
Offline
#4 20.12.08 17:14
Re: [c++]помогите исправить ошибку
помогаю:
Код::
z.Init();
Исправлено Kosh_Mar (20.12.08 17:14)
Offline
#5 20.12.08 17:15
Re: [c++]помогите исправить ошибку
попробуй void Init(void) заменить на Z()
Offline
#7 21.12.08 09:47
Re: [c++]помогите исправить ошибку
что-то с переменными путаница какая-то:
Код: C++:
int inL;переменная неопределена до входа в цикл... валится здесь, скорее всего:
Код: C++:
while ((inL<2) || (inL>10)) {
решение: определить переменную до входа в цикл
Исправлено (int)~set::Get(); (21.12.08 09:54)
Offline
#8 21.12.08 09:51
Re: [c++]помогите исправить ошибку
должно быть как-то так:
Код: C++:
class Z { int Q; float teta; int k, l; int a_teta[9]; float Gkl() { return sin((l-k) * teta) / (l*l - k*k); }; public: Z() //[b] собака порылась тут[/b] { k = 1; l = 3; a_teta[0] = PI/2; a_teta[1] = PI/3; a_teta[2] = PI/4; a_teta[3] = 1.884; a_teta[4] = PI/2; a_teta[5] = 1.345; a_teta[6] = 1.1775; a_teta[7] = 1.744; a_teta[8] = PI/2; teta=a_teta[l-2]; }; void SetQ( int inQ ) { Q = inQ; }; void SetL( int inL ) { l = inL; }; void Z11( complex<float> &z) { z = std::complex<float>(1.0, -Q/(k*PI)*(teta+(sin(2*k*teta))/(2*k)) ); }; void Z12( complex<float> &z) { z = std::complex<float>(0, -(Q/PI)*2*Gkl() ); }; void Z21( complex<float> &z) { z = std::complex<float>( 0, (-Q/PI)*2*Gkl() ); }; void Z22( complex<float> &z) { z = std::complex<float>( 1, -Q/(l*PI)*(teta-(sin(2*l*teta))/(2*l)) ); }; void Zkopt( complex<float> &z, complex<float> &z11, complex<float> &z12, complex<float> &z21) { z = std::complex<float>(sqrt(1+z12.imag()*z21.imag()), -z11.imag()); }; }; //--------------------------------------------------------------- int main(int argc, char* argv[]) { Z z; complex<float> z11; complex<float> z12; complex<float> z21; complex<float> z22; complex<float> zkopt; z.SetQ( 100 ); int inL = 1; // [b]и тут...[/b] while ((inL<2) || (inL>10)) { std::cout << "vvodim 2<l<10" << std:: endl; std::cin >>inL; z.SetL(inL);} z.Z11( z11 ); z.Z12( z12 ); z.Z21( z21 ); z.Z22( z22 ); z.Zkopt( zkopt,z11,z12,z21); std::cout << z11 << std::endl; std::cout << z12 << std::endl; std::cout << z21 << std::endl; std::cout << z22 << std::endl; std::cout << zkopt << std::endl; return 0; }
Исправлено (int)~set::Get(); (21.12.08 09:54)
Offline

