Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 15.11.2010, 15:17   #1
Кирилл Юрьевич
 
Аватар для Кирилл Юрьевич
 
Регистрация: 28.08.2010
Сообщений: 4
Вопрос Перевод из 10-ой СС в 2-чную СС

Не могу понять, почему программа работает правильно, только если число (ch10) не превышает 1023 ?

Код:
Program Sistemy_schislenija;
Uses CRT;
Var ch2,ch10,k,a:integer;
Begin
k:=1;
ch2:=0;
Writeln('Введите число в десятичной СС ');
Readln(ch10);
a:=ch10;
While ch10>=1 do
      begin
      ch2:=ch2+(ch10 mod 2)*k;
      ch10:=ch10 div 2;
      k:=k*10;
      end;
Writeln('Вот как число ',a,' выглядит в двоичном коде : ',ch2);
End.
// ch10 - число в обычном 10-ом виде
// ch2 - число в 2-ичном  виде
// k - счётчик перехода в след. разряд, т.к число в 2-ичном коде пишется с конца
// a - просто изначальное 10-ичное, то же что и ch10
P.S.
Кому не трудно - ответьте в skype'е
Мой логин там - icq3749860
Кирилл Юрьевич вне форума Ответить с цитированием
Старый 15.11.2010, 15:51   #2
Ghost of Night
Форумчанин
 
Аватар для Ghost of Night
 
Регистрация: 08.08.2010
Сообщений: 371
По умолчанию

На Делфи это выглядит так, только не помню, числа по моему выводятся в обратном порядке, но это можно легко исправить.

Код:
procedure dec_bin;
label m1;
begin
 ch:=StrToInt64(Form1.Edit2.Text);
 m1:
 otv:=Trunc(ch / 2);
 otv2:=ch mod 2;
 Form1.Memo1.Lines.Add(IntToStr(otv2));

 if otv<2 then Form1.Memo1.Lines.Add(FloatToStr(otv))
 else
  begin
   ch:=Round(otv);
   goto m1;
  end;
end;
Хакинг - не преступление, а способ выживания.
Ghost of Night вне форума Ответить с цитированием
Старый 15.11.2010, 16:07   #3
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

Кирилл Юрьевич
потому что, Вы придумали (или нашли где-то) очень корявую идею:
ch2 (где Вы получаете двоичное число), на самом деле это не ДВОИЧНОЕ число, это десятичное число, только состоящее из 1 и 0 и запись которого совпадает с записью двоичного числа.
попробуйте выкинуть напрочь K (ибо не нужно)
sh2 сделать типа string
и написать что-то примерно такое:
Код:
sh2 := '';
While ch10>0 do
    begin
      if (ch10 mod 2)=1 then
         ch2:= '1'+ch2
      else  
         ch2:= '0'+ch2;
      ch10:=ch10 div 2;
   end;
p.s. код писал прямо в браузере и не проверял..
Serge_Bliznykov вне форума Ответить с цитированием
Старый 15.11.2010, 16:26   #4
Кирилл Юрьевич
 
Аватар для Кирилл Юрьевич
 
Регистрация: 28.08.2010
Сообщений: 4
По умолчанию

"Корявая идея" :D
Спасибо, понял

Код:
Program Sistemy_schislenija;
Uses CRT;
Var  ch:integer;st:string;
Begin
writeln('Введите 10-ичное число ');
write('Чичло: ');
readln(ch);
while ch >=1 do
      begin
      If(ch mod 2)=1 then
            begin
            st:='1'+st;
            ch:=ch div 2;
            end
      else
          begin
          st:='0'+st;
          ch:=ch div 2;
          end;
      end;
writeln('А вот и его двоичный код: ',st);
End.
Хорош?

Последний раз редактировалось Кирилл Юрьевич; 15.11.2010 в 16:52.
Кирилл Юрьевич вне форума Ответить с цитированием
Старый 15.11.2010, 17:01   #5
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

ну я бы вынес ch:ch div 2 за if
а так - да, вполне себе нормально.

p.s. ну "чичло" исправьте...
Serge_Bliznykov вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Перевести вещественное число в 10 чную систему счисления из двоичной Shamonya Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 0 11.11.2010 16:29
перевод historic Помощь студентам 0 05.10.2010 00:12
перевод Александе еть я Помощь студентам 1 09.05.2010 00:14
перевод ZET78 Общие вопросы C/C++ 1 03.05.2010 08:51
Перевод из Кб в Мб и т.д. okgo Паскаль, Turbo Pascal, PascalABC.NET 8 18.11.2008 21:03