Skip to content

Latest commit

 

History

History

Currency

Folders and files

NameName
Last commit message
Last commit date

parent directory

..
 
 
 
 

Лабораторная работа 2: Использование внешних библиотек

На основании данных с сайта ЦБ РФ написать программу, которая раз в 10 секунд опрашивает данные о курсе валют и выводит текущие значения. По окончанию работы выводит среднее и медианное значение. В рамках работы Вам понадобятся:

  1. Данные от ЦБ. Публичное API (https://www.cbr-xml-daily.ru/#howto)
  2. Способ им воспользоваться из С++. Можно выбрать любую библиотеку, например libcurl
  3. Библиотека для работы с JSON. Можно выбрать любую, например эту

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

Реализация

Программа поддерживает следующие функционал:

  • Вывод определённых валют и обработка случаев, когда такого кода валюты нет (если длина не равна 3, то код и вовсе не рассматривается) ./main GBP EUR USD LOL WONTEVENCHECK
  • Изменение интервала запросов (по умолчанию 10 секунд) ./main --interval 10 или ./main -i 10
  • В процессе работы программа выводит всё в таблицу, которую она изменяет, вместо того чтобы каждый раз выводить на новой строке новые данные (с помощью спецсимволов ANSI)

Хранение курсов

Хранение курсов происходит в std::set, что позволяет экономить память, если как минимум половина значений будут дублироваться. Каждый элемент std::set занимает 8 байт: 4 байта на значение и 4 на счёт его появлений, оба uint32_t.

Пример тестового запуска:

Для демонстрации функционала при редко обновляющемся API, на 1 строчке есть #define DEBUG. Если он установлен в 1, то к каждому курсу будет добавляться или вычитаться до 10 рублей

clear
g++ -o main -std=c++17 -lcurl -I /usr/local/include/nlohmann/json.hpp main.cpp
./main -i 1 USD EUR GBP WTF
rm ./main

Адрес библиотеки nlohmann json может отличаться