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

wielomian - klasa

VPS Starter Arubacloud
0 głosów
194 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 (154,780 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ź 438 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,173 wizyt
pytanie zadane 28 kwietnia 2018 w Python przez ala.kolarz Nowicjusz (120 p.)
0 głosów
1 odpowiedź 374 wizyt

92,453 zapytań

141,262 odpowiedzi

319,088 komentarzy

61,854 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.

Akademia Sekuraka

Akademia Sekuraka 2024 zapewnia dostęp do minimum 15 szkoleń online z bezpieczeństwa IT oraz dostęp także do materiałów z edycji Sekurak Academy z roku 2023!

Przy zakupie możecie skorzystać z kodu: pasja-akademia - użyjcie go w koszyku, a uzyskacie rabat -30% na bilety w wersji "Standard"! Więcej informacji na temat akademii 2024 znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...