Главная страница
Навигация по странице:

  • Идентификатор Описание типа Множество допустимых значений

  • 2.2 Основные вычислительные структуры в Паскале 31

  • 2.2 Основные вычислительные структуры в Паскале 33

  • ASCII

  • 2.3 Выражения и основные операторы 35 Операнды

  • 2.3 Выражения и основные операторы 37

  • 2.3 Выражения и основные операторы 39

  • 2.3 Выражения и основные операторы 41

  • 2.3 Выражения и основные операторы 43

  • программирование тусур. Программирование учебное пособие. Учебное пособие Томск Эль Контент


    Скачать 0.93 Mb.
    НазваниеУчебное пособие Томск Эль Контент
    Анкорпрограммирование тусур
    Дата17.08.2022
    Размер0.93 Mb.
    Формат файлаpdf
    Имя файлаПрограммирование учебное пособие.pdf
    ТипУчебное пособие
    #647947
    страница4 из 16
    1   2   3   4   5   6   7   8   9   ...   16
    Глава 2. Азы языка Паскаль
    Таблица 2.1 — Продолжение
    Группа
    Подгруппа
    Название
    Идентификатор
    Ссылочный
    Ссылочный
    Pointer
    Процедурный
    Процедура
    Procedure
    Функция
    Function
    Объектный
    Объектный
    Object
    2.2 Основные вычислительные структуры в Паскале
    Это типы: целые, вещественный, символьный, булевский.
    2.2.1 Целые типы
    Целые типы обозначают множества целых чисел в различных диапазонах (табл. 2.2).
    Тип integer (целый).
    Диапазон:
    −32768..32767.
    Размер памяти: 2 байта (16 двоичных разрядов).
    Таблица 2.2 – Целые типы в Turbo-Pascal
    Идентификатор
    Описание типа
    Множество
    допустимых значений
    Integer
    16-битный целый со знаком
    −32768..32767
    Shortint
    8-битный целый со знаком
    −128..127
    Longint
    32-битный целый со знаком
    −2147483648..2147483647
    Byte
    8-битный целый без знака
    0..255
    Word
    16-битный целый без знака
    0..65535
    Над целыми значениями допустимы следующие операции:
    1) арифметические бинарные (два операнда):
    • сложение (знак операции +);
    • умножение (знак операции
    ∗);
    • вычитание (знак операции
    −);
    • деление (знак операции /);
    • деление нацело с отбрасыванием целой части (знак операции div);
    • взятие остатка от целочисленного деления (знак операции mod);
    2) арифметическая унарная (одноместная) операция:
    • изменение знака (знак операции
    −);
    3) операции сравнения:
    • равно (=);
    • не равно (<>);

    2.2 Основные вычислительные структуры в Паскале
    31
    • больше (>);
    • больше или равно (>=);
    • меньше (<);
    • меньше или равно (<=);
    4) стандартные функции (в обычной функциональной записи):
    • абсолютная величина (пример, abs(
    − 4) = 4);
    • квадрат (пример, sqr(6) = 36);
    5) функция odd(<целое>) (odd — нечетный) — проверяет аргумент на нечетность.
    Результат операции деления принадлежит вещественному типу, результаты опе- раций сравнения и функции odd имеют булевский тип, все остальные операции выдают целый тип.
    Пример
    6 div 4 = 1
    −7 div −2 = 3 34 div
    −45 = 0
    Операция m mod n применяется только при n
    > 0:
    6 mod 4 = 2
    −6 mod 4 = −2 2.2.2 Вещественные типы
    Вещественные типы обозначают множества вещественных чисел в различных диапазонах (табл. 2.3).
    Тип real (вещественный).
    Диапазон значений: 2.9
    × 10
    −39
    ..1.7
    × 10 38
    Число цифр мантиссы: 11–12.
    Размер памяти — 6 байт.
    Вещественные значения могут изображаться в форме с фиксированной точкой и в форме с плавающей точкой. В первом случае целая и дробная части веществен- ного числа отделяются друг от друга символом «.» (точка).

    32
    Глава 2. Азы языка Паскаль
    Таблица 2.3 – Вещественные типы в Turbo-Pascal
    Идентификатор
    Описание типа
    Диапазон значений
    Real
    6-байтовый вещественный,
    11–12 значащих цифр
    −1.7 × 10 38
    −2.9 × 10
    −39
    ,
    2.9
    × 10
    −39
    ..1.7
    × 10 38
    Single
    4-байтовый вещественный с ординарной точностью,
    7–8 значащих цифр
    −3.4 × 10 38
    −1.5 × 10
    −45
    ,
    1.5
    × 10
    −45
    ..3.4
    × 10 38
    Double
    8-байтовый вещественный с двойной точностью,
    15–16 значащих цифр
    −1.7 × 10 308
    −5.0 × 10
    −324
    ,
    5.0
    × 10
    −324
    ..1.7
    × 10 308
    Extended
    10-байтовый вещественный с повышенной точностью,
    19–20 значащих цифр
    −1.1 × 10 4932
    −1.9 × 10
    −4951
    ,
    1.9
    × 10
    −4951
    ..1.1
    × 10 4932
    Comp
    8-байтовый сложный тип
    −2 63
    ..2 63
    − 1
    (только целые значения)
    Пример
    Обе части должны обязательно присутствовать, например
    17.384 0.5
    Следующие примеры демонстрируют неправильные формы записи чисел:
    .3
    (правильно 0.3)
    10.
    (правильно 10.0)
    Вещественное число в форме с плавающей точкой записывается как пара вида
    <мантисса> E <порядок>.
    Такое обозначение понимается как «мантисса, умноженная на 10 в степени,
    равной порядку». Например, 7E
    −2 означает 7×10
    −2
    , 12.25E+6 или 12.25E6 оба обо- значают 12.25
    ×10 6
    . Мантисса представляется в виде целого числа или как веще- ственное с фиксированной точкой. Порядок обозначается целым числом; допуска- ются как положительные, так и отрицательные значения порядка.
    Над вещественными значениями допустимы следующие операции:
    1) арифметические операции:
    • сложение, умножение, вычитание, деление, изменение знака — операн- ды могут быть или оба вещественные или один из них целый; резуль- тат всегда вещественный;
    2) операции сравнения — результат булевский;
    3) стандартные функции:
    • sqrt(x) (квадратный корень);
    • sin(x) (синус);

    2.2 Основные вычислительные структуры в Паскале
    33
    • cos(x) (косинус);
    • arctan(x) (арктангенс);
    • ln(x) (натуральный логарифм);
    • exp(x) (экспонента).
    Для вышеперечисленных функций аргумент может быть вещественным или целым, результат — всегда вещественный;
    • abs(x) (абсолютная величина числа);
    • sqr(x) (квадрат) — тип результата совпадает с типом аргумента;
    4) операции округления:
    • trunc(x) (x — вещественное, результат — целая часть числа x, дробная часть отбрасывается и не округляется, trunc
    (5.2) = 5, trunc(−5.8) =
    = −5);
    • round(x)
    (x — вещественное,
    результат — округленное целое,
    round(x)
    = trunc
    (x + 0.5) при x ⩾ 0, round(x) = trunc(x −
    − 0.5) при x < 0).
    2.2.3 Символьный (литерный) тип
    Стандартное имя типа char (character).
    Значениями этого типа являются элементы набора литер, определяемого реали- зацией языка. В Турбо-Паскале символы составляют множество ASCII (American
    Standard Code for Information Interchange) — 256 символов. Множество ASCII со- держит заглавные и строчные латинские буквы, цифры; может содержать русские буквы. Некоторые символы не имеют изображения (например, «конец строки»).
    Размер памяти, занятый символом, — 1 байт.
    Множество символов упорядочено. Функция ord(c) (0
    ⩽ ord(c) ⩽ 255) дает порядковый номер литеры c. Функция chr(i) дает литеру (значение типа char)
    с порядковым номером 0
    i ⩽ 255. Функции ord и char взаимно обратны. Имеем свойства: ord
    (chr(i)) = i и chr(ord(c)) = c.
    Функция pred(c)
    (ord(c) > 0) дает предыдущую литеру. Функция succ(c)
    (ord(c) < 255) дает последующую литеру. Имеем свойства pred(c) =
    = chr
    (ord(c) − 1) и succ(c) = chr(ord(c) + 1).
    Графическое представление символа (имеющего его) — соответствующий знак в кавычках (апострофах) '+', 'y', '.', 'л', '"'. Символ, не имеющий графического представления, можно задать с помощью записи #<порядковый номер символа>,
    например #7 — гудок.
    Цифры '0', '1',. . ., '9' имеют подряд идущие порядковые номе- ра. Малые латинские буквы 'a', 'b',. . ., 'z' имеют подряд идущие номера. Большие латинские буквы 'A', 'B',. . ., 'Z' имеют подряд идущие порядковые номера. Для русских букв подобное свойство не выполняется.

    34
    Глава 2. Азы языка Паскаль
    Операции сравнения над символами такие же, как для чисел. Результат — бу- левский (логический) тип. Эти операции над символами эквивалентны сравнениям порядковых номеров символов.
    2.2.4 Булевский (логический) тип
    Стандартное имя типа — boolean.
    Используется для представлений значений двузначной логики — всего два зна- чения: true (истина), false (ложь).
    Размер памяти для значений — 1 байт.
    Логический тип упорядочен. Выполняются следующие свойства:
    true > false,
    ord(false) = 0,
    ord(true) = 1,
    pred(true) = false,
    succ(false) = true.
    Логические операции
    Аргументы (операнды) и результат имеют булевский тип. Для обозначения операций используются служебные слова: and, or, not.
    Операции and и or — бинарные коммутативные и ассоциативные

    • x and y — логическое умножение (логическое «и») или конъюнкция имеет значение true тогда и только тогда, когда оба операнда — true;
    • x or y — логическое сложение (логическое «или») или дизъюнкция имеет значение false тогда и только тогда, когда оба операнда false;
    • операция not x — унарная операция — логическое отрицание: not true =
    = false
    , not false = true.
    2.3 Выражения и основные операторы
    2.3.1 Выражения
    Выражение представляет собой формальное правило для вычис-
    ления некоторого (нового) значения. Понятие выражения присут-
    ствует практически в любом достаточно развитом языке про-
    граммирования, а синтаксические правила для построения выра-
    жений очень похожи в различных языках.
    В самом общем случае можно сказать, что выражения строятся
    из операндов, знаков операций и круглых скобок. Переменные
    и константы сами по себе являются частным случаем выражений.
    . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

    2.3 Выражения и основные операторы
    35
    Операнды представляют собой «элементарные» значения; ими
    могут быть переменные, константы, вызовы функций.
    . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
    Пример
    Примеры выражений:
    a+b+c*2
    a/b/c
    7-a*(sin(x)+2)
    a=b
    (2>3)=(7<>10)
    pred(
    'x')(not(2>3))or(1=1)
    true<=false
    Значение выражения вычисляется во время вычисления. Мы говорим о вы-
    ражениях целого, вещественного, булевского и других типов, имея в виду тип значения, вычисляемого данным выражением. Тип выражения определяется син- таксически исходя из типов операндов и операций. Поэтому выражения должны быть синтаксически правильны.
    Пример
    Примеры неправильных выражений:
    2**3
    e==3
    (2+1)
    true+false not(a)
    — недопустимо, если a не булевского типа.
    Синтаксис выражений предусматривает определенное старшинство операций
    (приоритеты); приоритеты задают очередность выполнения операций, указанных в выражении. Круглые скобки предназначены для указания порядка (очередности)
    вычислений, если необходимо изменить тот порядок действий, который определен приоритетами операций.
    Перечень операций в порядке убывания приоритета:
    4) not
    3) *, /, div, mod, and

    36
    Глава 2. Азы языка Паскаль
    2) +,
    − , or
    1) =, <>, <,>, <=, >=
    Выражение ничего не говорит, что делать с полученным результа- том (значением).
    2.3.2 Оператор присваивания
    В результате выполнения оператора присваивания переменная получает какое- то значение в результате вычисления выражения. Синтаксис оператора присваива- ния в БНФ:
    <оператор присваивания> ::= <переменная> := <выражение>
    Выражение в правой части должно получать тот же тип, что и пе- ременная.
    Арифметический оператор присваивания
    Тип выражения — integer или real. Разрешается вещественной переменной присваивать целое значение.
    Пример const pi=3.14159;
    var x,a,b,c,r:real;
    i:integer;
    begin x:=0;
    {пример использования предыдущего значения переменной}
    i:=i+1;
    c:=sqrt(a*a+b*b);
    x:=2*pi*r;
    {следующие присваивания — неправильны}
    3:=i+2;
    x=2*pi*r;
    i:=5/4;

    2.3 Выражения и основные операторы
    37
    x:=a*
    − b/2; {два знака операции не допускаются подряд}
    end.
    Логический оператор присваивания
    В левой части переменная типа boolean.
    Пример var d,b,c:boolean;
    x,y:real;
    k:integer;
    begin d:=x<2*y;
    d:=true;
    d:=odd(k);
    d:=not not b;
    d:=not(not(b));
    c:=d and (x<>y) and b;
    c:=(b or d) and not b;
    c:=(d or b) < not c;
    {неправильно:} c:=d or x>y;
    {правильно} c:=d or (x>y);
    end.
    Литерный оператор присваивания
    В левой части переменная типа char. Справа может быть только константа,
    переменная или функция.
    Пример var sym,alpha,beta:char;
    begin

    38
    Глава 2. Азы языка Паскаль
    sym:=
    '+';
    alpha:=sym;
    beta:=succ(sym);
    alpha:=chr(40);
    end.
    2.3.3 Ввод-вывод
    Для выполнения операций ввода-вывода служат четыре процедуры: read,
    readln
    , write, writeln.
    Процедура чтения read обеспечивает ввод числовых данных, символов и неко- торых других типов данных с клавиатуры, в результате чего эти данные становятся значениями переменных.
    Вызов процедуры:
    read(X1,X2,
    . . ., XN);
    где X1, X2,. . ., XN — переменные допустимых типов данных. Значения X1, X2,. . .,
    XN
    набираются минимум через один пробел на клавиатуре и высвечиваются на экране. После набора данных для одной процедуры read нажимается клавиша ввода . Значения переменных должны вводиться в строгом соответствии с синтаксисом языка Паскаль. Если соответствие нарушено (например, X1 имеет тип integer, а при вводе набирается значение типа char), то возникают ошибки ввода-вывода.
    Если в программе имеется несколько подряд идущих процедур read, данные для них вводятся потоком, т. е. после набора значений переменных для одной про- цедуры read можно, не нажимая клавишу , продолжить набор данных для следующей процедуры в той же строке и только потом нажать клавишу ввода.
    Процедура чтения readln аналогична процедуре read, единственное отличие заключается в том, что после считывания последней переменной в списке значений для одной процедуры readln данные для следующей процедуры ввода будут считываться с начала новой строки (т. е. ввод потоком невозможен).
    Процедура записи write производит вывод на экран числовых данных, сим- волов, булевских значений и строк.
    Вызов процедуры write(Y1, Y2,
    . . ., YN);
    где Y1, Y2,. . ., YN — выражения вида integer, real, char, boolean и строки
    (об этом типе будет сказано позже).
    Процедура записи writeln аналогична процедуре write, но после вывода последнего в списке значения для текущей процедуры writeln происходит пе- ревод курсора к началу следующей строки. Процедура writeln, записанная без параметров, вызывает перевод строки.

    2.3 Выражения и основные операторы
    39
    В процедурах вывода write и writeln имеется возможность записи выра- жения, определяющего ширину поля вывода.
    Если x и i — целочисленные выражения, а y — вещественное выражение, то вызов write(x:i, y:i) печатает значения x и y каждое в крайние правые позиции полей шириной i.
    Write(y:i:k)
    — в крайние правые позиции поля шириной i символов вы- водится десятичное представление значения y в формате с фиксированной точкой,
    причем после десятичной точки выводится k цифр, представляющих дробную часть числа.
    2.3.4 Последовательное выполнение и составной оператор
    Для того чтобы указать в программе последовательное выполнение операторов
    S1, S2,. . ., SN (т. е. после оператора S1 должен выполняться оператор S2 и т. д.),
    операторы отделяются символом «;»
    S1;
    S2;
    SN
    Используя служебные слова begin и end, можно из последовательности опе- раторов сделать составной оператор:
    begin
    S1;
    S2;
    SN
    end
    Составной оператор применяется в тех случаях, когда синтаксис языка допускает использование только одного оператора, в то вре- мя как семантика программы требует задание последовательности действий.
    2.3.5 Условный оператор
    Условный оператор применяется для задания разветвления в программе, т. е.
    выбора действий в зависимости от истинности или ложности какого-либо условия.
    Пример
    Для того, чтобы z стало равным наибольшему из двух чисел x и y, необходимо выполнить присвоение z := x либо z := y.

    40
    Глава 2. Азы языка Паскаль
    Имеется две формы условного оператора: полная и сокращенная.
    <полный условный оператор> ::=
    if
    <логическое выражение> then <оператор>
    else
    <оператор>
    Пример if x>y then z:=x else z:=y;
    if x<0 then begin x:=x+h;
    y:=y
    −h;
    d:= not d end else begin x:=0;
    y:=0
    end;
    if x>0 then sgn:=1
    else if x=0 then sgn:=0 else sgn:=
    −1;
    <сокращенный условный оператор> ::=
    if
    <логическое выражение> then <оператор>;
    Пример
    Оператор x:=abs(x) эквивалентен if x<0 then x:=
    −x.
    Пример
    Поменять местами значения переменных x и y так, чтобы в x было большее значение:
    if y>x then begin t:=x;
    x:=y;
    y:=t end;

    2.3 Выражения и основные операторы
    41
    Пример
    Ветви then и else могут снова содержать условные операторы:
    if x>0 then sgn:=1
    else if x=0 then sgn:=0 else sgn:=
    −1;
    Неоднозначность в условном операторе следующего вида!
    if B1 then if B2 then S1 else S2
    Различное выполнение вложенного условного оператора можно явно уточнить, применяя служебные слова (операторные скобки)
    begin и end:
    a) if B1 then begin if B2 then S1 else S2
    end;
    b) if B1 then begin if B2 then S1 end else S2;
    В Паскале используется вариант a).
    Если if следует после then, то всегда помещайте внутренний условный оператор между begin и end.
    2.3.6 Оператор цикла с предусловием
    Циклы с предусловием (циклы while) используются в случае, когда циклически- ми действиями управляет логическое условие и, как правило, к моменту выпол- нения цикла не ясно, сколько нужно повторить циклические действия. Последова- тельность действий данного оператора цикла заключается в следующем: сначала вычисляется логическое выражение — предусловие. Если оно истинно, то выпол- няется тело цикла до тех пор, пока условие не примет значение ложь.
    while
    <логическое выражение> do | заголовок цикла
    <оператор> | тело цикла
    Если по условию задачи тело цикла содержит более одного оператора, то при- меняют составной оператор.
    Приведем несколько фрагментов программ с циклом while.

    42
    Глава 2. Азы языка Паскаль
    Пример
    {s = сумма целых чисел от 1 до n, n > 0}
    s:=0;i:=1;
    while i<=n do begin s:=s+i;
    i:=i+1
    end
    Пример
    {x1=наибольший общий делитель x и y}
    x1:=x;y1:=y;
    while x1<>y1 do if x1>y1 then x1:=x1
    −y1
    else y1:=y1
    −x1;
    Пример
    {Для данного M>0 требуется найти наименьшее целое число k>=0 такое, что 3

    k > M}
    y:=1;k:=0;
    while y<=M do begin k:=k+1;
    y:=y*3;
    end;
    2.3.7 Оператор цикла с постусловием
    В этом случае, как правило, число повторений заранее неизвестно, но известно условие, при выполнении которого цикл должен завершиться. Последовательность действий данного оператора цикла заключается в следующем: выполняется те- ло цикла до тех пор, пока постусловие — логическое выражение (постусловие) не примет значение истина.
    repeat
    <оператор> until <логическое выражение>

    2.3 Выражения и основные операторы
    43
    Пример
    {s = сумма целых чисел от 1 до n, n > 0}
    s:=0;i:=0;
    repeat i:=i+1;
    s:=s+i;
    until i=n;
    Пример
    Вычислить наименьшее n, для которого y = 1+1/2+1/3+. . .+1/n
    ⩾5.
    y:=0;n:=0;
    repeat n:=n+1;
    y:=y+1/n;
    until y>=5;
    Между операторами цикла while и repeat существует три от- личия:
    1. Тело цикла repeat выполняется всегда хотя бы один раз.
    2. Выход из цикла repeat происходит при истинности усло- вия, а из цикла while — по ложности условия.
    3. Тело цикла repeat может состоять более чем из одного оператора и не содержать операторных скобок.
    2.3.8 Оператор цикла с параметром
    Такие операторы обычно используются, когда число повторений цикла мо- жет быть определено перед его выполнением. Кроме того, циклы с параметром позволяют задать автоматическое изменение значения некоторой переменной и ис- пользовать эти значения в последовательных итерациях.
    Более конкретно, данный вариант оператора цикла определяет:
    • диапазон изменения значений управляющей переменной и, одновременно,
    число повторений оператора, содержащегося в теле цикла;
    • направление изменения значения переменной (возрастание или убывание);

    44
    1   2   3   4   5   6   7   8   9   ...   16


    написать администратору сайта