- •Тема 13. Программирование на языке паскаль
- •13.1. Базовые элементы языка Паскаль
- •13.1.1. Алфавит языка Паскаль
- •13.1.2. Элементарные конструкции
- •13.1.3. Концепция типа для данных
- •13.1.4. Стандартные типы данных
- •13.1.5.Перечисляемый тип. Интервальный тип
- •13.1.6. Константы
- •13.1.7. Переменные. Инициализация переменных
- •13.1.8. Выражения
- •13.2. Структура программы
- •13.3. Оператор присваивания
- •13.4. Операторы ввода и вывода
- •13.5. Пример линейной программы
- •13.5.1. Понятие сложности выражения. Оптимизация вычислений
- •13.5.2.Оптимизация линейных программ
- •13.6. Ветвящиеся программы
- •13.6.1. Понятие условия. Тип данных Boolean (логический)
- •13.6.2. Составной оператор
- •13.6.3.Выбирающие операторы: условный оператор
- •13.6.4.Ветвящиеся программы. Пример.
- •13.6.5. Оптимизация ветвящихся программ по времени
- •13.6.6.Выбирающие операторы: оператор варианта
13.3. Оператор присваивания
Самым основным, фундаментальным оператором языка является оператор присваивания. С помощью оператора присваивания осуществляется преобразование информации. Он предназначен для вычисления нового значения некоторой переменной, а также для определения значения, возвращаемого функцией.
Он имеет вид: < имя > := < выражение >
Имя слева от символа присваивания := является именем переменной, которой присваивается значение выражения, стоящего справа. Поэтому наряду со значением выражения важным атрибутом является его тип. Тип выражения в правой части оператора присваивания должен совпадать или быть совместимым с типом переменной из левой части. Компилятор на этапе синтаксического анализа программы осуществляет эту проверку - так называемый контроль типов. Допустимо присваивание переменным любых типов, за исключением типа File.
Root1 := Pi*(x - y)
Discriminant := Sqrt(b*b-4*a*c)/2/A
Index := Index + 1
Letter := Succ(Succ(Letter))
13.4. Операторы ввода и вывода
Для организации ввода – вывода данных в языке Pascal используются операторы – процедуры Write, Read, Writeln, Readln. С помощью этих операторов организуется ввод–вывод данных в/из файлы Input, Ouтput.
Текстовые файлы Input, Output представляются пользователю как текст, разбитый на строки и снабженный признаком конца текста и признаками концов строк. Каждая строка может содержать числа или символьные данные (т.е. строка состоит из нескольких данных типов Integer, Real, Сhar). Чтение/запись осуществляется через так называемый буфер файла. В момент обращения к файлу его буфер установлен на некоторое данное – элемент файла. Буфер файла может быть перемещен либо к следующему данному, либо к первому данному следующей строки.
Оператор Read(x) читает данное из Input в переменную х и перемещает буфер к следующему данному.
Оператор Writе(x) перемещает буфер в следующую позицию и пишет данное в Output из переменной х.
Оператор Readln(x) читает данное с новой строки из файла Input в переменную х.
Оператор Writеln(x) пишет данное с новой строки в Output из переменной х.
Оператор Readln без параметров реализует пропуск строки исходных данных (переход на следующую строку ввода).
Оператор Writеln без параметров реализует пропуск строки и переход к началу следующей строки.
Операторы ввода/вывода могут использоваться в более общей форме:
Read( <список переменных> ), Readln( <список переменных> )
Write( <список выражений или строк> ) Writeln( <список выражений или строк> )
Эта форма определяется синтаксическими диаграммами:
При вводе исходных данных происходит преобразование из внешней формы представления во внутреннюю, определяемую типом переменных. Переменные, образующие список ввода, могут принадлежать либо к целому, либо к действительному, либо к символьному типам. Чтение исходных данных логического типа в языке Паскаль недопустимо. Операторы ввода при чтении значений переменных целого и действительного типа пропускает пробелы, предшествующие числу. В то же время эти операторы не пропускают пробелов, предшествующих значениям символьных переменных, так как пробелы являются равноправными символами строк. Пример записи операторов ввода:
var rv, rs: real;
iw, ij: integer;
chc, chd: char;
................
read(rv, rs, iw, ij);
read(chc, chd);
Значения исходных данных при вводе с клавиатуры могут отделяться друг от друга пробелами и нажатием клавиш табуляции и <Enter>.
Переменные, составляющие список вывода, могут относиться к целому, действительному, символьному или булевскому типам. В качестве элемента списка вывода кроме имен переменных могут использоваться выражения и строки.
Вывод каждого значения в строку экрана происходит в соответствии с шириной поля вывода, определяемой конкретной реализацией языка. Форма представления значений в поле вывода соответствует типу переменных и выражений: величины целого типа выводятся как целые десятичные числа, действительного типа – как действительные десятичные числа с десятичным порядком, символьного типа и строки – в виде символов, логического типа – в виде логических констант true и false.
Оператор вывода позволяет задать ширину поля вывода для каждого элемента списка вывода. В этом случае элемент списка вывода имеет вид А:К, где А – выражение или строка, К – выражение либо константа целого типа. Если выводимое значение занимает в поле вывода меньше позиций, чем К, то перед этим значением располагаются пробелы. Если выводимое значение не помещается в ширину поля К, то для этого значения будет отведено необходимое количество позиций.
Для величин действительного типа элемент списка вывода может иметь вид А:К:М, где А – переменная или выражение действительного типа, К – ширина поля вывода, М – число цифр дробной части выводимого значения. К и М – выражения или константы целого типа. В этом случае действительные значения выводятся в форме десятичного числа с фиксированной точкой.
Пример записи операторов вывода:
. . . . . . . . . . . .
var ra, rb: real; ip,iq:integer;
br, bs: boolean;
cht, chv, chu, chw: char;
. . . . . . . . . . . .
writeln(ra, rb:10:2);
writeln(ip, iq:8);
writeln(br, bs:8);
writeln(cht, chv, chu, chw);