
Лабораторный практикум по информатике. учебно-методическое пособие. Ожерельев В.В., Бондарев А.В
.pdfСимвольный тип данных – char – предназначен для хранения одного символа.
Перечислимый тип определяется упорядоченным набором идентификаторов и объявляется в специальном разделе программы type – разделе объявления типов:
type
typeName = (value1, value2, ..., valuen);
Диапазонный тип представляет собой подмножество значений целого, символьного или перечислимого типа и описывается в виде a..b, где a – нижняя, b – верхняя граница
(a < b).
Среди простых типов данных выделяют т.н. порядковые типы, т.е. такие типы данных, каждому элементу которых можно сопоставить уникальный порядковый номер, позволяющий определить, который из элементов больше, а который меньше. К порядковым типам относятся Integer (порядковый номер равен значению), Boolean (false имеет номер 0, a true – 1), Char (каждому символу соответствует кодовый номер).
К порядковым данным применимы операции Ord, Pred Succ, Inc и Dec, ознакомьтесь с их назначением с помощью справочной системы PascalABC.Net (Справка -> Справочник по языку -> Системный модуль PABCSystem -> Общие подпрограммы).
Помимо простых типов, в языке Pasal существуют структурированные типы данных, определяющие наборы одно- или разнотипных компонент. К ним, в частности, относятся массивы – упорядоченные наборы элементов одного типа, они будут рассмотрены в работе № 5.
Частным случаем массива является строковый тип данных – string, предназначенный для хранения строк – последовательно расположенных символов типа char. К симво-
71

