Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2005.06.14;
Скачать: CL | DM;

Вниз

Двоичный --в--> десятичный   Найти похожие ветки 

 
KLOPs   (2005-05-25 21:46) [0]

Почему неправильно работает этот код?
Задача: преобразовать ХХХХХХХХ(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-25 21:55) [1]

for i := Size downto 1 do
begin
  if Value[i] = "1" then
  begin
    Result := Result + (1 shl (Size-i) );
  end;
end;


Не проверял.


 
Юрий Зотов ©   (2005-05-25 21:55) [2]

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;


 
begin...end ©   (2005-05-25 21:57) [3]

> 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 посмотрите. Оно рульно будет.


 
Kerk ©   (2005-05-25 22:10) [4]

Virgo_Style ©   (25.05.05 21:55) [1]
vs
begin...end ©   (25.05.05 21:57) [3]

ЛОООООООООООООООООООООООООООЛ :))))))


 
KLOPs   (2005-05-25 22:30) [5]

Спасибо братаны...
(begin...end special)


 
Kerk ©   (2005-05-25 22:55) [6]

Virgo_Style ©   (25.05.05 21:55) [1]

ты invisible забыл выключить :))))


 
Virgo_Style ©   (2005-05-25 23:01) [7]

Kerk ©   (25.05.05 22:55) [6]
Похоже на то :o)


 
Юрий Зотов ©   (2005-05-25 23:20) [8]

> KLOPs   (25.05.05 22:30) [5]

Теперь, когда Ваше решение после поправок заработало, предлагаю сравнить его и [3] по скорости.

Кстати, заголовок функции лучше изменить:
function BinToInt(const Value: string): Int64;


 
Defunct ©   (2005-05-26 04:55) [9]

Приведенные здесь функции "сжуют" строки вида
"sdjhffd43210" и никак не оповестят пользователя о том, что преобразовывется чипуха, а не Bin.
Причем рез-тат [2] и [1][3] будет отличаться.


 
Anatoly Podgoretsky ©   (2005-05-26 07:44) [10]

Обработка ошибок это для домашнего задания.


 
begin...end ©   (2005-05-26 08:57) [11]

> KLOPs   (25.05.05 22:30) [5]

Насчёт BinToInt я ошибся, её нет в idGlobal. Перепутал её с IntToBin. Прошу прощения. Поэтому, вероятно, действительно надо было писать собственную функцию -- в этой ветке лучшим решением является [2].

> Virgo_Style ©   (25.05.05 23:01) [7]

Просто когда я начинал писать ответ, Вашего ответа ещё не было. Мои извинения.


 
Virgo_Style ©   (2005-05-26 09:19) [12]

begin...end ©   (26.05.05 8:57) [11]
Мои извинения.


Спасибо, не за что :) Просто забавно получилось =)



Страницы: 1 вся ветка

Текущий архив: 2005.06.14;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.052 c
14-1116827183
Kerk
2005-05-23 09:46
2005.06.14
С днем рожденья! 23 мая


1-1117524388
sofs
2005-05-31 11:26
2005.06.14
Мемо


6-1111769393
Radgar
2005-03-25 19:49
2005.06.14
Активность у массива TServerSocket


14-1117095750
Игорь Шевченко
2005-05-26 12:22
2005.06.14
Восстановление ветки "Двойные стандарты"


1-1117540421
makey
2005-05-31 15:53
2005.06.14
запись в текстовый файл длинных строк