• C++ как использовать функции winAPI?

    wataru
    @wataru Куратор тега C++
    Разработчик на С++, экс-олимпиадник.
    Вот это GetModuleHandle, например: Вводите в гугле "GetModuleHandle win32". Получаете ссылку вот сюда.

    Там прямо в заголовке написано libloaderapi.h
    Значит, вам надо делать #include "libloaderapi.h"

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

    Этот заголовочный файл является частью windows sdk.

    Как вызвать - смотрите в той же документации, какие параметры функция принимает. Или гуглите "GetModuleHandle example".
    Ответ написан
  • Где ошибка в задачке с возможными ходами ферзя?

    wataru
    @wataru Куратор тега Алгоритмы
    Разработчик на С++, экс-олимпиадник.
    int(A[i][j]) == 70). Блин. А A[i][j] == 'F' написать религия не позволяет?

    А ошибка в том, что у вас в циклах, которые по диагонали знаки ставят, условие выхода некорректное.
    У вас там <= 8, когда как индексы в матрице от 0 до 7. И при координате равной 8 вы пишите в какую-то левую память. Иногда совпадает, что это начало следующей строки. Иногда вы можете перезаписывать какую-то другую переменную. Вообще, программа может и упасть с ошибкой.
    Ответ написан
    2 комментария
  • Как вычислить количество шагов для вычисления чисел Фибоначчи?

    wataru
    @wataru Куратор тега Алгоритмы
    Разработчик на С++, экс-олимпиадник.
    Составьте рекурентное соотношение. Пусть S(k) - сколько шагов надо для вычисления k-ого числа.
    Это будет 1 шаг (сумма в конце), плюс сколько надо шагов, чтобы подсчитать слагаемые. Т.е.:
    S(k) = S(k-1) + S(k-2) + 1
    И известно, что S(1) = S(2) = 0

    Уже можно это все подсчитать, как если бы вы числа фиббоначи считали. Хоть рекурсивно, хоть циклом (что, конечно, быстрее).

    Но можно добавить в обе стороны урванения +1 и сгрупировать слагаемые аккуратно:
    S(k)+1 = S(k-1)+1 + S(k-2)+1

    Тогда, если обозначить G(k) = S(k)+1, то получится:
    G(k) = G(k-1) + G(k-2) и G(1) = G(2) = 1

    Т.е. ответом будет предыдущее число фиббоначи минус один (нам же S(k) = G(k)-1 надо. Плюс, у вас числа с 1,2 начинаются, а тут с 1,1).
    Принципиально от вычислений выше не отличается, но наблюдение интересное.
    Ответ написан
    Комментировать
  • Как быть когда сущность из одного модуля требуется в другом модуле?

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

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

    Надо отдельно обработать случай y == y1
    Ответ написан
    Комментировать
  • Как сделать факториал деление?

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

    Вычислили 1/2. Это просто. Потом 1/(1+1/2). Это тоже просто, ведь 1/2 у вас уже есть. Потом вычислите 1/(2+(1/(1+1/2)). Последняя часть уже вычислена. Если ее обозначить за X, то вам надо подсчтитать 1/(2+X).

    Фактически у вас будет цикл на n итераций, и внутри вы будете пересчитывать этот самый X по формуле вроде X = 1/(n-i + X). Аккуратно посмотрите, может надо там +-1 куда-то вставить рядом с i.
    Ответ написан
    3 комментария
  • Как в php сравнить два огромных txt файла до 100гб, удалив дубликаты?

    wataru
    @wataru
    Разработчик на С++, экс-олимпиадник.
    Файлы надо отсортировать. А потом это стандартная задача слияния отсортированных списков (читаете по одной строке из файла, меньшую по алфавитному порядку записываете в ответ, читаете из ее файла следующую строку. Если 2 строки одинаковые - читайте следующую строку в каждом файле. Если файл закончился, считайте что там бесконечно большая лексикографически строка).

    Сортировка очень больших файлов - тоже стандартная тема. Лучше всего, наверно, подойдет radix sort. Правда, нужно будет свободного места на диске чтобы копии файлов тоже помещались, да лучше с запасом. Тут надо будет 3 раза (или какая там у вас длина строки) прочитать файл. Прочитанные строки надо распихивать по 256 (или сколько там символов различных может быть) файлам. Потом все эти файлы надо собрать воедино в нужном порядке.

    Надо только хорошо порыться в документации - нужны функции php которые читают файл построчно и не грузят его весь целиком в память. Если, конечно, у вас не ~128гб оперативки. Тогда лучше каждый файл загрузить в память целиком и сортировать quick sort'ом.
    Ответ написан
    Комментировать
  • В чём отличие хэш-таблицы от словаря и ассоциативного массива в C#?

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

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

    wataru
    @wataru
    Разработчик на С++, экс-олимпиадник.
    Кем подчеркивается? Оно компилируется нормально: https://godbolt.org/z/oMc89TE13

    Возможно ваше IDE не умеет в последние стандарты С++.
    Ответ написан
    6 комментариев
  • Как записать условие?

    wataru
    @wataru Куратор тега Алгоритмы
    Разработчик на С++, экс-олимпиадник.
    Используйте флаги:

    есть_столбец_с_нулями = ложь
    Для каждого столбца j
      количество_нулей = ПодсчитатьКоличествоНулейВСтолбце(j)
      если количество_нулей >= 2 то
        есть_столбец_с_нулями = истина
    
    Если есть_столбец_с_нулями
      НайтиСуммуЭлементовНадДиаганалью();


    Функция для подсчета нулей в столбце простая - пройдитесь циклом по всем элементам столбца (по строкам). Если текущий элемент ноль - то увеличивайте счетчик.

    Можно не писать отдельную функцию а просто воткнуть вложенный цикл.
    Ответ написан
    1 комментарий
  • Как циклом Python for пройти несколько (сотен) range?

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

    wataru
    @wataru Куратор тега Алгоритмы
    Разработчик на С++, экс-олимпиадник.
    1) l не вычисляется. l перебирает некоторые простые числа до log n (2 и те, которые дают остаток 1 при делении на 4).

    2) Процесс описан внизу страницы. Вы представляете n в виде произведения нечетного (и не делящегося на описанные выше простые числа) n' и вот этих всех простых чисел в каких-то степенях. Далее, поскольку мы можем эти простые числа разложить в сумму двух квадратов после предподсчета, то используя описанный в статье ранее трюк можно получить разложение на квадраты n из разложения n'

    3) Это трюк, чтобы все эти простые числа найти до логарифма найти.

    4) Кажется не обязательно и натуральный логарифм тут используется, чтобы оценка сложности была оптимальная. Но я не уверен. Лучше не надо.
    Ответ написан
    Комментировать
  • Почему функция y=x^x начинает возрастать, начиная с аргумента 1/e?

    wataru
    @wataru Куратор тега Математика
    Разработчик на С++, экс-олимпиадник.
    В смысле почему? Почему y=x^2 имеет минимум в 0, почему синус имеет период в 2 пи? Ну вот просто такое свойство у данной функции. Так получилось. Это свойство можно вывести, например, посчитав производную заданной функции.

    Хочется какую-то интуицию? При маленьких x вы маленькое число возводите в маленькую степень при увеличении x вы увеличиваете и основание и степень. Увеличивая основание, вы увеличиваете результат. Ведь если большее число возвести в ту же степень, то результат увеличится. С другой стороны, основание-то меньше 1. Если увеличивать степень, то вы больше домножаете на маленькое число и результат должен уменьшатся. Для каких-то чисел основание перевешивает степень и результат при изменении x увеличивается. Для каких-то - наоборот.
    Ответ написан
    Комментировать
  • Как построчно выводить даные из .txt документа в C++?

    wataru
    @wataru Куратор тега C++
    Разработчик на С++, экс-олимпиадник.
    В этом коде столько проблем, что даже не знаю с чего начать.

    Откуда вы вообще взяли, что он должен читать весь файл? У вас цикл на одну итерацию. Внутри if/else, но в каждой ветке есть break, который цикл завершит. И в довесок ко всему - там еще и return стоит после break, который ни разу не выполнится.

    Вообще все надо с 0 переписать.
    Ответ написан
    Комментировать
  • Почему scanf считывает значение только первой переменной?

    wataru
    @wataru
    Разработчик на С++, экс-олимпиадник.
    Если вам нужен ввод целых чисел, то читайте их в целые переменные через %d. Еще, scanf возвращает количество прочитанных значений. Т.е. сравнивать надо с тройкой, а не единицей.

    Еще одна проблема: возможно, из-за настроек локализации, оно ждет десятичные запятые, а не точки. Попробуйте ввести "1,0 2,0 3,0" или "1 2 3".

    И вообще весь ваш сценарий - это комбинация ошибок в пером и втором абзаце. Из за точек вместо запятых оно читает только первую переменную сначала, видит, что ввело 1 переменную и завершает цикл. При вооде "1 2 3" оно читает все переменные, но из-за ошибки в проверке (вы же хотите, чтобы одна прочиталась) читает опять. При повтороном вводе "1.0 2.0 3.0" оно читает только первую переменную и завершается. При этом в b и c остались значения от прошлого ввода.
    Ответ написан
    2 комментария
  • Как составить диаграмму Эйлера и решить ее?

    wataru
    @wataru Куратор тега Математика
    Разработчик на С++, экс-олимпиадник.
    Нарисуйте 3 круга. Они пересекаются и разделяются на 7 областей. Обозначте их 7 переменными. АНФ - область всех 3 кругов, АФ - внутри кругов А и Ф, но не Н. Н - кусок круга для немецкого, но не в одном другом круге. И т.д.

    Составьте уравнения. 4 куска в каддом круге суммируются к количеству преподавателей этого языка. 2 куска в каждой дольке из 2 кругов в сумме дают заданное число. Скмма всех 7 кусков - сколько всего преподов. 7 уравнений, 7 неизвестных. Решайте. Можно уравнения складывать и вычитать.
    Ответ написан
    8 комментариев
  • ОШИБКА: "cannot overload functions distinguished by return type alone" Что делать?

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

    wataru
    @wataru Куратор тега Алгоритмы
    Разработчик на С++, экс-олимпиадник.
    Можно. Декартово дерево можно реализовать через split/merge. Даже если у вас нет второго ключа, то можно релизовать это храня высоты деревьев или вообще случайно решать, стоит ли вставлять элемент сюда (где вызывать split) и какая из двух вершин станет корнем поддерева при merge.
    Ответ написан
  • Как сделать плавный переход высот в шуме перлина?

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

    Например, после какой-то высоты всегда снег. Ниже какой-то высоты всегда камень. А по середине нужно что-то случайное. Можно, например, генерировать 2 шума и сравнивать их как-то. Например, квадрат одного больше другого, умноженного на какую-то константу. С формулами надо поэкперементировать, посмотреть, что хорошо выглядит.
    Ответ написан
    1 комментарий