Задать вопрос
Ответы пользователя по тегу Программирование
  • Есть 4 байта в них записана информация как их прочитать сразу?

    rhaport
    @rhaport
    val = 0;
    for (int i = 0; i < 4; i++)
    {
        unsigned char ch;
        // считываем один char из потока
        inp.get(ch);
        // (ch & 0xFF) - паранойя, так как ch не может быть больше чем 0xFF, 
        // можно смело опустить и оставить только ch
        // каждый unsigned char может иметь значения от 0 до 0xFF
        // сдвигаем каждый прочитанный символ но (8*i) позиций, то есть при первом чтении не сдвигаем, так как
        // i = 0, потом на 8, потом на 16, потом на 24
        // 8 - это длина битового представления чара,
        // 0xFF - это как раз 8 единичек
        // затем всё склеивается операцией or.
        // В итоге получится нечто вроде 0xDDCCBBAA
        // если 0xAA был первый чар, 0xBB - второй и т.д.
        // сдвигая на 8, мы гарантируем, что биты одного чара, не испортят биты другого чара 
        val |= ((ch & 0xFF) << (8*i)); 
    }
    cout << dec << val << endl;
    Ответ написан
    Комментировать
  • Как правильно удалять элементы из односвязного списка?

    rhaport
    @rhaport
    После вызова take_out (обычно называют pop), куда показывает голова очереди? Переменная queue указывает на адрес, который только что освободили.

    либо возвращайте в take_out указатель на новую голову:
    QUEUE* take_out(QUEUE *q, NODE *node, int *error)
    {
        QUEUE *old_item = q;    // начало очереди
        NODE *old_info = 0;
        if (q)  // если очередь не пуста
        {
            old_info = old_item->info;
            q = (q)->next;
            delete old_item;    // уничтожение элемента
            *error = 0;
        }
        else *error = 1;
    
        node = old_info;
    
        return q;
    
    
    ....
       queue = take_out(queue, p, err)
    }

    либо организуйте очередь как
    struct List;
    
    struct List
    {
        struct List *next;
        NODE *info;
    };
    
    typedef struct
    {
        struct List *head;
    } QUEUE;
    
    int pop(QUEUE* q, NODE* info)
    {
        int ret;
    
        if (q && q->head)
        {
            info = q->head->info;
            q->head = q->head->next;
            ret = 0;
        }
        else
        {
            ret = -1;
        }
    }


    по мне второй вариант лучше.
    Ответ написан
    Комментировать
  • Как задать буливскую функцию на c++ в программе xcode?

    rhaport
    @rhaport
    [шаман]
    скорее всего у вас в *.h стоит void, а в *.c Вы заменили void на bool, вот компилятор и ругается
    [/шаман]

    покажите код :)
    Ответ написан
    Комментировать
  • Развитие себя как программиста. Что изучать?

    rhaport
    @rhaport
    В догонку в вышесказанному могу посоветовать выбрать что-то и делать, но делать до конца, чтоб в итоге получался продукт, который будет можно показать другим, даже если это на первый взгляд несложно. Два доделанных проекта лучше пяти, брошенных на полдорги. От нихз повышается опыт, самооценка и потом легче будет найти работу.
    Ответ написан
    Комментировать
  • Как реализовать лаконичную запись условий?

    rhaport
    @rhaport
    такие проблемы решаются каждая по своему. Найти общее решение для всего не всегда будет оптимально.
    В данном случае можно определить бинарную фунцию functor: (0,1)x(0,1) -> (f1,f2,f3,f4)
    функции и будут Ваши some conditions.
    Типа такого (сорри синтакиси сишный, так как не знаю php),
    int to0123(bool a, bool b)
    {
       return ((int)(a == true) << 1) + (int)(b == true);
    }


    Если, conditions = {f1, f2, f3, f4};, где fx функции, которые проверяют ваши some conditions,

    то можно писать типа такого
    idx = to0123($this->isNewRecord, empty($this->parent_id));
    if (conditions[idx])
         success = true
    Ответ написан
    Комментировать