Разработка и проектирование приложения «Калькулятор комплексных чисел»

Автор работы: Пользователь скрыл имя, 05 Декабря 2013 в 18:33, курсовая работа

Краткое описание

Задачи:
рассмотреть основы вычисления комплексных чисел
изучить и проанализировать среду разработки Delphi;
разработать приложение в среде Delphi, реализующее возможности операций с комплексными числами.

Содержание

Введение. 2
1. Исследование предметной области поставленной задачи. 4
1.2. Среда программирования Delphi. 7
2. Разработка программы для решения комплексных чисел. 11
2.1. Проектирование графического интерфейса. 11
2.2. Разработка программного обеспечения. 15
2.3. Руководство пользователя для «Калькулятора комплексных чисел». 18
Заключение 20
Список использованной литературы. 21

Вложенные файлы: 1 файл

Комплексные числа.docx

— 264.65 Кб (Скачать файл)

 

Форма TForm является базовым классом программы, которая содержит в себе остальные объекты. Класс (class) вслужит для обозначения множества объектов, которые обладают одинаковой структурой, поведением и отношениями с объектами из других классов.

На форму выводятся  объекты TEdit (поля для ввода данных), TButton (кнопки для обработки команд пользователя), TLabel (метки для передачи информации пользователю), а также  в неявном виде TComplex (комплексные  числа введенные пользователем, а также результаты вычислений).

Рассмотрим подробнее  эти классы:

Class TForm

Основное окно проекта, имеет все соответствующие атрибуты стандартной формы Windows (Width, Height, Top etc.). В проекте используется процедура Create() для инициализации объектов на форме.

Class TEdit

Основной класс на форме  для ввода и вывода информации от пользователя. Основной атрибут - Text, строкового типа. Класс содержит процедуру KeyPress в которой обрабатывается корректность ввода числа с клавиатуры.

Class TLabel

Вспомогательный класс  для уточнения пользователю назначения тех или иных полей ввода/вывода.

Class TComplex

Базовый класс проекта, содержащий в себе атрибуты комплексных  чисел и процедуры конвертации  комплексного числа и одной формы  в другую.

Атрибуты класса:

Real - вещественная часть  комплексного числа в алгебраической  форме

Imag - мнимая часть комплексного  числа в алгебраическом виде

Modul- модуль вектора числа  в экспоненциальном виде

Arg - угол поворота вектора  комплексного числа в экспоненциальной  форме.

Процедуры конвертации комплексного числа из одной формы в другую:

ArgToExp() - перевод числа  из алгебраической формы в  экспоненциальную

ExpToArg() - перевод числя  из экспоненциальной формы в  алгебраическую.

Class TButton

Кнопка для инициализации  расчетов. Основная процедура - Click, нажатие  кнопки мышкой.

 

    1. Разработка программного обеспечения.

Программа «Калькулятор комплексных  чисел» разработана в ранее рассмотренной  программе Delphi, версия 7. Для работы с системой пользователю нужны следующие прецеденты:

- ввести число

- рассчитать

Вариант использования  «Ввести число» включает в себя дополнительно два варианта использования:

- Ввести Z1

- Ввести Z2

То есть для расчетов пользователь должен ввести как минимум 2 комплексных числа. Может ввести комплексное число в какой-то одной форме, экспоненциальной или алгебраической, либо в обоих сразу. В зависимости от того введет он число в обеих формах или в какой-либо одной, вариант использования «Рассчитать» расширяется вариантами преобразования комплексных чисел из алгебраической формы в экспоненциальную и обратно.

Также вариант использования  «Рассчитать» включает в себя следующие арифметические действия над числами:

- Рассчитать Z1+Z2

- Рассчитать Z1-Z2

- Рассчитать Z1*Z2

- Рассчитать Z1/Z2

Раскроем последовательность действий для прецедента «Рассчитать».

Действующий актер User1 активирует команду Button1.Click через нажатие мышкой. После этого идет считывание соответствующих полей ввода формы и создание комплексных чисел Z1 и Z2. Последовательно создаются и рассчитываются результаты арифметических действий над этими числами. Результаты представлены в виде объектов класса TComplex. В соответствующие поля формы выводятся результаты вычислений в комплексной и алгебраической форме.

