• Как выучить язык ассемблера?

    ematveev
    @ematveev
    PHP разработчик / руководитель / писатель
    установите себе вторую операционку типа Колибри, она вся написана на ассемблере, там есть компилятор и т.д. кроме того, найдите пару учебников и справочников по ассемблеру. и начинайте делать пробные небольшие программы. постепенно научитесь!
    Ответ написан
    Комментировать
  • Как узнать возраст файла в Ассемблере?

    jcmvbkbc
    @jcmvbkbc
    "I'm here to consult you" © Dogbert
    Как мне найти возраст файла?

    Сравнить creationTime который возвращает GetFileTime с текущим временем которое возвращает GetSystemTimeAsFileTime. 3 дня -- это 3 * 24 * 60 * 60 * 10000000 100-наносекундных интервала (в таких единицах измеряется FILETIME).
    Чтобы упростить себе задачу можно сравнивать только старшие части (dwHighDateTime) структур FILETIME, вес младшей части -- 429 секунд, меньше 10 минут.
    Типа того:

    invoke GetFileTime, hFile, addr ftCreate, NULL, NULL
      invoke GetSystemTimeAsFileTime, addr ftNow
      mov eax, ftNow.dwHighDateTime
      sub eax, ftCreate.dwHighDateTime
      cmp eax, (3 * 24 * 60 * 60 * 10000000 / 0x100000000)
      jg <файл старше 3 дней>
      /* иначе файл младше 3 дней */

    Если упрощать не хочется и нужно отмерить в точности 3 дня, то хвост можно переписать так:
    mov eax, ftNow.dwHighDateTime
      sub eax, ftCreate.dwHighDateTime
      cmp eax, (3 * 24 * 60 * 60 * 10000000 / 0x100000000)
      jg <файл старше 3 дней>
      jl <файл младще 3 дней>
      mov eax, ftNow.dwLowDateTime
      sub eax, ftCreate.dwLowDateTime
      cmp eax, (3 * 24 * 60 * 60 * 10000000 % 0x100000000)
      jg <файл старше 3 дней>  
      /* иначе файл младше 3 дней */
    Ответ написан
    2 комментария
  • Как избежать дублирования последней строки из файла?

    wataru
    @wataru
    Разработчик на С++, экс-олимпиадник.
    Вам надо проверять, что вернет fscanf. Если оно у вас вернет что-то меньшее 2, то значит оно не смогло прочитать обе строки. В этом случае надо выходить из цикла и не класть новую запись в таблицу
    Ответ написан
    Комментировать
  • Почему нет данных в хэш-таблице?

    @res2001
    Developer, ex-admin
    malloc не зануляет выделенную память. После выделения mallocом в выделенной памяти содержится мусор.
    А у тебя в ht_hasItem определение занят ли элемент идет через сравнение с NULL. Когда выделил array надо обнулить массив memsetом или использовать calloc для выделения.
    Ответ написан
    2 комментария
  • Как вставить определенное слово в строку в необходимом мне месте?

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

    Во-первых, зачем вам структура из четырех строк? Зачем вам массив из нее на 1000 элементов.

    Вот это вообще что за хрень?
    for (i; i < 1; i++) {

    Вас этот цикл из одной итерации нисколько не напрягает?

    Далее, в задании четко сказано
    Разработать функцию, которая вставляет в предложение заданное слово. Новое слово должно стать в предложении n-м (n задается как третий параметр функции)


    Т.е. вам надо взять одну функцию, и вызвать ее 3 раза с передавая туда то 1, то 2, то 5, а не писать 3 Poshuk'а.

    Далее, во всех ваших функциях вы обращаетесь к list[] по разным индексам, но у вас только один первый элемент массива вводится (опять, нахрена вам целый массив структур, если в задаче дано ровно 3 строки и одно слово?!)

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

    Чтобы сдвигать символы в строке вам надо сначала найти ее длину, потом с длина+k циклом пройтись назад до крайнего сдвигаемого индекса и присваивать текущему символу значение символа по индексу i-k.
    Ответ написан
    Комментировать