Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Двоичный --в--> десятичный [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;


Наверх

Титульная страница Поиск, карта сайта Написать письмо