Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лекции по технологии програм..doc
Скачиваний:
13
Добавлен:
24.02.2016
Размер:
253.95 Кб
Скачать

Функции.

Функции предназначены для того, что бы вычислить одно значение, поэтому ее первое отличие от процедуры состоит в том, что процедура может иметь новое значение у нескольких параметров, а функция только одно (оно будет записано в имени функции), второе отличие заключается в заголовке, третье отличие: в теле функции обязательно должен использоваться оператор присваивания, в левой части которого стоит имя функции, а в правой - ее значение.

Общая форма описания функции:

FUNCTION имя (формальные параметры {только входные}) : тип;

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

BEGIN

операторы функции;

END;

Входных параметров может быть несколько. Вызов функции в основной программе осуществляется по ее имени с указанием фактических параметров, т.к. результат заносится в имя функции: ее можно использовать в выражениях на ряду со стандартными функциями. Фактическими параметрами могут быть выражения. Порядок следования, тип и количество формальных и фактических параметров должны совпадать.

Вычисление выражений содержащих обращение функции происходит по следующему алгоритму:

  1. Вычисляются выражения для аргументов функции.

  2. Значения аргументов присваиваются параметру из заголовка описания.

  3. Выполняется тело функции, и вычисляются ее значения.

  4. Значение функции ставится в исходное выражение на место обращения функции.

Пример:Описать функцию, вычисляющую факториал.

N! =? (0! = 1).

FUNCTION FACT (N: INTEGER) : INTEGER;

VAR I, P: INTEGER;

BEGIN

IF (N=0) {OR (N=1)} THEN FACT:=1

ELSE BEGIN

P:=1;

FOR I:=2 TO N DO

P:=P*I; FACT:= P; END; END;

D:=FACT(5);

либо

WRITELN ('Факториал 5 =', FACT(5));

Лекция №6. Строковые переменные.

1. CONSTS='Информатика'

Определение: строковые константы – это последовательность символов заключенных в апострофы.

2. TYPE STROKA:= STRING; (256 символов) или STRING [ n ], где n – число символов.

VAR A, B: STROKA;

3. VAR A, B: STRING [ n ];

К любому элементу строки можно обратиться по имени строки с указанием соответствующего индекса.

Стандартные процедуры и функции для работы со строковыми переменными.

STR1,STR2,STR3 – строковые переменные.

1. Удаление и вставка

DELETE(STR1,n,m);

Процедура, которая удаляет из строки STR1, подстроку длиннойm, начиная с позицииn.

STR1:='Кошечка';

DELETE(STR1, 4, 2);

!!!- Нулевой индекс при обращении с элементом строки хранит информацию о длине строки.

2. INSERT(STR1,STR2,n);

Эта процедура вставляет в строку STR1, подстрокуSTR2, начиная с позицииn.

STR1:='Кошка'; STR2:='еч';

INSERT (STR1, STR2, 4);

или INSERT (STR1, 'еч', 4);

Функции:

  1. LENGTH (STR1): INTEGER;

  2. Копирование: COPY(STR1,n,m);

Функция, которая выделяет из строки STR1, подстроку длинойm, начиная с позицииn.

  1. CONCAT (STR1, STR2);

Конкатация– сцепление (сложение, объединение).

=STR1 +STR2

К переменным строкового типа применимы операции сравнения (=, , >, <, ...)

Сравнение строк идет по кодам их символов. Строки называются равными, если они совпадают по фактической, а не по объявленной длине и состоят из одинаковых символов.

' abc' < 'cba'

Пример:Дано описание:

TYPE SLOVO = ARRAY [ 1..5] OF CHAR;

SPISOK = ARRAY [ 1..60 ] OF SLOVO;

VAR C: SPISOK;

Напечатать все слова из списка отличные от слова 'yes'.

FOR I:=1 TO 60 DO

IF C[ I ] <> 'YES' THEN WRITELN (C[ I ]);

STR (<число>, <размер>:<количество>, <строка>); - процедура, которая для заданного числа формирует представляющую его строку, указанного размера с заданным количеством знаков в дробной части, строка должна быть задана, как имя переменой, параметры, размер и количество могут отсутствовать.

Пример:

STR(19, 48: 5: 2,STR1);

Обратное преобразование осуществляется процедурой:

VAR (<строка>, <число>, <номер>);

Используя строку из цифр без пробелов, формируют число (машинное представление)или выдает номер ошибочного знака в строке. Число и номер должны быть именами переменных.

Пример:

STR1:='1011.01';

VAL (STR1, X, N);

Множеством значений CHARявляются символы, упорядоченные согласно таблице расширенного кода. Коды с 0 по 31 – служебные. Если нужно по коду получить символ используют функциюCHR:

CHR(<код>), или # код.

Пример:

а) CHR (98) = #98 = 'b'

б) Служебные операторы вывода:

WRITELN ('MOSCOW');

WRITELN ('MO', #115#99,'OW');

WRITELN (CHR(77), CHR(111), CHR(115), CHR(99), CHR(111), CHR(119));

WRITELN (#77#111#115#99#111#119);

Выдача звукового сигнала: WRITE(#7);

Обратное преобразование осуществляется с помощью функции ORD.

ORD(символ) =код;

Для целых чисел

ORD(5) = 5;

Функция UPCASE(<символ>); возвращает символ – латинскую букву в верхнем регистре или символ, если у него нет представления в верхнем регистре или букву кириллица.

Пример:a)Дана строка символов. Необходимо подсчитать общее количество символов + - *

PROGRAM PRIMER;

CONST N=10;

VAR S: STRING [ N ];

I, M: INTEGER;

BEGIN

READLN (S); M:=0; {Строковые константы вводятся и выводятся без апострофов}

FOR I:=1 TO LENGTH (S) DO

BEGIN

IF (S [ I ]='+') OR (S [ I ]='-') OR (S [ I ]='*') THEN M:=M+1 END;

WRITELN (M);

END.

б) Дано: строка символов, группы символов в данной строке разделены пробелами (одним или несколькими) – эти группы будем называть словами. Необходимо подсчитать количество слов.

PROGRAM PR1;

TYPE STROKA:= STRING;

VAR C: STROKA;

I, K: INTEGER;

BEGIN

READLN (C); K:=0;

FOR I:=1 TO LENGTH (C) DO

BEGIN

IF C [ I ] = ' ' THEN

IF C [ I-1 ] <> ' ' THEN K:=K+1;

END;

в) Определить значение символьной переменной dпосле выполнения следующих операторов:

1) c:= '+'; d:=c;

2) c:= '+'; d:='c';

Ответ: 1) d= +; 2)d=c.

г) Вычислить S-сумму порядковых номеров всех букв входящих в словоSUM.

S:=ORD (S) + ORD (U) + ORD (M)

д) Напечатать заданный непустой текст удалив из него все цифры и удвоив знаки плюс и минус.

FOR I:=1 TO STR [ C ] DO

IF (STR[ I ]>0) AND (STR[ I ]<9) THEN

DELETE (STR, I, 1);

FOR I:=1 TO STR[C] DO

IF STR [ I ]= ' + ' THEN INSERT (STR, '+', I);

FOR I:=1 TO STR [ C ] DO

IF STR [ I ]=' – ' THEN INSERT(STR, ' – ', I);

WRITELN (STR);