Задать вопрос
  • Обратимы ли функции S0, S1, E0, E1 из алгоритма SHA-256?

    jcmvbkbc
    @jcmvbkbc
    > xor обратим
    Veliant каким образом обратим xor? Возьмём пример ещё проще: y= x ^ rol(x, 1). y[0] = x[0] ^ x[31]. y[31] = x[31] ^ x[30]. .... Как нам знание y поможет однозначно восстановить x?
  • Как вызвать функциональный объект?

    jcmvbkbc
    @jcmvbkbc
    > При описании operator () указано два формальных параметра, а при использовании его в вызове for_each передается только один (j).
    ipc_ngs: это не оператор (), это конструктор с одним параметром. Тоже, кстати, несуществующий.
  • Почему это моветон?

    jcmvbkbc
    @jcmvbkbc
    > Еще одна штука. C99 - плохой ориентир.
    Евгений Шатунов: автор вопроса спрашивает про K&R. Но K&R -- это не стандарт. Ближайший к нему стандарт -- это C89, но его исходный текст найти существенно сложнее, чем текст C99.

    > Лучше использовать самые последние стандарты C и C++ с прямыми ссылками на приводимые цитаты.
    Может быть. Однозначно лучше, чем ссылки на блоги, правда?
  • Почему это моветон?

    jcmvbkbc
    @jcmvbkbc
    > Непонятно, зачем тебе захотелось вставлять упоминания на меня и Алексея.
    Евгений Шатунов: упоминание -- это стандартный способ привлечь внимание на тостере. Вы оба дали неправильные ответы и, я надеюсь, хотели бы узнать правильный.

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

    Странные и непонятные? Ну давай ещё раз, другими словами.
    Мой здравый смысл подсказывает мне, что дача неправильных ответов должна подкрепляться негативно, чтобы в следующий раз человек задумался. Я надеялся, что твоя способность рефлексировать позволит тебе увидеть своё поведение описанное в моих саркастических строчках, и лёгкий укол стыда от осознания неэтичности такого поведения будет настигать тебя впредь, всякий раз когда ты захочешь это поведение повторить.
  • Почему это моветон?

    jcmvbkbc
    @jcmvbkbc
    > Изучи текст в блоге Алены на эту тему, ссылку дал Алексей.
    Евгений Шатунов: Вот я ещё раз специально перечитал статью по ссылке. Где там объясняется случай, когда модификация объекта между точками следования одна, но есть чтения, не используемые для вычисления нового значения объекта?

    И в чём смысл ссылаться на частный блог вместо стандарта? Это как предлагать вместо "Войны и мира" читать отзыв критика о произведении в учебнике.
  • Почему это моветон?

    jcmvbkbc
    @jcmvbkbc
    > Какие правила нужно учитывать, для написания ответов в Toster?
    Евгений Шатунов: эта ссылка имела бы смысл, будь это официальные правила. Пока это просто мнение, я буду руководствоваться собственным здравым смыслом в написании ответов.

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

    Потому что проблема вопросов и ответов в интернете не в том, что невозможно найти правильный ответ на вопрос, из-за того, что ответов мало, а в том, что невозможно найти правильный ответ на вопрос, из-за того, что много неправильных ответов. Информация тонет в шуме.

    По ссылке человек думает, что тостер -- это место для филантропии. Я думаю, что тостер -- место для философии.
  • Работа со звуком С++ как?

    jcmvbkbc
    @jcmvbkbc
    Пример выводит на стандартный вывод wav-файл содержащий простой PCM, по 3 секунды ноты ля с первой октавы до самой высокой, представимой заданной частотой дискретизации.
  • Работа со звуком С++ как?

    jcmvbkbc
    @jcmvbkbc
    FREQ, CHANNELS и SAMPLE_WIDTH можно менять в разумных пределах.
  • Работа со звуком С++ как?

    jcmvbkbc
    @jcmvbkbc
    > не знаю какой формат лучше для начала у изображений
    Sratimon1: Мой любимый: XPM.
    Для звука текстовых аналогов, вроде, нет.

    Вот пример, который я использовал для генерации тестовых тонов: https://gist.github.com/jcmvbkbc/deca796d5025298f3...
  • Как устранись ошибку с вложенными спецификаторами имени?

    jcmvbkbc
    @jcmvbkbc
    > Ммм а откуда взялся идентификатор T? Просто если объявить его в заголовке
    не надо объявлять его в заголовке. Там уже есть шаблонный класс Vector3 с двумя параметрами-типами в шаблоне. Как конкретно называются параметры -- не важно, хоть так напиши:

    template <class Foo, typename Bar>
    Vector3<Foo> &Vector3<Foo, Bar>::operator+=(const Vector3<Foo> &addVector) {
        this->x += addVector.x;
        this->y += addVector.y;
        this->z += addVector.z;
        return *this;
    }


    > при компиляции вылезает ошибка use of undeclared identifier 'T',
    Я привёл конкретный текст, который можно вставить в качестве оператора +=, он компилируется.

    > по поводу двух параметров в шаблоне это не совсем так, второй параметр насколько я знаю не берется в расчет
    Второй параметр есть? Есть. Определение шаблонного класса с одним параметром есть? Нет.
  • Как составить рекурсию по возрастанию?

    jcmvbkbc
    @jcmvbkbc
    ок, ответ на С такой:

    #include <stdio.h>
    
    void print(int *array, int *index, int n_indices)
    {
        int i;
        for (i = 0; i < n_indices; ++i)
            printf("%d ", array[index[i]]);
        printf("\n");
    }
    
    void f(int *array, int start, int n, int *index, int n_indices)
    {
        int i;
        for (i = start; i < n; ++i) {
            index[n_indices] = i;
            print(array, index, n_indices + 1);
            f(array, i + 1, n, index, n_indices + 1);
        }
    }
    
    int main()
    {
        int array[] = {1, 2, 3};
        int index[3];
        f(array, 0, 3, index, 0);
        return 0;
    }
  • Как составить рекурсию по возрастанию?

    jcmvbkbc
    @jcmvbkbc
    Нет, непонятна. Что должна принимать на вход функция и какой вывод от неё ожидается?
    А именно:
    - должна ли она принимать упорядоченный массив или любой
    - должна ли она печатать элементы массива по возрастанию индекса или по возрастанию значения
    Попробуйте ответить на них и увидите, что некоторые варианты ответов тянут за собой другие вопросы.
  • Что за "Ошибка сегментирования (сделан дамп памяти)"?

    jcmvbkbc
    @jcmvbkbc
    > Что за «Ошибка сегментирования (сделан дамп памяти)»
    == Программа выполнила недопустимую операцию и будет закрыта.
  • Что за "Ошибка сегментирования (сделан дамп памяти)"?

    jcmvbkbc
    @jcmvbkbc
    Не, не там ошибка. Ошибка в int num = atoi(argv[1]); потому что argc == 1
  • Почему при прерывании работы сервера (Ctrl + C) recv не возвращает ошибку?

    jcmvbkbc
    @jcmvbkbc
    > после отсылки всех данных нужно выполнить еще один send, передав какой-нибудь мусор, чтобы быть уверенным в том, что данные 100%-но доставлены?
    Нет. "Один из последующих" -- это не обязательно следующий. Нужно либо организовать подтверждение в своём протоколе, либо закрыть сокет на передачу вызвав shutdown(socket, SHUT_WR).
  • Почему при прерывании работы сервера (Ctrl + C) recv не возвращает ошибку?

    jcmvbkbc
    @jcmvbkbc
    > Тогда ОС будет ожидать восстановление канала?
    Будет какое-то время, зависит от настроек TCP (keep-alive) и от того, есть ли принятые для передачи но не доставленные данные.
  • Почему при прерывании работы сервера (Ctrl + C) recv не возвращает ошибку?

    jcmvbkbc
    @jcmvbkbc
    > как посылающая программа узнает об ошибке?
    один из последующих вызовов send/recv завершится с ошибкой или select отметит этот сокет как имеющий данные для чтения или получивший исключение, после чего вызов recv завершится с ошибкой.
  • Почему при прерывании работы сервера (Ctrl + C) recv не возвращает ошибку?

    jcmvbkbc
    @jcmvbkbc
    > Я правильно понимаю, что на момент выхода из функции send данные уже доставлены?
    Не обязательно. На момент выхода из send локальный TCP стек взялся доставить ваши данные, ничего сверх этого не гарантируется.
  • Почему при прерывании работы сервера (Ctrl + C) recv не возвращает ошибку?

    jcmvbkbc
    @jcmvbkbc
    > Я использую TCP, почему нет гарантии, что принято будет столько, сколько отправит send
    Bosca Bosca: потому что TCP -- потоковый протокол. Он гарантирует что все отправленные данные будут доставлены, но интерфейс BSD sockets, на котором основан winsock не гарантирует, что принимаемые блоки данных как-то будут соответствовать отправляемым.

    > почему если не получилось принять весь блок, recv не возвращает ошибку
    потому что для потокового протокола это не ошибка, вы получите остальные данные в следующем recv.

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