Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 2005.06.14;
Скачать: [xml.tar.bz2];

Вниз

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

 
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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.47 MB
Время: 0.035 c
4-1113995312
anjey
2005-04-20 15:08
2005.06.14
Как спрятать програму от Alt+Tab


1-1117193280
Laster
2005-05-27 15:28
2005.06.14
Как можно сохранить файл NotifyEvent


1-1116967301
grol
2005-05-25 00:41
2005.06.14
Как правильно урезать переменную Real?


1-1117280052
LubaAL
2005-05-28 15:34
2005.06.14
Фон формы


1-1116967058
Roman_Vladivostok
2005-05-25 00:37
2005.06.14
Ошибки при запуске DOS программы под WIN.





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский