Опытный
 
Профиль
Группа: Участник
Сообщений: 740
Регистрация: 12.1.2008
Где: Germany
Репутация: 1 Всего: 1
|
Программа, "+" "-" полиномы. Вот, исходник, все работает, но! Когда со строчки 50 залетает а строчку 8 *cpp тогда пишет, что не может выделить память. Что может это быть? main | Код | using namespace std; #include "Polynom.h" #include "Image.h" #include "BmpWrite.h" #include "hline.h" #include "vline.h" #include <fstream>
#if OPTIONAL void optinal(void); #endif
int main() { cout << "OOP-Praktikum, Versuch 4" << endl; // // Polynome spezifizieren, verknuepfen und ausgeben // Polynom P(X(4) - 3.0*X(3) + 2.0*X(5) + 1.0); cout << "P: " << P << endl; Polynom Q; Q = 2.0*X(2) - 3.0*X(1) + 7.0; cout << "Q: " << Q << endl; cout << "P+Q: " << P+Q << endl; Polynom PmQ(P-Q); cout << "P-Q: " << PmQ << endl; Polynom A(2.0*X(2)+3.0*X(1) + 4.0); cout << "A: " << A << endl; //Polynom B = X(1)+1.0; //cout << "B: " << B << endl; cout << "P-P: " << P-P << endl; cout << "P(0,75)=" << P(0.75) << endl;
// // Koeffizienten eines Polynoms ermitteln // Polynom C = P+A; cout << "Koeffizienten von C=P+A:"; for (int i=C;i>=0;i--) { cout << " " << C[i]; } cout << endl;
// // Polynome in ein Image-Objekt einzeichnen // /*MY COOMENT BEREICH Image I(400,300); HLine(20, 150, 360, RGB_Pixel(0,0,255)).draw(I); VLine(200, 20, 260, RGB_Pixel(0,0,255)).draw(I); // Im Intervall von x={-3..3} und y={-20..20} zeichnen und dies im // Pixelbereich x_i={20..380} und y_i={20..280} darstellen P.draw(I, 20,380,20,280, -3.0,3.0,-20.0,20.0, RGB_Pixel(0,255,255)); Q.draw(I, 20,380,20,280, -3.0,3.0,-20.0,20.0, RGB_Pixel(255,255,0));
// // Image-Objekt in BMP-Datei ausgeben // cout << "Datei P4.bmp wird geschrieben" << endl; BmpWrite("P4.bmp",I); * */
#if OPTIONAL optinal(); #endif
return 0; }
|
*.h | Код |
#include <iostream> #include <cmath> #include "Image.h" using namespace std;
#ifndef OPTIONAL #define OPTIONAL 0 #endif
class Polynom { private: int Grad; double *K; public: Polynom (const Polynom &p); // Kopierkonstruktor Polynom (const int g=0,const double v=0.0); // Konstruktor f�r Polynom mit Grad g ~Polynom(); Polynom operator= (const Polynom& r); // Zuweisungsoperator (tiefe Kopie) operator int () const; // Konversion: Grad des Polynoms auslesen double operator[] (const int i) const; // Zugriff auf die Koeffizienten double operator() (const double &x) const; // Berechnung des Funktionswerts // Operatoren und Funktionen Polynom operator+ (const Polynom &r) const; // Polynomaddition Polynom operator- (const Polynom &r) const; // Polynomsubtraktion #if OPTIONAL Polynom operator* (const Polynom &r) const; // Polynommultiplikation (optional) Polynom operator/ (const Polynom &r) const; // Polynomdivision (optional) Polynom operator% (const Polynom &r) const; // Polynom-Modulo-Operation (optional) Polynom Ableitung() const; // Ableitung des Polynoms bilden (optional) #endif // Hilfsmethoden zur Polynomeingabe Polynom operator+ (const double &r) const; Polynom operator- (const double &r) const; // Zeichnen eines Polynoms in ein Image-Objekt // (siehe Aufgabe 4) /* MY COMMENT BEREICH void draw( Image &I, int i_xs, int i_xe, int i_ys, int i_ye, double xs, double xe, double ys, double ye, RGB_Pixel color ); */ };
// Ueberladener Ausgabeoperator ostream& operator << (ostream& o,const Polynom& P);
// Hilfsklasse zur Polynom-Eingabe class X { private: int power; public: X(const int i):power(i) {} int get_power () const { return power; } operator Polynom () const { return Polynom(power,1.0);} Polynom operator+ (const Polynom &r) const { return Polynom(*this) + r; } Polynom operator- (const Polynom &r) const { return Polynom(*this) - r; } Polynom operator+ (const double &r) const { return Polynom(*this) + r; } Polynom operator- (const double &r) const { return Polynom(*this) - r; } };
// Hilfsfunktion zur Polynomeingabe inline Polynom operator *(const double l, const X &r) {return Polynom(r.get_power(),l);}
|
*.cpp | Код | #include "Polynom.h"
using namespace std;
//-----------------------------------------------------------------------------
Polynom::Polynom(const Polynom& p) { *this = p; }
//-----------------------------------------------------------------------------
Polynom Polynom::operator =(const Polynom& r) {
delete [] K; (*this).Grad = r.Grad; K = new double [(*this).Grad + 1]; for (int i = 0; i <= Grad; ++i) K[i] = r.K[i];
return *this; }
//-----------------------------------------------------------------------------
Polynom::Polynom(const int g, const double v){
Grad=g; K=new double [Grad+1];
for(int i=0;i<Grad;++i) K[i]=0.0;
K[Grad]=v; }
//-----------------------------------------------------------------------------
Polynom Polynom::operator -(const Polynom& r) const {
if ((*this).Grad >= r.Grad) { Polynom temp(Grad); for (int i = r.Grad; i < Grad; ++i) temp.K[i] = (*this).K[i]; for (int i = 0; i <= r.Grad; ++i) temp.K[i] = (*this).K[i] - r.K[i]; //Polynom tt=temp;
return temp; } else { Polynom temp(r.Grad); for (int i = (*this).Grad; i <= r.Grad; ++i) temp.K[i] = r.K[i]; for (int i = 0; i <= (*this).Grad; ++i) temp.K[i] = (*this).K[i] - r.K[i];
return Polynom(temp); } }
//-----------------------------------------------------------------------------
Polynom Polynom::operator +(const double& r) const {
Polynom temp(*this); temp.K[0] += r;
return temp; }
//-----------------------------------------------------------------------------
Polynom Polynom::operator -(const double& r) const {
Polynom temp(*this); temp.K[0] -= r;
return temp; }
//-----------------------------------------------------------------------------
Polynom Polynom::operator +(const Polynom& r) const{
if ((*this).Grad >= r.Grad) { Polynom temp(Grad); for (int i = r.Grad; i <= Grad; ++i) temp.K[i] = (*this).K[i]; for (int i = 0; i <= r.Grad; ++i) temp.K[i] = (*this).K[i] + r.K[i];
return temp; } else { Polynom temp(r.Grad); for (int i = (*this).Grad; i <= r.Grad; ++i) temp.K[i] = r.K[i]; for (int i = 0; i <= (*this).Grad; ++i) temp.K[i] = (*this).K[i] + r.K[i];
return temp; } }
//-----------------------------------------------------------------------------
double Polynom::operator ()(const double& x) const{
double result=0.0;
for(int i=0;i<(*this).Grad;++i) result+=(*this).K[i]*pow(x,i);
result+=(*this).K[0];
return result; }
//-----------------------------------------------------------------------------
Polynom::operator int() const{ return Grad; }
//-----------------------------------------------------------------------------
double Polynom::operator [](const int i) const{
return (*this).K[i]; }
//-----------------------------------------------------------------------------
Polynom::~Polynom(){ delete [] K; }
//-----------------------------------------------------------------------------
ostream & operator<<(ostream& o, const Polynom& P) { o << '('; for (int i = static_cast<int> (P); i>0; --i){ if(i!=static_cast<int>(P) && P[i]>=0) o<<'+'; o << P[i] << "*X(" << i << ')'; }
if(P > 0 && P[0] >=0) o<<'+'; o << P[0] << ')';
return o; }
|
ПАСИБ!!! Это сообщение отредактировал(а) Killer_13 - 6.11.2010, 16:21
|