Найти в тексте самое короткое и самое длинное слово, содержащие хотя бы один раз заданный символ

Вводится непустая последовательность символов (≤79), заканчивающаяся точкой. Отдельные слова в тексте разделены пробелами.

code: #pascal
program gdy;
label 1;  {метка}
 
var s:string; {переменная СТРОКИ}
m:array[1..100] of string;  {массив, в который запишем все СЛОВА строки, имеющие ЗАДАННЫЙ символ}
i,p,n:integer;
max,min:string; {переменые МАКСимального и МИНимального слова строки}
c:char;  {переменная заданного символа}
 
begin   {***************НАЧАЛО ПРОГРАММЫ**************}
1:write('Vvedite stroky: '); readln(s);  {считываем исходную строку с экрана }
 
if s[length(s)]<>'.' then begin  {проверяем УСЛОВИЕ "заканчивается ли строка точкой"}
writeln('ERROR: konec stroki okancivaetsia na "."');  goto 1; end; {если ошибка то сообщаем пользователью}
 
if length(s)>79 then begin  {проверяем УСЛОВИЕ "последовательность символов (<= 79 ) "}
writeln('ERROR: stroka doljna biti <=79 simvolov');  goto 1; end;{если ошибка то сообщаем пользователью}
 
write('Vvedite ZADANII SIMVOL:');  readln(c); {считываем "заданный символ" с экрана }
 
i:=0; {обнуляем СЧЁТЧИК кол-ва СЛОВ в строке}
 
repeat  {***цикл в котором записываем СЛОВА В массив***}
p:=pos(' ',s);  {смотрим на какой позиции находится пробел}
if pos(c,copy(s,1,p-1))<>0 then {смотрим есть ли в текущем СЛОВЕ заданный символ}
begin inc(i); m[i]:=copy(s,1,p-1);  end;   {то увеличиваем СЧЁТЧИК на +1 и записываем это слово в МАССИВ}
delete(s,1,p); {после того, как слово ПРОСМОТРЕННО - мы это слово удаляем}
until p=0; {***КОНЕЦ цикла, в котором записываем НУЖНЫЕ СЛОВА В массив}
 
n:=i;
if pos(c,copy(s,1,length(s)-1))<>0 then {у нас осталось последнее слово в строке, которое проверяем на наличие в нём заданного символа}
begin n:=i+1; m[n]:=copy(s,1,length(s)-1);   end;  {если есть этот символ - то добавляем его в массив}
{***************************************}
max:=m[1]; {изначально МАКСИМУМ ставим на 1 слово}
min:=m[1];  {изначально МИНИМУМ ставим на 1 слово}
 
for i:=2 to n do begin {дальше проверяем все слова начиная со второго}
if length(m[i])>length(max) then max:=m[i]; {и вычисляем МАКСИМАЛЬНОЕ}
if length(m[i])(min) then min:=m[i]; {и вычисляем МИНИМАЛЬНОЕ}
                 end;
 
 writeln;
writeln('MakS: ',max); {выводим МАКСИМАЛЬНОЕ слово на экран}
writeln('MIN: ',min);  {выводим МИНИМАЛЬНОЕ слово на экран}
readln; readln;
end.      
Поделиться:

Похожие статьи: