русс | укр

Языки программирования

ПаскальСиАссемблерJavaMatlabPhpHtmlJavaScriptCSSC#DelphiТурбо Пролог

Компьютерные сетиСистемное программное обеспечениеИнформационные технологииПрограммирование

Все о программировании


Linux Unix Алгоритмические языки Аналоговые и гибридные вычислительные устройства Архитектура микроконтроллеров Введение в разработку распределенных информационных систем Введение в численные методы Дискретная математика Информационное обслуживание пользователей Информация и моделирование в управлении производством Компьютерная графика Математическое и компьютерное моделирование Моделирование Нейрокомпьютеры Проектирование программ диагностики компьютерных систем и сетей Проектирование системных программ Системы счисления Теория статистики Теория оптимизации Уроки AutoCAD 3D Уроки базы данных Access Уроки Orcad Цифровые автоматы Шпаргалки по компьютеру Шпаргалки по программированию Экспертные системы Элементы теории информации

Преобразование символов в числа.


Дата добавления: 2014-05-03; просмотров: 1096; Нарушение авторских прав


 

Рассмотрим строку цифр длиной N:

c1, c2, …, cN-1, cN

Соответствие между строкой и числом, которое она представляет, задается формулой:

где B – основание системы исчисления, а c – численное значение i-го символа в строке.

 

Для числа 0101 получаем следующие десятичные значения в выбранных системах исчисления:

01012 = 0x23 + 1x22 + 0x21+1x20 = 0 + 4 + 0 + 1 = 510

01018 = 0x83 + 1x82 + 0x81+1x80 = 0 + 64 + 0 + 1 = 6510

010110 = 0x103 + 1x102 + 0x101+1x100 = 0 +100 + 0 + 1 = 10110

010116 = 0x163 + 1x162 + 0x161+1x160 x= 0 + 256 + 0 + 1 = 25710

Цифры систем счисления больше 10 обычно представляются буквами, например цифры шестнадцатиричной системы исчисления следующие:

0, 1, 2, 3, 4, 5, 6, 7, 8, 9, A, B, C, D, E, F

Лучшая стратегия поиска десятичного значения выражения в системе исчисления с основанием B:

c1 x BN-1 + c2 x BN-2 + … + cN x B0

умножать его, используя правило Хорнера (Horner’s rule)

(…(c1 x B + c2) x B + c3) … x B + cN

Процедура StringToInt преобразовывает строки символов в системе счисления представленной Base в целочисленные значения в Result, используя правило Хорнера.

 

DP 1

PROCEDURE StringToInt (VAR F: TEXT; VAR Base, Result: INTEGER);

{F=<,x#y, R>, где x – строка цифр, Base – целое число,

2 <= Base <= 16, задающее их систему исчисления -->

F, Result := <x#, y, R>, N(x), где N – целое значение,

имеющее символьное представление x}

VAR<

Ch: CHAR;

Digit: INTEGER;

BEGIN {StringToInt}

Result := 0;

READ(F, Ch);

WRITE(Ch);

WHILE(Ch <> ‘#’) AND (Ch <> ‘ ’)

DO

BEGIN

{Digit := число, соотвествующее Ch в Base}

Result := Result * Base + Digit;

READ(F, Ch);

WRITE(Ch)

END

END. {StringToInt}

 

Код для нахождения целого, соответствующего Ch простой, но длинный, поэтому он оформлен в виде процедуры.



 

DP 1.1.

PROCEDURE CharToDigit (VAR Ch: CHAR; VAR Result: INTEGER);

{(‘0’ <= Ch <= ‘9’ OR ‘A’ <= Ch <= ‘F’ -->

Result := число соответствующее Ch ) |

(NOT (‘0’ <= Ch <= ‘9’ OR ‘A’ <= Ch <= ‘F’) -->

Result := 0)}

BEGIN { CharToDigit}

IF Ch = ‘0’ THEN Result := 0 ELSE

IF Ch = ‘1’ THEN Result := 1 ELSE

IF Ch = ‘2’ THEN Result := 2 ELSE

IF Ch = ‘3’ THEN Result := 3 ELSE

IF Ch = ‘4’ THEN Result := 4 ELSE

IF Ch = ‘5’ THEN Result := 5 ELSE

IF Ch = ‘6’ THEN Result := 6 ELSE

IF Ch = ‘7’ THEN Result := 7 ELSE

IF Ch = ‘8’ THEN Result := 8 ELSE

IF Ch = ‘9’ THEN Result := 9 ELSE

IF Ch = ‘A’ THEN Result := 10 ELSE

IF Ch = ‘B’ THEN Result := 11 ELSE

IF Ch = ‘C’ THEN Result := 12 ELSE

IF Ch = ‘D’ THEN Result := 13 ELSE

IF Ch = ‘E’ THEN Result := 14 ELSE

IF Ch = ‘F’ THEN Result := 15

ELSE

BEGIN

Result := 0

END

END. { CharToDigit}

 

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

 

PROGRAM Convert (INPUT, OUTPUT);

VAR

Base, Number: INTEGER;

{Включить PROCEDURE StringToInt

(VAR F: TEXT; VAR Base, Result: INTEGER);

F=<,x#y, R>, где x – строка цифр, Base – целое число,

2 <= Base <= 16, задающее их систему исчисления -->

F, Result := <x#, y, R>, N(x), где N – целое значение,

имеющее символьное представление x}

BEGIN {Convert}

READ(Base);

StringToInt(INPUT, Base, Number);

WRITELN;

WRITELN(‘Десятичное значение:’, Number)

END. {Convert}

 

Выполнение:

INPUT: 8 0101#

OUTPUT: 8 0101#

Десятичное значение: 65

 

INPUT: 16 1F#

OUTPUT: 16 1F#

Десятичное значение: 31

 



<== предыдущая лекция | следующая лекция ==>
Переполнение. | Тип диапазон.


Карта сайта Карта сайта укр


Уроки php mysql Программирование

Онлайн система счисления Калькулятор онлайн обычный Инженерный калькулятор онлайн Замена русских букв на английские для вебмастеров Замена русских букв на английские

Аппаратное и программное обеспечение Графика и компьютерная сфера Интегрированная геоинформационная система Интернет Компьютер Комплектующие компьютера Лекции Методы и средства измерений неэлектрических величин Обслуживание компьютерных и периферийных устройств Операционные системы Параллельное программирование Проектирование электронных средств Периферийные устройства Полезные ресурсы для программистов Программы для программистов Статьи для программистов Cтруктура и организация данных


 


Не нашли то, что искали? Google вам в помощь!

 
 

© life-prog.ru При использовании материалов прямая ссылка на сайт обязательна.

Генерация страницы за: 0.09 сек.