- •Содержание
- •Часть 1. Основные понятия программирования §1.1. Этапы разработки программного обеспечения
- •§1.2. Основные сведения об алгоритмах Понятие алгоритма
- •Свойства алгоритма
- •Формы записи алгоритмов
- •Блок-схемы алгоритмов
- •§1.3. Языки программирования
- •§1.4. Паскаль и Object Pascal, Турбо-Паскаль и Delphi
- •Контрольные вопросы
- •Язык, оболочка и интегрированная среда разработки
- •Часть 2. Общие сведения о языке Паскаль §2.1. Алфавит и служебные слова
- •Описание общих конструкций языка
- •§2.2. Структура программы
- •§2.3. Разделы описаний Описание меток
- •Определение констант
- •Определение типов
- •Описание переменных
- •Контрольные вопросы
- •Часть 3. Простые типы данных Иерархия типов
- •§3.1. Целые типы
- •§3.2. Вещественные типы
- •§3.3. Логический тип
- •§3.4. Литерный тип
- •§3.5. Перечисляемый тип
- •§3.6. Диапазоны (интервальный тип)
- •Дополнительные типы в Delphi
- •Контрольные вопросы
- •Глава 4. Операторы языка Паскаль Выражения
- •§4.1. Оператор присваивания
- •§4.2. Ввод-вывод данных
- •§4.3. Составной оператор
- •§4.4. Пустой оператор
- •§4.5. Безусловный оператор перехода
- •§4.6. Условный оператор
- •§4.7. Оператор цикла с параметром for
- •§4.8. Оператор цикла с предусловием while
- •§4.9. Оператор цикла с постусловием repeat
- •§4.10. Оператор выбора case
- •Контрольные вопросы
- •Глава 5. Процедурное программирование §5.1. Функции
- •Параметры – значения
- •Параметры – переменные
- •Бестиповые параметры
- •§5.2. Процедуры
- •Правила использования подпрограмм
- •Рекурсия
- •Директивы
- •Процедурные типы
- •Пример использования подпрограмм
- •Контрольные вопросы
- •Глава 6. Структурированные типы данных
- •§6.1. Массивы
- •§6.2. Строки
- •§6.3. Записи
- •§6.4. Множества
- •Пример использования множеств
- •§6.5. Файлы
- •Установочные и завершающие операции
- •Операции ввода-вывода
- •Перемещения по файлу
- •Пример работы с файлом
- •Обработка ошибок ввода-вывода
- •Специальные операции
- •Пример объединения двух файлов
- •Текстовые файлы
- •Стандартные текстовые файлы
- •Файлы без типа
- •Контрольные вопросы
- •Глава 7. Динамические структуры данных §7.1. Динамические переменные
- •§7.2. Указатели
- •Работа с динамическими переменными
- •Пример двухсвязанного циклического списка
- •Указатели без типа
- •Контрольные вопросы
- •Глава 8. Низкоуровневые возможности Паскаля §8.1. Язык Ассемблер
- •§8.2. Доступ к аппаратуре Доступ к памяти
- •Доступ к портам ввода-вывода
- •Работа по прерываниям
- •Контрольные вопросы
- •Глава 9. Модули §9.1. Основные понятия
- •§9.2. Использование модулей
- •§9.3. Стандартные модули
- •§9.4. Модуль Crt
- •Работа с экраном в текстовом режиме
- •Работа с клавиатурой
- •Работа со звуком
- •§9.5. Модуль dos
- •§9.6. Графический режим монитора
- •Контрольные вопросы
- •Глава 10. Введение в объектно-ориентированное программирование §10.1. История развития программирования
- •Понятие объекта
- •§10.2. Свойства объектов
- •Раннее и позднее связывание
- •§10.3. Виртуальные методы
- •Конструкторы и деструкторы
- •§10.4. Динамические объекты
- •Скрытые поля и методы
- •Контрольные вопросы
- •Литература
§4.4. Пустой оператор
Пустой оператор никак не обозначается и не вызывает действий – это просто лишняя точка с запятой в программе. Предназначен он в качестве носителя метки, если ее необходимо поставить перед словом END в конце составного оператора или программы. Поэтому любой оператор может заканчиваться одной или несколькими точками с запятой.
§4.5. Безусловный оператор перехода
Это единственный оператор, в котором используется метка. Он имеет вид:
Go To <метка>;
После выполнения этого оператора будет осуществлен переход на оператор, перед которым стоит указанная метка.
Использование безусловных передач управления в программе считается теоретически избыточным для многих языков высокого уровня и способствует созданию малопонятных и трудно модифицируемых программ, которые вызывают сложности при отладке и сопровождении. Если же программист считает, что без условных переходов не обойтись, то необходимо выполнять следующие условия:
Не допускаются переходы внутрь подпрограмм (процедур и функций) или из них.
Переход внутрь структурного оператора может вызвать непредсказуемые эффекты, хотя компилятор не выдает сообщение об ошибке.
Примером на условный и безусловный операторы можно считать алгоритм вычисления кубического корня, хотя реально для этих целей удобнее и нагляднее использовать один из операторов цикла без параметра.
Program S;
Label L;
Const Eps = 1E-6; {определим точность как константу}
Var a,x,y:real;
Begin
WriteLn (‘Введите число для определения кубического корня’);
Read (a);
x := a;
L: y := x; {«старим» предыдущее значение}
x := 1/3*(a/sqr(y)+2*y); {вычисляем новое значение}
If Abs(x-y)>Eps Then
GoTo L; {повторим, если разность старого и нового значений не достигла заданной точности}
WriteLn (‘Значение корня:’, x:10:6);
End.
§4.6. Условный оператор
При составлении по алгоритму программы на месте блока «Решение» записывается условный оператор, который может иметь 2 формы. В общем виде полная форма записывается как:
If <логическое выражение> Then <оператор1> Else < оператор2>;
а сокращенная:
If < логическое выражение > Then < оператор1>;
В первом случае, если логическое выражение истинно (True), то выполняется оператор1, а если ложно, то оператор2. Во втором случае при ложности логического выражения просто осуществляется переход к следующему оператору.
Наиболее простой пример – вычисление значения кусочно-непрерывной функции:
Program Function;
Var
f,x:real;
Begin
Read (x);
If x>=0 Then F := x*x {первый вариант}
Else F := sqrt (x); {второй вариант}
WriteLn ('Значение функции =',F:8:3);
end.
Заметим, что значение функции используется как имя переменной. Оно не должно содержать скобок, поэтому здесь вместо F(x) используется просто F (можно функцию назвать и по-другому, например Fx).
§4.7. Оператор цикла с параметром for
Операторы цикла заставляют выполняться входящие в их состав внутренние операторы несколько раз. В языке Паскаль существует три вида операторов цикла.
Если число повторений цикла известно перед его началом, то используют наиболее наглядный, но все же имеющий ограниченную область применения оператор FOR:
For <параметр цикла> := <начальное значение> To | DownTo <конечное значение> Do <внутренний оператор – тело цикла>
Внутренний оператор будет выполняться один раз для каждого значения параметра цикла из указанного диапазона. Если используется служебное слово То, то при каждом новом выполнении берется следующее значение, при DownTo – предыдущее (используются функции Succ и Pred), то есть тип параметра цикла должен быть дискретным.
При использовании оператора FOR необходимо соблюдать следующие правила:
Начальное и конечное значение являются выражениями (константа – вырожденное выражение), а параметр цикла – имя переменной (может быть и структурированной, например, элемент массива).
Параметр цикла, начальное и конечное значение должны быть одного и того же дискретного типа (не допускается использование типа Real) и не должны изменяться внутри оператора FOR.
Если используется служебное слово То, а начальное значение больше конечного (или меньше в случае DownTo), то внутренний оператор не выполнится ни разу.
Пример на вычисление суммы с оператором FOR приводился ранее. Если количество повторений заранее известно, но параметр цикла – вещественный, то в явном виде этот оператор использовать нельзя. Ограничение на дискретный тип можно обойти, если ввести дополнительную целую переменную. Например, необходимо вычислить таблицу синуса для значений аргумента от 0.5 до 0.7 с шагом 0.01. Введем дополнительную переменную i, изменяющуюся от 0 до 20 (всего надо вычислить 21 точку). Если учесть, что внутри цикла надо использовать не только оператор вычисления синуса, но и оператор вывода, то в операторе цикла используем операторные скобки.
Программа будет выглядеть следующим образом:
Program Tabl;
Var
i:integer;
x:real;
Begin
WriteLn (' Таблица синуса');
For i:=0 To 20 Do
Begin
x := i/100+0.5;
WriteLn ('x=', x:4:1,'sin(x)=', sin(x):8:5);
end
end.
Если же количество повторений заранее неизвестно, как, например, при вычислении кубического корня, то используют другие операторы цикла.
