Программирование модуля main.pas

Щелкните на компоненте кнопки, перейдите в Инспекторе объектов на закладку Events (события), найдите там событие OnClick (на щелчок) и справа от него в строке ввода дважды щелкните мышью. Эта ситуация показана на рис. 1.5.

Рис.1.5. Создание события OnClick для кнопки bCalc

Обратите внимание, что в секции implementation среда Delphi создала новую процедуру с заголовком и блоком begin... end.

Между этими служебными словами теперь надо вставить программный код, который позволит вычислить значение указанной в задании функции y (x) при заданном компонентом аргумента значении переменной x.

Программный код обработчика события от щелчка на кнопке имеет следующий вид:

procedure TForm1.bCalcClick(Sender: TObject);
var x,y: Double;
begin
eFunc.Text := '';
if TryStrToFloat(eArg.Text,x) then
begin
y:= Sqrt(2+x*x);
eFunc.Text:= FloatToStr(y);
end;
end;

Дадим этому коду подробное объяснение.

Вслед за заголовком в процедуре объявлено 2 локальных переменных xиyтипа Double. Этот тип представляет собой стандартный тип вещественных чисел среды Delphi. Поскольку эти переменные объявлены внутри процедуры как локальные, то их объявление распространяется лишь на эту процедуру (при необходимости переменные с такими же именами могут быть использованы и в других процедурах, но это будут уже совсем другие переменные). Между словами begin и end расположен программный код, при выполнении которого произойдет вычисление значения функции и вывод результата в компонент eFunc после того как в запущенной на выполнение программе пользователь щелкнет на кнопке с надписью "Выполнить". Этот код представляет собой два оператора. Оператор eFunc.Text:= ''; очищает тест компонента eFunc. Второй оператор это условный оператор вида ifL then a;...(1) где L- логическое условие, a- оператор, который нужно выполнить, если выполнится условие L. В данной процедуре условие L представлено обращением к логической функции TryStrToFloat, код которой содержится в модуле SysUtils. Заголовок функции имеет вид function TryStrToFloat(const S: string; out Value: Extended): Boolean; Функция получает на вход константу S типа string в виде строки символов и пытается превратить эту строку в вещественное число. Если это ей удается, то такое число помещается в переменную Value, типа Extended (расширенный по сравнению с Double вещественный тип), а сама функция получает значение true (истина). В случае неудачи функция получает значение false (ложь). В нашем случае на место S будет подставлен текст компонента eArg.Text, результат конвертации - переменная x. То есть, если при выполнении функции TryStrToFloatей удастся текст преобразовать текст eArg.Textв вещественное число, то оно будет помещено в переменную x. При этом сама функция получит значение true, и следовательно, выполнится условие, которое записано в нашей процедуре. Если оно выполнится, то далее будет выполнен оператор a, содержащийся в условном операторе (1). В нашем случае оператор a представляет собой операторные скобки begin y:= Sqrt(2+Sqr(x)); eFunc.Text:= FloatToStr(y); end; в которой заключено 2 оператора, расположенные между скобками begin и end. Первый оператор вычисляет через x значение функции y, где Sqrt - функция, вычисляющая квадратный корень, а Sqr - функция возведения числа в квадрат. Символом ":=" обозначена операция присваивания переменной yвычисленного значения арифметического выражения, расположенного справа от этого символа. То есть с помощью такого оператора будет вычислено значение функции, указанной в задании, и передано в переменную y. Следующим оператором функция FloatToStr произведет противоположную по сравнению с TryStrToFloatоперацию, а именно, преобразует число yв строку символов eFunc.Text. В результате пользователь увидит в компоненте eFuncзначение функции y в виде строки символов.

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

1.6. Компиляция приложение, создание загрузочного модуля и выполнение приложения

Нажмите сочетания клавиш Ctrl+F9. При этом Delphi приступит к компиляции приложения. Компиляция состоит из двух этапов - сначала модули переводятся с языка Pascal в объектный код, затем к объектному коду подключается код вызываемых процедур и функций, в результате чего создается готовое к выполнению приложение. В нашем случае это будет приложение с именем Theme1.exe. Такое приложение будет создано при условии, что в тексте программного кода нет ошибок, а также запрашиваемые к подключению внешние процедуры и функции будут найдены и подключены.

Запустите Проводник и откройте папку с файлами приложения. Ниже на рис. 1.6 дан их список.

Рис.1.6. Список файлов, созданных Delphi

Среди них есть файл main. dcu, который является объектным кодом модуля main. pas. Файлы, помеченный символом " ~ " - временные файлы, которые представляют предыдущие по отношению к сохраненным их версии. Среди файлов есть загрузочный модуль готового к запуску приложения Theme1.exe.

Запустите его, затем щелкните на кнопке "Выполнить". Результат показан на рис. 1.7.

