Студопедия

Главная страница Случайная страница

Разделы сайта

АвтомобилиАстрономияБиологияГеографияДом и садДругие языкиДругоеИнформатикаИсторияКультураЛитератураЛогикаМатематикаМедицинаМеталлургияМеханикаОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРелигияРиторикаСоциологияСпортСтроительствоТехнологияТуризмФизикаФилософияФинансыХимияЧерчениеЭкологияЭкономикаЭлектроника






Ввод и вывод множеств






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

S: =[]; {исходное множество пусто}

Read(n);

S: = S+[n]; {объединяем исходное множество и множество, содержащее введенный элемент}

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

for i: ='а' to ´ z´ do

if i in S then Write(i: 3);

Рассмотрим несколько примеров решения задач с использованием множеств.

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

Строим множество символов, которые допустимы в качестве первого: это строчные и прописные буквы латинского алфавита и символ подчеркивания:

['A'.. 'Z', 'a'.. 'z', '_'].

Аналогично определяем множество допустимых символов, которые моryт встретиться, начиная со второго символа слова:

['A'.. 'Z', 'a'.. 'z', '_', '0'.. '9'].

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

Var st: string;

key: boolean;

i: integer;

Begin

WriteLn('Введите строку');

ReadLn(st);

if st[1] in ['A'.. 'Z', 'a'.. 'z', '_'] then {проверка первого символа}

begin

i: = 2;

key: = true;

while (i< =length(st)) and key do

{проверка остальных символов}

if st[i] in ['A'.. 'Z', 'a'.. 'z', '_', '0'.. '9'] then inc(i) else key: = false;

if key then WriteLn('Строка', st, ' идентификатор.')

else WriteLn('Строка ', st, ' содержит недопустимые символы.');

end

else Writeln('Строка ', st, ' начинается с недопустимого символа.');

End.

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

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

Var n: longint;

st: string;

key: boolean;

i: integer;

Begin

WriteLn('Введите число: '); ReadLn(n);

Str(abs(n), st);

mnoj: =[]; {в исходном состянии множество пусто}

for i: =1 to length(st) do

mnoj: =mnoj + [st[i]]; {формируем множество}

WriteLn('Запись числа ', n, ' содержит следующие цифры: ');

For j: ='0' to '9' do {выводим цифры, вошедшие вo множество}

if j in mnoj then Wrtie(f+' ');

End.

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

- встречаются в каждом слове строки;

- встречаются только в одном слове строки;

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

- встречаются более чем в одном слове строки.

Для решения задачи определим тип «множество символов ASCII». Множество гласных букв русского языка зададим с помощью типизированной константы множественного типа. Определим неременные множественного типа для храпения результатов и промежуточных значений:

§ resl - множество гласных, входящих в каждое слово.

§ res2 - множество гласных, входящих не более чем в одно слово,

§ res3 - множество гласных предложения,

§ rеs4 - множество гласных, входящих более чем в одно слово.

§ mnsl - множество гласных, встретившихся в текущем слове.

В программе введем строку и будем последовательно выделять из нее слова. Дня каждого слова построим множество встретившихся гласных букв mnsl.

Если в строке содержится одно слово, то rеsl - rеs2 - res3 = mnsl, а множество res4 пусто.

Если в строке более одного слова, то каждое новое слово изменяет результирующие множества следующим образом:

1) множество гласных, входящих в каждое слово, будет равно пересечению уже найденною множества гласных, входящих в каждое слово, и множества гласных слова: resl ∩ mnsl;

2) множество гласных, входящих более чем в одно слово, res4 увеличится (объединение) на повторяющиеся буквы нового слова: res4 U (rеs3 ∩ mnsl);

3) множество гласных в предложении res3 увеличится (объединение) на множество гласных слова: res3 ∩ mnsl.

Множество гласных, входящих только в одно слово, res2 будем определять после обработки всех слов как разность множества гласных букв предложения и множества гласных, входящих более чем в одно слово предложения: res3 \ res4.

Type setchar=set of char;

Const G: setchar = ['a', 'я', 'y', 'ю', 'э', 'e', 'o', 'ё', 'и', 'ы']; {типизированная константа «множество гласных букв»}

Var res1, {множество гласных, входящих в каждое слово}

res2, {множество гласных, входящих только в одно слово}

res3, {множество гласных в предложении}

res4, {множество гласных, входящих более чем в одно слово}

mnsl: setchar; {множество гласных текущего слова}

st, slovo: string; ch: char;

i, к: integer; first: boolean;

Begin

WriteLn('Введите исходную строку! ');

ReadLn(st); {читаем исходную строку}

st: =st+ ' '; {добавляем в конец пробел для простоты обработки}

first: =true; {признак «первое слово»}

while st< > " do {цикл выделения и обработки слов}

begin k: =pos(' ', st);

slovo: =Copy(st, l, k-l); {выделяем слово}

Delete(st, l, k); {удаляем слово из строки}

{определяем множество гласных, входящих в данное слово}

mnsl: =[]; {исходное состояние «пустое множество»}

for i: =1 to k-1 do

if slovo[i] in G then {если гласная буква, то)

nmsl: =mnsl+[slovo[i]]; {добавляем к множеству}

{формируем множества результатов}

if first then {если первое слово, то}

begin

res1: =mnsl; {входят в каждое слово}

res2: =mnsl; {входят не более чем в одно слово}

res3: =mnsl; {встретившиеся гласные}

res4: =[]; {входят более чем и одно слово}

first: =false; {выключаем признак «первое слово»}

end

else {если не первое слово предложения, то}

begin

resl: =resl*mnsl; {входят в каждое слово}

res4: =res4+res3*mnst; {входят более чем в одно слово}

res3: =res3+nmst; {встретившиеся гласные}

end

end;

res2: =res3-res4; {входящие в одно слово}

{выводим результаты Анализа предложения}

WriteLn('Гласные, которые входят в каждое слово: ');

For ch: =#0 tо #255 do if ch in resl then Write(ch: 2);

WriteLn;

WriteLn('Гласные, входящие только в одно слово: ');

For ch: =#0 to #255 do if ch in res2 then Write(ch: 2);

WrileLn;

WriteLn('Глacныe, входящие хотя бы в одна слова: ');

For ch: =#0 to #255 do if ch in res3 then Write(ch: 2);

WriteLn;

WriteLn('Гласные, входящие более чем в одно слово: ');

for ch: =#0 to #255 do if ch in res4 then Write(ch: 2);

WriteLn;

End.

 


Лекция 17.Файловый тип данных(2 часа)






© 2023 :: MyLektsii.ru :: Мои Лекции
Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав.
Копирование текстов разрешено только с указанием индексируемой ссылки на источник.