• Сначала С, а потом С++?

    myjcom
    @myjcom Куратор тега C++
    Вопрос довольно короток. Есть ли смысл изучать сначала С, а потом С++?

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

    Для изучения С++ не обязательно знать С. Программирование на С способствует усвоению приемов и
    даже трюков, которые при программировании на С++ становятся просто ненужными.

    Бьерн Страуструп. Язык программирования С++.

    Нотабене

    Тем не менее, хорошие программы на языке С по сути являются
    программами на С++. Например, все программы из классического описания С (K&R) являются
    программами на С++. В процессе изучения С++ будет полезен опыт работы с любым языком со
    статическими типами.

    Ответ написан
    1 комментарий
  • Вопросы про язык Си?

    sergey-gornostaev
    @sergey-gornostaev Куратор тега C
    Седой и строгий
    1. Массив целых чисел
    2. Массив целых чисел
    3. Массив целых чисел
    4. Массив целых чисел (если пятёрки всё-таки запятой отделены, а не точкой)
    5. Целое число

    Уверен, это есть в любом учебнике.
    Ответ написан
    Комментировать
  • Реальные задачи по программированию?

    sergey-gornostaev
    @sergey-gornostaev
    Седой и строгий
    когда ты даже понятия не имеешь, что будешь делать в свой первый рабочий день в качестве программиста

    5cf3dead2c58f367198538.png
    Может кто предложит хотя бы приближенные к реале задачи?

    Напишите web-сервер и браузер.
    Ответ написан
    Комментировать
  • Реальные задачи по программированию?

    opium
    @opium
    Просто люблю качественно работать
    Напишите программу для себя, та которая вам нужна
    Ответ написан
    Комментировать
  • Как создать указатель на функцию main?

    jcmvbkbc
    @jcmvbkbc
    "I'm here to consult you" © Dogbert
    int main(void)
    {
        int (*pmain)(void) = main;
    }


    например int* func;

    Это указатель на int, а не на функцию.
    Ответ написан
    Комментировать
  • Как правильно закрыть окно?

    vt4a2h
    @vt4a2h Куратор тега C++
    Senior software engineer (C++/Qt/boost)
    Как-то так
    #include <QApplication>
    #include <QMessageBox>
    
    int main(int argc, char *argv[])
    {
        QApplication a(argc, argv);
    
        QMainWindow mainWindow;
    
        auto res = QMessageBox::question(&mainWindow, QMainWindow::tr("Just in case"),
                                         QMainWindow::tr("Are you sure?"));
        if (res == QMessageBox::Yes) {
            mainWindow.show();
            return a.exec();
        } else {
            return -1;
        }
    }

    Смысл в том, что у вас первое окно -- это модальный диалог (наследник QDialog, допустим). У него есть метод exec обычно, который возвращает результат (например согласился пользователь или нет). На основании результата и решайте, что делать дальше: показать окно или выйти из программы.
    Ответ написан
    Комментировать
  • Что почитать по C++?

    GavriKos
    @GavriKos
    Советую почитать выдачу поиска хотя бы по тостеру.
    Ответ написан
    Комментировать
  • Перегрузка функций с unsigned параметром и обычным?

    @MarkusD Куратор тега C++
    все время мелю чепуху :)
    Стандартом определены правила вывода типа для числового литерала из самого литерала. Также в стандарте определен формат представления числового литерала.
    Согласно этим правилам и этому формату, 5 будет являться числовым литералом с типом int.
    Если бы ты написал 5u, то тип бы уже был unsigned int. А если бы ты написал 5lu, то тип бы уже был unsigned long int.
    Ответ написан
    Комментировать
  • Как вывести элементы матрицы, которые находятся ниже главной диагонали?

    jcmvbkbc
    @jcmvbkbc
    "I'm here to consult you" © Dogbert
    int **matrix = (int**)malloc(matrix_size * sizeof(int));

    Должно стать
    int **matrix = (int**)malloc(matrix_size * sizeof(int *));

    потому что ты выделяешь массив указателей, а не массив целых чисел, а sizeof(int) вполне может быть не равно sizeof(int *).

    for (int i = 0; i < matrix_size; ++i)
        {
            for (int j = 0; j < matrix_size; ++j)
            {
                if(i > j)
                {
                    arr[i] = matrix[i][j];
                }
            }
        }


    Должно стать
    counter = 0;
        for (int i = 0; i < matrix_size; ++i)
        {
            for (int j = 0; j < matrix_size; ++j)
            {
                if(i > j)
                {
                    arr[counter++] = matrix[i][j];
                }
            }
        }


    потому что иначе все элементы находящиеся в одной строке matrix ты складываешь в один и тот же элемент массива arr.
    Ответ написан
    Комментировать
  • Как получить дробное число при делении 1 на 1?

    myjcom
    @myjcom Куратор тега C++
    Смотря что нужно.
    #include <iostream>
    #include <iomanip>
    #include <cstdlib>
    
    int main()
    {
      int a = 9;
      int b = 4;
      std::div_t result = div(a, b);
      std::cout << result.quot << " " << result.rem << std::endl;
      // Наверное это
      std::cout.precision(1);
      std::cout << std::fixed << static_cast<double>(a) / b << std::endl;
    }
    Ответ написан
    Комментировать
  • Как исправить ошибку в коде c++?

    jcmvbkbc
    @jcmvbkbc
    "I'm here to consult you" © Dogbert
    Замени head = malloc(sizeof(struct Node)) на head = new Node.
    Потому что malloc тебе конструктор std::string внутри data_list не вызовет.
    И не вставляй код картинками.
    Ответ написан
    Комментировать
  • Как установить wxWidgets?

    Adamos
    @Adamos
    Надо чё-то где-то исправить - и все заработает.
    Верный способ, я сто раз так делал.
    Ответ написан
    Комментировать
  • У меня есть три сортировки. Как подсчитать в каждой их них кол-во пересылок и сравнений?

    AnnTHony
    @AnnTHony
    Интроверт
    void bubble_sort(int array[SIZE])
    {
    	int transfer = 0;
    	int comparison = 0;
    
    	cout << "\nпузырьковая сортировка" << endl;       
    	for (int i = 0; i < SIZE-1 ; i++)
    	{
    		for (int j = SIZE-2; j >= i; j--)
    		{
    			comparison++;
    			if (array[j] > array[j+1]) 
    			{
    				int temp = array[j];
    				array[j] = array[j+1];
    				array[j+1] = temp;
    				transfer++;
    			}
    		}
    	}
    
    	cout << "СРАВНЕНИЕ " << comparison << endl;
    	cout << "ПЕРЕСЫЛКА " << transfer << endl;
    }
    Ответ написан
    Комментировать
  • Что такое макросы в С++?

    32bit_me
    @32bit_me
    Программист, встраиваемые системы
    #define sqr(x) x*x - это образец того, как не нужно писать макросы.

    Более правильно так:

    #define SQR(x) ((x)*(x))

    Тогда:
    ((3+0)*(3+0)) = 9

    Но в С++ использование макросов считается дурным тоном (чаще всего). Используйте inline - функции.
    Ответ написан
    Комментировать
  • Что такое макросы в С++?

    myjcom
    @myjcom Куратор тега C++
    потому что x это 3 + 0; (целиком) это тупо текст, который будет вставлен вместо x;
    x * x == 3 + 0 * 3 + 0;

    получаем

    3 + (0 * 3) + 0;
    3 + 0 + 0;
    3;

    макросы в С++

    Атавизм
    иногда полезный
    https://en.cppreference.com/w/cpp/preprocessor/replace

    а так тут есть как минимум
    https://en.cppreference.com/w/cpp/language/constexpr
    https://en.cppreference.com/w/cpp/language/templates

    code
    #include <iostream>
    
    template<typename T>
    auto sqr = [](T x)
    {
      return x * x;
    };
    
    int main()
    {
      std::cout << sqr<int>(3 + 0);
    }


    что будет развернуто в что-то типа
    //...
    class __lambda_3_12
    {
      public: inline int operator()(int x) const
      {
        return x * x;
      }
    //...
    };
    //...

    Ответ написан
    Комментировать
  • Как ограничить смещение битов?

    @res2001
    Developer, ex-admin
    Вам нужен циклический сдвиг?
    Придется реализовывать самому - просто проверьте перед сдвигом последний бит, если он равен 1, то после сдвига прибавьте 1 к числу.
    if(m_d[i] & 0x80) {
      m_d[i] = (m_d[i]<<1);
      ++m_d[i];
    } else {
      m_d[i] = (m_d[i]<<1);
    }
    Ответ написан
    Комментировать
  • Почему Segmentation fault?

    @Mercury13
    Программист на «си с крестами» и не только
    Переменная run ничему не присвоена.
    Ответ написан
    Комментировать
  • Как добавить в путь // вместо / на C++?

    sergey-gornostaev
    @sergey-gornostaev Куратор тега C
    Седой и строгий
    Экранирование слэшей имеет смысль только в литералах. Если вы получаете строку в переменную из функции, беспокоится об экранировании не нужно.
    Ответ написан
    Комментировать
  • Линковка с библиотекой C++?

    @res2001
    Developer, ex-admin
    mmsystem.h и winmm.lib - это стандартные виндовый заголовочный файл и библиотека, предоставляется вместе с Windows SDK, который входит в состав Visual Studio. mmsystem.h в студии доступен изначально, просто используете его в #include, копировать его в свой проект не нужно. winmm.lib то же доступен, но его надо подключить к проекту - опция -lwinmm.lib компилятора или задать в свойствах проекта как дополнительную используемую библиотеку, если используете IDE. По умолчанию она не подключена.

    Вообще для подключения сторонних библиотек к любому С/С++ проекту надо:
    1.добавить путь где лежать заголовочные файлы библиотеки опцией -I<path header files> в команду запуска компилятора.
    2.добавить путь где лежат lib файлы (lib для msvc) библиотеки в опцию -L<path to lib files>. Если библиотечный файл один, то этот пункт можно пропустить и задать полный путь в п.3. Если файлов несколько, то проще задать путь к каталогу в опции -L, а в п.3 указывать только имя конкретного файла библиотеки.
    3.добавить имя файла библиотеки (lib файла) в опцию -l<lib name> или полный путь к lib файлу.

    Если вы собираете из IDE, то те же действия надо проделать в настройках проекта. Опции компилятора практически универсальны - те же опции (и аналогичный подход) используются в msvc, gcc, clang и других компиляторах.
    По сборке библиотек с Qt проектом:
    В pro файле:
    переменная LIBS - задаются опции -L и -l компилятора (п.2 и п.3)
    переменная INCLUDEPATH - задаются опции -I компилятора (п.1)
    Например:
    INCLUDEPATH += -Ipath/to/header/files
    LIBS += -Lpath/to/lib/files -lmylibfile

    Это все легко гуглится.
    Ответ написан
    Комментировать