Премини към съдържанието
Форумът в приложение

По-лесно сърфиране. Научи повече.

Kaldata.com - Форуми

Приложение на форума на цял екран с push известия, значки и други.

За да инсталирате това приложение на iOS и iPadOS
  1. Докоснете Иконата за споделяне в Safari
  2. Превъртете менюто и докоснете Добавяне към началния екран.
  3. Докоснете Добавяне в горния десен ъгъл.
За да инсталирате това приложение на Android
  1. Докоснете менюто с 3 точки (⋮) в горния десен ъгъл на браузъра.
  2. Докоснете Добавяне към началния екран или Инсталиране на приложение.
  3. Потвърдете, като докоснете Инсталиране.

Добре дошли!

Добре дошли в нашите форуми, пълни с полезна информация. Имате проблем с компютъра или телефона си? Публикувайте нова тема и ще намерите решение на всичките си проблеми. Общувайте свободно и открийте безброй нови приятели.

Моля, регистрирайте се за да публикувате тема и да получите пълен достъп до всички функции.

 

Помощ за задача на C++

Featured Replies

Здравейте! Имам следния проблем.Имам да правя курсов проект по ООП, който трябва да предам този четвъртък, но задачата ми дава грешки, които не мога да отстраня и се надявам някой да ми помогне..Благодаря ВИ предварително!

