• VC++ 2010 не даёт описать переменную в середине блока - ограничение Express-версии?

    Adamos
    @Adamos
    Возможность определять переменные в середине блока появилась в С стандарта 99.
    Visual Studio 2010 поддерживает только С 98. Независимо от редакции.
    Ответ написан
    Комментировать
  • Как написать функцию в с++,чтоб та возвращала массив строк в программу?

    myjcom
    @myjcom Куратор тега C++
    знаю,что прога корявая;)

    VS 2017 Windows 10
    Квест пройдешь

    #include<iostream>
    #include<fstream>
    #include<vector>
    #include<string>
    #include<algorithm>
    #include<iterator>
    #include<iomanip>
    #include<sstream>
    using namespace std;
    
    struct Book
    {
      string name;
      int year = 0;
      int circulation = 0;
    };
    
    istream& operator>>(istream& is, Book& book)
    {
      string line;
      getline(is, line);
    
      istringstream head(line);
      getline(head, book.name, ':');
      head >> book.year >> book.circulation;
      return is;
    }
    
    vector<Book> getBooksList(istream& source)
    {
      return{ istream_iterator<Book>{source}, {} };
    }
    
    // Пришел в библиотеку - дайте мне немного книг, любых.
    // А тебе говорят - сам возьми, вон там две полки - нижняя и верхняя. 
    // А да, забыли предупридить - ВЫХОД платный!
    enum class input_type : int {Console, File, None};
    input_type get_input()
    {
      if(!cin)
      {
        system(" ");
        cout << "\n\x1b[1;31mА вот и не угадал! Играй по правилам!\x1b[0m\n\n"
                "Правило первое - никаких правил ;)\n\n";
        cin.clear();
      }
      
      cout << "Жми откуда брать: \n [0] -- (консоль)\n [1] -- (файл)\n\n" 
              "[Ctrl + Z] -- (Извините ошибся дверью)\n\n$: ";
      int inp = 0;
      if(cin >> inp && inp == 0)
      {
        system(" "); 
        cout <<  "Вводи \x1b[1;31m [ Название : Год Тираж ]\n\n"
             <<  "Пример:"
             <<  "\t\x1b[0;40;36mЗолотой ключик, или Приключения Буратино : 1936 50000\n\n"
             <<  "\x1b[0mНе забудь \x1b[1;33mCtrl + Z\x1b[0m означает конец ввода.\n\n";
      }
      return static_cast<input_type>(inp);
    }
    
    // Не Аквафор
    vector<Book> filter(vector<Book> const& books, int from, int to)
    {
      vector<Book> filtered;
      copy_if(books.cbegin(), books.cend(), back_inserter(filtered), [=](auto const& b){
        return b.year >= from && b.year <= to;
      });
      
      return filtered;
    }
    
    // Что я прочитал за это лето
    void print_table(vector<Book> const& books)
    {
      auto max_width_elm = max_element(books.cbegin(), books.cend(), [](auto const& a, auto const& b){
        return a.name.size() < b.name.size();
      });
      
      if(max_width_elm == books.cend())
      {
        cout << "Ничего, бывает...\n";
        return;
      }
    
      size_t max_width = max_width_elm->name.size();
    
      // А какая у вас машина? - Зеленая O_o
      system(" ");
      cout << "\x1b[1;32m"
           << setw(8 + max_width) 
           << left     << "Название"
           << setw(12) << "Год"
           << setw(12) << "Тираж" << "\n"
           << "\x1b[0m";
      
      for(auto[name, year, circul] : books)
      {
        cout << setw(8 + max_width) 
             << left     << name
             << setw(12) << year
             << setw(12) << circul << "\n";
      }
    }
    
    enum class sort_field { Name, Year, Circul };
    auto sort_by = [](sort_field field, auto& container){
      sort(container.begin(), container.end(), [=](const auto& a, const auto& b){ 
        bool result = false;
        switch(field)
        {
        case sort_field::Year:
          result = a.year < b.year;
          break;
        case sort_field::Circul:
          result = a.circulation < b.circulation;
          break;
        default:
          result = a.name < b.name;
          break;
        }
        return result;
      });
    };
    
    int main()
    { 
      setlocale(LC_ALL, "");
    
      //типа файл
      const string test_data = "book10 : 2010 10000\n"
                               "book09 : 2009 9000\n" 
                               "book19 : 2019 19000\n"
                               "book03 : 2003 3000\n"
                               "book84 : 1984 84000\n"
                               "book42 : 2042 42000";
      istringstream is(test_data);
    
      vector<Book> books;
    
      input_type input = input_type::None;
    
      while(input == input_type::None)
      {
        input = get_input();
        switch(input)
        {
        case input_type::Console:
          books = getBooksList(cin);
          break;
        case input_type::File:
          books = getBooksList(is);
          break;
        default:
          system(" ");
          cout << "\n\x1b[1;33mВыбери 0 или 1 ЧеГо НеПоНяТнОгО?\x1b[0m \n";
          input = input_type::None;
          break;
        }
      }
      
      sort_by(sort_field::Year, books);
      
      print_table(filter(books, 2000, 2010));
     
      system("pause");
    }


    Помогите пожалуйста написать код функции (fun.....она уже сто раз написана,переписана,закомментирована)

    помогу написать код функции.
    заранее спасибо!!!)

    Я постарался

    #include<iostream> 
    #include<iomanip> 
    #include<fstream>
    #include<string>
    #include<Windows.h>
    using namespace std;
    
    struct book
    {
      string name;
      unsigned year;
      unsigned circulation;
    };
    
    int count_if(book* b, int sz, int from, int to)
    {
      int cn = 0;
      for(int i = 0; i < sz; ++i)
      {
        if(b[i].year >= from && b[i].year <= to)
        {
          ++cn;
        }
      }
      return cn;
    }
    
    book* get_books_list(book* arr, int n, int from, int to, int& out_sz)
    {
      out_sz = count_if(arr, n, from, to);
      if(out_sz == 0)
      {
        return nullptr;
      }
    
      book* array = new book[out_sz];
      int idx = 0;
    
      for(int i = 0; i < n; ++i)
      {
        if(arr[i].year >= from && arr[i].year <= to)
        {
          array[idx].name = arr[i].name;
          array[idx].year = arr[i].year;
          array[idx].circulation = arr[i].circulation;
          ++idx;
        }
      }
      return array;
    }
    
    int main()
    {
      SetConsoleCP(1251);
      SetConsoleOutputCP(1251);
      
      string kng = "TextFile1.txt";
      int N;
      book *arr;
      int otkr;
      cout << "ВЫБЕРИТЕ СПОСОБ ВВОДА. 0 - С КЛАВИАТУРЫ, 1 - ИЗ ФАЙЛА  \n";
      cin >> otkr;
      if(otkr == 0)
      {
        cout << "введите размер массива \n";
        cin >> N;
        arr = new book[N];
        for(int i = 0; i < N; ++i)
        {
          cout << "Введите название книги\n";
          cin >> arr[i].name;
          cout << "Введите тираж \n";
          cin >> arr[i].circulation;
          cout << "Введите год издания \n";
          cin >> arr[i].year;
        }
    
        for(int i = 0; i < N; ++i)
        {
          cout << arr[i].name << "  " << arr[i].circulation << "  " << arr[i].year << endl;
        }
    
      }
      else
      {
        fstream knigi;
        knigi.open("TextFile1.txt");
        knigi >> N;
        arr = new book[N];
        for(int i = 0; i < N; i++)
        {
          knigi >> arr[i].name >> arr[i].circulation >> arr[i].year;
        }
      }
    
      int sz = 0;
    
      book* books = get_books_list(arr, N, 2000, 2010, sz);
    
      delete[] arr;
    
      if(books)
      {
        cout << "НАЗВАНИЕ И ТИРАЖ КНИГ С ИЗДАННЫХ С 2000-2010 ГГ:\n";
        for(int i = 0; i < sz; ++i)
        {
           cout << books[i].name << "  " << books[i].circulation << "\n";
        }
        delete[] books;
      }
      else
      {
        cout << "ТАКИХ НЕТ.";
      }
      system("pause");
    }

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

    xmoonlight
    @xmoonlight
    https://sitecoder.blogspot.com
    "Я всё сделал. Что дальше?" (шутка)

    "Я думаю сделать так (показываете схему того, как Вы поняли задачу), верно?"
    "Я с этим не сталкивался. С чего мне начать?"
    "Я хочу оптимизировать (показатель и место оптимизации). Что скажете?"
    "Пытаюсь разобраться... Читал... Делал... Не получилось. Что я упустил?"

    И самое страшное:
    Которые вы бы хотели, чтобы Вас спрашивали, но высказать напрямую ваше желание вы не можете :)))
    Потеря коммуникации - потеря времени и средств!
    Ответ написан
    Комментировать
  • Как сделать вывод всех файлов файлов и директорий с данными о каждом файле?

    myjcom
    @myjcom Куратор тега C++
    Заготовка

    #include<iostream>
    #include<filesystem>
    #include<string>
    
    using namespace std;
    namespace fs = filesystem;
    
    auto listFilesRecursively = [](auto const& dir, string const& mask = {}){
      if(!fs::is_directory(dir))
      {
        cerr << dir << " is not dir";
        throw "is not dir!";
      }
      
      for(auto const& file : fs::recursive_directory_iterator(dir))
      {
        if(fs::is_regular_file(file))
        {
          if(mask.empty() || file.path().extension().string() == mask)
          {
            // Здесь твоя функция вывода инфы
            cout << file.path().string() << " #size: " << file.file_size() << "\n";
          }
        }
        else if(fs::is_directory(file))
        {
          cout << "\n****** dir ****** [" << file.path().string() << "]\n";
        }
        else
        {
          cout << "\n***** other... ******[" << file.path().filename().string() << "]\n";
        }
      }
    };
    
    int main()
    {
      const string start_dir = R"(C:\Program Files)";
      try
      {
        listFilesRecursively(start_dir, ".dll");
      }
      catch(exception& e)
      {
        cerr << e.what();
      }
    }


    если нужна прямо маска - маска, то тут уже сам, там конечный автомат на 10-15 строк.
    Ответ написан
    3 комментария
  • Какой библиотекой загружать 3D объекты в с++ из программ моделирования?

    Slavik_Kenny
    @Slavik_Kenny
    3Д моделлер, и немного всего остального :)
    Напрямую файл max ты загрузить не сможешь, в любом случае загружать ты будешь то, что экспортируешь из него (или из любого другого пакета).
    А уж какой формат ты выберешь для экспорта - тот тебе и придется загружать.
    Форматы есть вполне открытые, тот-же 3DS или Obj по сути текстовые файлы, примеров парсеров для obj полно гуглится.
    В любом случае рекомендую ознакомится с ними - поймешь как устроены эти файлы и как модели представлены в памяти (индексы вершин, полигонов, координаты текстур и т.д.), будет намного понятнее как там дальше в openGL что происходит с этим.
    Ответ написан
    Комментировать
  • Где найти библиотеки для C++?

    myjcom
    @myjcom Куратор тега C++
    Пару часов уже копаюсь в просторах сети и кроме стандартных ничего дельного не нахожу.

    https://en.cppreference.com/w/cpp/links/libs
    Графические и мат

    там же в разделе Graphics, там же в разделе Math
    Ответ написан
    Комментировать
  • Как создать одномерный массив из многомерного в C++?

    sgjurano
    @sgjurano
    Разработчик
    У вас разное число элементов в arrOne и arrTwo.

    Если всё же предположить, что arrOne — это матрица 8x8, а arrTwo — массив из 64 элементов, то достаточно будет написать вот такой код:
    for (size_t i = 0; i < 64; ++i) {
        arrTwo[i] = arrOne[i / 8][i % 8];
    }
    Ответ написан
    2 комментария
  • В чем разница между методом в public и private?

    @Mercury13
    Программист на «си с крестами» и не только
    Это права доступа к методу. Относятся не к Cи++, а к ООП в целом.

    private — имеют доступ только методы самого объекта.
    protected — имеют доступ методы объекта и его потомков.
    public — кто угодно.

    Также существуют права доступа типа «не важно, что объекты станут связанным клубком; я готов к тому, что этот клубок придётся добавлять в программу целиком». В общем, когда объекты имеют доступ к private-методам друг друга.
    • В Си++ — ключевое слово friend
    • В Java — без ключевого слова (т.н. права доступа package)
    • В Паскале — по умолчанию есть доступ к private-полям и методам всех объектов в том же модуле.

    Эти особые права доступа (friend/package) оправданы, когда…
    • Издержки от клубка незначительны (например, объекты невелики и хорошо взаимосвязаны).
    • В клубок входят объект и его утилиты (например, какая-нибудь операция ++).
    Ответ написан
    Комментировать
  • Почему 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 <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
    Ответ написан
    Комментировать
  • Как перевести этот код C++ на python?

    sergey-gornostaev
    @sergey-gornostaev Куратор тега Python
    Седой и строгий
    1. Изучить C++
    2. Изучить Python
    3. Перевести код
    4. PROFIT
    Ответ написан
    Комментировать
  • Как сохранить в памяти и суммировать в число определенную в байтах массу файлов а затем использовать результат?

    myjcom
    @myjcom Куратор тега C++
    https://en.cppreference.com/w/cpp/filesystem
    Если доступен С++17
    #include<iostream>
    #include<filesystem>
    #include<string>
    using namespace std;
    namespace fs = filesystem;
    
    auto getDirectorySize(const fs::path& p)
    {
      uintmax_t size = 0;
      if(fs::is_directory(p))
      {
        for(const auto& f : fs::directory_iterator(p))
        {
          size += f.file_size();
        }
      }
      return size;
    }
    
    int main()
    {
      string directory{ "C:\\TEMP" };
      fs::path dp{ directory };
      
      auto size{ getDirectorySize(dp) };
      cout << "size of "  << directory 
           << " "         << size 
           << " bytes"    << endl;
    }

    Или

    #include<iostream>
    #include<fstream>
    #include<string>
    #include<vector>
    using namespace std;
    
    size_t getFileSize(const string& filename)
    {
      ifstream ifs(filename);
      size_t size = 0;
      if(ifs)
      {
        ifs.seekg(0, ios_base::end);
        size = ifs.tellg();
      }
      return size;
    }
    
    int main()
    {
      vector<string> filenames{
        "C:\\TEMP\\aaa.txt", "C:\\TEMP\\bbb.txt", "C:\\TEMP\\ccc.txt"
      };
    
      size_t size = 0;
    
      for(const string& fn : filenames)
      {
        size += getFileSize(fn);
      }
    
      cout << "Size: " << size << endl;
    }

    Ответ написан
    7 комментариев
  • Stl c++ min elem?

    myjcom
    @myjcom Куратор тега C++
    гуглил, что-то не выходит понять

    https://en.cppreference.com/w/cpp/algorithm/min_element

    но почему она не возвращает значения сразу , а только в конце? каким образом происходит сравнение?

    min_element
    template<class ForwardIt, class Compare>
    ForwardIt min_element(ForwardIt first, ForwardIt last, Compare comp)
    {
        if (first == last) return last;
     
        ForwardIt smallest = first;
        ++first;
        for (; first != last; ++first) { // не возвращает значения сразу
            if (comp(*first, *smallest)) { //  каким образом происходит сравнение
                smallest = first;
            }
        }
        return smallest; // а только в конце
    }


    написал код чтобы легче было ориентироваться

    https://ru.cppreference.com/w/cpp/numeric/math/abs
    #include<cmath>
    // ...
    
    int result = *min_element(array.begin(), array.end(), [](int a, int b) { return abs(a) < abs(b); });
    
    // ...
    Ответ написан
    Комментировать
  • Книги про "Сети в компьютерных играх"?

    GavriKos
    @GavriKos Куратор тега Разработка игр
  • Соотношение многопоточности приложения c++ и многопоточности на уровне системы?

    gbg
    @gbg
    Любые ответы на любые вопросы
    У вас тотальный бардак в голове относительно терминов. Разберитесь с тем, что такое процесс, а что такое поток, что за "второй способ работы с многопоточностью при помощи мьютексов" и так далее. "Многопоточность в одной единице трансляции" - это просто шедевр. Как единицы трансляции связаны с потоками?

    Из вашего потока сознания я понял, что вам нужен QSingleApplication - Штука, которая не дает запустить программу более одного раза.
    Ответ написан
    3 комментария
  • Зачем системному администратору в техникуме дают математику?

    gbg
    @gbg
    Любые ответы на любые вопросы
    Очередной "зачем меня учат" - вопрос. Объясняю:

    Процесс обучения состоит не только в тупом заталкивании в башку одмина информации "бело-оранжевый, оранжевый, бело-зеленый, синий, бело-синий, зеленый,...), но и в развитии его способностей к мышлению, а также развитию его личности в целом.

    Именно для этой цели во все учебные программы засунуты такие ненужные вещи как физкультура (чтобы в 30 лет не скупать половину аптеки), культурология (чтобы отличать Бебеля от Бабеля, Бабеля от кабеля, кабель от кобеля, а кобеля от суки), математика и прочее барахло.

    Умение ковыряться с абстрактными буковками на бумажке что-то там улучшает в мозгах, после чего решение тех же задач по планированию работ получается с меньшими усилиями. И кроме того, вы не будете всю жизнь тянуть кабели (надеюсь), так что начальные знания полезно иметь.
    Ответ написан
    4 комментария
  • Как найти у, заданную параметрически?

    myjcom
    @myjcom Куратор тега C++
    "приравниваю" - это очень плохая терминология.
    Есть объявление и инициализация, есть присвоение. Что такое обнулил/занулил/приравнял непонятно.

    init-declarator-list - comma-separated list of declarators with optional initializers. запятая разделитель.

    comma operator a, b - evaluate expression a, disregard its return value and complete any side-effects, then evaluate expression b, returning the type and the result of this evaluation запятая оператор.

    запятая в объявлении переменных несет только синтаксическую функцию разделителя.

    перед компиляцией это
    float i, a, x = 0;
    будет развернуто в это
    float i;
    float a;
    float x = 0;


    Подскажите пожалуйста, где я ошибаюсь..

    даже если предположить что i == 0.0 и a == 0.0
    float y = ((i + x) / (2.5 * i + pow(x, i)) ) + a * pow(sin(x), i + 1);

    что получается?
    float y = x / 1;

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

    sim3x
    @sim3x
    По сути всем плевать на актуальность
    От вас требуют формальную актуальность
    Иначе ваш научрук выдал бы с десяток (сотен) реальных проблем, которые ему нужно решить на вчера в его научной работе

    Единственная реальная проблема игростроя - наличие в ней маркетологов и других любителей "surprise mechanics"

    Во-вторых, 9999 милионная инди-игра не прокатывает в этом году.
    противоречит
    Во-первых, с этого года выпускники должны писать дипломную работу только соответственно специальности


    Исходя из вышесказанного - вам нужно пытать научрука, что пройдет коммисию
    Ответ написан
    1 комментарий
  • Где практически применить язык Си?

    sergey-gornostaev
    @sergey-gornostaev Куратор тега C
    Седой и строгий
    На языке C можно программировать вообще всё. Соответственно "простой обыватель" может написать то, что ему нужно.
    Ответ написан
    Комментировать
  • Книги, советы, курсы по архитектуре приложений?

    sergey-gornostaev
    @sergey-gornostaev
    Седой и строгий
    Начните с хрестоматийного трёхтомника Роберта Мартина "Чистый код", "Чистая архитектура" и "Идеальный программист".
    Ответ написан
    Комментировать