Перевод чисел из произвольной СС в десятичную и обратно

Введение

Разработка Lazarus уходит своими корнями в проект Megido. Некоторые сведения о Megido можно почерпнуть из GoogleGroups и других списков рассылки. Это была первая попытка сделать opensource-клон Delphi, которая опиралась на исходный код Sybil (который был клоном Delphi для OS/2, несмотря на ограниченный дизайнер форм). Megido стартовал в 1998 году, но умер где-то в 1999-ом, из-за отсутствия внимания, и отсутствие заинтересованности в основанном на Sybil клоне, наследующем ограничения Sybil.В результате, три человека (Клифф Бэйсеман/CliffBaeseman, Шейн Миллер/ShaneMiller и Майкл Хесс/Michael A. Hess) начали работу над проектом Lazarus в феврале 1999 года. Каждый из них ранее пытался участвовать в проекте Megido, когда тот ещё был жив. Однако, разочаровавшись в Megido, они начали собственный проект — Lazarus.

Следующим участником команды Lazarus стал Марк Вэстинк (MarcWeustink). Он примкнул к проекту в августе 1999 года. Марк смотрел на LinuxDelphi (в то время Borland ещё не разработал Kylix). Он также интересовался Linux в целом, и именно ради этого присоединился к команде Lazarus. К моменту присоединения Марка Lazarus представлял собой всего лишь пустую панель инструментов и некоторые пункты меню на голом GTK. Редактор только обсуждался. Сейчас Марк по-прежнему является активным разработчиком, внося свой вклад в интерфейс отладчика.

Через год после Марка, в сентябре 2000 года, к команде присоединился МаттиасГаэртнер (MattiasGaertner). С помощью Маттиаса команде Lazarus удалось значительно продвинуться вперёд. МаттиаспортировалSynedit, написал значительную часть codetools и дизайнера форм. С этими дополнениями Lazarus стал выглядеть привлекательнее. Спустя три года Маттиас добавил систему пакетов и продолжил работу над новыми функциями IDE и совершенствованием уже написанных.

МихаНелиссен (MichaNelissen) начал вносить свой вклад в проект в июне 2003 года, в основном отправляя патчи для интерфейса win32. Он использовал Borland C++ Builder, но хотел также портировать код на другие платформы. Поскольку Borland добавить в VCL свои собственные расширения языка C++, вероятность когда-либо портировать BCB-код на другие платформы была невелика. Смена языка разработки не была для Михи проблемой из-за схожести окружения. В то время Lazarus был основан на GTK для win32 и Linux. На Linux он работал очень хорошо, но в win32 это были сплошные баги. К тому же пользователи Lazarus всё чаще просили родной win32-интерфейс, и Миха впрягся в проект, чтобы помочь с реализацией win32-интерфейса.

Винсент Снейдерс (VincentSnijders) получил ссылку на Lazarus и FPC летом 1999 года, когда впервые попробовал Linux на своём компьютере, и столкнулся с необходимостью использовать ПО для математического моделирования, написанное на Delphi. Он включился в проект и убедился, что Lazarus запускается на Windows. После окончания университета в 2003 году он стал больше времени уделять Lazarus и начал отправлять свои патчи для проекта. Его основной целью было получить Lazarus для Windows, работающий так же хорошо, как Lazarus для Linux, а также сборки Lazarus.

ФелипеМонтейро де Карвалью (FelipeMonteirodeCarvalho) стал посматривать на Lazarus в 2005 году, когда была в ходу версия 0.9.6. Фелипе надеялся использовать Lazarus в качестве замены для Delphi, особенно на Linux. Он столкнулся с рядом проблем, когда впервые попытался использовать Lazarus, но так как он увидел огромный потенциал проекта, он решил продолжать работу с ним. Он считает, что его цель — создание полностью функциональный кросс-платформенной альтернативы Delphi для своих проектов — уже достигнута. Изначально Фелипе только отправлял отчёты по обнаруженным в Lazarus ошибкам и занимался документацией, однако позже он стал и сам писать код Lazarus. На протяжении многих лет он закладывал фундамент многочисленным интерфейсов, включая Qt 4, WinCE, fpGUI и Cocoa. Он добавил компонент TTrayIcon, биндингиPasCocoa и интерфейс Windows CE. Также он пишет статьи для ToolboxMagazine и является автором нескольких глав книги «Lazarus — TheCompleteGuide».

Павел Ишенин узнал о Lazarus во время работы с FastCube 1.0, в январе 2007 года. Он решил портироватьFastCube для FPC и Lazarus, и сделал свой первый порт. Процесс был довольно простым, но кое-что не получилось — в частности, курсор drag/drop. На том этапе реализации Lazarus поддержка работы с курсорами была далеко не полной. Павел начал экспериментировать с поддержкой курсоров, по крайней мере, для платформы Windows. Он использовал IRC-канал для обсуждения совместно с разработчиками Lazarus, и начал отправлять патчи Марку Вэстинку. К удивлению Павла, Марк не принял первый патч целиком, поскольку Павел не уделил должного внимания разделению кода между LCL и widgetset’ами. После того, как Павел реализовал поддержку курсоров для GTK, GTK2 и Carbon, а также сделал несколько патчей, ему предоставили право на запись изменений в svn. Позже Павел участвовал в развитии виджетсетов для GTK2, Qt и win32, а также в работе над IDE. Его основная цель — очистить от ошибок win32-часть LCL.