#include<iostream>#include<string>#include<fstream>#include<iterator>#include<list>#include<algorithm>#include<functional>#include<numeric>#include<cmath>#include<math.h>using namespace std; class CDigit{	private:	 int m_iDigit; 	public: 	 int GetDigit() const;	 void SetDigit(const int val);	 virtual void Output(ostream& toStream)	 {		 toStream<<GetDigit()<<endl; }};int CDigit::GetDigit() const{	return m_iDigit; }void CDigit::SetDigit(const int val){ 	m_iDigit=val; }class CExpected : virtual public CDigit{private:	int m_iExpFreq;public:	CExpected();	CExpected(const int val);	CExpected( const CExpected &obj);    int GetExpected() const;	void SetExpected( const int val);	void Output(ostream& toStream) const	{		toStream<<GetExpected()<<endl; }	virtual void less(const CDigit* pDigit)  const	{		if((pDigit ->GetDigit()) > m_iExpFreq) cout<<"1>2"<<endl;		else if((pDigit ->GetDigit()) < m_iExpFreq) cout<<"1<2"<<endl;		else if((pDigit ->GetDigit()) == m_iExpFreq) cout<<"1=2"<<endl;	}		friend ostream& operator<< (ostream& toStream, const CExpected &obj);	friend istream& operator>> (istream& fromStream, CExpected &obj);	int operator = (const CExpected &ravno);	bool operator == (const CExpected &ednakvo) const;};CExpected::CExpected(){	m_iExpFreq = 0; }CExpected::CExpected(const int val){	m_iExpFreq = val; }CExpected::CExpected( const CExpected &obj){	m_iExpFreq = obj.GetExpected();  }int CExpected::GetExpected() const{	return m_iExpFreq; }void CExpected::SetExpected( const int val){	m_iExpFreq = val; }ostream& operator<< (ostream& toStream, const CExpected &obj){	toStream<<obj.GetExpected()<<endl;	return toStream; }istream& operator>> (istream& fromStream, CExpected &obj){	int val;	fromStream>>val;	obj.SetExpected(val);	return fromStream;  }int CExpected::operator = (const CExpected &ravno){	m_iExpFreq = ravno.m_iExpFreq;	return 0; }bool CExpected::operator == (const CExpected &ednakvo) const{	return (m_iExpFreq == ednakvo.GetExpected()); }class CObserved : virtual public CDigit{private:	int m_iObsFreq;      public:	CObserved();	CObserved(const int val);	CObserved( const CObserved &);	int GetObserved(void) const;	void SetObserved( const int val);	void Output(ostream& toStream) const	{		toStream<<GetObserved()<<endl;  }	void  less(CDigit* pDigit) const	{		if((pDigit ->GetDigit()) > m_iObsFreq) cout<<"1>2"<<endl;		if((pDigit ->GetDigit()) < m_iObsFreq) cout<<"1<2"<<endl;		if((pDigit ->GetDigit()) == m_iObsFreq) cout<<"1==2"<<endl;	}	friend ostream& operator<< (ostream& toStream, const CObserved &obj);	friend istream& operator>> (istream& fromStream, CObserved &obj);	int operator = (const CObserved &ravno);	bool operator == (const CObserved &ednakvo) const;};CObserved::CObserved(){	m_iObsFreq = 0; }CObserved::CObserved(const int val){	m_iObsFreq = val; }CObserved::CObserved( const CObserved &obj){	m_iObsFreq = obj.GetObserved(); }int CObserved::GetObserved(void) const{	return m_iObsFreq; }void CObserved::SetObserved( const int val){	m_iObsFreq = val; }ostream& operator<< (ostream& toStream, const CObserved &obj){	toStream<<obj.GetObserved()<<endl;	return toStream; }istream& operator>> (istream& fromStream, CObserved &obj){	int val;	fromStream>>val;	obj.SetObserved(val);	return fromStream;      }int CObserved::operator = (const CObserved &ravno){	m_iObsFreq = ravno.GetObserved();	return 0; }bool CObserved::operator == (const CObserved &ednakvo) const{	return(m_iObsFreq == ednakvo.GetObserved());  }class CGoodnessOfFit : public CExpected, public CObserved{private: 	list<CDigit*> m_lData;  	list<CDigit*> m_lObs;  	int m_iTotalFreqDiff;   double m_dChiCalc;   double m_dChiAlpha; public:	CGoodnessOfFit(const char* strFileNameExp, const char* strFileNameObs);	bool calcTotalFreqDiff() ;        	void SetChiAlpha(double ChiValue) ;     	bool CalcChi();	bool CalcGofF() const ;   	void setData( const int iDigit, const int iExpected, const int iObserved);	void getData( double& dChiCalc, double& dChiAlpha) const;	void writeToCout();                          	bool isFoundExpNumber( const int& iToFind );       	int GetTotalFreqDiff(); 	friend istream& operator>> (istream& fromStream, CDigit* &obj);};CGoodnessOfFit::CGoodnessOfFit(const char* strFileNameExp, const char* strFileNameObs){	ifstream iStream(strFileNameExp);	if(iStream.good())	   {		copy (istream_iterator<CDigit*>(iStream), istream_iterator<CDigit*> (),          			back_inserter(m_lData) );  	}	ifstream iStream1(strFileNameObs);	if(iStream1.good())	   {		copy (istream_iterator<CDigit*>(iStream), istream_iterator<CDigit*> (),          			back_inserter(m_lObs) );  	}}bool CGoodnessOfFit::calcTotalFreqDiff(){	m_iTotalFreqDiff = GetTotalFreqDiff();	return true;}double sbor(double x, double y){	return ( x + y );  }bool CGoodnessOfFit::CalcChi(){	double Oi = accumulate(m_lObs.begin(), m_lObs.end(),Oi,sbor);	double Ei = accumulate(m_lData.begin(), m_lData.end(),Ei,sbor);	 m_dChiCalc = ((Oi-Ei)/Ei) ; 	if(m_dChiCalc) return true;	else return false;}void CGoodnessOfFit::SetChiAlpha(double ChiValue){	m_dChiAlpha = ChiValue;  }bool CGoodnessOfFit::CalcGofF()	const{	if( m_dChiCalc < m_dChiAlpha ) return true;	   else return false;}void CGoodnessOfFit::setData( const int iDigit, const int iExpected, const int iObserved){	SetDigit(iDigit);	SetExpected(iExpected);	SetObserved(iObserved);} void CGoodnessOfFit::getData( double& dChiCalc, double& dChiAlpha) const{	cout<<dChiCalc<<" - "<<dChiAlpha<<endl;}void CGoodnessOfFit::writeToCout(){	cout<<m_iTotalFreqDiff<<endl;	cout<<calcTotalFreqDiff()<<endl;	cout<<CalcChi()<<endl;	cout<<CalcGofF()<<endl;}class Search {private:	 int iToFind_val;public:   Search( int val) {    iToFind_val = val;  }    bool operator () ( CDigit* &pointer ) const	{      return (pointer -> GetDigit() == iToFind_val) ;      }  }; bool CGoodnessOfFit::isFoundExpNumber(const int& iToFind ) {	list<CDigit*>::iterator where;	where = find_if(m_lData.begin(), m_lData.end(), Search(iToFind));	return true;}	     int CGoodnessOfFit::GetTotalFreqDiff(){	int Exp;	int Obs;	Exp = accumulate(m_lData.begin(), m_lData.end(),Exp, sbor) ;	Obs = accumulate(m_lObs.begin(), m_lObs.end(),Obs, sbor);	return( Exp - Obs);  }istream& operator>> (istream& toStream, CDigit* &obj){	toStream>>obj ;	return toStream;}int main(){	cout<<"works"<<endl;	return 0;}