Классы и процедуры, используемые в программе:

type

TForm1 = class(TForm)

Edit1: TEdit;

GroupBox1: TGroupBox;

MainMenu1: TMainMenu;

MenuClear: TMenuItem;

MenuExit: TMenuItem;

Label1: TLabel;

Edit2: TEdit;

Label5: TLabel;

Edit9: TEdit;

Edit3: TEdit;

Edit4: TEdit;

GroupBox3: TGroupBox;

Label2: TLabel;

Edit5: TEdit;

Edit6: TEdit;

Edit7: TEdit;

Edit8: TEdit;

Label3: TLabel;

Edit10: TEdit;

Label8: TLabel;

Edit11: TEdit;

Label6: TLabel;

Edit12: TEdit;

Button1: TButton;

Label4: TLabel;

MenuSave: TMenuItem;

procedure Button1Click(Sender: TObject);

procedure MenuExitClick(Sender: TObject);

procedure Edit1KeyPress(Sender: TObject; var Key: Char);

procedure Edit2KeyPress(Sender: TObject; var Key: Char);

procedure Edit3KeyPress(Sender: TObject; var Key: Char);

procedure Edit4KeyPress(Sender: TObject; var Key: Char);

procedure Edit5KeyPress(Sender: TObject; var Key: Char);

procedure Edit6KeyPress(Sender: TObject; var Key: Char);

procedure Edit7KeyPress(Sender: TObject; var Key: Char);

procedure Edit8KeyPress(Sender: TObject; var Key: Char);

procedure MenuClearClick(Sender: TObject);

procedure MenuSaveClick(Sender: TObject);

end;

TComplex=record

Real: Extended;//Вещественная часть комплексного числа

Imag: Extended;//Мнимая часть комплексного числа

Modul: Extended;//модуль комплексного числа

Angle: Extended;//угол поворота

end;

В основном модуле хранятся процедуры доступа к базе данных. Листинг полного кода модуля приведен в Приложении.

 

    1. Руководство пользователя для «Калькулятора комплексных чисел».

После запуска программы  происходит инициализация полей  формы.

Внешний вид запущенной программы на Рисунке 3

Рисунок 3 Внешний вид запущенной программы.

 

В верхней правой части экрана находится  панель навигации. Команды меню:

- Очистить - очищает поля ввода,  удаляет объекты комплексных  чисел

- Сохранить - сохраняются результаты  вычислений в файл в виде (Рисунок 4)

 

Рисунок 4 Сохраненные результаты вычислений

 

- Выход - выход из программы

В центре формы поля для ввода комплексных  чисел Z1 и Z2. Вводить можно как  в алгебраической форме a+jb, так и  в экспоненциальной форме.

В нижней части экрана 4 поля для вывода результатов вычислений и кнопка для инициализации расчетов. При  нажатии кнопки расчет производится конвертирование чисел из одной  формы в другую, а потом рассчитываются алгебраические действия с ними. Пример расчетов приведен на Рисунке 5.

Рисунок 5 Окно программы с результатами.

 

 

Приложение.

Листинг кода основной программы:

unit Unit1;

interface

uses

Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,

Dialogs, StdCtrls, Menus, Mask;

const Digit: set of Char=['1'..'9', '0'];

//Множество символов, воспринимаемых  как символ-разделитель:

Separator: set of Char=['/', '.', ',', 'ю', 'Ю', 'б', 'Б'];

firstdigit: set of char=['-','1'..'9', '0'];

type

TForm1 = class(TForm)

Edit1: TEdit;

GroupBox1: TGroupBox;

MainMenu1: TMainMenu;

MenuClear: TMenuItem;

MenuExit: TMenuItem;

Label1: TLabel;

Edit2: TEdit;

Label5: TLabel;

Edit9: TEdit;

Edit3: TEdit;

Edit4: TEdit;

GroupBox3: TGroupBox;

Label2: TLabel;

