Добавил:
ivanov666
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз:
Предмет:
Файл:Программирование. Процедурное программирование. Учебное пособие
.pdf
Основные возможности процедурного программирования по работе с числовыми данными
клавишей мыши в области этого окна и выбрать из контекстного меню команду 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
Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]
