• Как передать в аргумент функцию, и выполнить её, передаваю в неё параметры?

    @vanyamba-electronics
    Это можно сделать с помощью указателя на функцию.
    typedef void (*MyFuncPtr)(int);
    
    void myfunc(int p) {
        cout << p << endl;
    }
    
    void func_caller(MyFuncPtr pfunc, int p) {
        assert(pfunc != nullptr);
        pfunc(p);
    }
    
    int main() {
       func_caller(myfunc, 666);
       return 0;
    }
    Ответ написан
    Комментировать
  • Как получить случайные числа в C++?

    @vanyamba-electronics
    На другом компьютере набор чисел будет другим.
    Ответ написан
    Комментировать
  • Как сделать ввод через стандартный поток (stdin) и через файл?

    @vanyamba-electronics
    Переменная argc равна 1, если в массиве argv содержится только имя исполняемого файла (argv[0]).
    Ответ написан
    2 комментария
  • Какой элемент отсутствует?

    @vanyamba-electronics
    На схеме D1 - это 3.6V Zener.
    Ответ написан
    Комментировать
  • Есть ли ошибка в коде Ардуино (Ошыбка говорит: чтото не работает)?

    @vanyamba-electronics
    Попробуйте после клика кнопки Upload нажать кнопку Reset на плате. Возможно у вас плата не оборудована функцией auto reset. Такое бывает с китайскими клонами.
    Ответ написан
    Комментировать
  • Как мигать светодиодом без delay в setup()?

    @vanyamba-electronics
    Попробуйте изучить, как написать машину состояний.
    Ответ написан
    Комментировать
  • Нужен ли земляной полигон на плате 220v?

    @vanyamba-electronics
    Если вам требуется, чтобы 220 Вольт пробивало на эту "землю".
    Ответ написан
    Комментировать
  • Как написать итератор для цифр числа?

    @vanyamba-electronics
    Примерно так.
    #include <iostream>
    
    using namespace std;
    
    template <typename _T>
    class digitstream
    {
    protected:
        _T m_value;
    public:
        digitstream(const _T& val) :
            m_value(val)
        {
        }
        class const_iterator 
        {
        protected:
            _T m_value;
            unsigned int m_base;
            unsigned int m_pos;
        public:
            const_iterator(const _T& val, unsigned int base) :
                m_value(val),
                m_base(base)
            {
                m_pos = 0;
                if (m_base != 0) {
                    if (m_value < m_base)
                        return;
                    _T rest = m_value;
                    do {
                        rest = rest / m_base;
                        m_pos++;
                    }
                    while (rest >= m_base);
                }
            }
            const_iterator(const const_iterator& src) :
                m_value(src.m_value),
                m_base(src.m_base),
                m_pos(src.m_pos)
            {
            }
            char operator * () const {
                if (m_base != 0) {
                    _T rest = m_value;
                    for (int n = 0; n < m_pos; ++n)
                        rest = rest / m_base;
                    _T result = rest % m_base;
                    if (result > 9)
                        return 'A' + result - 10;
                    return '0' + result;
                }
                return '0';
            }
            const_iterator& operator ++() {
                --m_pos;
                return *this;
            }
            const_iterator& operator --() {
                ++m_pos;
                return *this;
            }
            bool operator ==(const const_iterator& cmp) const {
                if (cmp.m_value == 0 && cmp.m_base == 0 && m_pos == -1)
                    return true;
                return false;
            }
            bool operator !=(const const_iterator& cmp) const {
                return ! operator ==(cmp);
            }
        };
        const_iterator begin(unsigned int base) const {
            return const_iterator(m_value, base);
        }
        const_iterator end() const {
            return const_iterator(0, 0);
        }
        class reverse_iterator
        {
        protected:
            _T m_value;
            unsigned int m_base;
            unsigned int m_pos;
        public:
            reverse_iterator(const _T& val, unsigned int base) :
                m_value(val),
                m_base(base),
                m_pos(0)
            {
            }
            reverse_iterator(const reverse_iterator& src) :
                m_value(src.m_value),
                m_base(src.m_base),
                m_pos(src.m_pos)
            {
            }
            char operator * () const {
                if (m_base != 0) {
                    _T rest = m_value;
                    for (int n = 0; n < m_pos; ++n)
                        rest = rest / m_base;
                    _T result = rest % m_base;
                    if (result > 9)
                        return 'A' + result - 10;
                    return '0' + result;
                }
                return '0';
            }
            reverse_iterator& operator ++() {
                ++m_pos;
                return *this;
            }
            reverse_iterator& operator --() {
                --m_pos;
                return *this;
            }
            bool operator ==(const reverse_iterator& cmp) const {
                if (cmp.m_value == 0 && cmp.m_base == 0 && m_base != 0) {
                     _T rest = m_value;
                    for (int n = 0; n < m_pos; ++n)
                        rest = rest / m_base;
                    if (rest == 0)
                        return true;
                }
                return false;
            }
            bool operator !=(const reverse_iterator& cmp) const {
                return ! operator ==(cmp);
            }
        };
        reverse_iterator rbegin(unsigned int base) const {
            return reverse_iterator(m_value, base);
        }
        reverse_iterator rend() const {
            return reverse_iterator(0, 0);
        }
    };
    
    int main()
    {
        digitstream<int> ds(0xFADE372F);
        for (digitstream<int>::const_iterator it = ds.begin(16); it != ds.end(); ++it)
            cout << *it;
        cout << endl;
        for (digitstream<int>::reverse_iterator rit = ds.rbegin(16); rit != ds.rend(); ++rit)
            cout << *rit;
        cout << endl;
    
        return 0;
    }

    Ссылка на Online GDB.
    Ответ написан
    Комментировать
  • Arduino Analog Keypad 3x4, почему не правильно работает?

    @vanyamba-electronics
    byte key()
    {  
        int val = analogRead(A0);
        if (val < 480) return 99;
        if (val < 500) return 11;
        if (val < 525) return 0;
        if (val < 555) return 10;
        if (val < 585) return 9;
        if (val < 620) return 8;
        if (val < 660) return 7;
        if (val < 705) return 6;
        if (val < 760) return 5;
        if (val < 820) return 4;
        if (val < 890) return 3;
        if (val < 976) return 2;
        return 1;
    }
    Ответ написан
    Комментировать
  • Почему переменная постоянно растет, хотя я нигде не прописывал этого?

    @vanyamba-electronics
    Ну вот например у вас здесь опечатка:
    alarms[0].hour = 8;alarms[0].minute = 30; alarms[0].start = true;
        alarms[1].hour = 10;alarms[1].minute = 30; alarms[0].start = true;
        alarms[2].hour = 10;alarms[2].minute = 45; alarms[0].start = true;
        alarms[3].hour = 12;alarms[3].minute = 0; alarms[0].start = true;
        alarms[4].hour = 13;alarms[4].minute = 0; alarms[0].start = true;
        alarms[5].hour = 15;alarms[5].minute = 30; alarms[0].start = true;
        alarms[6].hour = 15;alarms[6].minute = 45; alarms[0].start = true;
        alarms[7].hour = 17;alarms[7].minute = 30; alarms[0].start = true;
        alarms[8].hour = 17;alarms[8].minute = 45; alarms[0].start = true;
        alarms[9].hour = 19;alarms[9].minute = 30; alarms[0].start = true;
        alarms[10].hour = 19;alarms[10].minute = 45; alarms[0].start = true;
        alarms[11].hour = 21;alarms[11].minute = 0; alarms[0].start = true;
        alarms[12].hour = 22;alarms[12].minute = 0; alarms[0].start = true;
        alarms[13].hour = 0;alarms[13].minute = 30; alarms[0].start = true;
        alarms[14].hour = 0;alarms[14].minute = 45; alarms[0].start = true;
        alarms[15].hour = 2;alarms[15].minute = 30; alarms[0].start = true;
        alarms[16].hour = 9;alarms[16].minute = 14; alarms[0].start = true;
    Ответ написан
    Комментировать
  • Почему не подсчитывается количество книг с тремя о в название?

    @vanyamba-electronics
    Потому что русские буквы - это Unicode. То есть два символа типа char.
    #include <iostream>
    #include <string>
    #include <algorithm>
    
    using namespace std;
    
    // Структура для представления книги
    struct Book {
        string author;
        string title;
        string publisher;
        int year;
        double cost;
    };
    
    int count_o(const string& title)
    {
        int oCount = 0;
        enum { NotO, PossiblyO } state = NotO;
        for (char ch : title) {
            switch (state) {
                case NotO:
                    if (ch == 0xFFFFFFD0)
                        state = PossiblyO;
                    break;
                case PossiblyO:
                    if (ch == 0xFFFFFFBE || ch == 0xFFFFFF9E) {
                        state = NotO;
                        oCount++;
                    }
                    break;
            }
        }
        return oCount;
    }
    
    int main() {
        setlocale(LC_ALL, "ru");
    
        const int size = 1; // Задайте нужный размер массива книг
        Book library[size];
    
        // Ввод информации по книгам
        for (int i = 0; i < size; ++i) {
            cout << "Введите автора книги " << i + 1 << ": ";
            getline(cin, library[i].author);
    
            cout << "Введите название книги " << i + 1 << ": ";
            getline(cin, library[i].title);
    
            cout << "Введите издательство книги " << i + 1 << ": ";
            getline(cin, library[i].publisher);
    
            cout << "Введите год издания книги " << i + 1 << ": ";
            cin >> library[i].year;
    
            cout << "Введите стоимость книги " << i + 1 << ": ";
            cin >> library[i].cost;
    
            cin.ignore(); // Очищаем буфер после ввода чисел
        }
    
        // Подсчитываем количество книг с тремя буквами 'о' в названии
        int countWithO = 0;
        for (int i = 0; i < size; ++i) {
            if (count_o(library[i].title) == 3) {
                countWithO++;
            }
        }
    
        // Создаем массив для книг с тремя буквами 'о' в названии
        Book* booksWithO = new Book[countWithO];
        int booksWithOCount = 0;
    
        // Переписываем информацию только о книгах с тремя буквами 'о' в названии
        for (int i = 0; i < size; ++i) {
            if (count_o(library[i].title) == 3) {
                booksWithO[booksWithOCount++] = library[i];
            }
        }
    
        // Сортируем массив книг с тремя буквами 'о' в названии по названию издательства
        for (int i = 0; i < booksWithOCount - 1; ++i) {
            for (int j = 0; j < booksWithOCount - i - 1; ++j) {
                if (booksWithO[j].publisher > booksWithO[j + 1].publisher) {
                    swap(booksWithO[j], booksWithO[j + 1]);
                }
            }
        }
    
        // Выводим информацию о книгах с тремя буквами 'о' в названии, отсортированную по названию издательства
        cout << "Информация о книгах с тремя буквами 'о' в названии, отсортированная по названию издательства:" << endl;
        for (int i = 0; i < booksWithOCount; ++i) {
            cout << "Автор: " << booksWithO[i].author << endl;
            cout << "Название: " << booksWithO[i].title << endl;
            cout << "Издательство: " << booksWithO[i].publisher << endl;
            cout << "Год издания: " << booksWithO[i].year << endl;
            cout << "Стоимость: " << booksWithO[i].cost << endl << endl;
        }
    
        delete[] booksWithO;
        return 0;
    }
    Ответ написан
    Комментировать
  • Как можно улучшить код?

    @vanyamba-electronics
    Я бы сделал так:
    #include <iostream>
    #include <string>
    #include <locale>
    
    using namespace std;
    
    string to_bin(int n)
    {
        enum { Plus, Minus } sign = Plus;
        if (n < 0) {
            sign = Minus;
            n = -n;
        }
        string result;
        unsigned int mask = 0x80000000;
        enum { Prefix, Value } state = Prefix;
        while (mask != 0 && state == Prefix) {
            if (n & mask) {
                result += '1';
                state = Value;
            }
            mask >>= 1;
        }
        while (mask != 0) {
            result += (n & mask) ? '1' : '0';
            mask >>= 1;
        }
        if (result.length() == 0)
            result = '0';
        if (sign == Minus)
            result = '-' + result;
        return result;
    }
    
    int main()
    {
        int n;
        setlocale(LC_ALL, "");
        cout << "Введите число:";
        cin >> n;
        cout << to_bin(n) << endl;
        return 0;
    }
    Ответ написан
  • Как запрограммировать таймер на ardruino UNO?

    @vanyamba-electronics
    Попробуйте исправить эти строки:
    check = check_h = 0;  // check, check_h = 0;
    m = h = 0;  // m, h = 0;
    t = check = check_h = 0; // t, check, check_h = 0;
    Ответ написан
    Комментировать
  • Как хранится c++ struct в памяти и как определить размер вручную?

    @vanyamba-electronics
    typedef struct {
    int a;
    char b;
    } Struct;
    
    Struct s1;
    cout << hex << &(s1.a) << endl;
    cout << &(s1.b) << dec << endl;
    Ответ написан
    Комментировать
  • Как в С++ проверить double на целочисленность?

    @vanyamba-electronics
    При обработке вещественных чисел следует определиться, которая точность вас устраивает в данном случае.
    В идеале 1.0 - это явно целочисленная дробь, но на практике возникает вопрос: а 0.99999999 - это достаточное приближение, чтобы принимать это число за 1.0?
    Поэтому функция должна иметь параметр точности:
    bool is_integer(double val, double precision = 0.000005)
    {
        return abs(val - round(val)) < precision;
    }
    Ответ написан
    2 комментария
  • Знает ли кто-то системную DLL, которая не фиксирует себя в памяти при загрузке?

    @vanyamba-electronics
    DLL выгружается из RAM автоматически, когда нет ни одного процесса, который её использует.
    user32.dll - это системная библиотека WIndows, которая загружается при загрузке Windows, и выгружается только после shutdown Windows.
    Ответ написан
  • Как получить длину пакета на arduino?

    @vanyamba-electronics
    uint16_t packetSize = sizeof(data);
    Ответ написан
    Комментировать
  • Почему не выводятся данные в консоль?

    @vanyamba-electronics
    cout << "Литров: " << liters << endl;
    Ответ написан
    1 комментарий
  • Как обновить размер массива после добавления нового элемента на arduino?

    @vanyamba-electronics
    int data3[5];
    for (uint8_t n = 0; n < 3; ++n)
       data3[n] = data1[n];
    for (uint8_t n = 0; n < 2; ++n)
        data3[n+3] = data2[n];
    Ответ написан