![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Двоичный --в--> десятичный [D7]
KLOPs © (2005-05-25 21:46:00)Почему неправильно работает этот код?
Задача: преобразовать ХХХХХХХХ(2) в XXX(10)
function BinToInt(Value: string): LongInt;
var
i, Size: Integer;
begin
Result := 0;
Size := Length(Value);
for i := Size downto 0 do
begin
if Copy(Value, i, 1) = '1' then
begin
Result := Result + (1 shl i);
end;
end;
end;
Virgo_Style (2005-05-26 09:19:00) [1]begin...end © (26.05.05 8:57) [11]
Мои извинения.
Спасибо, не за что :) Просто забавно получилось =)
begin...end (2005-05-26 08:57:00) [2]> KLOPs (25.05.05 22:30) [5]
Насчёт BinToInt я ошибся, её нет в idGlobal. Перепутал её с IntToBin. Прошу прощения. Поэтому, вероятно, действительно надо было писать собственную функцию -- в этой ветке лучшим решением является [2].
> Virgo_Style © (25.05.05 23:01) [7]
Просто когда я начинал писать ответ, Вашего ответа ещё не было. Мои извинения.
Anatoly Podgoretsky (2005-05-26 07:44:00) [3]Обработка ошибок это для домашнего задания.
Defunct (2005-05-26 04:55:00) [4]Приведенные здесь функции "сжуют" строки вида
'sdjhffd43210' и никак не оповестят пользователя о том, что преобразовывется чипуха, а не Bin.
Причем рез-тат [2] и [1][3] будет отличаться.
Юрий Зотов (2005-05-25 23:20:00) [5]> KLOPs (25.05.05 22:30) [5]
Теперь, когда Ваше решение после поправок заработало, предлагаю сравнить его и [3] по скорости.
Кстати, заголовок функции лучше изменить:
function BinToInt( constValue: string): Int64;
Virgo_Style (2005-05-25 23:01:00) [6]Kerk © (25.05.05 22:55) [6]
Похоже на то :o)
Kerk (2005-05-25 22:55:00) [7]Virgo_Style © (25.05.05 21:55) [1]
ты invisible забыл выключить :))))
KLOPs (2005-05-25 22:30:00) [8]Спасибо братаны...
(begin...end special)
Kerk (2005-05-25 22:10:00) [9]Virgo_Style © (25.05.05 21:55) [1]
vs
begin...end © (25.05.05 21:57) [3]
ЛОООООООООООООООООООООООООООЛ :))))))
begin...end (2005-05-25 21:57:00) [10]> KLOPs (25.05.05 21:46)
> for i := Size downto 0 do
for i := Size downto 1
> Result := Result + (1 shl i)
Result := Result + (1 shl (Size - i))
P.S. Функцию BinToInt из модуля idGlobal посмотрите. Оно рульно будет.
Virgo_Style (2005-05-25 21:55:00) [11]
for i := Size downto 1do
begin
if Value[i]= '1' then
begin
Result := Result + (1 shl (Size-i));
end;
end;
Не проверял.
Юрий Зотов (2005-05-25 21:55:00) [12]function BinToInt(Value: string): Int64;
var
i: Integer;
begin
Result := 0;
for i := 1 to Length(Value) do
Result := (Result shl 1) + Ord(Value[i]) - Ord('0')
end;