Ответы пользователя по тегу C++
  • (C++)Как возвести целое число в неотрицательную целую степень?

    Rsa97
    @Rsa97
    Для правильного вопроса надо знать половину ответа
    int power(int x, unsigned int p) {
      int answer = 1;
      while (p) {
        if (p & 1) {
          answer *= x;
        }
        p >>= 1;
        x *= x;
      }
      return answer;
    }
    Ответ написан
    3 комментария
  • C 1 или с 0 начинается индексация массива указателей аргумента командной строки?

    Rsa97
    @Rsa97
    Для правильного вопроса надо знать половину ответа
    https://msdn.microsoft.com/ru-ru/library/88w63h9k.aspx
    А падает программа из-за того, что вы не проверяете размер выделенного буфера перед использованием функции
    strcpy(char_ptr, "Thes is memory is located in the heap.");
    Если выделено меньше, чем длина вашей строки +1, то остаток строки записывается в произвольное место, вызывая ошибку.
    Ответ написан
    Комментировать
  • Как исправить ошибку "исключение в операции с плавающей точкой"?

    Rsa97
    @Rsa97
    Для правильного вопроса надо знать половину ответа
    Исключить деление на ноль.
    Ответ написан
    Комментировать
  • Что в моем коде не так?

    Rsa97
    @Rsa97
    Для правильного вопроса надо знать половину ответа
    Память для массив ptr в начале программы не выделяется, соответственно в InitArray() будет ошибка доступа к памяти.
    Неполное условие в начале функции Function1() - не учтён вариант, когда index+del > size. Остальную часть функции Function1() надо переписывать полностью, неверна вся логика работы.
    Ответ написан
    Комментировать
  • Как вывести значения в обратном порядке?

    Rsa97
    @Rsa97
    Для правильного вопроса надо знать половину ответа
    Для такого надо сначала найти максимальный разряд числа в указанной системе счисления а затем уже выводить в нужном порядке. И привыкайте давать переменным значащие имена, иначе потом сами будете путаться.
    int value = 13;
    int base = 2;
    int rank = 1;
    while (rank*base <= value)
      rank *= base;
    while (rank) {
      printf("%d", value/rank);
      value %= rank;
      rank /= base;
    }
    Ответ написан
    2 комментария
  • Как получить значение из вектора структур?

    Rsa97
    @Rsa97
    Для правильного вопроса надо знать половину ответа
    1 комментарий
  • Как правильно извлечь числа из битового поля?

    Rsa97
    @Rsa97
    Для правильного вопроса надо знать половину ответа
    Вопрос "правильности" в первую очередь связан с диапазоном значений, которые могут принимать a, b и c.
    Ваша запись будет работать для a и b от 0 до 255 и c от 0 до 32767.
    С отрицательными значениями, в принципе, работать можно, но надо дополнять знак при обратном преобразовании, например так (a от -128 до 127)
    a = x & 0xFF;
    if (a & 0x80) 
      a &= -1;
    Ответ написан
  • Как возвести в степень с помощью битовых операций в C++?

    Rsa97
    @Rsa97
    Для правильного вопроса надо знать половину ответа
    Тут даже без битовых операций можно обойтись, хватит одного сложения.
    x * y - к нулю x раз прибавить y
    xy - единицу y раз умножить на x

    Можно умножение сделать и битовыми операциями
    x * 2n = x << n
    y = y0 * 20 + y1 * 21 + ... + yn * 2n,
    где yi = 0 или 1
    Отсюда
    xy = y0 * (x << 20) + y1 * (x << 21) + ... + yn * (x << 2n)
    Ответ написан
    Комментировать
  • Как узнать находится ли число, рядом с другим определенным числом в матрице?

    Rsa97
    @Rsa97
    Для правильного вопроса надо знать половину ответа
    1. У матрицы 16x16 центр находится между ячейками, туда невозможно записать число.
    2. Определитесь, что значит "рядом". Если это только четыре соседних клетки, то значит |i1-i2|+|j1-j2| = 1, если допустимы диагонали, то |i1-i2|+|j1-j2| > 0 && |i1-i2| <= 1 && |j1-j2| <= 1
    Ответ написан
    Комментировать
  • Как устроены хэш-таблицы?

    Rsa97
    @Rsa97
    Для правильного вопроса надо знать половину ответа
    Открытая и закрытая адресации (в терминах данной статьи) отличаются поведением в случае коллизии, то есть добавления в хэш-таблицу записи с уже имеющимся в ней хэшем.
    При открытой адресации будет создан динамический список, голова которого находится в соответствующей ячейке хэш-таблицы, а элементами будут хэшируемые данные (или указатели на них).
    При закрытой - будет попытка найти слева (или справа, в зависимости от реализации) от уже занятой ячейки свободную, в которую будет записан хэш и хэшируемые данные.

    Очевидно, что открытый вариант несколько более сложен в реализации, но при этом гораздо более гибок и хорошо расширяем. Достоинством является то, что получив хэш простым перебором списка мы можем получить все значения, с таким хэшем.
    Закрытый вариант имеет фиксированное потребление памяти и более простую реализацию, но при многочисленных коллизиях даёт низкую эффективность, поскольку надо перебирать ячейки в поисках значений с нужным хэшем.
    Ответ написан
  • Double не выводит 0, как исправить?

    Rsa97
    @Rsa97
    Для правильного вопроса надо знать половину ответа
    А с чего вы взяли, что это ноль? Это именно 1.58871*10-10
    Арифметические операции с вещественными числами на компьютере выполняются с определённой погрешностью, она именно так и проявляется.
    Ответ написан
    6 комментариев
  • Что такое Байт Бит и как это работает не много о звуке?

    Rsa97
    @Rsa97
    Для правильного вопроса надо знать половину ответа
    Что я знаю о изображениях это RGB от 0 до 255 то есть выходит на каждый пиксель идет 3 байта, так ?

    Нет. Закодировать можно и в 1 бит на пиксел (чёрно-белое), и в 32 бита на пиксел (RGBA), и в любом другом варианте, например R3G3B2 - три бита на красный, три на зелёный, два на синий. Кроме того, практически никто не хранит в файле RAW-изображение, его, как правило, сжимают (JPEG, PNG, GIF, и т.д.), после чего для получения пикселов необходимо использовать специальные алгоритмы декодирования.
    Что я знаю о звуке (тут не много темный лес для меня) есть колебания это ГЦ к примеру 10 то есть 10 колебаний за 1 с и есть разное так сказать качество звука 8-16 байт как я понимаю , возьмем 8 байт

    По теореме Котельникова для сигнала с максимальной частотой 22КГц (стандартное качество звука) необходима частота дискретизации не менее 44КГц. На один сэмпл, как правило используют 8 или 16 бит (не байт), при этом в файле может быть не одна дорожка. И, опять же, при записи в файл звук обычно сжимают (MP3, OGG, FLAC, и т.д.), соответственно для его воспроизведения тоже нужны специальные алгоритмы декодирования.
    Ответ написан
    Комментировать
  • Почему при выводе на экран через форматы %d и %u получаются числа -14 и 4294967282?

    Rsa97
    @Rsa97
    Для правильного вопроса надо знать половину ответа
    101010 = 3F216, значит в char запишется F216
    Когда вы пробуете печатать как целое число, то значение приводится к типу int, соответственно получается FFFFFFF216
    Как знаковое (%d), значение FFFFFFF216 = -1410
    Как беззнаковое (%u), FFFFFFF216 = 429496728210
    Ответ написан
    3 комментария
  • В чём различие между i++ и i+1, когда речь идёт в о массивах?

    Rsa97
    @Rsa97
    Для правильного вопроса надо знать половину ответа
    i+1 - возвращает значение i+1.
    i++ - увеличивает значение i на 1, возвращает значение i до увеличения.
    ++i - увеличивает значение i на 1, возвращает новое значение i.
    Ответ написан
    5 комментариев
  • Как разбить число на элементы массива в с++?

    Rsa97
    @Rsa97
    Для правильного вопроса надо знать половину ответа
    Учитывая, что в условии допускается 100000-значное число, то работать с ним как с числом в С++ так просто не получится. Задача решается с помощью подсчёта цифр как символов вводимых строк. Для каждой из двух входных строк надо посчитать количество каждых цифр. Получится два массива по 10 элементов. Затем, начиная с 9 надо вывести цифры в количестве, равном минимальному из двух значений соответствующих ячеек массива.
    Например:
    280138
    798081
    Первый массив:
    | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 |
    +---+---+---+---+---+---+---+---+---+---+
    | 1 | 1 | 1 | 1 | 0 | 0 | 0 | 0 | 2 | 0 |
    
    Второй массив:
    | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 |
    +---+---+---+---+---+---+---+---+---+---+
    | 1 | 1 | 0 | 0 | 0 | 0 | 0 | 1 | 2 | 1 |
    
    Минимумы:
    | 9 | 8 | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
    +---+---+---+---+---+---+---+---+---+---+
    | 0 | 2 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 1 |
    
    Результат:
    8810
    Ответ написан
  • Какое обьявление массива в c++?

    Rsa97
    @Rsa97
    Для правильного вопроса надо знать половину ответа
    Массив - это базовая структура, вектор - расширенная. Вектор эмулирует массив, давая прямой доступ к элементам, и, дополнительно, позволяет вставку/удаление элементов, поддерживает счётчик количества элементов.
    Ответ написан
    Комментировать
  • Что не так с кодировкой?

    Rsa97
    @Rsa97
    Для правильного вопроса надо знать половину ответа
    Библиотеки добавляют разные окончания, если строка не кратна восьми символам.
    В JS:
    if (block.length < 8) {
            var count = 8 - block.length;
            while (0 < count--) {
              block += "\0";
    }

    В C++:
    size_t padding_length = dst.size() % sizeof(uint64_t);
      if (padding_length == 0) {
        padding_length = sizeof(uint64_t);
      } else {
        padding_length = sizeof(uint64_t) - padding_length;
      }
    
      for (size_t i = 0; i < padding_length; ++i) {
        dst.push_back(static_cast<char>(padding_length));
      }

    Не хотите менять код библиотек - сами дополняйте строки до длины, кратной восьми.
    Ответ написан
    Комментировать
  • Профессионально ли реализовал алгоритм?

    Rsa97
    @Rsa97
    Для правильного вопроса надо знать половину ответа
    Нет. Контрольные примеры:
    <a href="#hello">hello</a>
    <a href="site.ru?12">hello</a>
    <a href="hello-1">hello</a><a href="hello-2">hello</a>
    <a href="hello">hello<a href="hello-2">hello</a>

    Ну и скобок накручено почём зря.
    P.S. Ещё парочка примеров:
    <a title="привет" href="#hello">hello</a>
    <a      href="test">test</a>
    Ответ написан
  • Точность рекуррентной формулы?

    Rsa97
    @Rsa97
    Для правильного вопроса надо знать половину ответа
    Вы вывели формулу получения k+1 элемента из k-го, а в программе используете её для получения k-го элемента из k-1. Это разные формулы.
    Ответ написан
    Комментировать
  • Найдите, пожалуйста, ошибку в коде c++?

    Rsa97
    @Rsa97
    Для правильного вопроса надо знать половину ответа
    Первая ошибка - ; после for
    Вторая - power надо уменьшать в каждой итерации.
    Ну и общая неэффективность.
    for (power = 128; power > 0; power >>= 1)
      printf((denary & power ? "1" : "0");
    Ответ написан
    6 комментариев