// 21. Задача на множества. Дан текст. Удалить в нем повторяющиеся символы.
Program kr_1;
var a:string;
T:set of char;
s,i,k:integer;
begin
writeln('ВВедите предложение');
readln(a);
T:=[];
for i:=1 to length(a) do
if a in T then delete(a,i,1) else T:=T+[a];
writeln(a);
end.
Другие языки программирования и технологии
Проблема с задачей с паскале, подскажите пожалуйста где неправельно и как ошибку исправить
В вопросе явно не достаточно данных!
Если нужно удалить все символы, встречающиеся более 1 раза, то вот так:
var Str : String;
S1, S2 : Set of Char;
Ch : Char;
N : Integer;
begin
Write('Введите строку: '); ReadLn(Str);
S1 := []; S2 := []; for N := 1 to Length(Str) do if Str[N] in S1 then S2 := S2 + [Str[N]] else S1 := S1 + [Str[N]];
for Ch := #0 to #255 do if Ch in S2 then while Pos(Ch, Str) > 0 do Delete(Str, Pos(Ch, Str), 1);
WriteLn(Str);
end.
Здесь символы попадают в первое множество, если встречаются 1 раз,
во второе — когда встречаются 2-й раз.
Если переделать твой код (для решения с одним множеством) , то будет примерно вот так:
var Str : String;
S : Set of Char;
N : Integer;
begin
Write('Введите строку: '); ReadLn(Str);
S := []; N := 1;
while N <= Length(Str) do
if Str[N] in S then Delete(Str, N, 1) else begin S := S + [Str[N]]; Inc(N); end;
WriteLn(Str);
end.
Длина строки изменяется, поэтому необходимо использовать цикл while.
Если нужно удалить все символы, встречающиеся более 1 раза, то вот так:
var Str : String;
S1, S2 : Set of Char;
Ch : Char;
N : Integer;
begin
Write('Введите строку: '); ReadLn(Str);
S1 := []; S2 := []; for N := 1 to Length(Str) do if Str[N] in S1 then S2 := S2 + [Str[N]] else S1 := S1 + [Str[N]];
for Ch := #0 to #255 do if Ch in S2 then while Pos(Ch, Str) > 0 do Delete(Str, Pos(Ch, Str), 1);
WriteLn(Str);
end.
Здесь символы попадают в первое множество, если встречаются 1 раз,
во второе — когда встречаются 2-й раз.
Если переделать твой код (для решения с одним множеством) , то будет примерно вот так:
var Str : String;
S : Set of Char;
N : Integer;
begin
Write('Введите строку: '); ReadLn(Str);
S := []; N := 1;
while N <= Length(Str) do
if Str[N] in S then Delete(Str, N, 1) else begin S := S + [Str[N]]; Inc(N); end;
WriteLn(Str);
end.
Длина строки изменяется, поэтому необходимо использовать цикл while.
ды блин.... смножествами вообще почти ничего нельзя делать.... а ты пытаешься работать с ними как со строками. вот в чем ошибка!!!! множества внутри программы, их нельзя умножить, добавить, вычесть.. . а ты к множеству пытаешься что то прибавить, да еще другого типа данных. . бред
Похожие вопросы
- Задача в паскале. помогите пожалуйста... очень срочно нужно!
- Строковые переменные (Паскаль).Подскажите пожалуйста
- Задача по Паскалю. Исправьте ошибки, пожалуйста.
- Pascal. Помогите пожалуйста решить задачу в паскале !
- Помогите, пожалуйста с задачей :( Сижу, туплю уже какой день, вообще не соображу - чтокуда. Задача на Паскале
- помогите найти ошибку в задаче по паскалю
- ПОМОГИТЕ С ЗАДАЧАМИ В ПАСКАЛЕ
- Помогите,пожалуйста,решить задачу в Паскале.
- Помогите пожалуйста с задачей на Паскаль.
- Решение задач по паскалю