Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
информатика АиУ.doc
Скачиваний:
20
Добавлен:
09.11.2018
Размер:
1.56 Mб
Скачать

3. Блок схема алгоритма

Рис.7.1. Блок схема алгоритма решения квадратного уравнения

4. Реализация алгоритма в среде Delphi

После запуска Delphi и открытия окна формы (модуль Form1) разместим в нем следующие объекты:

  • поля редактирования Edit1–Edit3 – для ввода исходных коэффициентов уравнения a,b,c соответственно;

  • метки Label1–Label9 – для вывода заголовков, пояснений и результатов;

  • кнопки Button1–Button3 – для управления работой программы.

Для этого на панели визуальных компонент (вкладка standard) щелчком мыши трижды выбирается объект Edit и вставляется в указываемое курсором место формы. Затем то же самое проделывается девять раз с объектом Label и три раза с объектом Button. Далее с помощью инспектора объектов (object inspector) определяются заголовки для объектов Form1, Label1 – Label8 путем ввода соответствующего текста в поле caption вкладки properties. Например, для окна Form1 в поле Caption вводится текст «Вычисление корней квадратного уравнения»; для метки Label6 – текст «Результаты счета», для метки Label9 поле caption остается свободным, для кнопки Button1 – текст «Ввод коэффициентов уравнения» и т.д.

Общий вид окна формы с выбранными компонентами представлен на рис.7.2.

Рис.7.2. Окно формы (модуль Form1) программы в Delphi

Отметим, что при размещении объектов в окне формы автоматически добавляются соответствующие этим объектам описания в исходный код программы (модуль Unit1). Таким образом, после того как в окне формы размещены все объекты, в окне кода будет представлен следующий код:

Unit Unit1;

interface

uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs;

type TForm1 = class(Tform)

Label1: Tlabel;

Label2: Tlabel;

Label3: Tlabel;

Label4: Tlabel;

Label5: Tlabel;

Label6: Tlabel;

Label7: Tlabel;

Label8: Tlabel;

Label9: Tlabel;

Label10: Tlabel;

Label11: Tlabel;

Edit1: Tedit;

Edit2: Tedit;

Edit3: Tedit;

Button1: Tbutton;

Button2: Tbutton;

Button3: Tbutton;

private

{ Private declarations }

public

{ Public declarations }

end;

var Form1: Tform1;

implementation

{$R *.dfm}

end.

Для управления работой программы с каждой кнопкой связывается событие «щелкнуть» и задается, что при щелчке на кнопке 1 (объект Button1) программа должна ввести значения коэффициентов a,b,c исходного уравнения из полей редактирования (объекты Edit1–Edit3) и присвоить их переменным a,b,c соответственно. Для этого после двойного щелчка кнопки Button1 и попадания в окно кода вводятся три оператора присваивания:

a:=StrToFloat(Edit1.text);

b:=StrToFloat(Edit2.text);

c:=StrToFloat(edit3.text);

Здесь стандартная функция StrToFloat преобразует символьное представления значения поля text объекта edit в вещественное значение.

Далее после двойного щелчка кнопки Button2 и попадания снова в окно кода вводятся операторы, реализующие алгоритм нахождения корней квадратного уравнения и их вывод в поле caption меток Label7–Label9. Аналогично после двойного щелчка кнопки Button3 и попадания в окно кода вводится оператор вызова процедуры Close для завершения работы программы. В текст программы добавляются комментарии, определяются переменные a,b,c,x1,x2 в операторе var (добавляя строку a,b,c,x1,x2: Real; после строки var Form1: TForm1;) и с помощью команды Save as меню Fyle созданный модуль с кодом программы сохраняется в файле kvur.pas. В результате исходный код программы (модуль kvur) будет иметь следующий вид

unit kvur;

{ * * * * * * * * * * * * * * * * * * *}

{ Решение квадратного уравнения }

{ * * * * * * * * * * * * * * * * * * * }

interface

uses Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, Menus, Grids, ExtCtrls;

type TForm = class(TForm)

Label1: Tlabel;

Label2: Tlabel;

Label3: Tlabel;

Label4: Tlabel;

Label5: Tlabel;

Label6: Tlabel;

Label7: Tlabel;

Label8: Tlabel;

Label9: Tlabel;

Label10: Tlabel;

Label11: Tlabel;

Edit1: Tedit;

Edit2: Tedit;

Edit3: Tedit;

Button1: Tbutton;

Button2: Tbutton;

Button3: Tbutton;

procedure Button1Click(Sender: TObject);

procedure Button2Click(Sender: TObject);

procedure Button3Click(Sender: TObject);

private

{ Private declarations }

public

{ Public declarations }

end;

var Form1: TForm1;

a,b,c,x1,x2: Real;

implementation

{$R *.DFM}

procedure TMyForm.Button2Click(Sender: TObject);

{Ввод коэффициентов исходного уравнения }

begin

a:=StrToFloat(Edit1.text);

b:=StrToFloat(Edit2.text);

c:=StrToFloat(edit3.text);

end;

procedure TMyForm.Button1Click(Sender: TObject);

{Завершение работы программы}

begin

close

end;

procedure TMyForm.Button3Click(Sender: TObject);

{Решение квадратного уравнения }

var d:real;

begin

label7.Caption:='';

label10.Caption:='';

label11.Caption:='';

if (a<>0) then begin

d:=b*b-4*a*c;

if d>=0 then

begin

x1:=(-b-sqrt(d))/(2*a);

x2:=(-b+sqrt(d))/(2*a);

label9.Caption:='уравнение имеет два корня';

label10.Caption:=floatToStr(x1);

label11.Caption:=floatToStr(x2);

end

else

begin

label9.Caption:='дискриминант отрицательный, решения комплексны';

label10.Caption:='нет';

label11.Caption:='нет';

end end

else if (b<>0) then

begin

x1:=-c/b;

label9.Caption:='уравнение имеет один корень';

label10.Caption:=floatToStr(x1);

label11.Caption:=' нет ';

end else

if (c<>0) then

begin label9.Caption:='уравнение не имеет решений';

label10.Caption:='нет';

label11.Caption:='нет';

end

else

begin

label9.Caption:='решениe - любое x';

label10.Caption:='любое';

label11.Caption:='любое';

end;

end; end.