
LabsDelphi1
.pdfif i=3 then{для последнего эллипса заливка меняется }
Canvas.Brush.Style:=bsSolid;{на сплошную} Canvas.Ellipse (50, 80+(i-1)*100, 250, 120+(i-1)*100);
end;
{ниже – рисование треугольника}
Canvas.Polygon([Point(40,330),Point(100,330),Point(100,350)]);
{рисование верхней дуги}
Canvas.Arc(290,60,360,140,360,100,325,60);
{рисование нижней дуги}
Canvas.Arc(190,270,310,350,250,350,310,310); Canvas.Pen.Style:=psDash;{линии меняются на пунктирные}
{ниже – рисование вертикально стоящего прямоугольника}
Canvas.Rectangle(320,120,350,340); Canvas.Pen.Style:=psDashDot;{линии – штрих-пунктирные} Canvas.Brush.Style:=bsDiagCross;{перекрестная штриховка} Canvas.Rectangle(240,30,260,70);{малый прямоугольник} for i:=1 to 3 do{в цикле рисуются линии, стиль линии } begin { выбирается оператором case}
case i of
1:Canvas.Pen.Style:=psDash;
2:Canvas.Pen.Style:=psDashDot;
3:Canvas.Pen.Style:=psSolid; end;
Canvas.MoveTo(10, 100*i);{курсор – в начало линии} Canvas.LineTo(300,100*i);{рисование линии}
end;
end;
ПРИМЕР ОБРАБОТЧИКА, ФОРМИРУЮЩЕГО МАССИВЫ КООРДИНАТ ТОЧЕК СЕРИЙ ДЛЯ ВЫВОДА ГРАФИКОВ ФУНКЦИЙ С ПОМОЩЬЮ CHART
procedure TForm1.FormCreate(Sender: TObject);
{Обработчик выполняется при создании формы} Var n,i:integer;{n – число точек, i-номер точки}
x,y,h:real;{координаты точки и шаг приращения аргумента x}
31
begin n:=20; h:=2*pi/n;
x:=0;{начальное значение x}
Series1.Title:='sin';{изменение названий серий для легенды}
Series2.Title:='cos';
for i:=1 to n do {цикл по точкам} begin
y:=sin(x);
Series1.AddXY(x,y);{добавление точки к первой серии (графику)} y:=cos(x);
Series2.AddXY(x,y); {добавление точки ко второй серии (графику)} x:=x+h;{изменение x}
end; end;
Лабораторная работа №10. Обработка исключительных ситуаций
Цель работы: освоение приемов обработки исключительных ситуаций в Объектном Паскале.
Продолжительность работы: 2 часа
1. ПОДГОТОВКА К РАБОТЕ
Перед началом выполнения работы студент должен:
1.Ознакомиться с обработкой исключительных ситуаций по пособию [3], гл. 9.
2.Подготовить фрагменты программного кода обработки исключительных ситуаций для приложений, созданных в предыдущих лабораторных работах:
1)исключительная ситуация класса EConvertError (ошибка преобразования данных) при считывании значений исходных данных из компонентEdit и преобразовании этих значений к числовым типам с использованием функций StrToInt, StrToFloat в приложении для задачи 1.3.4.N+1 (лабораторная работа №5);
2)исключительная ситуация класса EConvertError при считывании значения длины массива из компоненты Edit в приложении для задачи
32
3.4.N+1 (лабораторная работа №8); требуется заменить существующий
условный оператор на обработку исключения;
3)генерация исключительной ситуации (с помощью оператора raise), если в качестве длины массива введено неположительное число (задача 3.4.N+1, лабораторная работа №8); требуется заменить существующий оператор вывода сообщения об ошибке на генерацию исключения:
if n<=0 then raise Exception.Create('Введите положительное число');
4)генерация исключительной ситуации, если значения исходных данных выходят за допустимые границы (задача 1.3.4.N+1, лабораторная работа №5; допустимые границы определить из условия задачи);
5)(2-3) исключительные ситуации (деление на нуль, переполнение, извлечение корня из отрицательного числа и т. п.) при вычислении значений функций в лабораторной работе №9.
3.Подготовка проекта отчета по лабораторной работе. Отчет должен содержать для каждой исключительной ситуации:
1)описание ситуации;
2)фрагмент программного кода для ее обработки.
2.ЗАДАНИЕ И РЕКОМЕНДАЦИИ ПО ЕГО ВЫПОЛНЕНИЮ
1.Для каждого подпункта п. 2 подготовки к лабораторной работе измените программный код существующего приложения, добавив фрагмент с обработкой (генерацией) исключительной ситуации.
2.Отладьте измененные приложения.
3.Результаты зафиксируйте в отчете и покажите преподавателю.
Приложение 1. Пример проекта отчета по консольному приложению
Условие
Начальный вклад клиента в банке был равен A руб. В течение каждого
месяца рассматриваемого периода на счет добавляется B руб.; в конце каждого месяца на имеющийся вклад начисляется р %. Вывести величину вклада на
начало 1, 2, ... N месяца.
33

