Wielomian jako tekst

0

Witam potrzebuję zaimplementować fukcję zwracającą tekst jako składnik wielomianu

#include <string>
#include "wielomian.h"

void inicjujWielomian(struct Wielomian* wielomian, unsigned int stopien)
{
	wielomian->stopien = stopien;
	for (unsigned int i = 0; i <= stopien; ++i)
		wielomian->wspolczynniki[i] = 0;
}

void inicjujWielomian(struct Wielomian* wielomian, unsigned int stopien, int wspolczynniki[])
{
	wielomian->stopien = stopien;
	for (unsigned int i = 0; i <= stopien; ++i)
		wielomian->wspolczynniki[i] = wspolczynniki[i];
}

unsigned int stopienWielomianu(struct Wielomian* wielomian)
{
	return wielomian->stopien;
}

int wspolczynnikWielomianu(struct Wielomian* wielomian, unsigned int potega)
{
	if (potega <= wielomian->stopien)
		return wielomian->wspolczynniki[potega];
	else
		return 0;
}


std::string skladnikWielomiaNaTekst(unsigned int potega, int wspolczynnik)
{
	 zaimplementować fukcję zwracającą tekst reprezentujący składnik wielomianu (składnik to np. 2x^3)

}
0

I gdzie dokładnie masz problem? http://www.cplusplus.com/reference/cstdlib/itoa/

2

Zdecyduj się C albo C++.
Obecnie masz mieszankę C i C++ co jest bardzo niezdrowe.

0

@Shalom:
std::string skladnikWielomiaNaTekst(unsigned int potega, int wspolczynnik)
{
zaimplementować fukcję zwracającą tekst reprezentujący składnik wielomianu (składnik to np. 2x^3)

1

Moje oczy krwawią, jak w C++ widzą

void inicjujWielomian(struct Wielomian* wielomian, unsigned int stopien)

zamiast porządnego konstruktora

Wielomian::Wielomian(unsigned int stopien)

Zastrzegając, że mina może leżeć w definicji struktury, której nie podajesz.
BTW słowo struct od dawna nie wymaga powtrzania

Co do meritum.
Jaki masz problem z wydrukowaniem liczby, znaczka nawias czy daszek?

0

@AnyKtokolwiek: chodzi o to żeby po wpisaniu wielomianu typu 4x^3+2x^2+2x-2 i dodaniu do niego podobnego wielomianu program wiedział co to są te X i przeliczał zgodnie z nimi

1
std::ostream& skladnikWielomiaDoStrumienia(std::ostream& out, unsigned int potega, int wspolczynnik)
{
     if (wspolczynnik) out << int wspolczynnik;
     if (potega > 0) {
         out << 'x';
         if (potega > 1) {
              out << '^' << potega;
         }
     }
    return out;
}
0

@AnyKtokolwiek:
std::string skladnikWielomiaNaTekst(unsigned int potega, int wspolczynnik)
{
zaimplementować fukcję zwracającą tekst reprezentujący składnik wielomianu (składnik to np. 2x^3) <-----

}

0

wielomian.zip

generalnie tu jest cały kod

1

Kilka plusów:

  • piszesz testy (duży plus) :) :)
  • API nie jest najgorsze, gdyby to było C

Wada jest taka, że to jednak ma być C++, więc powinieneś korzystać z funkcjonalności C++

class Polynomial
{
    std::vector<double> p;
public:
    Polynomial(unsigend degree);
    Polynomial(std::initializer_list<double> factors);
    unsigend degree() const;
    double getCoeff(unsigned power) const;
    std::ostream& userPrint(std::ostream& out) const;
};

Na dodatek piszesz po polsku :(.

0
Kamlan napisał(a):

wielomian.zip

generalnie tu jest cały kod

Obecnie wiodące zagadnienie podajesz w trzech różniących się wersjach. Doczekamy się na TREŚĆ zadania?

0

@AnyKtokolwiek: to co wysłałem dotyczy wielomianu są tam również testy , w miejscach gdzie jest napisane komentarzem // TODO muszę to zrobić

0

@MarekR22: uczę się na studiach dlatego może to nie być do końca profesjonalne jeszcze

0
Kamlan napisał(a):

@MarekR22: uczę się na studiach dlatego może to nie być do końca profesjonalne jeszcze

zdajemy sobie z tego sprawę.
To, że twój wykładowca nakłania was do pisania testów, jest godne pochwały i bez wątpienia słuszny kierunek.
Szkoda tylko, że do testów jest użyte CppUnitTestFramework, a nie gtest (powszechne w użytku) lub catch2 (nabiera rozpędu, bo jest bardzo wygodne).

0

@MarekR22: zawsze mogę zwrócić na to uwagę :) dzięki za zainteresowanie

0

@Kamlan:

to co wysłałem dotyczy wielomianu są tam również testy , w miejscach gdzie jest napisane komentarzem // TODO muszę to zrobić

W testach jest coś takiego:

			struct Wielomian w;
			int wspolczynniki[] = { 2, 4, -6, 8 };
			inicjujWielomian(&w, 3, wspolczynniki );

			std::string wynik = "8x^3+(-6)x^2+4x+2";
			Assert::AreEqual( wynik, wielomiaNaTekst(&w));

To co innego niż w poście.

1 użytkowników online, w tym zalogowanych: 0, gości: 1