––––––––––––––––––––––––––––––––––––––––––––––––––––
Санкт-Петербургский государственный электротехнический
университет «ЛЭТИ» им. В. И. Ульянова (Ленина)
–––––––––––––––––––––––––––––––––––––––––––
М. В. БЕЛЬТЮКОВ
Учебно-методическое пособие
Санкт-Петербург
Издательство СПбГЭТУ «ЛЭТИ»
2020
1
УДК 621.3.06:61
ББК З 973.2 – 018 + Р
Б 44
Бельтюков М. В.
Б 44 Программирование в среде RAD Studio для решения медико-технических
задач: учеб.-метод. пособие. СПб.: Изд-во СПбГЭТУ «ЛЭТИ», 2020. 98 с.
ISBN 978-5-7629-2681-2
УДК 621.3.06:61
ББК З 973.2 – 018 + Р
Утверждено
редакционно-издательским советом университета
в качестве учебно-методического пособия
автоскрол
лер
3
Паскаль (Pascal), Си (C), Питон (Python). Язык Delphi основан на базе языка
Object Pascal и лучше других языков подходит для обучения программирова-
нию. Это обусловлено тем, что язык Pascal был разработан в 1970-е гг. швей-
царским ученым Никлаусом Виртом специально для обучения студентов
программированию. Язык был назван в честь французского математика и
философа Блеза Паскаля.
Наиболее популярным компилятором стала разработка американской
фирмы «Embarcadero». С появлением системы MS Windows возникла необ-
ходимость написания программ для этой системы, и фирма «Borland» выпу-
стила несколько версий компиляторов для создания программ в среде Win-
dows (Turbo Pascal for Windows). Но наиболее удачной получилась система
визуальной среды программирования (Rapid Application development – RAD-
система) Borland Delphi.
Первая версия Delphi была создана для Windows 3.1. С появлением си-
стемы MS Windows 95 была выпущена 16-разрядная версия Delphi 2.0, а за-
тем 32-разрядная Delphi 3.0. В 2020 г. выпущена версия RAD Studio XE
10.4.1. (В 2000-х годах фирма «Borland International» передала права на среду
программирования фирме «Embarcadero», а сама система стала поддерживать
не только язык Object Pascal, который «перерос» в язык Delphi, но кроме Del-
phi поддерживает языки программирования Delphi.Net и C++ для операцион-
ных систем Windows, Linux, IOS и Android.)
Среда Delphi предполагает использование визуального проектирования
и событийного программирования (программирование процедур обработки
событий визуальных компонентов), применение которых позволяет суще-
ственно упростить процесс разработки и создания приложений. Программи-
сту требуется разработать только «идею» программы, а «представление»
программы сделает Delphi.
Этапы разработки программ включают в себя:
• построение модели программы;
• разработку и выбор алгоритма решения поставленной задачи;
• набор текста программы. В визуальной среде программирования это
означает: создание окна программы, содержащего различные визуальные
элементы, и написание команд событий;
• отладку;
• тестирование;
• написание и настройку файла помощи;
• создание инсталлятора.
4
Модель программы. На этом этапе определяется, какая информация бу-
дет входной и какие результаты должны быть представлены на выходе.
Разработка алгоритма – последовательность действий для достижения
поставленной задачи. Результатом этого этапа является подробное словесное
описание алгоритма или его графическое отображение – построение струк-
турной схемы алгоритма.
После создания алгоритма осуществляется собственно этап написания
программы. Необходимо создать макеты диалоговых окон и продумать взаи-
модействие между ними, а затем написать код программы.
При написании программы неизбежно возникают ошибки – как синтак-
сические (ошибки при наборе текста), так и алгоритмические (ошибки в са-
мом алгоритме программы). Требуется этап отладки.
После его окончания следует этап тестирования, проверка работоспо-
собности системы с различными входными данными.
При написании коммерческой программы также необходимо преду-
смотреть контекстную помощь – этап создания файла помощи. Этот этап
может быть включен в этап написания программы.
Окончательно для распространения программы другим пользователям
служит этап создания инсталлятора.
Схемы алгоритмов и программ. При написании алгоритма программы
наиболее удобным способом отображения является графический способ –
структурная схема. Для создания структурных схем алгоритма необходимо
использовать ГОСТ 19.701-90 (ИСО 5807-85). Все основные символы алго-
ритма вписываются в прямоугольник со сторонами a b. Соотношение сто-
рон b = 2a или 3a = 2b. Базовый размер a берут из ряда 10, 15, 20 и т. д.,
кратным 5. Основные символы показаны на рис. В.2.
Структура пособия. Каждая тема разделена на две части: теоретическое
знакомство с материалом и описание алгоритма создания программы.
Работа выполняется на двух занятиях. На первом занятии требуется по
предлагаемым инструкциям набрать программу и разобраться в ее струк-
туре. Второе занятие посвящено созданию программы по индивидуально-
му заданию.
Результатами работы являются созданная программа и отчет, включаю-
щий титульный лист; схему алгоритма; тестовый пример (для вычислитель-
ных задач).
5
Комментарий
R = 0,25a 0,5 Комментарий
a
R
a
5 толщин линии
Решение
0,2a Линия
Терминатор
0,2a
a
Направление потока указывается в конце каждой
b линии или на всех потоках, или на тех, которые
Граница цикла
идут справа налево и снизу вверх.
Процесс
Пересечение потоков не имеет логической связи
0,15a
Соотношение размеров
0,25a Для сохранения формы символов при построении
Предопределенный
можно воспользоваться соотношением
процесс 2b = 3a или b = 2a
Данные
1. ЗНАКОМСТВО СО СРЕДОЙ
ПРОГРАММИРОВАНИЯ RAD STUDIO
Embarcadero
RAD Studio X 10
(иконки RAD Studio, Delphi, C++)
Обозначение объекта
Настраиваемые события
Настраиваемые свойства
11
Некоторые команды редактора. При написании программы можно ис-
пользовать следующие комбинации клавиш для упрощения набора текста:
Справка:
<F1> – выдает справку (если курсор указывает на стандартный опера-
тор, то будет выдана справка по этому оператору).
Переключение между окнами:
<F12> – переключает окна Визуальный проектировщик форм и
Редактор программы;
<F11> – делает активным окно Инспектор объектов;
<F10> – делает активным Главное окно Delphi.
Перемещение по тексту:
<↑> <↓> <→> <←> – передвинуть курсор вверх, вниз, вправо,
влево;
<PgUp>, <PgDn> – передвижение на страницу вверх, вниз;
<Ctrl><PgUp>,
<Ctrl><PgDn> – передвижение в начало текста, в конец
текста.
Ввод и удаление текста:
<Insert> – режим «вставки»/«замены»: текущий режим показан внизу
окна Редактор программы – «Insert» (вставка) или «Overwrite» (замена);
<Enter> – добавить новую строку;
<Delete>, <BackSpace> – удалить символ в позиции курсора (Delete)
или слева от курсора (BackSpace);
<Alt><BackSpace> – восстановить текст (например, удаленный фраг-
мент).
Работа с фрагментом текста:
<Shift><стрелки> – выделение текста («окраска» текста инвертируется);
<Ctrl><Insert> – поместить фрагмент в буфер обмена;
<Shift><Delete> – удалить фрагмент из текста в буфер обмена;
<Shift><Insert> – вставить текст из буфера обмена;
<Ctrl><K><H> – снять выделение фрагмента;
<Ctrl><K><U> – сдвинуть фрагмент на символ влево;
<Ctrl><K><I> – сдвинуть фрагмент на символ вправо.
Установка закладок. В большом тексте для облегчения перемещения
по тексту можно устанавливать закладки:
12
<Ctrl><K><«N»> – установить закладку с номером «N» (N – номер за-
кладки, в левой позиции строки появится символ с номером закладки, в
данном случае номер «1» (комбинация клавиш <Ctrl><K><1>));
<Ctrl><Q><«N»> – перейти на закладку с номером «N».
Компиляция и запуск программы:
<Ctrl><F9> – компиляция программы (создание файла с расширением
.exe без запуска программы);
<F9> – запуск программы.
14
иконкой объекта , или с картинкой объект BitBtn, вкладка Additional,
end;
• в тело созданной процедуры (между операторными скобками begin и
end) вписать команду закрытия окна – Close. Так как оно одно, то закрытие
окна приведет к выходу из программы. Текст программы станет таким:
15
Procedure TFMain.BExitClick(Sender: TObject);
begin
Close;
end;
• Обратите внимание! После слова «Close» стоит знак «;», так как на
языке Delphi необходимо ставить знак «точка с запятой» «;» после каждой
команды.
8. Программа создана! Для запуска программы необходимо:
• сохранить программу команда File/Save All, значок в меню Глав-
ного окна Delphi;
• запустить программу Run/Run в меню Главного окна Delphi или
щелкнуть на значок на Панели инструментов в Главном окне Delphi.
9. Выйти из Delphi по команде File\Exit, значок .
10. Загрузить проект (если потребуется) при следующем запуске Delphi
можно через пункт File/Open Project, значок в Главном окне Delphi. А по-
следние проекты доступны в пункте File/Reopen.
2. УСЛОВНЫЕ ОПЕРАТОРЫ
17
Переменные и константы. Для описания переменных служит раздел
переменных, начинающийся ключевым словом Var. Переменные могут быть
глобальными (переменная доступна в любом месте программы) и локальными
(переменные доступны только в той процедуре, в которой они описаны).
Объявление переменной выглядит так:
имя : тип;
Здесь имя – имя объявляемой переменной; тип – один из типов языка
Delphi.
Пример.
var
a,b,c: Real;
S : String;
В примере введены три переменные типа real и одна переменная string.
Однотипные переменные можно перечислять через запятую.
Замечание. Имя переменной может содержать только латинские буквы
и не зависит от выбранного регистра, т. е. переменные s и S – это одна и та
же переменная. Удобно записывать разнотипные переменные на разных
строках.
При назначении переменной значения используется оператор «присво-
ить» – «:=».
В общем виде присвоение выглядит так:
Имя := Выражение;
Пример.
k := 5; – присвоить переменной k значение 5; с := 5 + t; – присвоить пе-
ременной с значение 5 + t .
В языке Паскаль существует два вида констант: обычные и именован-
ные. Обычная константа – это целое или дробное число, строка символов
или отдельный символ, логическое значение. Именованные константы, как
и переменные, перед использованием должны быть объявлены в разделе опи-
сания констант. Описание именованной константы в общем виде:
Константа = значение;
Здесь константа – имя объявляемой константы; значение – значение
именованной константы.
Пример.
const
Ch = 'S'; // Константа Ch содержит символ S
18
V = 33; // Константа V содержит значение числа 3.
Тип константы определяется ее значением. После объявления константы
в инструкциях программы вместо значения константы можно использовать
ее имя.
Операции с переменными. Выражение состоит из операторов и опе-
рандов. Операции находятся между операндами. Операндами могут быть
константы и/или переменные. Операции определяют действия, выполняемые
над операндами. В табл. 2.2 указаны операторы, их действия и тип получен-
ного выражения.
Таблица 2.2
Тип
Оператор Действие Тип оператора
выражения
Если один операнд real Real
+ Сложение
все integer Integer
– Если один операнд real Real
Вычитание
все integer Integer
Если один операнд real Real
* Умножение
все integer Integer
/ Деление Real или integer Real
div Деление нацело Всегда integer Integer
Остаток
mod Всегда integer Integer
от деления
Логические операторы
Оператор Действие Операнд1 Операнд2 Результат
False False False
Конъюнкция False True False
and
(«И») True False False
True True True
False False False
Дизъюнкция True False True
or
(«ИЛИ») False True True
True True True
Инверсия False True
not
(Отрицание) True False
Оператор Описание Значение выражения
> Больше True, если первый операнд больше второго, иначе false
True, если первый операнд меньше второго,
< Меньше
иначе false
= Равно True, если первый операнд равен второму, иначе false
True, если первый операнд не равен второму,
<> Не равно
иначе false
Больше True, если первый операнд больше или равен второму,
>=
или равно иначе false
Меньше True, если первый операнд меньше или равен второму,
<=
или равно иначе false
19
Условные операторы. Условный оператор позволяет выбирать одно из
двух действий, причем выбор осуществляется во время выполнения про-
граммы. Существует два вида условных операторов:
1. If условие then действие.
2. If условие then действие1 else действие2.
Здесь условие – выражение логического типа; действие1, действие2 –
отдельные операторы или операторы, сгруппированные вместе при помощи
операторных скобок begin и end. Такой оператор называется составным.
Графически операторы условия изображены на рис. 2.1.
Ложь
Действие Действие 1 Действие 2
20
2. В условном операторе выполняется только один оператор, стоящий
после слов then или else. Если требуется выполнить несколько операторов,
необходимо их поместить между операторными скобками begin и end.
Пример.
Переменные X и Y должны получить значения 5 и 23 соответственно
при выполнении условия А > 0 и обнуляются (получают значение 0), если
A 0. Оператор условия будет выглядеть так:
If A > 0 then
begin
X := 5;
Y := 23;
end
else
begin
X := 0;
Y := 0;
end;
Операторы, следующие после then или else, в свою очередь также могут
быть условными операторами.
1. Условный оператор первого типа – If условие then действие. При
этом:
• если оператор действие является условным оператором первого типа
(рис. 2.2), ему соответствует конструкция:
Истина
Условие 1
Ложь Истина
Условие 2
Ложь
Действие
21
If условие1 then
If условие2 then действие
В этом случае оператор действие определяется однозначно;
• если оператор действие – условный оператор второго типа, то спра-
ведлива конструкция:
If условие1 then
If условие2 then
действие1
else
действие2.
Возникает вопрос: какому оператору then соответствует else (рис. 2.3)?
Для обеспечения однозначности в языке Паскаль принято соглашение о том,
что каждому else соответствует предыдущий свободный then.
Истина
Условие 1
Ложь Ложь
Условие 2
Истина
Действие1 Действие2
Ложь Истина
Условие 2
Ложь
Действие 2 Действие 1
Additional, значок ;
• назвать кнопку для выхода BBExit;
26
• выбрать тип кнопки Kind в значение bkClose;
• изменить заголовок кнопки на «Выход» Caption.
11. Образ окна создан!
12. Проанализировать форму фигуры для создания алгоритма – в нашем
случае проверить попадание в большой квадрат с четвертями окружности по
углам и проверить, не попадает ли точка во внутренний квадрат.
13. Запрограммировать элемент SECoordX:
• щелкнуть дважды по кнопке SECoordX (будет сгенерировано событие
onChange – изменение значения в элементе SpinEdit);
• записать оператор проверки координат (координаты можно получить у
элементов SECoordX и SECoordY через свойства Value – обращение к свой-
ству объекта осуществляется через «точку», например: SECoordX.Value дает
значение свойства Value элемента SECoordX. SECoordX.Value дает значе-
ние введенной координаты X, SECoordY.Value – координаты Y). Для удоб-
ства введем переменные X и Y – тип данных выбираем byte (подходит этот
тип данных, так как он позволяет содержать значения от 0 до 255, а коорди-
наты имеют значения от 0 до 25):
procedure TFIf.SECoordXChange(Sender: TObject);
var
X, Y : byte;
begin
LResult.Font.Color := clRed;
X := SECoordX.Value;
Y := SECoordY.Value;
// первый круг (Shape 1)
if ((X >= 5)and(X <= 10)and(Y >= 5)and(Y <= 10)and
(Sqr(X - 10) + Sqr(Y-10) <= 25))or
// второй круг (Shape 2)
((X >= 15)and(X <= 20)and(Y >= 5)and(Y <= 10)and
(Sqr(X - 15) + Sqr(Y-10) <= 25))or
// третий круг (Shape 3)
((X >= 15)and(X <= 20)and(Y >= 15)and(Y <= 20)and
(Sqr(X - 15) + Sqr(Y-15) <= 25))or
// четвертый круг (Shape 4)
((X >= 5)and(X <= 10)and(Y >= 15)and(Y <= 20)and
(Sqr(X - 10) + Sqr(Y-15) <= 25))or
27
// первый квадрат (Shape 5)
((X >= 5)and(X <= 10)and(Y >= 10)and(Y <= 15))or
// второй квадрат (Shape 6)
((X >= 10)and(X <= 15)and(Y >= 5)and(Y <= 10))or
// третий квадрат (Shape 7)
((X >= 15)and(X <= 20)and(Y >= 10)and(Y <= 15))or
// четвертый квадрат (Shape 8)
((X >= 10)and(X <= 15)and(Y >= 15)and(Y <= 20))
then
begin
// попадание в фигуру (отображаем зеленым цветом)
LResult.Font.Color := clGreen;
LResult.Caption := 'Попала';
end
else
begin
// непопадание в фигуру (отображаем красным цветом)
LResult.Font.Color := clRed;
LResult.Caption := 'Не попала';
end;
// передвигаем «точку» в выбранные координаты
// начало координат определяется свойствами Left и Top элементов
// осей координат SX0 и SY0 соответственно. Шаг попиксельно
// рассчитываем, зная ширину и высоту квадратика Shape6,
// умноженную на введенные значения X и Y
// учитываем направление изменения координат X – слева-направо
// Y – сверху-вниз
SPoint.Left := SX0.Left + X * Shape6.Width div 5 - (SPoint.Width div 2);
SPoint.Top := SY0.Top - Y * Shape6.Height div 5 - (SPoint.Height div 2);
end;
14. Выбрать то же событие выбора значения onChange у элемента
SECoordY, что и запрограммированное для элемента SECoordX – из выпа-
дающего списка в событии SECoordY.onChange выбрать SECoordXChange.
15. Запустить программу <F9>.
16. Для улучшения программы можно запрограммировать:
• дооформить координатные оси: добавить промежуточные оси, прону-
меровать координаты на осях;
28
• получать результат попадания точки при нажатии кнопки мыши на
форме.
Индивидуальное задание. Создать программу по заданию, рассмотрен-
ному в 2.2, используя шаблон в соответствии с номером варианта (рис. 2.7).
Для отображения треугольника можно его нарисовать в стандартной про-
грамме Paint и вставить в Delphi с помощью элемента Image (как в работе 1).
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25
Рис. 2.7. Варианты заданий
Итоги. Во второй теме были изучены: типы переменных; операции над
операндами; условные операторы.
При создании демонстрационной программы получены навыки работы
со следующими командами и визуальными компонентами: элементом фигу-
ры Shape; элементом изменения значения чисел SpinEdit; связыванием со-
бытий объектов.
3. ОПЕРАТОРЫ ЦИКЛА
Цели: изучение стандартных функций; метки; изучение операторов
цикла; отладка программ.
35
Рекомендация. Использование безусловного оператора goto затрудняет
чтение текста программы программистом, поэтому его применять не реко-
мендуется.
Отладка программы. При построении сложных программ могут возни-
кать ошибки. Их принято делить на три группы:
1) синтаксические;
2) ошибки времени выполнения;
3) алгоритмические.
Наиболее простые из них синтаксические – ошибки набора текста – они
исправляются в процессе компиляции программы. Ошибки времени выполне-
ния – ошибки, возникающие при несоответствии типов введенных парамет-
ров типам используемых переменных, или ошибки вычислений (например,
деление на 0) – отслеживаются так же легко уже при первых запусках про-
граммы. Будем считать, что программа запускается из оболочки Delphi. По-
сле возникновения такой ошибки необходимо нажать «Ok» в окне сообщения
об ошибке, а затем завершить выполнение программы – пункт меню
Run/Program reset – или нажать комбинацию клавиш <Ctrl><F2>. При воз-
никновении такой ошибки курсор в программе будет указывать на строку,
вызвавшую ошибку. Наиболее сложно обнаружить алгоритмические ошиб-
ки. Программа компилируется без ошибок, не дает ошибок при пробных запус-
ках, но при анализе результатов выясняется, что результат неправильный.
Необходимо вручную «прокрутить» алгоритм – требуется отладка программы.
Для трассировки программы (проверки «логики алгоритма»), т. е. вы-
полнения программы по шагам, необходимо выполнить следующие действия.
В пункте меню выбрать пункт Run/Step over или Run/Trace in to (клавиши
<F8> и <F7> соответственно), команда Run/Trace in to отличаются более де-
тальной трассировкой. Для прекращения трассировки и продолжения выпол-
нения программы в автоматическом режиме необходимо выбрать пункт
Run/Run или нажать <F9>. Остановить программу можно с помощью ко-
манды Run/Program reset или нажать комбинацию клавиш <Ctrl><F2>.
Иногда необходимо выполнить трассировку с определенной строки про-
граммы. Для этого курсор подводят к интересующей строке и выполняют
команду Run/Run to cursor или нажимают <F4>.
Часто известно возможное место ошибки в алгоритме – тогда использу-
ют точку останова. Программист устанавливает на нужной строке курсор и
ставит там точку останова с помощью команды Run/Add Breakpoint или
36
нажав <F5>. Выбранная строка будет отмечена. Для снятия точки останова
необходимо на этой строке снова нажать <F5>. При выполнении программа
дойдет до точки останова, затем программист сможет трассировать програм-
му с помощью <F7> и <F8>. При необходимости можно указать условие
остановки на точке останова (эта настройка осуществляется в окне Break-
points, пункт меню Run/Add breakpoints).
При выполнении программы по шагам часто необходимо не только про-
верять правильность «логики алгоритма», но и знать значения некоторых
переменных. Для этого выполняют команду View/Watch/Add watch и вводят
имя интересующей переменной либо подводят курсор к переменной, значе-
ние которой необходимо просмотреть, и нажимают <Ctrl><F5>. При трасси-
ровке программы в этом случае в окне Watch list можно наблюдать измене-
ние значений интересующих переменных.
38
○ для ввода погрешности «Введите погрешность 10^-Е» (погрешность
вводить как количество знаков после запятой, например, число 3 будет обо-
значать погрешность 0,001);
○ для вывода расчетного значения – «Рассчитанная функция»;
○ для вывода стандартного значения функции – «Стандартная функция».
6. Так как будут рассчитываться две функции, добавить переключатель –
какая функция рассчитывается:
39
procedure TForm1.BOkClick(Sender: TObject);
var
Func : real;
A,A1 : real;
e : real;
x : real;
n : integer;
• присвоить значению переменной x значение элемента SEValueX (свой-
ство Value). При расчете точности необходимо в цикле умножать перемен-
ную e на число 0.1 столько раз, сколько требуется знаков после запятой (дан-
ное число содержит элемент SEValueE). Для этого после начала процедуры
(оператор begin) ввести следующие строки:
x := SEValueX.Value;
e := 1;
For n := 1 to SEValueE.value do e := e * 0.1;
• выяснить, какая функция рассчитывается, можно по переменной
RG.ItemIndex: если она равна 0, то рассчитывается функция «экспонента»,
если 1 – «логарифм». Для решения такой задачи удобно использовать опера-
тор выбора Case. После расчета точности необходимо добавить:
case RG.ItemIndex of
0 : begin
{Расчет экспоненты}
end;
1 : begin
{Расчет логарифма}
end;
end; {Case}
• для расчета функции можно использовать оператор цикла с постусло-
вием, так как данная функция может быть рассчитана как минимум один раз.
Условием выхода из цикла будет тот факт, что значение очередного члена
ряда станет меньше заданной точности. После комментария {Расчет экспо-
ненты} добавить строки:
Func := 1;
a := 1;
n := 1;
repeat
40
a1 := a * x /n;
Func := Func + a1;
a := a1;
Inc(n);
until(a<e);
• для вывода результатов расчета необходимо преобразовать числа в
строки, так как полем ввода/вывода элемента Edit является строка. После
окончания цикла (строка end {Case}) необходимо добавить следующие строки:
ERFun.Text := FloatToStr(Func);
ESFun.Text := FloatToStr(Exp(x));
11. Расчет экспоненты окончен! Запустить программу, нажав <F9>.
12. Для улучшения программы:
• необходимо написать текст расчета функции «логарифм». Так как ряд
использует в качестве аргумента x+1, удобно использовать функцию Lnxp1,
которая также возвращает натуральный логарифм числа (х+1). Для этого тре-
буется подключить к программе модуль Math. Это можно сделать в разделе
описания модулей после слова implementation. Необходимо добавить:
Uses
Math;
• для автоматического расчета после ввода значений в поля ввода (без
нажатия на кнопку «Ok») необходимо назначить элементам SEValueX и SE-
ValueE событие onChange кнопки BOk и сделать невидимой кнопку BOk
(эти задачи рассмотрены в 2.2).
Additional, ).
Подробно действия с этими элементами при работе с массивами будут
рассмотрены при построении демонстрационной программы.
Генератор псевдослучайных чисел. Если необходимо получить числа,
содержащие случайные значения, то можно использовать генератор псевдо-
случайных чисел. Существуют два оператора:
1. Randomize – служит для «запуска» генератора чисел (иначе последо-
вательность генерируемых чисел всегда будет одна и та же).
2. Random[(R)] – служит для генерации случайного числа в диапазоне
от 0 до R, включая значение R. Квадратные скобки при описании какого-либо
оператора обозначают, что часть кода, помещенная в них, может не указы-
ваться, тогда будут использованы начальные установки для этого оператора.
Если в операторе Random граница R не указана, то числа будут генериро-
ваться в диапазоне от 0 до 1, включая значение 1.
45
Для генерации случайного числа по нормальному распределению необ-
ходима функция RandG(m,sd) из модуля Math (задаются математическое
ожидание m и стандартное отклонение sd).
Поиск минимального (максимального) элемента. В качестве примера
рассмотрим одномерный массив целых чисел.
Алгоритм поиска минимального (максимального) элемента массива
довольно очевиден: сначала делается предположение, что первый элемент
массива является минимальным (максимальным), затем остальные элемен-
ты массива последовательно сравниваются с этим элементом. Если при
очередной проверке обнаруживается, что проверяемый элемент меньше
(больше) принятого за минимальный (максимальный), то этот элемент
принимается за минимальный (максимальный) и продолжается проверка
оставшихся элементов.
Пример.
Пусть Size – размер массива a, переменная для хранения минимума –
min, максимума – max, I – параметр цикла.
Тогда поиск минимального и максимального значений будет выглядеть
так:
min := a[1];
max := a[1];
For I := 1 to Size do
begin
If a[I] < min then min := a[I];
If a[I] > max then max := a[I];
end;
После окончания цикла в переменной min будет храниться минимальное
значение, а в переменной max – максимальное.
Поиск заданного элемента. Самый простой способ – перебора – после-
довательный перебор значений массива и сравнение с искомым. Но при
большой размерности массива это приведет к неоправданным затратам вре-
мени. Оптимальным является метод бинарного поиска. Алгоритм предпола-
гает, что исходный массив отсортирован. На структурной схеме алгоритма
(рис. 4.1) приняты следующие обозначения: A – массив значений; S – сред-
ний индекс массива; N – начальный индекс массива; K – конечный индекс
массива; F – искомое значение.
46
Начало Начало
Цикл I
N+K I := 1
S= +N
2 увеличение
Цикл J
Да J := K
A[S]=F
уменьшение
Нет
Нет J := J + 1
Да Нет A[J-1]< A[J]
A[S]<F
Да
A[J-1] := A[J]
N := S + 1 K := S – 1 A[J] := A[J-1]
Цикл J
J=I
Нет N>K
Цикл I
Да I=K
Конец Конец
47
4.2. Создание программы «Работа с массивом»
Задача. Необходимо сгенерировать матрицу случайных чисел размерно-
стью 55 и в соответствии с имеющимся шаблоном сформировать итоговый
массив по следующему правилу: если в шаблоне позиция зачернена, то в этой
позиции в итоговую матрицу записывается число из той же позиции из ис-
ходной матрицы, иначе записывается 0.
Примерный вид окна программы представлен на рис. 4.3.
tional, значок );
○ настроить размеры фигуры, чтобы можно было из них построить
квадрат размером 5 на 5 фигур. Для этого изменить свойства фигуры Width –
ширина и Height – высота;
○ скопировать элемент в буфер (<Ctrl><С>);
○ сделать 24 копии (<Shift><V>);
○ разместить квадратики в квадрат 55;
48
○ выделить средний квадрат размером 33 (удерживая <Shift>, щелкать
на нужных квадратиках) – выделенные квадратики будут отмечены рамочкой
;
○ изменить цвет выделенного квадрата на красный (свойство
Shape/Color установить в значение clRed);
• поместить два элемента для хранения массивов:
○ поместить на форму два элемента строковая таблица (StringGrid,
Standard, );
○ назвать элемент LSort (Name);
○ для отсортированного массива использовать элемент строка ввода
(Edit, Standard, );
○ назвать элемент ESort (Name);
49
• поместить метки для подписи всех видимых элементов: «Исходный
массив», «Итоговый массив», «Шаблон», «Неотсортированный массив» и
5 6 7 8
9 10 11 12
13 14 15 16
17 18 19 20
5. ГРАФИЧЕСКИЕ ПРИМИТИВЫ
54
Таблица 5.1
Свойство Определение
«Карандаш» – Pen
Color Цвет линии
Width Толщина линии
Style Стиль линии
Mode Режим отображения
«Кисть» – Brush
Color Цвет закрашиваемой области
Style Стиль заполнения области
Таблица 5.2
Константа Цвет Константа Цвет
clAqua Бирюзовый clMedGray Средне-серый
clBlack Черный clManeyGreen Цвет мяты
clBlue Синий clNavy Темно-синий
clCream Кремовый clOlive Оливковый
Темно-серый
clDkGray clPurple Пурпурный
(clGray)
clFuchsia Фиолетовый clRed Красный
Серебристый
clGray Серый (clDkGray) clSilver
(clLtDark)
clGreen Зеленый clSkyBlue Лазурный (Delphi 6)
clLime Салатный clTeal Темно-голубой
Светло-серый
clLtGray clWhite Белый
(clSilver)
clMaroon Темно-бордовый clYellow Желтый
Если требуются другие цвета, то можно воспользоваться функцией
RGB(Red, Green, Blue), в качестве параметров которой передаются значения
соответствующего цвета (красного, зеленого, синего) в диапазоне от 0 (зна-
чение отсутствует) до 255 (цвет полностью насыщен).
Пример.
RGB(255, 0, 0) – даст чисто красный цвет (clRed);
RGB(100, 100, 100) – даст оттенок серого;
RGB(255, 255, 255) – даст чисто белый цвет (clWhite).
Также полезным может оказаться свойство Pen.Width, устанавливаю-
щее толщину рисуемой линии в пикселях. Дополнительную справку по
остальным свойствам «карандаша» и «кисти» можно получить из кон-
текстной справки Delphi.
Рассмотрим графические примитивы: TextOut – вывод текста, Pixels –
вывод точки, LineTo – вывод линии, PolyLine – вывод ломаной, PolyGon –
55
многоугольник, Rectangle – прямоугольник, RoundRec – прямоугольник с
закругленными краями, Ellipse – эллипс, Arc – дуга и Pie – сектор.
TextOut(X,Y:Integer; const Text: String) – вывод текста Text в прямо-
угольник, имеющий координаты верхнего левого угла X,Y. Стиль (Style),
цвет (Color), название шрифта (Name), размер шрифта (Size) определяются
объектом Font.
Пример.
Font.Name := 'Times New Roman'; {Название шрифта Times New Roman}
Font.Size := 14; {Размер шрифта 14}
Font.Color := clBlue; {Цвет шрифта Синий (clBlue)}
Font.Style := [fsBold, fsItalic, fsUnderLine, fsStrikeOut];
{Настройка стиля шрифта указывает-
ся в квадратных скобках через запятую: fsBold – жирный, fsItalic – курсив,
fsUnderLine – подчеркнутый, fsStrikeOut – зачеркнутый}
Для настройки фона выводимого текста необходимо настроить цвет ки-
сти (Brush.Color), например системный цвет clBtnFace позволит выводить
фон текста таким же, как фон окна.
Pixels[X,Y:Integer] := цвет – вывод точки с координатами X, Y цветом,
указанным переменной цвет.
Замечание. Все последующие процедуры чертятся цветом, установлен-
ным для инструмента «карандаш» – Pen.Color.
LineTo(X,Y:Integer) – рисует линию от текущей точки окна (позиция
курсора) до точки с координатами X и Y. Чтобы установить курсор в опреде-
ленную точку, необходимо использовать процедуру MoveTo[X,Y:Integer],
которая перемещает курсор в точку с координатами X и Y.
Пример.
MoveTo(0,0);
LineTo(ClientWidth,ClientHeight);
В примере будет проведена линия от левого верхнего угла окна до пра-
вого нижнего угла.
PolyLine(array of TPoint) – рисует ломаную кривую по точкам, указан-
ным в массиве точек, соединяя первую со второй, вторую с третьей и т. д. Точки
массива могут быть как перечислены непосредственно в процедуре PolyLine,
так и описаны ранее. Использование процедуры будет понятно из примеров.
Примеры.
1. Точки описаны в процедуре:
56
PolyLine([Point(10,20),Point(20,10),Point(30,20)]);
будет построена ломаная с вершинами в точках, указанных в стандартной
переменной Point, с координатами (10,20), (20,10), (30,20).
2. Для описания массива точек назначим массив PArray, который опи-
шем в разделе описания переменных. Затем необходимо заполнить массив
значениями точек и, наконец, вызвать процедуру PolyLine:
var
PArray : array[1..3] of TPoint;
begin
… {Описание программы}
PArray[1].X := 10;
PArray[1].Y := 20;
PArray[2].X := 20;
PArray[2].Y := 10; X3
PArray[3].X := 30; X1,Y1
PArray[3].Y := 20; Y3
PolyLine(PArray); X2,Y2
57
Ellipse(X1,Y1,X2,Y2:Integer) – эллипс, вписанный в прямоугольник с
координатами (X1,Y1,X2,Y2); если это квадрат, то получаем окружность.
Arc(X1,Y1,X2,Y2,X3,Y3,X4,Y4:Integer) – вычерчивает дугу эллипса,
вписанного в прямоугольник с вершинами (X1,Y1,X2,Y2); X3,Y3 определяют
точку начала дуги; X4,Y4 определяют точку конца дуги. Начальная (конеч-
ная) точка – это точка пересечения границы эллипса с прямой, проведенной
из центра эллипса в точки с координатами (X3,Y3) и (X4,Y4). Дуга вычерчи-
вается против часовой стрелки от начальной точки к конечной.
Pie(X1,Y1,X2,Y2,X3,Y3,X4,Y4:Integer) – строит сектор. Строится по тем
же правилам, что и дуга, но отличается тем, что сектор – замкнутая фигура,
т. е. имеет цвет заполнения. Дуга и сектор изображены на рис. 5.3.
Дуга
X3,Y3 X1,Y1 X4,Y4
X1,Y1
X4,Y4 X3,Y3
X2,Y2 X2,Y2
Сектор
X1,Y1 X3,Y3 X1,Y1 X4,Y4
X4,Y4
X3,Y3
X2,Y2 X2,Y2
Рис. 5.3. Значения параметров для построения дуги и сектора
Печать изображения. Печать изображения – то же, что и вывод на
экран. Принтер, как и форма, имеет свойство Canvas. Здесь действуют та же
система координат и те же инструменты «карандаш» и «кисть». Отличие со-
стоит лишь в следующем: при печати надо сообщить принтеру, чтобы он
начал и закончил печать. Для этого надо поместить в текст программы все
графические вызовы, которые должны распечатать изображение между ко-
мандами принтера: Printer.BeginDoc и Printer.EndDoc. Как только принтер
получит команду Printer.EndDoc, он сразу отпечатает изображение.
Для печати необходимо настроить принтер с помощью стандартного ок-
на настройки. Для этого Delphi имеет вкладку наиболее популярных диало-
гов – Dialogs. На этой вкладке есть и диалоги настройки свойств принтера
58
(значок ) и свойств печати (значок ). Для вызова этих диалогов необ-
ходимо выполнить команду Execute. Например, команда
PrinterDialogSetup1.Execute откроет стандартное окно настройки принтера
(считается, что на форму помещен элемент настройки печати с именем
PrinterDialog1).
Если при создании программы планируется, что изображение будет пе-
чататься, необходимо предусмотреть умножение всех размеров используе-
мых объектов на константу, определяющую различие между размерами окна
и размерами бумаги. Для этих целей необходимо использовать свойства
принтера Printer.PageWidth и Printer.PageHeight, дающие размеры бума-
ги – ширину и высоту соответственно. Получить коэффициенты пересчета
можно, поделив самые короткие размеры печатаемой страницы на самые ко-
роткие размеры отображаемой формы:
Printer.PageWidth
Коэффициент = .
Pronter.PageHeight
Таким образом, при печати изображения останется только умножать все
размеры на эту константу.
Мультипликация. Под мультипликацией обычно понимают передви-
жение объекта или изменение его свойств (формы, цвета и т. п.). Сделать
движущийся объект очень просто – достаточно вывести изображение, затем
через некоторое время стереть его и вывести новое. Подобрав время между
выводом изображений, можно добиться плавного изменения изображения.
Для создания задержки в Delphi служит невидимый элемент Timer,
60
• форма содержит всего три элемента: контекстное меню (PopupMenu,
Standard, ) в Object Inspector – назвать этот элемент PM (свойство
73
Здесь:
Сообщение – выводимое сообщение;
Тип – тип сообщения. Оно может быть информационным, предупре-
ждающим или сообщением об ошибке;
Кнопки – список, определяющий число и вид кнопок;
КонтекстСправки – определяет номер экранной справки; так как экран-
ная справка не используется, то необходимо установить значение 0.
Константы, определяющие тип окна сообщения и вид кнопок, перечис-
лены в табл. 6.1.
Таблица 6.1
Тип сообщения
Константа Сообщение Значок
mtWarning Внимание
mtError Ошибка
mtInformation Информация
mtConfirmation Запрос подтверждения
mtCustom Пользовательское окно –
Вид кнопок
Константа Обозначение Код возврата
mbYes Да mrYes
mbNo Нет mrNo
mbOk Ok mrOk
mbCancel Отмена mrCancel
mbHelp Помощь mrHelp
mbAbort Прекращение mrAbort
mbRetry Повтор mrRetry
mbIgnore Игнорировать mrIgnory
mbAll Все mrAll
При вызове диалогового окна с набором кнопок их константы перечис-
ляются в квадратных скобках через запятую. Для анализа, какая кнопка была
активирована, следует значение, возвращаемое диалоговым окном, присво-
ить переменной типа word.
Пример.
Пусть необходимо выдать диалоговое окно запроса с тремя кнопками
«Yes», «No» и «Cancel» и проанализировать, какая кнопка была «нажата».
W := MessageDlg('Какую кнопку нажать?', mtConfirmation,
[mbYes, mbNo, mbCancel]);
74
Case W of
mrYes : {действие, связанное с «нажатием» на кнопку Yes};
mrNo : {действие, связанное с «нажатием» на кнопку No};
mrcancel : {действие, связанное с «нажатием» на кнопку Cancel};
end;
75
• в качестве дизайна окна использовать «главное меню» и панель «горя-
чих клавиш». Поместить панель на форму и настроить ее свойства:
○ поместить панель (элемент Panel, вкладка Standard, значок );
○ изменить заголовок на '' Caption;
○ изменить высоту панели так, чтобы она была чуть больше кнопок, ко-
торые будут в нее вставлены (Height = 40);
○ настроить панель, чтобы она всегда находилась вверху окна, незави-
симо от его размера Align установить в значение alTop – вверху;
76
• для открытия файла поместить стандартный диалог открытия файлов:
○ поместить объект открыть файл (Dialogs, OpenDialogs, );
○ дать ему имя ODText (Name);
○ настроить заголовок окна на «Открытие текстового файла» (Title);
○ назначить имя папки, из которой будут открываться файлы по умол-
чанию, дав ему имя «точка» (.) – текущая папка (папка программы) (Ini-
tialDir);
○ настроить фильтр файлов, которые будут открываться (Filter). Это
свойство запустит «Мастера» – слева в окне описание групп файлов (Filter
Name), справа – шаблон группы (Filter). Изменить описание на «Текстовые
файлы», а шаблон – на «*.txt»;
• для сохранения файлов необходимо:
○ поместить на форму элемент диалог сохранения (SaveDialog,
Dialogs, );
○ настроить имя на SDText (Name);
○ остальные свойства настроить, как и у объекта OpenDialog;
• для переключения между режимами чтения файла (посимвольное чте-
ние или чтение сразу всего файла) необходимо:
○ поместить на панель объект независимая метка (CheckBox,
Standard, );
○ настроить имя на CBChar ( Name);
○ заголовок изменить на «Посимвольно» ( Caption);
○ кнопка активна (выполняется чтение посимвольно) ( Checked уста-
новить в true);
• для вывода текста необходимо:
Итоги. В шестой теме были изучены: функции языка Delphi для работы
со строками; функции для работы с текстовыми файлами; стандартные диа-
логовые окна.
При построении демонстрационной программы получены навыки ис-
пользования новых компонентов: панели; кнопок быстрого доступа – «горя-
чих кнопок»; главного меню окна; диалоговых окон – открытие файла и со-
хранение файла; элемента независимого выбора.
81
7. РАБОТА С ГРАФИКАМИ
82
Editing Chart1
Series View
Chart
General
Axis Add…
Titles
Legend Delete
Panel
Paging
Walls Title…
3D
Data Clone
Export
Print
Change
83
Рис. 7.3. Раздел Series
В списке можно выделить различные типы диаграмм (табл. 7.1).
Таблица 7.1
Тип диаграммы Рисунок Название
Line Линия
Area Область
Point Точка
84
Окончание табл. 7.1
Тип диаграммы Рисунок Название
Arrow Стрелка
Shape Фигура
85
Окончание табл. 7.2
Тип диаграммы Рисунок Математическая функция
автоскроллер
87
○ два элемента SpinEdit (вкладка Samples). Назвать их: свойство Name –
верхний SEValueX (элемент для указания числа точек, которые будут отобра-
жаться по горизонтали) и нижний SEStepX (элемент указывает шаг изменения
значений элемента SEValueX);
○ элемент ComboBox (вкладка Standard) для возможности отображения
всех данных сразу (масштабировать график в пределах поля вывода графи-
ка). Свойство Name заменить на SBAllPoint. Свойство Caption – на «Все до-
ступные измерения». Checked – False;
○ еще один элемент ComboBox для указания автоскроллирования дан-
ных на графике. Его свойства: Name – CBAutoScroll; Caption – «Автоскролли-
рование»; Checked – False;
○ элемент SpinEdit (вкладка Samples) для ввода величины сдвига при
скроллировании. Его свойство Name – SEScroll;
○ элемент UpDown (вкладка Win32) для скроллирования графика. Его
свойства: Name – UDScroll; Orientation – upVertical;
○ поместить кнопку BitBtn (вкладка Additional). Настроить кнопку для
закрытия программы: свойство Kind установить в значение bkClose. Свой-
ство Caption установить в значение «В&ыход»;
• на форму поместить элемент Timer (вкладка System) для осуществле-
ния автоскроллирования. Его свойство Name – TScroll;
• на форму поместить элемент для построения графика TChart (вкладка
TChartStd). Его свойства: Name – CEKG; Align – alClient – распахнуто на
всю доступную часть формы.
• Настройка всех основных элементов готова!
• Настроить элемент для построения графика CEKG (поставленный на
форму на предыдущем шаге) – щелкнуть на него мышкой дважды – запу-
стится «Мастер». Настроить этот элемент:
○ добавить график, нажав на кнопку Add в пункте Series;
○ назвать этот график EKG (кнопка Title);
○ настроить цвет графика на красный: Series EKG Format
Format Color выбрать красный цвет;
○ выбрать сплошную линию: Series EKG Format Style вы-
брать значение Solid;
○ убрать легенду графика: Series EKG General Legends Vis-
ible снять галочку;
○ разрешить горизонтальное скроллирование графика: Chart General
Allow Scroll Horisontal;
88
○ настроить масштаб: Chart Axis Left Axis, а также Right Axis,
Top Axis и Depht Axis оставить в значении «Автоматически» свойство
Automatic оставлено с галочкой (масштаб подстраивается автоматически).
А вот в свойстве Bottom Axis галочку со свойства Automatic снять и скоррек-
тировать свойство вручную: Min (минимальное значение) – поставить 0, Max
(максимальное значение) – поставить 10000, Increment (шаг изменения свой-
ства) – поставить значение 1000;
○ изменить заголовок графика: Chart Titles написать «Электрокар-
диограмма»;
○ подписать оси графика: ось ординат Chart -> Axis -> Title для
LeftAxis настроить Style -> Title -> написать «мкВ», так как на графике дан-
ные отображаются в микровольтах. Задать угол отображения: Angle устано-
вить в 0 и Position в end. Аналогично настроить вторую ось (BottomAxis) –
подпись изменить на «мкс» (данные записаны с частотой одна запись в одну
микросекунду), угол и позицию задать аналогично оси ординат.
4. Форма настроена!
5. Запрограммировать событие активации формы – при активной форме
выбрать в Object Inspector на вкладке Events событие onActivate и щелк-
нуть по нему. В текст программы вписать событие:
var
I,R : Integer; // значения по X и Y
F : TextFile; // файл с данными
begin
// очистить график
Series1.Clear;
// открыть файл с ЭКГ
AssignFile(F,'EKG.txt');
{$I-}
// открыть для чтения
Reset(F);
{$I+}
// если файл не открыт, закрыть программу
if IOResult <> 0 then
Close;
// начальное значение по X
i := 0;
89
// пока не конец файла
while not EOF(F) do
begin
inc(i); // увеличить счетчик
readln(F,R); // считать данные из файла
Series1.AddXY(i, R, '' , clRed); // добавить точку в график
end;
CloseFile(F); // закрыть файл
// по горизонтали первые 10000 измерений
SEValueX.Value := 10000;
// шаг изменения горизонтальных значений – 1000 измерений
SEStepX.Value := 1000;
end;
6. Запрограммировать изменение значения в элементе SEValueX, два-
жды щелкнув по нему. Вписать текст:
// изменять масштабирование графика от начала 0
// до указанного в SEValueX.Value значения
CEKG.Axes.Bottom.Minimum := 0;
CEKG.Axes.Bottom.Maximum := SEValueX.Value;
7. Запрограммировать изменение значения в элементе SEStepX, дважды
щелкнув по нему. Вписать текст:
// установить шаг масштабирования графика
SEValueX.Increment := SEStepX.Value;
8. Для возможности сохранять «старый» масштаб при просмотре всех
значений по оси абсцисс и возможности его восстановить ввести глобальную
переменную Max. Для этого в тексте программы после строки {$R *.dfm} до-
бавить описание этой переменной:
var
Max : Integer;
9. Запрограммировать возможность просмотреть на графике сразу все
значения по оси абсцисс. Дважды щелкнуть на элементе CBAllPoint и впи-
сать текст:
// если выбраны все измерения, то настроить свойство
// отображения графика на автоматическое
// иначе в соответствии со значением SEValueX.Value
CEKG.Axes.Bottom.Automatic := CBAllPoint.Checked;
If CEKG.Axes.Bottom.Automatic then
begin
90
// если значение автоматическое, то запомнить «старое» значение
Max := SEValueX.Value;
// установить в элемент SEValueX.Value максимальное значение
SEValueX.Value := Round(CEKG.Series[0].MaxXValue);
end
else
begin
// вернуть «старое» значение
SEValueX.Value := Max;
// выполнить перепостроение графика
SEValueX.OnChange(Sender);
end;
10. Запрограммировать автоскроллирование графика. Дважды щелкнуть
на элемент TScroll и вписать текст:
// скроллировать график на величину, указанную в SEScroll
CEKG.Axes.Bottom.Scroll(SEScroll.Value);
11. Запрограммировать включение/выключение автоскроллирования.
Для этого щелкнуть дважды на элементе CBAutoScroll и вписать текст:
// разрешить или запретить автоскроллирование
TScroll.Enabled := CBAutoScroll.Checked;
12. Запрограммировать скроллирование графика при изменении значе-
ния UPScroll. Скроллирование графика будет изменяться на величину, за-
данную в элементе SEScroll. Дважды щелкнуть на элементе UPScroll и впи-
сать текст:
// провести скроллирование влево (–) или вправо (+)
if Button = btNext then
CEKG.Axes.Bottom.Scroll(SEScroll.Value)
else
CEKG.Axes.Bottom.Scroll(-SEScroll.Value);
13. Программа готова!
93
16. Создание программы, реализующей простейшие операции (сложе-
ние, вычитание, умножение и деление) с комплексными числами.
17. Создание программы для расчетов кардиогемодинамических показа-
телей.
18. Создание программы вычисления показателей работы почек.
19. Создание программы расчета средних показателей эксперимента
(среднее арифметическое, среднее гармоническое, среднее кубическое и др.).
20. Заполнение шахматной доски ходами коня, чтобы конь побывал на
каждом поле.
21. Перевод чисел из одной системы счисления в другую (двоичная, де-
сятичная, шестнадцатеричная, римские числа).
22. Размещение восьми ферзей на шахматном поле так, чтобы ни один
ферзь не оказался под ударом.
23. Написание шифровальщика и дешифровальщика текста.
24. Создание электронного варианта программы «Мадагаскарские шашки».
25. Создание программы для оценки степени соответствия эмпириче-
ских и теоретических данных по различным критериям.
26. Создание архиватора и разархиватора файлов.
27. Программа умножения матриц. Размерность матрицы задается.
28. Написание программы создания правильного тетраэдра с возможно-
стью его вращения.
29. Построение самостоятельно пополняющегося словаря перевода с од-
ного языка на другой. (Задается текст; программа, просматривая текст, пере-
водит все слова, имеющиеся в словаре. При отсутствии слова в словаре выда-
ется запрос о его переводе и введенное слово и перевод заносятся в словарь.)
30. Написание программы прохода через вершины графа, используя соеди-
няющие его дуги, при условии, что проходить по дуге можно только один раз.
94
Заключение
Пособие содержит семь тем; каждая тема заканчивается рассмотрени-
ем практической задачи, решение которой основано на приведенных тео-
ретических сведениях. Пособие содержит начальные сведения по построе-
нию программ, предоставляя студенту исходную информацию по про-
граммированию в RAD Studio, являясь основой для решения задач, выпол-
няемых на старших курсах.
Также данное пособие является основой для создания системы управле-
ния базами данных (СУБД) психодиагностического назначения, которая бу-
дет рассмотрена во втором семестре в курсе «Информационные технологии»
и логически завершит рассмотрение вопросов программирования для созда-
ния программ медико-технического назначения.
95
Список рекомендуемой литературы
Архангельский А. Я. Программирование в Delphi 5. 2-е изд. М.: БИ-
НОМ, 2000.
Бельтюков М. В. Информационные технологии: учеб.-метод. пособие.
СПб.: Изд-во СПбГЭТУ «ЛЭТИ», 2019.
Вирт Н. Алгоритмы и структуры данных. СПб.: Невский диалект, 2001.
ГОСТ 19.701-90 (ИСО 5807-85). Схемы алгоритмов, программ, данных и
систем. Условные обозначения и правила выполнения. М.: Изд-во стандар-
тов, 1990.
Дантеманн Д., Мишел Д., Тейлор Д. Программирование в среде Delphi.
Киев: DiaSoft Ltd., 1995.
Иванов Ю. И., Погорелюк О. Н. Обработка результатов медико-
биологических исследований на микрокалькуляторах. М.: Медицина, 1990.
Культин Н. Delphi 4. Программирование на языке Object Pascal. СПб.:
БХВ – Санкт-Петербург, 1999.
Сван Т. Delphi 4. Библия разработчика. Киев; М.; СПб.: Диалектика,
1998.
Тюкачев Н. А., Илларионов И. В., Хлебостроев В. Г. Программирование
графики в Delphi. СПб.: БХВ – Санкт-Петербург, 2008.
96
Содержание
Введение ................................................................................................................... 3
1. ЗНАКОМСТВО СО СРЕДОЙ ПРОГРАММИРОВАНИЯ RAD STUDIO ..... 6
1.1. Теоретические сведения .............................................................................. 6
1.2. Создание программы «Моя первая программа» ..................................... 13
2. УСЛОВНЫЕ ОПЕРАТОРЫ ............................................................................. 16
2.1. Теоретические сведения ............................................................................ 16
2.2. Создание программы «Попадание точки в фигуру» .............................. 24
3. ОПЕРАТОРЫ ЦИКЛА...................................................................................... 29
3.1. Теоретические сведения ............................................................................ 29
3.2. Создание программы «Степенные ряды» ................................................ 37
4. ТИП ДАННЫХ «МАССИВ»............................................................................ 42
4.1. Теоретические сведения ............................................................................ 42
4.2. Создание программы «Работа с массивом» ............................................ 48
5. ГРАФИЧЕСКИЕ ПРИМИТИВЫ ..................................................................... 54
5.1. Теоретические сведения ............................................................................ 54
5.2. Создание программы «Графические примитивы» ................................. 60
6. РАБОТА С ТЕКСТОВОЙ ИНФОРМАЦИЕЙ ................................................ 68
6.1. Теоретические сведения ............................................................................ 68
6.2. Создание программы «Редактор текста» ................................................. 75
7. РАБОТА С ГРАФИКАМИ ............................................................................... 82
7.1. Теоретические сведения ............................................................................ 82
7.2. Создание программы «Электрокардиограмма» ...................................... 87
8. ВЫПОЛНЕНИЕ КУРСОВОЙ РАБОТЫ. ВАРИАНТЫ РАБОТ .................. 93
Заключение............................................................................................................. 95
Список рекомендуемой литературы .................................................................... 96
97
Бельтюков Михаил Витальевич
Учебно-методическое пособие
Редактор Н. В. Кузнецова
––––––––––––––––––––––––––––––––––––––––––––––––––––––––––
Подписано в печать 26.10.20. Формат 60×84 1/16.
Бумага офсетная. Печать цифровая. Печ. л. 6,25.
Гарнитура «Times New Roman». Тираж 77 экз. Заказ .
––––––––––––––––––––––––––––––––––––––––––––––––––––––––––
Издательство СПбГЭТУ «ЛЭТИ»
197376, С.-Петербург, ул. Проф. Попова, 5
98