Задать вопрос
Ответы пользователя по тегу Программирование
  • Нужно ли делать защиту при делении на ноль?

    wataru
    @wataru
    Разработчик на С++, экс-олимпиадник.
    Для облегчения отладки в будущем, стоит вставить assert какой-нибудь. Чтобы программа падала с понятной ошибкой, при попытке поделить на 0.
    Ответ написан
    Комментировать
  • На каком языке пишут программы, где есть счетчик сколько ты не курил и их достижения?

    wataru
    @wataru
    Разработчик на С++, экс-олимпиадник.
    Если надо с чатиком, то нужна какая-то серверная часть. Серверную часть можно написать и на python, например, используя фреймворк django, но php или java какие-нибудь могут быть популярнее. Плюс какие-то базы данных там наверняка понадобятся, так что надо знать SQL. Клиентскую часть надо писать на разных языках в зависимости от платформы.
    Если это веб-приложение, то нужны javascript, typescript или scala. Плюс надо использовать один из сотни фреймворков, иначе задолбаетесь все с нуля писать. Ну и html c CSS надо знать, для оформления страницы.
    Если это приложение для смартфонов, то java или C++ + немножко java на андроиде, objective-c или swift на айфонах.
    Если это для винды приложение, то можно С++, java или python.
    Ответ написан
    Комментировать
  • Нужна концепция, часто ли используете блок схемы скриптов и чем пользуетесь?

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

    wataru
    @wataru Куратор тега Математика
    Разработчик на С++, экс-олимпиадник.
    Алгоритм называется "обход в глубину на графе". Работает за линию, все очень быстро. Правда, его придется применить несколько раз.

    Все неравенства "==" замените на пару "<=" и ">=".
    Добавьте неравенства 1 < 2, 3 < 4 и т.д. для каждой пары соседних на числовой прямой чисел во входных данных

    Постройте граф: Каждой переменной и уникальному числу во входных данных сопоставьте одну вершину. Проведите для каждого неравнества ребро от меньшей вершины к большей, раскрашенное в 2 цвета: черный, если неравнество нестрогое (<=), белый - иначе.

    Теперь, если в этом графе нет циклов, содержащих белые ребра (строгие неравенства) - то противоречий нет: Все циклы целиком из черных ребер означают, что все вершины имеют одинаковое значение. Можно эти вершины все объединить в одну новую. Раз белые ребра (<) циклов не образуют, то получившийся граф будет ациклическим и можно назначить всем вершинам какие-то числовые значения, удовлетворяющие условиям. Проблема может еще быть, что нет целых решений вроде 1== a < b < c == 2, но это можно потом проверить в топологической сортировке жадно назначая всем вершинам числа. Или противоречия вида 2==3. Тоже решается после получения компонент связности.

    Итак, алгоритм: найдите в этом графе компоненты сильной связности. Потом проверьте все ребра. Если белое ребро (строгое неравнество) имеет оба конца в одной и той же компоненте - вы нашли противоречие.

    Теперь надо постараться назначить кадой компоненте числовое значение так, чтобы не было противоречий. Это можно делать жадно, назначая каждой компоненте минимально возможное значение.

    Пройдитесь по компонентам в топологическом порядке (они в таком виде уже будут получены алгоритмом выше). Если в компоненте есть вершина-число, то назначаете всей компоненте это значение. Если есть несколько вершин-чисел - то это противоречие. Также посмотрите все обратные ребра из всех вершин в компоненте. Если они ведут в другую компоненту, то обновите минимально возможное значение в данной компоненте как равное, или на 1 большее уже известного значения для второй компоненты (в зависимости от цвета ребра, т.е. строгости неравнества). Если получили, что это минимально возможное значение больше уже фиксированного за счет вершины-числа - то вы нашли противоречие.

    В конце вы получите для каждой компоненты ее численное значение без каких-либо противоречий.
    Ответ написан
    4 комментария
  • Как решить эту непонятную задачу про векторы на C#?

    wataru
    @wataru
    Разработчик на С++, экс-олимпиадник.
    Суть проста: У вас есть два набора из N чисел. Две строки чисел одинаковой длины, если хотите. Надо в каждом столбце (из двух элементов) наверх поставить максимальный, а вниз - минимальный.

    Для решения этой задачи надо уметь в массивы, циклы, условные операторы и уметь поменять местами два значения. Код тривиален: пройдитесь циклом от 0 до N-1 (ведь нумерация с 0) и, если элементы в заданном столбце идут не в том порядке, в каком должны, поменяйте их местами.

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

    wataru
    @wataru
    Разработчик на С++, экс-олимпиадник.
    В общем-то, все просто, если у вас нейронов штук 100. Ну 1000 - тогда решение с помощью массивов и сработает, хоть и тормозить будет.

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

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

    Плюс сложность возникает, если вы хотите строить нейросети более абстрактно. Потому что руками задавать, что вот у вас 10000 нейронов, и первый связан с пятым, триннадцатым и еще вот этими 1000 - невозможно никак. Поэтому вводятся всякие слои и куча других абстракций, чтобы все это можно было в кучу собрать в 100 строчек кода, а не в 100 миллионов. Плюс куча абстракций чтобы можно было тренировать сети разными алгоритмами и все было гибко.

    Именно поэтому все эти универсальные библиотеки такие страшные.

    А decimal не работает, потому что у него не хватает точности. Плюс float работает быстрее ибо реализован аппаратно.
    Ответ написан
    4 комментария
  • Как сделать масштабирование правильно?

    wataru
    @wataru
    Разработчик на С++, экс-олимпиадник.
    Считайте сдвиг так, чтобы точка в центре (или под курсором мыши) оставалась неподвижна.

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

    wataru
    @wataru Куратор тега Алгоритмы
    Разработчик на С++, экс-олимпиадник.
    Все такие вершины являются точками сочленения. Ведь, удалив такую вершину из графа больше не будет пути между двумя вершинами, а значит граф развалился на новые компоненты связности. Есть алгоритм на основе Dfs, который их ищет. Это все работает за O(V+E). Предложенный вами алгоритм с удалением по одной вершине вполне себе работает, но будет медленнее: O(V(V+E)). Для небольших графов может и подойдет.

    Потом надо найти путь между заданными вершинами и вывести в ответ точки сочленения. Лучше ищите путь тем же DFSом, что и ищите точки сочленения. Так путь будет идти по дереву DFS. Надо найти в нем LCA двух искомых точек (Пик пути, после которого он пойдет вниз в другую ветку).

    Важно, выводить надо не все точки сочленения, а только те, у которых из следующей вершины в пути, она же будет ребенком в дереве DFS, нельзя вернутся назад выше текущей точки сочленения. Т.е. точка назначена алгоритмом точкой сочленения из-за ребенка именно в сторону искомой вершины.
    Ответ написан
    Комментировать
  • Можно так сделать с interface?

    wataru
    @wataru Куратор тега C++
    Разработчик на С++, экс-олимпиадник.
    По уму, вам надо продумать ваш интерфейс. И тогда подобных извращений не понадобится. Дабавьте туда какой-нибудь способ для итерации по структуре данных для вывода. Или вообще сделайте метод ToString, который бы возвращал строковое представление внутренней структуры для вывода. Это все, естественно, виртуальные публичные методы, переопределенные в двух реализациях.

    То же и со вводом. Если надо как-то во внутренности очереди залезать и обычными push это не сделать, то, например, передавайте в метод CreateFromData() вектор введенных пользователем значений.
    Ответ написан
    Комментировать
  • Почему скалярное произведение не нормализованных и коллинеарных векторов разное при изменении их точек?

    wataru
    @wataru Куратор тега Математика
    Разработчик на С++, экс-олимпиадник.
    Ну, скалярное произведение вектора самого на себя - даст квадрат его длины по определению (|a|*|a|*cos(0)). Если менять точки - меняется длина вектора - меняется скалярное произведение.
    Ответ написан
    Комментировать
  • Как решить ошибку Unhandled exception. System.IndexOutOfRangeException: Index was outside the bounds of the array?

    wataru
    @wataru
    Разработчик на С++, экс-олимпиадник.
    Переведите текст ошибки на русский. У вас выход за границу массива. Запустите код в отладчике - он остановится в том месте, где это происходит.

    Возможно файл map.txt лежит не там, программа его не находит и не может его прочитать. Получается пустой массив file, но в функции GetMaxLengthOfLine идет обращение к 0-вому элементу, а его нет.

    Или строки в файле разной длины, тогда при присваивании map[x, y] = file[y][x]; идет выход за границу массива file[y] в не самой длинной строке. Ведь x проходится до длины самой длинной строки.
    Ответ написан
    1 комментарий
  • Дано натуральное число N. Определить количество ифр в цифровой записи данного числа,которые имеют наибольшее значение?

    wataru
    @wataru
    Разработчик на С++, экс-олимпиадник.
    Сначала получите цифровую запись числа (подсказка: деление на 10 с остатком даст вам последнюю цифру и число без этой цифры).

    Далее, поскольку в задаче идет разговор о количестве цифр, вам надо подсчитать, сколько раз каждая цифра встречается. Получите массив из 10 счетчиков.

    Ну и потом просто найдите максимальное число в этом массиве.
    Ответ написан
    Комментировать
  • Как быть когда сущность из одного модуля требуется в другом модуле?

    wataru
    @wataru
    Разработчик на С++, экс-олимпиадник.
    Или клиент может использовать бухгалтерию и запрос оттуда, или наоборот. Но может быть лучше выделить запрос в отдельный модуль, который используют два упомянутых.
    Ответ написан
    Комментировать
  • В чём отличие хэш-таблицы от словаря и ассоциативного массива в C#?

    wataru
    @wataru
    Разработчик на С++, экс-олимпиадник.
    Словарь и ассоциативный массив - это синонимы. Хеш-таблица - это вариант реализации словарей.
    Ответ написан
    2 комментария
  • Существует такое понятие, как "Ассоциативный список"?

    wataru
    @wataru
    Разработчик на С++, экс-олимпиадник.
    Я бы это назвал списком режимов. Ассоциативный список - это что-то самопротиворечивое. У вас же просто список пар значений.
    Ответ написан
    Комментировать
  • Необходимо получить RGB цвет пикселя который находится на кординатах x и y?

    wataru
    @wataru
    Разработчик на С++, экс-олимпиадник.
    Чтобы получить значение пикселя с экрана, воспользуйтесь модулем pyautogui, например.

    Затем пользуясь image из модуля Pillow можно получить конкретный пиксель.

    В этом же pyautogui можно симулировать клики мышью. Читайте документацию.
    Ответ написан
    Комментировать
  • Как работает алгоритм перебора перестановок (рекурсия)?

    wataru
    @wataru Куратор тега Алгоритмы
    Разработчик на С++, экс-олимпиадник.
    Перебирается число, которого еще нет в массиве. Ставится на следеющее место и рекурсивно запускается для каждого варианта.
    Ответ написан
    Комментировать
  • Как реализованы программы записи экрана и стриминга?

    wataru
    @wataru
    Разработчик на С++, экс-олимпиадник.
    Используются системные api. Все полатформо зависимое, к сожалению. На винде можно делать через кучу разных апи: gdi+, dxgi, wgc. Гуглите "слово из списка capture screen".

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

    Если же вам хочется сделать все свое (включая бакенд) то можно воспользоваться библиотекой webrtc.
    Ответ написан
    Комментировать
  • Можно ли использовать библиотеки для одного языка в другом?

    wataru
    @wataru
    Разработчик на С++, экс-олимпиадник.
    Можно. Гуглите, что такое ABI.
    Ответ написан
    Комментировать
  • Засчитаются ли баллы за задачу на всош?

    wataru
    @wataru
    Разработчик на С++, экс-олимпиадник.
    Обычно там в условии расписывают. Что-то вроде: при работе для n до 1000, получите 20 баллов; при работе для n до 100000 - 60; при работе для n до 10^9 - 100 баллов.

    Если в условии не расписано, то не факт.
    Но обычно всегда какое-то количество баллов можно набрать даже самым медленным наивным решением.
    Ответ написан
    1 комментарий