Напечатать все буквы входящие в текст по одному разу - Pascal
Формулировка задачи:
Прошу помоч. Очень надо.
Дан текст из строчных латинских букв, за которыми следует точка.
Напечатать все буквы входящие в текст по одному разу.
Решение задачи: «Напечатать все буквы входящие в текст по одному разу»
textual
Листинг программы
var c:char;
s,sd:set of char;
begin
s:=[ ]; {инициализация множества входных символов}
sd:=[ ]; {инициализация множества повторяющихся символов}
repeat
read(c);
if c in s then
sd:=sd+[c] {накопление множества повторяющихся символов}
else s:=s+[c]; {накопление множества всех символов}
until c='.';
s:=s-sd-['.']; {получение множества неповторяющихся символов}
for c:=#33 to #255 do
if (c in s) then
write(c:3);
end.
Объяснение кода листинга программы
- Объявление переменных:
c- символьная переменная для считывания символов.s- множество всех уникальных символов.sd- множество повторяющихся символов.
- Инициализация множеств:
sиsdинициализируются пустыми множествами.
- Цикл считывания символов:
- В цикле считываются символы из входного потока и проверяется, содержится ли символ
cв множествеs(всех уникальных символов).
- В цикле считываются символы из входного потока и проверяется, содержится ли символ
- Обновление множеств:
- Если символ
cуже есть в множествеs, он добавляется в множествоsd(повторяющиеся символы). - Иначе, символ
cдобавляется в множествоs.
- Если символ
- Завершение цикла:
- Цикл прерывается, когда считывается символ
..
- Цикл прерывается, когда считывается символ
- Фильтрация неповторяющихся символов:
- Из множества
sудаляются символы, содержащиеся и в множествеsdи символ..
- Из множества
- Цикл для печати уникальных символов:
- Происходит перебор символов от #33 до #255.
- Если символ содержится в множестве
s, то он выводится на печать, выравниваясь по ширине 3 символа.
- Конец программы:
- Завершение выполнения программы.