Задать вопрос
  • Как из 2 массивов сделать 3 в с++?

    BacCM
    @BacCM
    C++ почти с рождения
    Два варианта. Соединить и отсортировать итоговый.
    или
    Брать из каждого массива по элементу сравнивать между собой класть новый минимальный из них, а на место сравнения брать следующий.
    Не понятно причем тут С++? Реализуется одинаково почти на любом языке.
    Или нужен код?
    Ответ написан
    Комментировать
  • Полиморфизм на собеседовании?

    BacCM
    @BacCM
    C++ почти с рождения
    Есть формальные определения. Есть лозунговые как от Страуструпа. На адекватном собеседовании нужно показать понимание вопроса, а не зазубренные формулировки. В идеале подкрепить объяснение реальными примерами разного вида полиморфизма и примерами где без него вполне можно обойтись.
    Ответ написан
    Комментировать
  • Как сравнить и вывести сколько чисел в двух одномерных массивах равны [C / C++]?

    BacCM
    @BacCM
    C++ почти с рождения
    Самое простое и понятное два цикла вложенных друг в друга. Т.е. Берёшь нулевой элемент первого массива, сравниваешь с каждым элементом второго. Потом первый и т.д
    На c++ можно извратиться и записать это в одну конструкцию

    Побаловался от нечего делать
    inline int count_cpp()
    {
        return count_if(begin(a), end(a), [](int c) {static set<int> s(begin(b), end(b)); return  s.find(c) != s.end();});
    }
    
    
    inline int count_c()
    {
        int c = 0;
        for (int i = 0; i < N; ++i) {
            for (int j = 0; j < N; ++j) {
                if(a[i] == b[j]) {
                    ++ c;
                    break;
                }
            }
        }
        return c;
    }
    
    
    inline int count_map()
    {
        int c = 0;
        map<int, bool> bm;
        for (auto i : b) {
            bm[i] = true;
        }
        for (auto i : a) {
            if (bm.find(i) != bm.end()) {
                ++ c;
            }
        }
        return c;
    }


    Время выполнения для 10000 случайных элементов в диапазоне 0-10000

    [cpp method]      Time:   4006 us.
    [pure c method]   Time:   71019 us.
    [map method]     Time:   5178 us.
    Ответ написан
    Комментировать
  • Область генерации ПСЧ в С++?

    BacCM
    @BacCM
    C++ почти с рождения
    Я вижу два варианта:
    - генерировать число проверять не равно ли "3" или не находится ли в области "3" и перегенерировать по необходимости. всё это в цикле.
    -- подвариант первого варианта, сразу нагенерировать большую последовательность и N элементов, а когда оттуда будешь их брать пропускать невалидные, как кончилась или есть свободное время у процесса догенерить новых
    - и второй вариант. Случайно выбирать поддиапазон [1, 3) или (3,10], учитывая что они разного размера и уже в нём получать число.

    Второй вариант дает постоянное время работы, хотя и с большим средним.
    Ответ написан
    Комментировать
  • Как пробросить глобальные переменные между package?

    BacCM
    @BacCM
    C++ почти с рождения
    Всё что с заглавной буквы экспортируется из пакета.
    Больше ничего делать не надо.
    Ответ написан
  • Массивы char в c++?

    BacCM
    @BacCM
    C++ почти с рождения
    1. sizeof возвращает размер объекта, которым в данном случае является указатель, и у вас случайно совпало с длиной строки.
    2. массив таким образом в C++ создавать нельзя. Как уже написали выше.

    PS: можно конечно поизвращаться и написать константное вычисление строки на этапе компиляции.

    Например наподобии
    template <int L>
    constexpr size_t cstrlen(const char (&s)[L])
    {
    	return L ? L - 1 : 0;
    }


    Или:

    constexpr size_t cstrlen(const char* s)
    {
    	return *s ? 1 + cstrlen(s + 1) : 0;
    }


    Но в каких компиляторах такое может как-то не так выстрелить никто не скажет
    Ответ написан
  • Как правильно разделить Си проект на файлы?

    BacCM
    @BacCM
    C++ почти с рождения
    Ну как минимум использование перекрестных переменных уже нелогично. Лучше функциями это обернуть. Как бы инкапсулировать в модуль.
    Правильный способ это на бумаге нарисовать модули/объекты системы и обозначить как они взаимодействуют между собой и внешним миром. И уже исходя из этого разбивать. В идеале чем больше модуль похож на черный ящик тем лучше с точки зрения системности.
    Как лакмусовая бумажка может использоваться то, что из одного модуля вдруг надо копаться в кишках другого, или знать о том как там что-то реализовано.
    Как пример именно для Си - стандартная библиотека. Открываешь файл получаешь указатель на структуру FILE но тебе, абсолютно не важно какие там поля, создается она по malloc или заранее созданный объект из некоего массива таких объектов. Это уже скрыто реализацией. Есть функции которые работают с этим указателем и всё.
    Как плохой пример "не очень черного ящика" можно рассмотреть strtok строка которая передается на вход будет модифицироваться и портится, что может быть не очевидным из семантики. Но сделано в угоду скорости и использования памяти.
    Ответ написан
    2 комментария
  • Что происходит в процедуре? И почему минимум равен 256?

    BacCM
    @BacCM
    C++ почти с рождения
    Код лучше вставлять как код - удобнее читать.
    В процедуру передается массив. Где по индексам соответствующим кодам символов лежит некое число. Судя по контексту ранее посчитанное количество этих символов. Находим символ с минимальным числом вхождения и формируем выходную строку с сообщением об этом.
    Так как массив судя по всему символов, то и начальный min выбирается так чтобы любое значение в нем было меньше него.
    Ответ написан
    Комментировать
  • Подходит ли lua для разработки полноценной игры?

    BacCM
    @BacCM
    C++ почти с рождения
    LÖVE прикольная штука. Наверное уже нашел кучу примеров, того же Марио например.
    Под андроид удобно, прямо на планшете писал код и там же запускал.
    Ответ написан
    Комментировать
  • Как мне добавить в программный код вычисление степеней, процентов...?

    BacCM
    @BacCM
    C++ почти с рождения
    Очистка зависит от терминала. Обычно в linux это clear. В powershell тоже вроде

    system("clear");

    А операции так же введи новые значки операций типа ^ для степени или % для процентов, m для среднего и т.д. Для среднего прямо в case 'm': можешь добавить ввод дополнительных значений.
    Ответ написан
    Комментировать
  • Можно ли использовать переменные в функцие system?

    BacCM
    @BacCM
    C++ почти с рождения
    Как уже предлагалось выше:
    int main(void)
    {
    	int i = 1;
    	system(("echo $" + std::to_string(i)).c_str());
    	return 0;
    }


    Ну либо, если компилятор не знает таких новомодных штук как to_string
    то заменяется на itoa, sprintf, stringstream и т.д. по вкусу...

    А так действительно стоит почитать книжки умные.
    Ответ написан
    Комментировать
  • В чем ошибка в исходном коде, и есть ли она?

    BacCM
    @BacCM
    C++ почти с рождения
    Зависит от того как этот класс будет использоваться. Но потенциально ошибки есть:
    1. При копировании объекта класса, исходный объект и копия будут иметь одно и тоже значение hModule
    И если двойное освобождение может и прокатит относительно безболезненно, то вызов функции для освобожденного хендла уже нет.
    2. Исключение из конструктора. Тут ни к чему плохому не приведет, но потенциально при расширении функционала и как подход вообще - весьма плох
    3. То что поле класса потенциально может быть непроинициализировано, тоже понятно.
    Ответ написан
  • Как настроить callback на ф-ции?

    BacCM
    @BacCM
    C++ почти с рождения
    Кроме как переписать вызывающую функцию никак. А скорее всего кроме этого добавить еще одну вызывающую login.
    Ответ написан
    Комментировать
  • Проектирование добавления комментариев к абзацам текста?

    BacCM
    @BacCM
    C++ почти с рождения
    Вообще-то абзац принятая во многих местах единица текста. Может стоит об этом подумать?
    Ответ написан
  • Как реализовать циклический вычислительный процесс?

    BacCM
    @BacCM
    C++ почти с рождения
    Как уже говорили изменить условие цикла на i <= B
    и
    cout << "Сума чисел от а до b = " << sum << endl;
    вынести за пределы цикла
    Ответ написан
    Комментировать
  • Факторизация числа?

    BacCM
    @BacCM
    C++ почти с рождения
    4) проверять что максимальное значение используемого типа достаточно для хранения произведения.
    5) возможно лучше делить n на простые числа, нежели умножать их между собой - переполнения не будет
    Ответ написан
    2 комментария
  • Размер массива в C++?

    BacCM
    @BacCM
    C++ почти с рождения
    Что делать никто не написал. Хоть и очевидно, вставлю свои 3 копейки.
    Можно использовать new[], std::array, или std::vector, ну или перенастроить систему под больший стек
    Ответ написан
    Комментировать
  • Как узнать путь до исполняемого файла на с++ Mac OS?

    BacCM
    @BacCM
    C++ почти с рождения
    Ну самое простое и кроссплатформенное это взять первый параметр main - путь к исполняемой программе.
    Ответ написан
    Комментировать
  • Что не даёт на C++ писать кроссплатформенные приложения?

    BacCM
    @BacCM
    C++ почти с рождения
    Смотря на каком уровне нужна кросплатформенность. На уровне исходных кодов много пишут, для этого C кстати и разрабатывался изначально.
    На уровне скомпилированных программ это только если Managed C++ и иже с ним
    Ответ написан
    Комментировать
  • Как убрать декорацию функции?

    BacCM
    @BacCM
    C++ почти с рождения
    Не уверен что хорошая идея возвращать из библиотеки подобные вещи. Т.к. реализация контейнеров не фиксируется. Поэтому лучше обойтись более простыми типами, или более сложными типа интерфейсов енумераторов самописных или COM.

    Если библиотека линкуется статически и предполагается один компилятор то на декорацию стоит забить.
    Ответ написан
    Комментировать