Работа с множествами, Pascal
Нужно сделать код. Пользователь вводит строку. Из нее надо сформировать 2 множества. В первом - буквы, которые повторяются в предложении. Во втором - буквы, которые входят единожды в предложение. Когда начинал пытаться делать код, думал что в множествах есть индексы, но оказалось нет. От слова совсем не понимаю как это реализовать без них. Моя задумка была перебрать каждый элемент строки и проверить, если он есть в множестве в котором хранятся буквы которые повторяются в предложении - выход из ифа, если нет, записать его в множество где буквы встречаются единожды. Дальше пока не думал как реализовывать, остановился на этом этапе из-за проблемы
var
usetText, repeatedLetters, uniqueLetters : set of string;
input,i: string;
str,n: integer;
begin
usetText:=[]; repeatedLetters:=[]; uniqueLetters:=[];
write('Введите элементы множества');
readln(input);
str:=length(input);
include(usetText,input);
for i:=1 to str do
begin
if usetText[i] in repeatedLetters then
begin
break;
end
else begin
inlude(uniqueLetters,usetText[i]);
end;
end;
end.
Ответы (2 шт):
Проверить наличие элемента в множестве можно с помощью оператора in.
Однако в вопросе проблема в другом.
Неверно задан тип множества: так как в множестве хранятся буквы, а не строки, тип должен быть например
set of charпеременная
iобъявлена как строка, однако используется в качестве счетчика цикла. Вместо этого нужно было объявлять ее какintegerпеременная
usetTextне нужна, так как в нее просто сохраняется введенная строка. Вместо этого можно было получать символы прямиком из строки по индексу.сам алгоритм тоже не совсем верный. Решение может быть следующим
- если символ в множестве повторяющихся символов - переходим к следующей итерации
- если символ в множестве уникальных символов
- удаляем из уникальных
- добавляем в повторяющиеся
- переходим к следующей итерации
- если дошли до этого пункта - добавляем символ в множество уникальных.
Готовый код к заданию выше
var repeatedLetters, uniqueLetters : set of char;
input: string;
x: char;
str,i: integer;
begin
repeatedLetters:=[]; uniqueLetters:=[];
write('Введите элементы множества');
readln(input);
str:=length(input);
for i:=1 to str do
begin
if input[i] in uniqueLetters then begin
x:= input[i];
uniqueLetters:= uniqueLetters - [x];
include(repeatedLetters, input[i]);
end
else begin
if input[i] in repeatedLetters
then
else include(uniqueLetters, input[i]);
end;
end;
writeln('Элементы которые встречались неоднократно: ', repeatedLetters );
writeln('Элементы которые встречались единожды: ', uniqueLetters);
end.