• Выражение должно иметь типа указателя на объект. В чем суть ошибки?

    CityCat4
    @CityCat4
    Внимание! Изменился адрес почты!
    Вынужден согласиться с Illia Nezhyhai - этот код - одна большая ошибка :) Причем главная ошибка в том, что у параметров функции нет типа, а следовательно компилятор предполагает, что они имеют тип int (для С, в С++ типа по умолчанию нет, попытка откомпилировать данный код вызовет ошибку). Поэтому разумеется выражение arr[i][j] = что-то там будет неверным.

    Во-первых, все параметры функций всегда должны типизироваться - это Вас и спасет от таких вот нелепых ошибок и напомнит, что передается в функцию, если Вы по собственной лени не напишете комментарий с описанием этого
    Во-вторых, документирование передаваемых параметров и присвоение переменным нормальных имен, а не i,j,k - поможет и другому, кто будет Ваш код читать, и Вам самому - когда Вы в него полезете через год.
    Ответ написан
    4 комментария
  • Как сделать "переопределение" функции в c++?

    @MarkusD Куратор тега C++
    все время мелю чепуху :)
    Твой вопрос можно решить таким способом.
    #include <iostream>
    #include <functional>
    
    class Enemy final
    {
    public:
    	std::function<void()> update = []() {};
    };
    
    int main( int argc, char* argv[] )
    {
    	Enemy enemy;
    	enemy.update = []() { std::cout << "Hello"; };
    
    	enemy.update();
    	return 0;
    }
    Ответ написан
    Комментировать
  • Случайный рандом с коэффициентом шанса, как сделать?

    myjcom
    @myjcom Куратор тега C++
    И это вприницпи работает. Как мне сделать так, что бы у каждого предмета можно было выставлять определённый коофицент выпадения? Или хотя бы подскажите куда копать, в каком направлении.

    Смотри:
    В урну поместили 2 шара: черный и белый, какова вероятность того, что первый наугад вынутый шар окажется белым?

    Дальше

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

    Дальше
    В урну поместили четыре шара: 2 белых, черный и красный, какова вероятность того, что первый наугад вынутый шар окажется белым?

    Учитывай что полная вероятность равна 1.0

    Вот так это работает, а все остальное вздор... .

    Другими словами тебе нужно N штук каждого элемента пропорционально твоему коэфиценту выпадения. Потом https://en.cppreference.com/w/cpp/algorithm/random...

    А дальше рандомно дёргать из контейнера, оставлять их там или удалять зависит от задачи.

    Использовать распределения или нет аналогично. https://en.cppreference.com/w/cpp/numeric/random

    Более сложные варианты я описывать не возьмусь.
    Ответ написан
    Комментировать
  • Зачем определению(definition) объявлять(to declares), если есть определение(definition), которое определяет(to defines)?

    @res2001
    Developer, ex-admin
    int val;
    Является одновременно и определением и объявлением.
    В данном случае происходит реальное выделение памяти под переменную.

    Объявление это
    extern int val;
    Оно говорит компилятору, что где-то есть переменная val типа int. В этом случае компилятор уже знает какие операции допустимо использовать с этой переменной, но память под переменную не выделяет. Реальный адрес переменной подставит линковщик, когда будет собирать исполняемый файл из нескольких единиц трансляции.
    Если в одной единице трансляции вы используете объявление переменной, то где-то (в другой единице трансляции или в этой же) вы должны обязательно сделать определение. Иначе линковщик не найдя определения выдаст undefined reference.
    Если же определять переменную в каждой единице трансляции, то линковщик выругается на redefinition symbol, т.е. несколько символов с одним именем (переопределение существующего символа).
    Если вам все таки нужны символы с одним именем в разных единицах трансляции, то вы должны объявлять их static. В этом случае будет использоваться локальная для данной единицы трансляции переменная с данным именем.

    С функциями все аналогично.
    Ответ написан
  • Что так может искрить в блоке питания?

    @lonelymyp
    Хочу вылезти из минуса по карме.
    Пока искры не будут долетать до обоев можно не менять.
    Ответ написан
    Комментировать
  • Как реализовать работу двух циклов одновременно?

    @aarifkhamdi
    Запусти их в двух потоках
    Ответ написан
    Комментировать
  • Как сделать циклический сдвиг массива на 4 вправо?

    @menkar3
    std::rotate?
    #include <algorithm>
    ...
    int main()
    {
        const int n = 12;
        int a[n] = { 1,2,3,4,5,6,7,8,9,10,11,12 };
        rotate(a, &a[n] - 4, &a[n]);
        for (auto n : a)
        {
            cout << n << " ";
        }
        return 0;
    }
    Ответ написан
    Комментировать
  • Чем обусловлена замена северного и южного моста чипсетом?

    Zoominger
    @Zoominger Куратор тега Железо
    System Integrator
    Что-то не совсем понятно.
    Понятие "чипсет" включает в себя и северный мост, и южный.
    Им вовсе не обязательно быть в одной микросхеме.
    Ответ написан
    Комментировать
  • Чем обусловлена замена северного и южного моста чипсетом?

    Jump
    @Jump
    Системный администратор со стажем.
    Чем обусловлена замена северного и южного моста чипсетом?
    Вопрос не имеет смысла.
    Чипсет - набор (set) микросхем (chip) - обеспечивающих работу процессора.
    Северный и южный мост - название некоторых блоков чипсета.

    В итоге серверный и южный мост это часть чипсета. Никто ни чем их не заменял.

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

    myjcom
    @myjcom Куратор тега C++
    void writeBinary(ostream& os, structBook const& book)
    {
      ostringstream ss;
      ss << book.bookId
         << book.bookName.size() << book.bookName
         << book.bookAuthorName.size() << book.bookAuthorName
         << book.bookAuthorSurname.size() << book.bookAuthorSurname
         << book.year << book.pages << book.onplace
         << book.genre.size() << book.genre
         << book.section.size() << book.section;
      os.write(reinterpret_cast<char*>(ss.str().size()), sizeof(decltype(ss.str().size())));
      os.write(ss.str().data(), ss.str().size());
    }
    
    // ...
    
    for(auto const& b : vecStructBook)
    {
      writeBinary(bookDatabase, b);
    }

    считывать наоборот.
    Ответ написан
    5 комментариев
  • Как выбрать технологию, чтобы клиент был доволен:)?

    @choupa
    Архитектор (обычный, который строит)
    По-моему, всё перечисленное умеет Excel из коробки. Ну разве что можно приправить VBA по вкусу.
    Ответ написан
    2 комментария
  • Как установить в 0 определенные биты?

    @vanyamba-electronics
    template <typename _Type>
    _Type clear_bit(_Type value, unsigned int bit)
    {
       _Type mask = 1 << bit;
       mask = ~mask;
       return value & mask;
    }
    Ответ написан
    Комментировать
  • Как склеить прием данных через QT serialport C++?

    Zifix
    @Zifix Куратор тега Qt
    Barbatum
    Возьмите любой учебник по программированию и почитайте его. Если вы не в курсе как делать конкатенацию строк, то программировать вам рано.
    Ответ написан
    3 комментария
  • Как проверить что по serial пришел полный пакет данных?

    @Zolg
    последовательный порт не передает пакеты. последовательный порт передает поток байт (на самом деле - бит, но прием целых байт уже реализован до вас нижележащими уровнями абстракции)
    'разбиение на пакеты' - задача протокола более высокого уровня (который вам видимо и нужно реализовывать).
    если у вас 'пакет' это строка, то конец пакета маркируется символом перевода строки, не так ли ?
    Ответ написан
    2 комментария
  • Какой стандарт c++ изучать?

    Adamos
    @Adamos
    несколько месяцев изучаю
    Думаю почитать книжечку
    явно не смогу понять
    если вдруг начну читать
    придется начинать изучать
    нужно будет по сто раз переучиваться
    пугает.

    Ваш выбор - 1C. Или продажником в DNS...
    Ответ написан
    Комментировать
  • Как использовать одну переменную в разных программах?

    @res2001
    Developer, ex-admin
    К чему весь этот листинг?
    Т.е. вы хотите из разных программ (процессов) обращаться к одному участку памяти?

    Напрямую вы сможете использовать 1 переменную в разных программах только используя механизм shared memory ОС и разместив переменную в "расшаренном" участке памяти. В этом случае для синхронизации доступа к переменной в разных процессах вам необходимо будет использовать какие-либо именованные примитивы синхронизации, иначе будет состояние гонки и доверять содержимому переменной в этом случае будет нельзя.

    Есть и другие механизмы для передачи значения переменной другому процессу: сокеты, пайпы, файлы и т.д., любой механизм межпроцессного взаимодействия подойдет.

    На самом деле нужно знать задачу, чтоб выбрать наиболее правильный вариант реализации.
    Ответ написан
    Комментировать
  • Как решать задачу?

    myjcom
    @myjcom Куратор тега C++
    Собственно
    отсюда

    #include <algorithm>
    #include <iterator>
    #include <iostream>
    #include <vector>
    
    using namespace std;
    
    auto fx = [](int x){
      int r = 0;
      switch(x % 3)
      {
        case 0:
          r = x * x;
          break;
        case 1:
          r = x;
          break;
        default:
          r = x / 3;
          break;
      }
      return r;
    };
    
    auto calculate = [](const vector<int>& vx, auto fx){
      vector<int> calcValues(vx.size());
      transform(vx.begin(), vx.end(), calcValues.begin(), fx);
      return calcValues;
    };
    
    int main()
    {
      cout << "Введи кол-во чисел: ";
      int n = 0;
      cin >> n;
    
      cout << "Введи через пробел " << n << " натуральных чисел:\n" << "$: ";
      vector<int> values(n);
      copy_n(istream_iterator<int>(cin), n, values.begin());
    
      cout << "Результат твоих расчетов:\n";
      copy_n(calculate(values, fx).begin(), n, ostream_iterator<int>(cout, "\n"));
    }


    тебе нужна только fx в остальное можешь не погружаться, кроме того что
    Даны натуральные числа

    https://ru.wikipedia.org/wiki/Натуральное_число --> unsigned
    Ответ написан
    Комментировать
  • Почему printf не выводит переменные?

    myjcom
    @myjcom Куратор тега C++
    Почему printf не выводит переменные?

    printf("%s", "Znachenie", &p);
    int printf( const char* format, ... );

    выводит %s writes a character string которую вы передаете аргументом "Znachenie"
    %f converts floating-point number to the decimal notation которое вы передаете аргументом p
    printf("%s %f", "Znachenie", p);

    но так не совсем удобно
    вот так проще
    printf("Znachenie %f", p);

    оператор address-of перед именем переменной не нужен.
    Ответ написан
    Комментировать
  • Как считать вторую строку?

    myjcom
    @myjcom Куратор тега C++
    Но не таким способом

    #include <iostream>
    #include <sstream>
    #include <algorithm>
    #include <iterator>
    #include <vector>
    using namespace std;
    
    int main()
    {
      size_t n = 4;
      string s = "42 54 35 76";
      
      istringstream is(s);
      
      vector<int> v;
      copy_n(istream_iterator<int>(is), n, back_inserter(v));
    
      /*******
      ** vector<int> v2(n);
      ** copy_n(istream_iterator<int>(is), n, v.begin());
      *******/
      copy_n(v.begin(), n, ostream_iterator<int>(cout, " "));
    }

    Ответ написан
    Комментировать
  • Как хранятся числа в памяти?

    jcmvbkbc
    @jcmvbkbc
    "I'm here to consult you" © Dogbert
    struct Data {
      short id;
      double val;
    };


    я понимаю что 32 00 11 49 - это интовское значение

    в этой структуре short int, 2 байта. 0x32 0x00 -- это оно (0x32 + 256 * 0x00 = 50), little endian.
    0x11 0x49 -- это мусор. 0x02 0x56 0x00 0x00 идущие дальше -- это тоже мусор.
    0x33 0x33 0x33 0x33 0x33 0x33 0xf3 0x3f -- это double (0x3ff -- порядок, 0x3333333333333 -- мантисса, значение = 0x1.3333333333333 * 2 ^ (0x3ff - 1023) = 1.19999999999999995559), little endian, ieee754.

    Как в данном выводе понять где выравнивание происходит?

    Можно воспользоваться макросом offsetof.
    Ответ написан
    5 комментариев