//
// "maly projekt" zadanie 6
//
#include<iostream>
#include<ctype.h>
#include<cmath>
#include<string>
#include "wielomian.h"
using namespace std;
/************************** KONSTRUKTORY ************************************/
wielomian::wielomian (){
tablica= new double[stopien +1];
stopien=0; // ustawienie stopnia wielomianu
for(int i=0; i<stopien+1; i++) tablica[i]=0; //zerowanie tablicy (czyszczenie)
}
wielomian::wielomian (int st){
if(st <0) throw 0; // do pokazania bledu bledu
tablica= new double[st +1];// dynamiczne zwiekszanie tablicy
stopien=st;
for(int i=0; i<st+1; i++) tablica[i]=0; // zerowanie tablicy (czyszczenie)
}
/*************************** WPISYWANIE *************************************/
void wielomian::wpisz(){
int x;
cout << "podaj wspolczynniki: a[n]*x^n+ ... +a[0] \n";
for(int i=0; i<=pokazStopien(); i++){ // wpisuje wspolczynniki wielomianu do tablicy
cout << "a[" << i << "]= "; cin >> tablica[i];
}
}
/***************************** WYSWIETLENIE *********************************/
void wielomian::pokaz() {
if (tablica[pokazStopien()] != 0){ // wspolczynnik przy najwyzszym stopniu !=0
if(tablica[pokazStopien()] !=1){ // wspolczynnik przy najwyzszym stopniu !=1
cout << tablica[pokazStopien()]; // pokazuje wspolczynnik
if (pokazStopien() > 0) cout << "x"; // jesli jest przynajmniej stopnia 1 to pisze x
if (pokazStopien() > 1) cout << "^" << pokazStopien(); // jesli jest przynajmniej stopnia 2 to pisze x^
}
else{ // jedynka jako wspolczynnik jest przy najwyzszej potedze
if (pokazStopien() > 0) cout << "x"; // pisze wyraz bez wspolczynnik stopien wiel >= 1
if (pokazStopien() > 1) cout << "^" << pokazStopien(); // wypisuje x^ bez wspolczynnika stopien wiel >= 2
}
}
for (int i=pokazStopien()-1; i>0; i--){ // pracuje na wspolczynnikach wielomianu bez wyrazu a[n] i a[0]
if (tablica[i] != 0){ // jesli element jest rozny 0 od zera
if (tablica[i] != 1){ // i rozny od 1 to"
if(tablica[i] > 0) cout << " + " << tablica[i]; // pisze znak i wartosc wspolczynnika
else cout << " " << tablica[i]; // jesli jest liczba ujemna
// minus jest wprowadzany przy liczbie dlatego tak jest
if (i>0) cout << "x"; // przy wspolczynniku 1
if (i>1) cout << "^" << i;
}
else{
if(tablica[i] >0) cout << " + ";
else cout << " " ;
if (i>0) cout << "x"; // przy wspolczynniku 1
if (i>1) cout << "^" << i;
}
}
}
if (tablica[0] > 0) cout << " + " << tablica[0]; // wspolczynniki przy elemencie zerowym
else if (tablica[0] < 0) cout << " " << tablica[0];
}
/******************************* DODAWANIE **********************************/
wielomian operator+ (wielomian a, wielomian b) {
if(a.pokazStopien() >= b.pokazStopien() ) { //porownanie stopni wielomianow
/*wielomian a > b*/ for(int i=0; i <= b.pokazStopien() ; i++)
a.tablica[i]+=b.tablica[i]; // do wielomianu a dodaje b
return a; // zwracam wielomian a po dodaniu do niego b
}
else {
/*wielomian a < b*/ for(int i=0; i <= a.pokazStopien() ; i++)
b.tablica[i]+=a.tablica[i]; // do wielomianu b dodaje a
return b; // zwracam wielomian b po dodaniu
}
}
/***************************** ODEJMOWANIE **********************************/
wielomian operator- (wielomian a, wielomian b) {
if(a.pokazStopien() >= b.pokazStopien() ) { //porownanie stopni wielomianow
/*wielomian a > b*/ for(int i=0; i <= b.pokazStopien() ; i++)
a.tablica[i]-=b.tablica[i]; // od wielomianu a odejmuje b
return a; // zwracam wielomian a po odjeciu od niego b
}
else {
/*wielomian a > b*/ for(int i=0; i <= a.pokazStopien() ; i++)
b.tablica[i]-=a.tablica[i]; // od wielomianu b odejmuje a
return b; // zwracam wielomian b po odjeciu od niego a
}
}
/********************** WARTOSC WIELOMIANU **********************************/
double wielomian::wartosc(double x0) {
double wartosc=0.0;
for(int i=pokazStopien(); i>=0; i--) {
if (x0 == 0) wartosc=tablica[i]; // wartosc przy wspolczynniku a[0]
else wartosc+=tablica[i]*pow(x0,i); // dla wartosci >a[0] np 3* 2^3 itd
}
return wartosc; // zwraca wartosc wielomianu w punkcie
}
/*********************** MNOZENIE PRZEZ SKALAR ******************************/
wielomian operator* (wielomian a, int skalar){
for(int i=0; i<=a.pokazStopien(); i++) // przejscie po wartosciach w wielomianie
a.tablica[i]*=skalar; // pomnozenie wspolczynnikow przez skalar
return a; // zwrocenie wielomianu po pomnozeniu przez skalar
}
/************************** MNOZENIE ****************************************/
wielomian operator*(wielomian a, wielomian b){
wielomian iloczyn(a.pokazStopien()+b.pokazStopien()); //stopien wielomianu koncowego
double t=0, s=0;
for(int i=0; i<=b.pokazStopien(); i++){
for(int k=0; k<=i; k++)
t+=(a.tablica[k]*b.tablica[i-k]);// mnozenie wspolczynnikow
iloczyn.tablica[i]=t;
}
for(int i=b.pokazStopien(); i<=a.pokazStopien()+b.pokazStopien(); i++){
for(int j=b.pokazStopien(),p=i; p<=a.pokazStopien()+b.pokazStopien(); j--,p++)
s+=(b.tablica[j]*a.tablica[i-j]);
iloczyn.tablica[i]=s;
}
return iloczyn; // zwrocenie wyniku mnozenia
}
/************************** DZIELENIE FUNKCJA ******************************/
wielomian operator /(wielomian a, wielomian b) {
int roznicaStopni=a.pokazStopien()-b.pokazStopien();// roznica stopni wielomianow
if(roznicaStopni>=0) {//roznica wieksza od 0 w przeciwnym wypadku blad niema wielomianu o stopniu ujemnym
wielomian iloraz(roznicaStopni), reszta(b.pokazStopien()); // tworze wielomiany pomocnicze iloraz jako wynik dzialania i reszte
for (int k=roznicaStopni; k>=0; k--) {
iloraz.tablica[k]= a.tablica[b.pokazStopien()+k]/b.tablica[b.pokazStopien()];
// dziele wspolczynniki przy najwyszysz potegach wielomianow
for (int j=b.pokazStopien()+k-1; j>=k; j--)
a.tablica[j]-= iloraz.tablica[k]*b.tablica[j-k];
// odejmuje od tablicy a wielomian powstaly przez pomnozecnie wyniku i b
}
for (int i=reszta.pokazStopien()-1; i>=0; i--)
reszta.tablica[i]=a.tablica[i];// przypisuje wielomian a(zmodyfikowany przez roznice) do reszty
cout<<" reszta: \t"; reszta.pokaz(); // wyswietlenie reszty
cout << endl;
return iloraz; //zwrocenie wyniku dzielenia
}
else throw 0; // wyzucenie bledu
}
/**************************** KONIEC ****************************************/
Polynomial_easy_2.rar_Want It
版权申诉
52 浏览量
2022-09-14
18:33:20
上传
评论
收藏 121KB RAR 举报
![avatar](https://profile-avatar.csdnimg.cn/d600a32f29294db1a3be82ec9708491a_weixin_42651887.jpg!1)
weixin_42651887
- 粉丝: 81
- 资源: 1万+
最新资源
- comment.block.documentation.rust
- there is no way to distinguish perfectly
- 数据库管理工具:dbeaver-ce-24.0.2-x86-64-setup.exe
- Objective-C.tmLanguage
- 数据库管理工具:dbeaver-ce-24.0.2-macos-x86-64.dmg
- Delphi 12 控件之StyleControls 5.77.7z
- 苹果CMSV10红色自适应网站模板
- 数据库管理工具:dbeaver-ce-23.3.5-stable.x86-64.rpm
- SAP 消息号C6013解决方案
- C#入门必看的实例程序100个,含全部源代码.zip
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
![feedback](https://img-home.csdnimg.cn/images/20220527035711.png)
![feedback](https://img-home.csdnimg.cn/images/20220527035711.png)
![feedback-tip](https://img-home.csdnimg.cn/images/20220527035111.png)
评论0