Грешките които ми излизат са следните:

1>------ Build started: Project: dsad, Configuration: Debug Win32 ------1>Build started 03-Jun-13 18:45:55.1>InitializeBuildStatus:1>  Touching "Debugdsad.unsuccessfulbuild".1>ClCompile:1>  main.cpp1>c:program filesmicrosoft visual studio 10.0vcincludenumeric(36): error C2664: 'double (double,double)' : cannot convert parameter 2 from 'CDigit *' to 'double'1>          There is no context in which this conversion is possible1>          c:program filesmicrosoft visual studio 10.0vcincludenumeric(47) : see reference to function template instantiation '_Ty std::_Accumulate<std::_List_unchecked_iterator<_Mylist>,_Ty,double(__cdecl *)(double,double)>(_InIt,_InIt,_Ty,_Fn2)' being compiled1>          with1>          [1>              _Ty=double,1>              _Mylist=std::_List_val<CDigit *,std::allocator<CDigit *>>,1>              _InIt=std::_List_unchecked_iterator<std::_List_val<CDigit *,std::allocator<CDigit *>>>,1>              _Fn2=double (__cdecl *)(double,double)1>          ]1>          c:usersgalingospodinovdesktop3105133dsaddsadmain.cpp(307) : see reference to function template instantiation '_Ty std::accumulate<std::_List_iterator<_Mylist>,double,double(__cdecl *)(double,double)>(_InIt,_InIt,_Ty,_Fn2)' being compiled1>          with1>          [1>              _Ty=double,1>              _Mylist=std::_List_val<CDigit *,std::allocator<CDigit *>>,1>              _InIt=std::_List_iterator<std::_List_val<CDigit *,std::allocator<CDigit *>>>,1>              _Fn2=double (__cdecl *)(double,double)1>          ]1>c:program filesmicrosoft visual studio 10.0vcincludenumeric(36): error C2664: 'double (double,double)' : cannot convert parameter 1 from 'CDigit *' to 'double'1>          There is no context in which this conversion is possible1>c:program filesmicrosoft visual studio 10.0vcincludenumeric(36): error C2664: 'double (double,double)' : cannot convert parameter 2 from 'CDigit *' to 'double'1>          There is no context in which this conversion is possible1>          c:program filesmicrosoft visual studio 10.0vcincludenumeric(47) : see reference to function template instantiation '_Ty std::_Accumulate<std::_List_unchecked_iterator<_Mylist>,_Ty,double(__cdecl *)(double,double)>(_InIt,_InIt,_Ty,_Fn2)' being compiled1>          with1>          [1>              _Ty=int,1>              _Mylist=std::_List_val<CDigit *,std::allocator<CDigit *>>,1>              _InIt=std::_List_unchecked_iterator<std::_List_val<CDigit *,std::allocator<CDigit *>>>,1>              _Fn2=double (__cdecl *)(double,double)1>          ]1>          c:usersgalingospodinovdesktop3105133dsaddsadmain.cpp(398) : see reference to function template instantiation '_Ty std::accumulate<std::_List_iterator<_Mylist>,int,double(__cdecl *)(double,double)>(_InIt,_InIt,_Ty,_Fn2)' being compiled1>          with1>          [1>              _Ty=int,1>              _Mylist=std::_List_val<CDigit *,std::allocator<CDigit *>>,1>              _InIt=std::_List_iterator<std::_List_val<CDigit *,std::allocator<CDigit *>>>,1>              _Fn2=double (__cdecl *)(double,double)1>          ]1>c:program filesmicrosoft visual studio 10.0vcincludenumeric(36): error C2664: 'double (double,double)' : cannot convert parameter 1 from 'CDigit *' to 'double'1>          There is no context in which this conversion is possible1>c:program filesmicrosoft visual studio 10.0vcincludenumeric(36): warning C4244: '=' : conversion from 'double' to 'int', possible loss of data1>1>Build FAILED.1>