лам в строке можно обращаться, используя индекс: s[i] обозначает i-й символ в строке s, нумерация начинается с единицы.
В Pascal для работы со строками и символами имеется большое количество стандартных подпрограмм, информацию о которых можно найти в справочной системе PascalABC.Net (Справка -> Справочник по языку -> Системный модуль PABCSystem -> Подпрограммы для работы с символами и строками).
1.3. Структура программы
Рассмотрим структуру программы на языке Pascal:
program program_name; //заголовок программы
uses |
//раздел подключения модулей |
|
|
|
label |
//подраздел объявления меток |
|
|
|
Раздел |
|
|||
type |
//подраздел объявления типов |
|
||
const |
//подраздел объявления констант |
описаний |
|
|
var |
//подраздел объявления переменных |
|
|
|
|
|
|||
begin |
|
|
|
|
|
|
Основной |
|
|
|
|
|
блок |
|
end. |
|
|
программы |
|
|
|
|
|
|
Итак, программа состоит из следующих основных разделов: заголовка программы (его наличие не обязательно), раздела подключения модулей uses, раздела описаний (который может включать подразделы объявления меток, типов, констант, переменных, а также объявления подпрограмм) и основного блока («тела») программы, заключенного в операторные скобки begin - end. Программа должна оканчиваться символом ‘.’ (точка).
72
1.4. Константы и переменные
Константа – идентификатор, обозначающий некоторую неизменную величину определенного типа. Могут быть целочисленные и вещественные, символьные и строковые. Объявляются в подразделе const. Примеры объявления констант:
const
A = 10; //целочисленная константа B = 1.35 ; //вещественная
Kb = 1.38E-23; //вещественная
CH1 = 'a'; //символьная - указывается символ
в
// апострофах,
CH2 = #97; // или номер символа в кодовой // таблице ASCII
S = 'Зачет по информатике'; //строковая, //указывается цепочка символов в апострофах
Переменной называют элемент программы, который предназначен для хранения, коррекции и передачи данных внутри нее. Все используемые в программе переменные объявляются в подразделе var с указанием их имен и типов, разделенных двоеточием. Примеры:
var
a: Integer; //целочисленная переменная b,c,d: Integer; //несколько переменных одного
//типа можно перечислить через запятую x: Real; //вещественная переменная
str: String; //строковая переменная,
//макс. длина строки 255 символов s: String[5]; //строковая переменная,
//макс. длина строки 5 символов vvv: 10..35; //переменная диапазонного типа
При запуске готовой программы для каждой из объявленных переменных выделяется соответствующее количество
73
байт в оперативной памяти компьютера. Имя переменной содержит адрес ячеек памяти, в которых хранится ее значение. Значения переменных сразу после выделения под них памяти будут непредсказуемыми, поэтому перед первым использованием они должны быть заданы явно («инициализация переменной») каким-либо способом, например, при помощи оператора присваивания (см. далее).
1.5. Операторы
Оператор представляет собой некоторый неделимый элемент программы, который позволяет выполнить определенное алгоритмическое действие (сравнение, присваивание, переход к выполнению какой-либо части программы и т.д.). Операторы размещаются в основном блоке программы и отделяются от других элементов программы точкой с запятой. Рассмотрим следующие важные операторы: оператор присваивания, операторы ввода и вывода, оператор вызова подпрограммы, условный оператор, оператор выбора.
Оператор присваивания. Данный оператор позволяет поместить определенное значение в необходимую переменную. Он имеет вид:
имя_переменной := выражение;
Выражение может представлять собой константу, переменную, функцию либо комбинацию перечисленных элементов, образованную при помощи подходящих операторов, например, +, -, *, /.
Переменная и выражение, стоящие по разные стороны от знака « := », должны иметь одинаковый тип, за исключением двух случаев: переменной вещественного (Real) типа можно присвоить значение целого (Integer) типа, а переменной строкового (String) типа можно присвоить значение символьного (Char) типа (но не наоборот).
74
Приведем пару примеров:
a := b + c - 1; //Будет вычислено значение //выражения b + c - 1 и результат записан
в
//переменную a
a := a + 5; //Значение переменной a будет //увеличено на 5
Как хорошо видно из последнего примера, не следует путать знак присваивания « := » со знаком отношения « = ».
Рассмотрим еще один пример. Пусть нам необходимо поменять местами значения переменных а и b. Чтобы это сделать, нам потребуется третья переменная c и следующая последовательность операторов присваивания:
с := a; //«запоминаем» исходное значение перемен-
//ной a в дополнительной переменной c a := b; //в переменную a записываем значение b b := c; // в переменную b записываем значение c
Оператор вызова подпрограммы. Выражения, стоящие справа от оператора присваивания, могут также содержать функции – подпрограммы, которые принимают значения своих параметров, выполняют какие-либо действия или вычисления и «возвращают» результат своей работы в программу. Оператор вызова функции записывается следующим образом: указывается ее имя и в скобках значение ее параметра (или список значений параметров через запятую, если функция имеет более одного параметра). Примеры:
x := sin(30*Pi/180); y := 2*Power(x,3/2);
Ознакомьтесь с назначением этих и других стандартных математических функций при помощи справочной системы
75
PascalABC.Net (Справка -> Справочник по языку -> Системный модуль PABCSystem -> Математические подпрограммы).
Арифметические операции *, / , div, mod имеют более высокий приоритет по сравнению с операциями -, +. Как и в математике, для изменения приоритета применяются круглые скобки:
a := 2+2*2; a := (2+2)*2;
Оператор вывода. Служит для отображения на экране значений переменных, констант, арифметических выражений. Имеет две возможные формы записи:
write(список); writeln(список);
Оператор writeln, в отличие от write, после завершения вывода переводит курсор на следующую строку экрана. Элементы списка перечисляются через запятую. Рассмотрим следующий пример:
writeln('R = ', r, ' кОм');
Данный оператор сначала выведет на экран строковую константу 'R = ', затем значение переменной r, затем еще одну строку ' кOм', после чего переведет курсор на следующую строчку экрана. В итоге в консольном окне программы появится примерно такая надпись: R = 5.7 кОм.
Можно задать ширину вывода, т.е. количество символов, следующим образом:
writeln(переменная : ширина);
При выводе вещественных чисел можно кроме ширины задать точность – число знаков, отводимых на дробную часть числа:
writeln(переменная : ширина : точность);
76
Оператор ввода. Служит для изменения значений переменных путем ввода с клавиатуры. Имеет две возможных формы записи:
read(список переменных); readln(список переменных);
Оператор ввода работает следующим образом. Программа приостанавливает свою работу, ожидая ввод данных пользователем. Пользователь вводит соответствующее количество значений либо в одну строчку, разделяя значения пробелами и завершая ввод нажатием клавиши <Enter>, либо нажимая клавишу <Enter> после ввода каждого отдельного значения. По окончании ввода в переменные, указанные в списке, будут записаны значения, введенные пользователем.
Отличие между операторами read и readln заключается в следующем. Все избыточные значения во введенной пользователем строке оператором read не считываются и эти «лишние» данные могут быть считаны следующим оператором read или readln. Оператор Readln работает подругому: она считывает сразу все данные из строки, введенной пользователем, при этом «лишние» значения в конце строки игнорирует.
Далее приведен пример программы, которая вычисляет сумму двух чисел, введенных пользователем:
Var
a, b : Real; // объявляем две переменные a и b
//типа Real
Begin
//Выводим пользователю поясняющее сообщение writeln('Введите два числа');
//ввод значений переменных a и b
readln (a, b);
//Выводим результат
writeln('Cумма введенных чисел равна ', a + b); end.
77
Условный оператор. Условный оператор позволяет определить, какой из операторов программы должен быть выполнен, в зависимости от истинности определенного условия. Различают три формы условного оператора: полную, короткую и составную.
Полный условный оператор (конструкция «if-then-else» – «если-то-иначе») записывается так:
if условие then begin
операторы_1; end
else begin
операторы_2; end;
Блок-схема данного оператора показана на рисунке. Роль условия может играть логическое выражение или переменная типа Boolean. Группа операторов «операторы_1» будет выполнена только в том случае, если условие истинно. Группа операторов «операторы_2» будет выполнена только в том случае, если условие ложно. Если группа операторов содержит только один оператор, то его необязательно заключать в операторные скобки begin – end. Обратите также внимание, что в виде исключения из общего правила перед else не ставится точка с запятой.
Приведем пример. Значение m = min(x, y) можно вычислить с использованием оператора if так:
if (x < y) then m := x else m := y;
78

