Официальный сайт студ.городка НГТУ
Программирование и БД » [c++]помогите исправить ошибку 

#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

#2  20.12.08 15:59

Re: [c++]помогите исправить ошибку

еще бы вызывать Init().

Offline

#3  20.12.08 16:15

Re: [c++]помогите исправить ошибку

sdassa, ну я впринципе догадываюсь что ее вызвать как-то надо, хотя.... В общем я не знаю....помогите кто-нибудь..оч надо!!!

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

#6  21.12.08 00:18

Re: [c++]помогите исправить ошибку

Kosh_Mar, если б так все просто было(
(int)~set::Get();,  это тоже не помогает...

еще варианты? помогите...очень надо сдать...

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

#9  21.12.08 14:50

Re: [c++]помогите исправить ошибку

(int)~set::Get(); написал(а):

переменная неопределена до входа в цикл... валится здесь, скорее всего:

навряд ли. слишкам мал диапозон. скорее всего условие срабатывает

Offline

Программирование и БД » [c++]помогите исправить ошибку 

ФутЕр:)

© Hostel Web Group, 2002-2025.   Сообщить об ошибке

Сгенерировано за 0.062 сек.
Выполнено 14 запросов.