Strona 1 z 1
[C++] Wielomiany.
: 18 lis 2016, o 22:33
autor: mich12
Witajcie, czy ktoś mógłby dostrzec błąd w kodzie? Chodzi o to że np. dla danych wejściowych:
tablica pierwszego wielomianu: 1 2 3
tablica drugiego wielomianu: 1 2 3 4 5 6 7 8 9 10
otrzymuję sumę:
tablica trzeciego wielomianu:
2 4 6 4 15 6 7 8 19 10
Wniosek jest taki, że przy niektórych wyrazach coś się nie zgadza... Czy ktoś widzi błąd?
Kod: Zaznacz cały
#include <iostream>
using namespace std;
int main ()
{
int FirstFactor;
int SecondFactor;
cout << "Podaj stopien pierwszego wielomianu:" << endl;
cin >> FirstFactor;
cout << "Podaj stopien drugiego wielomianu:" << endl;
cin >> SecondFactor;
int a[FirstFactor + 1];
int b[SecondFactor + 1];
cout << "Wpisz kolejno wspolczynniki pierwszego wielomianu." << endl;
for (int i = 0; i <= FirstFactor; i++) {
cin >> a[i];
}
cout << "Wpisz kolejno wspolczynniki drugiego wielomianu." << endl;
for (int i = 0; i <= SecondFactor; i++) {
cin >> b[i];
}
int i;
int c[i];
if(SecondFactor <= FirstFactor) {
for(int i = 0; i <= FirstFactor; i++) {
c[i] = a[i] + b[i];
}
}
else {
for(int i = 0; i <= SecondFactor; i++) {
c[i] = a[i] + b[i];
}
}
cout << "Wielomian bedacy suma Twoich wielomianow:" << endl;
if(SecondFactor <= FirstFactor) {
cout << c[0] << " + " << c[1] << "n";
for(int i = 2; i <= FirstFactor; i++) {
cout << " + " << c[i] << "n^" << i;
}
} else {
cout << c[0] << " + " << c[1] << "n";
for(int i = 2; i <= SecondFactor; i++) {
cout << " + " << c[i] << "n^" << i;
}
}
return 0;
}
[C++] Wielomiany.
: 18 lis 2016, o 23:06
autor: kalwi
Linijka 29 jest zła
[C++] Wielomiany.
: 18 lis 2016, o 23:21
autor: mich12
Hmm, a jak mogę inaczej zadeklarować tablicę c ?
[C++] Wielomiany.
: 18 lis 2016, o 23:38
autor: kalwi
Dynamicznie albo poprzez vector
[C++] Wielomiany.
: 19 lis 2016, o 00:08
autor: mich12
a nie mogę określić że ma rozmiar np. FirstFactor?
[C++] Wielomiany.
: 19 lis 2016, o 00:11
autor: kalwi
Nie, to nie jest C99. C++ nie obsługuje VLA (ewentualnie kompilacja za pomocą g++/clang++ posiada taką opcję, ale nie jest to zapewnione przez standard). Ale co to za problem napisać
i wtedy korzystasz jak z normalnej tablicy intów (i nie zamartwiasz się pamięcią, bo tu nic nie trzeba zwalniać)
[C++] Wielomiany.
: 19 lis 2016, o 07:05
autor: a4karo
Po prostu masz śmieci w tablicach \(\displaystyle{ a}\) i \(\displaystyle{ b}\) (bo deklarujesz krótsze, a działasz na dłuższych)
[C++] Wielomiany.
: 19 lis 2016, o 10:32
autor: kalwi
Kod: Zaznacz cały
#include <iostream>
#include <vector>
using namespace std;
int main()
{
int first_factor;
int second_factor;
int max;
cout << "Podaj stopien pierwszego wielomianu:" << endl;
cin >> first_factor;
cout << "Podaj stopien drugiego wielomianu:" << endl;
cin >> second_factor;
max = (first_factor > second_factor ? first_factor : second_factor) + 1;
vector <int>a(max);
vector <int>b(max);
vector <int>c(max);
fill(a.begin(), a.end(), 0);
fill(b.begin(), b.end(), 0);
fill(b.begin(), c.end(), 0);
cout << "Wpisz kolejno wspolczynniki pierwszego wielomianu." << endl;
for (int i = 0; i < first_factor + 1; ++i)
cin >> a[i];
cout << "Wpisz kolejno wspolczynniki drugiego wielomianu." << endl;
for (int i = 0; i < second_factor + 1; ++i)
cin >> b[i];
for(int i = 0; i < max; ++i)
c[i] = a[i] + b[i];
cout << "Wielomian bedacy suma Twoich wielomianow:" << endl;
cout << c[0] << " + " << c[1] << "n";
for(int i = 2; i < max; ++i)
cout << " + " << c[i] << "n^" << i;
return 0;
}
-- 19 lis 2016, o 10:44 --lub nieco szybciej:
Kod: Zaznacz cały
#include <iostream>
#include <vector>
using namespace std;
int main()
{
int first_factor;
int second_factor;
int max;
int x;
cout << "Podaj stopien pierwszego wielomianu:" << endl;
cin >> first_factor;
cout << "Podaj stopien drugiego wielomianu:" << endl;
cin >> second_factor;
max = (first_factor > second_factor ? first_factor : second_factor) + 1;
vector <int>a(max);
fill(a.begin(), a.end(), 0);
cout << "Wpisz kolejno wspolczynniki pierwszego wielomianu." << endl;
for (int i = 0; i < first_factor + 1; ++i)
cin >> a[i];
cout << "Wpisz kolejno wspolczynniki drugiego wielomianu." << endl;
for (int i = 0; i < second_factor + 1; ++i)
{
cin >> x;
a[i] += x;
}
cout << "Wielomian bedacy suma Twoich wielomianow:" << endl;
cout << a[0] << " + " << a[1] << "n";
for(int i = 2; i < max; ++i)
cout << " + " << a[i] << "n^" << i;
return 0;
}
[C++] Wielomiany.
: 19 lis 2016, o 14:54
autor: Dasio11
kalwi pisze:Kod: Zaznacz cały
vector <int>a(max);
fill(a.begin(), a.end(), 0);
Można ciut prościej:
vector <int>a(max, 0);
albo nawet
vector <int>a(max);
bo zero jest domyślną wartością przy inicjalizacji
int
a jako elementu
vector
a.
[C++] Wielomiany.
: 19 lis 2016, o 23:39
autor: mich12
Dzięki Wam!
A mam pytanie, czy można jakoś inaczej zmodyfikować ten kod, tzn bez użycia fill i vector?
[C++] Wielomiany.
: 19 lis 2016, o 23:43
autor: Dasio11
Jeśli stopień wielomianu jest zmienną podawaną na wejściu, to dynamiczna alokacja pamięci jest niezbędna, a vector
jest zdecydowanie najwygodniejszy w tym celu. Jeśli nie chcesz używać wektora, to należałoby użyć operatora new
.
[C++] Wielomiany.
: 19 lis 2016, o 23:49
autor: mich12
A gdy zadeklaruję tablicę
to też mi nie do końca dobrze liczy, czemu nie mogę tak zrobić w takim razie?
Jeszcze mam pytanie co do mnożenia wielomianów- możecie rzucić okiem na kod? Bo niestety nie spełnia swojej funkcji :/
Kod: Zaznacz cały
#include <iostream>
using namespace std;
int main () {
int n1; // stopień pierwszego wielomianu
int n2; // stopień drugiego wielomianu
int n; // stopień wielomianu po przemnożeniu
cout << "Podaj stopien pierwszego wielomianu:" << endl;
cin >> n1;
cout << "Podaj stopien drugiego wielomianu:" << endl;
cin >> n2;
int a[n1 + 1];
int b[n2 + 1];
cout << "Wpisz kolejno wspolczynniki pierwszego wielomianu." << endl;
for(int x = 0; x <= n1; x++) {
cin >> a[x];
}
cout << "Wpisz kolejno wspolczynniki drugiego wielomianu." << endl;
for(int y = 0; y <= n2; y++) {
cin >> b[y];
}
n = n1 + n2;
for (int i = 0; i <= n; i++) {
for (int x = 0; x <= n1; x++) {
for (int y = 0; y <= n2; y++ ) {
int c[i];
c[i] = a[x] * b[y];
cout << "+" << c[i] << "n^" << x + y;
}
}
}
return 0;
}
[C++] Wielomiany.
: 20 lis 2016, o 02:11
autor: kalwi
Nie możesz tak napisać w cpp. VLA nie jest tu obsługiwane.
ten fragment jest bez sensu