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

  • 1 75% студентов не понимают этого факта. Вы входите в их число

  • Лекциям по курсу Информатика


    Скачать 3.84 Mb.
    НазваниеЛекциям по курсу Информатика
    Анкорlekcii_shiryaevoy.pdf
    Дата11.07.2018
    Размер3.84 Mb.
    Формат файлаpdf
    Имя файлаlekcii_shiryaevoy.pdf
    ТипЛекция
    #19640
    страница6 из 9
    1   2   3   4   5   6   7   8   9

    Возрастающая последовательность?
    1
    (* см. конспект *)
    Результат работы программы:
    пусть n = 5 в обоих тестах
    Введите элементы [>
    Введите элементы [>
    5 7
    7 4
    8 8
    10 10 13 12
    Посл. возрастающая TRUE
    Посл. возрастающая FALSE
    . Для решения подобных задач оптимальнее использовать циклы с усло- виями: как только условие a i−1
    < a i
    нарушится выполнение цикла должно закончиться.
    161

    Пример 8.8. Найти максимальный делитель заданного целого числа k.
    Решение
    (плохая практика программирования)
    . Будем использовать цикл с параметром. Выход из цикла осуществим грубо с использованием про- цедуры Break
    2
    Использование досрочного выхода из цикла
    1
    program DemoBreak;
    2
    var i, k, D : Integer;
    3
    begin
    4
    k := 33;
    5
    for i := k div 2
    downto 1 do
    6
    begin
    { 1 }
    7
    if k mod i = 0 then
    8
    begin
    9
    D := i;
    10
    Break;
    11
    end;
    12
    Writeln(i);
    { 1 }
    13
    end;
    { 1 }
    14
    Writeln(’Maximal divisor = ’, D);
    15
    end.
    Строки с комментарием { 1 } добавлены для печати промежуточных резуль- татов.
    Результат работы программы:
    16 15 14 13 12
    Maximal divisor = 11 2
    Напомним, что безусловная процедура Break позволяет досрочно закончить цикл (см. также с.
    103
    ).
    162

    Избежать использования процедуры Break позволяет цикл с условием.
    Анти-Break
    1
    program DemoWhile;
    2
    var i, k : Integer;
    3
    begin
    4
    k := 33;
    5
    i := k div 2;
    6
    while (i <> 1) and (k mod i <> 0) do
    7
    begin
    8
    Writeln(i);
    {1}
    9
    i := i - 1;
    10
    end;
    11
    Writeln(’Maximal divisor = ’, i);
    12
    end.
    Результат работы программы:
    тот же.
    163

    Глава 9
    Символьный тип данных
    Тип
    Char служит для описания символьных переменных.
    . Начальные сведения о символьном типе данных приведены в
    4.1.7
    на стр.
    44
    Каждый символ кодируется целым числом в диапазоне 0..255. Для кодировки используется расширенный набор символов кода ASCII (американский стан- дартный код для обмена информацией), см. стр.
    165
    
    
    ¨
    ©
    Множество символов считается упорядоченным.
    ACII-коды символы
    0..31
    управляющие;
    32..127
    соответствующие стандартному коду ASCII;
    128..255
    используемые для представления специальных символов (псев- дографики) и введения в кодовую таблицу национальных ал- фавитов.
    9.1
    Сравнение символьных переменных
    В силу упорядоченности для переменных символьного типа определены опера- ции отношения (=, <>, >, >=, <, <=), а также построенные на их основе составные условия, например,
    if (u <> ’y’) and (v <> ’n’) then ...
    Сравнение символов и сравнение соответствующих им кодов дают одинаковый результат (см. пример на стр.
    166
    ).
    164

    Таблица ASCII-кодов некоторых символов
    Разные значки–I
    32 —
    36 — $
    40 — (
    44 — ,
    33 — !
    37 — %
    41 — )
    45 — -
    34 — "
    38 — &
    42 — *
    46 — .
    35 — #
    39 — ’
    43 — +
    47 — /
    Цифры
    48 — 0 50 — 2 52 — 4 54 — 6 56 — 8 49 — 1 51 — 3 53 — 5 55 — 7 57 — 9
    Разные значки–II
    58 — :
    59 — ;
    60 — <
    61 — =
    62 — >
    63 — ?
    64 — @
    Прописные буквы латинского алфавита
    65 — A
    69 — E
    73 — I
    77 — M
    81 — Q
    85 — U
    89 — Y
    66 — B
    70 — F
    74 — J
    78 — N
    82 — R
    86 — V
    90 — Z
    67 — C
    71 — G
    75 — K
    79 — O
    83 — S
    87 — W
    68 — D
    72 — H
    76 — L
    80 — P
    84 — T
    88 — X
    Разные значки–III
    91 — [
    92 — \
    93 — ]
    94 — ^
    95 — _
    96 — ‘
    Строчные буквы латинского алфавита
    97 — a
    101 — e
    105 — i
    109 — m
    113 — q
    117 — u
    121 — y
    98 — b
    102 — f
    106 — j
    110 — n
    114 — r
    118 — v
    122 — z
    99 — c
    103 — g
    107 — k
    111 — o
    115 — s
    119 — w
    100 — d
    104 — h
    108 — l
    112 — p
    116 — t
    120 — x
    Разные значки–IV
    123 — {
    124 — |
    125 — }
    126 —


    Прописные буквы русского алфавита
    128 — А
    132 — Д
    136 — И
    140 — М
    144 — Р
    148 — Ф
    152 — Ш
    156 — Ь
    129 — Б
    133 — Е
    137 — Й
    141 — Н
    145 — С
    149 — Х
    153 — Щ
    157 — Э
    130 — В
    134 — Ж
    138 — К
    142 — О
    146 — Т
    150 — Ц
    154 — Ъ
    158 — Ю
    131 — Г
    135 — З
    139 — Л
    143 — П
    147 — У
    151 — Ч
    155 — Ы
    159 — Я
    Строчные буквы русского алфавита–I
    160 — а
    162 — в
    164 — д
    166 — ж
    168 — и
    170 — к
    172 — м
    174 — о
    161 — б
    163 — г
    165 — е
    167 — з
    169 — й
    171 — л
    173 — н
    175 — п
    Строчные буквы русского алфавита–II
    224 — р
    226 — т
    228 — ф
    230 — ц
    232 — ш
    234 — ъ
    236 — ь
    238 — ю
    225 — с
    227 — у
    229 — х
    231 — ч
    233 — щ
    235 — ы
    237 — э
    239 — я
    165

    9.2
    Стандартные функции для работы с символьными переменными
    Функции преобразования позволяют отобразить множество символов на подмножество натуральных чисел и наоборот.
    Ord(c)
    порядковый номер (код) символа c в таблице ASCII
    Chr(i)
    или
    #i символ с порядковым номером (кодом) i
    Пример 2.1. В результате работы оператора WriteLn(Ord(’0’)) получим
    ASCII-код символа «ноль» — 48.
    Результат работы WriteLn(Chr(49)): символ с кодом 49, т. е. символ 1.
    Пример 2.2. Сравните две программы, дающие один результат. Ответьте для себя на вопрос: «Если не видно разницы, зачем использовать второй вариант?»
    (ответ: незачем; вторая программа — пример неоправданного использования функции
    1
    )
    Сравнение символов
    1
    var c1, c2 : Char;
    2
    begin
    3
    Readln(c1, c2);
    Writeln(’1 ’, c1);
    Writeln(’2 ’, c2);
    4
    if c1 = c2
    then Writeln(’c1 = c2’)
    5
    else Writeln(’c1 <> c2’);
    6
    Writeln(’c1 = F or c2 = F: ’, (c1 = ’F’) or (c2 = ’F’) );
    7
    end.
    Сравнение кодов символов
    1
    var c1, c2 : Char;
    2
    begin
    3
    Readln(c1, c2);
    Writeln(’1 ’, c1);
    Writeln(’2 ’, c2);
    4
    if
    Ord(c1) = Ord(c2)
    then Writeln(’c1 = c2’)
    5
    else Writeln(’c1 <> c2’);
    6
    Writeln(’c1 or c2 = F = ’,
    7
    (Ord(c1) = Ord(’F’)) or (Ord(c2) = Ord(’F’)) );
    8
    end.

    1 75% студентов не понимают этого факта. Вы входите в их число?
    166

    Порядковые функции
    Pred(c)
    символ, предшествующий c
    Succ(c)
    следующий за c символ
    Для первого (последнего) элемента множества значений символьного типа зна- чение функции Pred (Succ) считается неопределенным.
    9.3
    Символьные переменные и циклы
    Пример 3.1. Вывести на экран все прописные буквы латинского алфавита.
    Используем в программе два вида циклов — с параметром и с предусловием.
    Переменные цикла типа Char
    1
    var Ch : Char;
    2
    { var Ch : ’A’..’Z’;
    (* возможно такое описание *) }
    3
    begin
    4
    Writeln(’For-to-do’);
    5
    for Ch := ’A’ to ’Z’ do
    Write(Ch);
    6
    Writeln;
    7
    Writeln(’While-do’);
    8
    Ch := ’A’;
    9
    while Ch <= ’Z’ do
    10
    begin
    11
    Write(Ch);
    12
    Ch := Succ(Ch);
    13
    end;
    14
    end.
    Результат работы программы:
    For-to-do
    ABCDEFGHIJKLMNOPQRSTUVWXYZ
    While-do
    ABCDEFGHIJKLMNOPQRSTUVWXYZ
    167

    9.4
    Смена регистра
    Функция Turbo Pascal UpCase(C)
    преобразует строчные буквы латин- ского алфавита в прописные.
    Код
    Результат
    WriteLn(UpCase(’p’))
    P
    Функции, которая преобразует прописные буквы латинского алфавита в строч- ные в Turbo Pascal не существует. Однако это легко исправляется с помощью оператора (здесь Ch: Char):
    Ch := Chr(Ord(Ch) - Ord(’A’) + Ord(’a’));
    Проверьте этот факт с помощью таблицы ASCII-кодов.
    Пример 4.1. В программе осуществляется ввод символов до тех пор, пока не будет нажата клавиша , которой соответствует два кода: 10 — перевод строки, 13 — возврат каретки. После этого в новой строке будет высвечена преобразованная строка. Например,
    KoTiK PoLOsatyi kotik polosatyi
    Перевод прописных букв в строчные
    1
    var Ch : Char;
    2
    begin
    3
    while Ch <> #10 do
    4
    begin
    5
    Read(Ch);
    6
    if (Ch >= ’A’) and (Ch <= ’Z’) then
    7
    Ch := Chr(Ord(Ch) - Ord(’A’) + Ord(’a’));
    8
    Write(Ch);
    9
    end;
    10
    ReadLn;
    11
    end.
    168

    Пример 4.2. Подсчитать число цифр, входящих в исходный текст. Текстом будем считать последовательность символов, ввод которой заканчивается на- жатием клавиши .
    Решение.
    Анализируя каждый символ, будем увеличивать счетчик, если сим- вол является цифрой. Условие того, что символ является цифрой:
    (ch >= ’0’) and (ch <= ’9’)
    или с помощью конструктора множества ch in [’0’..’9’]
    Подсчет количества цифр в тексте (while-do)
    1
    var ch : Char;
    2
    k
    : Integer;
    3
    begin
    4
    Read(ch);
    5
    k := 0;
    6
    while ch <> #10 do
    { пока не нажата клавиша }
    7
    begin
    8
    if (ch >= ’0’) and (ch <= ’9’) then inc(k);
    9
    Read(ch);
    10
    end;
    11
    WriteLn(’Число цифр равно ’, k);
    12
    end.
    Подсчет количества цифр в тексте (repeat-until + множество)
    5
    k := 0;
    6
    repeat
    7
    Read(ch);
    8
    if ch in [’0’..’9’] then inc(k);
    9
    until ch = #10;
    169

    Глава 10
    Процедуры и функции
    10.1
    Подпрограммы
    Пример 1.1. Даны a, b ∈ Z. Требуется вычислить выражения:
    c = max(a, b),
    d = max(c, |a|),
    e = max(5, b),
    f = max(c, d, e).
    (1.1)
    Решение.
    В программе требуется пять раз использовать алгоритм поиска мак- симума из двух выражений. Выражение f = max(c, d, e) = max(max(c, d), e).
    Нахождение максимума (использование функции)
    1
    program DemoFunc;
    2
    var a, b, c, d, e, f: Integer;
    3 4
    function Max(x, y : Integer): Integer;
    5
    begin
    6
    if x > y then Max := x else Max := y;
    7
    end;
    8 9
    begin
    10
    Readln(a, b);
    11
    c := Max(a, b);
    12
    d := Max(c, abs(a));
    13
    e := Max(5, b);
    14
    f := Max(Max(c,d), e);
    15
    Writeln(c:4, d:4, e:4, f:4);
    16
    end.
    170

    Постановка задачи (была):
    c = max(a, b),
    d = max(c, |a|),
    e = max(5, b),
    f = max(c, d, e).
    (
    1.1
    )
    Нахождение максимума (использование процедуры)
    1
    program DemoProc;
    2
    var a, b, c, d, e, f: Integer;
    3 4
    procedure Max(x, y : Integer;
    var
    M : Integer);
    5
    begin
    6
    if x > y then M := x else M := y;
    7
    end;
    8 9
    begin
    10
    Readln(a, b);
    11
    Max(a, b, c);
    12
    Max(c, abs(a), d);
    13
    Max(5, b, e);
    14
    (* f = max(c,d,e) *)
    15
    Max(c, d, f);
    Max(f, e, f);
    16
    Writeln(c:4, d:4, e:4, f:4);
    17
    end.
    Подпрограмма
    — это часть программы, оформленная в виде отдельной синтаксической конструкции и снабженная именем.
    В программе может содержаться несколько описаний различных подпрограмм,
    все они располагаются до тела программы.
    Вызов подпрограммы
    (т. е.
    выполнение действий,
    заданных в
    подпрограмме) может быть произведен в некоторой точке програм- мы посредством указания имени этой подпрограммы.
    Обмен информацией между программой и подпрограммой реализуется с помощью механизма параметров
    171

    Формальные параметры
    Фактические параметры указываются в
    описании подпрограммы.
    указываются при вызове подпрограммы.
    Формальный параметр
    — это идентификатор, который используется в подпрограмме для обозначения объектов, к которым применяется за- данная в ней последовательность действий.
    Фактический параметр

    это объект,
    который подставляется в подпрограмму при ее вызове вместо соответствующего формального па- раметра.
    Фактическими параметрами могут быть константы,
    имена переменных,
    выражения.
    При каждом вызове подпрограммы
    1) устанавливается соответствие между формальными и фактическими па- раметрами,
    2) производятся операции по подготовке подпрограммы к исполнению,
    3) выполняются операторы тела подпрограммы.
    После завершения выполнения подпрограммы осуществляется возврат к месту ее вызова.
    Существуют два типа подпрограмм — процедуры и функции. Процедуры более универсальны, чем функции, поскольку они могут возвращать любое количе- ство результатов.
    172

    10.2
    Процедуры
    10.2.1
    Описание процедуры
    Структура процедуры аналогична структуре основной программы:
    Описание процедуры procedure <Имя>[(форм. парам. проц.)]; { заголовок процедуры }
    разделы описаний;
    begin раздел операторов
    { тело процедуры }
    end;
    При отсутствии списка параметров процедура называется процедурой без па- раметров (см. также п.
    10.2.3
    ).
    Описание процедуры для нахождения max(x, y), x, y ∈ Z
    1
    procedure Max(x, y : Integer;
    var
    M : Integer);
    2
    begin
    3
    M := x;
    4
    if M < y then M := y;
    5
    end;
    В заголовке процедуры Max: x, y, M — это формальные параметры. Формаль- ные параметры не описываются в разделе описаний подпрограммы.
    При вызове процедуры формальные параметры заменяются фактическими:
    — I формальный параметр заменяется I фактическим,
    — II формальный параметр — II фактическим параметром, и т. д.
    Формальные параметры, которые входят в группы, содержащие сло- ва var, называются формальными параметрами–переменными
    (ПП); остальные формальные параметры называются формальными параметрами–значениями
    (ПЗ) (см. также п.
    10.6
    ).
    Формальный параметр, отвечающий за результат выполнения процедуры должен быть формальным параметром–переменной
    173

    10.2.2
    Вызов процедуры
    Вызов процедуры осуществляется в теле программы по ее имени
    . При этом все формальные параметры заменяются фактическими:
    Вызов процедуры
    <Имя процедуры>[(фактические параметры процедуры)];
    Пример 2.1. Имеется процедура с заголовком:
    procedure Max(x, y : Integer;
    var
    M : Integer);
    Примеры вызовов процедуры Max
    1
    Max(2, 3, Max0);
    2
    Max(a+b, abs(a-b), Max0);
    3
    Max(5, b, Max0);
    Важно:
    В Pascal принято соглашение — имена формальных и фактических параметров одной и той же подпрограммы не должны совпадать.
    Идентификаторы для обозначения формальных и фактических параметров некоторой подпрограммы желательно использовать схожие по написанию. На- пример,
    описание: procedure Max(x, y: Integer; var M: Integer);
    вызов:
    Max(x1, y1, Max0);
    Тип форм. ПЗ Фактический параметр
    Real выражение (число, переменная) типов Integer или Real;
    Char символ или переменная типа Char;
    Integer выражение (число, переменная) типа Integer;
    String выражение (строка, символ, переменная) типа String;
    символ или переменная типа Char
    Тип форм. ПП Фактический параметр только переменная типа
    Real
    Real;
    Char
    Char;
    Integer
    Integer;
    String
    String;
    174

    10.2.3
    Процедуры без параметров
    Чаще всего процедуры без параметров используются для отображения каких- либо статичных текстов, например, меню:
    Процедура без параметров
    1
    procedure PrintMenu;
    2
    begin
    3
    WriteLn(’--- Menu --’);
    4
    WriteLn(’1: Method 1’);
    5
    WriteLn(’2: Method 2’);
    6
    WriteLn(’3: Exit’);
    7
    end;
    Вызов такой процедуры имеет вид:
    PrintMenu.
    175

    10.3
    Функции
    Функция
    — это часть программы, определяющая одно (!) скалярное a
    или ссылочное значение, используемое при вычислении выражения.
    a
    Т. е. одного из типов Real, Integer, Char, Boolean или string. Не может быть, например, массив.
    Описание функции function <Имя>[(список форм. параметров)]: тип значения функции;
    разделы описаний;
    begin раздел операторов;
    <Имя> := выражение;
    (* или Result := выражение; *)
    end;
    Переменная Result существует только в рамках данной функции, описывать её нигде не нужно.
    10.3.1
    Функции без параметров
    Пример стандартной функции без параметров:
    Pi.
    Вычисление π по формуле π = 16 arctg
    1 5
    − 4 arctg
    1 239 1
    function MyPi: Real;
    2
    var k1, k2 : Real;
    3
    begin
    4
    k1 := 1/5;
    k2 := 1/239;
    5
    MyPi := 16 * arctan(k1) - 4 * arctan(k2);
    6
    end;
    Обращение к данной функции в программе может иметь вид c := sin(MyPi)
    или
    WriteLn(MyPi).
    176

    10.3.2
    Функции с параметрами
    Пример 3.1. Опишем функцию для поиска максимума из двух целых чисел.
    Описание функции для нахождения максимума, вариант 1 1
    function
    Max(x, y : Integer): Integer;
    2
    begin
    3
    if y > x then
    Max := y else
    Max := x;
    4
    end;
    Обращение к данной функции в программе может иметь вид c := Max(a, b).
    Описание функции для нахождения максимума — неверный вариант
    1
    function
    Max2(x, y : Integer): Integer;
    2
    begin
    3
    Max2 := x;
    4
    if y > Max2
    then
    Max2 := y;
    5
    end;
    Данное описание функции вызовет ошибку при проверке условия y > Max2
    (тип ошибки: «не хватает фактических параметров»). Имя функции (без параметров) можно указывать только в левой части оператора при- сваивания
    1
    Описание функции для нахождения максимума, вариант 2 1
    function
    Max3(x, y : Integer): Integer;
    2
    var max0: Integer;
    3
    begin
    4
    max0 := x;
    5
    if y > max0
    then max0 := y;
    6
    Max3 := max0;
    (* ! *)
    7
    end;
    Все действия по определению максимального значения выполняются с участи- ем временной переменной max0 (того же типа, что и возвращаемое функцией значение). В конце описания функции Max3 обязателен оператор Max3 := max0.
    1
    Рекурсивные функции рассматриваются во II семестре.
    177

    10.3.3
    Вызов функции
    Вызов функции состоит из имени функции и списка фактических пара- метров, заключенного в скобки.
    Вызов функции может указываться либо в качестве аргумента оператора процедуры
    , либо в составе выражения
    Пример 3.2. Имеется функция с заголовком:
    function Max(x, y : Integer) : Integer;
    Примеры вызовов функции Max
    1
    c := Max(a, b);
    2
    d := Max(c, abs(a));
    3
    WriteLn(Max(c, 100));
    178

    10.4
    Локальные и глобальные переменные
    10.4.1
    Глобальные переменные
    Глобальными называются переменные, описанные в главной программе.
    Переменные, которые не были инициализированы явным образом, перед началом выполнения программы обнуляются.
    Время жизни глобальных переменных
    — с начала работы программы и до ее завершения.
    Глобальные переменные
    — описываются в разделе описаний программы;
    — доступны в любом месте программы или подпрограммы, кроме тех подпрограмм, в которых описаны локальные переменные с такими же именами.
    Важно!
    Использование глобальных переменных в подпрограммах сужает возможности применения подпрограмм.
    Подпрограмма, не использующая глобальных переменных, становится независимой: ее можно использовать повторно, поместить в другую про- грамму или в отдельный модуль.
    179

    10.4.2
    Локальные переменные (13 ноября 2010 г.)
    Переменные
    , которые описываются внутри подпрограмм называются локальными
    (по отношению к подпрограмме).
    Время жизни локальных переменных

    с начала работы подпрограммы и до ее окончания.
    Локальные переменные
    — описываются в разделе описаний подпрограммы;
    — могут использоваться только в подпрограмме, в которой они описаны, и всех вложенных в нее подпрограммах.
    Значения локальных переменных между двумя вызовами одной и той же подпрограммы не сохраняются
    , и эти переменные предварительно не обнуляются, то есть в соответствующих ячейках памяти находятся произ- вольные значения.
    Локальными могут быть переменные, метки, типы, процедуры и проч.
    Локальные и глобальные переменные
    1
    var a, b, c : Integer;
    (* описание глобальных переменных *)
    2
    function Max(x, y : Integer) : Integer;
    3
    var M0: Integer;
    (* описание локальной переменной *)
    4
    begin
    5
    end;
    6
    begin
    7
    c := Max(a, b); ...
    8
    end.
    . Имена локальных и глобальных переменных могут совпадать, хотя это является плохой практикой программирования.
    180

    Важно:
    Подпрограмму надо писать таким образом, чтобы вся необходи- мая для ее использования информация содержалась в ее заголовке.
    Все временные переменные, необходимые подпрограмме для вычислений,
    должны быть описаны в ее разделе описаний.
    Вычисление площади треугольника по трем сторонам
    1
    function Geron(a, b, c : Real): Real;
    2
    var p : Real;
    (* локальная переменная *)
    3
    begin
    4
    p := (a + b + c) / 2;
    5
    Geron := Sqrt(p * (p - a) * (p - b) * (p - c));
    6
    end;
    7
    begin
    8
    Writeln(Geron(3, 4, 5):5:2);
    9
    end.
    В процедуре/функции следует манипулировать только локальными идентифи- каторами; единственным исключением здесь являются глобальные константы и идентификаторы типов.
    181

    Память и переменные
    Компилятор Паскаля формирует сегмент кода для хранения программы в виде машинных команд;
    сегмент данных память под глобальные переменные программы;
    сегмент стека для размещения локальных переменных во время вы- полнения подпрограммы (рис.
    4.1
    ).
    Адреса сегментов хранятся во время выполнения программы в сегментых ре- гистрах: CS — адрес сегмента кода, DS — адрес сегмента данных, SS — адрес сегмента стека.
    Динамическая память
    Сегмент стека
    Сегмент данных
    Сегмент кода
    Рис. 4.1. Структура исполняемой программы в оперативной памяти
    Локальные переменные описываются в некоторой подпрограмме. Распределе- ние памяти происходит в момент вызова подпрограммы, а ее освобождение —
    по завершении подпрограммы.
    182

    10.4.3
    Сходства и различия формального параметра и локальной переменной function Geron(a, b, c : Real): Real;
    { a, b, c - форм. пар. }
    var p : Real;
    { p - локальная переменная }
    begin end;
    Сходства:
    и формальный параметр, и локальная переменная
    1) создаются при входе в подпрограмму;
    2) могут использоваться в теле подпрограммы;
    3) исчезают при выходе из подпрограммы.
    Различия:
    1) формальный параметр-значение имеет начальное значение (оно равно зна- чению фактического параметра), тогда как начальное значение локальной пе- ременной не определено.
    Написать программу с любой подпрограммой для демонстрации первого различия.
    2) типом параметра может быть только имя типа (стандартного или опреде- ленного пользователем), а в роли типа локальной переменной допускается и неименованный тип.
    Параметр пользовательского типа Vec type
    Vec = array[1..15] of Integer;
    procedure ReadVec(N: Integer; var
    A1 : Vec); ...
    Нельзя использовать параметр неименованного типа!
    procedure IVec(N: Integer; var
    A1 : array[1..15] of Integer);
    . В Pascal ABC имеется возможность использовать параметр неименованно- го типа, нарушая стандарты языка. Но это не означает, что ею надо пользо- ваться. На экзамене это расценивается как глубочайшее незнание теории.
    10.5
    Побочные эффекты использования подпрограмм
    (* см. конспект *)
    183

    <раздел процедур и функций> ::= {<описание проц. или функции>;}
    <описание проц. или функции> ::= <описание процедуры> |
    <описание функции>
    <описание процедуры> ::= <заголовок процедуры><блок>
    <заголовок процедуры> ::= procedure <имя>; |
    procedure <имя> (<раздел формальных параметров>
    {; <раздел формальных параметров>});
    <раздел формальных параметров> ::= <группа параметров>|
    var <группа параметров>
    <группа параметров> ::= <имя>{, <имя>}: <имя типа>
    <оператор процедуры> ::= <имя процедуры> |
    <имя процедуры> (<фактический параметр> {, <фактический параметр>})
    <имя процедуры> ::= <имя>
    <фактический параметр> ::= <выражение>|<переменная>|
    <описание функции> ::= <заголовок функции><блок>
    <заголовок функции> ::= function <имя>: <тип результата>; |
    function <имя>(<раздел формальных параметров>
    {; <раздел формальных параметров>}): <тип результата>;
    <тип результата> ::= <имя типа>
    <обозначение функции> ::= <имя функции> |
    <имя функции> (<фактический параметр> {, <фактический параметр>})
    <имя функции> ::= <имя>
    184

    10.6
    Параметры подпрограммы и механизм их передачи
    Параметры обеспечивают некоторый механизм подстановки, позволяю- щий повторять некоторый процесс, изменяя его аргументы.

    1   2   3   4   5   6   7   8   9
    написать администратору сайта