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

    Rsa97
    @Rsa97
    Для правильного вопроса надо знать половину ответа
    Никакого переполнения не будет. Переполнение возникает когда результат операции становится больше максимально допустимого значения для конкретного типа данных. Для типа double это 1.7976931348623157E+308.
    Ответ написан
    5 комментариев
  • Почему папка весит 0 байт?

    Rsa97
    @Rsa97
    Для правильного вопроса надо знать половину ответа
    Собственно папку можно рассматривать как особый файл, который содержит описания вложенных в эту папку других файлов и папок. То есть, если в папке ничего нет - то и размер этого файла нулевой, сама папка описана в родительской и её данные занимают место там.
    Ответ написан
    2 комментария
  • Зачем нужно данное условие?

    Rsa97
    @Rsa97
    Для правильного вопроса надо знать половину ответа
    Почему? В строке нулевой длины t[0] == 0
    Ответ написан
    Комментировать
  • По разному считается или ошибка в логике?

    Rsa97
    @Rsa97
    Для правильного вопроса надо знать половину ответа
    Ошибка у вас в логике. Смотрите, пусть есть два участка - 20 миль / 1 галлон и 50 миль / 2 галлона. Если найти показатель миль/на галлон для каждого участка, то получим 20 и 25. Среднее арифметическое - 22.5. Но ведь реально мы проехали 70 миль на 3 галлонах, то есть 70/3 = 23.(3) ≠ 22.5
    Ответ написан
    Комментировать
  • Сколько памяти занимает int в C?

    Rsa97
    @Rsa97
    Для правильного вопроса надо знать половину ответа
    Конкретный размер int зависит от архитектуры, под которую идёт компиляция. Начиная со стандарта C99 добавлены платформонезависимые типы, для int они определены в stdint.h
    Ответ написан
    Комментировать
  • Как реализовать сумму дробей?

    Rsa97
    @Rsa97
    Для правильного вопроса надо знать половину ответа
    А что там придумывать? Сложение - первый класс начальной школы, операции с дробями - пятый класс.
    Просто последовательно складывайте дроби в натуральном представлении.
    Ответ написан
    4 комментария
  • Как записать 256 бит в массив из 16 слов?

    Rsa97
    @Rsa97
    Для правильного вопроса надо знать половину ответа
    for (int i = 0; i < 255; i++) {
      arr[i / 16] = (arr[i / 16] & ~(1 << (i % 16))) | (func(i) << (i % 16));
    }
    Ответ написан
    Комментировать
  • Куда теряется 1 в цикле при работе с мк?

    Rsa97
    @Rsa97
    Для правильного вопроса надо знать половину ответа
    В первом варианте у вас в цикле i получает значение 8, затем в начале следующего цикла сначала идёт попытка зажечь девятый светодиод и только потом i уменьшается до 7. Ну и программа написана неэффективно.
    int main(void)
    {
      DDRD = 0xFF;
      PORTD = 0x00;
      char position = 0;
      char step = -1;
      while(1) {
        PORTD = (1 << position);
        if (0 == position || 7 == position) {
          step = -step;
        }
        position += step;
        _delay_ms(200);
      } 
    }
    Ответ написан
    8 комментариев
  • Обработка разнобитных bmp картинок, в чем конкретная разница?

    Rsa97
    @Rsa97
    Для правильного вопроса надо знать половину ответа
    В формате BMP в режимах 32, 24 и 16 bpp каждая группа байтов хранит непосредственно цвет пиксела. В режимах 1, 4 и 8 bpp хранится номер цвета из палитры.
    Ответ написан
    Комментировать
  • Поиск групп подобных треугольников среди массива треугольников по сторонам. Как реализовать?

    Rsa97
    @Rsa97
    Для правильного вопроса надо знать половину ответа
    Для начала, чтобы было проще искать, лучше сохранить стороны треугольников по возрастанию, то есть z[j].n <= z[j].m <= z[j].o
    Затем, вспоминаем правило подобия треугольников с учётом сортировки длин сторон:
    (z[i].n / z[j].n) = (z[i].m / z[j].m) = (z[i].o / z[j].o)

    Перепишем эти условия для компьютера:
    (z[i].n / z[j].n) = (z[i].m / z[j].m) => ((z[i].n * z[j].m) / (z[i].m * z[j].n)) = 1
    (z[i].n / z[j].n) = (z[i].o / z[j].o) => ((z[i].n * z[j].o) / (z[i].o * z[j].n)) = 1

    Поскольку вещественные вычисления на компьютере дают погрешность, то условия надо преобразовать (epsilon - константа, задающая точность вычислений):
    abs(((z[i].n * z[j].m) / (z[i].m * z[j].n)) - 1) < epsilon && 
    abs((z[i].n * z[j].o) / (z[i].o * z[j].n)) - 1) < epsilon

    Теперь начиная с первого треугольника, относим его к классу 1 проверяем его на подобие остальным и там, где треугольники подобны записываем их в класс 1.
    Затем ищем треугольник, у которого класс не задан, относим его с следующему классу, проверяем его подобие остальным бесклассовым треугольникам, для подобных записываем тот же класс.
    Продолжаем, пока все треугольники не будут отнесены к одному из классов.
    Ответ написан
  • Как переводить в негатив/черно-белое bmp на С?

    Rsa97
    @Rsa97
    Для правильного вопроса надо знать половину ответа
    Если хотите делать всё самостоятельно, то начните, например, отсюда: https://en.wikipedia.org/wiki/BMP_file_format
    В принципе, для b/w (1bpp) и grayscale (8bpp) достаточно перевернуть палитру.
    Ответ написан
    8 комментариев
  • Как перевести на си в HEX код(bmp)?

    Rsa97
    @Rsa97
    Для правильного вопроса надо знать половину ответа
    Так вы выводите данные как строку (%s). Что вы ожидаете увидеть?
    Ответ написан
    Комментировать
  • Как изменить определенное кол-во символов внутри строки (язык Си)?

    Rsa97
    @Rsa97
    Для правильного вопроса надо знать половину ответа
    В условии задачи сказано, что надо заменить все последовательности, искать самую длинную не надо. Самый простой способ - создать ещё один массив того же размера и перебирая символы первого заносить во второй готовую последовательность. Также можно сделать всё в одном массиве, читая и записывая по двум разным указателям.
    Ответ написан
  • Почему в строке 35 структура объявлена таким образом?

    Rsa97
    @Rsa97
    Для правильного вопроса надо знать половину ответа
    Структура rusage определена в resource.h
    Ответ написан
    Комментировать
  • Массив uint8_t [8] на переменную uint64_t?

    Rsa97
    @Rsa97
    Для правильного вопроса надо знать половину ответа
    union {
      uint8_t  u8[8];
      uint64_t u64;
    } var;

    Или
    uint8_t var[8];
    *((uint64_t *)var);

    Или
    uint64_t var;
    ((uint_8 *)&var)[0];
    ((uint_8 *)&var)[7];
    Ответ написан
    5 комментариев
  • Как устроены хэш-таблицы?

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

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

    Rsa97
    @Rsa97
    Для правильного вопроса надо знать половину ответа
    Из-за особенностей машинного представления вещественных чисел сравнивать их напрямую крайне не рекомендуется. Попробуйте вместо %f использовать %e и, скорее всего, обнаружите, что в массиве вовсе не нули.
    Ответ написан
    6 комментариев
  • Как пользоваться stdint.h?

    Rsa97
    @Rsa97
    Для правильного вопроса надо знать половину ответа
    У вас в константе единичка лишняя
    184467440737095511615
    Ответ написан
    Комментировать
  • Точность рекуррентной формулы?

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

    Rsa97
    @Rsa97
    Для правильного вопроса надо знать половину ответа
    Как правило определяют структуру, соответствующую данным, затем создают переменную с типом этой структуры, считывают данные в неё и просто обращаются к полям структуры.
    #pragma pack(push,1)
    typedef _websocketPacket {
      unsigned char one; // здесь ваша 1
      unsigned char indexElement;
      unsigned char rest[18];
    } wsPacket;
    #pragma pack(pop)
    wsPacket myData;
    Ответ написан
    Комментировать