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.