Состав данных
Имя |
Смысл |
Тип |
Структура |
||
|
|
Исходные данные |
|
|
|
|
|
|
|
|
|
A |
начальный вклад |
вещественный |
простая переменная |
||
B |
деньги, поступающие |
вещественный |
простая переменная |
||
|
ежемесячно |
|
|
|
|
|
|
|
|
|
|
р |
начисляемые ежемесячно |
вещественный |
простая переменная |
||
|
проценты |
|
|
|
|
|
|
|
|
|
|
N |
количество месяцев |
целый |
простая переменная |
||
|
|
Выходные данные |
|
|
|
|
|
|
|
|
|
i |
номер месяца |
целый |
простая переменная |
||
V |
Величина вклада на |
вещественный |
простая переменная |
||
|
начало i-го месяца |
|
|
|
|
|
|
|
|
|
|
|
|
Форма ввода |
|
|
|
|
|
|
|
|
|
|
|
Введите A, B, p, N |
|
|
|
|
|
< A > < B > < p > < N > |
|
|
|
|
|
|
|
|
|
Форма вывода
Номер месяца (i) |
Вклад (V) |
|
< i > |
< V > |
N раз |
34

Блок-схема алгоритма
начало
Ввод A,B,p,N
V:=A
i:=1
i n
да
Вывод i,V
V:=V + B
V:=V*(1+p/100)
i:=i+1
конец
35
Программа на Паскале
Program primer2;
Var A,B,p,V:real; N,i:integer;
Begin
Writeln('Введите A,B,p,N'); Readln(A,B,p,N); V:=A; for i:=1 to N do
begin writeln(i:7, V); V:=V+B;
V:=V*(1+p/100); end;
Readln;
End.
Тесты
Тест 1. Входные данные: A=100; B=10; p=0; N=4.
Выходные данные:
i |
V |
1 |
100 |
2 |
110 |
|
|
3 |
120 |
|
|
4 |
130 |
|
|
Тест 2. Входные данные: A=100; B=10; p=1; N=3.
Ниже в фигурных скобках приведено значение V, полученное после вы-
полнения оператора тела цикла для последовательных значений i. Эти данные используются для проверки правильности программы с помощью трассировки.
i=1
writeln(i:7, V); {V=100} V:=V+B; {V=110} V:=V*(1+p/100); {V=111,1}
i=2
writeln(i:7, V); {V=111,1} V:=V+B; {V=121,1} V:=V*(1+p/100); {V=122,311}
36
i=3
writeln(i:7, V); {V=122,311} V:=V+B; {V=132,311} V:=V*(1+p/100); {V=133,63411}
Выходные данные:
i |
V |
1 |
100 |
|
|
2 |
111,1 |
3 |
122,311 |
|
|
Приложение 2. Пример проекта отчета по оконному приложению
Условие
А—начальная стоимость оборудования. В первый год эксплуатации стоимость оборудования снижается на В руб., а в каждый следующий год снижение стоимости уменьшается на р % (относительно предыдущего года). Определить, через сколько лет стоимость оборудования станет меньше А/2.
Рассматривать срок не более N лет.
Состав данных
Имя |
Смысл |
Тип |
Структура |
|
Исходные данные |
|
|
|
|
|
|
A |
начальная стоимость |
вещественный |
простая переменная |
|
оборудовани |
|
|
|
|
|
|
B |
начальное снижение стоимости |
вещественный |
простая переменная |
р |
процентное уменьшение |
вещественный |
простая переменная |
|
снижения стоимости |
|
|
|
|
|
|
N |
максимальное число лет |
целый |
простая переменная |
|
Выходные данные |
|
|
|
|
|
|
i |
искомый номер года |
целый |
простая переменная |
|
Промежуточные переменные |
|
|
|
|
|
|
At |
текущая стоимость оборудования |
вещественный |
простая переменная |
Bt |
текущее ежегодное снижение |
вещественный |
простая переменная |
|
стоимости |
|
|
|
|
|
|
|
|
37 |
|