Привет !   Към поста съм приложил промените и коментарите по тях. Докарах кода да се компилира, но не съм правил тестване с данни или дебъгване.    Накратко - всичките грешки са породени от неправилно използването на accumulate метода. Не са подадени правилните типове параметри, както и правилните параметри за присвояване на резултата от изпълнението. Освен това, за правилна работа на приложението (и по-специално accumulate), трябва да се предефинира оператора за събиране - той ще се използва от функцията sbor. Допълнително, според компилатора, има потенциален проблем предефинираният оператор за input stream

istream& operator>> (istream& toStream, CDigit* &obj)

  да докара stack overflow - това за съжаление няма да имам време да го огледам и ще трябва Вие да го погледнете.

 

Надявам се, че това ще Ви помогне да продължите по-напред. Успех !

 

Sample.cpp.txt

  • Автор

Много ти Благодаря за помоща! Не искам да съм нахален, но ако може да ми кажеш как да я тествам с данни ще ми е от голяма помощ. БЛАГОДАРЯ ПРЕДВАРИТЕЛНО! Лек ден !

  • Автор

Здравейте отново! Разбрах как мога да си тествам програмата и нейните функции,но е нужно да променя някои работи, но срещам затруднение за това ще се радвам, ако някой ми помогне и ще му бъда благодарен. Ето промените които направих: Създадох си файл и записах в него числа във вида: 0 24 25   

CGoodnessOfFit obj1("name.txt"); 

След това трябва да изведа в конзолата тези числа в същия вид <digit,exp,obs> (0 24 25) с функцията writeToCount(), която се наложи да променя   

list<CDigit*>::iterator p = m_lData.begin();while(p!=m_lData.end()){cout<<*p<<" " ;p++;}

По същия начин и за втория лист. Затруднението, което срещам е в това, че не ми излизат данните от файла...За това сметнах, че е нужно да се промени и кода на......И тук е проблема, че не знам как да го променя... Някой ако има желание, нека помогне ще му бъда много благодарен.... Приятен ден!!!

CGoodnessOfFit::CGoodnessOfFit(const char* strFileNameExp, const char* strFileNameObs){1	ifstream iStream(strFileNameExp);	if(iStream.good())	{		copy (istream_iterator<CDigit*>(iStream), istream_iterator<CDigit*> (),          			back_inserter(m_lData) );  	}	ifstream iStream1(strFileNameObs);	if(iStream1.good())	{		copy (istream_iterator<CDigit*>(iStream), istream_iterator<CDigit*> (),          			back_inserter(m_lObs) );  

Архивирана тема

Темата е твърде стара и е архивирана. Не можете да добавяте нови отговори в нея, но винаги можете да публикувате нова тема, в която да продължи дискусията. Регистрирайте се или влезте във вашия профил за да публикувате нова тема.

Разглеждащи това в момента 0

  • Няма регистрирани потребители разглеждащи тази страница.

Дарение

  • Подкрепи съществуването на форума - направи дарение
    32%
    Дарени 315 € от нужните 1 000 €

Бюлетин

Получавайте известие, когато има важна промяна или новина свързана с форума.

Профил

Навигация

Търсене

Търсене

Конфигуриране на push известия в браузъра

Chrome (Android)
  1. Докоснете иконата на катинар до адресната лента.
  2. Докоснете Разрешения → Известия.
  3. Променете предпочитанията си.
Chrome (Desktop)
  1. Кликнете върху иконата на катинар в адресната лента.
  2. Изберете Настройки на сайта.
  3. Намерете Известия и коригирайте предпочитанията си.