Функции для работы со строками

VAR

STR1,STR2:STRING;

I,J:INTEGER;

Определение длины строки.

LENGTH (STR1);

Результат: целого типа.

Копирование строки.

COPY (STR1, I, J);

Копирование из строки STR1 строки длиной J символов, начиная с символа I.

Результат: типа STRING.

Удаление строки.

DELETE (STR1, I, J);

Удаление из строки STR1 J символов, начиная с позиции I.

Результат: типа STRING.

Вставка строки.

INSERT (STR1, STR2, I);

Вставка строки STR1 в строку STR2, начиная с позиции I.

Результат: строка STR2 (если она содержит символов больше, чем объявлено, то лишние символы отбрасываются).

Пример:

Ввести строку символов длиной не менее 15 и не более 100. Подсчитать общее количество введенных символов строки и количество знаков “+”, начиная с 7 символа по 15.

PROGRAM PRIMER8;

USES CRT;

LABEL

1;

VAR

S:STRING [100];

K,KP,I:INTEGER;

OTV: CHAR;

BEGIN

1:CLRSCR;

WRITELN (‘Введите строку длиной не менее 15 и не более 100 символов’);

READLN (S);

WRITELN (‘Введенная строка символов’);

WRITELN (S);

K:=LENGTH(S);

WRITELN (‘Количество символов в введенной строке=’,K:3);

KP:=0;

FOR I:=7 TO 15 DO

IF S[I]=‘+’

THEN KP:=KP+1;

WRITELN (‘Количество символов +, начиная с 7 до 15 символа=’,KP:2);

WRITELN (‘Будете вводить новые данные (Y/N)?’);

READLN (OTV);

IF (OTV=’Y’) OR (OTV=’y’)

THEN GOTO 1

END.

ЗАПИСИ (КОМБИНИРОВАННЫЙ ТИП)

При решении экономических и информационных задач, которые обрабатывают ведомости, документы, списки и т.д., возникает необходимость объединять различные типы данных в одну группу. Для этого в языке Паскаль введено понятие записи (RECORD).

Запись – это совокупность ограниченного числа логически связанных компонент различного типа.

Каждая компонента записи называется полем.

Все компоненты записи в отличие от массива:

- необязательно должны принадлежать одному и тому же типу;

- обращение к компонентам записи происходит по имени.

Запись, как и другие переменные, объявляется в разделе описания и используется в разделе операторов. Описание записи можно делать как в разделе описания типов TYPE, так и в разделе описания переменных VAR.

Синтаксис описания записи:

TYPE

имя типа=RECORD

имя элемента 1:тип;

имя элемента 2:тип;

…..

имя элемента N:тип

END;

VAR

имя записи:имя типа;

Служебное слово RECORD (запись) выполняет роль открывающейся операторной скобки, END - закрывающейся операторной скобки. Внутри операторных скобок описываются элементы записи.

Для обращения к компонентам (полям) записи необходимо указать идентификатор записи, за которым ставится точка, а затем идентификатор поля (составное имя).

имя записи.имя поля

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

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

Синтаксис оператора:

WITH

имя записи DO

BEGIN

операторы, содержащие имена элементов записи

END;

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

Пример:

Для каждого студента указаны фамилия, оценки по пяти дисциплинам. Требуется вычислить средний балл каждого студента.

PROGRAM PRIMER9;

USES CRT;

LABEL

1;

TYPE

VED=RECORD

FIO: STRING [20];

B1,B2,B3,B4,B5:2..5;

SB:REAL

END;

VAR

GR11P:ARRAY [1..25] OF VED;

I,J:INTEGER;

OTV:CHAR;

BEGIN

1: CLRSCR;

FOR I:=1 TO 25 DO

BEGIN

WRITELN (‘Введите данные ‘,I:2,‘-го студента:’);

READLN (GR11P[I].FIO);

READLN (GR11P[I].B1,GR11P[I].B2,GR11P[I].B3,GR11P[I].B4,GR11P[I].B5)

END;

FOR I:=1 TO 25 DO

BEGIN

GR11P[I].SB:=(GR11P[I].B1+GR11P[I].B2+GR11P[I].B3+GR11P[I].B4+

GR11P[I].B5)/5;

