Смекни!
smekni.com

Разработка приложений в визуальной среде Delphi на языке программирования Object Pascal (стр. 2 из 3)

программный: текстами программ [3].

2.1 Задача 1. Алгоритм решения

Для решения задачи 1 был разработан алгоритм, представленный в графическом виде. На рисунке 3 (Блок-схема решения задачи1) представлен алгоритм решения задачи в виде блок-схемы, а на рисунке 4 (Блок-схема подпрограммы задачи1) представлена блок-схема подпрограммы для вычисления расстояния до ближайшей стороны.


+ 

+ 

Рисунок 3 - Блок-схема решения задачи 1


При решении задач часто приходится выполнять многократные вычисления не только по одним и тем же формулам, но и по одним и тем же алгоритмам, в которых изменяются значения только некоторых переменных. В этом случае повторяющиеся части целесообразно оформлять в виде отдельных модулей - подпрограмм, дополняющих основную программу. Использование подпрограмм не только освобождает от переписывания повторяющихся фрагментов программного текста, но и улучшает наглядность и структуру программы, позволяет перейти к модульному программированию и оптимизировать программу, создать личную библиотеку программных модулей. В Delphi подпрограммы оформляют в виде процедур и функций, которые входят в основную программу путем соответствующего описания. Для решения задачи была использована подпрограмма, оформленная в виде функции пользователя, рисунок 4 (Блок-схема подпрограммы задачи 1).

Функция пользователя  это один из способов оформления подпрограммы или фрагмента программы, предназначенного для решения части общей задачи [4]. Функция пользователя предназначена для вычисления только одного значения и передается в основную программу как значение одной переменной с именем этой функции. Параметры, записываемые в обращении к функции, называются фактическими, а параметры, указанные в ее описании,  формальными. В теле функции обязательно должен быть хотя бы один оператор присваивания, где в левой части стоит имя функции, а в правой - её значение. Иначе значение функции не будет определено.

Рисунок 4 - Блок-схема подпрограммы задачи 1

2.2 Задача 2. Алгоритм решения

На основании созданной математической модели задачи 2 составим алгоритм программного приложения.

Алгоритм приложения задачи 2 является линейным, в нём операции выполняются последовательно одна за другой, в естественном и единственном порядке следования. Все операции имеют последовательное соединение логической связью передачи информационных потоков [3].

Для простых приложений не требуются блок - схемы алгоритмов. Составим алгоритм в вербальной форме.

В связи с изменением геометрических характеристик системы в зависимости от переменной W, алгоритм предполагает наличие следующих действий:

ввод значения радиуса барабана (R);

определение констант (размеры стержней АВ и СD);

определение значения угла W;

определение положения точки начала координат О (х0, у0);

определение значения переменной W1;

определение координат точек, которые определяют положение механизма;

производим рисование элементов на экране;

закрытие программного приложения.

3. Описание основных операторов, процедур, функций и методов

При написании программного кода задачи 1 использовался условный оператор. Он позволяет проверить некоторое условие и в зависимости от результатов проверки выполнить то или иное действие. Таким образом, условный оператор - это средство ветвления вычислительного процесса.

Структура условного оператора имеет следующий вид [1]:

if <условие> then <оператор1> else <оператор2>,

где: if/ then/ else - зарезервированные слова (если, то, иначе);

<условие> - произвольное выражение логического типа;

<оператор1>, <оператор2> - любые операторы языка Object Pascal.

Условный оператор работает по следующему алгоритму. Вначале вычисляется условное выражение <условие>. Если результат есть True (истина), то выполняется <оператор1>, а <оператор2> пропускается; если результат есть False (ложь), наоборот, <оператор1> пропускается, а выполняется <оператор2>. Условными называются выражения, имеющие одно из двух возможных значений: истина или ложь. Такие выражения чаще всего получаются при сравнении переменных с помощью операций отношения =, <>, >, >=, <, <=. Сложные логические выражения составляются с использованием логических операций and (логическое И), or (логическое ИЛИ) и not (логическое НЕ).

В процессе создания программного приложения задачи1 использовались следующие функции:

функция преобразования типа

StrToFloat (const S: string): Extended;

преобразует строку S в вещественное число [4]. Строка должна содержать знак, цифры и десятичный разделитель в порядке, характерном для записи десятичных дробей. Также строка может содержать мантиссу, состоящую из знака, буквы Е и целого числа. Пробелы в начале и в конце строки игнорируются. Если S имеет другой формат, функция возвращает сообщение об ошибке;

функция обратного преобразования типа

FloatToStr (Value: Extended): String;

преобразует вещественное число в строку, возвращаемый результат типа string [4]. Строка, параметр использовать необязательно. При указании параметра задается формат отображения;

математическая функция

Abs (n);

абсолютное значение n [1] ;

математическая функция

Sqrt (n);

квадратный корень из n [1] (n ≥ 0);

математическая функция

Sqr (n);

возведение в квадрат n [1].

В приложении задачи 1 использованы методы обработки событий, происходящих на форме, код которых создан во время работы приложения:

procedure Button1Click (Sender: TObject); - нажатие на кнопку Button1;

procedure Button2Click (Sender: TObject); - нажатие на кнопку Button2;

procedure Button3Click (Sender: TObject); - нажатие на кнопку Button3.

Для определения расстояния до ближайшей стороны в задаче 1 была написана пользовательская функция function Rj (k, x, n, y, m: real): real;.

