Отчет по Лабораторной работе (1079293)
Текст из файла
Отчет по Лабораторной работе №5
«Полиномы»
Работу выполнила Чёрненькая И.С. ____________
ИУ-5-21
Преподаватель Козлов А.Д. ____________
25 мая 2009 г.
Условие задачи:
Написать программу для работы с полиномами, состоящими из термов. Использовать классы Term и Poly. Обеспечить ввод полиномов, их сложение и умножение друг на друга.
Ввод полинома:
• Термы полинома могут вводиться в любом порядке.
• Во вводимом терме может присутствовать коэффициент -1.
• Терм (член полинома одного порядка) может складываться с другим термом (например, допустим ввод 3x^2–x^2, -3x^2 + x^2)
• Пробелы при вводе могут появляться где угодно.
• Количество термов – не больше 6
Полином должен выводиться на экран отсортированным по степеням и сокращенным, если вводились несколько термов одной степени с разными коэффициентами. Аналогично сокращение должно происходить в процессе суммирования и умножения полиномов.
Переменные:
Функции и переменные класса term:
kt – переменная типа int, коэффициент при терме;
st – переменная типа int, степень при терме;
term () – конструктор без параметров;
term (int a) – конструктор с одним параметром;
term (int a, int b) – конструктор с двумя параметрами;
term (char ch[10]) – конструктор с параметром char для ввода;
friend ostream& operator << (ostream& out, term& a) – перегрузка оператора вывода на экран;
bool operator == (const term& trm)const – перегрузка оператора сравнения;
term operator = (term trm) – оператор присваивания;
bool If_Bigger_Than_Zero () – сравнение для вывода на экран для знака «+»;
friend term& operator * (term& a, term& b) – оператор умножения двух термов
friend term& operator + (term &a, term &b) – оператор сложения двух термов.
Функции и переменные класса Poly:
term part[10] – массив из термов;
int n_trm – количество термов в данном полиноме;
int degree – степень полинома;
void order() – упорядочение термов в полиноме по степеням по убыванию;
Poly() – конструктор без параметров;
Poly(int a) – конструктор с одним параметром;
Poly(int a, int b) – конструктор с двумя параметрами;
Poly(term& tm) – конструктор с одним параметром термом;
Poly (Poly& pl) – конструктор копирования;
Poly operator = (Poly& pl) – оператор присваивания;
friend Poly operator + (Poly& pl1, Poly& pl2) – оператор сложения;
Poly operator += (Poly& pl) – оператор сложения;
friend Poly operator * (Poly& pl1, Poly& pl2) – оператор умножения;
Poly operator *= (Poly& pl) – оператор умножения;
friend ostream& operator << (ostream& out, Poly& pl) –вывод на экран;
void vvod() – ввод полинома, нужные перегрузки.
Текст программы:
main.cpp
#include "poli.h"
void main()
{ locale::global (locale ("rus") );
Poly x;
cout << "Введите полином 1 . . . " << endl;
x.vvod ();
cout << "Полином 1: " << x << endl;
Poly y;
cout << "Введите полином 2 . . . " << endl;
y.vvod ();
cout << "Полином 2: " << y << endl;
Poly z;
z = x + y;
cout << "Сумма: " << z << endl;
z = x * y;
cout << "Произведение: " << z << endl;
Poly z1,z2;
z1+=z;
z2*=z;
cout << z1 << endl << z2 << endl;
system ("pause");
}
poli.h
#include "term.h"
#include <conio.h>
using namespace std;
class Poly
{
friend class term;
private:
term part[10];
int n_trm;
int degree;
void order()
{
int nj;
for (int i=1 ; i <= (n_trm) ; i++)
{ nj=i;
for (int j=i+1 ; j <= n_trm ; j++)
if (part[j].st > part[nj].st)
nj=j;
if (i!= nj)
swap (part[i], part[nj]);
}
for (int i = 1; i < n_trm; i++)
{
if (part[i].st == part[i + 1].st)
{
part[i] = part[i] + part[i + 1];
for (int j = i + 1; j <= n_trm; j++)
part[j] = part[j + 1];
n_trm--;
i--;
}
}
int new_n_term = n_trm;
for (int i = 1; i <= n_trm; i++)
{
if (part[i] == term (0, 0))
new_n_term--;
}
n_trm = new_n_term;
if (n_trm == 0)
{
degree = 0;
return;
}
for (int i = 1; i <= n_trm; i++)
if (part[i].kt == 0)
{ for (int j = i; j <= n_trm; j++)
part[j] = part[j + 1];
n_trm--; }
degree = 0;
for (int i = 1; i < 10; i++)
if (part[i].kt != 0)
{
degree = part[i].st;
break;
}
}
public:
Poly() {
n_trm = 0;
degree = 0; }
Poly(int a) {
n_trm = 1;
part [n_trm] = term (a);
degree = 0; }
Poly(int a, int b) {
n_trm = 1;
part[n_trm] = term (a, b);
degree = b; }
Poly(term& tm) {
n_trm = 1;
part[n_trm] = tm;
degree = part[n_trm].st; }
Poly (Poly& pl) {
n_trm = pl.n_trm;
degree = pl.degree;
for (int i = 1; i <= n_trm; i++)
part[i] = pl.part[i]; }
Poly operator = (Poly& pl) {
n_trm = pl.n_trm;
degree = pl.degree;
for (int i = 1; i <= n_trm; i++)
part[i] = pl.part[i];
return *this;}
friend Poly/*&*/ operator + (Poly& pl1, Poly& pl2) {
Poly itog;
itog.n_trm = pl1.n_trm + pl2.n_trm;
for (int i=1; i <= pl1.n_trm; i++)
itog.part[i] = pl1.part[i];
for (int i = (pl1.n_trm + 1) ; i <= (pl1.n_trm + pl2.n_trm); i++)
itog.part[i] = pl2.part[i-pl1.n_trm];
itog.order();
return itog; }
Poly/*&*/ operator += (Poly& pl) {
return (*this = *this + pl); }
friend Poly/*&*/ operator * (Poly& pl1, Poly& pl2) {
Poly itog;
int pom = 0;
itog.n_trm = pl1.n_trm * pl2.n_trm;
for (int i = 1; i <= pl1.n_trm; i++)
for (int j = 1; j <= pl2.n_trm; j++)
{ pom++;
itog.part[pom] = pl1.part[i] * pl2.part[j]; }
itog.order();
return itog; }
Poly/*&*/ operator *= (Poly& pl) {
return (*this = *this * pl); }
friend ostream& operator << (ostream& out, Poly& pl)
{ if (pl.n_trm == 0)
out << "0";
else
for (int i = 1; i <= pl.n_trm; i++)
{
if (i != 1)
{
if (pl.part[i].If_Bigger_Than_Zero())
out << "+";
}
out << pl.part[i];
}
return out; }
void vvod()
{
char vyr[81]={}, buf[50]={}, pom[10]={};
int i=0, j=0;
gets (vyr);
while (vyr[i] != '\0')
{
if (vyr[i] != ' ')
{
buf[j] = vyr[i];
j++;
}
i++;
}
if ( (buf[0] != '+') && (buf[0] != '-') )
{
for (i=j; i>0; i--)
buf[i] = buf[i-1];
buf[0] = '+';
}
for (int p=0; p <= j; p++)
if (buf[p] == '+' || buf[p] == '-')
{
for (int i=0; i<10; i++)
pom[i] = ' ';
i = p;
do
{
pom[i-p] = buf[i];
i++;
}
while ( (buf[i]!= '+') && (buf[i]!= '-') && i<=j );
*this += Poly (term (pom));
order();
}
order();
}
};
term.h
#include <iostream>
#include <iomanip>
using namespace std;
class term
{
friend class Poly;
private:
int kt, st;
public:
term () {
kt = 0;
st = 0; }
term (int a) {
kt = a;
st = 0; }
term (int a, int b) {
kt = a;
st = b; }
term (char ch[10])
{
int sign = 0, i=1, pom=1, p=1;
if (ch[0] == '+')
sign = 1;
else
sign = -1;
if (ch[i] == 'x')
kt = 1;
else
{
kt=0;
pom = int(ch[i]);
for ( p=i; ( pom >= 48) && (pom <= 57) ; p++)
{
kt = 10 * kt + (pom - 48);
pom = int(ch[p+1]);
}
}
i=p;
kt *= sign;
st = 1;
if (ch[i] == 'x')
{
i += 2;
pom = int(ch[i]);
if ( (pom < 48) || (pom > 57) )
st *= 1;
else
{
st = 0;
pom = int(ch[i]);
for ( p=i ; ( (pom >= 48) && (pom <= 57) ); p++)
{
st = 10 * st + (pom - 48);
pom = int(ch[p+1]);
}
}
}
else
st = 0;
}
friend ostream& operator << (ostream& out, term& a) {
if (a.kt != 0)
{
if (a.st == 0)
{ out << a.kt;
return out; }
if (a.kt == 1)
{ if (a.st == 1)
out << " x ";
else
out << " x^" << a.st;
return out;}
if (a.kt == -1)
{ if (a.st == 1)
out << "- x ";
else
out << "- x^" << a.st;
return out;}
if (a.st == 1)
{ out << a.kt << "x ";
return out; }
out << a.kt << "x^" << a.st << " ";
return out;
}
}
bool operator == (const term& trm)const
{
return kt == trm.st && st == trm.st;
}
term operator = (term trm) {
kt = trm.kt;
st = trm.st;
return *this; }
bool If_Bigger_Than_Zero ()
{
return kt > 0;
}
friend term& operator * (term& a, term& b) {
int n_kt, n_st;
n_kt = a.kt * b.kt;
n_st = a.st + b.st;
return term (n_kt, n_st); }
friend term& operator + (term &a, term &b) {
int n_kt, n_st;
n_kt = a.kt + b.kt;
n_st = a.st;
return term (n_kt, n_st); }
};
Проверка и вывод результата:
Программа работает исправно.
Характеристики
Тип файла документ
Документы такого типа открываются такими программами, как Microsoft Office Word на компьютерах Windows, Apple Pages на компьютерах Mac, Open Office - бесплатная альтернатива на различных платформах, в том числе Linux. Наиболее простым и современным решением будут Google документы, так как открываются онлайн без скачивания прямо в браузере на любой платформе. Существуют российские качественные аналоги, например от Яндекса.
Будьте внимательны на мобильных устройствах, так как там используются упрощённый функционал даже в официальном приложении от Microsoft, поэтому для просмотра скачивайте PDF-версию. А если нужно редактировать файл, то используйте оригинальный файл.
Файлы такого типа обычно разбиты на страницы, а текст может быть форматированным (жирный, курсив, выбор шрифта, таблицы и т.п.), а также в него можно добавлять изображения. Формат идеально подходит для рефератов, докладов и РПЗ курсовых проектов, которые необходимо распечатать. Кстати перед печатью также сохраняйте файл в PDF, так как принтер может начудить со шрифтами.














