![]() |
|
|
|
|
#1
|
||||
|
||||
|
В моей программе используются индентификаторы (у каждого объекта в списке он свой). Индентификатор должен быть в пределах от 0000 до ZZZZ. Используется алфавит по порядку: 0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ. Вот и сама задача: к одной строке прибавить и получить другую строку. Пример:
0000 -> 000A -> 000B -> ... -> 000Z -> 001A -> ... -> ZZZZ и тд. Здесь HEX не поможет, используются буквы всего алфавита. Не очень-то понятно объяснил. Если кто-то видел похожий исходник, или он у кого-то есть, поделитесь. P.S. Длина строки не имеет значения.Заранее спасибо! Последний раз редактировалось GriLab, 14.06.2011 в 13:10. |
|
#2
|
||||
|
||||
|
Используй 36-ричную систему.
(26+10=36). Хотя если тебе нужно просто прибавить 1 - можно подумать как оптимизировать. |
|
#3
|
||||
|
||||
|
Вот уже не первый раз встречаю подобную систему создания идентификатора и каждый раз подобная система страшно неудобна, тормознута и плохо дружит с тем-же SQL. Возникает простой вопрос: Нахрена козе баян? Чем вас не устраивают нормальные числовые идентификаторы?
|
|
#4
|
||||
|
||||
|
Да, и в правду.
Алгоритм-то я знаю, а вот как его реализовать не получается. |
|
#5
|
|||
|
|||
|
А разве не так?
0000 -> 0001 -> ... -> 0009 -> ... -> 9999 -> 000A -> 000B -> ... -> 000Z -> 001A -> ... -> ZZZZ |
|
#6
|
||||
|
||||
|
вот так чтоль?
Код:
program Project1;
{$APPTYPE CONSOLE}
uses
SysUtils;
const
alphabet: array [1..36] of char =
('0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F','G','H','I','J','K','L',
'M','N','O','P','Q','R','S','T','U','V','W','X','Y','Z');
var
q,w,e,r:integer;
begin
try
for q := Low(alphabet) to High(alphabet) do
for w := Low(alphabet) to High(alphabet) do
for e := Low(alphabet) to High(alphabet) do
for r := Low(alphabet) to High(alphabet) do
Write(alphabet[q]+alphabet[w]+alphabet[e]+alphabet[r]+'->');
Readln;
except
on E: Exception do
Writeln(E.ClassName, ': ', E.Message);
end;
end. |