![]() Главная страница Случайная страница КАТЕГОРИИ: АвтомобилиАстрономияБиологияГеографияДом и садДругие языкиДругоеИнформатикаИсторияКультураЛитератураЛогикаМатематикаМедицинаМеталлургияМеханикаОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРелигияРиторикаСоциологияСпортСтроительствоТехнологияТуризмФизикаФилософияФинансыХимияЧерчениеЭкологияЭкономикаЭлектроника |
Ввод и вывод множеств
Следует помнить, что значения множественного типа нельзя вводить и выводить. Однако можно ввести значения элементов множества и добавить их к множеству, используя операцию объединения множеств, например: 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 часа)
|