Автор работы: Пользователь скрыл имя, 06 Ноября 2013 в 16:49, курсовая работа
Целью данного курсового проекта является разработка и проектирование приложения «Калькулятор комплексных чисел».
Задачи:
рассмотреть основы вычисления комплексных чисел
изучить и проанализировать среду разработки Delphi;
разработать приложение в среде Delphi, реализующее возможности операций с комплексными числами.
Введение. 2
1. Исследование предметной области поставленной задачи. 4
1.2. Среда программирования Delphi. 7
2. Разработка программы для решения комплексных чисел. 11
2.1. Проектирование графического интерфейса. 11
2.2. Разработка программного обеспечения. 15
2.3. Руководство пользователя для «Калькулятора комплексных чисел». 18
Заключение 20
Список использованной литературы. 21
Форма TForm является базовым классом программы, которая содержит в себе остальные объекты. Класс (class) вслужит для обозначения множества объектов, которые обладают одинаковой структурой, поведением и отношениями с объектами из других классов.
На форму выводятся объекты TEdit (поля для ввода данных), TButton (кнопки для обработки команд пользователя), TLabel (метки для передачи информации пользователю), а также в неявном виде TComplex (комплексные числа введенные пользователем, а также результаты вычислений).
Рассмотрим подробнее эти классы:
Class TForm
Основное окно проекта,
имеет все соответствующие
Class TEdit
Основной класс на форме для ввода и вывода информации от пользователя. Основной атрибут - Text, строкового типа. Класс содержит процедуру KeyPress в которой обрабатывается корректность ввода числа с клавиатуры.
Class TLabel
Вспомогательный класс для уточнения пользователю назначения тех или иных полей ввода/вывода.
Class TComplex
Базовый класс проекта, содержащий в себе атрибуты комплексных чисел и процедуры конвертации комплексного числа и одной формы в другую.
Атрибуты класса:
Real - вещественная часть
комплексного числа в
Imag - мнимая часть комплексного числа в алгебраическом виде
Modul- модуль вектора числа в экспоненциальном виде
Arg - угол поворота вектора
комплексного числа в
Процедуры конвертации комплексного числа из одной формы в другую:
ArgToExp() - перевод числа из алгебраической формы в экспоненциальную
ExpToArg() - перевод числя из экспоненциальной формы в алгебраическую.
Class TButton
Кнопка для инициализации расчетов. Основная процедура - Click, нажатие кнопки мышкой.
Программа «Калькулятор комплексных
чисел» разработана в ранее
- ввести число
- рассчитать
Вариант использования «Ввести число» включает в себя дополнительно два варианта использования:
- Ввести 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;
В основном модуле хранятся процедуры доступа к базе данных. Листинг полного кода модуля приведен в Приложении.
После запуска программы происходит инициализация полей формы.
Внешний вид запущенной программы на Рисунке 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.
if Edit2.Text<>'' then Z1.Imag:=StrToFloat(Edit2.
if Edit3.Text<>'' then Z1.Modul:=StrToFloat(Edit3.
if Edit4.Text<>'' then Z1.Angle:=StrToFloat(Edit4.
if Edit5.Text<>'' then Z2.Real:=StrToFloat(Edit5.
if Edit6.Text<>'' then Z2.Imag:=StrToFloat(Edit6.
if Edit7.Text<>'' then Z2.Modul:=StrToFloat(Edit7.
if Edit8.Text<>'' then Z2.Angle:=StrToFloat(Edit8.
if (Edit1.Text<>'') and (Edit2.Text<>'') then
begin
Z1.Modul:=SQRT(SQR(Z1.Real)+
if Z1.Real=0 then Z1.Angle:=1.57
else if(Z1.Real>0) then Z1.Angle:=arctan(Z1.Imag/Z1.
else Z1.Angle:=3.14+arctan(Z1.Imag/
Edit3.Text:=floatToStrF(Z1.
Edit4.Text:=floatToStrF(Z1.
end;
if (Edit3.Text<>'') and (Edit4.Text<>'') then
begin
Z1.Real:=Z1.Modul*cos(Z1.
Z1.Imag:=Z1.Modul*sin(Z1.
Edit1.Text:=floatToStrF(Z1.
Edit2.Text:=floatToStrF(Z1.
end;
if (Edit5.Text<>'') and (Edit6.Text<>'') then
begin
Z2.Modul:=SQRT(SQR(Z2.Real)+
if Z2.Real=0 then Z2.Angle:=1.57
else if (Z2.Real>0) then Z2.Angle:=arctan(Z2.Imag/Z2.
else Z2.Angle:=3.14+arctan(Z2.Imag/
Edit7.Text:=floatToStrF(Z2.
Edit8.Text:=floatToStrF(Z2.
end;
if (Edit7.Text<>'') and (Edit8.Text<>'') then
begin
Z2.Real:=Z2.Modul*cos(Z2.
Z2.Imag:=Z2.Modul*sin(Z2.
Edit5.Text:=floatToStrF(Z2.
Edit6.Text:=floatToStrF(Z2.
end;
{Z1+Z2}
If Z1.Imag>=0 then Edit9.Text:=floatToStrF(Z1.
else Edit9.Text:=floatToStrF(Z1.
If Z2.Real>=0 then Edit9.Text:=Edit9.Text+'+'+
else Edit9.Text:=Edit9.Text+
If Z2.Imag>=0 then Edit9.Text:=Edit9.Text+'+j'+
else Edit9.Text:=Edit9.Text+'-j'+
Edit9.Text:=Edit9.Text+'='+
If (Z1.Imag+Z2.Imag)>=0 then Edit9.Text:=Edit9.Text+'+j'+
else Edit9.Text:=Edit9.Text+'-j'+
modul:=SQRT(SQR(Z1.Real+Z2.
if (Z1.Real+Z2.Real)=0 then Angle:=1.57
else if (Z1.Real+Z2.Real)>0 then Angle:=arctan((Z1.Imag+Z2.
else Angle:=3.14+arctan((Z1.Imag+
Edit9.Text:=Edit9.Text+'='+
{Z1-Z2}
If Z1.Imag>=0 then Edit10.Text:=floatToStrF(Z1.
else Edit10.Text:=floatToStrF(Z1.
If (-Z2.Real)>=0 then Edit10.Text:=Edit10.Text+'+'+
else Edit10.Text:=Edit10.Text+
If (-Z2.Imag)>=0 then Edit10.Text:=Edit10.Text+'+j'+
else Edit10.Text:=Edit10.Text+'-j'+
Edit10.Text:=Edit10.Text+'='+
If (Z1.Imag-Z2.Imag)>=0 then Edit10.Text:=Edit10.Text+'+j'+
else Edit10.Text:=Edit10.Text+'-j'+
modul:=SQRT(SQR(Z1.Real-Z2.
if (Z1.Real-Z2.Real)=0 then Angle:=1.57
else if (Z1.Real-Z2.Real)>0 then Angle:=arctan((Z1.Imag-Z2.
else Angle:=3.14+arctan((Z1.Imag-
Edit10.Text:=Edit10.Text+'='+
{Z1*Z2}
Edit11.Text:=floatToStrF(Z1.
'j)*'+floatToStrF(Z2.Modul,
floatToStrF(Z1.Modul*Z2.Modul,
floatToStrF(Z1.Modul*Z2.Modul*
if sin(Z1.Angle+Z2.Angle)>=0 then Edit11.Text:=Edit11.Text+'+j'+
else Edit11.Text:=Edit11.Text+'-j'+
{Z1/Z2}
Edit12.Text:=floatToStrF(Z1.
'j)/'+floatToStrF(Z2.Modul,
floatToStrF(Z1.Modul/Z2.Modul,
floatToStrF(Z1.Modul/Z2.Modul*
if sin(Z1.Angle-Z2.Angle)>=0 then Edit12.Text:=Edit12.Text+'+j'+
else Edit12.Text:=Edit12.Text+'-j'+
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(
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(
then Key:=#0;
end;
procedure TForm1.Edit3KeyPress(Sender: TObject; var Key: Char);
begin
if (Key in Separator)
then Key:=DecimalSeparator //Delphi-константа типа Char, равная символу-разделителю Windows
Информация о работе Разработка программы для решения комплексных чисел