Edit5: TEdit;

Edit6: TEdit;

Edit7: TEdit;

Edit8: TEdit;

Label3: TLabel;

Edit10: TEdit;

Label8: TLabel;

Edit11: TEdit;

Label6: TLabel;

Edit12: TEdit;

Button1: TButton;

Label4: TLabel;

MenuSave: TMenuItem;

procedure Button1Click(Sender: TObject);

procedure MenuExitClick(Sender: TObject);

procedure Edit1KeyPress(Sender: TObject; var Key: Char);

procedure Edit2KeyPress(Sender: TObject; var Key: Char);

procedure Edit3KeyPress(Sender: TObject; var Key: Char);

procedure Edit4KeyPress(Sender: TObject; var Key: Char);

procedure Edit5KeyPress(Sender: TObject; var Key: Char);

procedure Edit6KeyPress(Sender: TObject; var Key: Char);

procedure Edit7KeyPress(Sender: TObject; var Key: Char);

procedure Edit8KeyPress(Sender: TObject; var Key: Char);

procedure MenuClearClick(Sender: TObject);

procedure MenuSaveClick(Sender: TObject);

private

{ Private declarations }

public

{ Public declarations }

end;

TComplex=record

Real: Extended;//Вещественная часть комплексного числа

Imag: Extended;//Мнимая часть комплексного числа

Modul: Extended;//модуль комплексного числа

Angle: Extended;//угол поворота

end;

var

Form1: TForm1;

Z1,Z2: TComplex;

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);

var Modul,Angle:extended;

begin

if Edit1.Text<>'' then Z1.Real:=StrToFloat(Edit1.Text);

if Edit2.Text<>'' then Z1.Imag:=StrToFloat(Edit2.Text);

if Edit3.Text<>'' then Z1.Modul:=StrToFloat(Edit3.Text);

if Edit4.Text<>'' then Z1.Angle:=StrToFloat(Edit4.Text);

if Edit5.Text<>'' then Z2.Real:=StrToFloat(Edit5.Text);

if Edit6.Text<>'' then Z2.Imag:=StrToFloat(Edit6.Text);

if Edit7.Text<>'' then Z2.Modul:=StrToFloat(Edit7.Text);

if Edit8.Text<>'' then Z2.Angle:=StrToFloat(Edit8.Text);

if (Edit1.Text<>'') and (Edit2.Text<>'') then

begin

Z1.Modul:=SQRT(SQR(Z1.Real)+SQR(Z1.Imag));

if Z1.Real=0 then Z1.Angle:=1.57

else if(Z1.Real>0) then Z1.Angle:=arctan(Z1.Imag/Z1.Real)

else Z1.Angle:=3.14+arctan(Z1.Imag/Z1.Real);

Edit3.Text:=floatToStrF(Z1.Modul,ffFixed,6,1);

Edit4.Text:=floatToStrF(Z1.Angle,ffFixed,6,1);

end;

if (Edit3.Text<>'') and (Edit4.Text<>'') then

begin

Z1.Real:=Z1.Modul*cos(Z1.Angle);

Z1.Imag:=Z1.Modul*sin(Z1.Angle);

Edit1.Text:=floatToStrF(Z1.Real,ffFixed,6,1);

Edit2.Text:=floatToStrF(Z1.Imag,ffFixed,6,1);

end;

if (Edit5.Text<>'') and (Edit6.Text<>'') then

begin

Z2.Modul:=SQRT(SQR(Z2.Real)+SQR(Z2.Imag));

if Z2.Real=0 then Z2.Angle:=1.57

else if (Z2.Real>0) then Z2.Angle:=arctan(Z2.Imag/Z2.Real)

else Z2.Angle:=3.14+arctan(Z2.Imag/Z2.Real);

Edit7.Text:=floatToStrF(Z2.Modul,ffFixed,6,1);

Edit8.Text:=floatToStrF(Z2.Angle,ffFixed,6,1);

end;

if (Edit7.Text<>'') and (Edit8.Text<>'') then

begin

Z2.Real:=Z2.Modul*cos(Z2.Angle);

