Задать вопрос
  • Почему при вводе программы, я могу вводить только единицы что бы выдало ответ?

    Сыграю в угадайку, раз уж ты не сказал, что ты дал на вход, что ожидал, и что получил.

    1. Ты вводил числа с точкой в качестве разделителя дробной части, а запускаешь ты программу в системе с русским языком. И ты соответственно получил FormatException. (По правилам русского языка в качестве разделителя целой и дробной части числа используется запятая, в отличие от точки, которая используется в английском)

    2. При определённых значениях твоё выражение выдаёт NaN вместо определённого числа. Это значит, что у тебя произошло деление на 0, число ушло в бесконечность, или в мнимые числа. Если такого не должно происходить - значит ты неправильно перенёс формулу из твоего задания в код

    По качеству кода

    1. Не нужно заворачивать в объект чистые функции.
    2. Вместо транслита лучше бы в переводчик закинуть более осмысленное название
    3. Не нужно вставлять лишние скобки
    4. Для удобства чтения длинных математических выражений, можно его разбить на несколько строк и расставить отступы.
    Console.WriteLine("Введите x: ");
    var x = double.Parse(Console.ReadLine());
    Console.WriteLine("Введите a: ");
    var a = double.Parse(Console.ReadLine());
    Console.WriteLine("Введите n: ");
    var n = double.Parse(Console.ReadLine());
    
    var result = Solution.Calculate(x, a, n);
    Console.WriteLine($"Ответ: {result}");
    
    public static class Solution {
      public static double Calculate(double x, double a, double n) =>
        Math.Pow(Math.Tan(Math.Exp(a+2)), 1.0/3.0) * 
        Math.Pow(
          Math.Pow(a*x*n, 3) * 
          Math.Sqrt(1.0 / Math.Tan(Math.Pow(x, Math.Exp(a+2)))),
         3);
    }


    Вариант с исправленной формулой

    public static class Solution {
      public static double Calculate(double x, double a, double n) =>
        // По заданию мы тут берём корень 3-ей степени и сразу возводим в 3ю степень. Убираем их, тк эти две операции отменяют друг друга.
        Math.Tan(Math.Exp(a+2)) *
        Math.Pow(
          Math.Pow(a*x*n, 3) * 
          //котангенс(x) = 1/тангенс(x)
          Math.Sqrt(1.0 / Math.Tan(Math.Pow(x, Math.Exp(a+2)))),
         3);
    }

    Ответ написан
    8 комментариев
  • Что за типы функций при импорте OpenCV DLL в Delphi?

    TrueBers
    @TrueBers
    Гуглю за еду
    не спрашивайте зачем мне это нужно
    действительно. C++ ABI -- это боль, сильная боль. Даже разработчики компиляторов страдают от неё. Если вам уж прям так важно поковыряться в его кишках, то изучайте исходники LLVM и спецификацию стандарта ABI. А если нет, то возьмите OpenCV C API и не выносите себе голову.

    но описан как функция
    А как он должен быть описан, как сферический код в вакууме?

    чем отличается от обычных деструкторов
    Стандарт определяет деструкторы:
    1. base object destructor
    2. complete object destructor
    3. deleting destructor
    4. trivial/non-trivial destructor

    Что из этого есть "обычный" деструктор?

    Здесь про деструкторы и псевдо-код порядка их вызовов. Здесь -- про общее устройство виртуальной таблицы.

    что на самом деле означает `vbase destructor`, в каких случаях он вызывается
    Есть предположение, что это имя экспортируемого complete object destructor для класса, базовым классом которого является класс с виртуальным деструктором. То есть, он выполняет часть процесса цепочки деструкторов, которая помимо вызова base object destructor, вызывает также все деструкторы для всех базовых виртуальных классов. Но при этом ещё не вызван deleting destructor, который собственно вызывает operator delete. Т.е. получается, что complete object destructorпо включённому в него списку действий, как бы "наследуется" от base object destructor. В свою очередь, deleting destructor "наследуется" от complete object destructor.

    Предполагаю, что вызывается автоматически в замыканиях. Но что на самом деле означает `default constructor closure'
    Для чего он может вызываться в замыканиях, просто чтоб было?

    Моё же предположение, что это замыкание -- некий адаптер-костыль чтоб привести нетривиальные параметры конструктора в удобоваримую ABI-форму, и вызывается когда default constructor имеет default non-trivial parameters, для которых надо сначала вызвать конструктор, либо когда это variadic конструктор, которому нужно привести список аргументов к Сишному `va_arg`, чтобы переслать их через границу ABI. Вот в этом случае он вызывается, как я понимаю.

    Один ценный никому не нужный совет: тебе НЕ НУЖНО в этом разбираться. Брось эту затею и возьми сишный API.
    Ответ написан
    3 комментария
  • В чем смысл do while? Как его можно использовать?

    @evgeniy_lm
    Как написано в инструкции. Тело такого цикла обязательно выполняется хотя бы один раз. Часто густо бывают ситуевины когда нужно выполнить некие действия и по их результату решить повторить их или продолжить выполнение проги далее
    Ответ написан
    Комментировать
  • Не работает деструктор. В чем ошибка?

    jcmvbkbc
    @jcmvbkbc
    "I'm here to consult you" © Dogbert
    Не работает деструктор

    "Не работает деструктор" -- это когда программу компилируешь, запускаешь, а деструктор не делает того, что в нём написано. У тебя же программа не компилируется. Из-за того, что в настройках компилятора стоит "трактовать предупреждения как ошибки" и "предупреждать о неэффективном коде С++". Ну и вдобавок, предупреждение тебе правильно говорит, что если ты не реализовал конструктор копирования и оператор присваивания для класса самостоятельно управляющего памятью, то жди проблем, когда начнёшь копировать объекты этого класса.
    Ответ написан
    6 комментариев
  • Как построить одинаковый отрезок вне зависимости от порядка точек?

    Rsa97
    @Rsa97
    Для правильного вопроса надо знать половину ответа
    А в чём проблема то? Отсортируйте отрезки по координатам.
    если xA > xB
      или (xA == xB и yA > yB)
      или (xA == xB и yA == yB и zA > zB)
        то T := A, A := B, B := T
    Ответ написан
  • Как создать кастомное кроссплатформенное окно на си?

    includedlibrary
    @includedlibrary
    Надо либо использовать библиотеки GTK, QT и т.п., либо писать свою реализацию под каждую ОС
    Ответ написан
    Комментировать
  • OSError: exception: access violation reading, ctypes, Python, что делаю не так?

    Vindicar
    @Vindicar
    RTFM!
    a = c_char_p(f'{getcwd()}\\file.txt'.encode())
    b = c_char_p(b'Help me pls')

    Тут есть проблема. Ты получаешь указатель на объект, но ты не хранишь ссылку на этот объект.
    Что, если Питон сразу же его подберёт сборщиком мусора? У тебя указатель будет указывать на адрес, где был объект, а что там сейчас - фз. Если память не будет освобождена, то обращение может быть удачным. Если страницу памяти освободят - то поймаешь access violation.
    Положи строку в переменнную, и бери указатель по переменной. Тогда объект будет жить, пока жива переменная.
    Во-всяком случае, я бы начал с этого.
    Ответ написан
    2 комментария
  • Как циклом Python for пройти несколько (сотен) range?

    Vindicar
    @Vindicar
    RTFM!
    Ответ написан
    Комментировать
  • Как можно получить карту мира ввиде одного или нескольких изображений с максимальной детализацией?

    trapwalker
    @trapwalker
    Программист, энтузиаст
    Простешие арифметические вычисления вам бы показали, что единственное векторное изображение с таким количеством деталей вы ничем не сможете открыть и отрендерить.
    Растровое изображение тоже скорее всего превысит допустимые размеры популярных форматов, но даже изображения, близкие к максимальным по размеру уже будут открываться и отображаться очень долго даже на современном оборудовании.
    И это ещё речь незаходила об объёме картинки такого размера и с такой детализацией.
    Именно поэтому все современные картографические программы и сайты работают не с цельным изображением, а с тайлами: квадратными (обычно) картинками, векторными или растровыми, которые стыкуясь друг с другом ормируют фрагмент карты, который в данный момент виден на экране.

    Если бы действительно стояла такая абсурдная задача, то имело бы смысл, чтобы она стала хоть немного реалистичнее, разбить, всё же, всю карту на большие куски и рендерить их отдельно.
    Тут есть два подхода:
    1) можно качать готовые тайлы и клеить из них тайлы побольше. Есть много источников, многообразие которых можно оценить с помощью ресурса https://nakarte.me/. Это, кстати, opensource-прокт и его исодники доступны на гитхабе.
    Качать тайлы можно с помощью проги SAS planetа - www.sasgis.org/sasplaneta
    2) Самостоятельно рендерить карты загрузив и отфильтровав дамп БД OSM. Это более сложный путь, но он реализцется на готовых и вплне рабочих компонентах (за исключением абсурдного и нереализуемого требования про рендер в единый файл).

    Вы бы подробнее рассказали чего хотите добиться и для чего, а вам бы тут объяснили пределы возможного и целесоообразность разных попыток реалиации этого, а ещё как лучше делать то, что вы в итоге на самом деле хотите.
    https://habr.com/ru/post/270513/
    Ответ написан
    Комментировать
  • Как сделать плавный переход высот в шуме перлина?

    Ocelot
    @Ocelot
    Если дизеринг не подходит, а нужна именно чёткая граница, но не хочется, чтобы она проходила по прямой. Сгенерируй ещё одну случайную карту высот, с меньшим диапазоном, и пусть она задаёт пороговую высоту для каждой отдельной точки. Например, если горы от 0 до 128, а снег нужен выше 100, пусть карта порогов будет в диапазоне 90..110 — получится снеговая линия, плавно гуляющая по высоте на +-10.
    Ответ написан
    Комментировать
  • За счет чего происходит ускорение программ при наличии модуля ядра linux?

    ValdikSS
    @ValdikSS
    Модуль TUN/TAP, через которые работают все не-ядерные VPN, очень медленный из-за того, что у него есть только интерфейс получения и отправки пакетов по одному пакету за вызов. Большое количество переключений контекста между ядром и пользовательским уровнем очень затратны, что влечёт за собой неэффективное использование процессорного времени.

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

    Оценить ускорение от уменьшения переключений контекста довольно просто, достаточно провести тестирование со значительно увеличенным MTU пакета. Вот какие цифры приводит проект slirp4netns.

    Implementation |  MTU=1500  |  MTU=4000  |  MTU=16384  |  MTU=65520
    ---------------|------------|------------|-------------|------------
    slirp4netns    | 1.07 Gbps  | 2.78 Gbps  |  4.55 Gbps  |  9.21 Gbps
    Ответ написан
    4 комментария
  • Как правильно обработать статистику опроса о маршрутах транспорта?

    Rsa97
    @Rsa97
    Для правильного вопроса надо знать половину ответа
    И что такого особенного в этой ситуации? Кто-то считает, что маршрут хороший, потому что одна конечная около дома, вторая около работы. Кто-то что маршрут плохой, потому что его остановки в середине маршрута и автобус всегда забит до упора. Ну и, при прочих равных, маршрут, которым ездит миллион человек в день будет в обоих рейтингах выше маршрута, которым ездит тысяча человек.
    Пока не формализованы критерии отнесения в лучший/худший и данные не приведены к количеству перевозимых пассажиров, статистика бесполезна.
    Ответ написан
    1 комментарий
  • Исходный код языка Си?

    ThunderCat
    @ThunderCat
    {PHP, MySql, HTML, JS, CSS} developer
    Язык Си не является программой, по этому у него нет исходного кода. Исходный код может иметь компилятор языка, которых есть более чем один.
    Ответ написан
    Комментировать
  • Есть ли хоть какое-то преимущество использования функтора перед обычной функцией в данном случае?

    @MarkusD Куратор тега C++
    все время мелю чепуху :)
    У функтора перед функцией есть только одно преимущество - это наличие состояния функтора, которое может меняться между обращениями к его функциональному оператору и влиять на его поведение. Функтор настраивается эксклюзивно, функция - по понятным причинам - только глобально.
    У функции перед функтором тоже есть преимущество - это адрес функции, по которому сразу можно начать ее исполнение. У функтора всегда будет два адреса - адрес метода функционального оператора и адрес самого функтора.

    Исходя именно из этих преимуществ и следует выбирать между функтором и функцией.
    Скажем, если бы нужно было nums вписать в CSV таблицу в виде матрицы, то проще использовать функтор. Создать его, настроить поток вывода, символ-разделитель столбцов, количество выводов до перехода на следующую строку и передать в std::for_each.
    Если такая настройка поведения не требуется, от функтора лучше отказаться в пользу функции во всех случаях.

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

    1. используй std::map для хранения количества голосов за каждого кандидата и int64_t для хранения номера кандидата.
    2. Вот что первым выдаёт гугл на запрос "как найти элемент с максимальным value в std::map C++":
    https://www.techiedelight.com/find-element-with-th...
    Ответ написан
    Комментировать
  • Как получить указатель на функцию класса?

    jcmvbkbc
    @jcmvbkbc
    "I'm here to consult you" © Dogbert
    Что будет?

    В данном примере -- то же самое, как если просто написать obj->execute(), т.е. виртуальный вызов конечного переопределения для функции obj1::execute в объекте класса obj3. См. eelis.net/c++draft/expr.call#3

    Я не понимаю как это будет работать с классами наследниками и виртуальной функцией.

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

    Rsa97
    @Rsa97
    Для правильного вопроса надо знать половину ответа
    Решето Эратосфена всегда начинается с 2. Его принцип - на каждом шаге находим следующее невычеркнутое число, оно является простым. Для построения массива от 900000000 до 1000000000 необходимо вычеркнуть из этого массива все кратные простым числам от 2 до 500000000, а для этого надо эти простые найти.
    Ответ написан
    1 комментарий
  • Почему не работает функция в с++ пытаюсь вызвать, а она не вызывается?

    @12rbah
    return 0;
        menu_for(v);
    Казалось бы, что могло бы пойти не так, попробуйте поменять местами return и menu_for
    Ответ написан
    Комментировать
  • Нужна ли математика Python,Java программисту?

    GavriKos
    @GavriKos
    Вопрос сложный.
    По факту для того чтобы писать говнобота - математика не нужна вообще. Но при этом математика как наука формирует и воспитывает мышление.

    Но при этом математика может понадобиться непосредственно для предметной области. В том же геймдеве без нее просто нечего делать.

    Дополнительно математика позволяет понимать нормально часть терминов. Например, сложность алгоритмов.
    Ответ написан
    Комментировать
  • Как реализовать поиск маршрута в плиточном мире?

    @MarkusD
    все время мелю чепуху :)
    Плиточное поле принято называть дискретным пространством.
    В таком пространстве перемещение измеряется дискретными шагами, между которыми и может быть изменено.

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

    От поиска в ширину можно перейти к эвристическим алгоритмам поиска: A* или поиску по наилучшему совпадению.
    На этом этапе еще полезно познакомиться с алгоритмом JPS. Он может стать даже выгоднее обычного A*.

    A* должен стать для тебя основным инструментом поиска в дискретном пространстве. Но у A* есть проблема большой сложности поиска прямого маршрута.
    При поиске пути по прямой лучше всего использовать алгоритм Брезенхама.
    Этот алгоритм используется для рисования пиксельных примитивов. В частности - прямых.
    И суть должна быть в том, чтобы сперва путь искать через Брезенхама по прямой от точки старта до точки финиша, а если Брезенхам наткнется на препятствие, то уже перейти к поиску через A*.

    Для очень больших дискретных пространств есть варианты иерархического A*: HPA* и HAA*. Они применяются на иерархических дискретных пространствах вида открытого мира. В освоении они являются самыми сложными и самыми интересными.
    Ответ написан
    3 комментария