Найти в тексте самое короткое и самое длинное слово, содержащие хотя бы один раз заданный символ
Категория: Delphi/Pascal
2012-02-13 21:42:14
Вводится непустая последовательность символов (≤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.
Поделиться: