Задать вопрос
  • Как написать код, где надо узнать в каком диапазоне число(без if else)?

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

    n = (x - 30)/10;

    Тут есть проблема, что интервалы идут и после 6 и еще и в отрицательную сторону.

    Можно навесить на это сверху min/max так:

    min(6, max(1, n));

    Min и max реализуются без if - это известная задача, гуглите.

    Edit: Сначала не опнял вопрос, думал надо по заданию без if написать это.

    Все-равно, самый быстрый и простой код будет с формулой выше. Только можно проверить на принадлежность крайним интервалом через if:

    if (x <= 49) return 1;
    if (x >= 90) return 6;
    return (x-50)/10 + 2;
    Ответ написан
    Комментировать
  • Ошибка cannot read properties of undefined reading uri, как его исправить?

    wataru
    @wataru
    Разработчик на С++, экс-олимпиадник.
    Vs code надо настроить, чтобы он мог запускать c++. В отличии от visual studio, это просто навороченный редактор кода.

    Гуглите "как настроить vs code для c++".

    Вам надо поставить компилятор и прописать его в launch.json
    Ответ написан
    1 комментарий
  • Как правильно сортировать файл?

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

    На практике, когда стоит задача сортировать файл, файл большой и в память целиком не помещается. Поэтому его читают кусками и как-то хитрят. Но чтение всегда делают большими кусками.
    Ответ написан
    2 комментария
  • Кто знает решение?

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

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

    Что такое "абстрактный класс" знаете?

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

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

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

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

    wataru
    @wataru
    Разработчик на С++, экс-олимпиадник.
    x, y - переменные. Они изображаются на графике. x0, y0, a - какие-то фиксированные параметры прямой, числа. Точка, через которую она проходит и наклон.

    Синяя линяя, наверно, прямая, описываемая этим уравнением.
    Ответ написан
    Комментировать
  • Может ли метати стать типом объявлемого уникального указател в шаблоне интерфейса при реализации интерфейса в конечном классе?

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

    Ошибка C2989 "класс шаблон уже объявлен как не класс шаблон" означает, внезапно, что класс-шаблон уже объявлен где-то как не шаблон. Имя класса в ошибке тоже присутствует: "Машинный::Интерфейсы::ИСистемаОбменаСообщениями"

    Итак, вы заводите шаблон ИСистемаОбменаСообщениями. Но где-то еще в этом же модуле трансляции (смотрите всякие включенные хедеры тоже) уже есть ИСистемаОбменаСообщениями - только объявленная как класс.

    Ищите по исходникам все места, где ИСистемаОбменаСообщениями встречается и смотрите. Может у вас где-то forward declaration есть неправильное (вроде class ИСистемаОбменаСообщениями; вместо template <...> class ИСистемаОбменаСообщениями;). Или класс с таким же названием.

    Еще очень помогает читать, что компилятор вам пишет, а не пытаться угадывать, что же не так с классом, на который он ругается. Можно гуглить код ошибки - тогда можно найти кучу примеров и объяснений.
    Ответ написан
    Комментировать
  • Падает тест сложения двух чисел в столбик? Почему?

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

    wataru
    @wataru Куратор тега C++
    Разработчик на С++, экс-олимпиадник.
    Читайте строку. Потом каким-нибудь stol преобразуйте в число.
    Не забудьте использовать опциональный параметр idx, чтобы проверить, что вся введенная строка была распарщена.

    Так "123-32" распарсит 123 и вернет как число, но idx укажет на -, а не на конец строки.
    Ответ написан
    Комментировать
  • Как исправить ошибку error: invalid type argument of unary ‘*’?

    wataru
    @wataru Куратор тега C++
    Разработчик на С++, экс-олимпиадник.
    Если вы разыменовываете указатель, то там должна быть точка вместо стрелочки (и скобки вокруг *s). Если вы хотите использовать ->, то вам не надо разыменовывать указатель.
    Ответ написан
    Комментировать
  • Как считать строку в nasm?

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

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

    Я подозреваю, что черный фон - это следы кучи отрисовок текста с постеппенным сдвигов вправо.

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

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

    wataru
    @wataru Куратор тега Математика
    Разработчик на С++, экс-олимпиадник.
    Можно. Из второго уравнения: x=u/(1-c).
    Ответ написан
    7 комментариев
  • Какая структура данных лучше подойдет для случайного удаления из коллекции?

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

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

    При вставке - просто добавляйте в вектор ключ и вставляйте в дерево значение {значение, последний индекс в векторе}. При удалении по ключу - в известном месте вектора пропишите последний элемент и укоротите вектор на 1. Не забудьте обновить ссылку на вектор у того ключа, который с последнего места переехал.

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

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

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

    Но у вас и в SimpleVector(const SimpleVector &other) ошибка - оно просто копирует указатель. После чего два экземпляра SimpleVector будут указывать на одни и те же данные. И оба попытаются удалить их в конце. Так что там у вас и доступ к удаленной памяти и двойное удалиение.
    Ответ написан
  • Как убрать залипание клавиш graphics.h?

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

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

    Способы сделать это платформозависимы. Например, в винде можно воспользоваться GetKeyState.
    Ответ написан
    1 комментарий
  • Как вписать прямоугольник в многоугольник?

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

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

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