Задать вопрос
  • Как реализовать дерево на основе связного списка?

    @res2001
    Developer, ex-admin
    Дерево на основе связного списка это вообще первое что приходит в голову, когда думаешь, как реализовывать дерево. Правда это не обычный последовательный связный список, а иерархический.
    Ответ написан
  • По какой книге изучать язык Си: Эффективный Си или k&r?

    @res2001
    Developer, ex-admin
    KR не учебник и не стандарт, написана давно. Хотя есть довольно свежее издание, но текст не изменился.
    Берите Эффективный Си, хотя я не читал эту книгу, но выглядит норм. К тому же написана на основе свежих стандартов, в отличии от KR.
    У вас не плохой бэкграунд, сам язык достаточно прост, разберетесь с тонкими местами (массивы, строки, динамическая память, указатели, адресная арифметика) и можно начинать что-то делать.
    По функциям стандартной библиотеки полно информации в интернет, например тут
    Вообще книг на русском именно по Си не много, возможно это связано с тем, что язык достаточно прост и одна хорошая книга закрывает большую часть потребностей.
    Кстати, "экстремальный Си" выглядит то же многообещающе, но это, похоже, уже следующий уровень.
    Ответ написан
    3 комментария
  • Как использовать namespace в header?

    @res2001
    Developer, ex-admin
    Заверните весь код в input.cpp в namespace input {}
    namespace добавляет к символам в объектом файле имя namespace, но т.к. у вас определения в input.cpp не включены в namespace, то в объектном файле эти символа будут без добавления имени namespace, поэтому и undefined reference.
    Ответ написан
    Комментировать
  • Почему одни языки быстрее, другие медленнее, и почему новички гуглят самый быстрый язык, а не самый медленный?

    @res2001
    Developer, ex-admin
    Если говорить о скорости, то компилируемые языки всегда будут быстрее интерпретируемых. Просто из-за разных принципов выполнения программы.
    Есть еще языки с JIT компиляцией, типа Java, C# и т.п.
    Они могут быть быстрее компилируемых в каких-то случаях, т.к. они точно знают на каком процессоре работают в каждом конкретном случае и могут максимально использовать возможности текущего процессора для оптимизации кода.
    В компилируемых языках, как правило, программист собирает программу под некоторую абстрактную архитектуру, например под x64, но у конкретного процессора, на котором будет выполнятся программа могут быть какие-то расширенные возможности, о которых программист (компилятор) не знает во время компиляции (или решает не использовать их для универсальности). При этом JIT компилятор может использовать эти расширенные возможности и добьется лучшей производительности.
    Но если поставить в одинаковые условия компилируемые языки и языки с JIT компиляцией, то, думаю, результат будет то же в пользу компилируемых языков. Но в реальности такое (заранее известные условия исполнения для компилируемого кода) встречается не часто.

    К слову, в том же питоне (интерпретируемый язык), например, модули для математических вычислений (numpy, scipy, ...) написаны на компилируемых языках (C/C++), поэтому они работают быстрее, чем аналогичный код на питоне без использования этих модулей. Да и сам интерпретатор питона написан на компилируемом языке :)

    Скорость не единственный критерий для ЯП. Имеет значение и скорость разработки конкретной задачи и поддержка каких-то возможностей и т.д. и т.п.

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

    Практически все задачи можно решить почти на любом ЯП, но есть ЯП, которые хорошо подходят для решения задачи, а есть те, что не очень. В общем, подбирайте язык под задачу.
    Например, если вы работаете в вебе, то это JS, php, python, java, C# и еще пачка других
    Если это десктоп приложение с GUI, то: Java, C# может быть С++
    Если это встраиваемая техника и реальное время, ядро ОС или драйверы: C/C++
    Если это ИИ, компьютерное зрение и т.п. computer science: python, R, что-то еще
    Ответ написан
    Комментировать
  • Можно ли изменить размер типа int?

    @res2001
    Developer, ex-admin
    1. Размер всех типов всегда кратен 8 битам. Просто потому, что минимально адресуемый размер памяти в современных процессорах - это 1 байт. Так что 31 или 33 сделать не возможно. Теоретически можно сделать, например, 24 или 40, но смотри следующий пункт.
    2. Все базовые типы С/С++ однозначно проецируются на типы данных, поддерживаемые процессором. Поэтому реально использовать только типы, которые поддерживаются железом. А их не так много и все они, скорее всего, уже есть среди базовых типов С/С++.

    Да можно использовать вариант с битовыми полями или библиотеки для длинных чисел и т.п., но вычисления в этом случае будут медленные, т.к. все операции придется реализовывать программно. Кроме того, если взять битовые поля - там вы можете определить поле размером в 31 бит, но переменная все равно будет занимать 32 бита в памяти (см п.1).
    Ответ написан
    Комментировать
  • Сохраняться ли данные после переустановки или обновления Windows?

    @res2001
    Developer, ex-admin
    Если устанавливать винду на те же разделы без форматирования, то данные сохранятся.
    Вообще, обычная практика, для данных выделять отдельный раздел на диске, не системный. Тогда можно спокойно переустанавливать систему с форматированием системного раздела, главное не трогать раздел с данными.
    На счет бэкапа важных данных - полностью согласен "с предыдущими ораторами" - если данные хранятся в единственном экземпляре, то рано или поздно вы их потеряете.
    Ответ написан
    Комментировать
  • ОС и ФС для маленького файлообменника и 1С-бухгалтерии v7? Соскочить с кубунту?

    @res2001
    Developer, ex-admin
    Заберите у юзеров админские права на рабочих станциях и активируйте везде Windows Defender, с вирусами станет легче.
    Какой выбрать линукс - пофиг, тот, что лучше знаете, но берите стабильную ветку дистра. Можно без GUI.
    Ответ написан
    Комментировать
  • Почему программа на C не выводит результат?

    @res2001
    Developer, ex-admin
    Не используйте pow. Она работает с double, а это числа с плавающей точкой. У double точность примерно до 15 значащих десятичных цифр, дальше все приближенно. https://en.wikipedia.org/wiki/IEEE_754#Basic_and_i...
    У вас целочисленная арифметика везде - просто домножайте каждую итерацию на 10. И не забывайте везде использовать long long.
    Вам же уже давали пример в одном из прошлых вопросов.
    И n там вроде - 18.
    Ответ написан
  • Как лучше хранить 13 ТиБ данных (mdadm / lvm / zfs / btrfs)?

    @res2001
    Developer, ex-admin
    То что лучше знаешь/был опыт работы: llvm или zfs/btrfs.
    Можно использовать что-то типа TrueNAS и не парится с выбором.
    Возможно стоит как-то разделить файлы на группы, а не держать в общей файло-помойке, и группы разложить на разные raid тома, созданные на независимых от других групп дисках...
    Стоит подумать еще и о бэкапе всего этого добра.
    Ответ написан
  • Как построить динамичный график в matplotlib?

    @res2001
    Developer, ex-admin
    Включаете интерактивный режим plt.ion() и обновляете когда нужно. В этом случае plt.show() возвращается сразу после отрисовки, а не ждет пока не закроете окно.
    Для задержки программы, так что бы окно не переставало реагировать на действия пользователя используйте plt.pause().
    При очередной перерисовке надо что бы окно (fig) оставалось прежним, иначе будет моргание из-за постоянного удаления старого/создания нового окна, старое содержимое окна можно удалить с помощью fig.clear().
    В общем в matplotlib не плохая документация и много примеров.
    Ответ написан
    Комментировать
  • Как исправить резкое повышение пинга в играх при частых действия?

    @res2001
    Developer, ex-admin
    Ничего удивительного - увеличивается количество передаваемого трафика, канал занимается больше на полезную нагрузку, а трафик пинга, как менее приоритетный, вытесняется. Отсюда растут задержки в пинге. Но это не значит, что скорость падает или что-нибудь подобное.
    Вот когда плохие пинги, в то время когда вы ничего не делаете - это повод задуматься.
    Ответ написан
    2 комментария
  • Из CMD блокировать / разблокировать IP сетевого принтера?

    @res2001
    Developer, ex-admin
    Добавить/удалить правило в фаервол винды с помощью netsh.
    Ответ написан
    Комментировать
  • Из-за чего программа на C выдаёт неправильный ответ?

    @res2001
    Developer, ex-admin
    Потому что целочисленное деление: a / r дает в результате 2 без остатка. Вам нужно преобразовывать в числа с плавающей точкой, выполнять деление с плавающей точкой и получать остаток с помощью modf.

    Еще пара замечаний:
    1. явно ведь ваш алгоритм начинается с 12, т.к. это первое число с более 1 цифрой в составе, у которого младшая цифра двойка. Так что все что меньша 12 нет смысла перебирать.
    2. Нет смысла увеличивать а на 1 - увеличивайте сразу на 10, т.е. к следующему варианту с двойкой в конце, зачем перебирать варианты, которые вы пропустите. Кроме того в этом случае count можно не расчитывать так как делаете сейчас, а просто добавлять 1 каждые 10 итераций.
    Ответ написан
  • Как всё таки работает асинхронность?

    @res2001
    Developer, ex-admin
    Асинхронным может быть что угодно, просто для ввода/вывода есть средства в ОС, для остального требуется писать самому (используя многопоточность или другой вариант параллельного исполнения) или использовать библиотеки.
    В целом принцип такой: вы даете задание и это задание как-то чем-то исполняется, не зависимо от вашего потока, должен быть механизм оповещения/опроса о состоянии задания, возврат ошибок/исключений/результата.

    Из всего асинхронного API, которое я видел пожалуй наиболее "асинхронным" является "POSIX asynchronous I/O", это когда вы вызываете асинхронный read/write, а для обратной связи используется сигнал (в винде ничего похожего нет). Он наиболее асинхронный потому, что основному потоку не надо никак опрашивать состояние задания - система сама прерывает поток сигналом в произвольный момент. Этот механизм используется довольно редко. Наиболее употребимы select/poll/epoll, в том же libuv используется poll (в винде IOCP).
    Ответ написан
    Комментировать
  • Можно ли убрать "мигание" консоли?

    @res2001
    Developer, ex-admin
    Может быть не надо очищать экран? Просто следующий кадр выводите следом, но так чтоб он занимал все окно, предыдущий будет сдвинут вверх.
    Ответ написан
    3 комментария
  • Почему побайтовый сдвиг даёт разные результаты?

    @res2001
    Developer, ex-admin
    Читайте тут до прояснения раздел "Bitwise shift operator.
    Смысл в том, что если вы знаковое число сдвинули влево так, что старшим разрядом стала 1, то в результате получится отрицательное число. При сдвиге вправо знакового числа, освобождающиеся слева разряды заполняются битом знака (а не нулем), поэтому результат сдвига отрицательного числа так же будет отрицательным (а положительного - положительным:). Если сдвигать вправо беззнаковое число, то свободные биты будут всегда заполнятся нулями.
    Кстати, на сколько помню, по стандарту знаковость char не определена (может быть как знаковым так и беззнаковым). Вам с вашим примером не повезло, char оказался знаковым. Зато это дало возможность немного глубже понять сдвиги.
    Ответ написан
    6 комментариев
  • Нужно сделать циклический сдвиг вправо на 8 позиций. Считать из файла и записать в файл. Что не так?

    @res2001
    Developer, ex-admin
    Алгоритм циклического сдвига описан в старинной книге Джона Бентли "Жемчужины программирования".
    https://codelib.ru/task/cycle_shift/
    Ответ написан
    Комментировать
  • Что значит запись shifter_carry_out = C Flag?

    @res2001
    Developer, ex-admin
    Видимо имеется ввиду бит C (Carry condition flag) регистра CPSR. Обычно по контексту понятно, что имеется ввиду.
    Вообще в таких случаях приводите больше контекстной информации, а то вы выдернули кусок кода откуда то, думай что хочешь.
    Ответ написан
    3 комментария
  • Если у меня статический ip, является ли он публичным и общедоступным?

    @res2001
    Developer, ex-admin
    Если статический адрес не вписан в договор с провайдером (или его нет в списке предоставляемых услуг), то скорее всего адрес динамический. Если сейчас он кажется вам статическим, то это не значит, что в один прекрасный день провайдер его не может поменять.
    Список диапазонов серых адресов короткий, все диапазоны известны и описаны в RFC, гуглите. Если ваш адрес входит в один из диапазонов - значит он серый (не публичный и не общедоступный).
    Ответ написан
    Комментировать
  • Создание много папок в Windows?

    @res2001
    Developer, ex-admin
    В батниках все переменные строковые!
    set /a для арифметических действий преобразует строки в числа, делает действия и сохраняет строку в результате.
    Поэтому дополнение нулями простое: дописываем к числу максимальное необходимое количество нулей, затем убираем лишнее с помощью операции извлечения подстроки.
    Для извелечения подстрок читай:
    set /?
    Ответ написан
    3 комментария