- •Лабораторная работа № 1 рациональные числа
- •Теоретические сведения
- •Синтаксис объявления класса tRational
- •Программа работы
- •Исходные данные
- •Контрольные вопросы
- •Лабораторная работа № 2 комплексные числа
- •Теоретические сведения
- •Синтаксис объявления класса tComplex
- •Программа работы
- •Исходные данные
- •Контрольные вопросы
- •Лабораторная работа № 3 векторы
- •Теоретические сведения
- •Синтаксис объявления класса tVector
- •Программа работы
- •Контрольные вопросы
- •Лабораторная работа № 4 матрицы
- •Теоретические сведения
- •Арифметические операции с матрицами
- •Синтаксис объявления класса tMatrix
- •Основные свойства и методы компонента StringGrid
- •Программа работы
- •Исходные данные
- •Исходные данные
- •Контрольные вопросы
- •Лабораторная работа № 5 строки
- •Теоретические сведения
- •Программа работы
- •Исходные данные
- •Контрольные вопросы
- •Лабораторная работа № 6 стек
- •Теоретические сведения
- •Синтаксис объявления класса tStack
- •Программа работы
- •Контрольные вопросы
- •Лабораторная работа № 7 очередь
- •Теоретические сведения
- •Синтаксис объявления класса tQueue
- •Программа работы
- •Контрольные вопросы
- •Лабораторная работа № 8 деревья
- •Теоретические сведения
- •Синтаксис объявления класса tTreeNode
- •Синтаксис объявления класса tTree
- •Программа работы
- •Контрольные вопросы
- •Библиографический список
- •Содержание
Синтаксис объявления класса tComplex
classTComplex
{
private:
double FRe;
double FIm;
public:
double Re(){return FRe;};
double Im(){return FIm;};
double Module();
double Angle();
TComplex(double Re, double Im);
TComplex operator +=(TComplex Comlex);
TComplex operator -=(TComplex Comlex);
TComplex operator *=(TComplex Comlex);
TComplex operator /=(TComplex Comlex);
};
Класс TComplexсодержит два поля для хранения значений действительной и мнимой части числа, два метода для их вывода, конструктор для ввода их значений, два метода для нахождения модуля и угла, а также четыре метода для выполнения арифметических операций с комплексными числами.
В модуле с данным классом можно определить два класса исключительных ситуаций EComplexErrorиEZiroDivideдля обработки ошибок, которые могут возникать при работе с комплексными числами.
#define ERationalError Exception
#define EZiroDivide ERationalError
Чтобы использовать эти классы, в исполняемом разделе модуля с расширением cppнеобходимо подключить модульSysUtils.hpp, в котором хранить базовый класс исключительных ситуацийException.
После объявления класса TComplexнеобходимо определить все его методы в исполняемом разделе модуля с расширениемcpp в соответствии сADT– форматом.
TComplex::TComplex(double Re, double Im)
{
FRe = Re;
FIm = Im;
}
TComplex TComplex::operator +=(TComplex Complex)
{
FRe += Complex.FRe;
FIm += Complex.FIm;
return *this;
}
TComplex TComplex::operator /=(TComplex Complex)
{
if ((Complex.FRe == 0) || (Complex.FIm == 0))
throw EZiroDivide("Деление на ноль");
double NewRe;
NewRe = (FRe*Complex.FRe + FIm*Complex.FIm)/
(pow(Complex.FRe,2) + pow(Complex.FIm,2));
FIm = (FIm*Complex.FRe - FRe*Complex.FIm)/
(pow(Complex.FRe,2) + pow(Complex.FIm,2));
FRe = NewRe;
return *this;
}
После того, как определен класс TComplex, его можно использовать в любом месте программы, подключив соответствующий модуль.
void __fastcall TForm1::Button1Click(TObject *Sender)
{
TComplex a(1,2), b(3,4);
a += b;
Edit3->Text = a.Re();
Edit4->Text = a.Im();
}
Из примера видно, что реализация класса TComplexдалека от совершенства. Для расширения его функциональных возможностей можно добавить к нему дополнительные методы так, чтобы исходное число не передавалось конструктору, аметоды арифметических операций выполняли бы действия без присвоения.
TComplex::TComplex()
{
FRe = 0;
FIm = 0;
}
TComplex TComplex::operator+(TComplex Complex)
{
TComplex Result(FRe,FIm);
Result+=Complex;
return Result;
}
TComplex TComplex::operator/(TComplex Complex)
{
TComplex Result(FRe,FIm);
Result/=Complex;
return Result;
}
Заголовки этих методов, первоначально, необходимо поместить в объявление класса TComplex.
TComplex();
TComplex(AnsiString Comlex);
TComplex operator +(TComplex Comlex);
TComplex operator -(TComplex Comlex);
TComplex operator *(TComplex Comlex);
TComplex operator /(TComplex Comlex);
Для более эффективного ввода комплексных чисел в классе TComplexможно предусмотреть дополнительный конструктор так, чтобы исходное число передавалось ему в виде строкиAnsiStringв формате‘Действительная часть + i Мнимая часть’.
TComplex::TComplex(AnsiString Complex)
{
int Separator, Sign, Index;
bool ImBool;
Complex = Complex.Trim(); Separator = 0;
Sign = 1; Index = Complex.Length(); ImBool = false;
while ((Index != 0)&&(Separator == 0))
{
switch (Complex[Index]){
case 'i': ImBool = true;
Complex[Index] = ' ';
break;
case '+': Separator = Index;
break;
case '-': Sign = -1;
Separator = Index;
}
Index--;
}
if (ImBool)
{
if (Index == 0) FRe = 0;
else FRe=Complex.SubString(1, Separator-1).ToDouble();
if (Complex.SubString(Separator + 1, Complex.Length()
- Separator).Trim() =="")
FIm = Sign;
else FIm = Sign*Complex.SubString(Separator + 1,
Complex.Length() - Separator).ToDouble();
}
else
{
FRe = Complex.ToDouble();
FIm = 0;
}
}
Для более эффективного вывода комплексных чисел можно предусмотреть специальный метод преобразования типов из TComplexв строкуAnsiString, реализация которого имеет следующий вид:
AnsiString TComplex::ToStr()
{
AnsiString Result;
if (FIm > 0) Result = "+i" + FloatToStr(FIm);
else if (FIm < 0) Result = "-i" + FloatToStr(-FIm);
if (FRe != 0) Result = FloatToStr(FRe) + Result;
else if (FIm = 0) Result = "0";
return Result;
}
Перед определением дополнительного конструктора и метода преобразования типов их заголовки необходимо объявить внутри класса TComplex, первоначально подключив модульSystem.hpp, в котором храниться объявление класса строкAnsiString.
TComplex(AnsiString Complex);
AnsiString ToStr();
Использовать дополнительные методы можно следующим образом:
void __fastcallTForm1:: Button1Click(TObject *Sender)
{
TComplex a(Edit1->Text), b(Edit2->Text), c;
c=a+b;
Edit3->Text = c.ToStr();
}