• Где и как используют деревья в программировании?

    @Mercury13
    Программист на «си с крестами» и не только
    1. Нечто, действительно имеющее древовидную форму — например, деревья каталогов на дисках, деревья сцен в 3D, деревья принятия решений.
    2. Деревья поиска — структуры данных, позволяющие добавлять-убирать объекты и позволяющие быстрый поиск по ключу. Например, словари всякие, индексы БД.
    3. Так называемая куча — структура данных, позволяющая добавлять-убирать объекты и поддерживающая минимальный элемент в этом множестве. Используется как вспомогательная в каких-нибудь алгоритмах.
    4. Двоичное разбиение пространства в 3D — известный способ сортировки от дальних к ближним.

    Кроме того, деревья могут не существовать в памяти, а только подразумеваться — в синтаксических разборах, теоретико-игровых обсчётах. Хотя один из вариантов промежуточного хранения разобранной формулы, чтобы потом по ней проводить многократные расчёты — дерево (но чаще используют обратную польскую запись).
    Ответ написан
    Комментировать
  • Какое максимальное количество операций в бинарном поиске?

    @Mercury13
    Программист на «си с крестами» и не только
    ceil(log2(n + 1))

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

    Доказательство.
    Докажем обратное: за k шагов можно угадать 2k−1 чисел.

    БАЗА. 1 угадывается с первого раза. 2 с первого раза уже не угадаешь.

    ШАГ. k → k+1. Другими словами, нам известно, что 2k−1 угадать можно, а 2k уже нельзя.
    Берём центральное, и остаётся 2k−1 слева и 2k−1 справа. → n = 2·(2k−1)+1 = 2k+1−1
    Если n = 2k+1 или больше, хоть в одной половинке будет 2k, что, по предположению индукции, невозможно.
    Ответ написан
    4 комментария
  • Что делать если не получается писать код имея нужные знания?

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

    Способность мозга представить что либо в понятном ему виде - вполне конретная когнитивная функция. Если она не работает должным образом - то это сказывается на многих сферах жизни.

    Если совсем не получается - не лезь не твое это. Твой мозг просто не может формализовать задачу.

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

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

    Так вот тренировать нужно методику разбиения задачи на составляющие.
    Ответ написан
    1 комментарий
  • На сколько безопасны секретные gist и приватные git репозитории?

    y0u
    @y0u
    dev
    Secret gists don't show up in Discover and are not searchable. Secret gists aren't private. If you send the URL of a secret gist to a friend , they'll be able to see it. However, if someone you don't know discovers the URL, they'll also be able to see your gist. If you need to keep your code away from prying eyes, you may want to create a private repository instead.

    https://docs.github.com/en/github/writing-on-githu...
    Ответ написан
    Комментировать
  • Как осуществить перенаправление траффика или настроить маршрутизацию через код?

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

    Мне кажется, тут скорее непонимание того, как работают биржи.
    1. Алиса покупает у Боба 10 акций по 100$. 1% идёт комиссия брокеру.
    Таким образом у Боба появляется 1000$, а у брокера 10$. Алиса теряет 1010$
    2. Через какое-то время акции дорожают и поднимаются в цене до 110$
    (в данном случае мы понимает это, что еть покупатель, готовый столько заплатить)
    Вадим покупает у Алисы её 10 акций по 110$. Алиса получает 1100$, брокер получает ещё 11$ комиссии.

    Таким образом что мы имеем:
    У Алисы 1100$. У неё прибыль 90$
    У Боба 1000$
    У Вадима 10 акций
    С этих двух сделок брокер наварился на 21$

    Термин "заработал из пустоты" неверен, тк цены не вырастают автоматически от того, что ты купил акции.
    Алиса могла бы быть в убытке, если бы в этом случае комиссия брокера была бы выше. Ну или если бы комиссия взималась по какому-нибудь другому принципу.
    Ответ написан
    Комментировать
  • Как сказать системе, что сервис запустился?

    leahch
    @leahch Куратор тега Linux
    3D специалист. Dолго, Dорого, Dерьмово.
    Измените Type=notify на Type=simple
    Ответ написан
    1 комментарий
  • Как заставить .bat файл создать .html файл и открыть его?

    NeiroNx
    @NeiroNx
    Программист
    5 букв труднорешаемая задача в cmd, я бы взял просто цифры:
    set OUTPUT=%RANDOM%%RANDOM%.html
    ...
    start %OUTPUT%
    Ответ написан
    6 комментариев
  • Как мне запустить несколько экземпляров одного приложения через прокси?

    @pfg21
    ex-турист
    купить набор проксей с разными адресами и запускать несколько копий твоей програмки с параметрами доступа к твоим проксям.
    оформить скриптом
    запуск процесса в фоне через &
    статейка вот https://losst.ru/kak-zapustit-protsess-v-fone-linux
    это для начала :) ибо описание задачи не полное, да и варианты решения зависят от возможностей системы на сервере.
    Ответ написан
    Комментировать
  • Как выйти в интернет по определенному интернет-соединению, если имеется несколько интернет-соединений?

    Jump
    @Jump Куратор тега Windows
    Системный администратор со стажем.
    Можете указать конкретный шлюз и трафик пойдет через него.
    Можете указать маршрут на конкретный адрес - через нужный интерфейс.
    Можете использовать файервол, маркировать нужные пакеты и отправлять через нужный интерфейс.
    Ответ написан
    3 комментария
  • Есть ли книги с систематизированным изучением C#?

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

    Нельзя изучать языки по роликам в ютубе!
    Ты машину водить тоже учишься по роликам в ютубе?

    Шилдт Г. Полное руководство С#4.0. Отлично пишет для новичков.

    Далее - Троелсен. Troelsen_C# 2010 and the .NET 4 Platform. Средний уровень.

    Финал - Рихтер. CLR via C#. Программирование на платформе Microsoft .NET Framework 4.0 на языке C#. Это для спецов скорее по внутренней реализации, явно не для начинающих.
    Ответ написан
    11 комментариев
  • Как не вводить пароль через ssh в Debian?

    @AVKor
    При создании ключа использовать пустой пароль.
    Ответ написан
  • Странное дело. Почему-то на windows 10 я не админ, хотя написано в учетной записи, что я админ. Как это исправить?

    HemulGM
    @HemulGM Куратор тега Windows
    Delphi Developer, сис. админ
    Каждая админская учетка имеет одинаковые права. У вас включен UAC. Отключите и пользуйтесь всем сразу с админскими правами. И нет ни какого смысла включать учетку администратора.

    P.S. UAC сделали именно для того, чтоб защитить ОСь от таких как вы.
    Ответ написан
    2 комментария
  • С чем может быть связана ошибка доступа к чтению файла?

    jcmvbkbc
    @jcmvbkbc
    "I'm here to consult you" © Dogbert
    books[nst] = book;
    В чём может быть ошибка

    в том, что в контейнере books не выделено место для nst объектов.

    раннее были записаны данные в виде двух строчек string и двух чисел int (структуры, в общем)

    ну и структуру бы ты показал заодно, а то мало ли, вдруг у тебя там и в самом деле std::string, а значит вся затея с fread обречена на провал.
    Ответ написан
    4 комментария
  • Как бесплатно писать софт под винду в 2021?

    @Griglapidus
    C++/Qt
    А что не так с Qt? если статически не линковать то можно пользоваться бесплатно.
    Ответ написан
    1 комментарий
  • Что лучше unsigned int или long void?

    @Mercury13
    Программист на «си с крестами» и не только
    Что лучше: сóрок пя́ток или пятóк сорóк? © Винни-Пух
    unsigned int — это тип, поддерживающий положительные числа минимум до 65535 (а в современных реалиях — до 4 млрд)
    long void — нет такого типа в Си++.

    Да, я догадываюсь, вы хотите разницу между unsigned int и unsigned long. Unsigned long поддерживает не менее 4 млрд и в большинстве соглашений соответствует unsigned int (но иногда может давать 1,8·1019 — например, в Unix).

    Если вы пишете под конкретный процессор и конкретную ОС — пишите как угодно.

    Для простейшей кроссплатформенности x86/x64 Windows/Mac/Unix я вообще не рекомендую использовать long, используя int и long long. Для индексов в массиве (и прочего добра, чья длина зависит от длины процессора) используйте size_t и ptrdiff_t.

    Для широкой кроссплатформенности лучше использовать (u)int32_t (если важна арифметика переполнений или точное количество байтов), (u)int_fast32_t, (u)int_least32_t (если важно, чтобы хранило не менее N байтов).
    Ответ написан
    Комментировать
  • Поможет ли функциональный ЯП (например, Haskell) лучше понять ООП (С++)? Если да, то чем конкретно он поможет?

    wataru
    @wataru
    Разработчик на С++, экс-олимпиадник.
    Нет. Скорее помешает.

    Это принципиально разные парадигмы. В функциональной парадигме основа - чистые функции, никакого стейта. ООП основано на внутреннем состоянии классов, которое постоянно меняется.
    Ответ написан
    2 комментария
  • В чем логика быть MAC адресу на первом месте при декапсулировании?

    @Tabletko
    никого не трогаю, починяю примус
    В чем смысл при путешествии фрейма от одного узла к другому (находятся не в одной сети) указывать первым мак адрес, если было бы логичнее указать IP, чтобы фрейм нашел нужную сети, а затем уже в этой сети по мак адресу нашел нужный узел.
    Если получатель не в нашей сети, то в L2 заголовке получателем будет роутер, а не конечный получатель.
    Ответ написан
    4 комментария
  • Корректен ли данный код, возможна ли оптимизация?

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

    По коду есть комментарии:
    1)
    if ((valVAT == 10) || (valVAT == 18) || (valVAT == 20)) {
    ...


    Тут у вас один большой мега-if в котором что-то делается. Гораздо проще для понимания и визуально читабельнее, если делать "ранний выход". Вместо if(a) { много кода } стоит писать:
    if (!a) {
      continue; // или return; если это в функции.
    }
    // много кода.


    У вас стоит сначала проверить, что valVAT == 0 и выйти из цикла через break в этом случае. Потом проверить, что valVat != 10 && valVAT != 18 && valVAT != 20 и вывести сообщение об ошибке и сделать continue. Дальше уже идет тело цикла с вычислениями.

    2) Вместо if(chng == 1) {} else if (chng == 2) {}... стоит использовать конструкцию
    switch (chng) {
    case 0:
      // код
      break;
    case 1:
      // код
      break;
    case 2:
      // код
      break;
    default:
      // сообщение об ошибке
      continue;
    }


    3)
    sleep(1) после вывода сообщения об ошибке, на мой взгляд не нужен. Зачем это? Заставить пользователя прочитать сообщение об ошибке?
    Ответ написан
    4 комментария
  • Почему принято писать пробелы вместо табов?

    DevMan
    @DevMan
    4 пробела – везде и всегда равны 4 пробелам, а размер таб'а плавает.
    при неумелом обращении, особенно при командной разработке, это может привести к неожиданному виду кода.

    дело личных привычек/предпочтений и/или договоренности.
    в умелых руках проблемы "space vs tab" вообще не существует.
    Ответ написан
    Комментировать