Множества (множественный тип)
В языке Паскаль множеством называется конечный (от 0 до 255) неупорядоченный набор элементов (возможно пустой), различающихся между собой значениями, но принадлежащих одному и тому же простому типу, который называется базовым типом для данного множества.
В качестве базового типа может использоваться любой скалярный тип кроме вещественного REAL.
Имя дается всему множеству в целом. В отличие от элементов массива элементы множества не пронумерованы, не упорядочены. Каждый отдельный элемент множества не идентифицируется, и с ним нельзя выполнить какие-либо действия. Действия могут выполняться только над множеством в целом. Элементами множества могут быть константы, переменные, выражения, значения которых принадлежат базовому типу. При записи элементы множества заключаются в квадратные скобки.
Например, [3,4,7,9,12] – множество из пяти целых чисел;
[1..100] – множество целых чисел от 1 до 100;
[‘A’..’Z’,’?’,’!’] – множество, содержащее все прописные латинские буквы и знаки ? и !.
[ ] – пустое множество, т.е. множество, не содержащее никаких элементов.
Порядок записи элементов множества в нем не имеет значения.
Например, [1,2,3] эквивалентно множеству [3,2,1];
Каждый элемент во множестве учитывается только один раз.
Например, [1,2,3,4,2,3,4,5] эквивалентно множеству [1..5].
Множества определяются ключевым словом SET OF и следующим за ним базовым типом.
Множества могут быть объявлены как в разделе описания типов TYPE, так и в разделе описания переменных VAR.
Синтаксис описания множества:
TYPE
имя типа = SET OF базовый тип;
VAR
имя множества: имя типа;
Мощность множества показывает, сколько элементов входит в данное множество.
Например,
[ ]=0 [1,2,3,4,5]=5
[4]=1 [1,2,3..5]=5
[‘0’..’9’,’E’,’+’]=12 [1..5]=5
Операции над множествами:
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.
Например, пусть M:=[3,4,7,9]
тогда M=[4,7,3,3,9]
5. Операции отношения и включения множеств:
= - равенство (совпадение) двух множеств
< > - неравенство множеств
Два множества считаются равными, если равны все их значения. Если множества отличаются хотя бы одним значением, то они не равны.
<= - проверка на вхождение множества из левого операнда в множество из правого операнда
>= - проверка на вхождение множества из правого операнда в множество из левого операнда
Все операции вырабатывают значения TRUE или FALSE в зависимости от проверки.
Например, [1,2,3]=[1,2] False
[1,2,3]<>[1,2,2] True
[1,2,3]>=[1,2] True
[3]=[1..100] True
6. Проверка принадлежности множеству (IN).
Правый операнд должен быть множеством, левый – значением базового типа множества. Эта операция вырабатывает значение TRUE, если значение элемента входит во множество, и значение FALSE в противном случае.
Например, 2 IN [1..10,12] True
5 IN [1,2,7,10] 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. Дана символьная строка. Требуется определить в ней количество знаков препинания.
2. Дана строка из строчных русских букв. Между соседними словами – запятая, за последним словом – точка. Составить программу, печатающую в алфавитном порядке: а) все гласные буквы, которые входят в каждое слово; б) все согласные буквы, которые не входят ни в одно слово.
ПОДПРОГРАММЫ В ПАСКАЛЕ
Подпрограммы (ПП) – это часть основной программы, оформленная в виде, допускающем многократное обращение к ней из разных точек основной программы.
В языке Паскаль выделяют два вида ПП:
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.
Задачи для самостоятельного решения:
Даны два вещественных вектора А и В. Логической переменной С присвоить значение TRUE, если у вектора А количество положительных элементов больше, чем у вектора В, и значение FALSE в противном случае.
ЗАКЛЮЧЕНИЕ
Программирование все в большей степени становится занятием для профессионалов. В понятие «компьютерная грамотность» входит, прежде всего, навык использования многообразных средств информационных технологий. Решая ту или иную информационную задачу, необходимо выбрать адекватное программное средство. Это могут быть электронные таблицы, системы управления базами данных, математические пакеты и т.п. И только в том случае, когда подобные средства не дают возможности решить задачу, следует прибегать к универсальным языкам программирования.
Задачей при первоначальном изучении программирования является освоение основ структурной методики программирования, которая остается основой программистской культуры. Для этой цели наиболее подходящим средством является язык программирования Паскаль.
Данное учебное пособие предназначено для освоения базовых понятий языков программирования высокого уровня в их реализации на Паскале, что является необходимым для освоения общих и профессиональных компетенций.
Методическая разработка может быть рекомендована для студентов, изучающих дисциплину «Основы программирования», а также в помощь преподавателям, читающим данную дисциплину.
ЛИТЕРАТУРА
1. Голицына О. Л., Попов И. И. «Основы алгоритмизации и программирования»: Учеб. пособие. – М.: ФОРУМ: ИНФРА-М, 2002.
2. Гуда А.Н. Информатика. - М.: Издательско-торговая корпорация «Дашков и К°»; Ростов н/Д: Наука-Спектр, 2009.
3. Культин Н.Б. Turbo Pascal в задачах и примерах - СПб.: БХВ-Петербург, 2010.
4. Павловская Т.А. Паскаль. Программирование на языке высокого уровня. Учебник, 2007.
5. Пильщиков В.Н. Сборник упражнений по языку Паскаль / В.Н. Пильщиков. – М.: Наука, 1989.
6. Семакин И.Г. Основы алгоритмизации и программирования: учебник для студ.учреждений сред. проф. образования / И.Г.Семакин, А.П.Шестаков. – М.: Издательский центр «Академия», 2013.