Блок-схема алгоритма
начало
Ввод A,B,p,N
At:=A; Bt:=B
i:=1
At≥A/2& i N
да
At:=At - Bt
Bt:=Bt-Bt*p/100
i:=i+1
да
At<A/2
i:=i -1
Вывод
'Срок истек'
Вывод i
конец
38

Эскиз основной формы приложения
|
|
|
|
|
|
|
|
|
|
|
Edit1 |
|
|
|
|
|
Начальная стоимость оборудования (A) |
|
|
||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Начальное снижение стоимости (В) |
|
|
|
Edit2 |
|
|||
|
|
|
|
Уменьшение снижения, % (p) |
|
|
|
|
|
|
||
|
|
|
|
|
|
|
|
Edit3 |
|
|||
Label |
|
|
|
|
|
|
|
|||||
|
|
|
Максимальное число лет (N) |
|
|
|
|
|
|
|||
|
|
|
|
|
|
|
|
Edit4 |
|
|||
|
|
|
|
|
|
|
|
|||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Через сколько лет стоимость |
|
|
|
|
|
|
||
|
|
|
|
уменьшится в 2 раза |
|
|
|
Edit5 |
|
|
||
|
|
|
|
|
|
|
|
|
|
|
|
|
Вычисление Выход
Button1 |
Button2 |
Программный код основного обработчика
Код приведен в лабораторной работе №5.
Тесты
Тест 1. Входные данные: A=100; B=20; p=1; N=5. При трассировке тела цикла получим:
i=1
At:=At-Bt; {At=80} Bt:=Bt-Bt*p/100; {Bt=19,8}
i=2
At:=At-Bt; {At= 60,2} Bt:=Bt-Bt*p/100; {Bt= 19,602}
i=3
At:=At-Bt; {At= 40,598 – меньше A/2!} Bt:=Bt-Bt*p/100; {Bt= 19,40598}
Выходные данные: i=3.
Тест 2. Входные данные: A=100; B=20; p=1; N=2. Результат – фраза: "За 2 лет снижения нет".
39
БИБЛИОГРАФИЧЕСКИЙ СПИСОК
1.Зубов В.С., Батасова В.С. Сборник задач по базовой компьютерной подготовке: учебное пособие по курсу «Информатика»/ В.С. Зубов, В.С. Батасова. — М.: Издательский дом МЭИ, 2007.— 123 с.
2.Батасова В.С. Начальный курс программирования на основе алгоритмического языка Паскаль. Учебное пособие по курсу «Высокоуровневые методы информатики и программирования». – М.: Издательство МЭИ, 2006.–116 с.
3.Маран М.М. Delphi. Начальный курс: учебное пособие / М.М. Маран – М. изд-во МЭИ, 2002. – 100 с.
СОДЕРЖАНИЕ
Введение.................................................................................................................. |
3 |
Лабораторная работа №1. Реализация простейших циклических алгоритмов в |
|
консольном приложении среды Delphi.................................................................. |
4 |
Лабораторная работа №2. Решение задач обработки массивов в консольном |
|
приложении среды Delphi....................................................................................... |
8 |
Лабораторная работа №3. Проектирование алгоритмов с использованием |
|
подпрограмм и их отладка в консольном приложении....................................... |
10 |
Лабораторная работа №4. Решение задач с параметрами-подпрограммами и |
|
модулями в консольном приложении Delphi....................................................... |
11 |
Лабораторная работа №5. Разработка простейших оконных приложений в |
|
среде Delphi........................................................................................................... |
12 |
Лабораторная работа №6. Создание оконных приложений обработки матриц в
среде Delphi........................................................................................................... |
15 |
Лабораторная работа №7. Программирование открытия и сохранения файлов с
использованием стандартных диалоговых окон ................................................. |
19 |
Лабораторная работа №8. Разработка оконных приложений, использующих |
|
автономные модули .............................................................................................. |
22 |
Лабораторная работа №9. Разработка оконных приложений, осуществляющих
графический вывод ............................................................................................... |
26 |
|
Лабораторная работа №10. Обработка исключительных ситуаций................... |
32 |
|
Приложение 1. |
Пример проекта отчета по консольному приложению............. |
33 |
Приложение 2. |
Пример проекта отчета по оконному приложению................... |
37 |
БИБЛИОГРАФИЧЕСКИЙ СПИСОК .................................................................. |
40 |
|
|
40 |
|