Пример 7.4.
Заданную последовательность слов переупорядочить в алфавитном
порядке (то есть выполнить лексикографическое упорядочение).
Тест
Данные
|
Результат
|
Words=(''стул'', ''гора'', ''яма'', ''стол'')
|
Words=("гора", "стол", "стул", "яма") |
Демонстрация
Школьный АЯ (АЯ расширен добавлением
типа данных лит таб и операций отношения для литерных переменных)
алг Расположить по алфавиту(арг цел NWords, арг рез лит таб Words[1:NWords])
надо | Таблица Words упорядочена лексикографически
нач цел i, j, лит Tmp
нц для i от 1 до NWords-1
нц для j от i+1 до NWords
если Words[i]>Words[j] | условие перестановки слов
то Tmp:=Words[i]; Words[i]:=Words[j]; Words[j]:=Tmp
все
кц
кц
кон
Исполнение алгоритма
i
|
j
|
Words[i]>Words[j]
|
Массив Words
|
|
|
|
''стул'', ''гора'', ''яма'', ''стол''
|
1
|
2
3
4
|
+
-
-
|
''гора'', ''стул'', ''яма'', ''стол''
|
2
|
3
4
|
-
+
|
''гора'', ''стол'', ''яма'', ''стул''
|
3
|
4
|
+
|
''гора'', ''стол'' , ''стул'', ''яма''
|
Turbo Pascal
Program LexOrder;
Uses Crt;
Var Words : Array[1..10] of String; {массив слов}
Tmp : String; {Tmp вспомогательная переменная}
i, j, NWords : Integer; {NWords количество слов}
BEGIN
ClrScr;
Write('Количество слов в тексте ');
ReadLn(NWords);
For i := 1 to NWords do
begin Write(i, '-ое слово : ');
ReadLn(Words[i])
end;
For i := 1 to NWords-1 do {лексикографическое упорядочение слов}
For j := i+1 to NWords do
If Words[i]>Words[j] then
begin
Tmp := Words[i]; Words[i]:=Words[j]; Words[j]:=Tmp
end;
WriteLn; WriteLn('О т в е т');
WriteLn('Лексикографически упорядоченный массив слов:');
For i := 1 to NWords do Write(Words[i], ' ');
WriteLn; ReadLn
END.
QBasic
CLS : INPUT "Количество слов в тексте ", NWords
DIM Words(NWords) AS STRING
FOR i = 1 TO NWords
PRINT i; "-ое слово " ; : INPUT Words(i)
NEXT i
FOR i = 1 TO NWords - 1 'лексикографическое упорядочение слов
FOR j = i + 1 TO NWords
IF Words(i) > Words(j) THEN SWAP Words(i), Words(j)
NEXT j
NEXT i
PRINT : PRINT "О т в е т"
PRINT "Лексикографически упорядоченный массив слов:"
FOR i = 1 TO NWords
PRINT Words(i); " " ;
NEXT i
PRINT
END