• Стоит ли изучать алгоритмы в Python сейчас или можно потом?

    AgentSmith
    @AgentSmith
    Это мой правильный ответ на твой вопрос
    Без алгоритмов нет программиста. Есть только быдлокодеры.
    Я на собеседованиях всегда отшиваю тех, кто не знает алгоритмы и структуры данных
    Ответ написан
    5 комментариев
  • Как вычислить координату угла А прямоугольника?

    LoliDeveloper
    @LoliDeveloper
    Линейная алгебра как смысл жизни
    По моему
    Ax = Bx - length*cosC
    Ay = By - length*sinC
    Ax, Ay - координаты точки A
    C - угол
    length - расстояние от A до B
    Ответ написан
    1 комментарий
  • Как написать код для таблицы истинности функции на C++?

    Rsa97
    @Rsa97
    Для правильного вопроса надо знать половину ответа
    = - присваивание
    == - сравнение
    Ответ написан
  • Что делать, если появляется непонятная ошибка после запуска c++ кода?

    jcmvbkbc
    @jcmvbkbc
    "I'm here to consult you" © Dogbert
    Что делать, если появляется непонятная ошибка после запуска c++ кода?

    Пытаться понять её -- универсальный рецепт.

    это исходный код.
    thread my_thread1(&connecter);
    if(connfd == true)

    В этом месте две ошибки. Первая -- ты сравниваешь int connfd с bool true, а вторая -- ты делаешь это без уважения потоконебезопасным способом. Прямо скажем, у тебя тут гонка между main и connecter. Когда ты эту гонку исправишь, жизнь твоя, скорее всего, наладится. Непонятно, правда, зачем ты вызываешь accept в параллельном потоке вместо того, чтобы сделать это синхронно, прямо в main.
    Ответ написан
    Комментировать
  • Каким способом на плюсах можно скачать страницу сайта для чтения в оффлайн режиме?

    vabka
    @vabka
    Токсичный шарпист
    Тебе придётся:
    1. Сделать HTTP-запрос к хабру и получить html разметку
    2. Рекурсивно пройтись по html и css, загрузив все картинки и стили
    3. Сохранить все эти файлы, сохранив структуру. Попутно поменяв пути, чтобы браузер потом смотрел на локальные файлы, а не в интернет.

    С комментариями сложнее, так как они прогружаются динамически.

    Кмк, проще будет запустить полновесный браузер, пролистать всю страницу, раскрыв все ветки комментариев со спойлерами, и сделать печать в PDF.
    Ну и да, гораздо лучше с такой задачей справится какой-нибудь python или nodejs, вооружённые puppeteer или playwright
    Ответ написан
    2 комментария
  • Как из неизвестного числа находящегося в диапазоне вычесть, что бы получить минимальный неотрицательный остаток?

    @rPman
    Задача не ясна, что значит вычитать максимально много
    наиболее точное значение будет - само число

    если чтобы узнать число ты можешь только проводить эксперимент (т.е. у тебя черный ящик на вход которого подаешь число которое вычистается ящиком и он отвечает - ой нешмагло, сильно много вычло, то у тебя log от максимального значения числа попыток делением

    текущее число равно максимальное
    в цикле закидываешь его в черный ящик,
    - если смогло - уменьшаешь число на половину от значения между текущим и минимальным
    - если не смогло (число больше желаемого) то увеличиваешь число на половину значения между текущим и максимальным
    продолжать до тех пор пока разница между текущим значением и предыдущим не станет 1 (или точнее допустимой погрешности)
    Ответ написан
    Комментировать
  • Каким образом отобразить реализацию кольцевой очереди на основе массива?

    Rsa97
    @Rsa97
    Для правильного вопроса надо знать половину ответа
    Ответ написан
    Комментировать
  • Как повысить точность вещественного деления в среде C++?

    15432
    @15432
    Системный программист ^_^
    Может вы выводите на экран с точностью в 4 знака? У double явно побольше точность
    Ответ написан
    1 комментарий
  • Гипотеза Била - можете объяснить, почему парень не прав?

    vabka
    @vabka
    Токсичный шарпист
    Ну в общем то тут надо сначала понять, что за Гипотеза Била.

    Гипотеза Била — гипотеза в теории чисел, обобщение великой теоремы Ферма: если A^x+B^y=C^z где A,B,C,x,y,z принадлежат множеству натуральных чисел и x,y,z>2 то A,B,C имеют общий простой делитель.


    В данном случае выражение
    128^5+32^7=8^12
    данную гипотезу не нарушает - все эти числа имеют общий простой делитель "2"
    Ответ написан
  • Что означает *&?

    Nipheris
    @Nipheris Куратор тега C++
    делает тоже самое что и передача простого int по ссылке в функцию?

    Скорее всего вы не очень удачно выразились, поэтому попробую догадаться: да, передача ссылки на int, ссылки на float, ссылки на int* и ссылки на float** ничем принципиально не отличается. В обоих случаях вы получаете идентификатор, в кторый можно присваивать значение того типа, на которое у вас ссылка (т.е. int, float, указатель на int, указатель на указатель на float), и это значение попадёт в ту область памяти, которая была "завёрнута" в ссылку при вызове функции. Это может быть как обычная переменная, так и какой-нибудь разыменованный указатель.
    Ответ написан
    Комментировать
  • Как исправить ошибку E0304?

    jcmvbkbc
    @jcmvbkbc
    "I'm here to consult you" © Dogbert
    Не понимаю, откуда эта ошибка появляется


    Здесь написано, что create_huge_matrix принимает два аргумента, и второй имеет такой же тип, как тип элементов внутреннего вектора:
    template <typename T>
    void create_huge_matrix(std::vector<std::vector<T>>& matrix, T lowerLimit);


    а здесь первый аргумент типа std::vector<std::vector<double>>, а второй -- int:
    create_huge_matrix(matrix_s, 5);

    а здесь вообще только один аргумент:
    create_huge_matrix(matrix_p);
    Ответ написан
    Комментировать
  • Как описать перегрузку оператора умножения?

    jcmvbkbc
    @jcmvbkbc
    "I'm here to consult you" © Dogbert
    перегрузка оператора должна скалярно умножать два массива. Под этим подразумевается, например: массив1 - 3,2; массив2 - 5,1, скалярное умножение: 3*5 + 2*1 = 17

    LabArray operator* (const LabArray& other) {
          double sum = 0;
            for (int i = 0; i < size; ++i) {
              sum += Array[i] * other.Array[i];
            }
          return sum;
        }

    Если результатом должно быть число и возвращаешь ты double, то почему тип возвращаемого значения -- LabArray?
    Ответ написан
    Комментировать
  • Как решить задачу о распределении?

    Alexandroppolus
    @Alexandroppolus
    кодир
    Смотреть соотношение уже переданных заказов первой и второй службам. Если оно меньше 3/7, то передавать первой, иначе второй
    Ответ написан
    4 комментария
  • Как проверить введенное римское число на правильную запись?

    Rsa97
    @Rsa97
    Для правильного вопроса надо знать половину ответа
    Лень вспоминать C, держите вариант конечного автомата проверки римских цифр на JS.
    // Матрица переходов конечного автомата
    // -1 - допустимое конечное состояние
    // null - недопустимое состояние
    const dka = [
      [-1, 1, 5, 4, 10, 9, 15, 14], // 0
      [-1, 2, 5, 4, 10, 9, 15, 14], // 1
      [-1, 3, 5, 4, 10, 9, 15, 14], // 2
      [-1, null, 5, 4, 10, 9, 15, 14], // 3
      [-1, 8, 8, 7, null, null, null, null], // 4
      [-1, null, null, 6, 10, 9, 15, 14], // 5
      [-1, null, null, 7, 10, 9, 15, 14], // 6
      [-1, null, null, 8, 10, 9, 15, 14], // 7
      [-1, null, null, null, 10, 9, 15, 14], // 8
      [-1, null, null, 13, 13, 12, null, null], // 9
      [-1, null, null, null, null, 11, 15, 14], // 10
      [-1, null, null, null, null, 12, 15, 14], // 11
      [-1, null, null, null, null, 13, 15, 14], // 12
      [-1, null, null, null, null, null, 15, 14], // 13
      [-1, null, null, null, null, 18, 18, 17], // 14
      [-1, null, null, null, null, null, null, 16], // 15
      [-1, null, null, null, null, null, null, 17], // 16
      [-1, null, null, null, null, null, null, 18], // 17
      [-1, null, null, null, null, null, null, null], // 18
    ];
    
    // Алфавит
    const alphabet = 'MDCLXVI';
    
    // Разбивает строку на лексемы
    // (номера символов в алфавите, начиная с 1)
    // для отсутствующих символов возвращает 0
    const lexer = (str) => str.split('').map((l) => alphabet.indexOf(l) + 1);
    
    // Проверяет корректность числа в римской записи
    const check = (str) => {
      const lexems = lexer(str);
      let state = 0;
      let idx = 0;
      while (true) {
        const lex = lexems[idx] ?? 0;
        state = dka[state][lex];
        if (state === null) {
          return false;
        }
        if (state === -1) {
          return  idx === str.length;
        }
        idx += 1;
      }
    }
    Ответ написан
    2 комментария
  • Как отсортировать произвольные точки так, чтобы при проведении линии через них последовательно получился многоугольник?

    Alexandroppolus
    @Alexandroppolus
    кодир
    Если надобно без самопересечений, то подойдет упрощенная версия алгоритма выпуклой оболочки - просто сортируешь по углу относительно самой левой точки, и всё.
    Ответ написан
    Комментировать
  • Как отключить определение функции через шаблоны?

    @MarkusD Куратор тега C++
    все время мелю чепуху :)
    Не так важно просто включить или выключить метод исходя из аргументов шаблона типа, как важно объяснить пользователю типа, почему там метод доступен, а тут - нет.

    Для начала стоит разобраться со SFINAE, ведь именно этот механизм позволяет "выключать" определения в коде при особых условиях.
    Провал вывода шаблона не должен приводить к ошибке трансляции кода. Это - тонкий механизм, который всегда балансирует на грани между трансляцией и ошибкой. Когда нужно выключить определение функции, для нее всегда нужно предоставить альтернативу при иных условиях.
    В этой связи очень важно разделять вывод шаблона самой матрицы и вывод шаблонов методов матрицы.
    Проваливаться должны именно попытки вывода шаблонов методов матрицы. В самом буквальном смысле, метод будет выключаться для неквадратной матрицы потому что его не удалось вывести из шаблона.

    И вот как это должно выглядеть в идеале.
    template< size_t ROWS, size_t COLUMNS >
    struct Matrix final
    {
    	template< size_t R = ROWS, size_t C = COLUMNS >
    	inline std::enable_if_t<R == C, int> GetDeterminant() const
    	{
    		return 0;
    	}
    };


    Важно гарантировать зависимость выражения SFINAE от параметров шаблона метода. Поэтому объявление шаблона выглядит именно так, а не как-то еще.

    Теперь, что будет если GetDeterminant не удалось вывести из шаблона? Будет ошибка трансляции, говорящая о том, что метод не найден. Это ничего не говорит пользователю. Это просто инструктирует транслятор остановить трансляцию. Пользователь, особенно если он не искушен знаниями о SFINAE, не сможет понять причину ошибки трансляции. Такая ситуация создаст риск излишней траты времени на дознание причин ошибки.
    Под конец выяснится что матрица просто не квадратная.
    Пользователю нужно объяснить причину отсутствия метода.

    Есть простой способ сделать это.
    template< size_t ROWS, size_t COLUMNS >
    struct Matrix final
    {
    	template< size_t R = ROWS, size_t C = COLUMNS >
    	inline std::enable_if_t<R != C, int> GetDeterminant() const = delete;
    
    	template< size_t R = ROWS, size_t C = COLUMNS >
    	inline std::enable_if_t<R == C, int> GetDeterminant() const
    	{
    		return 0;
    	}
    };


    Альтернативный путь вывода всегда должен быть. Его отсутствие или приведет к ошибке трансляции, или усложнит понимание для пользователя. В данном случае явно удаленный метод должен подтолкнуть пользователя к верной причине. Сообщение об ошибке будет говорить о том, что пользователь пытается использовать удаленный GetDeterminant.

    Но есть способ вообще уйти от всех этих усложнений и крайне доходчиво донести до пользователя суть его ошибки.
    Дело в том, что методы выведенного из шаблона типа выводятся по мере их использования. Если никто не брал детерминант матрицы, то и метод взятия детерминанта для нее выведен не будет.
    А если матрица не является квадратной, сама попытка вывода метода взятия детерминанта должна быть пресечена.

    И делается это крайне просто.
    template< size_t ROWS, size_t COLUMNS >
    struct Matrix final
    {
    	inline int GetDeterminant() const
    	{
    		static_assert( ROWS == COLUMNS, "Matrix should be square to calculate the determinant." );
    		return 0;
    	}
    };


    SFINAE в решении вопроса вообще не нужен. Он только больше усложнит конструкцию и будет запутывать.
    Достаточно простого статического утверждения с максимально детальным пояснением для пользователя.
    Для всех квадратных матриц метод детерминанта будет выведен без проблем. Для любой неквадратной матрицы вывод метода детерминанта провалится на проверке статического утверждения, а пользователь получит максимально конкретную причину провала.
    Ответ написан
    Комментировать
  • Как найти дробную часть частного от деления?

    hint000
    @hint000
    у админа три руки
    Читайте: https://ru.wikipedia.org/wiki/Деление_с_остатком
    Если после этого останутся вопросы - спрашивайте.

    о тегах к этому вопросу
    #дискретная-математика
    #высшая математика
    Какая к чёрту высшая математика? Это доступно для понимания в ~4-м классе средней школы.
    #криптография
    #математика
    Ответ написан
    5 комментариев
  • Рекурсия.По какой причине ответ всегда 0?

    Rsa97
    @Rsa97
    Для правильного вопроса надо знать половину ответа
    Учитесь писать красиво. Вместо нагромождения вложенных if/else используйте ранний выход из функции.
    float power(float X, int N) {
        if (N == 0) {
            return 1;
        }
        if (N < 0) {
            return 1. / power(X, -N);
        }
        if (N % 2 == 0) {
            float b = power(X, N / 2);
            return b * b;
        }
        return X * power(X, N - 1);
    }
    Ответ написан
    Комментировать
  • Как проверить, является ли файл PE? (то есть, .exe он или нет)?

    jcmvbkbc
    @jcmvbkbc
    "I'm here to consult you" © Dogbert
    не понимаю, чем в данном случае является szFile

    Судя по тому, как он используется, szFile -- указатель на буфер с содержимым файла. Почему такой странный выбор типа -- действительно непонятно, логично было бы использовать const void *.
    Ответ написан
    Комментировать
  • Как "забыть" переменную на c/c++?

    sergey-gornostaev
    @sergey-gornostaev Куратор тега C
    Седой и строгий
    Переменные прекращают существование после завершения блока, в котором объявлены. Соответственно, используйте маленькие функции, объявляйте переменные как можно ближе к месту их использования и компилятор обо всём позаботится сам.
    Ответ написан
    Комментировать