Рис. 1.7. Результат вычисления значения функции

Введите в строку аргумента какое-нибудь другое число или набор символов и снова щелкните на кнопке запуска процедуры вычисления. Ответьте на вопрос почему получился результат, который показан на рис. 1.8?

Рис. 1.8.

Часть II. Табуляция функции Задание. Дана функция Составить таблицу её значений для x = 0; 0,1; 0,2;...; 0,8; 0,9; 1. 2.1. Доработка интерфейса Положите на форму компонент Manifest (закладка Win 32). Это позволит автоматически улучшить внешний вид компонентов в запущенной программе. Добавьте новую кнопку с именем bTable и надписью "Табуляция". Ниже положите компонент StringGrid (закладка Additional). Этот компонент представляет собой прямоугольную сетку, в каждую ячейку которой можно помещать строковые константы. Измените имя сетки на Sg. Задайте для нее количество столбцов CollCount = 3, ширину столбцов DefaultColWidth = 40, высоту строк DefaultRowHeight = 16, количество строк RowCount = 12. В результате окно формы примет вид рис. 2.1. Рис. 2.1. Вид формы с новой кнопкой и сеткой строк   2.2. Процедура вывода таблицы в сетку Создайте событие OnClick для кнопки bTable и внесите в него следующий код procedureTForm1.bTableClick(Sender: TObject); var i: Integer; x,y: Double; begin Sg.Cells[0,0]:= '№'; Sg.Cells[1,0]:= 'X'; Sg.Cells[2,0]:= 'Y(X)'; for i:= 0 to 10 do begin x:= 0.1*i; y:= Sqrt(2+Sqr(x)); Sg.Cells[0,i+1]:= IntToStr(i); Sg.Cells[1,i+1]:= RealToStr(x,3); Sg.Cells[2,i+1]:= RealToStr(y,3); end; end; Комментарий к этому коду дан ниже.
В данной процедуре с помощью оператора i: Integer; объявлена целочисленная переменная i, то есть она может принимать значения только целочисленные значения. Ниже объявлено две вещественных переменных xи y. Первая и них предназначена для значений аргумента, вторая - для вычисленных значений функции. В теле процедуры, которое заключено между наружными словами begin... end, производится наполнение сетки Sg числами. Сетка имеет свойствоCells[j, i] - значение ячейки сетки расположенной на пересечении столбца с номером jи строки с номеромi. Оператор Sg.Cells[0,0]:= '№'; запишет текст, заключенный между апострофами, т.е. символ №, в ячейку [0,0], которая находится на пересечении 0-стобца и 0-строки. Это видно на рис. 2.2, где выведена таблица значений функции. Операторы Sg.Cells[1,0]:= 'X'; Sg.Cells[2,0]:= 'Y(X)'; выведут надписи на заголовках 2-го и 3-го столбцов (см. рис. 2.2). Далее следует цикл for i:= 0 to 10 do begin x:= 0.1*i; y:= Sqrt(2+Sqr(x)); Sg.Cells[0,i+1]:= IntToStr(i); Sg.Cells[1,i+1]:= RealToStr(x,3); Sg.Cells[2,i+1]:= RealToStr(y,3); end; В нем оператор заголовка цикла for i:= 0 to 10 do задает перебор значений переменной i в диапазоне от 0 до 10 с шагом 1., то есть 0,1,2,3,...,8,9,10. При каждом значении этой переменной сначала вычисляется аргумент x как произведение i на число 0.1. Так при i = 0 будетx = 0, i = 1 будет x = 0.1 и т. д., обеспечив тем самым проход по всем значениям аргумента, которые указаны в задании. Затем при помощи оператора y:= Sqrt(2+Sqr(x)); будет вычислено значение функции yпо аргументу x. После этого операторами Sg.Cells[0,i+1]:= IntToStr(i); Sg.Cells[1,i+1]:= RealToStr(x,3); Sg.Cells[2,i+1]:= RealToStr(y,3); в строку i+1 сетки Sgбудут выведены номер точки, значение аргумента и значение функции, как это видно из рис. 2.2. Перед выводом с помощью функции IntToStr целое i будет предварительно преобразовано из числового формата в строковый и только потом присвоено соответствующей ячейке сетки. Аналогично, вещественные числа x и y перед выводом в сетку преобразуются с помощью функции RealToStr в строку, при этом указано, что при конвертации числа в строку, надо учитывать лишь первых 3 знака в дробной части чисел. Последовательно пройдя в цикле по всем значением его счетчика i, будет сформирована и выведена в сетку таблица значений функции y(x). Результат вычислений показан на рис. 2.2..
Рис.2.2. Сетка с таблицей значений функции

Часть III. Построение графика функции

Задание. Дана функция

Вывести ее график для точек x = 0; 0,1; 0,2;...; 0,8; 0,9; 1.


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: