Задать вопрос
  • В IDE qt creater выходят ошибки при запуске кода, хотя в DEV-C++ код нормально компилируется. Как исправить?

    @res2001
    Developer, ex-admin
    Есть ошибки/предупреждения компилятора, а есть ошибки/предупреждения qtcreator.
    Просмотрите закладку "Вывод сборки", там ошибки и предупреждения компилятора компилирующего вашу программу с заданными вами опциями.
    qtcreator для анализа кода в процессе его редактирования скармливает код clangу (его библиотеки идут вместе с qtcretor) с некоторым набором опций. Этот набор опций скорее всего не совпадает с тем набором, который используете вы в проекте. А так же вы скорее всего используете другой компилятор. Поэтому часто предупреждения выдаваемые qtcreator не совпадают с предупреждениями компилятора, собирающего программу. В настройках qtcreator можно отрегулировать опции, которые используются для предварительного анализа кода.
    После того как вы собрали проект ошибки/предупреждения реального компилятора и qtcreator перемешиваются.

    Состав предупреждений может сильно отличаться в зависимости от используемых опций при сборке проекта. В разных IDE и проектах используются разные опции сборки.

    Часто рекомендуют включать максимальный уровень предупреждений и заморочиться с исправлением кода, чтоб предупреждений не было. Как правило предупреждения компилятора говорят если не об ошибках, то по крайней мере о "скользких" местах в коде.
    В gcc включить повышенный уровень предупреждений можно параметрами -Wall -Wextra -pedantic и задать используемый стандарт языка с помощью опции --std=xxx
    Ответ написан
    1 комментарий
  • В IDE qt creater выходят ошибки при запуске кода, хотя в DEV-C++ код нормально компилируется. Как исправить?

    Это не ошибки, а предупреждения компилятора. Разные компиляторы могут поддерживать разные стандарты c++ в соответствии с которыми выдают предупреждения.
    Ответ написан
    5 комментариев
  • Что такое грамматики в оптимизирующих компиляторах?

    jcmvbkbc
    @jcmvbkbc
    "I'm here to consult you" © Dogbert
    Грамматика -- формальное описание языка с которого производится компиляция. Читать можно начать отсюда.

    Какие преимущества разработчикам могут обеспечить грамматики?

    Грамматику можно преобразовать в парсер задаваемого ею языка. Классический пример программы выполняющей такое преобразование -- yacc.
    Ответ написан
    2 комментария
  • Карьера программиста после 30+. Миф или реальность?

    TomasHuk
    @TomasHuk
    Долго слежу за вопросом. Напишу и пару своих комментариев.
    Если ли жизнь в IT после 30? Конечно же есть. Это сейчас все такие молодые, недавно только закончившие ВУЗ или еще студенты. Но что будет через 20 лет? Программистов уже не будет или как? Будут, конечно же.
    Допустим сейчас есть молодой выпускник-программист 22 года. И есть уже "как-бы дед", 32. Так вот разница в опыте между ними через 20 лет сотрется. Появятся новые технологии, языки. Программирование вообще может перевернутся с ног на голову. Вспомните, еще не так давно популярными были VBA и Pascal, а сейчас их вытеснили более молодые языки. Это я к тому, что всё время придется заново обучаться. И "молодежь" со "старичками" будут практически в одинаковом положении. Не важно сколько тебе лет - 20, 30 или 40.
    Пишут - "в 30 уже поздно". Но прошло ведь 7-10 лет после учебы! А работать нужно будет ещё 30-35. Что в несколько раз больше, согласитесь. Можно ведь сейчас за год/полтора освоить любой язык. пусть на базовом уровне и кардинально изменить свою жизнь. А дальше развиваться уже на базовом уровне.
    Расскажу о своем опыте. Два года назад мне нужно было написать одну программу, чисто для себя. С парсингом из интернета, обработкой данных, запись в текстовый файл. Ничего необычного для меня сейчас. Выбор пал на python. Я полностью погрузился в работу. В процессе написания программы я перерыл тонну информации в интернете в поисках ответов на свои вопросы и прочитал половину Лутца. Все это сопровождалось одновременным написанием кода. За полгода я уже более-менее уверенно ориентировался в python. Мог писать небольшие скрипты или модифицировать чужие, разбираться в сторонних модулях и использовать их в своих программах.
    Это я всё к тому, что если есть стимул и желание, то научиться программировать (и начать зарабатывать этим себе на жизнь) не поздно никогда. Кроме того, если сейчас не попробовать, то можно сильно пожалеть потом и винить себя за нерешительность. Удачи!
    Ответ написан
    Комментировать
  • Как посчитать сумму чисел в матрице?

    @kova1ev
    можно так
    import functools
    
    matrix = [[]]
    
    result = functools.reduce(lambda a,x: a + sum(x), matrix, 0)
    print(result)


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

    @Denis_Yav
    with open('in.txt') as f:
    matrix = [list(map(int, row.split())) for row in f.readlines()]

    print(matrix)
    for m in matrix:
    s = sum(m)
    print(s)
    Ответ написан
    2 комментария
  • Что это обозначает в коде С++?

    @res2001
    Developer, ex-admin
    edgeStruct x{}, tmp{};
    Определяет 2 переменные x и tmp типа edgeStruct с пустым списком инициализации.
    Ответ написан
    Комментировать
  • Что это обозначает в коде С++?

    @nrgian
    Извините за отступы. Так отображается.

    Да ну?
    В поле редактирования вверху справа значок </>, далее выбираешь C++
    А перед этим ищешь в Гугле "C++ pretty formatter", находишь, к примеру, https://codebeautify.org/cpp-formatter-beautifier и прогоняешь программу через неё.

    #include <cstdio>
    
    #include <cstdlib>
    
    #include <string>
    
    #include <iostream>
    
    #include <conio.h>
    
    #include <locale>
    
    using namespace std;
    
    const int countMax = 50;
    
    FILE * inputFile, * outputFile;
    
    struct edgeStruct {
        int u, v, weight; // ребро (u, v), weight - вес ребра
    };
    
    int SortBase(int p, int r, edgeStruct E[]) {
        int i, j;
        edgeStruct x {}, tmp {};
        i = p - 1;
        j = r + 1;
        x = E[p + rand() % (r - p + 1)];
    
        while (true) {
            do {
                i++;
            } while (E[i].weight < x.weight);
    
            do {
                j--;
            } while (E[j].weight > x.weight);
    
            if (i < j) {
                tmp = E[i];
                E[i] = E[j];
                E[j] = tmp;
            } else break;
        }
        return j;
    }


    Ну исходя из того, что тут нету никакой функции main() или т.п., то это не программа, а только какая-то часть программы.

    Кусок FILE *inputFile, *outputFile; тоже нигде не задействован.

    Аналогично, видимо и с #include и с using namespace

    Эти все вещи задействованы в неприведенной вами части кода.

    Остается только

    struct edgeStruct
    int SortBase(int p, int r, edgeStruct E[])

    Все остальное - лишнее тут.

    Вот эта штука сортирует массив (вектор) структур.
    int SortBase(int p, int r, edgeStruct E[])

    Причем сортирует как то странно, с использованием случайных чисел.

    Видимо, просто перемешивает.

    Как ближайший аналог - все равно что перетасовать игральные карты перед игрой. Причем плохо перетасовать, не тщательно.
    Ответ написан
    1 комментарий
  • Есть ли в Python понятие структуры по аналогии с С++?

    Структуры крайне редко полезная вещь и я затрудняюсь придумать ситуацию, где именно они понадобятся в python.
    Ближйший аналог - __slots__ в классе.

    class edgeStruct():
      __slots__ = "u", "v", "weight"
    
    my_edge = edgeStruct()
    my_edge.weight = 5
    print(my_edge.weight)


    А еще такой вариант нашёл https://stackoverflow.com/questions/35988/c-like-s...
    А так - можно обойтись и обычным dict
    Ответ написан
    1 комментарий
  • Есть ли в Python понятие структуры по аналогии с С++?

    @MechanicZelenyy
    Да, классы (собственно структуры в плюсах тоже классы, только с другими модификаторами доступа по умолчанию)
    Ответ написан
    Комментировать
  • Как копировать массив в С++?

    @vanyamba-electronics
    #include <vector>
    #include <algorithm>
    ...
    std::vector<int> array(SIZE);
    std::vector<int> array2(array.size());
    std::copy(array.begin(), array.end(), array2.begin());
    Ответ написан
  • Как исправить ошибку при компиляции .cpp файла через терминал linux ROSA?

    Radjah
    @Radjah
    Цитирую второй результат в гугле по тексту ошибки:
    Так как cout присутствует в стандартной библиотеке С++, для которой gcc требуется явное связывание с -lstdc++; g++ по умолчанию связывает стандартную библиотеку.

    gcc vector.cpp -lstdc++ -o vector.o


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

    saboteur_kiev
    @saboteur_kiev Куратор тега Python
    software engineer
    Указать переменные, которые вы используете внутри функции как глобальные и вывести их.

    from random import randint
    comparison = 0
    transfer = 0
    
    arr = [randint(1, 100) for _ in range(10)]
    
    def bubble_sort():
        global comparison
        global transfer
        for i in range(9):
            for j in range(9 - i):
                comparison += 1
                if arr[j] > arr[j + 1]:
                    arr[j], arr[j + 1] = arr[j + 1], arr[j]
                    transfer += 1
    
    print('original array\n', *arr)
    bubble_sort()
    print('bubble sort\n', *arr)
    print('comparisons: ', comparison)
    print('transfers: ',transfer)
    Ответ написан
    1 комментарий
  • Как корректно вывести на экран кол-во пересылок и сравнений в пузырьковой сортировке массива?

    mrjbom
    @mrjbom
    У тебя сначала вызывается функция в которой и выводятся эти данные и после её завершения выводится сам массив.

    1. Вынести cout'ы в функцию main и сделать переменные считающие данные в глобальную область.
    2. Передавать 2 перемененные в функцию по ссылке и затем в main'e выводить после вывода массива.
    3. Выводить массив в функции.
    Ответ написан
    6 комментариев
  • Как корректно вывести на экран кол-во пересылок и сравнений в пузырьковой сортировке массива?

    myjcom
    @myjcom Куратор тега C++
    Как-то так:
    #include <iostream>
    #include <map>
    #include <string>
    #include <iomanip>
    using namespace std;
    
    
    void swap(int& a, int& b)
    {
      int c = a;
      a = b;
      b = c;
    }
    
    struct info
    {
      int swapCount = 0;
      int compCount = 0;
    };
    
    class Counter
    {
      public:
        static Counter& Instance()
        {
          static Counter tsCounter;
          return tsCounter;
        }
    
        info& getCount(string fn)
        {
          return callCount[fn];
        }
    
        void print()
        {
          for(auto& a : callCount)
          {
            cout << a.first   << "\n"
                 << setw(15) << left << "swap: " << a.second.swapCount << "\n"
                 << setw(15) << left << "compare: " << a.second.compCount << "\n";
          }
          cout.flush();
        }
    
      private:
        map<string, info> callCount;
        Counter(){}
        Counter(const Counter&) = delete;
        Counter& operator=(const Counter&) = delete;
    };
    
    void mysort(int* a, size_t sz)
    {
      for(int i = 0; i < sz - 1; ++i)
      {
        int minIdx = i;
        for(int j = i + 1; j < sz; ++j)
        {
          if(a[j] < a[minIdx]) minIdx = j;
        }
        swap(a[i], a[minIdx]);
        Counter::Instance().getCount(__FUNCTION__).swapCount++;
      }
    }
    
    
    int main()
    {
      int a[] = {2, 5, 6, 77, 1, 32, 45, 77, 12, 13, 14, 15};
      mysort(a, sizeof(a)/sizeof(int));
      Counter::Instance().print();
    }

    Ответ написан
    5 комментариев
  • Объясните, что значит - сборка rpm-пакетов?

    CityCat4
    @CityCat4
    //COPY01 EXEC PGM=IEBGENER
    Формирование одного файла с расширением .rpm для установки из него программы через пакетный менеджер. RPM-пакеты предназначены для RedHat-based дистрибов, например для CentOS.

    ROSA - форк мандривы, использует RPM.

    Но:
    Если раньше этого не делали никогда - лучше начать с поисков сторонних реп (понятно, что для росы их будет немного, но возможно пойдут мандривовские) или сторонних пакетов, собранных для мандривы. Если прям непременно хочется попробовать самой - нужно распаковать rpm и вытащить спеку - это здорово сэкономит время.
    Что такое спека? Это "сценарий" работы пакетного менеджера. Он ведь при установке программы не только бинарники, либы и значки должен разложить. Он должен проверить наличие нужных каталогов (и создать их, если надо и права настроить!). Он должен в нужные места переписать нужные конфиги (и при этом не пристрелить юзерские, возможно тщательно настроенные!). Он должен проверить зависимости между пакетами и докачать нужные...
    Создание RPM - процесс непростой, не быстрый и не нубский :) Хотя конечно попробовать никто не мешает. Тяжело в ученье...
    Ответ написан
    Комментировать
  • Объясните, что значит - сборка rpm-пакетов?

    2ord
    @2ord
    Это означает сборку всех скомпилированных файлов и других необходимых файлов в единый файл RPM-пакета для последующей установки в ОС .
    Ответ написан
    Комментировать
  • Как установить программу из архива tar.gz?

    saboteur_kiev
    @saboteur_kiev Куратор тега Linux
    software engineer
    Распаковать и запустить?
    tar xvfz
    Ответ написан
    5 комментариев
  • У меня есть три сортировки. Как подсчитать в каждой их них кол-во пересылок и сравнений?

    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;
    }
    Ответ написан
    Комментировать