Странноватая задача, конечно. Естественно, что в множестве нет порядка элементов, использование процедур (функций) здесь совершенно ни к чему. Если учитывать все требования, то получится весьма корявая программа. Примерно вот такая: var s,s1:string; i:integer; mn:set of 'a'..'z'; function f(c:char;m:set of 'a'..'z'):boolean; begin f:=(not (c in m))and(c in ['a'..'z']) end; begin writeln('Введите строку:');readln(s); mn:=[];s1:=''; for i:=1 to length(s) do if f(s[i],mn) then begin mn:=mn+[s[i]]; s1:=s1+s[i]; end; writeln(s1); <span>end.
Пример работы: </span>Введите строку<span>: this is an example text. thisanexmpl </span>
<em>Напишу "современный" вариант решения. Хотя бы для того, чтобы показать, насколько современные способы решения задач в том же паскале ушли вперед по сравнению с тем временем когда придумывались эти задачи...</em>
// PascalABC.NET 3.0, сборка 1088 begin var s:=ReadString('Введите строку: '); var MySet:=s.Where(x->x in ['a'..'z']).Distinct; Writeln(MySet) end.
<em><u>Тестовое решение:</u></em> Введите строку: this is an example text. [t,h,i,s,a,n,e,x,m,p,l]
<em>А вот если воспользоваться "традиционной" работой с множеством, исходный порядок следования символов будет нарушен:</em>
// PascalABC.NET 3.0, сборка 1088 var MySet:set of char;
procedure AddToSet(s:string; var pSet:set of char); begin foreach var c in s do if c in ['a'..'z'] then Include(pSet,c) end;
begin var s:=ReadString('Введите строку: '); AddToSet(s,MySet); Writeln(MySet) end.
<u><em>Тестовое решение:</em></u> Введите строку: this is an example text. {n,e,m,l,t,s,a,i,h,p,x}
Найдём путем последовательного деления на основание с/с. Для этого нам необходимо делить число на 2 до того момента, пока в частном мы не получим цифру алфавита системы счисления, любую, кроме 0 (в данном случае необходимо прийти к 1). Потом записываем частное последнего вычисления, а следом за ним остатки остальных вычислений в обратном порядке. На фото подробнее.