12.11.2007, 01:18
общий
это ответ
Здравствуйте, Мироненко Николай Николаевич!
Поскольку число в 16-ичной система счисления моет состоять из символов {0,1,2,3,4,5,6,7,8,9,a,b,c,d,e,f} либо {0,1,2,3,4,5,6,7,8,9,A,B,C,D,E,F}, а обращаться к элементу массива нужно только по ЦЕЛОЧИСЛЕННОМУ индексу, то приходится изначально символ переводить в его код с помощью функции ORD.
Код символа ‘A‘ равен 55, символа ‘a‘ равен 97, а символа ‘0‘ - 48.
Получаем что при значениях c16[i] равных <b>от ‘0‘ до ‘9‘</b> будем обращаться к таким элементам массива:
masBin[ord(‘0‘)-48] = masBin[0]
masBin[ord(‘1‘)-48] = masBin[1]
masBin[ord(‘2‘)-48] = masBin[2]
masBin[ord(‘3‘)-48] = masBin[3]
masBin[ord(‘4‘)-48] = masBin[4]
masBin[ord(‘5‘)-48] = masBin[5]
masBin[ord(‘6‘)-48] = masBin[6]
masBin[ord(‘7‘)-48] = masBin[7]
masBin[ord(‘8‘)-48] = masBin[8]
masBin[ord(‘9‘)-48] = masBin[9]
Аналогично рассмотрим диапазоны и для букв.
<b>от ‘A‘ до ‘F‘</b>
masBin[ord(‘A‘)-48] = masBin[10]
masBin[ord(‘B‘)-48] = masBin[11]
masBin[ord(‘C‘)-48] = masBin[12]
masBin[ord(‘D‘)-48] = masBin[13]
masBin[ord(‘E‘)-48] = masBin[14]
masBin[ord(‘F‘)-48] = masBin[15]
<b>от ‘a‘ до ‘f‘</b>
masBin[ord(‘a‘)-48] = masBin[10]
masBin[ord(‘b‘)-48] = masBin[11]
masBin[ord(‘c‘)-48] = masBin[12]
masBin[ord(‘d‘)-48] = masBin[13]
masBin[ord(‘e‘)-48] = masBin[14]
masBin[ord(‘f‘)-48] = masBin[15]
<i>Вот такая арифметика, и немного смекалки для компактного решения поставленной задачи ;).</i>
Возможно более понятно для этой же задачи будет запись выше описанного кода в таком виде:
<code>case c16[i] of
‘0‘..‘9‘: c2:=c2 + masBin[ord(c16[i]) - Ord(‘0‘)];
‘A‘..‘F‘: c2:=c2 + masBin[ord(c16[i]) - Ord(‘A‘)+10];
‘a‘..‘f‘: c2:=c2 + masBin[ord(c16[i]) - Ord(‘a‘)+10];</code>
Где <font color=purple><b>+10</b></font> - "поправка на ветер", поскольку в массиве соответствующие значения для букв начинаются с элемента с индексом 10.
Good Luck!!!