В процессе создания программного приложения задачи 2 использовались следующие функции:

функция преобразования типа

StrToInt (const S: string): Integer;

преобразует строку S, в которую записано целое число, в целочисленный тип [4] ;

функция преобразования типа

Round (x: real): integer;

преобразует вещественное число в целое [1] ;

математическая функция Sin (a); - синус угла а, заданного в радианах [1] ;

математическая функция Cos (a); - косинус угла а, заданного в радианах [1].

В приложении задачи 2 использованы методы обработки событий, происходящих на форме, код которых создан во время работы приложения:

procedure Button1Click (Sender: TObject); - нажатие на кнопку Button1;

procedure SpinEdit1Change (Sender: TObject); - изменение содержимого SpinEdit.

Методы объекта Canvas, обеспечивающие рисование на элементах формы:

MoveTo (x,y) - перемещает в указанную позицию (x,y) карандаш, не вычерчивает никаких графических примитивов;

LineTo (x,y) - рисует линию, рисование осуществляется из текущей позиции карандаша в позицию (х, у);

Rectangle (x1,y1,x2,y2) - рисует прямоугольник, параметры x1, y1, x2, y2 - координаты находящихся на одной диагонали углов прямоугольника;

Ellipse (x1,y1,x2,y2) - рисует эллипс, параметры x1, y1, x2, y2 - координаты диагональных углов области, внутри которой вычерчивается эллипс;

TextOut (x,y, <Текст>); - выводит текст на графическую поверхность, параметры (х, у) задают положение текста на экране, параметр <Текст> содержит строку текста, которую необходимо отобразить [1].

При рисовании графических примитивов использовался объект "карандаш" (Canvas. Pen), с помощью него прорисовка линий осуществлялась с различной толщиной и с различным стилем [1]:

Pen. Style: =<const>; - определяет вид линии (задается специальными константами: psSolid- сплошная линия, psDot- пунктирная линия с короткими штрихами, psDash- пунктирная линия с длинными штрихами);

Pen. Width: =<числовое значение в пикселях>; - задает толщину выводимой линии в пикселях.

4. Текст приложений

Программный код разработанного приложения к задаче 1.

unit Unit1;

interface

uses

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

Dialogs, StdCtrls,Math;

type

TForm1 = class (TForm)

Button1: TButton;

Button2: TButton;

Edit1: TEdit;

Edit2: TEdit;

Edit3: TEdit;

Edit4: TEdit;

Edit5: TEdit;

Edit6: TEdit;

Edit7: TEdit;

Edit8: TEdit;

Label1: TLabel;

Label2: TLabel;

Label3: TLabel;

Label4: TLabel;

Label5: TLabel;

Label6: TLabel;

Label8: TLabel;

Button3: TButton;

Label9: TLabel;

Label11: TLabel;

Label12: TLabel;

Label13: TLabel;

Label14: TLabel;

Label15: TLabel;

procedure Button2Click (Sender: TObject);

procedure Button1Click (Sender: TObject);

procedure Button3Click (Sender: TObject);

private

{ Private declarations }

public

{ Public declarations }

end;

var

Form1: TForm1;

implementation

{$R *. dfm}

procedure TForm1. Button2Click (Sender: TObject);

begin

close;

end;

procedure TForm1. Button3Click (Sender: TObject);

begin

Label15. Caption: = ('');

end;

procedure TForm1. Button1Click (Sender: TObject);

var

x1,x2,x3,x0,y1,y2,y3,y0: real;

a,b,c,a1,b1,c1,a2,b2,c2,a3,b3,c3,t1,t2,t3: real;

d1,d2,d3,d: real;

h,g,w: real;

// подпрограмма определения расстояния до ближайшей стороны

function Rj (k,x,n,y,m: real): real;

var

d0: real;

begin

d0: =abs (k*x+n*y+m) / (sqrt (sqr (k) +sqr (n)));

Rj: =d0;

end;

begin

// ввод координат вершин треугольника

x1: =strtofloat (edit1. text);

y2: =strtofloat (edit2. text);

x2: =strtofloat (edit3. text);

y2: =strtofloat (edit4. text);

x3: =strtofloat (edit5. text);

y3: =strtofloat (edit6. text);

// ввод координат точки

x0: =strtofloat (edit7. text);

y0: =strtofloat (edit8. text);

// вычисление длин сторон треугольника

a: =sqrt (sqr (x2-x1) +sqr (y2-y1));

b: =sqrt (sqr (x3-x2) +sqr (y3-y2));

c: =sqrt (sqr (x1-x3) +sqr (y1-y3));

// проверка условий существования треугольника

h: = a+b; g: =b+c; w: =a+c;

if ( (a>=g) or (b>=w) or (c>=h)) then Label15. Caption: ='Нет решения'

elsebegin

// вычисление параметров уравнений сторон треугольника

a1: =y2-y1; b1: =x1-x2; c1: = (-x1) * (y2-y1) +y1* (x2-x1);

a2: =y3-y2; b2: =x2-x3; c2: = (-x2) * (y3-y2) +y2* (x3-x2);

a3: =y1-y3; b1: =x3-x1; c3: = (-x3) * (y1-y3) +y3* (x1-x3);

t1: =sqrt (sqr (a1) +sqr (b1));

t2: =sqrt (sqr (a2) +sqr (b2));

t3: =sqrt (sqr (a3) +sqr (b3));

// проверка условия существования формулы для нахождения кратчайшего расстояния