• Как удалить слово из строки начинающие на согласные?

    RabraBabr
    @RabraBabr
    Такое пойдет?

    #include <iomanip>
    #include <iostream>
    #include <string>
    #include <vector>
    
    std::string remove_word_by_first(const std::string s, const std::string first)
    {
        std::string::size_type n;
        std::string::size_type e;
        std::string result=" ";
        result+=s;
        
        while ((n = result.find(first)) != std::string::npos)
        {
            e = result.find(" ", n+1);
            result.replace(n, e-n, "");
        }
        result.erase(0,1);
        return result;
    }
    
    int main()
    {
        const std::string example = "you can build shelves for every room in your home and custom-make them after your needs";
    
        std::vector<std::string> key_list;
        key_list.push_back(" a");
        key_list.push_back(" e");
        key_list.push_back(" i");
        key_list.push_back(" o");
        key_list.push_back(" u");
        key_list.push_back(" y");
        
        std::string s = example;
        for (auto a: key_list)
        {
            s = remove_word_by_first(s, a);
        }
        std::cout << s <<std::endl;
        
        return 0;
    }
    Ответ написан
    Комментировать
  • Вопрос про указатели. Правильно ли я понимаю?

    RabraBabr
    @RabraBabr
    У вектора из стандартной библиотеки, где бы он не был, буфер data всегда хранится в динамической памяти . SBO оптимизацию он не делает насколько я помню в отличие от бустовского. Сейчас меня поправят если я ошибся. Для размещения данных в стеке используйте std::array.
    Ответ написан
    2 комментария
  • Где используется бинарный поиск?

    RabraBabr
    @RabraBabr
    Я лично использовал для поиска перегоревшей лампочки в новогодней гирлянде.
    Дано: китайская гирлянда из несколькиз сот галогенок соединенных последовательно. Пол часа до нового года. Одна лампочка перегорела - не горит вся гирлянда. Галогенки мелкие у какой нить перегорела визуально не видно. Че делать?
    Мда почесал я затылок. Яж у мамы программист, применим дихотомический поиск. Делим гирлянду пополам, берем отвертку индикатор и суем в цоколь лампы. Если индикатор горит то значит фаза пробивает до половины, делим другую половину пополам и повторяем заново. Если не горит то делим текущую половину пополам и так далее. За несколько O(n) итераций перегоревшая лампочка была найдена и заменена. Новый год настал, все щастливы :)
    З.Ы.
    Это к вопросу о том пригодится ли вам в жизни интеграл. Ну помните анекдот про ключи.
    Ответ написан
    Комментировать
  • Разработка мобильного приложения еще может принести доход разработчику с идеей?

    RabraBabr
    @RabraBabr
    Если у вас нишевое приложение, в каком то узком специфическом сегменте, нацеленное на платежеспособную аудиторию. То вполне возможно. Ищете грамотного маркетолога, заказываете исследование рынка, далее прототип и софт-ланч. Считаете сколько получаете с юзера за вычетом затрат на привлечение. Если выходите в плюс масштабируетесь запускаетесь полноценно. Имхо так.
    Ответ написан
    Комментировать
  • Почему указатель на char выводит всю строку, а не первый символ?

    RabraBabr
    @RabraBabr
    Класс ostream определяет функции операции вставки для следующих типов указателей:
    • const signed char *
    • const unsigned char *
    • const char *
    • void *
    He забывайте, что C++ представляет строку, используя указатель на ее местоположение. Указатель может иметь форму имени массива элементов типа char, явного указателя на char или же строки в кавычках. Таким образом, все следующие операторы с cout отображают строки:
    char name[20] = "Dudly Diddlemore"; char * pn = "Violet D'Amore"; cout « "Hello!";
    cout « name;
    cout « pn;
    Для определения окончания последовательности отрбражаемых символов методы используют завершающий нулевой символ.
    C++ интерпретирует указатель любого другого типа как void * и выводит числовое представление адреса. Если требуется получить адрес строки, необходимо выполнить приведение к другому типу, как показано в следующем фрагменте кода:
    int eggs = 12;
    char * amount = "dozen";
    cout << &eggs; // выводит адрес переменной eggs
    cout << amount; // выводит строку "dozen"
    cout << (void *) amount; // выводит адрес строки "dozen"


    Из: Язык программирования C++Лекции и упражнения 6-е издание Stephen Prata
    Ответ написан
    Комментировать
  • Почему нельзя создать массив произвольной длины в С++?

    RabraBabr
    @RabraBabr
    Если коротко исторически так сложилось.

    В который раз встречаю человека который упорно не желает пользоваться STL. При том это какое то иррациональное нежелание.

    А теперь длинно.

    Хочешь плохому научу?
    Выделяй память malloc'ом, а когда надо изменить размер "массива", пользуйся realloc'ом. Можешь так же как в встроенном массиве пользоваться [] для обращения к элементам массива.

    Дальше напиши какую нибудь серьезную программу тыщ хотя бы на 20 строк. И в один прекрасный день узнай, что она крашится в самом неожиданном месте, хотя раньше все работало. Далее две бессонных недели, с красными глазами проведи с отладчиком в поисках неуловимого бага. После чего совершенно случайно найди место где вылазишь за пределы массива или обращаешься к неинициализированной памяти. Вот после этого станет понятно, что так жить нельзя. И вот все это безобразие размазанное по всему коду надо собрать в одном месте. И все проверки и инициализацию делать там. А где это в одном месте? Правильно написать собственный класс, там и конструктор есть для инициализации по умолчанию и [] перегрузить можно, что бы всякие проверки делать и деструктор, что бы за собой прибрать. А потом тебе захочется, что бы твой класс работал с разными типами данных и ты перепишешь его на шаблонах.

    А теперь загляни в стандартную библиотеку. Поздравляю все это уже давно сделали за вас гораздо лучше и со множеством приятных плюшек. Тысячи программистов прошли этот путь за более чем 40 лет. Так зачем, зачем проходить этот путь еще раз? У вас, что есть запасная жизнь? Берите и пользуйтесь готовым. C++ имеет тысячи подходящих инструментов. Пользуйтесь ими. Так нет каждый новый адепт хватает кирку и лопату и бежит строить днепрогэс. Не надо построили уже до вас. Вы в стандартной библиотеки поищите оно там есть.
    Ответ написан
    Комментировать
  • Зачем нужны абстрактные классы и интерфейсы в php?

    RabraBabr
    @RabraBabr
    Как это зачем? Какой сахар? Базовый абстрактный класс задает интерфейс. И потом несколько разных дочерних классов задают разную реализацию для разных типов объектов. Но благодаря базовому абстрактному классу вы сможете например эти разные объекты создавать одной фабрикой или использовать их в других паттернах и классы этих паттернов могут работать с этими объектами через интерфейс в принципе ничего не зная об этих объектах (об их реализации).

    Вы сделав первый шаг, не поленитесь сделайте и второй. Почитайте о SOLID и GRASP про шаблоны проектирования. Когда вы выйдите на новый уровень абстрактного мышления. В голове произойдет (просветление) понимание ООП (а не вот эта вот примитивная мантра из трех слагаемых - инкапсуляция, наследование, полиморфизм). Большие коммерческие проекты все сплошь на абстракциях сделаны. Там все очень абстрактно.
    Ответ написан
  • Где используются умные указатели?

    RabraBabr
    @RabraBabr
    Я как опытный фрезеровщик могу сказать - не надо ими пользоваться нигде и никогда. Мои три пальца тому доказательство.

    Потому, что они безопасны, а сырые указатели ведут к тому, что память течет (как минимум). Исторически так сложилось, что программисты боролись с этим. Они велосипедили умные указатели, потом это попало в boost, а потом и в стандартную библиотеку.

    Насчет где и когда - вам в паттерны проектирования.
    Ответ написан
    Комментировать
  • Создаю OpenSourse проект на С++ ниже - нужны единомышленники, где мне таких искать?

    RabraBabr
    @RabraBabr
    Хочу создать программу для составления алгоритма

    Моя твоя не понимать.

    https://github.com/rustamkremcheev/AlgoIDEA

    Но там пусто. Нет там реально пусто - This repository is empty.

    мне нужна помощь.

    Вы хотите, что бы мы вам программу написали? Ну так заинтересуйте. Самый простой способ Я вам свою ставку в час назову и если все устраивает запилю вам проект.

    Хотите Бесплатно? Ну блин прежде чем носиться со своими мегапрожектами хотя бы дизайн документ на ТРИ странички составте. Не надо сочинение как я провел лето на 100 листов натягивать как наши школы и универы учат. Три несчастных страницы с сухой выжимкой хватит. Коротко четко и по делу. Авось кто то и клюнет. Потом по ходу проекта разрастется может быть в многотомник, если не помрет прежде.
    Ответ написан
    Комментировать
  • Зачем и когда нужно использовать указатели в C++?

    RabraBabr
    @RabraBabr
    Ну что же. попробуем в указатели.
    Когда то давно, когда деревья были высокими, а трава сочнее и зеленее, на одной красивой планете - да можно было и без указателей. Автоматические переменные неплохо работали в стеке (ага иди гугли про стек и какой он маленький и про знаменитый его оверфлоу). В общем ответь на вопрос, много ли этого стека? Стало все не так романтично, объемы данных росли программы усложнялись , а программист ручками в куче (ага гугли про кучу) с помощью malloc'а выделял память. А что бы он знал где он выделяет память нужны указатели (ну как адрес квартиры - где проживают переменные Ивановы?). вот указатели в общем этот адрес и хранят. Только выяснилось, что программист плохо ручками память выделяет. Например в 20 метровую однушку он может захотеть поселить табор из 300 закарпатских цыган. И согласись получится неприятность.

    Вот в c++ память выделяется new и delete - это операторы такие. Сами посчитают сколько цыган куда и адресок вернут, а когда надо всех ненужных выселят. Только лучше и веселее не стало, память всегда течет, а указатели всегда висят. А где там в какой квартире Ивановы, а где Петровы вообще не понять И куда тот табор делся? А может и не делся.

    Оппа у нас же в c++ парадигма ООП и классы (гуглим классы). А в классах всегда конструктор и деструктор (гуглим), и они вызываются автоматически когда объект (экземпляр класса) создается и когда уничтожается. Так может new положим в конструктор, а delete в деструктор? И назовем все это хозяйство std::auto_ptr. И пусть он сам за памятью следит, а программиста будем бить по рукам за ручное выделение памяти

    Беда, печаль однако. Лучше жить не стало. и виной тому конструктор копирования (вот опять гуглим). Тогда придумали семантику перемещения r-value ссылки и кучу новых умных указателей вот просвещайся https://ru.cppreference.com/w/cpp/memory
    Если пройдешь по ссылке то увидишь много новых и интересных слов например аллокаторы или неинициализированные хранилища.

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

    RabraBabr
    @RabraBabr
    Была игра такая - Colobot
    Ответ написан
    Комментировать
  • Простой векторный графический редактор?

    RabraBabr
    @RabraBabr
    Вот вам политеховская методичка по которой студенты делают лабы (и я когда то делал)
    vt.samgtu.ru/%2Fattachments%2Farticle%2F233%2F%D0%...
    Ее вполне вам хватит. Рисование прямых, кривых Безье, раскраска многоугольников, тмо, матрицы вращения, масштабирования и сдвига там есть.
    Ответ написан
    Комментировать
  • Чем Классы отличаются от обычных функций?

    RabraBabr
    @RabraBabr
    ООП это не управление сложностью как многие тут напишут. Это сущность другого уровня абстракции. Вы смешали в одну кучу сущности из разных уровней.
    Вот смотрите - в физическом мире есть микромир с электронами, протонами, фотонами и не знаю там чем еще. Он работает по своим законам квантовой механики. Есть макромир уровня вещей самолетов, яблок, деревьев. Он работает по законам Ньютоновской механики. Есть мир космогонии уровня звезд галактик черных дыр. Он работает по Теориям Эйнштейна. Видите как просто. Мы прошлись по трем уровням абстракции материального мира самого низкого до самого высокого.
    Так же и в мире информации есть самые низкие уровни машинных кодов, регистров и отдельных битов. А есть более высокие уровни функций, еще более высокие уровни классов и даже еще более высокие уровни абстракций. Так вот ваша задача рассортировать все те сущности, что вы привели правильно по разным уровням. А у вас все в одной куче: операторы, переменные, классы. И не надо высшему миру знать о низшем ничего. Тогда все будет правильно.
    Беда программирования в том, что очень мощные инструменты доступны всем. Вот представь мед лабораторию с микроскопами, скальпелями пробирками и другим оборудованием. Туда не каждого пустят. В программировании же каждый может нажать кнопку скачать и начать творить всякую фигню. Пришить пятую ногу собаке, вырастить ей ухо на спине и рога на лбу. Была такая книга - "Многоярусный мир". Там один товарищ специализировался на таких уродцах. Вот потом эти уродцы начинают мстить их создателю.
    Так вот нормальный программист попав в этот мир уродцев, зачастую впадает в ступор. Зачем так делать? Ну то есть делать можно все, что угодно. Но не нужно. Его задача уменьшать энтропию вселенной, а не увеличивать.
    Ответ написан
    3 комментария
  • Указатели и многомерные массивы (С++)?

    RabraBabr
    @RabraBabr
    #include <iostream>
     
    int main()
    {
    // создается двухмерный массив 3 на 4 и тут же заполняется числами
        int a[3][4] = { {1, 2, 3, 4} , {5, 6, 7, 8}, {9, 10, 11, 12}};
    
    //  вычисляем количество строк  матрицы 3
        int n = sizeof(a)/sizeof(a[0]);      
    
    // вычисляем количество столбцов матрицы 4
        int m = sizeof(a[0])/sizeof(a[0][0]);  
          
    // устанавливаем в указатель *end адрес ячейки памяти последнего элемента массива
        int *end = a[0] + n * m - 1; 
    
    //  устанавливаем в указатель *ptr адрес ячейки памяти первого элемента массива (имеющего нулевой индекс)
    // после этого последовательно перебираем все элементы массива и выводим их на экран. 
    // Что бы массив выводился на экран в виде матрицы завели переменную i для подсчета количества итераций
        for(int *ptr=a[0], i=1; ptr <= end; ptr++, i++)
        {
            std::cout << *ptr << "\t";
    
    // как только кол-во итераций стало кратно кол-ву столбцов то есть выведена целая строка переводим каретку на новую строку
            if(i%m == 0) 
            {
                std::cout << std::endl;
            }
        }
         
        return 0;
    Ответ написан
    Комментировать
  • Как создать игру на андроид с использованием C++ и OpenGl ES?

    RabraBabr
    @RabraBabr
    Скачиваем Qt Creator, Android NDK. Устанавливаем. Создаем проект из темплейта.
    Подключаем в хидерах и pro файле opengl. И вперед. Я использую для игр QOpenGLFramebufferObject. Ну конечно нужно немного в шейдеры, немного в вертексы и нормали. Немного в матричные преобразования, немного в освещение и текстуры. Что там еще? В общем ничего сложного. Если есть опыт болванка проекта создается буквально на коленке за пару часов. За несколько вечеров можно создать простенькую демку или игрушку.
    Ответ написан
  • Как управлять клавишами анимацию в с++?

    RabraBabr
    @RabraBabr
    Ну например отлавливать сообщение нажатия соответствующей клавиши и изменять координаты объекта. Вот в MFC как то так например.
    BOOL CMainWindow::PreTranslateMessage(MSG* pMsg) 
    {
    	if( pMsg->message == WM_KEYDOWN)
    	{
            if (pMsg->wParam == VK_SPACE) 
            {
                // поймали нажатие пробела, что то там делаем, например меняем координату;
                x += 5;
            }
        }
    }


    А вообще для ответа на вопрос нужно несколько уточнений. Например какой у вас фреймворк?
    Ответ написан
    Комментировать
  • Как разработать мобильную игру руками аутсорсеров?

    RabraBabr
    @RabraBabr
    1) С чего стоит начать исходя из ТЗ? (Напомню что есть идея сделать клон Idel Miner)


    Начинать надо с маркетингового исследования. Кто ваша целевая аудитория, какая ниша у вашего продукта, объемы, конкуренция, платежеспособность, спрос. Рекламные бюджеты. Органический и неорганический трафик и т.д. И это все не просто слова. Это цифры, цифры, цифры. Конкретные - кто, где, когда, сколько. Если вы так сказать серьезно на миллион долларов нацелились.

    Есть ли студии которые за 3 копейки могут реализовать часть ТЗ или все целеком?


    За три копейки вам студенты на коленке соберут. Профессионалы стоят денег. И разработка тут на самом деле не самая дорогая вещь.

    3) А что выгодней будет, обращаться в студию или искать фрилансеров и какие риски есть?


    Фрилансер выгоднее. Риски? Выкинуть деньги на ветер.

    4) Где и как искать рекламу в приложение? Есть биржи? Что стоит почитать?


    Google AdMob, Chartboost, APPODEAL туда рыть надо. Гугель в помощь.
    Ответ написан
  • Сколько можно зарабатывать на C++ в 14 лет?

    RabraBabr
    @RabraBabr
    Две недели (14 дней) изучения c++ это очень мало для того, что бы зарабатывать деньги. Что бы зарабатывать деньги нужно очень хорошо знать c++. Для этого его нужно изучать достаточно долго. Ну хотя бы 21 день. Загугли "как выучить c++ за 21 день". И поймешь что сможешь зарабатывать на отрезке где то между 698-3648 дней.
    Ответ написан
    3 комментария
  • Как создавать подобные игры на Android?

    RabraBabr
    @RabraBabr
    1)Под это дело легко и просто подходит декларативный язык QML
    2)Qt Creator
    3)Эмм... Хороший вкус со стороны дизайна? Возможно я чего то не понимаю но имхо это ужасно.
    Ответ написан
    Комментировать