Помощь - Поиск - Пользователи - Календарь
Полная версия: Упорядочивание по алфавиту. Проблема.
Форум «Всё о Паскале» > Pascal, Object Pascal > Задачи
Медвежонок
Привет.
Условие задачи: в строке вводится последовательность русских слов, разделённых
одним или несколькими пробелами. Упорядочить эти слова по алфавиту. Требования : предусмотреть, чтобы слова, содержащие буквы "Ё" или "ё", также правильно упорядочивались.

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
Цитата
как можно это исправить?
написать свою функцию сравнения строк:
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 добавь в начале все заглавные буквы в том же порядке, мне просто лениво набивать их...
Медвежонок
Спасибо, задача работает, тегами пользоваться буду.
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.