Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Программирование в Delphi_2013.doc
Скачиваний:
0
Добавлен:
01.05.2025
Размер:
1.65 Mб
Скачать

Понятие алгоритма

Алгоритм – четкое описание последовательности действий, которые необходимо выполнить при решении задачи.

Разработка алгоритма решения задачи – это разбиение задачи на последовательно выполняемые этапы.

Способы представления алгоритмов:

  • на естественном языке;

  • в виде блок-схемы;

Изображение алгоритма в виде блок-схемы

Блок-схемой называется наглядное графическое изображение алгоритма.

В блок-схеме отдельные этапы алгоритма изображают при помощи различных геометрических фигур – блоков.

Последовательность выполнения этапов указываются при помощи стрелок, соединяющих эти фигуры. Блоки сопровождаются надписями.

Типичные действия алгоритма:

Блок начала (конца) алгоритма

Надпись: «начало» («конец»).

Блок ввода-вывода данных

Надпись: «ввод» («вывод»)

и список переменных вводимых (выводимых).

Блок решения (арифметический)

Надпись: операция или группа операций.

Условный блок

Надпись: логическое условие.

Рассмотренные блоки позволяют описать три основные конструкции алгоритма.

Линейный процесс это конструкция, представляющая собой последовательное выполнение двух или более операторов. Разветвляющийся процесс задает выполнение одного или другого оператора в зависимости от выполнения условия.

Циклический процесс задает многократное выполнение оператора или группы операторов.

Каждая из основных конструкций имеет один вход и один выход. Это позволяет вкладывать конструкции друг в друга произвольным образом и составлять алгоритмы для решения задач любой сложности.

Рассмотрим операторы языка Pascal, реализующие основные конструкции алгоритма.

Оператор присваивания

В Delphi оператор присваивания состоит из двух символов: двоеточия и знака равенства. Эти символы всегда пишут слитно. Пробелы допускаются перед символом двоеточия и после символа равенства.

В общем случае оператор присваивания имеет вид:

имя_переменной := значение;

где значение это выражение, переменная, константа или функция.

Выполняется оператор так. Сначала вычисляется значение выражения указанного в правой части оператора, а затем его результат записывается в область памяти, имя которой указано слева.

Например, запись a:=b означает, что переменной а присваивается значение b.

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

Оператор присваивания, как и любой другой оператор Delphi заканчивается точкой с запятой.

Например,

b:=3;

a:=b;

c:=a+2*b;

c:=c+1;

a:=a*3;

ЗАДАЧА. Пусть в переменной а хранится значение равное 3, а в переменную b записали число 5. Поменять местами значения переменных а и b.

Для решения задачи понадобится дополнительная переменная c. В ней временно сохраняется значение переменной а. Затем, значение переменной b записывается в переменную a, а значение переменной c в переменную b.

с:=a; // Шаг 1. с=3

a:=b; // Шаг 2. a=5

b:=c; // Шаг 3. b=3

ЗАДАЧА. Заданы длины двух катетов прямоугольного треугольника a, b. Вычислить длину гипотенузы c и величины двух его углов α и β.

Математические формулы, необходимые для решения задачи:

, , β=π/2-α.

Этапы решение задачи:

  1. Определение значений a, b (ввод величин a и b в память компьютера).

  2. Расчет значений c, α и β по приведенным выше формулам.

  3. Вывод значений c, α и β.

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

Вид формы:

Заголовки компонентов формы.

Компонент

Свойство Caption

Form1

Параметры треугольника

Label1

Катеты треугольника

Label2

a=

Label3

b=

Label4

Гипотенуза с=

Label5

Угол alfa=

Label5

Угол betta=

Button1

ВЫЧИСЛИТЬ

Двойной щелчок по кнопке «ВЫЧИСЛИТЬ» приведет к созданию процедуры:

procedure TForm1.Button1Click(Sender: TObject);

begin

end;

и ее описанию в разделе interface.

Созданная процедура не содержит ни одной команды. Задача программиста заполнить шаблон описаниями и операторами. В нашем случае процедура будет иметь вид:

procedure TForm1.Button1Click(Sender: TObject);

