19.11.2009, 09:48
общий
это ответ
Доброго времени суток.
Оговорюсь сразу, русский шрифт Pascal не поддерживает, так что я использую звонкие согласные Английского алфавита. Если у вас поддерживает кириллицу тогда просто надо изменить константу Word;
По коду:
1) Вводим строку.
2) Начинаем цикл который позволит нам разбить каждое слово в свою ячейку массива (Massiv_String)
3) Перед тем как вносить символ слова в массив мы проверяем входит он в константу Word (звонких согласных), ибо другие символы нам по сути и не нужны.
4) Если цикл дошел до запятой, то увеличиваем индекс массива, ибо новое слово в отдельную ячейку.
5) Начинаем два цикла. Главный цикл (For i...) считает слова из массива (Massiv_String) , а вложенный цикл (For l...) считает символы в i-ом слове.
6) Вызываем процедуру поиска с параметрами (символ,текущее слово) и в процедуре находим повторяется ли этот символ, если да (переменная e увеличивается с каждым схожим символом) то выводим этот символ.Притом символ который похож на тот который мы сравниваем удаляется из массива строк, так как он уже не нужен.
Если что-то не понятно,то обращайтесь. Код проверял, но не исключаю что возможны "проскоки" неправильных ответов (в Pascal'e давно не кодил). Так что лучше протестировать программу со всеми возможностями ввода.
Приложение:
uses crt;
const Word=['b','v','g','d','z','l','m','n','r'];
var Str:String;
Massiv_String:array [1..100] of string;
i,j,l:integer;
procedure Search(Ch:Char;k:Integer);
Var e,q,p:integer;
begin
e:=0;
For q:=k+1 to j do
For p:=1 to length(Massiv_String[q=]) do
if Massiv_String[q=][p]=ch then
begin
inc(e);
Massiv_String[q=][p] := ' ';
end;
if e>0 then
WriteLn(ch);
end;
begin
clrscr;
Writeln('Read String');
ReadLn(Str);
j:=1;
For i:=1 to Length(Str) do
begin
If Str[i]=',' then
inc(j);
If Str[i] in Word then
Massiv_String[j]:=Massiv_String[j]+Str[i];
end;
For i:=1 to j-1 do
For l:=1 to length(Massiv_String[i]) do
Search(Massiv_String[i][l],i);
Readln;
end.