Версия для печати темы

Нажмите сюда для просмотра этой темы в обычном формате

Форум «Всё о Паскале» _ Задачи _ Упорядочивание по алфавиту. Проблема.

Автор: Медвежонок 23.04.2009 22:09

Привет.
Условие задачи: в строке вводится последовательность русских слов, разделённых
одним или несколькими пробелами. Упорядочить эти слова по алфавиту. Требования : предусмотреть, чтобы слова, содержащие буквы "Ё" или "ё", также правильно упорядочивались.

procedure Sort(var A:TArr);
var {i,}j: integer; x: string; OK: boolean;
begin
{ i:=n; }
repeat
OK:=true; //флаг
i:=i-1;
for j:= 1 to i do //цикл сортировки
if A[j]>A[j+1] then //сравнение строк
begin {1}
x:=a[j+1];
A[j+1]:=A[j];
A[j]:=x;
OK:=false; //произошла сортировка, флаг сбрасывается в состояние false
end; {2}
until OK; //цикл повторяется до тех пор, пока будут происходить перестановки
end;


Выше приведена процедура сортировки, только одна проблема - на выходе слова, начинающиеся с буквы "ё", стоят перед словами, начинающимися на букву "е" - как можно это исправить?

Пользуйся тегами для подсветки синтаксиса...

Автор: volvo 23.04.2009 22:34

Цитата
как можно это исправить?
написать свою функцию сравнения строк:
function compare(s1, s2: string): integer;
const alpha: string = 'абвгдеёжзийклмнопрстуфхцчшщъыьэюя';
var
i, p1, p2: integer;
begin
for i := 1 to min(length(s1), length(s2)) do begin
p1 := pos(s1[i], alpha);
p2 := pos(s2[i], alpha);
if p1 > p2 then begin compare := 1; exit; end
else if p1 < p2 then begin compare := -1; exit; end;
end;
if length(s1) > length(s2) then compare := 1
else
if length(s1) < length(s2) then compare := -1
else compare := 0;
end;
и пользоваться ей, а не встроенным сравнением строк (если встроенное тебя не устраивает). Вызывать - так:
// if A[j]>A[j+1] then // сравнение строк
if compare(A[j], A[j+1]) > 0 then
... В строку Alpha добавь в начале все заглавные буквы в том же порядке, мне просто лениво набивать их...

Автор: Медвежонок 23.04.2009 22:52

Спасибо, задача работает, тегами пользоваться буду.