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

wielomian - klasa

Aruba Cloud VPS - 50% taniej przez 3 miesiące!
0 głosów
333 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ź 583 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,444 wizyt
pytanie zadane 28 kwietnia 2018 w Python przez ala.kolarz Nowicjusz (120 p.)
0 głosów
1 odpowiedź 529 wizyt

93,187 zapytań

142,201 odpowiedzi

322,012 komentarzy

62,514 pasjonatów

Advent of Code 2024

Top 15 użytkowników

  1. 2127p. - dia-Chann
  2. 2092p. - Łukasz Piwowar
  3. 2079p. - Łukasz Eckert
  4. 2037p. - Tomasz Bielak
  5. 2006p. - rucin93
  6. 2006p. - Michal Drewniak
  7. 2005p. - Łukasz Siedlecki
  8. 1964p. - CC PL
  9. 1946p. - Adrian Wieprzkowicz
  10. 1901p. - Mikbac
  11. 1744p. - rafalszastok
  12. 1734p. - Anonim 3619784
  13. 1586p. - Dawid128
  14. 1520p. - Marcin Putra
  15. 1480p. - ssynowiec
Szczegóły i pełne wyniki

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

Wprowadzenie do ITsec, tom 1 Wprowadzenie do ITsec, tom 2

Można już zamawiać dwa tomy książek o ITsec pt. "Wprowadzenie do bezpieczeństwa IT" - mamy dla Was kod: pasja (użyjcie go w koszyku), dzięki któremu uzyskamy aż 15% zniżki! Dziękujemy ekipie Sekuraka za fajny rabat dla naszej Społeczności!

...