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

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

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

 
 Ответить  Открыть новую тему 
> Упорядочивание по алфавиту. Проблема.
сообщение
Сообщение #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 -
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #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 добавь в начале все заглавные буквы в том же порядке, мне просто лениво набивать их...
 К началу страницы 
+ Ответить 
сообщение
Сообщение #3





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

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


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

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

 





- Текстовая версия 1.11.2020 3:35
500Gb HDD, 6Gb RAM, 2 Cores, 7 EUR в месяц — такие хостинги правда бывают
Связь с администрацией: bu_gen в домене octagram.name