Модераторы: Snowy, MetalFan, bems, Poseidon
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> [Исходники][Delphi][Пример]Перевод числа из десятичной системы счисления в двоичную 
:(
    Опции темы
THandle
Дата 24.3.2008, 19:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Хранитель Клуба
Group Icon
Награды: 1



Профиль
Группа: Админ
Сообщений: 3639
Регистрация: 31.7.2007
Где: Moscow, Dubai

Репутация: 50
Всего: 372



Задание.

Дана строка изображающая десятичную запись целого положительного числа.
Вывести строку, изображающую двоичную запись этого же числа.


Решение.

Код

program problem;

{$APPTYPE CONSOLE}

uses
  SysUtils;
var
  sDv: string;
  iMod, iDch, iDchr :integer;

begin
  Write('Decatichnoe chislo: ');
  Readln(iDch);
  iDchr := iDch;
  while iDch >= 2 do
    begin
      iMod := iDch mod 2;
      iDch := iDch div 2;
      sDv := IntToStr(iMod) + sDv;
    end;
  sDv := IntToStr(iDch) + sDv;
  Writeln(iDchr, '(10) = ', sDv, '(2)');
  Readln;
end.



Объяснение.


iDch - наше десятичное число.

sDv - двоичное.



Код

  Write('Decatichnoe chislo: ');
  Readln(iDch);
  iDchr := iDch;


Вводим десятичное число.


Код


  while iDch >= 2 do
    begin
      iMod := iDch mod 2;
      iDch := iDch div 2;
      sDv := IntToStr(iMod) + sDv;
    end;


В цикле делаем следующие действия:

Код

  iMod := iDch mod 2;


Получаем остаток от деления десятичного числа на 2.

Код

  iDch := iDch div 2;


Делим десятичное число на два без остатка.

Код

  sDv := IntToStr(iMod) + sDv;


Добавляем в начало нашего двоичного числа остаток от деления
Код

  iMod := iDch mod 2;



Если поделенное на 2 без остатка десятичное число меньше двух, то цикл завершает работу,
так как если десятичное число меньше 2, оно равно либо 1, либо 0, а эти цифры переводить уже не нало, так как они сами собой и останутся.

Код

  sDv := IntToStr(iDch) + sDv;


Ставим в начало нашего двоичного числа оставшееся после цикла десятичное число(1 или 0).

Код

  Writeln(iDchr, '(10) = ', sDv, '(2)');
  Readln;



Выводим на экран десятичное число и его представление в двоичной системе.

Конец программы.





В прикрепленном к сообщению файле находится полный проект этой программы.

Это сообщение отредактировал(а) THandle - 24.3.2008, 19:21

Присоединённый файл ( Кол-во скачиваний: 262 )
Присоединённый файл  _______.rar 33,87 Kb
PM   Вверх
Alix
Дата 24.3.2008, 22:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


L45
**


Профиль
Группа: Участник
Сообщений: 581
Регистрация: 4.5.2005
Где: Pskov/Spb

Репутация: 8
Всего: 23



А можно сразу универсальную написать
Код
type
  TBase = 2..36;

function convert(n : integer; base : TBase) : string;
const
  symbols : array [0..36] of char = '01234567890ABCDEFGHIJKLMNOPQRSTUVWXYZ';
var
  digit : byte;

begin
  result := '';
  while n > 0 do begin
    digit := n mod base;
    n     := n div base;
    result := symbols[digit] + result;
  end;
end;



--------------------
Знание только тогда знание, когда оно приобретено усилиями своей мысли, а не памятью (с) Л. Толстой
High tech. Low live. (с) Gardner Dozois
PM MAIL ICQ Skype   Вверх
Demogargon
Дата 13.4.2008, 14:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 128
Регистрация: 9.1.2008

Репутация: 1
Всего: 1



Нолик лишний после 9, в строке где ты массив создаешь. 
--------------------
Дело стоит рядом со стоящим, идет за идущим, творит с творящим. Оно следует за нами подобно тени.
PM MAIL ICQ   Вверх
Alix
Дата 14.4.2008, 11:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


L45
**


Профиль
Группа: Участник
Сообщений: 581
Регистрация: 4.5.2005
Где: Pskov/Spb

Репутация: 8
Всего: 23



точно, молодец! а я сейчас смотрю и думаю, почему в массиве 37 элементов, когда должно быть 36... ))
заодно еще одна ошибка, если передается число ноль, то возвращается пустая строка, как пофиксить, думаю, понятно.


--------------------
Знание только тогда знание, когда оно приобретено усилиями своей мысли, а не памятью (с) Л. Толстой
High tech. Low live. (с) Gardner Dozois
PM MAIL ICQ Skype   Вверх
THandle
Дата 14.4.2008, 12:03 (ссылка) |  (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Хранитель Клуба
Group Icon
Награды: 1



Профиль
Группа: Админ
Сообщений: 3639
Регистрация: 31.7.2007
Где: Moscow, Dubai

Репутация: 50
Всего: 372



Demogargon, молодец, заметил.

Пока сделал вот так: 

Код

type
  TBase = 2..36;
function Convert(n : integer; base : TBase) : string;
const
  cSymbols : array [0..35] of char = '0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ';
var
  bDigit : byte;
begin
  if n = 0 then
    result := '0'
  else
    result := '';
  while n > 0 do
    begin
      bDigit := n mod base;
      n := n div base;
      result := cSymbols[bDigit] + result;
    end;
end;


В FAQ тоже подправил.
PM   Вверх
mrDollar93
Дата 20.1.2012, 20:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 1
Регистрация: 5.9.2011

Репутация: нет
Всего: нет



Цитата(THandle @ 14.4.2008,  12:03)
Demogargon, молодец, заметил.

Пока сделал вот так: 

Код

type
  TBase = 2..36;
function Convert(n : integer; base : TBase) : string;
const
  cSymbols : array [0..35] of char = '0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ';
var
  bDigit : byte;
begin
  if n = 0 then
    result := '0'
  else
    result := '';
  while n > 0 do
    begin
      bDigit := n mod base;
      n := n div base;
      result := cSymbols[bDigit] + result;
    end;
end;


В FAQ тоже подправил.

Хороший пример,
но не пойму зачем cSymbols описывать как массив,
если тип STRING и есть тот же массив

var
cSymbols: string;
...
begin
 cSymbols:='0123456...';
...
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Для новичков"
SnowyMetalFan
bemsPoseidon
Rrader

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Для новичков | Следующая тема »


 




[ Время генерации скрипта: 0.1268 ]   [ Использовано запросов: 23 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.