Форум программистов, компьютерный форум CyberForum.ru

Задачи для тренировки и лучшего понимания - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Теория плагинов http://www.cyberforum.ru/cpp/thread123914.html
Всем привет. Для одной моей проги, нужно реализовать поддержку плагинов. Плагины предполагаются простенькие, написанные на Си. То, что плагин, это просто .so файл - понятно. То, что прога может дергать из .so файла функции - тоже понятно. 1. Непонятно то, как сам плагин сможет дергать функции из программы? 2. Программа написана на С++, но плагины предполагаю писать на Си, во избежания...
C++ ./massdown: /usr/lib/libstdc++.so.6: version `GLIBCXX_3.4.11' not found (required by ./massdown) всем хай! собираю свою программу на новом железе х86_64 долго не получалось скомпилить. при линковке получал вот такое сообщение: relocation R_X86_64_32 against `a local symbol' я так понял, это из-за того что часть библиотек от которых зависит цель, были собраны как 32-ух битные. но с этим вроде все нормально, пересобрал все либы - скомпилировалось. теперь при запуске получаю такое... http://www.cyberforum.ru/cpp/thread98890.html
Как понять этот константный указатель? C++
В общем, имеется класс Cat. Объект класса - SimpleCat. И имеется функция с константым указателем: const SimpleCat* const FunctionTwo(const SimpleCat* const theCat) Что обозначают все эти const? Насколько я понимаю: 1. Константный указатель. 2. Может ссылаться только на FunctionTwo 3. Ничего не изменяет в объекте. 4. Ничего не делает с объектом theCat.
C++ Перехват и подмена вызываемых функций
Здравствуйте. Нужно подменить вызов таких функций как open(), lstat(), stat(), read(), write(), mkdir(), chdir(), getcwd() для определенного процесса. Интересует мнение других. Как бы вы реализовали эту задачу. Спасибо!

