Сортировка слов по алфавиту - Pascal ABC
Формулировка задачи:
задано слово. за основу алфавита взять буквы из этого слова. пользователь вводит слова и надо их отсортировать по заданному новому алфавиту.
например задано слово "солнце" алфавит состоит из букв:
1. С
2. О
3. Л
4. Н
5. Ц
6. Е
пользователь вводит слова сон, лес, слон, нос
программа должна выдать сон, слон, лес, нос
Решение задачи: «Сортировка слов по алфавиту»
textual
Листинг программы
var abc: String;
function IsLess(const a, b: String): Boolean;
var i, j: Integer;
begin
i:=1; j:=Length(a); if j>Length(b) then j:=Length(b);
while (i<=j) and (a[i]=b[i]) do Inc(i);
if i<=j then IsLess:=Pos(a[i],abc)<Pos(b[i],abc)
else IsLess:=j>Length(a);
end;
const mn=10;
var
a: array [1..mn] of String;
t: String;
i, j, n: Integer;
begin
Write('Алфавит: '); ReadLn(abc);
repeat Write('Строк [2..',mn,']: '); ReadLn(n); until n in [2..mn];
WriteLn('Строки:');
for i:=1 to n do begin Write(i:2,'> '); ReadLn(a[i]); end;
for i:=1 to n-1 do for j:=i+1 to n do
if IsLess(a[j],a[i]) then begin
t:=a[i]; a[i]:=a[j]; a[j]:=t;
end;
WriteLn('Сортировка:');
for i:=1 to n do WriteLn(i:2,'> ',a[i]);
end.
Объяснение кода листинга программы
- Переменная abc инициализируется значением, которое пользователь вводит в процессе выполнения программы.
- Функция IsLess принимает два аргумента типа String и возвращает значение типа Boolean. Она сравнивает первые символы двух строк и возвращает true, если первая строка идет перед второй, и false в противном случае.
- Константа mn и переменная t инициализируются значениями 10 и пустой строкой соответственно.
- Переменная a инициализируется массивом из mn строк.
- Пользователю предлагается ввести строки для сортировки, начиная со второй строки и до конца массива. Строки вводятся с помощью функции ReadLn.
- В цикле for перебираются строки массива a. Для каждой строки выводится ее номер с помощью функции WriteLn.
- Во внутреннем цикле for проверяется, что текущая строка меньше предыдущей. Если это так, то происходит обмен строками с помощью функции IsLess.
- После завершения внутреннего цикла for выводится отсортированный массив строк с помощью функции WriteLn.