Работа с величинами. Ввод-вывод. Выражения. Линейные алгоритмы
Для программной обработки в ЭВМ данные представляются в виде величин и их совокупностей. Величина — это элемент данных с точки зрения их семантического (смыслового) содержания или обработки. Смысловое (семантическое) разбиение данных производится во время постановки задачи и разработки алгоритма ее решения (входные, выходные и промежуточные). Исходные (входные) — это данные, известные перед выполнением задачи, из условия. Выходные данные — результат решения задачи. Переменные, которые не являются ни аргументом, ни результатом алгоритма, а используются только для обозначения вычисляемого промежуточного значения, называются промежуточными. Вместе с тем, архитектура ЭВМ, используемое программное обеспечение требуют указать имена и типы данных — целый, вещественный, логический и символьный.
Итак, с понятием величины связаны следующие характеристики (атрибуты):
имя — это ее обозначение и место в памяти;
тип — множество допустимых значений и множество применимых операций к ней;
значение — динамическая характеристика, может меняться многократно в ходе исполнения алгоритма. Во время выполнения алгоритма в каждый конкретный момент величина имеет какое-то значение или не определена.
Постоянной называется величина, значение которой не изменяется в процессе исполнения алгоритма, а остается одним и тем же, указанным в тексте алгоритма. Переменной называется величина, значение которой меняется в процессе исполнения алгоритма.
Тип выражения определяется типами входящих в него величин, а также выполняемыми операциями. В языке Pascal тип величины задают заранее, т.к. все переменные, используемые в программе, должны быть объявлены в разделе описания с указанием их типа.
Различают переменные следующих простых типов: целые (Integer, Byte, ShortInt, Word, LongInt), вещественные (Real, Comp, Double, Single, Extended), логический (Boolean), символьный (Char), перечисляемый, диапазонный.
Вообще, иерархия типов в языке Pascal следующая:
Объявления служат для компилятора источником информации о свойствах величин, используемых в программе, и установления связи между этими величина и их идентификаторами, фиксируя тем самым конкретный смысл, предписанный различным идентификаторам в программе. Согласно объявленным переменным и их количеству компилятор резервирует необходимый объем памяти для хранения значений величин, над которыми выполняются требуемые операции.
Описание переменной: имя переменной (идентификатор) : тип;
Пример описания:
Var D, C, N : Integer;
LogPer : Boolean;
A, B : Real;
K : Char;
Тип переменной определяет диапазон допустимых значений, принимаемых величинами этого типа; набор операций, допустимых над данной величиной и объем памяти, отводимой под эту переменную.
Каждый тип имеет свой идентификатор.
Идентификатор | Длина, байт | Диапазон (множество) значений | Операции |
Целые типы | |||
integer | 2 | –32768..32767 | +, –, /, *, Div, Mod, >=, <=, =, <>, <, > |
byte | 1 | 0..255 | +, –, /, *, Div, Mod, >=, <=, =, <>, <, > |
word | 2 | 0..65535 | +, –, /, *, Div, Mod, >=, <=, =, <>, <, > |
shortint | 1 | –128..127 | +, –, /, *, Div, Mod, >=, <=, =, <>, <, > |
longint | 4 | –2147483648..2147483647 | +, –, /, *, Div, Mod, >=, <=, =, <>, <, > |
Вещественные типы | |||
real | 6 | 2,9Ч10–39 — 1,7Ч1038 | +, –, /, *, >=, <=, =, <>, <, > |
single | 4 | 1,5Ч10–45 — 3,4Ч1038 | +, –, /, *, >=, <=, =, <>, <, > |
double | 8 | 5Ч10–324 — 1,7Ч10308 | +, –, /, *, >=, <=, =, <>, <, > |
extended | 10 | 3,4Ч10–4932 — 1,1Ч104932 | +, –, /, *, >=, <=, =, <>, <, > |
Логический тип | |||
Boolean | 1 | true, false | Not, And, Or, Xor, >=, <=, =, <>, <, > |
Символьный тип | |||
char | 1 | все символы кода ASCII | +, >=, <=, =, <>, <, > |
Обмен информацией с ЭВМ предполагает использование определенных средств ввода-вывода. В ЭВМ основным средством ввода является клавиатура, вывода — дисплея.
Процедура, которая в режиме диалога с клавиатуры присваивает значение для переменной величины, называется процедурой ввода.
В языке Pascal эта команда выглядит следующим образом:
Read(список переменных);
Например,
Var
A : Real; B : Integer; C : Char;
Begin
Read(A, B, C)
End.
Читается: “Ввести вещественную А, целую В и символьную С”.
Как только в программе встречается вызов процедуры Read, ЭВМ приостанавливает выполнение этой программы и ждет, пока пользователь введет с клавиатуры соответствующие значения, которые по очереди будут присваиваться переменным, перечисленным в списке ввода. Значения вводимых данных одновременно отображаются на экране дисплея. После нажатия клавиши enter, когда все переменные примут свои значения из входного набора данных, определенного пользователем, выполнение программы продолжается с оператора, следующего за Read.
В списке ввода значения разделяются между собой пробелом. Присваивание значений из входного потока выполняется слева направо в соответствии с порядком следования переменных в процедуре Read. Процедура ReadLn похожа на Read. Разница лишь в том, что ReadLn реагирует на конец строки, и в случае его обнаружения происходит сразу переход к следующей строке.
Примеры ввода данных с помощью процедуры ReadLn:
ReadLn(A, B, C);
ReadLn(X);
ReadLn(LogPer);
Процедура, которая выводит содержимое переменных на экран, называется процедурой вывода на экран.
В Pascal эта команда выглядит следующим образом
Write (список констант и/или переменных, разделенных запятой)
Например Write ('Выходное значение: ', C).
В списке вывода этих операторов может быть либо одно выражение, либо последовательность таких выражений, разделенных между собой запятыми.
Процедура Write осуществляет вывод значений выражений, приведенных в его списке, на текущую строку до ее заполнения. С помощью процедуры WriteLn реализуется вывод значений выражений, приведенных в его списке, на одну строку дисплея и переход к началу следующей строки.
Примеры вывода данных:
Write(A, B, C);
WriteLn('Корнем уравнения является ', X);
WriteLn(LogPer);
Для управления размещением выводимых значений процедуры Write и WriteLn используются с форматами. Под форматом данных понимается расположение и порядок кодирования отдельных полей элементов данных.
Процедура вывода с форматом для целого типа имеет вид:
WriteLn(A : N, B : M, C : L);
Здесь N, M, L — выражения целого типа, задающие ширину поля вывода значений.
При выводе вещественных значений оператор Write(R) без указания формата выводит вещественное R в поле шириной 18 символов в форме с плавающей запятой в нормализованном виде. Для десятичного представления значения R применяется оператор с форматами вида WriteLn(R : N : M). В десятичной записи числа R выводится M (0 Ј M Ј 24) знаков после запятой, всего выводится N знаков.
Примеры:
WriteLn(N : 4);
WriteLn(K : 10 : 5, S : 7 : 3);
Общая структура программы на Pascal такова:
Program имя программы; {заголовок}
Const Константа1 = значение; {объявление констант} {раздел описаний}
Константа2 = значение;
...
КонстантаN = значение;
Type ...; {объявление типов}
Var СписокПеременных1 : Тип; {описание переменных}
СписокПеременных2 : Тип;
...
СписокПеременныхN : Тип;
Label СписокМеток;
Function ...
Procedure ...
Begin
{разделоператоров}
End.
Оператор присваивания — один из самых простых и наиболее часто используемых операторов в любом языке программирования, в том числе и в Pascal. Он предназначен для вычисления нового значения некоторой переменной, а также для определения значения, возвращаемого функцией. В общем виде оператор присваивания можно записать так:
переменная := выражение;
Оператор выполняется следующим образом. Вычисляется значение выражения в правой части присваивания. После этого переменная, указанная в левой части, получает вычисленное значение. При этом тип выражения должен быть совместим по присваиванию с типом переменной. Тип выражения определяется типом операндов, входящих в него, и зависит от операций, выполняемых над ними.
Примеры присваивания:
X := (Y + Z) / (2 + Z * 10) - 1/3;
LogPer := (A > B) And (C <= D);
Для операций сложения, вычитания и умножения тип результата в зависимости от типа операнда будет таким:
Операнд 1 | Операнд 2 | Результат |
Integer | Integer | Integer |
Integer | Real | Real |
Real | Integer | Real |
Real | Real | Real |
Для операции деления тип результата в зависимости от типа операнда будет таким:
Операнд 1 | Операнд 2 | Результат |
Integer | Integer | Real |
Integer | Real | Real |
Real | Integer | Real |
Real | Real | Real |
В Pascal есть операции целочисленного деления и нахождения остатка от деления. При выполнении целочисленного деления (операция DIV) остаток от деления отбрасывается.
Например, 15 div 3 = 5; 18 div 5 = 3; 123 div 10 = 12, 7 div 10 = 0.
С помощью операции MOD можно найти остаток от деления одного целого числа на другое.
Например, 15 mod 3 = 0; 18 mod 5 = 3; 123 mod 10 = 3, 7 mod 10 = 7.
При записи алгебраических выражений используют арифметические операции (сложение, умножение, вычитание, деление), функции Pascal, круглые скобки.
Порядок действий при вычислении значения выражения:
1) вычисляются значения в скобках;
2) вычисляются значения функций;
3) выполняется унарные операции (унарный минус — смена знака);
4) выполняются операции умножения и деления (в том числе целочисленного деления и нахождения остатка от деления);
5) выполняются операции сложения и вычитания.
Встроенные математические функции языка Pascal
Математическая запись | Запись на Pascal | Назначение |
cos x | cos(x) | Косинус x радиан |
sin x | sin(x) | Синус x радиан |
ex | exp(x) | Значение e в степени x |
[x] | trunc(x) | Целая часть числа x |
|x| | abs(x) | Модуль числа x |
x2 | sqr(x) | Квадрат числа x |
sqrt(x) | Квадратный корень из x | |
{x} | frac(x) | Дробная часть x |
arctg x | arctan(x) | Арктангенс числа x |
ln x | ln(x) | Натуральный логарифм x |
p | Pi | Число p |
Возведение в степень (кроме возведения в квадрат и возведения в степень числа e) отсутствует. Для возведения в произвольную степень можно воспользоваться очевидным равенством: xy=ey ln x. Для возведения числа в натуральную степень можно написать собственную функцию. Например,