WRITELN (‘Средний балл ‘,I:2,‘-го студента равен’, GR11P[I].SB:6:3)

END;

WRITELN (‘Будете вводить новые данные (Y/N)?’);

READLN (OTV);

IF (OTV=’Y’) OR (OTV=’y’)

THEN GOTO 1

END.

МНОЖЕСТВА (МНОЖЕСТВЕННЫЙ ТИП)

В языке Паскаль множеством называется конечный (от 0 до 255) неупорядоченный набор элементов (возможно пустой), различающихся между собой значениями, но принадлежащих одному и тому же простому типу, который называется базовым типом для данного множества.

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

Имя дается всему множеству в целом. В отличие от элементов массива элементы множества не пронумерованы, не упорядочены. Каждый отдельный элемент множества не идентифицируется, и с ним нельзя выполнить какие-либо действия. Действия могут выполняться только над множеством в целом. Элементами множества могут быть константы, переменные, выражения, значения которых принадлежат базовому типу. При записи элементы множества заключаются в квадратные скобки. Порядок записи элементов множества в нем не имеет значения. Каждый элемент во множестве учитывается только один раз.

Например, [1,2,3] эквивалентно множеству [3,2,1];

[1,2,3,4,2,3,4,5] эквивалентно множеству [1..5].

Множества определяются ключевым словом SET и OF и следующим за ним базовым типом.

Множества могут быть объявлены как в разделе описания типов TYPE, так и в разделе описания переменных VAR.

Синтаксис описания множества:

TYPE

имя типа = SET OF базовый тип;

VAR

имя множества: имя типа;

Мощность множества показывает, сколько элементов входит в данное множество.

Операции над множествами:

1. Объединение множеств (+).

Объединением двух множеств называется множество, состоящее из элементов, принадлежащих обоим множествам.

Например:

[1, 9] + [1..3] = [1, 2, 3, 9]

[‘A’..’C’] + [‘D’, ‘E’] = [‘A’..‘E’]

2. Пересечение множеств (*).

Пересечением двух множеств называется множество, состоящее из элементов, принадлежащих одновременно обоим множествам.

Например:

[0..4] * [5, 6] = [ ]

[‘A’..’F’] * [‘B’, ‘D’] = [‘B’..‘D’]

3. Разность (дополнение) множеств (-).

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

Например:

[1, 5, 9] - [2, 4, 8, 9] = [1, 5]

[‘A’, ‘B’, ‘C’, ‘D’] - [‘A’, ‘C’] = [‘B’, ‘D’]

4. Операция присваивания (:=).

S1:=S2 – множество S1 получит текущее значение множества S2.

5. Операции отношения и включения множеств:

= - равенство (совпадение) двух множеств

< > - неравенство множеств

Два множества считаются равными, если равны все их значения. Если множества отличаются хотя бы одним значением, то они не равны.

<= - проверка на вхождение множества из левого операнда в множество из правого операнда

>= - проверка на вхождение множества из правого операнда в множество из левого операнда

Все операции вырабатывают значения TRUE или FALSE в зависимости от проверки.

6. Проверка принадлежности множеству (IN).

Правый операнд должен быть множеством, левый – значением базового типа множества. Эта операция вырабатывает значение TRUE, если значение элемента входит во множество, и значение FALSE в противном случае.

Данную операцию удобно использовать для исключения более сложных проверок, например оператор вида

IF (SIM=’A’) OR (SIM=’B’) OR (SIM=’X’)

THEN оператор;

можно заменить гораздо более наглядной и компактной формой

IF SIM IN [’A’,’B’,’X’]

THEN оператор;

Порядок выполнения операций:

1) пересечение *

2) объединение +, разность -

3) вхождение IN, равно =, неравно < >, <=, >=

Ввод множества осуществляется при помощи операции объединения (+), а вывод – при помощи операции проверки принадлежности (IN).

Пример:

Даны два множества, состоящие из 10 элементов. Получить множество Y=X1+X2+(X1-X2).

PROGRAM PRIMER10;

USES CRT;

LABEL

1;

VAR

X1,X2,Y:SET OF 1..10;