Z2.Imag:=Z2.Modul*sin(Z2.Angle);

Edit5.Text:=floatToStrF(Z2.Real,ffFixed,6,1);

Edit6.Text:=floatToStrF(Z2.Imag,ffFixed,6,1);

end;

{Z1+Z2}

If Z1.Imag>=0 then Edit9.Text:=floatToStrF(Z1.Real,ffFixed,6,1)+'+j'+floatToStrF(Z1.Imag,ffFixed,6,1)

else Edit9.Text:=floatToStrF(Z1.Real,ffFixed,6,1)+'-j'+floatToStrF(-Z1.Imag,ffFixed,6,1);

If Z2.Real>=0 then Edit9.Text:=Edit9.Text+'+'+floatToStrF(Z2.Real,ffFixed,6,1)

else Edit9.Text:=Edit9.Text+floatToStrF(Z2.Real,ffFixed,6,1);

If Z2.Imag>=0 then Edit9.Text:=Edit9.Text+'+j'+floatToStrF(Z2.Imag,ffFixed,6,1)

else Edit9.Text:=Edit9.Text+'-j'+floatToStrF(-Z2.Imag,ffFixed,6,1);

Edit9.Text:=Edit9.Text+'='+floatToStrF(Z1.Real+Z2.Real,ffFixed,6,1);

If (Z1.Imag+Z2.Imag)>=0 then Edit9.Text:=Edit9.Text+'+j'+floatToStrF(Z1.Imag+Z2.Imag,ffFixed,6,1)

else Edit9.Text:=Edit9.Text+'-j'+floatToStrF(-(Z1.Imag+Z2.Imag),ffFixed,6,1);

modul:=SQRT(SQR(Z1.Real+Z2.Real)+SQR(Z1.Imag+Z2.Imag));

if (Z1.Real+Z2.Real)=0 then Angle:=1.57

else if (Z1.Real+Z2.Real)>0 then Angle:=arctan((Z1.Imag+Z2.Imag)/(Z1.Real+Z2.Real))

else Angle:=3.14+arctan((Z1.Imag+Z2.Imag)/(Z1.Real+Z2.Real));

Edit9.Text:=Edit9.Text+'='+floatToStrF(modul,ffFixed,6,1)+'exp('+floatToStrF(Angle,ffFixed,6,1)+'j)';

{Z1-Z2}

If Z1.Imag>=0 then Edit10.Text:=floatToStrF(Z1.Real,ffFixed,6,1)+'+j'+floatToStrF(Z1.Imag,ffFixed,6,1)

else Edit10.Text:=floatToStrF(Z1.Real,ffFixed,6,1)+'-j'+floatToStrF(-Z1.Imag,ffFixed,6,1);

If (-Z2.Real)>=0 then Edit10.Text:=Edit10.Text+'+'+floatToStrF(-Z2.Real,ffFixed,6,1)

else Edit10.Text:=Edit10.Text+floatToStrF(-Z2.Real,ffFixed,6,1);

If (-Z2.Imag)>=0 then Edit10.Text:=Edit10.Text+'+j'+floatToStrF(-Z2.Imag,ffFixed,6,1)

else Edit10.Text:=Edit10.Text+'-j'+floatToStrF(Z2.Imag,ffFixed,6,1);

Edit10.Text:=Edit10.Text+'='+floatToStrF(Z1.Real-Z2.Real,ffFixed,6,1);

If (Z1.Imag-Z2.Imag)>=0 then Edit10.Text:=Edit10.Text+'+j'+floatToStrF(Z1.Imag-Z2.Imag,ffFixed,6,1)

else Edit10.Text:=Edit10.Text+'-j'+floatToStrF(-(Z1.Imag-Z2.Imag),ffFixed,6,1);

modul:=SQRT(SQR(Z1.Real-Z2.Real)+SQR(Z1.Imag-Z2.Imag));

if (Z1.Real-Z2.Real)=0 then Angle:=1.57

else if (Z1.Real-Z2.Real)>0 then Angle:=arctan((Z1.Imag-Z2.Imag)/(Z1.Real-Z2.Real))

