значения, являющимися членами множества. Как правило вывод множества оформляется в виде процедуры. Например:
Procedure PrintSet (Letters: Letterset); Var
NextLetter: ‗A‖..‘Z‖;
Begin
For NextLetter: = ‗A‘ to ‗Z‘ do
If NextLetter in Letters then Write(NextLetters)
End;
Таким образом, все множество выводится по элементно в цикле.
Данная процедура PRINNTSET выводит прописные буквы из множества, которое представлено параметром Letters. Например, если вызвать эту процедуру с множеством [‗A‘, ‗C‘, ‗Z‘] в качестве параметра, вывод с помощью этой процедуры будет:
A, C, Z.
Рассмотрим две программы, в которых осуществляется обработка различных множеств по определенным алгоритмам.
Пример 1. Пусть задано три различных множества
Vowels, Uppercase и Lowetcase. Необходимо определить является ли введенное для переменной NextChar значения (символ) – гласной, строчной или прописной буквой.
Вариант программы следующий
program mnog;
type CharSet=Set of Char;
var Vowels,Uppercase,LowerCase:CharSet; NextChar:Char;
begin Vowels:=['A','a','E','I','i','O','o','U' ,'u'];
Uppercase:=['A'..'Z'];
LowerCase:=['a'..'z']; Repeat
write('Введите букву '); readln(NextChar);
if NextChar in Vowels then writeln('Содержит гласную ',NextChar)
else if NextChar in Uppercase
then
writeln('Содержит прописную согласную ',NextChar) else
if NextChar in LowerCase
then
writeln('Содержит строчную согласную ',NextChar) else
writeln('Содержит не букву ',NextChar);
Until NextChar in ['A'..'Z','a'..'z'];
end.
Здесь цикл ( Repeat – Untie) выполняется до тех пор, пока значение переменной NextChar является буквой. В самом теле цикла оператор if с помощью оператора Writeln выводит сообщение о содержимом NextChar (в зависимости от этого содержимого). Пример 2. Для заданного множества (BEGINSET), состоящего из 256 целых чисел (цифр) в диапазон от 255, выделить все простые числа, из которых нужно сформировать новое множество PRIMERSET, вывести на печать.
В основе поиска (выделения) простых чисел летит метод, называемый «решето аратосфера», который
заключается в следующем: из ряда натуральных чисел от 2 до N вычеркивают (удаляют) сначала числа делящиеся на 2, потом удаляют числа, делящиеся на 3, на 5 и т. д. Оставшиеся числа являются простыми.
Заметим, что признаком окончанием программы (цикла) является получение пустого множества BEGINSET, из которого в цикле удаляются элементы делящиеся на 2, 3, 5 и т.д.
Вариант программы следующий:
Program Primer; const N=225;
type SetofNumber=set of 1..N; var n1,Next,i:word;
BeginSet,PrinterSet:SetofNumber; Begin
BeginSet:=[2..N];
PrinterSet:=[1];
next:=2;
while BeginSet<>[] do Begin
n1:=next; while n1<=N do
Begin
Exclude(BeginSet,n1);
n1:=n1+next;
end;
Include(PrinterSet,next); Repeat
inc(next);
until (next in BeginSet)
or (next>N); end;
for i:=1 to N do
if i in PrinterSet then Write(i:8);
Writeln;
end.
В данной программе имеется внешний цикл Whiledo и два последовательных внутренних цикла: Whiledo
и Repeat-Untie.
Здесь, перед началом внешнего цикла обозначено NEXT := 2, что означает: при первой реализации первого внутреннего цикла (While-do) осуществляется удаление чисел исходного массива кратным 2.
После такого удаления, переход на второй внутренний цикл (repeat-untie), где осуществляется наращивание кратности до 3-х, после этого на внешнем цикле осуществляется присвоение данной кратности переменной n1 (n1:=next) и затем на первом внутреннем цикле удаляются числа кратные 3-м и т.д. В конце программы приведен цикл for-to-do, в котором параметр цикла I последовательно принимает значение от 1 до N = 255. В поле цикла осуществляет проверка: принадлежит ли величина I массиву PrimerSet, если да, то оно выводится на печать. При этом, каждой величине при печати отводится восемь позиций.
Файлы.
Все выше приведѐнные программы представляют собой интерактивные программы. Такая программа считывает все входные ( исходные ) данные с клавиатуры, а весь вывод осуществляет на экран дисплея.
Интерактивный ввод и вывод хороши для программ, манипулирующих небольшими количествами данных, однако подобный подход мало эффективен для программ, предназначенных для обработки обширных объемов информации .В последнем случае, чтобы выйти из положения, можно для ввода и вывода использовать файлы. Turbo Pascal работает с двумя видами файлов: текстовыми и двоичными файлами. В данном пособии будут рассмотренытолько текстовые файлы.
Процедура ввода и вывода, которые были использованны для интерактивных программ, находят также и для текстовых файлов.
Под файлом понимается либо именованная область внешней памяти компьютера (жесткого диска, гибкой дискеты и.т.д.), либо логическое устройство – потенциальный источник или приѐмные информации.
При этом файл должен:
-иметь имя, что даѐт возможность программе работать одновременно с несколькими файлами;
-содержать компоненты одного типа ( типом компонентов может быть любой тип языка, кроме файлов);
При этом длина создаваемого файла не объявляется и ограничивается только ѐмкостью устройств внешней памяти.
Текстовый файл предоставляет собой набор отдельных символов, которые хранятся на диске под одним именем. После создания файла необходимо преобразовать программу таким образом, чтобы она считывала нужные ей данные не с клавиатуры, а из текстового файла.
Заметим, что преимуществ использования входного файла заключается в том, что с применением какого-