Ответы пользователя по тегу C
  • Зачем нужно данное условие?

    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;
    Ответ написан
    Комментировать
  • Преобразование инта в строку?

    Rsa97
    @Rsa97
    Для правильного вопроса надо знать половину ответа
    void wrInt(int val) {
      int l = 1, v = val;
      if (v < 0) {
        write(1, "-", 1);
        v = -v;
      }
      while ((v = v/10) > 0)
        l *= 10;
      while (l > 0) {
        v = val % l;
        ft_putchar(v + '0');
        val -= v*10;
        l /= 10;
      }
    }
    Ответ написан
  • Как вернуться к началу строки?

    Rsa97
    @Rsa97
    Для правильного вопроса надо знать половину ответа
    #include <string.h>
    #include <stdio.h>
    
    int main(int argc, char *argv[])
    {
      unsigned char *text, *key;
      unsigned char shift, rightNumber;
      for (text = argv[1], key = argv[2]; *text; text++, key++) {
        if (0 == *key)
          key = argv[2];
        if (*text >= 'A' && *text <= 'Z') {
          shift = *key - 'A';
        rightNumber = *text + shift;
        if (rightNumber > 'Z')
          rightNumber -= ('Z' - 'A');
        printf(""%c + %c '%.3d' == "%c\n", *text, *key, shift, rightNumber);
      }
    }
    Ответ написан