• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

wielomian - klasa

0 głosów
477 wizyt
pytanie zadane 23 listopada 2020 w C i C++ przez ResCrove Obywatel (1,700 p.)

Moim zadaniem jest utworzenie klasy wielomian tak aby wykonało się wszystko z maina bez jego edytowania.

Oto main:

#include <iostream>
using namespace std;
#include "vector.h"


int main(void)
{
  poly P1;				//Declare object representing polynomial P1
  P1[3] = 2; P1[1] = 3.6; P1[0] = 7;	//Specify coefficients of P1 = 2x^3 + 3.6x + 7
  
  poly P2 = 5;				//Declare object representing polynomial P2 = 5
  P2[1] = 3; P2[2] = 6; P2[4] = 1;	//Specify additional coefficients of P2 = x^4 + 6x^2 + 3x + 5
  
  cout << "Polynomial P1: " << P1 << endl;	//Print P1 	
  cout << "Polynomial P2: " << P2 << endl;	//Print P2
  
  /*poly P3 = P1 + P2;						//Add P1 and P2 	
  cout << "Sum of polynomials P1 and P2: " << P3 << endl;	//Print sum of P1 and P2
  
  P3 = P1 * P2;							//Multiply P1 by P2 	
  cout << "Product of polynomials P1 and P2: " << P3 << endl;	//Print product of P1 and P2

  P3 = 2 * P1;							//Multiply P1 by 2 	
  cout << "Polynomial P1 multiplied by 2: " << P3 << endl;	//Print product of P1 and 2
  
  double val = P1(3.14);						//Calculate the value of P1 at point 3.14
  cout << "Value of polynomial P1 at point 3.14: " << val << endl;	//Print the value of P1 at point 3.14*/
};

A to zrobiona przeze mnie klasa:

#ifndef __POLY_H__
#define __POLY_H__

#include <iostream>
using namespace std;

class poly
{
    double *dane;
    unsigned int size;
public:
    double &operator[](unsigned int index){
		if (index>=size){
			double *tmp = new double[sizeof(double)*(index+1)];
			if (tmp==NULL) {
				throw bad_alloc();
			}
			size=index+1;
			dane=tmp;
		}
		return *(dane+index);
	}
    poly(double number = 0)
    {
		dane = new double[sizeof(double)];
		if (dane==NULL){
			throw bad_alloc();
		}
		*dane=number;
    }
    ~poly ()
    {
        delete [] dane;
    }

    poly(const poly & s) //konstruktor kopiujący
    {
        dane = new double[s.size];
        size = s.size;
        for (unsigned i = 0; i < size; i++)
        dane[i] = s.dane[i];
    }
    poly & operator= (const poly & s) //operator przypisania
    {
        if (this == &s)
        {
            return *this;
        }
        delete [] dane;
        dane = new double[s.size];
        size = s.size;
        for (unsigned i = 0; i < size; i++)
        {
            dane[i] = s.dane[i];
        }
        return *this;
    }
    friend ostream & operator<< (ostream & o, poly & v)
    {
        o << "f(x) = ";
        for (unsigned i = v.size; i > 0; i--)
        {
	        o << v[i] << "x^ + " << i;
        }
        return o;
    }
};
#endif

Nie wiem co robię nie tak, jakieś pomysły?

1 odpowiedź

+2 głosów
odpowiedź 23 listopada 2020 przez tangarr Mędrzec (155,140 p.)
wybrane 23 listopada 2020 przez ResCrove
 
Najlepsza

Widzę, że kolega przeszedł zbyt mocno językiem C.

dane = new double[sizeof(double)];

Jak się nie mylę to typ double ma długość 8 bajtów.
Właśnie zadeklarowałeś ośmioelementową tablicę double.

Zmienna size jest niezainicjowana.

if (dane==NULL){
    throw bad_alloc();
}

To też jest bez sensu. W przypadku błędu alokacji operator new rzuca wyjątek bad_alloc, więc ten kod nie zostanie wykonany. Jeżeli chcesz użyć operatora new, który nie rzuca wyjątku musisz go użyć w następujący sposób

double* p = new (std::nothrow) double [rozmiar];

Podczas rozszerzania tablicy masz wyciek pamięci. Alokujesz nową tablicę, nie kopiujesz do niej elementów ze starej i nie zwalniasz pamięci starej tablicy.

Podobne pytania

0 głosów
1 odpowiedź 672 wizyt
pytanie zadane 12 listopada 2019 w C i C++ przez Mała Mi Początkujący (270 p.)
0 głosów
0 odpowiedzi 1,584 wizyt
pytanie zadane 28 kwietnia 2018 w Python przez ala.kolarz Nowicjusz (120 p.)
0 głosów
1 odpowiedź 658 wizyt

93,605 zapytań

142,529 odpowiedzi

322,999 komentarzy

63,093 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj

Kursy INF.02 i INF.03
...