I,N1,N2:INTEGER;

OTV:CHAR;

BEGIN

1:CLRSCR;

WRITELN('Введите два множества');

X1:=[];

X2:=[];

Y:=[];

FOR I:=1 TO 10 DO

BEGIN

WRITE('Введите',I:2,' элемент первого множества: ');

READLN(N1);

X1:=X1+[N1]

END;

FOR I:=1 TO 10 DO

BEGIN

WRITE('Введите',I:2,' элемент второго множества: ');

READLN(N2);

X2:=X2+[N2]

END;

WRITELN;

WRITELN('Первое множество');

FOR I:=1 TO 10 DO

IF I IN X1

THEN WRITE(I:2,' ');

WRITELN;

WRITELN('Второе множество');

FOR I:=1 TO 10 DO

IF I IN X2

THEN WRITE(I:2,' ');

WRITELN;

Y:=X1+X2+(X1-X2);

WRITELN('Полученное множество');

FOR I:=1 TO 10 DO

IF I IN Y

THEN WRITE (I:2,' ');

WRITELN;

WRITELN('Будете работать ещё? (Y/N)?');

READLN(OTV);

IF (OTV='Y') OR (OTV='Y')

THEN GOTO 1

END.

ПОДПРОГРАММЫ В ПАСКАЛЕ

Подпрограммы (ПП) – это часть основной программы, оформленная в виде, допускающем многократное обращение к ней из разных точек основной программы.

В языке Паскаль выделяют два вида ПП:

1. Процедура PROCEDURE.

2. Функция FUNCTION.

Любая программа может содержать несколько процедур и функций. ПП в свою очередь также может содержать ПП.

Процедуры и функции объявляются в разделе описания вслед за разделом переменных.

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

ПП оформляются подобно основной программе, т.е. состоят из заголовка и тела (блока).

Телом является блок, состоящий из разделов описаний и разделов операторов.

Все имена, представленные в разделе описаний основной программы, называют глобальными. Они действуют как в разделе операторов основной программы, так и в любой ПП.

Имена, представленные в разделе описаний ПП, называют локальными. Они действуют только в рамках ПП и недоступны операторам основной программы.

ПП-ПРОЦЕДУРЫ

Заголовок ПП-процедуры содержит имя процедуры и список формальных параметров, который может отсутствовать.

PROCEDURE имя процедуры (список формальных параметров);

PROCEDURE имя процедуры;

С помощью параметров осуществляется передача исходных данных в процедуру, а также передача результатов работы обратно в вызывающую ее основную программу. В списке формальных параметров перечисляются идентификаторы, и для каждого из них определяется тип. Если в теле процедуры есть идентификаторы, которые не являются формальными параметрами, то они считаются глобальными по отношению к данному описанию.

Вызов и выполнение процедуры осуществляется при помощи оператора процедуры, который имеет вид:

имя процедуры (список фактических параметров);

имя процедуры;

В Паскале различают четыре вида формальных параметров:

1. Параметры-значения.

2. Параметры-переменные.

3. Параметры-процедуры.

4. Параметры-функции.

Если списку формальных параметров не предшествует никакой символ, то они все являются параметрами-значениями.

Фактическим параметром соответствующему параметру-значению должно быть выражение.

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

В случае использования параметров-значений, формальный параметр – это просто локальная переменная, которой в начале присваивается значение соответствующего фактического параметра. После этого связи между фактическими и формальными параметрами нет. Поэтому невозможно случайно или преднамеренно испортить значение переменной, существующей вне процедуры.

Если в списке формальных параметров списку идентификаторов предшествует VAR, то параметры этого списка называются параметрами-переменными.

В этом случае фактическими параметрами также являются переменные. Если некоторый параметр процедуры представляет собой результат ее выполнения, то он обязательно должен специфицироваться как формальный параметр-переменная.

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

Если списку формальных параметров предшествует служебное слово PROCEDURE, то параметры этого списка называются параметрами-процедурами.

Фактическим параметром в этом случае должен быть идентификатор процедуры.

Если списку формальных параметров предшествует служебное слово FUNCTION, то параметры этого списка называются параметрами-функциями.

