Студопедия

Главная страница Случайная страница

Разделы сайта

АвтомобилиАстрономияБиологияГеографияДом и садДругие языкиДругоеИнформатикаИсторияКультураЛитератураЛогикаМатематикаМедицинаМеталлургияМеханикаОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРелигияРиторикаСоциологияСпортСтроительствоТехнологияТуризмФизикаФилософияФинансыХимияЧерчениеЭкологияЭкономикаЭлектроника






  • Сервис онлайн-записи на собственном Telegram-боте
    Тот, кто работает в сфере услуг, знает — без ведения записи клиентов никуда. Мало того, что нужно видеть свое расписание, но и напоминать клиентам о визитах тоже. Нашли самый бюджетный и оптимальный вариант: сервис VisitTime.
    Для новых пользователей первый месяц бесплатно.
    Чат-бот для мастеров и специалистов, который упрощает ведение записей:
    Сам записывает клиентов и напоминает им о визите;
    Персонализирует скидки, чаевые, кэшбэк и предоплаты;
    Увеличивает доходимость и помогает больше зарабатывать;
    Начать пользоваться сервисом
  • Преобразование символов в числа.






     

    Рассмотрим строку цифр длиной 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

     






    © 2023 :: MyLektsii.ru :: Мои Лекции
    Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав.
    Копирование текстов разрешено только с указанием индексируемой ссылки на источник.