
- •Программирование в Delphi
- •Структура проекта Delphi
- •Данные в Delphi
- •Символьный тип данных
- •Целочисленный тип данных
- •Вещественный тип данных
- •Тип дата-время
- •Логический тип данных
- •Var переменные: новый_тип;
- •Var имя:(знач_1,знач_2,…);
- •Указатели
- •Операции и выражения
- •Арифметические операции
- •Операции отношения
- •Логические операции
- •Стандартные функции
- •Понятие алгоритма
- •Изображение алгоритма в виде блок-схемы
- •Оператор присваивания
- •Составной оператор
- •Условные операторы
- •Вывод сообщений
- •Обработка ошибок
- •Ораторы цикла
- •Оператор цикла с предусловием
- •Оператор цикла с постусловием
- •Оператор цикла с заданным числом повторений
- •Операторы передачи управления
Понятие алгоритма
Алгоритм – четкое описание последовательности действий, которые необходимо выполнить при решении задачи.
Разработка алгоритма решения задачи – это разбиение задачи на последовательно выполняемые этапы.
Способы представления алгоритмов:
на естественном языке;
в виде блок-схемы;
Изображение алгоритма в виде блок-схемы
Блок-схемой называется наглядное графическое изображение алгоритма.
В блок-схеме отдельные этапы алгоритма изображают при помощи различных геометрических фигур – блоков.
Последовательность выполнения этапов указываются при помощи стрелок, соединяющих эти фигуры. Блоки сопровождаются надписями.
Типичные действия алгоритма:
Блок начала (конца) алгоритма
Надпись: «начало» («конец»).
Блок ввода-вывода данных
Надпись: «ввод» («вывод»)
и список переменных вводимых (выводимых).
Блок решения (арифметический)
Надпись: операция или группа операций.
Условный блок
Надпись: логическое условие.
Рассмотренные блоки позволяют описать три основные конструкции алгоритма.
Линейный процесс это конструкция, представляющая собой последовательное выполнение двух или более операторов. Разветвляющийся процесс задает выполнение одного или другого оператора в зависимости от выполнения условия.
Циклический процесс задает многократное выполнение оператора или группы операторов.
Каждая из основных конструкций имеет один вход и один выход. Это позволяет вкладывать конструкции друг в друга произвольным образом и составлять алгоритмы для решения задач любой сложности.
Рассмотрим операторы языка 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-α.
Этапы решение задачи:
Определение значений a, b (ввод величин a и b в память компьютера).
Расчет значений c, α и β по приведенным выше формулам.
Вывод значений 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.