• Как склеить изображение в ImageMagic?

    jcmvbkbc
    @jcmvbkbc
    "I'm here to consult you" © Dogbert
    Если выполнить так, то работает, но вручную прописывать не подходит:

    А скрипт поправить?
    #!/bin/bash
    z1=({0..3}); z2=({4..7}) #...
    for((i = 1; i < 3; ++i)); do
    declare -n a=z$i
    FILES=()
    for n in ${a[@]}; do
    FILES[${#FILES[@]}]="/untitled/a/$i/$n.jpg"
    done
    montage -monitor "${FILES[@]}" -geometry +0+0 -tile 4x1 /untitled/b/$i.jpg
    done
    Ответ написан
    2 комментария
  • Как скопировать файл с заменой в нем некоторых участков?

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

    Я использую для этого такую конструкцию:
    #! /bin/bash
    
    subst()
    {
    	eval "cat <<EOF
    `cat \"$1\"`
    EOF"
    }
    
    . ./config
    subst ./dhcpd.conf.in > ./dhcpd.conf


    При этом dhcpd.conf.in выглядит так:
    ddns-update-style interim;
    ignore client-updates;
    
    subnet ${NET}.0 netmask 255.255.255.0 {
            option routers                  ${NET}.1;
            option subnet-mask              255.255.255.0;
    
            option domain-name-servers      192.168.248.21;
    
            option root-path                "${NET}.1:/tftpboot/tensilica/rootfs/${ROOTFS}${NFS_MOUNT_OPTIONS}";
    
            range dynamic-bootp ${NET}.128 ${NET}.128;
            default-lease-time 21600;
            max-lease-time 43200;
    }

    а config -- так:
    NET=192.168.135
    ROOTFS=cp0_latest
    NFS_MOUNT_OPTIONS=${NFS_MOUNT_OPTIONS},noac
    IF_CONFIG="$NET.1 up"
    CONFIG=debug-kc705-cp0_latest
    KERNEL_IMAGE=uImage


    Т.е. в функции subst внутренний cat подставляет тело файла-шиблона, а eval выполняет внешний cat с подстановкой shell-переменных, зачитанных из config. Нужно понимать, что и шаблон и конфиг в этом скрипте могут выполнять произвольные команды, т.е. нельзя их брать у недоверенного пользователя.
    Ответ написан
    Комментировать
  • Нужно ли сокращать код?

    jcmvbkbc
    @jcmvbkbc
    "I'm here to consult you" © Dogbert
    Стоит ли сокращать код? И как?

    Можно сделать так:
    struct
    {	
      bool btn_state;
      bool btn_flag;
      bool hold_flag;
      bool counter_flag;
      bool isHolded_f;
      bool isRelease_f;
      bool isPress_f;
      bool step_flag;
      bool oneClick_f;
      bool isOne_f;
    
    } fl;
    fl flags;
    // ........ 
    
    boolean GButton::isFlag(bool& flag) {
      if (_tickMode) GButton::tick();
      if (flag) {
        flag = false;
        return true;
      } else return false;
    }
    
    boolean GButton::isPress() {
      return isFlag(flags.isPress_f);
    }
    boolean GButton::isRelease() {
      return isFlag(flags.isRelease_f);
    }
    boolean GButton::isClick() {	
      return isFlag(flags.isOne_f);
    }
    boolean GButton::isHolded() {
      return isFlag(flags.isHolded_f);
    }
    Ответ написан
    Комментировать
  • Как сделать так чтобы консольное приложение "вернуло" некий текст?

    jcmvbkbc
    @jcmvbkbc
    "I'm here to consult you" © Dogbert
    приложение из командной строки с определенными аргументами, в ответ вернуло (другому приложению) данные, некий текст. Назовите пожалуйста технологию которая позволяет такое сделать.

    popen например.
    Ответ написан
    Комментировать
  • Почему нельзя инициализировать в case?

    jcmvbkbc
    @jcmvbkbc
    "I'm here to consult you" © Dogbert

    switch(1){
    case 1:
        double d = 1; //ошибка
    }

    Почему нельзя инициализировать в case?

    С этим кодом всё в порядке с точки зрения стандарта. Проблемы начнутся, если добавить меток case в switch после определения переменной d. Переход на эти метки входит в область видимости переменной d, но минует её инициализацию. Это запрещено стандартом (с++98, 6.7:3):

    It is possible to transfer into a block, but not in a way that bypasses declarations
    with initialization. A program that jumps from a point where a local variable with
    automatic storage duration is not in scope to a point where it is in scope is ill-formed
    unless the variable has POD type (3.9) and is declared without an initializer.
    Ответ написан
    Комментировать
  • Как передать управление сопрограмме?

    jcmvbkbc
    @jcmvbkbc
    "I'm here to consult you" © Dogbert
    Ну, с таким псевдокодом всё должно работать.

    Можете подсказать в чём проблема?

    В реализации, похоже на то.
    Ответ написан
    Комментировать
  • Как преобразовать char массив в int С++?

    jcmvbkbc
    @jcmvbkbc
    "I'm here to consult you" © Dogbert
    Подскажите, а можно ли по такому же принципу преобразовать char массив в int?

    unsigned char a[4] = {...};
    int b = ...;
    memcpy(a, &b, sizeof(a)); // -- int в char
    memcpy(&b, a, sizeof(a)); // -- char в int
    Ответ написан
  • Как правильно объявить функцию, использующую переменную из класса, и класс включающий в себя использование этой функции?

    jcmvbkbc
    @jcmvbkbc
    "I'm here to consult you" © Dogbert
    Как объявить их так, чтобы избежать подобных ошибок?

    Очень странная конструкция в коде:
    - если это такой уж univeralTool, то зачем он завязывается на поле какого-то конкретного объекта какого-то класса?
    - если уж надо завязаться на поле объекта, то почему эта функция -- не член этого класса?
    - если надо обработать какое-то значение, то почему не передать это значение как аргумент функции?

    Ну и если и ни то и ни сё, и действительно надо как написано в коде -- то раздели всё на части и используй объявления или упорядочи определения функций как следует, например так:
    class someClass {
    public:
      void someClassTool();
      int variableInClass = 5;
    };
    
    Someclass someclass;
    
    void someUniversalTool()
    {
      int variable1 = someClass.variableInClass ;
      //some additional code
    }
    
    void SomeClass::someClassTool()
    {
       someUniversalTool();
       //some additional code
    }
    Ответ написан
    Комментировать
  • Преобразование типов и арифметика указателей?

    jcmvbkbc
    @jcmvbkbc
    "I'm here to consult you" © Dogbert
    double * func(double *p, int a, int b) {
        double **p1 = &p;
        *(int*)p = a;
        *(int*)p++ = b;
        return *p1;
    }

    Почти правильно, не считая странных игр с p1.
    По заданию наверно должно быть так:
    void func(double *p, int a, int b)
    {
        *(int*)p = a;
        *((int*)p + 1) = b;
    }


    Если быть совсем строгим и избегать языковых проблем (а в коде выше как минимум type-punning), то так:
    void func(double *p, int a, int b)
    {
        memcpy(p, &a, 4);
        memcpy((char *)p + 4, b, 4);
    }
    Ответ написан
    Комментировать
  • Для чего нужен return?

    jcmvbkbc
    @jcmvbkbc
    "I'm here to consult you" © Dogbert
    float del (float a, float b)
    {
        float res;
        ...
        res = ...;
        ....
        return res;
    }
    ....
    float result = del (num1, num2);

    что делает "return res" во втором куске кода? То есть в переменную res записывается деление числа А и Б. А потом оно куда-то там возвращается..

    Это значение, которое вернётся из функции в точку вызова. В примере выше оно будет присвоено переменной result.
    Ответ написан
    Комментировать
  • Какое влияние полинома на конечный результат в CRC32?

    jcmvbkbc
    @jcmvbkbc
    "I'm here to consult you" © Dogbert
    1. Как влияет полином на CRC?

    CRC -- это остаток от деления входных данных на полином.

    2. Существует ли возможность скорректировать алгоритм или полином так что бы результаты crc были определенном диапазоне? например от 0x0 - 0xafffffff.

    Не уверен, что можно подкорректировать алгоритм деления так, чтобы он остался алгоритмом деления, но давал другой результат. Но можно уменьшить полином.

    3. Скорректируйте алгоритм так что бы результаты были всегда внутри диапазона 0x0-0xeffffffff

    Это задание а не вопрос. Делай свою домашку сам.
    Ответ написан
    3 комментария
  • Почему не работает код на Си?

    jcmvbkbc
    @jcmvbkbc
    "I'm here to consult you" © Dogbert
    while(s>=0,0001)

    -- тут записан бесконечный цикл. Потому что условие while всегда имеет значение 1. Потому что это не сравнение s с 0.0001, а два выражения связанные оператором "запятая" -- s >= 0 и 0001.
    Ответ написан
    Комментировать
  • Почему не инициализировать int (*)[][]?

    jcmvbkbc
    @jcmvbkbc
    "I'm here to consult you" © Dogbert
    Потому что С++. gcc это принимает (без ключа -pedantic) просто потому что это совместимо с с99. Но это не стандартный с++.
    Ответ написан
    3 комментария
  • Как программно реализовать текстовый протокол SCPI на микроконтроллере?

    jcmvbkbc
    @jcmvbkbc
    "I'm here to consult you" © Dogbert
    Подскажите как можно реализовать программно текстовый протокол SCPI?
    Есть синонимы команд, есть не обязательные параметры, параметры могут быть, могут не быть, может быть сразу несколько. Как это всё обрабатывать и проверять не пытается ли пользовать ввести несуществующую команду?

    На мой взгляд, проще всего воспользоваться связкой генератор парсеров + лексический анализатор, bison + flex. Описать грамматику языка на языке bison, описать допустимые лексемы на языке flex, скомпилировать и получить парсер для этого языка на C.
    Ответ написан
    Комментировать
  • Как исправить ошибку сегментирования?

    jcmvbkbc
    @jcmvbkbc
    "I'm here to consult you" © Dogbert
    gdb выдает следующее

    Остаётся узнать как работают команды gdb bt, up, down и frame, и можно будет ответить на свой вопрос самостоятельно.

    Но в данном случае всё очевидно:
    char* command;		
      while(strcmp(command, "exit") == 1);

    Три ошибки в двух строках: во-первых, command не инициализирована на момент вызова strcmp, и это вызывает SEGFAULT.
    Во-вторых strcmp возвращает 0 при равенстве, <0 или >0 (не обязательно 1) при неравенстве строк.
    В-третьих ';' после while () явно лишняя.
    Ответ написан
    1 комментарий
  • Почему && не работает в Screen?

    jcmvbkbc
    @jcmvbkbc
    "I'm here to consult you" © Dogbert
    Почему так, не подскажете?

    Потому что && разбивает команду следующим образом:
    ( screen -dmS unpack unzip -o arhiv.zip ) && ( rm arhiv.zip )

    т.е. "запустить screen и удалить файл". Чтобы удалить файл внутри screen надо написать
    screen -dmS unpack bash -c 'unzip -o arhiv.zip && rm arhiv.zip'
    Ответ написан
    1 комментарий
  • Я правильно понял связь указатель на указатель и двумерный массив?

    jcmvbkbc
    @jcmvbkbc
    "I'm here to consult you" © Dogbert
    Нет, понял неправильно. int[2][2] != int **.
    Но расположение элементов нарисовал правильное.
    Идея в том, что двумерный массив -- это массив массивов. Т.е. int [2][2] == int ([2])[2].
    Указатель на указатель -- совсем другая песня.
    Ответ написан
  • Как описать указатель на двумерный массив?

    jcmvbkbc
    @jcmvbkbc
    "I'm here to consult you" © Dogbert
    int i[2][2] = {{1, 2}, {3, 4}};
    int (*ii)[2] = i;
    ii[0][0];
    Ответ написан
    Комментировать
  • Как быстро найти остаток от суммы цифр?

    jcmvbkbc
    @jcmvbkbc
    "I'm here to consult you" © Dogbert
    Если первым параметром дать большое число, то программа выполняется очень долго.

    А если вместо суммирования чисел воспользоваться формулой суммы арифметической прогрессии n * (n + 1) / 2 ?
    Насколько велико "большое число"?
    Ответ написан
    1 комментарий
  • Как сравнить 2 числа введенных пользователем?

    jcmvbkbc
    @jcmvbkbc
    "I'm here to consult you" © Dogbert
    read $value

    read value же, имя переменной там должно быть.
    Ответ написан
    Комментировать