var a,b,c,alfa,betta: real;

begin

a:=StrToFloat(Edit1.Text);

b:=StrToFloat(Edit2.Text);

c:=sqrt(sqr(a)+sqr(b));

alfa:=arctan(a/b);

betta:=pi/2-alfa;

alfa:=alfa*180/pi;

betta:=betta*180/pi;

Label4.Caption:='Гипотенуза с='+FloatToStr(c);

Label5.Caption:='Угол alfa='+FloatToStr(alfa);

Label6.Caption:='Угол betta='+FloatToStr(betta);

end;

В результате весь программный код имеет вид:

unit Unit1;

interface

uses

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

type

TForm1 = class(TForm)

Label1: TLabel;

Label2: TLabel;

Label3: TLabel;

Label4: TLabel;

Label5: TLabel;

Label6: TLabel;

Edit1: TEdit;

Edit2: TEdit;

Button1: TButton;

procedure Button1Click(Sender: TObject);

private

{ Private declarations }

public

{ Public declarations }

end;

var

Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);

var a,b,c,alfa,betta:real;

begin

a:=StrToFloat(Edit1.Text);

b:=StrToFloat(Edit2.Text);

c:=sqrt(sqr(a)+sqr(b));

alfa:=arctan(a/b);

betta:=pi/2-alfa;

alfa:=alfa*180/pi;

betta:=betta*180/pi;

Label4.Caption:='Гипотенуза с='+FloatToStr(c);

Label5.Caption:='Угол alfa='+FloatToStr(alfa);

Label6.Caption:='Угол betta='+FloatToStr(betta);

end;

end.

Результат работы программы

ЗАДАЧА. Зная a, b, c – длины сторон треугольника, вычислить площадь S и периметр P этого треугольника.

Входные данные: a, b, c.

Выходные данные: S, P.

Для вычисления площади применим формулу Герона:

,

где r – полупериметр.

Компонентам типа надпись Label5 и Label6, предназначенным для вывода результатов, определим свойство

Visible=false.

Компонентам, предназначенным для ввода данных Edit1, Edit2, Edit3,

определим свойство Text - пусто, чтобы пользователю было удобнее вводить исходные данные

По умолчанию свойство Text совпадает с именем компонента, и пользователю пришлось бы их удалять перед вводом исходных данных.

Разместим на форме две кнопки. Будет обрабатываться два события:

  • щелчок по кнопке Button1 запускает расчет по формулам;

  • щелчок по кнопке Button2 закрывает форму.

Программа:

unit Unit1;

interface

uses

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

Forms, Dialogs, StdCtrls;

type

TForm1 = class(TForm)

Label1: TLabel;

Label2: TLabel;

Label3: TLabel;

Label4: TLabel;

Label5: TLabel;

Button1: TButton;

Button2: TButton;

Edit1: TEdit;

Edit2: TEdit;

Edit3: TEdit;

procedure Button1Click(Sender: TObject);

procedure Button2Click(Sender: TObject);

private

{ Private declarations }

public

{ Public declarations }

end;

var

Form1: TForm1;

implementation

{$R *.dfm}

//кнопка ВЫЧИСЛИТЬ.

procedure TForm1.Button1Click(Sender: TObject);

var

a,b,c,S,r:real;

begin

//Ввод исходных данных.

a:=StrToFloat(Edit1.Text);

b:=StrToFloat(Edit2.Text);

c:=StrToFloat(Edit3.Text);

//Вычисление полупериметра.

r:=(a+b+c)/2;

//Вычисление площади.

S:=sqrt(r*(r-a)*(r-b)*(r-c));

//Визуализация компонента.

Label5.Visible:=true;

//Форматированный вывод.

Label5.Caption:= 'Периметр треугольника'+chr(13)

+FloatToStrF(2*r,ffFixed,5,2)+chr(13)+'Площадь треугольника'+chr(13)

+FloatToStrF(S,ffFixed,5,2);

end;

//Кнопка ЗАВЕРШЕНИЕ РАБОТЫ.

procedure TForm1.Button2Click(Sender: TObject);

begin

Close;

end;

end.