Программирование линейных алгоритмов
Линейным алгоритмом называют такую алгоритмическую конструкцию, которая реализована в виде последовательности действий, причем каждое действие выполняется один раз.
Чаще всего линейные программы создают и используют для вычисления значений выражений, заданных формулами.
Раздел операторов линейной программы формируется из операторов присваивания и вызова процедур, которые выполняются в том порядке, в котором встречаются в тексте программы.
Не забывайте, операторы отделяются друг от друга точкой с запятой!
1.3.1 Операторы языка программирования Pascal
Все операторы языка Pascal можно подразделить на простые (присваивания, вызова процедуры, безусловного перехода, пустой) и структурированные (составной, условия, выбора, повтора).
Оператор присваивания.Формат оператора:
<имя переменной> := <выражение>
Принцип действия: вычисляется выражение, находящееся в правой части оператора, и его значение присваивается переменной в его левой части.
Тип выражения в правой части оператора присваивания и переменной в левой его части должны быть совместимы по типу. Например, недопустимо присваивать вещественное число переменной целого или символьного типа.
Если в правой части − алгебраическое выражение, то оно может содержать переменные и константы как целого, так и вещественного типа. При этом тип результата будет вещественным.
Пример 1. Соответствие и несовместимость типов данных в выражениях с оператором присваивания.
Program types;
Var x : real;
n : integer;
ch : char;
st : string;
Begin
n:=5;
x:=n; {правильно, вещественной переменной присваивается целое
значение}
n:=3.4; {ошибка, целой переменной присваивается вещественное
значение}
n:=4/2; {ошибка, результат операции деления всегда
вещественного типа}
n:=cos(x); {ошибка, результатом вычисления функции косинус
является вещественное число}
ch:=’a’;
st:=ch; {правильно, строковой переменной присваивается
символьное значение}
ch:=’Pascal’; {ошибка, символьной переменной присваивается
строковое значение}
n:=ch; {ошибка, целой переменной присваивается символьное
значение}
End.
Процедуры ввода-вывода. Ввод данных с клавиатуры во время работы программы реализуется с помощью обращений к процедурам:
read(список переменных, перечисленных через запятую)
readln(список переменных, перечисленных через запятую)
Принцип действия: выполнение программы приостанавливается, и компьютерная система переходит в режим ожидания (отображается мигающий курсор) ввода пользователем значения переменной или значений переменных. При использовании в программе процедуры ввода read пользователь должен вводить значения переменных, отделяя их пробелом, а при использовании процедуры ввода readln после ввода каждого значения переменной необходимо нажать клавишу Enter.
После ввода пользователем значений всех указанных в списке процедуры ввода переменных выполнение программы возобновляется, а введенные значения присваиваются этим переменным.
Для вывода информации (сообщений или результатов работы программы) используют обращение к процедурам:
write(список переменных, констант, выражений через запятую)
writeln(список переменных, констант, выражений через запятую)
Например, при обращении к процедуре
writeln('x=',x,' sin x =',sin(x))
выводятся последовательно строковая константа из двух символов x= (без кавычек и апострофов), значение переменной x, строковая константа sin x = (без кавычек и апострофов, первый символ пробел) и вычисленное значение выражения sin(x).
Принцип действия: значения констант, переменных и выражений выводятся на экран (в файл, на печать), причем при использовании в программе процедуры write курсор остается в конце текущей строки, и следующие выходные данные будут печататься в той же строке, а при использовании процедуры writeln курсор переходит на новую строку.
Примечание− Вызов процедуры writeln без параметров используется для перехода на новую строку или для пропуска строки.
Процедуры write и writeln предоставляют возможность форматирования выходных данных, т. е. представления результатов в удобном для пользователя виде (F-формат, формат с фиксированной точкой). Минимальное количество позиций, которое должно занимать при выводе значение целого или строкового типа указывается форматом :n, например:
writeln(k:5)– для отображения переменной k целого или строкового типа при выводе выделяется 5 позиций;
writeln(a,' ':3,b)– значения переменных a и b при выводе разделяются тремя пробелами.
Количество позиций, отводимое при выводе для вещественного числа, указывается форматом :n:m, где n − общее число позиций, m − число позиций для дробной части, например:
writeln(y:6:2) − для отображения вещественной переменной у при выводе отводится 6 позиций, из них 2 − после десятичной точки, причем одну позицию занимает символ точка, т. е. значение y = 23.17445 будет выведено как 23.17 с пробелом впереди числа.
Форматирование результатов не является обязательным. Но тогда для данных целого типа при выводе выделяется 15 позиций, а для данных вещественного типа − 18 позиций, что часто бывает чрезмерным. При этом вещественные числа представляются в E-формате (другими словами, в экспоненциальной форме, формате с плавающей точкой, в виде мантиссы и порядка), например:
−3.456000000E+02
Такие числа иногда трудны для восприятия и могут сливаться друг с другом, что является недочетом, иногда приводящим к неправильному толкованию результата. Поэтому рекомендуется не только форматировать результаты при выводе, но и отделять значения выводимых переменных и выражений пробелами. Например, при выводе значения переменной p = 2,74 и выражения y, зависящего от p (получено значение y = 16,570824), есть несколько способов, представленных в таблице 6.
Таблица 6 − Форматирование выходных данных в языке Pascal
Фрагмент кода | Вывод на экран (в файл) |
writeln(p,y) | 2.7400000000E+00 1.6570824E+01 |
write('p=',p:5:2,'y=',y:8:4) | p= 2.74y= 16.5708 |
write('p=',p:4:2,' y=',y:6:4) | p=2.74 y=16.5708 |
Составной оператор объединяет в одно целое группу операторов, которые после этого могут считаться одним оператором. Свое применение он находит в структурированных операторах ветвления и цикла. Составной оператор начинается зарезервированным словомbegin, затем следуют операторы, перечисленные через точку с запятой, и оканчивается зарезервированным словом end.
Пара служебных (ключевых) слов beginиendназывается операторными скобками.
Составной оператор может включать другой составной оператор, причем следует помнить о правильном вложении пар операторных скобок, например:
Оператор безусловного перехода.Операторы в программе выполняются в том порядке, в котором они записаны. Чтобы изменить последовательность выполнения операторов, необходимо использовать оператор безусловного переходаgoto, действие которого состоит в передаче управления оператору, снабженному меткой, который может находиться в любой строке раздела операторов программы.
Формат оператора безусловного перехода:
goto<метка>
Метку можно установить перед любым оператором основной программы (кроме операторов в составе составного), отделив её двоеточием:
<метка> : <оператор>
В качестве метки можно использовать как имя, предложенное пользователем, так и число от 0 до 9999. Все метки, встречающиеся в программе, надо предварительно указать в разделе описаний после зарезервированного слова Label (см. структуру простейшей программы на языке Pascal):
Label <список меток>;
Оператор безусловного перехода рекомендуется использовать только для обработки исключений (аварийных ситуаций, ошибок).