Конспект лекций по программированию для начинающих. Гладков В.П. - 201 стр.

UptoLike

Составители: 

203
Для одинаковой обработки всех символов предложения добавим к концу
предложения дополнительный символ - пробел. Как только обнаружится конец
слова, вычислим его длину и проверим на максимум:
smax:=''; { слово максимальной длины }
readln(s); { исходное предложение }
s:=s+' '; { исходное предложение с дополнительным пробелом }
ss:='' { текущее слово предложения }
for i:=1 to length(s)-1 do { просмотр предложения по два символа }
if (copy(s,i,1)<>' ') and (copy(s,i+1,1)=' ')
{ если текущий символ не
пробел, а следующий - пробел }
then begin ss:=ss+copy(s,i,1); { дописали последний символ }
if length(smax)<length(ss)
then smax:=ss; { если длина нового слова больше, чем
длина smax, то запоминаем его }
ss:='' { готовим место для следующего слова }
end
else if copy(s,i,1)<>' ' then ss:=ss+copy(s,i,1).
{ если текущий символ не пробел, то запоминаем его в слове }.
Пример 12.8. Задано предложение, состоящее из слов, разделенных одним или
несколькими пробелами. Упорядочить слова предложения в алфавитном порядке.
Решение. Перепишем слова предложения по одному в элементы одномерного
массива. Отсортируем массив по возрастанию и перепишем слова из массива в
строку.
const nn=100; { максимальное количество слов в предложении }
type mas=array[1..nn]of string; { тип массива строк }
var a:mas; { массив слов предложения }
i,j, { индексы массивов, i - номер обрабатываемого символа }
k:integer; { количество слов в предложении, индекс массива слов }
s, { исходное предложение и результат }
r:string;{ текущее слово предложения, переменная для обмена слов }
begin
write('Введите строку ');
readln(s);
s:=s+' '; { добавили пробел в конце для однотипной обработки всех слов }
k:=0; { количество слов в предложении }
r:=''; { текущее слово }
for i:=1 to length(s)-1 do {просмотр предложения по два символа}
if (copy(s,i,1)<>' ') and (copy(s,i+1,1)=' ')
{ если текущий символ не пробел, а следующий пробел }
then begin r:=r+copy(s,i,1); { дописать символ к слову }
k:=k+1; { увеличить количество слов }
a[k]:=r; { записать слово
в массив}
r:='' { подготовить место для следующего слова }
end
else if copy(s,i,1)<>' ' then r:=r+copy(s,i,1);
{ если текущий символ не пробел, то записать его в слово }
                                       203

Для одинаковой обработки всех символов предложения добавим к концу
предложения дополнительный символ - пробел. Как только обнаружится конец
слова, вычислим его длину и проверим на максимум:
   smax:=''; { слово максимальной длины }
   readln(s); { исходное предложение }
   s:=s+' '; { исходное предложение с дополнительным пробелом }
   ss:='' { текущее слово предложения }
   for i:=1 to length(s)-1 do { просмотр предложения по два символа }
       if (copy(s,i,1)<>' ') and (copy(s,i+1,1)=' ')
   { если текущий символ не пробел, а следующий - пробел }
       then begin ss:=ss+copy(s,i,1); { дописали последний символ }
                        if length(smax)' ' then ss:=ss+copy(s,i,1).
   { если текущий символ не пробел, то запоминаем его в слове }.
   Пример 12.8. Задано предложение, состоящее из слов, разделенных одним или
несколькими пробелами. Упорядочить слова предложения в алфавитном порядке.
   Решение. Перепишем слова предложения по одному в элементы одномерного
массива. Отсортируем массив по возрастанию и перепишем слова из массива в
строку.
   const nn=100; { максимальное количество слов в предложении }
   type mas=array[1..nn]of string; { тип массива строк }
   var          a:mas; { массив слов предложения }
                i,j, { индексы массивов, i - номер обрабатываемого символа }
                k:integer; { количество слов в предложении, индекс массива слов }
                s, { исходное предложение и результат }
                r:string;{ текущее слово предложения, переменная для обмена слов }
   begin
       write('Введите строку ');
       readln(s);
       s:=s+' '; { добавили пробел в конце для однотипной обработки всех слов }
       k:=0; { количество слов в предложении }
       r:=''; { текущее слово }
       for i:=1 to length(s)-1 do {просмотр предложения по два символа}
                if (copy(s,i,1)<>' ') and (copy(s,i+1,1)=' ')
                { если текущий символ не пробел, а следующий пробел }
                then begin r:=r+copy(s,i,1); { дописать символ к слову }
                                k:=k+1; { увеличить количество слов }
                                a[k]:=r; { записать слово в массив}
                                r:='' { подготовить место для следующего слова }
                        end
                else if copy(s,i,1)<>' ' then r:=r+copy(s,i,1);
       { если текущий символ не пробел, то записать его в слово }