Logo GenDocs.ru

Поиск по сайту:  

Загрузка...

Класс для работы с рациональными числами - файл 1.docx


Класс для работы с рациональными числами
скачать (50.6 kb.)

Доступные файлы (1):

1.docx51kb.16.11.2011 03:09скачать

содержание
Загрузка...

1.docx

Реклама MarketGid:
Загрузка...
СПБГУАП


№51


Работу проверил

Преподаватель


Отчет по

лабораторной работе

по курсу:

«Технологии программирования»

На тему:

“Классы по работе с рациональными числами”


Работу выполнили

Студенты группы 5811


Санкт - Петербург

2010



1.Постановка задачи:

Создать класс, обеспечивающего работу с рациональными дробями. Класс должен уметь работать как с рациональными дробями, так и с целыми числами. Должны быть определены операции сложения, вычитания, умножения и деления. Дроби должны быть упрощены и приведены к правильным.

^ 2. Описание методов и конструкторов.

Класс rational:

- конструктор создания рациональной дроби.

- перегруженные операторы сложения , вычитания, умножения и деления рациональных дробей.

-перегруженный оператор вывода рациональных дробей .

^ 3. Листинг программы.

#include<iostream.h>

#include<conio.h>

#include <math.h>

class rational {

private:

int chisl;

int znam;

public:

friend ostream &operator << (ostream& o,rational x);

rational (int c=1, int b=1) {chisl=c; znam=b;}

rational operator+ (rational &x);

rational operator- (rational &x);

rational operator* (rational &x);

rational operator/ (rational &x); };

//перегруженный оператор сложения рациональных дробей

rational rational::operator+(rational &x)

{ int delitel,crav,i,j; rational y;

y.chisl=chisl*x.znam+znam*x.chisl; y.znam=znam*x.znam;

if (y.chisl!=0)

{ j=0;int f=0; if (y.chisl<0) {f=1;y.chisl=abs(y.chisl);}

if ((y.chisl%y.znam)==0) j=1;

else

{ if ((abs(y.chisl))>(abs(y.znam))) crav=y.znam ;else crav=y.chisl;

delitel=1;

for(i=2;i<=crav;i++)

{ if ( (((abs(y.chisl))%i)==0)&&(((abs(y.znam))%i)==0) )

{ if (i>delitel) delitel=i;} }

if (delitel>=2) {y.znam=y.znam/delitel;y.chisl=y.chisl/delitel;

if (f==1) y.chisl*=-1;

}

} }

return y; }

// перегруженный оператор вычитания рациональных дробей

rational rational::operator-(rational &x)

{ rational y; int delitel,crav,i,j;

y.chisl=chisl*x.znam-znam*x.chisl;y.znam=znam*x.znam;

if (y.chisl!=0)

{ j=0;int f=0; if (y.chisl<0) {f=1;y.chisl=abs(y.chisl);}

if ((y.chisl%y.znam)==0) j=1;



else

{ if ((abs(y.chisl))>(abs(y.znam))) crav=y.znam ;else crav=y.chisl;

delitel=1;

for(i=2;i<=crav;i++)

{ if ( (((abs(y.chisl))%i)==0)&&(((abs(y.znam))%i)==0) )

{ if (i>delitel) delitel=i;} }

if (delitel>=2) {y.znam=y.znam/delitel;y.chisl=y.chisl/delitel;

if (f==1) y.chisl*=-1;

}

} }

return y;}

// перегруженный оператор умножения рациональных дробей

rational rational::operator*(rational &x)

{rational y; int delitel,crav,i,j

y.chisl=chisl*x.chisl; y.znam=znam*x.znam;

if (y.chisl!=0)

{ j=0;int f=0; if (y.chisl<0) {f=1;y.chisl=abs(y.chisl);}

if ((y.chisl%y.znam)==0) j=1;

else

{ if ((abs(y.chisl))>(abs(y.znam))) crav=y.znam ;else crav=y.chisl;

delitel=1;

for(i=2;i<=crav;i++)

{ if ( (((abs(y.chisl))%i)==0)&&(((abs(y.znam))%i)==0) )

{ if (i>delitel) delitel=i;} }

if (delitel>=2) {y.znam=y.znam/delitel;y.chisl=y.chisl/delitel;

if (f==1) y.chisl*=-1;

}

} }

return y;}

// перегруженный оператор деления рациональных дробей

rational rational::operator/(rational &x)

{ rational y; int delitel,crav,i,j

y.chisl=chisl*x.znam; y.znam=znam*x.chisl;

if (y.chisl!=0)

{ j=0;int f=0; if (y.chisl<0) {f=1;y.chisl=abs(y.chisl);}

if ((y.chisl%y.znam)!=0)

{ if ((abs(y.chisl))>(abs(y.znam))) crav=y.znam ;else crav=y.chisl;

delitel=1;

for(i=2;i<=crav;i++)

{ if ( (((abs(y.chisl))%i)==0)&&(((abs(y.znam))%i)==0) )

{ if (i>delitel) delitel=i;} }

if (delitel>=2) {y.znam=y.znam/delitel;y.chisl=y.chisl/delitel;

if (f==1) y.chisl*=-1;

}

} }

return y;}

// перегруженный оператор вывода рациональных дробей

ostream &operator << (ostream& o,rational x)

{

if (x.chisl!=0) { if ((x.chisl%x.znam)==0) o<<x.chisl/x.znam;

else o<<x.chisl<<'/'<<x.znam; }

else o<<x.chisl;



return o;

}

main()

{ int a,b;

for(;;)

{

cout<<"vvedite chislitel' u 3namenatel' pervou drobi: ";

cin>> a>>b;

if( b==0) cout<<"vvedite drob' s ne nylevim znamenatelem\n";

else break;

}

rational D1(a,b);

for(;;)

{

cout<<"vvedite chislitel' u 3namenatel' vtoroi drobi: ";

cin>> a>>b;

if( b==0) cout<<"vvedite drob' s ne nylevim znamenatelem\n";

else break;

}

rational D2 (a,b);

for(;;)

{

cout<<"vvedite chislitel' u 3namenatel' 3-ei drobi: ";

cin>> a>>b;

cout<<"vvedite drob' s ne nylevim znamenatelem\n";

if( b==0) cout<<"vvedite drob' s ne nylevim znamenatelem\n";

else break;

}

rational D3(a,b);

rational D5(a,b);

cout<<"slo}I{enie drobei:\n";

cout<<D1; cout<<" + "; cout<<D2; ;cout<<" + ";cout<<D3; cout<<"= ";

D5=D3+D2+D1;

cout<<D5; cout<<"\n";

cout<<"vbI4itanie drobei:\n";

cout<<D1; cout<<" - "; cout<<D2; cout<<"= ";

D5=D1-D2;

cout<<D5; cout<<"\n";

cout<<"ymno}I{enie drobei:\n ";

cout<<D1; cout<<" * "; cout<<D2;cout<<"= ";

D5=D1*D2;

cout<<D5; cout<<"\n";

cout<<"delenie drobei:\n";

cout<<D1; cout<<" / "; cout<<D2; cout<<"= ";

D5=D1/D2;

cout<<D5; cout<<"\n";

getch();

}




4.Тестирование


Скачать файл (50.6 kb.)

Поиск по сайту:  

© gendocs.ru
При копировании укажите ссылку.
обратиться к администрации