Фактическим параметром в этом случае должен быть идентификатор функции.

Между формальными и фактическими параметрами должно быть полное соответствие, т.е.

- формальных и фактических параметров должно быть одинаковое количество;

- порядок следования формальных и фактических параметров должен быть один и тот же;

- тип каждого фактического параметра должен совпадать с типом соответствующего ему формального параметра.

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

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

ПП-ФУНКЦИИ

Заголовок ПП-функции имеет вид:

FUNCTION имя функции (список формальных параметров): тип функции;

FUNCTION имя функции: тип функции;

За заголовком функции следует тело функции, оформленное в виде блока (раздел описаний и раздел операторов).

Функция, как и процедура, может содержать несколько операторов, несколько входных параметров, но результат ее выполнения только один.

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

Обращение к функции происходит с помощью указателя функции, за которым в круглых скобках следует список фактических параметров, разделяемых запятыми. Этот указатель функции может использоваться только в выражениях.

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

При описании функции в ее заголовке могут быть указаны:

1. Параметры-значения.

2. Параметры-процедуры.

3. Параметры-функции.

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

В качестве соответствующего фактического параметра может быть использовано любое выражение идентичного типа (константы или переменные).

В заголовке функции параметры-переменные использовать не рекомендуется, т.к. если результатов выполнения ПП несколько, то целесообразнее применять ПП-процедуру.

Спецификация параметра-процедуры – это заголовок процедуры, а параметра-функции – это заголовок функции, например:

FUNCTION РR(A,B:REAL; FUNCTION PR:REAL):REAL;

параметр-функция

FUNCTION РR(A,B:REAL; PROCEDURE PR):REAL;

параметр-процедура

Пример:

Даны вектор A(10) и вектор B(10). Найти сумму и произведение элементов каждого вектора.

PROGRAM PRIMER11;

USES CRT;

TYPE

MASSIV=ARRAY [1..10] OF REAL;

VAR

A,B:MASSIV;

SA,PA,SB,PB:REAL;

PROCEDURE VVOD(K:INTEGER;

VAR

X:MASSIV);

VAR

I:INTEGER;

BEGIN

FOR I:=1 TO K DO

BEGIN

WRITE ('X[',I:2,']=>');

READLN(X[I])

END

END;

PROCEDURE VIVOD(K:INTEGER;

VAR

X:MASSIV);

VAR

I:INTEGER;

BEGIN

FOR I:=1 TO K DO

WRITE (X[I]:5:2,' ');

WRITELN

END;

PROCEDURE SHET(K:INTEGER;

VAR

S1,P1:REAL;

X1:MASSIV);

VAR

I:INTEGER;

BEGIN

S1:=0;

P1:=1;

FOR I:=1 TO K DO

BEGIN

S1:=S1+X1[I];

P1:=P1*X1[I]

END

END;

BEGIN

WRITELN('Введите вектор A');

VVOD (10,A);

WRITELN(' Введите вектор B');

VVOD (10,B);

WRITELN('Исходный вектор A');

VIVOD (10,A);

WRITELN('Исходный вектор B');

VIVOD (10,B);

SHET (10,SA,PA,A);

WRITELN('Сумма элементов вектора A=',SA:5:2);

WRITELN('Произведение элементов вектора A=',PA:7:2);

SHET (10,SB,PB,B);

WRITELN('Сумма элементов вектора B=',SB:5:2);

WRITELN('Произведение элементов вектора B=',PB:7:2);

END.


ЛИТЕРАТУРА

1. Гуда А.Н. Информатика. - М.: Издательско-торговая корпорация «Дашков и К°»; Ростов н/Д: Наука-Спектр, 2009.

2. Докукина Т.К. Программирование и алгоритмические языки. - М.: Машиностроение, 1988.

3. Новичков В.С. Алгоритмические языки. Паскаль в техникуме.

4. Пильщиков В.Н. Сборник упражнений по языку Паскаль. - М.: Наука, 1989.

5. Семакин Н.Г. Основы программирования. – М.: Издательский центр «Академия», 2008.

6. Турбо Паскаль 7.0. – К.: Издательская группа BHV, 1999.


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: