Помогите, как преобразовать данный алгоритм с помощью рекурсии ( в pascal abc) Слова в...

0 голосов
41 просмотров

Помогите, как преобразовать данный алгоритм с помощью рекурсии ( в pascal abc)
Слова в тексте разделены пробелами. Какие символы есть в каждом слове?
Решение:
function simbols(st:string):set of char;
var
s:string;
n:integer;
mc:set of char;
begin
mc:=[];
n:=pos(' ',st);
if n>0 then
begin
s:=copy(st,1,n-1);
Delete(st,1,n);
result:=simbols(st);
end
else s:=st;
foreach var c:char in s do mc:=mc+[c];
if result=[] then result:=mc else if mc<>[] then result:=result*mc;
end;

var
s:string;
begin
readln(s);
writeln(simbols(s));
end.


Информатика (358 баллов) | 41 просмотров
Дан 1 ответ
0 голосов
Правильный ответ

Function simbols(st:string):set of char;
var s:string;
n,i:integer;
nc:set of char;
begin
nc:=[];
n:=pos(' ',st);
if n>0 then
begin
s:=copy(st,1,n-1);
Delete(st,1,n);
end
else
 begin
  s:=st;
  st:='';
end;
  for i:=1 to length(s) do  nc:=nc+[s[i]];
if length(st)>0 then
result:=nc*simbols(st)
 else result:=nc;
end;

(9.7k баллов)
0

программа выдает ошибку

0

в первой строке функции разделено? var s:string? и в конце нужно подправить result:=nc*simbols(st) и else result:=nc, а то лишние команды получаются

0

а можно пожалуйста точнее??

0

А что конкретно точнее?

0

я не могу понять куда нужно вставить данные строки, я пробовала, но программа все равно не работает

0

В решении приведен только текст функции, его нужно было переделать на рекурсивный вызов. Полностью копируете этот текст, выделив его мышью, затем нажимаете правую кнопку мыши и выбираете "копировать", затем в блокноте вставляете этот текст и после него добавляете текст основной программы var
s:string;
begin
readln(s);
writeln(simbols(s));
end.

0

спасибо)