Пример использования множеств

В качестве примера используется программа вычисления нескольких первых простых чисел методом «решета Эратосфена», выполняемого по следующему алгоритму.

 

1. Поместим все числа между 2 и n в «решето».

2. Выберем и вынем из «решета» наименьшее из оставшихся в нем чисел.

3. Поместим это число среди «простых» чисел.

4. Переберем и вынем из решета все числа, кратные данному.

5. Если решето не пустое, повторим шаги 2-5.

 

Program Eratosfen;

Const N=255; { Максимально возможное значение }

Var

R, { исходное решето }

Pr { решето с простыми числами - итог }

: Set of 2..N;

i, { счетчик чисел }

j { очередное простое число }

: integer;

Begin

R:=[2..N];

Pr:=[]; { пока в решете с простыми числами ничего нет}

j:=2; { первое простое число }

 

{ цикл по шагам 2-5}

Repeat

{ поиск очередного простого числа

(первый раз не выполняется ни разу) }

While not (j in R) do

j:=j+1;

Pr:=Pr+[j]; { включение в итог – шаг 3}

i:=j;

Writeln(j:8);

While i<=N do

Begin

R:=R-[i]; { вынимание из решета – шаг 4}

i:=i+j

end;

Until R=[ ]; { повторяем, если решето не пустое }

end.

Файлы

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

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

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

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

Описание файловой переменной производится следующим образом.

 

TYPE <имя> = FILE OF <тип_компонент>

VAR <список_имен>: FILE OF <тип_компонент>

 

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

 

Var Fil: File of real;

 

Авторский вариант языка содержит минимальный набор допустимых действий с файлами, который лишь частично совпадает с операциями, реализованными в Турбо Паскале. Здесь, в частности, отсутствуют явные операции над буферной переменной (в этом пункте есть несовместимость стандартного и Турбо-Паскаля). Все операции с файлами реализованы в виде процедур и функций, что является общепринятым подходом в большинстве языков программирования.

 

Все операции с файлами можно условно разбить на 4 группы.

· установочные и завершающие операции;

· собственно ввод-вывод;

· перемещения по файлу;

· специальные операции.