Ответы пользователя по тегу Программирование
  • Почему никак не узнать исходный код игры?

    15432
    @15432
    Системный программист ^_^
    Эмм ну допустим вы приготовили салат. Нарезали крабовые палочки, кукурузку всыпали, намешали особый соус по своему рецепту. И поставили на стол - нате, хавайте.

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

    Так же и с программой. Исходный код - это для нас, человеков. Нам так удобнее описывать программу. Машине же для исполнения вообще не сдались красивые имена и английский язык, всё наше рукоделие переводится в машинные коды, притом покомпактнее, пооптимальнее (упаковкой / нарезкой салата из нашего кода занимаются оптимизирующие компиляторы). В результате получается бинарный файл. Да, его можно дизассемблировать, сломать мозги, но понять, как он работает. И чтобы его понять - нужно научиться читать как машина, думать, как компилятор. В общем, сложно это и часто нецелесообразно. А вообще, люди не то что софт, даже железо реверсят по фотографиям среза кристалла. Но это совсем другая история.
    Ответ написан
    1 комментарий
  • Насколько огромна сфера программирования?

    15432
    @15432
    Системный программист ^_^
    Мне вот интересно, столько яп существует, и каждый для разных задач.
    Многие ЯП пересекаются в задачах. Просто инструменты.

    Это чтож получается, можно сделать все, что угодно благодаря программированию?
    Всё, что может исполнить ЦПУ.

    А чего нельзя сделать с помощью программирования?
    Любой материальный объект. Здание, животное, планету.
    Ответ написан
    6 комментариев
  • Как считать два байта числа?

    15432
    @15432
    Системный программист ^_^
    для 32-битных что-то типа такого. надо считать байты и развернуть их (вы же на x86 программу делаете? он little endian).
    unsigned int ReadBig32(FILE * in_file)
    {
        unsigned char temp[4];
        fread(temp, 1, 4, in_file);
        unsigned int result = temp[3] | (temp[2] << 8) | (temp[1] << 16) | (temp[0] << 24);
        return result;
    }
    Ответ написан
    Комментировать
  • Что в программировании значит: изучить на уровне железа, или на уровне софта?

    15432
    @15432
    Системный программист ^_^
    На уровне железа - реализовано в низкоуровневой прошивке девайса или вообще аппаратно, в виде неперешиваемых микросхем. Например, трансивер USB, преобразующий пакет данных в битовое кодирование 8b/10b. Изменить сложно или невозможно.

    На уровне софта - реализовано программно в драйвере или приложении, которое взаимодействует с устройством.
    Например, копирование файла на USB флешку. Изменить легко - перекомпилить программу.

    сорри, прочитал ваш вопрос как "изменить"

    изучение на уровне софта - разобраться, как работать с этой фигнёй, чтобы уметь использовать самостоятельно, но не вникать во внутреннюю структуру работы, которая вам не обязательна для использования.
    изучение на уровне железа - понять, как именно работает устройство, добраться до как можно более низкого уровня, чтобы смочь создать такую же штуку.

    например, чтобы скопировать файл на USB флешку вам достаточно изучить работу с fopen(), fwrite(), fclose() - это уровень софта.
    Чтоб понять как реально производится запись на USB флешку и создать свою USB флешку, нужно знать как работает NAND, что нужно для подключения и передачи по USB, какие там бывают типы пакетов, формат пакетов, вплоть до написания своей прошивки
    Ответ написан
    1 комментарий
  • Возможно глупый вопрос. Но как делают точные калькуляторы, когда есть ограничения на диапозон типов данных (int,doble и т.д.)?

    15432
    @15432
    Системный программист ^_^
    Есть библиотеки для работы с большими числами (bigdigits.c), которые хранят числа в многобайтовых массивах.
    Ограничения на типы данных, да и сами типы данных вводятся спецификацией языка программирования.
    Ответ написан
    Комментировать
  • Как происходит разбиение данных на TCP сегменты?

    15432
    @15432
    Системный программист ^_^
    в случае двухбайтовых символов unicode/utf? Конечно может, по любому смещению может поделиться. Поэтому в заголовках http используется разделитель \r\n, а для тела указывается явный размер, чтобы принимающая сторона точно знала, что еще не весь http запрос принят и нужно принимать дальше, и не начинать парсить
    Ответ написан
    Комментировать
  • Как ОС управляет ядрами CPU?

    15432
    @15432
    Системный программист ^_^
    Отключение ядер процессора происходит в BIOS, способы различаются в зависимости от модели и производителя. Обычно это установка битов в каком-либо PCI Config Space регистре чипсета.

    На этапе запуска компьютера, активно только 0 ядро (0 поток в случае SMT), оно начинает исполнятся с адреса FFFFFFF0, где на этот момент находится образ BIOS (UEFI). Остальные ядра (потоки) находятся в состоянии WFS (Wait For Startup Inter-Processor Interrupt, ожидание внутрипроцессорного прерывания начала работы). В процессе загрузки, происходит настройка механизма многопоточности самой операционной системы, контексты, очереди, таблицы и так далее. В том числе для каждого процессора (потока) создаются Idle циклы, в которых каждый будет крутиться в ожидании новых задач. Как только все настроено, через SIPI (Startup Inter-Processor Interrupt) пробуждаются остальные ядра и им передается адрес этого самого Idle цикла.
    А потом операционная система добавляет в очередь задач задачи, требующие выполнения и при очередном периодическом прерывании у ядра происходит смена контекста и начинает выполняться эта задача.. как именно это устроено в Windows и кто решает, какому ядру назначить задачу - не знаю. Где-то в ядре (ntoskrnl.exe)

    Про кеш зависит от процессора. Например, в Ryzen кеш общий для процессорного блока из четырех ядер. В модели 1500 4 ядра, отключено по 2 ядра у каждого блока, при этом кеш не урезается, а вот в 1400 ядер тоже 4, но отключена одна из двух сборок целиком, поэтому кеш вдвое меньше
    Ответ написан
    Комментировать
  • Зачем в данном случае прописывать len-1?

    15432
    @15432
    Системный программист ^_^
    Не нужно там len-1, getline не учитывает терминирующий ноль.
    On success, getline() and getdelim() return the number of characters
    read, including the delimiter character, but not including the
    terminating null byte ('\0').
    Ответ написан
  • Можно ли установить фиксированную частоту опроса положения мыши в Windows10?

    15432
    @15432
    Системный программист ^_^
    Windows не опрашивает положение USB мыши. Как только мышь сдвигается, она отправляет USB пакет с разницей координат. Драйвер получает эту информацию и корректирует положение курсора. "Опрос" на уровне USB происходит примерно раз в миллисекунду или чаще (зависит от контроллера).

    Вот PS/2 мышь система именно опрашивает (периодически читает значение в порте), но с какой частотой это происходит я не в курсе, драйвер нужно смотреть. Без замены драйвера поменять частоту также не получится.
    Ответ написан
  • Как вывести значения в обратном порядке?

    15432
    @15432
    Системный программист ^_^
    Записать значения в вектор, а потом вывести в любом порядке
    Ответ написан
  • Как пробивать НАТ?

    15432
    @15432
    Системный программист ^_^
    TCP / UDP hole punching, статей куча
    Ответ написан
    Комментировать
  • Как правильно извлечь числа из битового поля?

    15432
    @15432
    Системный программист ^_^
    Правильно. Ведущие нули не нужны, просто 0xFF или 0xFFFF. Но можно проще:

    struct BitField{
        union{
            int value;
            struct{
                int a:8;
                int b:8;
                int c:16;
            };
        };
    };
    
    BitField MyBits;
    MyBits.a = 4; //fill the internal bit structure
    MyBits.b = 7;
    MyBits.c = 5;
    cout << MyBits.value; //print the full int representation
    Ответ написан
    6 комментариев
  • Как происходит чтение с файловой системы?

    15432
    @15432
    Системный программист ^_^
    В Windows драйвера находятся в ядре. Новый поток не создается, драйвер лишь обрабатывает поступающие запросы на чтение и перебрасывает их другим драйверам, например, usb mass storage или ahci. Которые, в свою очередь, взаимодействуют с хост-контроллерами USB или ATA.
    Сам вызов ReadFile блокирует выполнение программы до завершения операции (но можно и асинхронно)
    Ответ написан
    4 комментария
  • Какая есть литература по обработке видео?

    15432
    @15432
    Системный программист ^_^
    www.ixbt.com/divideo/avisynth1.shtml
    при необходимости всегда можно написать свой плагин на C++
    по фильтрации шума - из простейших, фильтр Гаусса, медианный и билатеральный.

    есть лекции с нашего спецкурса по сжатию видео и анализу и обработке 3D видео.. но это несколько другое
    Ответ написан
    Комментировать
  • Программа прикладная математика и информатика. ВШЭ/ИТМО?

    15432
    @15432
    Системный программист ^_^
    Я учился на специальности "прикладная математика и информатика" в МГУ (факультет ВМК).
    Еще поступал в МГТУ им. Баумана и МИФИ (поступил).
    Что могу сказать - поступить как раз-таки несложно. Особенно учитывая довольно халявные олимпиады при университетах (Покори Воробьевы горы, Ломоносов, при бауманке тоже была) (которые как раз сейчас должны идти), дающие преимущества при поступлении (к примеру, "автоматом" 100 баллов ЕГЭ по физике). Не обязательно только жителям столицы - я с сибири прилетал на "Ломоносов", таки немного помогло при поступлении. Вылететь - сложно. Давали пересдавать экзамены по 5 раз (правда, после истории, когда студент нажаловался в ректорат, что ему не дали шестую пересдачу, стали разрешать только две). Учиться - тоже сложно. Математика, математика и ещё раз математика. Правда. Если вы считаете, что будете днями программировать - фиг, я насчитывал 14 различных предметов, связанных с математикой! Сложные теоремы, интегралы, диффуры - всё это вам предстоит на этой специальности. Точно хотите сюда?

    - Развлечения. Универ организовывал не слишком много всего. Посвящение в студенты, раздача бесплатных билетов в театр... Больше, если честно, не помню. Мы самостоятельно (при помощи старосты) организовывали походы в кино, музеи (всей группой). Это если времени хватает.

    - Программа. Скучные обязательные гуманитарные предметы - основы права, экономика, философия. Устаревшие лекции по компьютеру (ассемблер БЭСМ-6, древние основы ПК и т.д.). Про количество математики я уже писал. Многие студенты просто не ходят на лекции, забивают на учебу, но нормально сдают экзамены (сами знаете как).

    - Преподаватели. Большинству преподавателей за 60 лет, молодые - либо дети старшего поколения преподавателей, либо энтузиасты своего дела. Даже в МГУ платят откровенно мало. Но учат хорошо, хоть и строго. Всяких взяток и прочего лично я вообще не видел ни разу за все годы.

    - Общежития. Почти все общежития рядом с МГУ, максимум 20 минут пешком. На 1-3 курсах обычные общаги, 4-6 курсы - главное здание с шпилем. В основном старые комнаты с старой мебелью, но сейчас построили новый корпус. Вроде там теперь располагаются студенты.. Короче не знаю, я в подмосковье в квартире проживал.

    - другие факультеты. механико-математический факультет ещё жестче в плане математики. но там тоже программированию учат.

    P.S. если бы сейчас выбирал, пошёл бы в бауманку, с оборудованием работать люблю, там как раз этому обучают. у нас вообще не было курса аппаратной разработки.
    Ответ написан
  • Правильно ли я понял как устроена RAM?

    15432
    @15432
    Системный программист ^_^
    -- Просьба отвечать да или нет и не углубляться.
    как хотите

    1) нет
    2) да
    3) и да и нет
    4) да
    Ответ написан
    3 комментария
  • Как вставить значение переменной после % в printf()?

    15432
    @15432
    Системный программист ^_^
    Хм. Ну допустим, так:

    char s[10]; //буфер для строки формата
    sprintf(s, "%%%dd", n); //создаем строку формата. если n=3, в буфере s получится "%3d"
    printf(s, n); //эквивалентно printf("%3d", n);
    Ответ написан
    5 комментариев
  • Как на C++ узнать количество передаваемых аргументов?

    15432
    @15432
    Системный программист ^_^
    Функции на c++ по большей части имеют фиксированное число параметров, так что с определением числа параметров нет проблем - это известно на этапе компиляции.
    Функции с переменным числом параметров (например, printf(char* format, ...) )имеют свой механизм определения числа параметров, который вы сами должны закодить на ваше усмотрение. Можете первым аргументом подавать общее число аргументов, как и предлагаете.
    Ответ написан
    Комментировать
  • Почему так долго распаковывается архив весом всего 36мб?

    15432
    @15432
    Системный программист ^_^
    На каждый распаковываемый файл система должна завести новую запись в файловой системе. В результате жесткий диск вынужден мотать головкой чтения/записи туда-сюда на каждый мелкий файл, из-за чего очень сильно падает скорость. Если вы хоть раз копировали 10000 файлов в папке на медленную USB флешку, вы должны были заметить, что много мелких файлов копируются в сотни раз медленнее, чем один большой
    Ответ написан
    4 комментария