Лабораторная работа №1
Программирование линейных алгоритмов
Цель лабораторной работы: изучить основные элементы визуальной среды, освоить использование простейших компонентов DELPHI для ввода/вывода данных, и создать приложение, которое использует линейный алгоритм.
1.1.Визуальная среда DELPHI
При запуске DELPHI на экране появляется панель интерфейса, показанная на рис. 1.1. Среда DELPHI визуально реализуется в виде нескольких одновременно раскрытых на экране монитора окон. Количество, расположение, размер и вид окон может изменяться программистом.
Главное окно всегда присутствует на экране и предназначено для управления процессом создания приложения.
Главное меню содержит все необходимые средства для управления проектом.
Пиктограммы главного меню облегчают доступ к наиболее часто применяемым командам.
Палитра Компонентов обеспечивает доступ к набору библиотечных программ среды DELPHI, которые описывают некоторый элемент (компонент), помещенный программистом в окно Формы. Каждый компонент имеет определенный набор свойств, которые программист может выбирать и изменять по своему усмотрению. Например, заголовок окна, надпись на кнопке, размер, цвет и тип шрифта и др. Свойства компонентов приведены в HELP.
Окно Инспектора Объектов предназначено для изменения свойств
выбранных компонентов и состоит из двух страниц. Страница Properties
(Свойства) предназначена для изменения необходимых свойств компонента.
Страница Events (События) – для определения реакции компонента на то или
иное событие (например, щелчок кнопки “мыши ”).
Окно Формы представляет собой интерфейс проектируемого Windows-
приложения. В это окно на этапе проектирования приложения помещаются
необходимые компоненты, которые разработчик берет из Палитры Компонентов.
Каждой Форме проекта соответствует модуль (Unit), текст которого на языке
Object Pascal размещается в окне Редактора Кода.
Окно Редактора Кода предназначено для просмотра, создания и
редактирования текстов модулей проекта. При первоначальной загрузке в окне
Редактора Кода находится текст модуля, содержащий минимальный набор
операторов для нормального функционирования пустой Формы в качестве Windows-
приложения. При размещении некоторого компонента в окне Формы, текст модуля
автоматически дополняется необходимыми операторами.
Обо всех происходящих в системе событиях, таких как создание Формы, нажатие кнопки мыши или клавиатуры и т.д., ядро Windows информирует окна путем посылки соответствующих сообщений. Среда DELPHI принимает и обрабатывает сообщения с помощью обработчиков событий (например, щелчок кнопки “мыши” – событие OnClick, создание Формы – OnCreate). Наиболее часто применяемые события представлены в табл. 1.1.
|Таблица 1.1 |
|Событие |Описание события |
|OnActivate |Возникает при активизации Формы |
|OnCreate |Возникает при создании Формы. В обработчике данного события|
| |следует задавать действия, которые должны происходить в |
| |момент создания Формы, например установка начальных |
| |значений. |
|OnClick |Возникает при нажатии кнопки мыши в области компонента. |
|OnDblClick |Возникает при двойном нажатии кнопки мыши в области |
| |компонента |
|OnKeyPress |Возникает при нажатии клавиши на клавиатуре. Параметр Key |
| |имеет тип Char и содержит ASCII-код нажатой клавиши |
| |(клавиша Enter клавиатуры имеет код #13, клавиша Esc - #27 |
| |и т.д.). Обычно это событие используется в том случае, |
| |когда необходима реакция на нажатие одной из клавиш. |
|OnKeyDown |Возникает при нажатии клавиши на клавиатуре. Обработчик |
| |этого события получает информацию о нажатой клавише и |
| |состоянии клавиш Shift, Alt и Ctrl, а также о нажатой |
| |кнопке мыши. |
Для создания обработчика события программисту необходимо раскрыть
список компонентов в верхней части окна Инспектора Объектов и выбрать
необходимый компонент. Затем, на странице Events Инспектора Объектов,
нажатием левой клавиши мыши выбрать название обработчика и дважды щелкнуть
по его правой (белой) части. В ответ DELPHI активизирует окно Редактора
Кода модуля и покажет заготовку процедуры обработки выбранного события. Для
каждого обрабатываемого события в тексте модуля организуется процедура
(procedure), между ключевыми словами begin и end которой программист на
языке Object Pascal записывает требуемый алгоритм обработки события.
Переключение между окном Формы и окном Редактора Кода осуществляется кнопкой главного меню с пиктограммой [pic] или клавишей F12.
1.2. Пример создания приложения
Задание: создать Windows-приложение для вычисления выражения
[pic] .
Численные значения данных x, y и z занести с клавиатуры в соответствующие
поля панели интерфейса. Один из возможных вариантов панели интерфейса
создаваемого приложения показан на рис. 1.2.
1.2.1. Сохранение проекта
В процессе проектирования приложения DELPHI создает несколько файлов
- проект. Каждый проект целесообразно хранить в отдельной, заранее
созданной папке. С помощью подходящего приложения Windows создадим папку и
назовем ее, например, LAB1.
Для сохранения проекта откройте в главном меню пункт File и щелкните
“мышью” на опции Save Project As…(Сохранить проект как…). Сначала DELPHI
откроет панель диалога Save Unit1 As (Сохранить модуль как) для сохранения
модуля проекта. В этой панели найдем созданную папку LAB1 и сохраним в ней
модуль под именем, например, UnLinAlg. Обратите внимание на то, что DELPHI
по умолчанию присвоит этому файлу тип Delphi unit c расширением *.pas.
Затем откроется панель диалога Save Project1 As . Назовем наш проект,
например, PrLinAlg и сохраним его в этой же папке. Здесь DELPHI даст файлу
тип Delphi project и расширение *.dpr. Убедитесь в том, что главное окно
DELPHI теперь называется PrLinAlg, окно главного файла проекта-
PrLinAlg.dpr, а окно модуля проекта- UnLinAlg.pas.
Старайтесь давать файлам осмысленные имена вместо однообразных Unit1 и Project1, предлагаемых DELPHI.
Чтобы избежать потери файлов проекта в аварийных ситуациях связанных, например, с выключениием питания, зависании системы и т.д., рекомендуется периодически сохранять проект, используя пиктограмму [pic] главного меню или опцию Save All в меню File.
1.2.2. Настройка окон
Чтобы работать с окном, необходимо сделать его активным, щелкнув
“мышью” в любом месте окна. У активного окна заголовок становится
выделенным, например, на рис. 1.1 активным является окно Редактора Кода.
Окна Формы и Редактора Кода модуля в правом верхнем углу имеют кнопки управления, которые предназначены: [pic] -для свертывания окна в пиктограмму, [pic] -для разворачивания окна на весь экран и возвращения к исходному размеру [pic], [pic] -для закрытия окна.
С помощью “мыши”, захватывая одну из кромок окна или выделенную
строку заголовка, отрегулируете нужные размеры окон Формы, Редактора Кода,
Инспектора Объектов и их положение на экране.
1.2.3. Изменение заголовка Формы
Новая Форма имеет одинаковые имя (Name) и заголовок (Сaption) -
FORM1. Начинающим программистам имя Формы менять не рекомендуется, т.к. оно
используется в тексте модуля.
Для изменения заголовка активизируйте окно Инспектора Объектов и на странице Properties в свойстве Caption замените заголовок Form1 на
Лаб. работа №1-Линейный алгоритм. Убедитесь, что одновременно изменился заголовок окна Формы.
1.2.4. Размещение компонентов на Форме
Будем размещать компоненты на Форме так, чтобы они соответствовали панели, показанной на рис 1.2.
[pic]
Для нанесения надписей на Форму используется компонент Label. Выберите в
Палитре Компонентов на странице Standard пиктограмму [pic] компонента Label
и щелкните на ней “мышью”. Затем в нужном месте Формы щелкните “мышью” -
появится надпись Label1. В свойстве Caption Инспектора Объектов замените
надпись Label1 на Введите значение X:. В свойстве Font подберите шрифт.
Аналогично нанесите на Форму остальные надписи. Щелкнув “мышью” на любом из
размещенных компонентов, отрегулируйте его местоположение на Форме и
размер.
Для ввода/вывода данных в простейших случаях используются компоненты
Edit и Memo. Компонент Edit применяется в тех случаях, когда данные
представляются одной строкой. Если данные представляют собой несколько
строк, то используется компонент Memo.
Для создания полей ввода численных значений переменных x, y и z
используем компонент Edit. Выберите в Палитре Компонентов на странице
Standard пиктограмму [pic] и разместите компонент Edit в нужных местах
Формы так же, как Вы это делали с компонентом Label.
Для вывода результатов используем компонент Memo. Выберите в Палитре
Компонентов на странице Standard пиктограмму [pic], поместите компонент
Memo на Форму и откорректируйте его местоположение и размеры.
1.2.5. Написание процедуры обработки события создания Формы (FormCreate)
Если программист желает, чтобы при появлении панели интерфейса на
экране в соответствующих полях находились начальные значения данных, он
должен учесть, что при запуске приложения возникает событие - создание
Формы (OnCreate). Создадим процедуру обработки этого события, которая
занесет начальные значения переменных x, y, z в поля Edit1, Edit2 и Edit3
соответственно, а в поле Memo1 поместит строку Лабораторная работа №1 –
Линейный алгоритм. Для этого дважды щелкните мышью на любом свободном месте
Формы. На экране появится текст модуля UnLinAlg, в котором DELPHI
автоматически создает заготовку процедуры-обработчика события создания
Формы: Procedure TForm1.FormCreate(Sender:TObject). Между операторами begin
и end этой процедуры вставьте операторы, которые выполняют необходимые
действия (текст модуля приведен в п.1.2.7).
1.2.6. Написание процедуры обработки события нажатия кнопки Button1
(Button1Click)
Поместим на Форму кнопку, нажатие которой приведет к вычислению
выражения. Выберите в Палитре Компонентов на странице Standart пиктограмму
[pic] компонента Button. В свойстве Caption Инспектора Объектов замените
надпись на кнопке Button1 на Вычислить. В свойстве Font подберите шрифт.
Отрегулируйте положение и размер кнопки. Затем дважды щелкните “мышью” на
кнопке, после чего курсор установится в тексте процедуры-обработчика
события нажатия кнопки Button1 : Procedure
TForm1.Button1Click(Sender:TObject). Внимательно наберите операторы этой
процедуры, используя текст модуля UnLinAlg.
1.2.7. Текст модуля UnLinAlg
Unit UnLinAlg;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
StdCtrls;
type
TForm1 = class(TForm)
Label1: TLabel;
Edit1: TEdit;
Label2: TLabel;
Edit2: TEdit;
Label3: TLabel;
Edit3: TEdit;
Label4: TLabel;
Memo1: TMemo;
Button1: TButton; procedure FormCreate(Sender: TObject); procedure Button1Click(Sender: TObject); private
{ Private declarations } public
{ Public declarations } end;
var
Form1: TForm1;
implementation
{$R *.DFM}
// Процедура обработки события создания Формы:
procedure TForm1.FormCreate(Sender: TObject);
begin
Edit1.Text:='0.4'; // начальное значение X
Edit2.Text:='8.75e-2'; // начальное значение Y
Edit3.Text:='-19.63'; // начальное значение Z
Memo1.Clear; // очистка Memo1
// Вывод строки в Memo1:
Memo1.Lines.Add('Лабораторная работа №1 - Линейный алгоритм');
end;
// Процедура обработки события нажатия кнопки Button1:
procedure TForm1.Button1Click(Sender: TObject); var x,y,z,a,b,c,u : extended; // объявление локальных переменных
begin x:=StrToFloat(Edit1.Text); // X присваивается содержимое Edit1 y:=StrToFloat(Edit2.Text); // Y присваивается содержимое Edit2 z:=StrToFloat(Edit3.Text); // Z присваивается содержимое Edit3
// Вычисляется выражение a:=sqrt(x)-y*y*y; b:=sin(a)/cos(a); c:=Exp(5*Ln(b)); u:=c+exp(y/z)*sin(z*z);
Memo1.Lines.Add('X = '+Edit1.Text+' Y = '+Edit2.Text+
' Z = '+Edit3.Text); // контрольный вывод X, Y, Z в Memo1
// Вывод результата в Memo1:
Memo1.Lines.Add(' U = '+FloatToStrF(u,ffFixed,8,3));
end;
end.
Данные, с которыми работают компоненты Edit и Memo, имеют тип String.
Поэтому в процедуре TForm1.Button1Click при присваивании содержимого полей
Edit1,Edit2,Edit3 переменным X,Y,Z c помощью функции StrToFloat
осуществляется преобразование данных типа String в действительные значения
с плавающей точкой типа Extended. Если необходимо работать с данными
целого типа, используется функция StrToInt.
При выводе данных в Memo1 используется метод Add свойства Lines,
причем для преобразования данных из действительного значения в строковое и
управления формой представления выводимого результата используется функция
FloatToStrF.
1.2.8. Работа с приложением
Для запуска созданного приложения нажмите пиктограмму [pic] главного меню или клавишу F9. При этом происходит компиляция модулей и, если нет ошибок, компоновка проекта и создание выполняемого файла PrLinAlg.exe. На экране появляется панель интерфейса приложения (рис.1.2).
Щелкните “мышью” на кнопке “Вычислить” и в поле Memo1 появляется результат. Измените исходные значения x, y, z в полях Edit и снова нажмите кнопку ”Вычислить”. Убедитесь, что в поле Memo1 отображаются новые результаты. Завершить работу приложения можно нажатием кнопки [pic] в правом верхнем углу панели интерфейса.
В случае нештатного функционирования приложения восстановить
первоначальный режим работы с проектом можно путем выбора в меню Run опции
ProgramReset или нажать клавиши Ctrl+F2.
1.3. Выполнение индивидуального задания
По указанию преподавателя выберите свое индивидуальное задание.
Уточните условие задания, количество и типы исходных данных. В соответствии
с этим оформите дизайн панели интерфейса проектируемого приложения,
установите необходимое количество полей Edit, тексты заголовков на Форме,
размеры шрифтов, а также типы переменных и функции преобразования при вводе
и выводе результатов.
Индивидуальные задания
1. [pic]
При x=14.26, y=-1.22, z=3.5([pic] t=0.564849.
2. [pic]
При x=-4.5, y=0.75([pic],z=0.845[pic] u=-55.6848.
3. [pic]
При x=3.74[pic], y=-0.825, z=0.16[pic] v=1.0553.
4. [pic]
При x=0.4[pic] ,y=-0.875, z=-0.475[pic] w=1.9873.
5. [pic]
При x=-15.246, y=4.642[pic], z=20.001[pic] [pic]=-182.036.
-----------------------
3
4
5
6
Рис.1.2
Label1
Label2
Label3
Рис.2.1
1- главное окно; 2 – главное меню, 3 – пиктограммы главного меню,
4 - окно Инспектора Объектов; 5 – окно Редактора Кода,
6- окно пустой Формы; 7 – Палитра Компонентов.
Label4
2
1
7
Edit1
Edit2
Edit3
Button1
Memo1