Условие |
True |
Выполнить |
операторы_1
False
Выполнить
операторы_2
Блок-схема полного условного оператора
Короткий условный оператор отличается от полного от-
сутствием инструкции else («иначе»):
if Условие then begin
операторы; end;
Составной условный оператор может включать произ-
вольное число условий и ветвей расчета:
if условие_1 then begin
операторы_1; end
else if условие_2 then begin
операторы_2; end
… … … … …
else if условие_N then begin
операторы_N; end
else begin
операторы_0; end;
79
Группа операторов «операторы_1» выполняется только тогда, когда «Условие_1» истинно, группа операторов «операторы_2» выполняется только тогда, когда «Условие_1» ложно, а «Условие_2» истинно и т.д.; наконец группа операторов «операторы_N» будет выполняться, когда все N-1 предыдущих условий ложны, а «условие_N» истинно. Группа операторов «операторы_0» будет выполнятся, когда ложными окажутся все N условий.
Оператор выбора case, как и оператор if, применяется для выбора одной из нескольких альтернатив. Данный оператор используется в тех случаях, когда выбор основывается на значении выражения, тип которого должен быть порядковым.
case управляющее_выражение of список_значений_1: begin
операторы_1; end;
список_значений_2: begin операторы_2;
end;
. . .
список_значений_N: begin операторы_N;
end;
else begin
операторы_0; end;
end;
Работает данный оператор аналогично составному условному оператору, только вместо проверки N различных условий на истинность выполняется проверка попадания значения управляющего выражения в различные списки значений. Список значений задается либо перечислением значений через запятую, либо заданием диапазона значений в виде a..b (где a < b).
80