ЖелянРикало (ZeljanRikalo) начал вносить свой вклад в виджетсетQt в 2007 году, отправив патчиФелипе. Летом 2007 года он получил доступ на запись в svn. В настоящее время он работает над Qt, GTK2 и LCL.

Мартин Фрибе (MartinFriebe) начал свой вклад в Lazarus с очистки и рефакторинга кода SynEdit код. С тех пор он добавил много новых функций, таких как syncroedit. Позже он добавил многооконный интерфейс редактора исходного кода и значительно улучшил отладчик.

ЮхаМаннинен (JuhaManninen) присоединился к команде в 2009 году, начав с исправления ошибок, а затем стал руководить работой над конвертером из Delphi. После значительного улучшения в работе конвертера Юха занялся другими вопросами, в частности — исправлением ошибок и улучшениями в IDE.

Системы счисления

Система счисления (СС) - это система записи чисел с помощью определенного набора цифр.CС называется позиционной, если одна и та же цифра имеет различное значение, которое определяется ее местом в числе. Десятичная СС является позиционной: 999.Римская СС является непозиционной. Значение цифры Х в числе ХХІ остается неизменным при вариации ее положения в числе.Количество различных цифр, употребляемых в позиционной СС, называется основанием СС.

Развернутая форма числа - это запись, которая представляют собой сумму произведений цифр числа на значение позиций.

Например: 8527=8*103+5*102+2*101+7*100

Развернутая форма записи чисел произвольной системы счисления имеет вид

, где

X - число;
a - основа системыисчисления;
i - индекс;
m - количество разрядов числа дробной части;
n - количество разрядов числа целой части.

Например: 327.46 n=3, m=2, q=10

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

Например: если 10=А, а 11=В, то число 7А.5В12 можно расписать так:

7А.5В12 = В·12-2 + 5 ·2-1 +А ·120 + 7 ·121.

В шестнадцатеричной СС основа - это цифры 0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15 с соответствующими обозначениями 0,1,2,3,4,5,6,7,8,9,A,B,C,D,E,F. Примеры чисел: 17D.ECH, F12AH.

ДвоичнаяСС - это система, в которой для записи чисел используются две цифры 0 и 1. Основанием двоичной системы счисления является число 2.

Двоичный код числа - запись этого числа в двоичной системе счисления. Например,

0=02
1=12
2=102
3=112
7=1112
120=11110002.

В ВТ применяют позиционные СС с недесятичным основанием: двоичную, восьмеричную, шестнадцатеричную. Для обозначения используемой СС число снабжают верхним или нижним индексом, в котором записывают основание СС. Другой способ – использование латинских букв после записи числа:

D – десятичная СС
В – двоичная СС
О – восьмеричная СС
Н – 16-ричная СС.

Несмотря на то, что 10-тичная СС имеет широкое распространение, цифровые ЭВМ строятся на двоичных элементах, т.к. реализовать элементы с 10 четко различимыми состояниями сложно. Историческое развитие ВТ сложилось таким образом, что ЭВМ строятся на базе двоичных цифровых устройств: триггеров, регистров, счетчиков, логических элементов и т.д.

16-ричная и 8-ричная СС используются при составлении программ на языке машинных кодов для более короткой и удобной записи двоичных кодов – команд, данных, адресов и операндов.

Задача перевода из одной СС в другую часто встречается при программировании, особенно, на языке Ассемблера. Например, при определении адреса ячейки памяти. Отдельные стандартные процедуры языков программирования Паскаль, Бейсик, Си, HTML требуют задания параметров в 16-ричной СС. Для непосредственного редактирования данных, записанных на жесткий диск, также необходимо умение работать с 16-ричными числами. Отыскать неисправность в ЭВМ невозможно без представлений о двоичной СС.

В таблице приведены некоторые числа, представленные в различных СС.

Двоичные числа Восьмеричные числа Десятичные числа Шестнадцатеричные числа
       
       
       
       
       
       
       
       
       
       
      A
      B
      C
      D
      E
      F

ПЕРЕВОД ЧИСЕЛ ИЗ ПРОИЗВОЛЬНОЙ СС В ДЕСЯТИЧНУЮ И ОБРАТНО.

Перевод чисел из произвольной системы в десятичную. Для перевода числа из любой позиционной СС в десятичную необходимо использовать развернутую форму числа, заменяя, если это необходимо, буквенные обозначения соответствующими цифрами. Например:

11012=1*23+1*22+0*21+1*20=1310

17D.ECH=12·16-2 + 14·16-1 +13·160 + 7·161 + 1·162=381.921875

Перевод чисел из десятичной СС в заданную.

1) Для преобразования целых чисел десятичной системы счисления в число любой системы счисления последовательно выполняют деление нацело на основание СС, пока не получат нуль. Числа, которые возникают как остаток от деления на основание СС, представляют собой последовательную запись разрядов числа в выбранной СС от младшего разряда к старшему. Поэтому для записи самого числа остатки от деления записывают в обратном порядке.

Например:

Читая остатки от деления снизу вверх, получим 111011011.

Проверка:

1*28+1*27+1*26+0*25+1*24+1*23+0*2 2+1*21+1*20= 1+2+8+16+64+128+256=47510

2) Для преобразования десятичных дробей десятичной СС в число любой СС последовательно выполняют умножение на основание системы счисления,пока дробная часть произведения не станет равной нулю. Полученные целые части являются разрядами числа в новой системе, и их необходимо представлять цифрами этой новой системы счисления. Целые части в дальнейшем отбрасываются.

Например: перевести число 0.375 10 в двоичную СС.

Полученный результат - 0.0112.

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


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: