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

    @res2001
    Developer, ex-admin
    Главное нужно помнить, что память - она плоская, т.е. представляйте ее просто набором байт следующих друг за другом. И не важно, какие структуры вы в плоской памяти городите, трехмерные или пяти - они все должны отображаться на плоскую память.
    Когда ОС загружает программу на выполнение она разделяет всю память, доступную процессу на 3 группы:
    1. область куда загружается код программы. Обычно эта память помечается ОС только для чтения. И если туда будет попытка записи, то это вызовет исключение в процессоре.
    2. Область стека. Адрес вершины стека записывается в регистр процессора. Когда в программе выделяются локальные переменные они помещаются именно в стек.
    Фактически для помещения переменной в стек не надо выделять память. Компилятор при сборке программы считает смещения относительно начала стека и обращение к локальным переменным происходит по указателю на начало стека + смещение.
    Со стеком интересная история: ОС выделяет под стек фиксированный размер памяти, но сам размер стека нигде не хранится (в явном виде не хранится, но его в можно узнать), хранится только указатель на начало. Поэтому всегда есть шанс переполнения стека. Например если сделать достаточно глубокую рекурсию.
    В современных ОС под стек выделяется достаточно большой объем памяти, поэтому переполнений как правило не происходит. Но иногда для программы требуется больший объем стека, тогда нужный размер указывается с помощью опций компилятора, этот размер зашивается в исполняемый файл и когда загрузчик ОС грузит программу он считывает размер стека и выделяет нужную область памяти.
    Если вы в своей программе столкнулись с переполнением стека, то не спешите выделять больший объем памяти для стека, возможно у вас программная ошибка из-за которой происходит переполнение.
    3. Куча. Там выделяется память для динамических переменных. Память выделяется ОС по запросу. Обычно в своей программе вы используете менеджер кучи стандартной библиотеки, который в свою очередь обращается за выделением памяти к ОС. Менеджер кучи из стандартной библиотеки можно поменять, есть бесплатные свободно распространяемые реализации. Или сделать свой или пользоваться вызовами ОС для выделения памяти.

    Как-то так.
    Ответ написан
    4 комментария
  • Как рассчитать сложность алгоритма?

    @res2001
    Developer, ex-admin
    Допустим при создании массива из 5 элементов можно добавить if и добавлять значение в начало или конец массива

    Ну одним IF тут не обойтись и не обязательно в начало или в конец добавлять, что варианта добавления между элементами вы не рассматриваете? Это когда в массиве только 1 элемент - будет 1 if. Но и с одним элементом есть проблема - в какое место в массиве вы его поместите изначально, ведь вы, в общем случае, не знаете какие дальше будут элементы.
    Короче - оно примерно то на то и выйдет. Только если в варианте с последующей сортировкой, у вас есть алгоритм быстрой сортировке, то в варианте постоянно отсортированного массива - не известно на сколько хорошо вам удастся это реализовать.
    И не ясно на каком ЯПе вы все это делаете.
    Ответ написан
    Комментировать
  • Как определить частоты играющих струн?

    @res2001
    Developer, ex-admin
    После БПФ получаете комплексный массив, где каждый элемент - амплитуда определенной частоты.
    Частота по сути - это индекс массива.
    Но в элементе может быть не одна частота - количество частот в элементе массива зависит от частоты дискретизации сигнала и от длины БПФ: freq_length = sampling_rate / fft_length;
    Если sampling_rate == fft_length, то в элементе массива единственная частота.
    freq_length - разрешение элемента массива по частоте.
    Анализировать можно только половину массива (см. про частоту Найквиста), остальные отсчеты - это сопряжение первой половины. Соответственно реально получить частоты до sampling_rate / 2 - 1.
    В вашем случае, видимо, нужно найти энергетический спектр: сложить квадраты действительной и мнимой частей всех частот. Найти максимумы - это и будут ваши частоты аккорда - лучше построить график и посмотреть визуально, что получится.
    Ответ написан
    6 комментариев
  • Как вы программируете используя слепой набор?

    @res2001
    Developer, ex-admin
    Не использую слепой набор для кода, т.к. не нужно.
    А вы всегда пишете код как диктант? А думать когда?
    У меня не уходит много времени на именно написание, гораздо больше занимает разнообразный анализ, тестирование и отладка.
    Ответ написан
    3 комментария
  • Как в VBA дату преобразовать в количество часов?

    @res2001
    Developer, ex-admin
    Может хватит формулы?
    Вообще дата в екселе - это дробное число, где целая часть - количество дней от какой-то даты, а дробная - количество секунд или мл.сек. В общем если взять целую часть и умножить на 24 получится количество часов.
    Для VBA есть функция DateDiff, которая возвращает разницу между двумя датами в заданных интервалах. Например, чтобы получить разницу в часах между двумя датами:
    DateDiff("h", date1, date2)
    Ответ написан
    2 комментария
  • Программирование или что-нибудь другое?

    @res2001
    Developer, ex-admin
    Только профессией не требующей специальной квалификации можно заниматься не напрягаясь, освоив один раз основное движение и до пенсии его повторяя. Так что любая специальность требует в дальнейшем развития. Где-то это проще, где-то сложнее.
    Программирование не самая простая штука, но и не сильно сложная - вы же уже делаете сайты, так что практически программист. Есть вещи и сложные, но туда можно не соваться, если нет желания.
    В основном программирование - рутина. Но и везде так же - жизнь это не вечный праздник - праздники по расписанию (посмотрите в календарь), а в остальные дни - рутина, привыкайте. И да, если каждый день - праздник, то и праздник становиться рутиной :-)
    Большинство задач в программировании довольно типовые, а потому рутинные, но если захотеть можно найти и интересные задачи, но там, обычно, есть некоторые сложности, поэтому придется напрячься. Кроме того себя можно развлекать и самому, например осваивать новые подходы и технологии в программировании, а можно просто бухать.
    Если получается программировать и нет отвращения - занимайтесь этим. Если есть что-то что получается лучше или интереснее, то лучше переключиться туда.
    Но попытайтесь подумать на шаг вперед - сможет ли ваша профессия обеспечить вам нормальный уровень жизни.
    Кстати, если что, уровень жизни то же можно подвигать в разные стороны :)
    Ваша жизнь, выбирайте.

    PS: Ну и C# - это не совсем "для телефонов". Когда вы последний раз видели смарт под виндой? Они конечно есть в природе, но это экзотика, имхо. Для телефонов больше Java подходит.
    Ответ написан
    3 комментария
  • Есть ли в российских ГОСТах (ЕСПД) определение "дистрибутив программы" или схожее?

    @res2001
    Developer, ex-admin
    В "современных" ГОСТах ЕСПД и ГОСТ 34 нет понятия дистрибутива, на сколько я знаю.
    Но вам никто не мешает ввести это понятие самому, описать процедуру установки ПО в рамках документа "Описание программы" или "Описание применения", в руководстве программиста или системного программиста описать процедуру создания дистрибутива.
    Ответ написан
    2 комментария
  • Что вы думаете насчет книги Брайана Кернигана "Язык программирования С"?

    @res2001
    Developer, ex-admin
    Книга Дейтелов то же очень не плоха. Но там и С++ то же есть. В K&R С++ нет.
    Ответ написан
    Комментировать
  • Что читать после Лафоре?

    @res2001
    Developer, ex-admin
    Начинайте уже писать.
    Ответ написан
    6 комментариев
  • Случайное число(своя функция) и вопрос про случайные события?

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

    @res2001
    Developer, ex-admin
    Видимо какой-либо алгоритм экстраполяции вам подойдет больше, чем нейронная сеть.
    Ответ написан
    5 комментариев
  • Когда применяется локаль?

    @res2001
    Developer, ex-admin
    А ты попробуй сделать в винде консольное приложение на С++ с выводом "Привет мир" по русски, сразу отпадут вопросы про локаль.
    Ответ написан
    Комментировать
  • Где и как хранится имя переменной?

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

    @res2001
    Developer, ex-admin
    Переложить обработку на сервер БД, скриптом PHP только стартовать и получать результат.
    Ответ написан
    Комментировать
  • Как оптимизировать программу на с++?

    @res2001
    Developer, ex-admin
    Само решение задачи оптимизировать бесполезно, т.к. тут на столько все просто, что любые оптимизации дадут прирост в 1-2 процессорных инструкции, а это в любом случае будет меньше 1 млсек.
    Попробуйте исполнить ваш тест несколько раз и вычислить среднее время, если это возможно.
    Или вставьте в свою программу вычисление времени выполнения и больше не беспокойтесь по этому поводу: www.cplusplus.com/reference/ctime/clock/?kw=clock
    Ответ написан
    Комментировать
  • Как узнать из-за чего Win 10 зависает(грузится медленно)?

    @res2001
    Developer, ex-admin
    В журнал винды загляните, там порой появляется полезная информация.
    Ответ написан
  • Можно ли сделать массив меток goto?

    @res2001
    Developer, ex-admin
    Возможно setjmp/longjmp это то что вам нужно?
    Ответ написан
    Комментировать
  • Как можно преобразовать число из 3 байт в число из 2 байт?

    @res2001
    Developer, ex-admin
    Преобразовать можно - отрезав лишний байт, но видимо этот способ вам не очень подходит.
    А для других способов нужно больше информации - какой язык программирования, что значит "адрес является его серийным номером", что это за адрес у вас такой, как вы потом будете использовать эти 2 байта?
    Ответ написан
    Комментировать
  • Что изучать для написания своего кроссплатформенного приложения?

    @res2001
    Developer, ex-admin
    Stdlib, boost, Qt
    Ответ написан
    Комментировать
  • Как вести историю изменений сущностей в системе?

    @res2001
    Developer, ex-admin
    В таблицу где лежит информация о сущности добавьте поле DBEG as datetime.
    При создании сущности в это поле заносите текущую дату/время. При изменении сущности - не меняете запись сущности, а добавляете новую запись с текущим значением даты/времени в DBEG. Отбор текущей сущности будет происходить так:
    select top 1 * from table where ID= order by DBEG desc
    Таким образом сохраняется вся история, ну и не плохо бы иметь интерфейс для просмотра истории.
    Это общий подход. Если нужно реализовать хранение изменений для определенных аттрибутов сущности, то подобные аттрибуты нужно выделить в отдельную таблицу и в этой таблице применить аналогичный подход, при этом сама сущность будет в единственном экземпляре, а вот ее некоторые аттрибуты будут с историей.
    Аттрибуты можно выделять в таблицу по типам данных, допустим отдельная таблица для целых, строк, вещественных, дат и т.п. Либо одна общая таблица с соответствующими полями для каждого типа данных.
    Ответ написан
    1 комментарий