Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Программирование. Процедурное программирование. Учебное пособие

.pdf
Скачиваний:
0
Добавлен:
07.09.2026
Размер:
2 Мб
Скачать
☆
Основные возможности процедурного программирования по работе с числовыми данными
клавишей мыши в области этого окна и выбрать из контекстного меню ко­манду Add Watch (либо дважды кликнуть левой клавишей мыши по окну), далее в диалоговом окне Watch Properties задать имя нужной переменной. После этого в список будет добавлена заданная переменная. В столбце Value будет отображено её значение. Каждый раз, когда значение пере­менной будет изменяться, это будет отображено в столбце Value. Список переменных можно постоянно модифицировать: удалять, добавлять, мо­дифицировать переменные, объединять их в группы.
На рис. 2 приведен пример отладки программы с отображением зна­чения переменной Name в окне Watch List. Стрелкой отображается вы­полняемая в данный момент инструкция.
Рис. 2. Процесс отладки программы
В окне Local Variables выводится список локальных переменных вместе со значениями.
В других средах программирования процесс отладки аналогичен.
Контрольные вопросы и задания
1. Дайте определения алгоритма, языка программирования, програм-
мы, среды программирования.
2. Какие среды разработки на языке Pascal/Delphi существуют?
3. Перечислите основные компоненты среды разработки.
4. Опишите процесс создания и выполнения программы.
5. Что такое трассировка, каково её назначение и выполнение? Для
каких целей предназначены точки останова?
11
Глава 1
1.2. Типизация данных. Основные типы данных
и средства работы с ними. Основные операторы
Структура программы
Структура программы на языке Delphi выглядит следующим образом:
program <имя>;
{$APPTYPE CONSOLE}
uses <подключаемые модули>
label <раздел описания меток> const
<раздел описания констант> type <раздел описания типов> var <раздел описания переменных>; procedure (function)... <раздел описания процедур и функций> begin <раздел операторов> end.
Часть 1. Заголовок программы
Часть 2. Описание идентификаторов
Часть 3. Тело программы
Как правило, программу можно представить в виде трех частей.
В первой части программы – заголовок программы и (если необхо­димо) директивы компилятора. Заголовок программы состоит из ключево­го слова program и имени программы.
Строка {$APPTYPE CONSOLE} является директивой компилятора и устанавливает тип приложения.
Вторая часть программы является декларативной. В ней располага­ется описание всех необходимых для программы компонент. Одним из основных понятий при описании является идентификатор. Идентифика- торы – это имена констант, переменных, типов, объектов, процедур, функций и полей в записях. Идентификатор всегда начинается с буквы (символ подчеркивания тоже считается буквой), за которой могут следо­вать буквы и цифры. В идентификатор не могут входить пробелы и специ­альные символы алфавита. Обычно компилятор распознает первые 64 сим­вола идентификатора.
Раздел uses используется всегда (должен быть обязательно подключен модуль SysUtils). Раздел label используется, если нужно осуществлять без­условные переходы в программе (что не поощряется), может быть опущен.
12
Основные возможности процедурного программирования по работе с числовыми данными
Раздел const присутствует, если в программе используются констан­ты (в основном неизменяемые значения). В этом случае после ключевого слова const перечисляются имена констант со своими значениями. Кон­станта объявляется следующим образом:
<идентификатор> = <значение>;
Здесь <идентификатор> – идентификатор константы, <значение> – значение константы. Тип константы компилятор определяет самостоятель­но по виду значения – это нетипизированные константы. В ходе выполне­ния программы константе не может быть присвоено новое значение.
Пример описания констант
const CountDays = 31; // Целая константа Pi = 3.14; // Вещественная константа Radus = 1.35E20; // Экспоненциальная форма записи числа
Использование имен констант облегчает модификацию про­грамм. Если нужно изменить некоторое часто используемое число­вое значение, проще изменить только одну строку описания кон­станты, чем просматривать всю программу и вносить исправления при каждом появлении этого значения.
Раздел type нужен для объявления типов данных, определяемых поль-
зователем (стандартные типы данных объявлять не нужно). Тип данных яв­ляется краеугольным понятием в программировании, так как в дальнейшем определяет допустимые действия с переменными объявленного типа.
Ключевое слово var открывает раздел описания переменных. Он ука-
зывает вычислительной машине, какие переменные используются в про­грамме, какие имена у этих переменных и данные какого типа будут хра­ниться в этих переменных. Переменная объявляется следующим образом:
<идентификатор> : <тип>;
При объявлении переменной возможно одновременно присвоить ей
первоначальное значение (см. пример).
Пример описания переменных
var // Раздел описания переменных X: Integer; // Целочисленная переменная Y: Real = 0; // Вещественная переменная Flag: Boolean = True;// Логическая переменная Name: string; // Строковая переменная
13
Глава 1
Типы данных подразделяются на две категории: встроенные и опре-
деляемые пользователем. Основные встроенные типы данных представле­ны в табл. 1.
Таблица 1
Основные (наиболее используемые) типы данных
Типы Описание
Логические:
Boolean Логический тип, принимает значение True и False
Целочисленные:
Byte
Integer
Int64
Вещественные:
Real
Double
Extended
Символьно­строковые:
Наименьшая форма целого числа, занимающая 8 битов (1 байт) памяти. Поддерживает значения от 0 до 255
Целое 32-битное число со знаком. Поддерживает значения от –2 147 483 648 до 2 147 483 647
Целое 64-битовое число со знаком. Поддерживает значения от –9 223 372 036 854 775 808 до 9 223 372 036 854 775 807
Вещественный тип. В настоящее время эквивалентен типу Double
Вещественный тип с двойной точностью, поддерживает прибли­зительно 15 цифр точности в диапазоне от 2.23e
–308
до 1.79e
308
Вещественный тип с высокой точностью, поддерживает прибли­зительно 19 цифр точности в диапазоне от 3.37e
–4932
до 1.18e
4932
Char Символьный тип String Строковый тип TextFile Файловый тип для работы с текстовыми файлами
При создании любой серьезной программы одними встроенными ти-
пами обойтись невозможно. В этом случае Delphi предоставляет возмож­ность для создания собственных (пользовательских) типов данных.
Синтаксис описания типа следующий:
type <название типа> = <описание типа>;
Здесь <название типа> – произвольный идентификатор, <описание
типа> может представлять собой описание создаваемого типа (например, перечислимый тип, тип-диапазон, массив, строка, множество, запись, файл).
Если набор значений некоторой переменной изначально упорядочен,
то такая переменная относится к порядковому типу (например, логический, целый, перечислимый, тип-диапазон и символьный).
14
Основные возможности процедурного программирования по работе с числовыми данными
Перечислимые типы в Delphi представляют собой упорядоченный
перечень элементов. Элементы обозначаются некоторыми идентификато­рами, каждому из которых присваивается уникальное значение по порядку перечисления начиная с нуля.
Пример создания перечислимого типа
type TSeason = (Winter, Spring, Summer, Autumn); var Season : TSeason; // Переменная перечислимого типа begin Season := Autumn; // Присвоение одного из заданных значений
Тип-диапазон создается как последовательность, включающая наи-
меньшее значение в диапазоне, две точки без пробела между ними и наи­большее значение. Тип-диапазон позволяет накладывать более жесткие ог­раничения на диапазоны значений используемых переменных. Это дает возможность автоматически контролировать выходы значений за пределы указанного диапазона.
Пример создания типа-диапазона
type TDayMonth = 1..31; TLetters = 'F'.. 'T'; var Day: TDayMonth; Letter: TLetters; begin Day := 20; // нормально Day := 32; // ошибка Letter := 'K'; // нормально Letter := 'A'; // ошибка
Типы, определяемые пользователем, такие как массивы, строки,
множества, записи, типизированные файлы, будут рассмотрены в следую­щих параграфах пособия.
Третья часть программы – тело программы, где описываются выпол-
няемые действия (последовательность операторов). Тело программы заклю­чается между ключевыми словами begin и end, которые организуют блок.
Основные виды операторов в языке Delphi
Разделитель операторов
Каждый оператор в теле программы должен быть отделен друг от
друга. В качестве такого разделителя выступает точка с запятой (;). Между
15
Глава 1
разделителями допускается произвольное количество пробелов и пустых строк.
Операторы ввода/вывода
Read(P1, P2,...,Pn); ReadLn(P1, P2,...,Pn);
Оператор, обеспечивающий ввод значения переменных P1, P2, ..., Pn с клавиатуры.
Write(P1, P2,...,Pn); WriteLn(P1, P2,...,Pn);
Оператор, выводящий на экран значение элементов P1, P2, ..., Pn. В качестве элементов могут выступать числа, переменные, выражения или текст в апостро­фах. После выполнения оператора WriteLn последующий вывод данных будет начинаться с новой строки.
Оператор Read читает данные и оставляет курсор после прочтения
на этой же строке, а оператор ReadLn переводит курсор после прочтения на следующую строку.
Действия операторов Write и WriteLn во многом идентичны, за од-
ним исключением. Выполнение оператора WriteLn приводит к тому, что последующий вывод данных будет начинаться с новой строки. Дополни­тельно можно указать количество позиций для вывода переменной (вы­ражения). Для вещественных переменных (выражений) кроме общего ко­личества позиций еще можно указать число выводимых знаков после за­пятой.
Пример операторов вывода
// Вывод целочисленной переменной X на 5 позиций WriteLn('X=', X:5);
{Вывод вещественной переменной Y на 6 позиций (2 знака после запятой)}
WriteLn('Y=', Y:6:2);
Оператор присваивания
Общая форма записи оператора присваивания:
<идентификатор> := <выражение>;
Здесь <идентификатор> – идентификатор переменной, <выражение> –
некоторое выражение. В свою очередь, выражением может быть отдельное значение либо некоторая конструкция, имеющая допустимое значение. В качестве <выражения> могут выступать: переменные, константы, мате-
16
Основные возможности процедурного программирования по работе с числовыми данными
матические или логические выражения (полученные с помощью некото­рых операций), результат выполнения функций.
Основные математические операции приведены в табл. 2.
Таблица 2
Операции Значение операции
Арифметические:
+ Сложение
- Вычитание * Умножение div Целочисленное деление / Вещественное деление mod Остаток от деления
Логические: Not Логическое отрицание
Основные операции
And Логическое «И» Or Логическое «ИЛИ» Xor Логическое исключающее «ИЛИ»
Математические:
Abs Возвращает абсолютную величину Sqr Возвращает квадрат числа Sqrt Возвращает квадратный корень из числа Max Возвращает максимальное число из двух целых значений Min Возвращает минимальное число из двух целых значений Odd Возвращает истину, если передаваемое число четное
перации для порядко-
ых переменных:
Inc Увеличение порядковой переменной Dec Уменьшение порядковой переменной
Pred
Succ
Возвращает предыдущее значение переменной, относя­щейся к порядковому типу
Возвращает следующее значение переменной, относя­щейся к порядковому типу
Ord
Возвращает порядковый номер выражения порядкового типа
Тригонометрические функции:
Sin Возвращает значение синуса числа Cos Возвращает значение косинуса числа
17
Глава 1
Операции Значение операции
Tan
ArcSin
ArcCos
ArcTan
Pi
Экспоненциальные функции:
Exp Возвращает экспоненту числа Ln Возвращает натуральный логарифм числа Log10 Возвращает логарифм числа с основанием 10
Функции округления:
Int
Frac Возвращает дробную часть вещественного числа
Trunc
Round
Генератор случайных чисел:
Randomize Инициализирует генератор случайных чисел Random Возвращает случайное число
Возвращает значение тангенса числа. Определена в моду­ле Math
Возвращает арксинус числа в радианах. Определена в мо­дуле Math
Возвращает арккосинус числа в радианах. Определена в модуле Math
Возвращает арктангенса числа в радианах. Определена в модуле Math
Возвращает значение с плавающей запятой, дающее при­ближенное значение
Возвращает целочисленную часть вещественного числа как вещественное число
Возвращает целочисленную часть вещественного числа как целое число
Округляет вещественное число до целого значения по об­щим правилам округления
Окончание табл. 2
В выражениях, состоящих из ряда операций, последовательность
выполнения операций определяется стандартными математическими пра­вилами следования и приоритета выполнения. Операции умножения и де­ления выполняются ранее операций сложения и вычитания, так как опера­ции умножения и деления имеют приоритет перед сложением и вычитани­ем. Порядок выполнения операций можно изменить, применив круглые скобки.
Составной (блочный) оператор
При программировании часто требуется выполнить определенную по-
следовательность операторов, рассматриваемую как один оператор. В этом случае данную последовательность операторов заключают в операторные скобки, в качестве которых выступают ключевые слова begin и end.
18
Основные возможности процедурного программирования по работе с числовыми данными
Условный оператор
Язык Delphi содержит оператор if...then...else. Этот оператор называ-
ется условным оператором или оператором ветвления. Он реализует ус­ловные переходы в программе по двум направлениям в зависимости от значения условия, определяемого некоторым логическим выражением.
Общая форма записи:
короткая if <логическое выражение> then <оператор>; полная if <логическое выражение> then <оператор1> else <опера­тор2>;
В первой форме <оператор> выполняется, только если <логическое
выражение> истинно. Во второй форме <оператор
> выполняется, если
1
<логическое выражение> истинно, в противном случае выполняется <опе­ратор
>. Операторы <оператор>, <оператор1> и <оператор2> могут быть
2
составными.
Примеры условных операторов
if X < 0 then X := -X; if X > Y then Max := X else
Max := Y;
if X < Y then begin
Temp := X; X := Y; Y := X; end;
Операторы цикла
Цикл – это последовательность операторов, которая может выпол-
няться более одного раза. В языке Delphi имеются три вида операторов цикла.
Цикл со счетчиком. Общая форма записи:
for <переменная> := <начальное значение> to <конечное значение> do <оператор>; for <переменная> := <конечное значение> downto <начальное значение> do <оператор>;
19
Глава 1
Схема реализации: вначале <переменной> присваивается <начальное
значение>. Затем в цикле выполняется <оператор>. По завершении выпол­нения <оператора> значение <переменной> увеличивается на 1 (первая форма цикла) или уменьшается на 1 (вторая форма цикла) и выполняется следующая итерация (шаг) цикла. Цикл завершается при достижении <пе­ременной> своего финишного значения. <Оператор> может быть состав­ным, <переменная> должна быть порядкового типа.
Примеры циклов со счетчиком
// Печать целых чисел от 1 до 10
for I := 1 to 10 do WriteLn(I); // Печать степеней числа 2 в обратном порядке
for I := 15 downto 0 do begin
Y := Exp(I*Ln(2)); WriteLn('2^', I,' = ', Y); end
Цикл с предусловием. Общая форма записи:
while <логическое выражение> do <оператор>;
Указанный <оператор> выполняется повторно до тех пор, пока <ло-
гическое выражение> истинно, <оператор> может быть составным. Если оно ложно изначально, цикл не выполняется ни одного раза (так как про­верка условия выполняется в начале каждого шага цикла).
Пример вычисления суммы последовательности из 10 чисел в цикле
I := 0;
while I < 10 do begin
ReadLn(X); Sum := Sum + X; I := I + 1; end
Цикл с постусловием. Общая форма записи:
repeat <список операторов> until <условие>
20
Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]