Файл: «Основы программирования на языке Pascal»(Теоретические основы языка Pascal).pdf
Добавлен: 28.03.2023
Просмотров: 219
Скачиваний: 2
СОДЕРЖАНИЕ
1. Теоретические основы языка Pascal
1.1. История создания языка Pascal
1.2. Основные элементы и структура программы
1.3. Организация и описание данных
2. Программирование процесса обработки данных
2.1. Программирование линейных, разветвляющихся и ветвящихся процессов
Результат 2-го этапа - математическая модель.
- Построение алгоритма, представляющего собой точное описание конечной последовательности действий, понятное исполнителю, и приводящее исходные данные к конечному результату [2]. Алгоритм может быть описан в какой- либо форме записи по созданной математической модели.
Результат 3-го этапа - алгоритм.
- Программирование - этап составления текста программы по разработанному алгоритму с использованием команд выбранного языка программирования, который представляет собой систему условных обозначений для записи команд. Этапы разработки программы выполняются в среде программирования, связанной с выбранным языком программирования.
Результат 4-го этапа - программный код.
- Отладка и тестирование программы состоит в выявлении и устранении ошибок; и причин их появления. Ошибки компиляции (синтаксические) - погрешности в записи конструкций языка программирования, например не описана переменная. Ошибки времени выполнения (семантические) - погрешности неправильного содержания действий и использования недопустимых значений величин, например деление на ноль. В результате выполнения будет установлен курсор на номер строки с ошибкой и выведено сообщение. К логическим ошибкам могут привести погрешности в описании алгоритма, например, не задано начальное значение переменной. Результат будет неверным, а поиск ошибок затруднен. Выполнение тестирования программы подразумевает подбор наборов значений входных данных с заранее известными результатами (тесты) или результаты могут быть легко просчитаны.
Результат 5-го этапа - программа.
- Выполнение расчетов с реальными данными и анализ полученных результатов возможно после выполнения всех этапов разработки. Если обнаруживаются ошибки, то необходимо вернуться к любому этапу решения задачи.
Результат 6-го этапа - замечания.
- Сопровождение программы включает доработку программы и составление сопроводительной документации к программе.
Результат 7-го этапа - документированное приложение.
1.3. Организация и описание данных
Программа, написанная на языке Паскаль, оперирует некоторыми объектами, называемыми данными. Каждый элемент данных в программе является либо константой, либо переменной. Для каждой переменной задается некоторый тип, определяющий как возможные значения переменной, так и операции, которые могут над ней выполняться. Имя в языке Паскаль состоит из последовательности букв, цифр и символа подчеркивания, начинающейся с буквы. Имена используются в программах для записи констант, переменных, функций и подпрограмм.
Тип переменной обязательно должен быть задан в разделе описания переменных. Именованная константа отличается от переменной тем, что ее значение не может изменяться во время выполнения программы и она описывается в разделе описания констант. Тип константы однозначно определяется ее значением и в явном виде не указывается. Константы могут являться значением следующих типов: целые, вещественные, логические ( булевские), литерные (символьные) и текстовые (строки).
Константы описываются следующим образом:
CONST имя1 = значение1; имя2 = значение2;
Если потребуется изменить константу, то при таком ее описании достаточно изменить ее значение в описании.
const log = true;
rmax= 24; zk = c;
Раздел "описание констант" в программе может отсутствовать, а раздел "описание переменных" должен присутствовать тогда, когда в программе используется хотя бы одна переменная. Выбор имен переменных желательно производить таким образом, чтобы был понятен их смысл и назначение.
Операторы описания данных
Язык Паскаль предоставляет богатые возможности для построения сложных типов данных, которые задаются в разделе типов. Однако все они строятся на основе стандартных типов: целый, вещественный, символьный и логический. Кроме этого, в языке Паскаль можно использовать перечисляемые типы.
Стандартные типы данных
Целый тип (INTEGER).
Для любой вычислительной машины значением переменной этого типа должно быть целое число n, лежащее в диапазоне:
-MAXINT <= N <= MAXINT
Помимо стандартного целого типа на персональном компьютере в среде Турбо-Паскаль возможны следующие целочисленные типы которые отличаются размером при хранении в памяти и способом кодировки значений (с представлением знака или без него):
|
Тип |
Диапазон |
Размер, байт |
|
shortint byte integer word longint |
-128...+127 0...255 -32768...+327678 0...65535 -2147483648... +2147483647... |
1 1 2 2 4 |
Над целыми числами кроме обычных арифметических и стандартных операций могут выполняться:
- операции целочисленного деления и поиска остатка от целочисленного деления:
15 div 4 = 3 13 mod 4 = 1
- операции поиска предыдущего и последующих значений аргумента:
pred(9) = 8 succ(-9) = -8
pred(-9) = -10 succ(9) = 10
- функция позволяющая определить четность или нечетность аргумента:
odd(7) - true
odd(6) - false.
Переменные целого типа описываются следующим образом:
var a, g, jh, gg: integer;
Вещественный тип (REAL)
Значением переменной этого типа является вещественное число, заданное либо в естественной форме -6.7694
или в экспоненциальной 5.6Е-2.
Вещественные переменные обладают двумя важными характеристиками - диапазоном значений и точностью, которые определяются структурными особенностями конкретной ЭВМ.
Помимо стандартного вещественного типа на персональном компьютере в среде Турбо-Паскаль возможны следующие вещественные типы, являющиеся приближением к точным значением:
|
Тип |
Диапазон |
Значащие цифры |
Размер, байт |
|
real single double extended comp |
-1.7e38...1.7e38 -3.4e38...3.4e38 -1.7e308...1.7e308 -1.1e4932...1.1e4932 -2*2^63...1...2*2^63 |
11...12 7...8 15...16 19...20 19...20 |
6 4 8 10 8 |
Тип comp содержит только целочисленные значения.
Для вещественных аргументов кроме перечисленных выше функций могут использоваться стандартные функции преобразования значений вещественного типа в значение целого типа :
- функция trunc вырабатывает целый результат путем отбрасывания дробной части аргумента:
trunc(23.54) = 23
trunc(-3.54) = -3
- функция round вырабатывает целый результат путем округления до ближайшего целого:
round(23.53) = 24
round(-3.53) = -4
- функция int выделяет целую часть числа:
int(23.54) = 23.0
int(-3.54) = -3.0
- функция frac выделяет мантиссу аргумента:
frac(23.54) = 0.54
frac(-1.67) = -0.67
Переменные вещественного типа описываются следующим образом:
var ad, gs, fh, nn: real;
Булевский тип (BOOLEAN)
Этот тип данных на языке Паскаль называется логическим. Над логическими данными вычисляются следующие операции:
OR, NOT и AND.
Логическими данными и операции над ними имеют важное значение в информатике, так как позволяют ввести в расчеты элементы формальной логики.
Так как значения true и false можно рассматривать как упорядоченное множество, состоящее из двух элементов, то для этого типа данных помимо succ и pred, определена функция ord, определяющая порядковый номер для значений перечисляемого типа:
pred(false) = true succ(true) = false
ord(false) = 0 ord(true) = 1
Переменные логического типа описываются следующим образом: var w, y, z, vv: boolean;
Символьный тип (CHAR)
Символьными значениями переменной символьного типа являются элементы конечного и упорядоченного набора символов. Набор символов должен отвечать следующим минимальным требованиям:
- содержать буквы, упорядоченные в алфавитном порядке;
- содержать цифры, расположенные в порядке возрастания;
- содержать символ пробел.
Каждый символ должен иметь свой порядковый номер. При записи данных символьного типа символ должен заключаться в апострофы:
'2','g','k','s','0'.
С данными символьного типа связаны функции:
- ord(символ) - дает порядковый номер символа в упорядоченном массиве:
ord('?') = 63
ord('5') = 53
ord('I') = 73
- сhr(номер) - дает символ, стоящий под указанным номером в упорядоченном множестве символов:
chr(53) = '5'
chr(53) = '5'
ord(73) = 'I'
К аргументам символьного типа применимы функции pred и succ, которые выдают предыдущий и последующий символы, а также операции отношения ( символ 1 считается больше символа 2, если его порядковый номер в множестве символов больше сравниваемого):
pred('M') = 'L'
succ('M') = 'N'
Переменные символьного типа описываются следующим образом:
var w, y, z, vv: сhar;
Строковый тип (STRING).
Значениями переменной строкового типа являются последовательности символов, заключенные в апострофы. Имеющиеся внутри текста апострофы должны быть отдублированы:
'2gk', 's''0', 'Program''System'''.
Переменные строкового типа описываются следующим образом:
var wf, yyy, zs, vev: string [10];
Описание массивов
Массив представляет собой упорядоченный набор значений одного типа, имеющих общее имя. Местоположение элемента в массиве задается индексом, который записывается в квадратных скобках:
имя: array [ Nmin..Nmax ] of тип;
При описании массивов большей размерности пределы измерения должны отделяться друг от друга запятой:
имя: array [ Nmin..Nmax, Kmin..Kmax, Rmin..Rmax] of тип;
Массивы описываются следующим образом:
var fff: array [1..4, 1..4] of integer;
sss: array [1..6] of real;
ddd: array [1..11, 1..4, 1..55] of char;
aaa: array [1..22, 1..11] of string.
2. Программирование процесса обработки данных
2.1. Программирование линейных, разветвляющихся и ветвящихся процессов
Простые операторы (не объединяют в своей структуре другие операторы): ввода/вывода, присваивания и пустой используются для программирования линейных процессов обработки данных.
Оператор присваивания изменяет значение переменной из левой части на результат вычисления выражения из правой части.
<идентификатор>:= <выражение>;
Требования к выполнению:
- идентификатор из левой части и значение выражения из правой части должны быть одного и того же типа; исключением является присваивание вещественной переменной целочисленного значения;
- присваивать можно значения любых типов данных, кроме файловых;
- значения переменных, связанных в выражение, должны быть определены до выполнения оператора присваивания.
Выполнение: вычисляет значение выражения из правой части, если надо, и присваивает переменной из левой части.
Пример использования: S := pi * sqr (R); - вычисляется произведение значений pi и квадрата значения R, затем присваивается переменной S.
Пустой оператор не выполняет никаких действий в программе и обозначается точкой с запятой.
Требования к выполнению:
- к пустому оператору может быть установлена метка;
- оператор может располагаться в любой части программы согласно правилам синтаксиса языка.
Выполнение: служит для организации выхода из середины программы.
Программирование разветвляющихся процессов обработки данных реализуется через использование структурных операторов (представляют собой сложную структуру из других операторов): условного и составного; простого оператора безусловного перехода.
Составной оператор за счет задания порядка выполнения операторов внутри скобок делает программу более наглядной.
begin <оператор 1>; ...; <оператор N> end;
Требования к выполнению:
- выполнение следующего оператора должно начаться после выполнения предыдущего;
- end рассматривается как разделитель (точка с запятой), поэтому перед end точка с запятой обычно не ставится. Выполнение: составной оператор объединяет операторы в блок.
Условный оператор позволяет реализовать разветвление в зависимости от результата проверки условия.
Описание может быть задано одной из двух форм:
- полная: if <условие> then <оператор 1> else <оператор 2>;
- краткая: if <условие> then <оператор 1>;
Требования к выполнению:
- в качестве <оператор 1> и <оператор 2> используется один оператор, иначе используется составной оператор;
- сложные условия могут задаваться с помощью операций отношения, соединяясь логическими операциями;
- <условие> всегда проверяется на истинность, даже если в логическом условии указывается только имя переменной логического типа;
- <условие> является выражением логического типа.