ZX-Ревю 1993 №5-6 1992 г.

Возвращаясь к напечатанному - сортировка русифицированных символьных строк.


Темы статьи: Программирование  

(С) Пыльцов Вадим, г.Надым, 1993г. Сортировка русифицированных символьных строк

В статье "Полная русификация Мастерфайл-09" автор предлагает читателям обсудить проблему сортировки русских слов по алфавиту. (См. ZX-РЕВЮ^, с. 29, 71).

В своих программах я эту "проблему" решаю очень просто. Например, с адреса 60000 я размещаю таблицу длиной 33 байта (ровно столько букв в русском алфавите) и в ней последовательно располагаю коды букв русского алфавита от А до Я. Предположим, что буква А у нас в нашем дополнительном наборе не изменялась, т.е. ей соответствует код 65, как и в стандартном наборе "Спектрума", а буква "Б" у нас закодирована по адресам буквы b (латинская строчная) т.е. ей соответствует код 98. Тогда по адресу 60000 мы запишем число 65, по адресу 60001 число 98 и так далее до ячейки 600032. В ней будет храниться код символа, вместо которого "зашита" буква Я.

Больше там ничего не нужно. В программах сортировка у меня происходят на ассемблере, что многократно повышает скорость работы, но это можно сделать и из Бейсика, правда при этом скорость работы немного снизится.

А делается это так. Допустим, у нас есть символьная переменная A$ = "БАБА ЯГА" (это какая-то фамилия или имя). Программа определяет код первой буквы - у нас это 98. Далее делается цикл:

100 FOR M = 60000 TO 60032: IF PEEK M = CODE A$(I) THEN LET M = M - 59999: GO TO ANOTHER

110 NEXT M

Т.е. если код первой буквы равен содержимому одной из ячеек нашей таблицы, то переменная M становится указателем, какая эта буква по порядку в русском алфавите.

У нас M становится равным двум. Дальше уже идет сам процесс перестановки (или сортировки) имен. Если же сортировка производится по нескольким начальным буквам, то мы просто организуем еще один цикл, например, с именем N и будем сравнивать PEEK M с CODE A$(N).

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

Так что, как видите, тут никакой проблемы и нет, все очень просто. Но еще лучше, как я уже сказал выше сделать всю эту сортировку на языке Ассемблера, особенно если сортируется большой массив данных.

ОПЕЧАТКА В ПРОГРАММЕ "КРИББЕДЖ" ДО-РЕВЮ-92, с. 187)

Дианов P^. из г.Братска Иркутской обл. просит уточнить строку 4515 из программы "Криббедж", опубликованной в N 7,8 '^-РЕВЮ-92". Там пропущена переменная:

4515 LET ? = 5: LET rlen = 2

Нам очень стыдно и неудобно, но почему-то с листингами такое бывает. После подготовки оригинал-макета в печать сколько не выверяй программу и не лови "блох", все равно какая-нибудь гадость просочится.

Правильно должно быть так:

4515 LET c = 5: LET rlen = 2




СОДЕРЖАНИЕ:


  Оставте Ваш отзыв:

  НИК/ИМЯ
  ПОЧТА (шифруется)
  КОД



Темы: Игры, Программное обеспечение, Пресса, Аппаратное обеспечение, Сеть, Демосцена, Люди, Программирование

Похожие статьи:
Жyрнaл Miracle #03 нa ХАЛЯВУ !!! - Paздaчa cлoнoв oт ТRIUMPН: Итaк вam прeдocтaвляeтcя yникaльнaя вoзmoжнocть пoлyчить бecплaтнyю кoпию нaшeгo diskzine...
От автора - Вот и подошел к концу второй выпуск газеты "Шупашкар".
Ха-хакер - Раздел предназначен для людей имеющих чувство юмора и злоупотребляющим им. "100 анекдотов о Чукче".
Терминалка - Как работать с терминалкой Macro Modem v2.1x
Мир звуков Спектрума - глава 2: Оператор BEEP, Создание эффектов на BEEPе, Создание музыки на BEEPе.

В этот день...   21 ноября