Работаю в Google, пишу на C++. Занимался олимпиадным программированием.

Достижения

Все достижения (31)

Наибольший вклад в теги

Все теги (134)

Лучшие ответы пользователя

Все ответы (1239)
  • На чём написан язык программирования C?

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

    Если же вас интересует на чем запрограммированы компиляторы языка С, то самые популярные нынче развивающиеся компиляторы написаны на C и C++ соответственно:
    gcc: https://github.com/gcc-mirror/gcc
    clang: https://github.com/llvm/llvm-project/tree/main/clang

    Вы спросите, а как компилятор языка Си написали на самом Си? Ответ прост - первые компиляторы были написаны на ассемблере. Они были очень простыми и тупыми, возможно не умели понимать все тонкости языка. Когда появился достаточно работающий компилятор с минимальным набором функций, можно было переписать его на Cи и скомпилировать первым компилятором. После этого стало можно компилировать компилятор на Си самим сабой.

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

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

    wataru
    @wataru
    Разработчик на С++, экс-олимпиадник.
    ООП - это не только, когда вы берете какие-то сущности из предметной области и оборачиваете каждую в объект, который что-то умеет делать. Это больше подход к организации кода. Вы делите задачу на подзадачи, а данные на обособленные части, абстрагируете детали внутри объектов. Это позволяет снижать сложность архитектуры. Теоретически любую программу можно написать внутри одной огромной функции с кучей goto. Но так никто не делает, потому что это невозможно поддерживать и невероятно сложно написать. ООП - это логическое продолжение процедур. Теперь вы не только какие-то части программы абстрагируете в одном месте, но теперь еще и данные вмести с ними.

    Мне нужен объект, который будет хранить состояние/данные, и есть общие операции над этим состоянием?


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

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

    Надо или копировать с изменениями в новое изображение, или менять направление прохода в зависимости от знака синуса.
    Ответ написан
    1 комментарий
  • Тип с точностью до 4 знаков C++?

    wataru
    @wataru Куратор тега C++
    Разработчик на С++, экс-олимпиадник.
    Есть. Называется int. Вам надо хранить количество десятитысячных в числе. Иными словами, вы вместо x храните в int x*10000. При выводе делите на 10000 (и установите выводить 4 знака).

    Такие числа можно просто складывать и вычитать. При умножении надо будет результат поделить нацело на 10000 (или округлить к ближайшему, делящемуся на 10000 и потом отбросить 4 нуля). При делении - наоборот. Надо сначала домножить числитель на 10000, а потом поделить нацело на знаменатель (возможно стоит подумать об округлении к ближайшему целому).

    Upd: И вообще, раз уж разговор о C++, то можно реализовать свой класс. Там можно даже отдельно хранить целую часть и 4 знака после запятой. Если вам встроенной точности int/int64_t не хватает. Все математические операции можно переопределить и работать, как со встроенным типом. Вообще, по-умному, это называется fixed point numbers.
    Ответ написан
    Комментировать
  • Как решить задачу на сложность алгоритмов ниже?

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

    Составьте уравнение. Вот есть у вас функция времени для n входных данных f(n) на компе B. На компе A время выполнения будет - f(n)/100, ведь он в 100 раз быстрее.

    Теперь обозначьте за x объем данных на компе A, который надо найти. Тогда у вас f(x)/100 = f(n). Подставьте нужную функцию вместо f() и найдите x. Спойлер, будет похоже, но не то, что у вас в вопросе указано.
    Ответ написан
    2 комментария

Лучшие вопросы пользователя

Все вопросы (2)