Показать сообщение отдельно
onspeed
2 / 2 / 0
Регистрация: 22.07.2010
Сообщений: 29
04.08.2010, 15:14     Задачи для тренировки и лучшего понимания
Вот интересная штука.
Код
   ПОРЯДОК РАСЧЕТА И ПРОВЕРКИ
                   КОНТРОЛЬНОГО КЛЮЧА В НОМЕРЕ ЛИЦЕВОГО СЧЕТА

          В соответствии с принятой структурой номера лицевого  счета  Банк
     России разъясняет порядок расчета контрольного ключа.

          1. Номер  лицевого счета должен включать в себя контрольный ключ,
     обеспечивающий возможность проверки правильности номера лицевого счета
     при автоматизированной обработке документов.
          2. Для  расчета  контрольного  ключа  в  номере  лицевого   счета
     используется  совокупность двух реквизитов - условного номера РКЦ (или
     кредитной организации) и номера лицевого счета.


                                   1-ый разряд кода валюты
                                ---------------------------
                                │         контрольный ключ
                                │        ------------------
                                │        │
          А Б В    Г Д Е Ж З    И К Л    М    Н О П Р    С Т У Ф Х Ц Ш
          --T--    -------------------T-------------------------------
            │                         │
            │                         │   Номер лицевого счета
            │                         L------------------------
            │
            │ Условный номер РКЦ или кредитной организации
            L----------------------------------------------


          3. Значение условного номера РКЦ соответствует  разрядам  5  и  6
     девятизначного  банковского  идентификационного  кода (БИК);  условный
     номер РКЦ дополняется слева нулем до трех разрядов.
          4. Значение  условного номера кредитной организации соответствует
     разрядам 7, 8 и 9 БИК.
          5. Контрольный   ключ   рассчитывается  на  основе  приписываемых
     каждому разряду весовых коэффициентов:

          А Б В    Г Д Е Ж З    И К Л    М    Н О П Р    С Т У Ф Х Ц Ш
          ------------------------------------------------------------
          7 1 3    7 1 3 7 1    3 7 1    3    7 1 3 7    1 3 7 1 3 7 1

          6. В случае  использования  в  номере  счета  алфавитно-цифрового
     значения  кода  клиринговой  валюты  первый  разряд  этого  кода  (И),
     заданный алфавитным значением,  заменяется на соответствующую цифру:
     А- 0, В - 1,  С - 2,  Е - 3, Н - 4, К - 5, М - 6, Р - 7, Т - 8, Х - 9.
     Любая другая буква в данном разряде является ошибкой.  В качестве букв
     могут   использоваться  символы  кириллицы  и  соответствующие  им  по
     написанию латинские буквы,  которые могут набираться как  на  верхнем,
     так   и  на  нижнем  регистре.  7.  На  основе  весовых  коэффициентов
     рассчитывается сумма произведений отдельных разрядов на  свой  весовой
     коэффициент  без учета контрольного ключа,  который принимается равным
     нулю ( М=0 ):

         А * 7 + Б * 1 + В * 3 + Г * 7 + Д * 1 + Е * 3 + Ж * 7 + З * 1 +
         И * 3 + К  * 7 +   Л * 1 + 0 * 3 + Н * 7 + О * 1 + П * 3 + Р * 7 +
         С * 1 + Т * 3 + У * 7 +  Ф * 1 + Х * 3 + Ц * 7 + Ш * 1

          8. Младший   разряд   полученной   суммы  умножается  на  весовой
     коэффициент контрольного ключа (т.е. на 3).
          9. Младший разряд полученного произведения принимается в качестве
     значения контрольного ключа.

          Примеры расчета контрольного ключа

          1. Пример расчета контрольного  ключа  в  лицевом  счете  клиента
     кредитной организации, сформированного с использованием цифрового кода
     валюты

           Условный номер кредитной организации                 7 4 6
           Весовые коэффициенты соответствующих разрядов        7 1 3

           Номер лицевого счета с нулевым значением
        контрольного ключа                        30101 002 0  0000 3100000
        Весовые коэффициенты                      71371 371 3  7137 1371371

          Рассчитывается сумма  произведений  отдельных  разрядов  на  свой
     весовой коэффициент без учета контрольного ключа (М=0)

           7 * 7 + 4 * 1 + 6 * 3 + 3 * 7 + 0 * 1 + 1 * 3 + 0 * 7 + 1 * 1 +
           0 * 3 + 0 * 7 + 2 * 1 + 0 * 3 + 0 * 7 + 0 * 1 + 0 * 3 + 0 * 7 +
           3 * 1 + 1 * 3 + 0 * 7 + 0 * 1 + 0 * 3 + 0 * 7 + 0 * 1 = 104

          Младший разряд равен 4. Умножая его на 3, получаем 4 * 3=12.
          Младший разряд  полученного  произведения  (2)  и  будет являться
     значением контрольного ключа.  В результате номер лицевого счета будет
     равен 30101 002 2 0000 3100000.

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

           7 * 7 + 4 * 1 + 6 * 3 + 3 * 7 + 0 * 1 + 1 * 3 + 0 * 7 + 1 * 1 +
           0 * 3 + 0 * 7 + 2 * 1 + 2 * 3 + 0 * 7 + 0 * 1 + 0 * 3 + 0 * 7 +
           3 * 1 + 1 * 3 + 0 * 7 + 0 * 1 + 0 * 3 + 0 * 7 + 0 * 1 = 110

          В результате получилось число,  кратное 10 (младший разряд  равен
     0), что подтверждает правильность расчета.


          2. Пример расчета контрольного ключа в лицевом счете клиента РКЦ,
     сформированного с использованием алфавитно-цифрового кода валюты

            Условный номер РКЦ                                    0 0 5
            Весовые коэффициенты соответствующих разрядов         7 1 3

          Номер лицевого счета с нулевым значением
          контрольного ключа                 30101 В84 0  0000 2900000

          Заменяем букву В соответствующей ей цифрой (1) и получаем:

          Номер лицевого счета  с преобразованным
          значением первого разряда кода валюты  30101 184  0  0000 2900000
          Весовые коэффициенты                   71371 371  3  7137 1371371

          Рассчитываем сумму  произведений  отдельных  разрядов   на   свой
     весовой коэффициент без учета контрольного ключа (М=0)

       0 * 7 + 0 * 1 + 5 * 3 + 3 * 7 + 0 * 1 + 1 * 3 + 0 * 7 + 1 * 1 +
       1 * 3 + 8 * 7 + 4 * 1 + 0 * 3 + 0 * 7 + 0 * 1 + 0 * 3 + 0 * 7 + 2 *
       1 + 9 * 3 + 0 * 7 + 0 * 1 + 0 * 3 + 0 * 7 + 0 * 1 = 132

          Младший разряд равен 2. Умножая его на 3, получаем 2 * 3=6.
          Младший разряд полученного  произведения  (6)  и  будет  являться
     значением  контрольного  ключа.  В  результате  номер лицевого счета с
     учетом представления первого разряда исходного кода клиринговой валюты
     в виде цифры будет равен

                            30101 184 6 0000 2900000

          Правильность расчета  контрольного ключа проверяется обязательным
     повторным расчетом  суммы  произведений  разрядов  на  приписанные  им
     весовые коэффициенты с учетом полученного значения контрольного ключа:

           0 * 7 + 0 * 1 + 5 * 3 + 3 * 7 + 0 * 1 + 1 * 3 + 0 * 7 + 1 * 1 +
           1 * 3 + 8 * 7 + 4 * 1 + 6 * 3 + 0 * 7 + 0 * 1 + 0 * 3 + 0 * 7 +
           2 * 1 + 9 * 3 + 0 * 7 + 0 * 1 + 0 * 3 + 0 * 7 + 0 * 1 = 150

          В результате  получилось число,  кратное 10 (младший разряд равен
     0),  что подтверждает правильность расчета.  Таким образом,  с  учетом
     первоначального  значения кода клиринговой валюты номер лицевого счета
     будет равен

                            30101_В84_6_0000_2900000.
Вот. На си написать программу для вычисления этого самого Ключа.
Если хотите могу дать пример на вижуалбейсике
 
Текущее время: 22:17. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru