Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лекция 1-2 Правила записи программ на Object Pa....docx
Скачиваний:
7
Добавлен:
19.04.2019
Размер:
136.78 Кб
Скачать

Лекция 1 Правила записи программ на Object Pascal

Переменные и их описание

Основные сведения

Переменная — это ячейка памяти компьютера, имеющая имя и тип.

Тип определяет размер переменной и множество принимаемых ею значений.

В языке Pascal любая переменная перед использованием должна быть описана. Обычно переменные описываются в разделе описаний.

Синтаксис в виде РБНФ

<программа> ::= [program <имя>;]

<раздел описаний>

begin

<операторы>

end.

<операторы> ::= <оператор>{; <оператор>}

<раздел описаний> ::= {<секция раздела описаний>}

<секция раздела описаний> ::= <секция описания переменных> | <с.о. констант> | <с.о. типов> | <с.о. подпрограмм>...

Пример секции описания переменных.

var

a,b: real;

i: integer;

<секция описания переменных> ::= var<подсекция>{< подсекция>}

<подсекция> ::= <список имен>: <тип>;

<список имен> ::= <имя>{,<имя>}

<тип> ::= <имя>

Внутриблочные переменные

В PascalABC.NET возможно внутриблочное описание переменных:

begin

var i,j: integer;

var r: real := 5.2;

var Pi := 3.14;

В последнем случае происходит автоопределение типов.

Типы

  • Целые

integer (4 байта)

shortint (1 байт)

smallint (2 байт)

int64 (8 байт)

  • Вещественные

real (8 байт)

single (4 байт)

  • Символьные

char (2 — Unicode)

  • Строковые

string

string[200]

shortstring = string[255]

  • Логический

boolean (1) [True False]

Лекция 3 Основные операторы

Оператор присваивания :=

Синтаксис <переменная> := <выражение>

Пример использования оператора присваивания.

a := (3 + 5) * 8;

b := a + 2;

Семанитика

Вычисляется выражение в правой части, при этом, вместо имен переменных подставляются их значения. Затем результат вычисления записывается в переменную в левой части.

Ограничение. Тип выражения должен быть совместим по присваиванию с переменной. Например:

  • одинаковые типы совместимы.

  • выражение типа integer можно присвоить переменной типа real. Обратное неверно.

Операторы присваивания += и *=

Пример.

d += 1; //прибавить 1 к d

d *= 2; //умножить d на 2

Примеры использования :=

Пример 1. Перемена местами двух значений. Дано: x, y;

var x, y: integer;

begin

read(x,y);

var v := x;

x := y;

y := v;

writeln(x, ' ', y);

end.

Это стандартное решение. В PascalABC.NET на основе этого алгоритма определена стандартная процедура Swap(x, y).

Однако, существуют и другие решения. Например:

var x, y: integer;

begin

read(x, y);

x := x + y;

y := x - y;

x := x - y;

writeln (x, ' ', y);

end.

Пример 2. Использование промежуточных переменных в вычислениях Дано: x: real; Найти: x15;

Решение 1.

y := x * x;

z := y * y;

t := z * z;

p := t * z;

q := p * x * y;

Решение 2.

y := x * x;

z := y * x;

t := z * y;

p := t * t * t;

Решение 3.

y := x * x;

x := x * y * y;

t := x * x * x;

Заметим, что в первом решении используется 6 операций умножения, в во 2м и 3м — 5. Возникает задача: найти xn за минимальное число умножений. Об этом читай тему.

Оператор ввода

Синтаксис read (<список переменных>) | readln (<список переменных>)

Семантика

Происходит считывание данных с клавиатуры и запись их в переменные из <списка переменных>. Вводить данные нужно либо через пробел, либо по нажатию <Enter>, при этом программа не перейдет к выполнению следующего оператора, пока не будут считаны все данные.

С процедурой ввода связан ряд ошибок (например, если переменная используется в качестве делителя, и вводится 0, или, если должно быть получено целое число, а вводится 'ABC'). Эти ошибки нужно уметь обрабатывать.

Оператор try/except и обработка ошибок ввода

Операторы, которые могут получать ошибку, заключаются специальный охранный блок - оператор try.

Синтаксис

try

...

readln(a);

...

except

<обработка ошибки>

end;

<продолжение работы>

Семантика

Если внутри блока try происходит ошибка выполнения, то все последующие операторы в блоке игнорируются, и выполнение программы переходит к блоку except. По выходе из except программа продолжает работу.

Если ошибки не происходит, то выполняются все операторы в блоке try, блок except не выполняется, и программа продолжает работу.

Оператор вывода

Синтаксис

write(<список выражений>) | writeln(<список выражений>)

Семантика

Выражения в списке вычисляются, и их значения выводятся на экран. В случае writeln после вывода осуществляется переход на новую строку.

Форматы вывода

После каждого выражения в списке вывода можно использовать формат вывода в виде :a, где a — выражение целого типа. После вещественного типа — :a:b (a задает ширину поля вывода (выравнивание по правому краю), b — количество знаков в дробной части).

Вывод с помощью write[ln]Format

writelnFormat('<форматная строка>', <список выражений>)

Пример вывода с использованием форматной строки.

writelnFormat('{0} * {1} = {2}', a, b, a * b)

Будет выведено:

a * b = a * b

В форматной строке тоже можно использовать формат вывода. {0, 10}: 10 — это ширина поля вывода {0, 10:f3}: 3 — это количество знаков в дробной части для вещественного числа (показывает это спецификатор f).

Условный оператор

Синтаксис

if <условие> then <оператор1>

[else <оператор2>]

Семантика

Примеры использования для решения задач

Пример 1. Нахождение минимума Дано: x, y; Найти: min;

if x > y then

min := y

else

min := x;

Пример 2. Упорядочение a, b по возрастанию. Ясно, что если a > b, — нужно поменять их местами. Но тут одним оператором не обойтись. Для этого можно использовать составной оператор — один или больше операторов, заключенных в операторные скобки begin - end;:

if a > b then

begin

var v := b;

b := a;

a := v;

end;

Пример 3. Вычисление функции по взаимоисключающим веткам

if x < 2 then

y := x

else

if x < 3 then

y := x * x

else

y := 1 - x;

Замечание. Если по ветви else располагается другой оператор if, то говорят, что возникает цепочка вложенных операторов if.

Пример 4. Найти среднее среди a, b, c (a, b, c попарно не равны) Эта задача имеет несколько вариантов решения.

if a < b then

if a < c then

if b < c then

sr := b

else

sr := c

else

sr := a

else

if a > c then

if b > c then

sr := b

else

sr := c

else sr := a;

Очевидно, это не самое лучшее решение. Можно воспользоваться стандартными функциями сравнения.

sr := min(a,b);

if sr < c then

sr := min(max(a,b), c);

Самостоятельно.

  • Даны координаты вершин треугольника и точка M. Принадлежит ли M треугольнику.

  • Является ли 4-угольник ABCD корректно заданным.