Нужна программа на Pascal. Определить, упорядочены ли лексикографически слова данного предложения( предложение задается программистом с помощью Read).

Нужна программа на Pascal. Определить, упорядочены ли лексикографически слова данного предложения( предложение задается программистом с помощью Read).
Гость
Ответ(ы) на вопрос:
Гость
"Типовой школьный" Паскаль: // PascalABC.Net 3.0, сборка 1064 const   k = 100; var   s, wd: string;   i, j, m, n, pt, step: integer;   Words, WordsSort: array[1..k] of string;   InOrder: boolean; begin   Write('Введите строку: '); Readln(s);   n := Length(s); pt := 1; m := 0;   repeat     // Пропускаем все символы до первого непробельного     while pt <= n do       if Ord(s[pt]) <= 32 then Inc(pt) else break;     if pt <= n then begin       // Выделяем очередное слово       wd := '';       while pt <= n do         if Ord(s[pt]) > 32 then begin wd := wd + s[pt];Inc(pt) end         else break;       if wd <> '' then begin Inc(m);Words[m] := wd end     end   until pt > n;   // Теперь Words содержит все m слов.   // Отсортируем их в массиве WordsSort методом Шелла   for i := 1 to m do WordsSort[i] := Words[i];   step := m div 2;   while step > 0 do begin     for j := m - step downto 1 do begin       i := j;       while i <= m - step do begin         if WordsSort[i] > WordsSort[i + step] then begin           wd := WordsSort[i];           WordsSort[i] := WordsSort[i + 1];           WordsSort[i + 1] := wd         end;         i := i + step       end     end;     step := step div 2   end;   // Осталось поэлементно сравнить оба массива   InOrder := true; i := 1;   while InOrder and (i <= m) do   begin InOrder := (Words[i] = WordsSort[i]); Inc(i) end;   if m = 0 then Writeln('Строка не содержит слов')   else     if InOrder then Writeln('Cлова упорядочены')     else Writeln('Cлова не упорядочены') end. Тестовое решение: Введите строку: слово1    слово2    слово3    слово4 слово5 Cлова упорядочены Введите строку: слово1    слово2    слово4    слово3 слово5 Cлова не упорядочены "Современный" вариант решения на Паскале: // PascalABC.Net 3.0, сборка 1064 var   s:string; begin   Write('Введите строку: '); Readln(s);   var Delim:=Range(0,32).Select(x->Chr(x)).ToArray;   var Words:=s.Split(Delim).Where(x->x<>'');   var WordsSort:=Words.Sorted;   if Words.SequenceEqual(WordsSort) then Writeln('Cлова упорядочены')   else Writeln('Cлова не упорядочены') end. Тестовое решение совпадает с вышеприведенным.
Не нашли ответ?
Ответить на вопрос
Похожие вопросы