- •Лабораторная работа № 1 Среда программирования Delphi. Линейные алгоритмы
- •Краткие теоретические сведения
- •Графическая среда разработки Delphi
- •Компоненты
- •Обработка событий
- •Редактор кода
- •Компиляция
- •Отладка
- •Структура проекта
- •Сохранение проекта
- •Идентификаторы, операторы
- •Типы данных
- •Переменные
- •Константы
- •Выражение
- •Оператор присваивания
- •Комментарии
- •Стандартные функции
- •Ввод данных
- •Вывод результатов
- •Вывод в окно сообщения
- •Порядок выполнения работы
- •Содержание отчета
- •Варианты заданий
- •Контрольные вопросы
- •Лабораторная работа № 2 Программирование алгоритмов разветвляющейся структуры
- •Краткие теоретические сведения
- •Условие
- •Структура ветвления
- •Компонент Memo
- •Порядок выполнения работы
- •Содержание отчета
- •Варианты заданий
- •Контрольные вопросы
- •Лабораторная работа № 3 Операторы цикла. Создание изображений
- •Краткие теоретические сведения
- •Создание изображений
- •Класс tFont
- •Класс tPen
- •Класс tBrush
- •Компонент Image
- •Компонент Shape
- •Компонент Timer
- •Методы вычерчивания графических примитивов.
- •Порядок выполнения работы Пример1. Использования оператора цикла while
- •Пример2. Создание простейшего изображения.
- •Пример создания заставки
- •Пример 3. Создание приложения, содержащего круговую диаграмму.
- •Содержание отчета
- •Варианты заданий
- •Варианты заданий
- •Контрольные вопросы
- •Лабораторная работа № 4 Одномерные массивы. Цикл с параметром
- •Краткие теоретические сведения
- •Объявление массива
- •Цикл с параметром
- •Инициализация массива
- •Операции с массивами
- •Вывод массива
- •Ввод массива
- •Использование компонента StringGrid
- •Использование компонента Memo
- •Создание меню
- •Компонент tMainMenu
- •Диалоговые панели File Open и File Save
- •Вывод в файл
- •Открытие файла для записи
- •Закрытие файла
- •Ввод из файла
- •Открытие файла для чтения
- •Чтение чисел
- •Поиск минимального (максимального) элемента массива
- •Поиск в массиве заданного элемента
- •Сортировка массива
- •Порядок выполнения работы
- •Пример 2. Разработка диалоговой программы для работы с произвольным массивом вещественных чисел.
- •Содержание отчета
- •Варианты заданий
- •Контрольные вопросы
- •Лабораторная работа № 5 Двумерные массивы. Вложенные циклы.
- •Краткие теоретические сведения
- •Объявление матриц
- •Инициализация двумерного массива
- •Содержание отчета
- •Варианты заданий
- •Контрольные вопросы
- •Лабораторная работа № 6 Функциональная и интерфейсная эмуляция формы
- •Краткие теоретические сведения
- •Компонент Image
- •Многостраничный блокнот — компоненты tTabControl и tPageControl
- •Компоненты tTreeView w tListView
- •Задание к лабораторной работе
- •Варианты заданий
- •Контрольные вопросы
Порядок выполнения работы
Пример 1.
Открыть новое приложение.
Поместить на форму компонент TMainMenu.
В Инспекторе объектов выбрать свойство Items компонента MainMenu1 и щелкнуть на кнопке с тремя точками либо дважды щелкнуть левой кнопкой мыши на размещенном на форме компоненте меню. На экране появится Конструктор меню.
С помощью Конструктора Меню создать меню, имеющее следующие пункты и подпункты (рис. 4.2). Используйте свойство Caption.
Рис. 4.2. Вид создаваемого меню
Чтобы элемент меню представлял собой разделительную линию, следует его свойству Caption задать значение ‘-‘.
Для создания подменю следует выбрать нужный элемент меню и щелкнуть правой кнопкой мыши. В появившемся контекстном меню необходимо выбрать пункт Create Submenu.
5. После ввода всех пунктов меню закройте окно редактора меню. Для определения реакции на выбор пунктов меню следует по очереди выбирать все пункты меню и щелкать по ним мышкой. В результате в окне Редактора Кода появится заготовка обработчика события OnClick. Для всех пунктов меню будем выдавать информационное сообщение, например
procedure TForm1.SaveClick(Sender:TObject);
begin
ShowMessage(‘Выбран пункт Сохранить’);
end;
6. Откомпилировать и выполнить приложение.
Пример 2. Разработка диалоговой программы для работы с произвольным массивом вещественных чисел.
Задание: упорядочить элементы данного массива по возрастанию.
Открыть проект, созданный в предыдущем примере.
Добавить на форму 2 компонента StringGrid. Установить следующие значения свойств: ColCount = 1, RowCount = 1, FixedCols = 0, FixedRows = 0, Visible = False. (Свойство Visible определяет видимость компонента. Если Visible = False, то компонент невидим.) Границы и расположение таблиц отрегулировать с помощью мыши. Для компонента StringGrid1 установить свойства: Options-> goEditing = True, Options->goAlwaysShowEditing = True.
Добавить на форму компоненты Label1 и Label2. Свойству Caption одного из них присвоить значение Исходный массив, а другого – Полученный массив. Свойству Visible обоих компонентов присвоить значение False. Окончательный вид формы представлен на рис. 4.3.
Рис. 4.3. Вид формы приложения
В разделе Type перед описанием формы добавить строку:
massiv= array [1..n] of real;
В раздел Var добавить: a, b: massiv;
Реализовать обработку событий от меню «Создать массив». Предусмотреть формирование элементов массива с использованием датчика случайных чисел (меню «Автомат») и путем ввода с клавиатуры (меню «Ввод»). Обработку события выбора пункта меню Массив →Создать→Ввод определить следующим образом:
procedure TForm1.VvodClick(Sender: TObject);
begin
Label1.Visible:=True;
StringGrid1.Visible:=True;
ShowMessage('Введите элементы массива, после каждого элемента нажимайте Enter');
end;
Для выбора пункта меню Массив →Создать→Автомат реакция на событие будет иметь следующий вид:
procedure TForm1.AvtomatClick(Sender: TObject);
var i:byte;
begin
Label1.Visible:=True;
StringGrid1.Visible:=True;
for i:=1 to n do
StringGrid1.Cells[i-1,0]:=IntToStr(random(100));
StringGrid1.Enabled:=False;
end;
Выделить компонент StringGrid1, выбрать на вкладке Events инспектора объектов событие OnKeyPress и сделать двойной щелчок. Обработчик события определить следующим образом:
procedure TForm1.StringGrid1KeyPress(Sender: TObject; var Key: Char);
begin
if key=#13 then
if StringGrid1.Col < StringGrid1.ColCount - 1
then // курсор в следующую ячейку таблицы
StringGrid1.Col := StringGrid1.Col +1
else StringGrid1.Enabled:=False; // Когда Enabled = False, доступ к компоненту запрещен.
end;
Реализовать обработку события от меню Массив→Редактировать:
procedure TForm1.EditMassivClick(Sender: TObject);
begin
StringGrid1.Enabled:=True;
ShowMessage('Вы можете изменить значения элементов массива');
end;
Обработчик события от меню Работа определить так:
procedure TForm1.WorkClick(Sender: TObject);
var i,j:byte; t:real; c:boolean;
begin
for i:=1 to n do
a[i]:=StrToFloat(StringGrid1.Cells[i-1,0]);
b:=a;
repeat
c:=false; // пусть в текущем цикле нет обменов
for i:=1 to n-1 do
if b[i] > b[i+1] then
begin // обменяем i-й и i+1-й элементы
t := b[i];
b[i] := b[i+1];
b[i+1] := t;
c := true;
end;
until not c;
Label2.Visible:=True;
StringGrid2.Visible:=True;
for i:=1 to n do
StringGrid2.Cells[i-1,0]:=FloatToStr(b[i]);
end;
Реализовать обработку событий от меню «Сохранить массив» и «Загрузить массив». Для выбора имени файла при сохранении/загрузке массива следует использовать стандартные диалоги – компоненты TSaveDialog и TOpenDialog, которые находятся на вкладке Dialogs. Диалог вызывается с помощью процедуры Execute. Загрузку массива из файла определить следующей процедурой:
procedure TForm1.LoadClick(Sender: TObject);
var f:TextFile; i:byte;d:real;
begin
Label1.Visible:=True;
StringGrid1.Visible:=True;
If OpenDialog1.Execute=True then
begin
AssignFile(f,OpenDialog1.FileName);
Reset(f);
for i:=1 to n do
begin
read(f,d);
StringGrid1.Cells[i-1,0]:=FloatToStr(d);
end;
StringGrid1.Enabled:=False;
end;
end;
Сохранение массива определить так:
procedure TForm1.SaveClick(Sender: TObject);
var f:TextFile; i:byte;
begin
SaveDialog1.Execute;
AssignFile(f,SaveDialog1.FileName);
Rewrite(f);
writeln(f,'Исходный массив:');
for i:=1 to n do
write(f,FloatToStrF(a[i],ffFixed,5,2), ' ');
writeln(f);
writeln(f,'Полученный массив:');
for i:=1 to n do
write(f,FloatToStrF(b[i],ffFixed,5,2), ' ');
CloseFile(f);
end;
Реализовать обработку события от меню Массив→Очистить:
procedure TForm1.ClearClick(Sender: TObject);
var i:byte;
begin
for i:=1 to n do
begin
StringGrid1.Cells[i-1,0]:='';
StringGrid2.Cells[i-1,0]:='';
end;
StringGrid1.Enabled:=True;
StringGrid2.Visible:=False;
label2.Visible:=False;
end;
Реализовать выход из программы.