else Angle:=3.14+arctan((Z1.Imag-Z2.Imag)/(Z1.Real-Z2.Real));

Edit10.Text:=Edit10.Text+'='+floatToStrF(modul,ffFixed,6,1)+'exp('+floatToStrF(Angle,ffFixed,6,1)+'j)';

{Z1*Z2}

Edit11.Text:=floatToStrF(Z1.Modul,ffFixed,6,1)+'exp('+floatToStrF(Z1.Angle,ffFixed,6,1)+

'j)*'+floatToStrF(Z2.Modul,ffFixed,6,1)+'exp('+floatToStrF(Z2.Angle,ffFixed,6,1)+'j)='+

floatToStrF(Z1.Modul*Z2.Modul,ffFixed,6,1)+'exp('+floatToStrF(Z1.Angle+Z2.Angle,ffFixed,6,1)+'j)='+

floatToStrF(Z1.Modul*Z2.Modul*cos(Z1.Angle+Z2.Angle),ffFixed,6,1);

if sin(Z1.Angle+Z2.Angle)>=0 then Edit11.Text:=Edit11.Text+'+j'+floatToStrF(Z1.Modul*Z2.Modul*sin(Z1.Angle+Z2.Angle),ffFixed,6,1)

else Edit11.Text:=Edit11.Text+'-j'+floatToStrF(-Z1.Modul*Z2.Modul*sin(Z1.Angle+Z2.Angle),ffFixed,6,1);

{Z1/Z2}

Edit12.Text:=floatToStrF(Z1.Modul,ffFixed,6,1)+'exp('+floatToStrF(Z1.Angle,ffFixed,6,1)+

'j)/'+floatToStrF(Z2.Modul,ffFixed,6,1)+'exp('+floatToStrF(Z2.Angle,ffFixed,6,1)+'j)='+

floatToStrF(Z1.Modul/Z2.Modul,ffFixed,6,1)+'exp('+floatToStrF(Z1.Angle-Z2.Angle,ffFixed,6,1)+'j)='+

floatToStrF(Z1.Modul/Z2.Modul*cos(Z1.Angle-Z2.Angle),ffFixed,6,1);

if sin(Z1.Angle-Z2.Angle)>=0 then Edit12.Text:=Edit12.Text+'+j'+floatToStrF(Z1.Modul/Z2.Modul*sin(Z1.Angle-Z2.Angle),ffFixed,6,1)

else Edit12.Text:=Edit12.Text+'-j'+floatToStrF(-Z1.Modul/Z2.Modul*sin(Z1.Angle-Z2.Angle),ffFixed,6,1);

end;

procedure TForm1.MenuExitClick(Sender: TObject);

begin

Form1.Close;

end;

procedure TForm1.Edit1KeyPress(Sender: TObject; var Key: Char);

begin

if (length(edit1.Text)=0) then

if (key in firstdigit) then exit

else key:=#0;

if (Key in Separator)

then Key:=DecimalSeparator //Delphi-константа типа Char, равная символу-разделителю Windows

else

if (not(Key in Digit))

then Key:=#0;

if ((Key=DecimalSeparator)and(pos(DecimalSeparator, Edit1.Text)<>0))

then Key:=#0;

end;

procedure TForm1.Edit2KeyPress(Sender: TObject; var Key: Char);

begin

if (length(edit12.Text)=0) then

if (key in firstdigit) then exit

else key:=#0;

if (Key in Separator)

then Key:=DecimalSeparator //Delphi-константа типа Char, равная символу-разделителю Windows

else

if (not(Key in Digit))

then Key:=#0;

if ((Key=DecimalSeparator)and(pos(DecimalSeparator, Edit1.Text)<>0))

then Key:=#0;

end;

procedure TForm1.Edit3KeyPress(Sender: TObject; var Key: Char);

begin

if (Key in Separator)

then Key:=DecimalSeparator //Delphi-константа типа Char, равная символу-разделителю Windows

Информация о работе Разработка и проектирование приложения «Калькулятор комплексных чисел»