IPB
ЛогинПароль:

> Прочтите прежде чем задавать вопрос!

1. Заголовок темы должен быть информативным. В противном случае тема удаляется ...
2. Все тексты программ должны помещаться в теги [code=pas] ... [/code].
3. Прежде чем задавать вопрос, см. "FAQ", если там не нашли ответа, воспользуйтесь ПОИСКОМ, возможно такую задачу уже решали!
4. Не предлагайте свои решения на других языках, кроме Паскаля (исключение - только с согласия модератора).
5. НЕ используйте форум для личного общения, все что не относится к обсуждению темы - на PM!
6. Одна тема - один вопрос (задача)
7. Проверяйте программы перед тем, как разместить их на форуме!!!
8. Спрашивайте и отвечайте четко и по существу!!!

> Упорядочивание по алфавиту. Проблема.
Медвежонок
сообщение 23.04.2009 18:09
Сообщение #1





Группа: Пользователи
Сообщений: 2
Пол: Мужской

Репутация: -  0  +


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

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 18:36
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
 
 Ответить  Открыть новую тему 
Ответов(1 - 2)
volvo
сообщение 23.04.2009 18:34
Сообщение #2


Гость






Цитата
как можно это исправить?
написать свою функцию сравнения строк:
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 18:52
Сообщение #3





Группа: Пользователи
Сообщений: 2
Пол: Мужской

Репутация: -  0  +


Спасибо, задача работает, тегами пользоваться буду.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 

 Ответить  Открыть новую тему 
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 



- Текстовая версия 19.06.2025 8:26
Хостинг предоставлен компанией "Веб Сервис Центр" при поддержке компании "ДокЛаб"