- •Сборник МетодическиХ указаниЙ по выполнению лабораторных работ
- •Информатика
- •Введение. Назначение Delphi и его особенности
- •Начало работы
- •Меню и команды Delphi
- •Полоска кнопок быстрого доступа SpeedBar
- •Локальные меню SpeedMenu
- •Работа с формами
- •Палитра компонентов
- •Система подсказок
- •Навигатор кода
- •Написание кода
- •Справочная система
- •Структура проекта
- •Окончательная настройка приложения
- •Событие и процедура обработки события
- •Запуск программы
- •Предупреждения и подсказки
- •Ошибки времени выполнения
- •Компиляция
- •Отладка программы
- •Файлы, создаваемые системой
- •Репозиторий объектов и его страницы
- •Тула 2014 г.
- •Создание приложения в среде разработки Delphi
- •Первый проект
- •Компоненты
- •Начальные сведения о программах на языке Pascal
- •Комментарии
- •Директивы компилятора
- •Идентификаторы
- •Переменные и типы данных
- •Константы
- •Неименованные константы
- •Нетипизированные константы
- •Типизированные константы
- •Простейшие операторы
- •1. Простейшие арифметические и логические операции
- •2. Линейные программы
- •Тула 2014 г.
- •Сущность задач с ветвлениями
- •Логический тип данных
- •Организация ветвлений
- •Объединение операторов
- •Сложные условия
- •Множественное ветвление
- •Применение оператора-переключателя Case
- •Тула 2014 г.
- •Сущность задач с циклами
- •Цикл с предусловием
- •Вечный цикл
- •Цикл с постусловием
- •Цикл с переменной
- •Дополнительные операторы управления циклами
- •Вложенные циклы
- •Инструкция goto
- •1. Циклические программы
- •2. Задачи, решаемые методом перебора.
- •Тула 2014 г.
- •Статические массивы
- •Многомерные статические массивы
- •Ввод-вывод массивов
- •Считывание массива из файла
- •Поиск максимума и минимума
- •Пример программы
- •Динамические массивы
- •Создание динамических массивов
- •Многомерные динамические массивы
- •1. Одномерные массивы
- •2. Двумерные массивы
- •Тула 2014 г.
- •Процедуры и функции
- •Что такое функция?
- •Функция: туда и обратно
- •Процедуры
- •Передача данных в процедуры
- •Вложенные процедуры и функции
- •Тула 2014 г.
- •Символьный тип
- •Символ-константа и строка-константа Неименованные константы
- •Нетипизированные константы
- •Типизированные константы
- •Действия с символами Операции
- •Стандартные функции и процедуры обработки строк
- •Операции со строками Сравнения
- •Обращение к компонентам строки
- •Конкатенация
- •Удаление символов в строке
- •Определение позиции подстроки
- •Выделение подстроки
- •Множества
- •Описание множеств
- •Множество-константа Неименованная константа
- •Нетипизированная константа
- •Типизированная константа
- •Операции с множествами
- •Представление множеств массивами
- •Представление множеств линейными массивами
- •Представление множеств битовыми массивами
- •1. Строковый тип данных
- •2. Типы данных «множество» и «запись»
- •Тула 2014 г.
- •Введение
- •Что такое файл?
- •Когда нужно использовать файлы
- •Разновидности файлов
- •Описание файлов
- •Текстовые файлы
- •Оперирование файлами
- •Назначение файла
- •Открытие файла
- •Закрытие файла
- •Считывание из файла
- •Запись в файл
- •Пробельные символы
- •Пример использования файлов
- •Изменение реакции на ошибку
- •Бинарные файлы
- •Типизированные файлы
- •Нетипизированные файлы
- •Подпрограммы обработки директорий
- •Применимость подпрограмм обработки файлов
- •Индивидуальные задания
- •Свойства в Delphi
- •Вложенных свойств
- •Управление свойствами визуальных компонент в режиме выполнения
- •Программа shapedem2
- •Тула 2014 г.
- •Графические компоненты
- •Построение графиков с помощью компонентной технологии
- •Тула 2014 г.
- •Создание меню
- •Использование компонента tTimer
- •Тула 2014 г.
- •Работа с компонентом RichEdit
- •Тула 2014 г.
- •Тула 2014 г.
- •Что такое мультимедиа
- •Мультимедиа в Delphi
- •Компонент tMediaPlayer
- •Два вида программ мультимедиа
- •Пример программы с мультимедиа
Объединение операторов
Формат записи оператора IF позволяет поместить внутрь его лишь один оператор, выполняющийся, когда условие истинно, и один – когда оно ложно. Часто же нужно выполнить не один, а много операторов. Например, при решении квадратного уравнения после проверки неотрицательности дискриминанта нужно вычислить действительные корни уравнения, что требует как минимум двух операторов присваивания. Следующая запись неверна и вызовет ошибку при компиляции:
Как же быть? Очень просто – нужно превратить несколько операторов в один. Для этого их объединяют при помощи уже известных нам операторных скобок BEGIN и END. Запись вида
BEGIN
оператор 1;
оператор 2;
…
оператор n
END;
рассматривается как один оператор. Не путайте BEGIN и END, являющимися операторными скобками, с BEGIN и END, отмечающими начало и конец всей программы. Таким образом, правильная запись такова:
d:=SQR(b)-4*a*c;
IF d>=0 THEN
BEGIN
x1:=-b+SQRT(d)/(2*a);
x2:=-b-SQRT(d)/(2*a)
END
ELSE
Label1.Caption:='Корни комплексные';
Обратите внимание, что оператор Label1.Caption:='Корни комплексные' в операторные скобки не заключен. Причина очевидна: это один-единственный оператор, его не с чем объединять. Запись вида
IF a>b THEN
BEGIN
c:=a+10
END;
хотя и не вызовет ошибки, но является избыточной и свидетельствует о низкой квалификации программиста. Скобки BEGIN … END здесь совершенно лишние.
Сложные условия
Во многих случаях нужно одновременно проверять несколько условий. Например, перед расчетом площади треугольника по длинам сторон все три длины стороны a,b,c обязаны быть положительными числами, т.е. должно выполняться условие "a>0 и b>0 и c>0". Для записи сложных условий в Delphi предусмотрен набор логических операций над условиями (табл. 2). Обязательное требование – сами условия при этом записываются в скобках!
Поясним действие логических операций. Операция AND ("и") возвращает значение "истина" только в том случае, если оба условия, которые она соединяет, истинны. Если хотя бы одно из условий не выполняется, AND вернет "ложь". Операция OR ("или") не столь строга – она возвращает значение истина, если либо одно, либо другое, либо оба разу соединяемых условия истинны. Родственная операция XOR (исключающее "или") очень похожа на OR с той разницей, что она исключает случай, когда оба условия выполняются (или одно, или другое6 но не оба сразу). Наконец, операция NOT (отрицание) применяется не к двум, а к одному условию и просто "переворачивает" его: (a=b) есть то же самое, что NOT(a<>b).
Таблица 2
Операция |
a |
b |
Результат |
Операция |
a |
b |
Результат |
(a) AND (b) |
true |
true |
true |
NOT(a) |
true |
- |
false |
true |
false |
false |
false |
- |
true |
||
false |
true |
false |
- |
- |
|
||
false |
false |
false |
- |
- |
|
||
(a) OR (b) |
true |
true |
true |
(a) XOR (b) |
true |
true |
false |
true |
false |
true |
true |
false |
true |
||
false |
true |
true |
false |
true |
true |
||
false |
false |
false |
false |
false |
false |
Вот как может выглядеть запись проверки всех трех введенных сторон треугольника на положительность:
IF (a>0) AND (b>0) AND (c>0) THEN
BEGIN
… вычисления
END
ELSE
Label1.Caption:='Стороны должны быть больше нуля';
Тот же пример можно записать и по-другому:
IF (a<=0) OR (b<=0) OR (c<=0) THEN
BEGIN
Label1.Caption:='Стороны должны быть больше нуля';
Exit // выход из процедуры
END;
… вычисления
END; // конец процедуры
В качестве примера использования инструкции if рассмотрим программу вычисления стоимости телефонного разговора. Как известно, стоимость разговора по телефону в воскресные дни ниже, чем в обычные дни. Следующая программа запрашивает длительность разговора и день недели, затем вычисляет стоимость разговора. Если день недели суббота или воскресенье, то стоимость уменьшается на величину скидки. Цена минуты разговора и величина скидки задаются в тексте программы как константы.
На рис. приведен вид диалогового окна программы.
Для ввода исходных значений (длительность разговора, номер дня недели) используются поля редактирования, для вывода результата и пояснительного текста — поля меток. Ниже перечислены компоненты и приведены значения их свойств.
Edit1 – ввода длительности разговора в минутах
Edit2 – ввода номера дня недели
Label1, Label2 – вывода пояснительного текста о назначении полей ввода.
Label3 – вывода результата вычисления стоимости разговора
Button 1 – Активизации процедуры вычисления
Здесь и далее при описании формы приложения приводятся значения только тех свойств компонентов, которые используются в программе. Значения остальных свойств могут быть оставлены без изменения или изменены произвольным образом, естественно, в разумных пределах (очевидно, что размер командной кнопки может быть выбран произвольно).
Программа производит вычисления при щелчке на командной кнопке Вычислить. В этом случае возникает событие Ondick, процедура обработки которого приведена ниже.
procedure TForm1.Button1Click(Sender: TObject);
const
PAY=0.15; {цена одной минуты разговора 0.15 рубля}
DISCOUNT=20; {скидка 20 процентов}
var
Time: real; { длительность разговора }
Day: integer; { день недели }
Summa:real; { стоимость разговора }
begin {получить исходные данные}
Time:=StrToFloat(Edit1.Text);
Day:=StrToInt(Edit2.Text) ; {Вычислить стоимость разговора }
Summa:= PAY*Time;
{Если день суббота или воскресенье, то уменьшить стоимость на величину скидки }
if (Day = 6) OR (Day = 7)
then Summa:=Summa* (100-DISCOUNT)/100;
{вывод результата вычисления}
label3.Caption:='К оплате ' + FloatToStrf(Summa,ffgeneral,4,2)+' руб.';
end;
Часто в программе необходимо реализовать выбор более чем из двух вариантов. Например, известно, что для каждого человека существует оптимальное значение веса, которое может быть вычислено по формуле: рост(см) – 100. Очевидно, что реальный вес может отличаться от оптимального: вес может быть меньше оптимального, равняться ему или превышать оптимальное значение.
Следующая программа (ее алгоритм приведен ниже на рис.) запрашивает вес и рост, вычисляет оптимальное значение, сравнивает его с реальным и выводит соответствующее сообщение.
Как и в предыдущей программе, вычисления выполняются при щелчке на кнопке Вычислить (ее имя Button1). Ниже приведена процедура обработки события OnClick для этой командной кнопки.
procedure TForm1.Button1Click(Sender: TObject);
var
w: real; { вес }
h: real; { рост }
opt: real; { оптимальный вес }
d: real; {отклонение от оптимального веса }
begin
w:=StrToFloat(Edit1.text).;
h:=StrToFloat(Edit2.Text) ;
opt:=h-100;
if w=opt then Label3.caption:='Ваш вес оптимален !' else if w<opt then
begin
d:=opt-w;
Label3.caption:='Вам надо поправиться, на ' + FloatToStr(d)+ ' кг.';
end else begin
d:=w-opt ;
Label3.caption:='Надо немного похудеть, на ' + FloatTostr(d)+ ' кг.';
end;
end;
В приведенном примере множественный выбор реализован при помощи двух инструкций if, одна из которых "вложена" в другую. Обратите внимание, что после инструкций, расположенных перед else, символ "точка с запятой" не поставлены.
Дополнительное самостоятельное задание:
В программе определения оптимального веса для ввода значений используйте 2 компонента TrackBar из страницы палитры Win32. Для веса установите максимальное значение 150 – минимальное – 50; для роста – Max – 210, Min – 70. Данные считываются из свойства компонента Position (w:=TrackBar1.Position). Для динамического отображения данных сгенерировать процедуры и вписать в них код, предварительно добавив на форму метки Label4 и Label5.
procedure TForm1.TrackBar1Change(Sender: TObject);
begin
Label4.Caption:=TrackBar1.Position;
end;
procedure TForm1.TrackBar2Change(Sender: TObject);
begin
Label5.Caption:=TrackBar2.Position;
end;
