• У меня есть три сортировки. Как подсчитать в каждой их них кол-во пересылок и сравнений?

    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

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

    jcmvbkbc
    @jcmvbkbc
    "I'm here to consult you" © Dogbert
    получается mainx узнает о том что есть функция printx() на этапе линковки [mainx.o] и [printx.o]?

    Да.

    Каким образом происходит передача информации в [mainx] что функция printx() существует?

    Это работа линковщика связывать ссылки на неопределённые символы с определениями этих символов.
    В main.o в месте вызова printx ставится команда вызова, в секции символов заводится неопределённый символ printx а в секции релокаций заводится запись, связывающая команду вызова с символом:

    objdump -dr mainx.o
    ...
    0000000000000000 <main>:
       0:   55                      push   %rbp
    ...
      3a:   89 c7                   mov    %eax,%edi
      3c:   e8 00 00 00 00          callq  41 <main+0x41>
                            3d: R_X86_64_PLT32      _Z6printxi-0x4
      41:   b8 00 00 00 00          mov    $0x0,%eax
      46:   c9                      leaveq 
      47:   c3                      retq   
    ...


    readelf -a mainx.o
    ...
    Relocation section '.rela.text' at offset 0x580 contains 12 entries:
      Offset          Info           Type           Sym. Value    Sym. Name + Addend
    ...
    00000000003d  001400000004 R_X86_64_PLT32    0000000000000000 _Z6printxi - 4
    ...
    
    Symbol table '.symtab' contains 25 entries:
       Num:    Value          Size Type    Bind   Vis      Ndx Name
    ...
        20: 0000000000000000     0 NOTYPE  GLOBAL DEFAULT  UND _Z6printxi
    ...


    В printx.o в секции символов заводится символ, ассоциированный с адресом в коде, где определена функция printx:

    readelf -a printx.cpp
    ...
    Symbol table '.symtab' contains 24 entries:
       Num:    Value          Size Type    Bind   Vis      Ndx Name
    ...
        14: 0000000000000000    75 FUNC    GLOBAL DEFAULT    1 _Z6printxi
    ...

    Здесь value == 0 -- потому что printx оказалась по адресу 0 в секции .text.

    Линковщик объединяет входные секции согласно скрипту линковки, после чего вставляет конечные адреса символов в места, которые ссылаются на них.
    Ответ написан
    Комментировать
  • Как найти мин и мах?

    @BlvckManeM
    Немножко понимающий Java
    import java.util.Arrays;
    
    public class Test {
        public static void main(String[] args){
            int[] tab = {12, 1, 21, 8};
            int min = Arrays.stream(tab).min().getAsInt();
            int max = Arrays.stream(tab).max().getAsInt();
            System.out.println("Min = " + min);
            System.out.println("Max = " + max)
        }
    
    }


    Вы можете просто использовать новый Java 8 Stream s, но вам нужно работать с int.

    Stream метод класса Arrays дает вам IntStream, на котором вы можете использовать min. Вы также можете сделать max, sum, average,...

    Метод getAsInt используется для получения значения из OptionalInt
    Ответ написан
    1 комментарий
  • Вопрос по синтаксису Qt?

    axifive
    @axifive
    Software Engineer
    QLabel *label = new QLabel("Привет");
    Указателю присвается адресс нового объекта типа QLabel c текстом - "Привет"

    SomeClass a это переменная типа SomeClass
    SomeClass *p указатель на переменную типа SomeClass
    Ответ написан
    Комментировать
  • В чем ошибка выскакивает на компиляции?

    jcmvbkbc
    @jcmvbkbc
    "I'm here to consult you" © Dogbert
    непонятная ошибка

    Что непонятного-то? Вроде отчётливо видно, что ReadFromFile использует CreateList, но функция CreateList (с таким прототипом, как в ReadFile) не определена. И ошибка не компиляции а линковки.
    Ответ написан
    Комментировать
  • Куда поступать на программиста в Новосибирске после 9 или лучше после 11?

    kawabanga
    @kawabanga
    Есть неплохой шанс потерять мотивацию после 9го класса. Поэтому я все таки рекомендую закончить 11 класс.
    В 9 классе вы еще молоды, и многие ваши действия я бы отдал под контроль родителей. Опять же, колледж будет перенасыщен людьми, которые просто не смогли пойти в 10 класс. А это очень опасное окружение, которое может негативно сыграть на ваше будущее.

    А вот в 10-11 классе вы можете пойти в школы подготовки, вроде как они есть у нас тут в НСК. И уже к концу 11 класса будете иметь представление о том, куда вы планируете развиваться.

    Английский учите. Без вариантов. Впрочем, за 2 года вызубрить ЕГЭ - не думаю что это проблема.
    Ответ написан
    5 комментариев
  • Где в коде ошибка?

    zagayevskiy
    @zagayevskiy
    Android developer at Yandex
    static убирать не следует, смысл этого B подсчитать , сколько экземпляров класса А создано(static значит, что из всех мест программы виден один и тот же объект в этой переменной).
    С этой точки зрения доступ к статистической переменной через указатель на экземпляр класса это не совсем верно( a->storage.counter). Я бы ожидал видеть A::storage.counter.

    delete [] в деструктор к АА, тут ты верно заметил. Нужно использовать именно эту форму delete, т.к. память выделена под массив (new int[10]). В остальных местах выделен 1 объект, поэтому надо delete без [].

    Но, для того, чтобы деструктор АА вызывался при удалении указателя на А(auto a = new A; выведет тип A*), когда по этому указателю лежит объект класса АА, нужно объявить деструктор virtual ~А(а вовсе не virtual ~AA). При этом объявление виртуальным деструктоа АА само по себе ошибкой не будет.

    someValue++ в конструкторе АА достаточно бессмысленно, т.к. это поле класса А, которое просто инициализированно нулём. В результате во всех экземплярах АА там будет 1. Непонятно, чего пытались добиться.

    Вместо printf в С++ следует использовать operator<<, но не думаю, что придурок, составлявший такой тест, особо думал об этом.

    Больше ничего не заметил.
    Ответ написан
    Комментировать
  • Как добавить путь LD_LIBRARY_PATH в коде с++?

    @none7
    Ваша программа, это не sh скрипт. И пара строк:
    std::system("export myvar=1");
    std::system("echo $myvar");

    неожиданно выведут пустую строку. Нужно либо устанавливать переменную в том же вызове system(env LD_LIBRARY_PATH=${LD_LIBRARY_PATH} path/to/app) или ручками менять переменные своей программы(getenv/setenv).
    Ответ написан
    Комментировать
  • Почему if в массиве работает не так как нужно?

    @Wexter
    if(a[i]=b[i])

    Вы либо присваивайте, либо сравнивайте
    Ответ написан
    3 комментария
  • Как задать значение данным в структуре на Си?

    Vagrant0610
    @Vagrant0610
    PHP разработчик
    Возможно здесь есть решение: https://learnc.info/c/structures.html
    #include<stdio.h>
    
    struct tableI  
    {
        char *name[4];
        float doctor[16];
        float bunk[16];
    } tableI;
    
    int main()
    {
        struct tableI a;
        a.name[0] = "РСФСР";
        a.name[1] = "Украина";
        a.name[2] = "Латвия";
        a.name[3] = "Эстония";
        // и т.д. ...
        printf("%s|%s|%s|%s", a.name[0],a.name[1],a.name[2],a.name[3]);
    }
    Ответ написан
    2 комментария
  • Компиляция C++ из C++?

    jcmvbkbc
    @jcmvbkbc
    "I'm here to consult you" © Dogbert
    Как на C++ скомпилировать файл main2.cpp и выполнить его?

    #include <stdlib.h>
    int main()
    {
        if (system("g++ main2.cpp -o main2") == 0)
            system("./main2");
    }
    Ответ написан
    Комментировать
  • Как развиваться дальше и где черпать идеи/задачи?

    @Wentixon
    Твоя проблема на самом деле в том, что видя трудности впереди ты бежишь от них и сразу же берешься за новое дело. Ты начал делать проект, так где он? Ты доделал его или все же получилось не то, что ты хотел сделать? Теперь ты изучаешь плюсы, не понимая зачем они тебе нужны? Это ли не безумие? Может тебе стоит попробовать что то другое? Например, вагоны поразгружать или кассиром поработать, как вариант. Короче не хочется много писать, просто возьми что то одно и доводи это до ума. То есть одна технология, один проект, который ты будешь постоянно развивать. Неважно что это будет, просто бей ниже мочи в жижу! Иначе далеко ты не уедешь, чтобы ты не изучал, будут появляться сложности, но если не будешь их преодолевать никогда не выйдешь на новый уровень. Я тоже в свое время метался, изучая и веб и андроид и игры и все короче.. Но потом понял, что я полный нуль и все знаю поверхностно, так что главное тупо идти в одном направлении и становится профи в чем то одном!
    Ответ написан
    9 комментариев
  • Как развиваться дальше и где черпать идеи/задачи?

    @res2001
    Developer, ex-admin
    Идите либо работать с тем, что умеете, там вам дадут задачи, либо учиться в универ, если еще там не были, там то же чем-нибудь нагрузят мозг.

    PS: на плюсах можно выполнять практически все прикладные задачи, гораздо больше, чем на питоне или java. Но часто трудозатраты будут выше, чем с использованием специализированных языков.
    С/С++ обычно используются там где нужна скорость, недостижимая на других ЯП, или для работы с оборудованием на низком уровне.
    Ответ написан
    Комментировать
  • Битовое представление чисел в c++?

    0xD34F
    @0xD34F
    Делаете две битовые маски - все единицы для младших разрядов (до вырезаемого бита), все единицы для старших (после вырезаемого бита). Применяете обе маски к числу, смещаете старшие разряды на единицу вправо, объединяете получившиеся числа:

    int value = // ваше число, чему-то там равно, вам виднее
    
    int bit = // номер вырезаемого бита, тоже вам виднее
    
    int maskLower = 0;
    for (int i = 0; i < bit - 1; i++) {
      maskLower |= 1 << i;
    }
    int maskUpper = ~maskLower;
    
    value = ((value >> 1) & maskUpper) | (value & maskLower);


    UPD. Цикл для создания маски конечно лишний, как справедливо заметил в комментариях res2001.
    Ответ написан
    2 комментария