• Стоит ли изучать c#?

    twentyfivesymbolsusername
    @twentyfivesymbolsusername
    Front-end developer
    Конечно стоит. Я, например, выучив С# свободно пишу на Javascript и на Java. Главное начните, потом перейти на что-то другое не будет проблемой.
    Ответ написан
    Комментировать
  • Какой велосипед написать на с++ для закрепления изученного?

    lexxpavlov
    @lexxpavlov
    Программист, преподаватель
    Сделайте какую-нибудь простую игру, с минимумом действий, но с задействованием всего вашего арсенала с c++, особенно ООП.
    Например, напишите rogue-like игру, типа того, что описана в этом топике.
    Тут у вас будет и работа с графикой, и хранение данных в файлах с конфигами (предметы, монстры, уровни), и игровая механика (перемещение, удары), и искусственный интеллект (поиск пути).
    Графику можно сделать как консольной (в текстовом режиме), так и освоить какую-нибудь графическую библиотеку (Qt, например). А можно написать два разных интерфейса и выбирать - запустить в консоли или в окне.
    Позже можно будет добавить работу с сетью и режим игры вдвоём.
    Этот проект (относительно) не сложный, но даст вам очень много практического опыта. Ведь одно дело писать классы в учебных целях, когда заранее известна конечная иерархия, а другое дело - полностью разработать иерархию, реализовать её, увидеть, что вышло не очень (так часто бывает, нужен опыт), найти способ как провести рефакторинг, обнаружить ценность интерфейсов, переписать классы на использование интерфейсов (или общие абстрактные предки), увидеть, что это гораздо лучше, порадоваться за себя, дать поиграть друзьям, получить багрепорты, исправить все баги, и так далее.
    Ответ написан
    Комментировать
  • Какой велосипед написать на с++ для закрепления изученного?

    tsarevfs
    @tsarevfs Куратор тега C++
    C++ developer
    Непростое, но, как мне кажется, полезно задание:
    Напишите TCP сервер используя сокеты и системный вызов poll(select для windows). Примерный интерфейс показан ниже. Вероятно, удобнее писать под linux, хотя большой разницы быть не должно. Должно поддерживаться подключение нескольких клиентов (в качестве клиента можно использовать утилиту netcat). Если возьметесь, могу по ходу дела давать подсказки.
    typedef std::function<void(std::String const &, std::String const &, int)> on_msg_func_t;
    
    Class TcpStringServer
    {
    public:
    	void register_on_msg_func(on_msg_func_t const & func);
    	void start(int port);
    	void send_msg(std::string const &addr, int port, std::string const &msg);
    };
    
    void on_msg_func(TcpStringServer const & server, std::string const &msg, std::string const &addr, int port)
    {
    	server.send_msg("OK");
    	std::cout << (boost::format("message %s resivied from %s:%d") % msg % addr % port ).str();
            //std::cout << "message " << msg << "received from " << addr << ":" << port << "\n";
    
    }
    
    int main()
    {
    	TcpStringServer server;
    	server.register_on_msg_func(std::bind(on_msg_func, server, _1, _2, _3));
    	server.start(12345);
    }


    Возможное развитие:

    * простая сетевая игра, крестики нолики для начала
    * удаленная консоль (прообраз ssh)
    Ответ написан
    2 комментария
  • Где найти интересные задачи по с++ разного уровня?

    tsarevfs
    @tsarevfs Куратор тега C++
    C++ developer
    http://acmp.ru/
    Еще в школе мне очень понравилось решать такую задачу:
    Дана строка длины L (30 < L < 1000), представляющая собой предложение на русском языке, зашифрованное шифром цезаря с неизвестным сдвигом K (0 < K < 33). Выведите исходное предложение.
    Например:
    input.txt "Цхчёкхюфвр юлтхилс - дщх щхщ, сщх клтжлщ йжкхшщп зло ъкхихтгшщипё."
    output.txt "Порядочный человек - это тот, кто делает гадости без удовольствия."
    Ответ написан
    2 комментария
  • Где найти интересные задачи по с++ разного уровня?

    bogolt
    @bogolt
    Не знаю что такое "озов" похоже на город какой-то, но тогда неясно отчего с маленькой буквы. Говорят в древности на Руси алфавит ( ну или буквица ) начинался с буквы Аз, откуда вероятно и пошли азы...

    По сути вопроса - любая программа длиннее тысячи строк будет представлять собой вполне себе задачу среднего уровня. Поставьте себе задачу и реализуйте ее на си++. Например напишите свой http/ftp сервер или клиент. Создайте простую игру, или удобное приложение.

    Можно конечно искать задачи где нужно "с помощью указателей" сделать что-либо, или "написать иерархию классов с виртуальными функциями" но имхо это полная ерунда. Она может помочь разве что закрепить синтаксис языка, но не дает понимания того зачем конкретная фича языка нужна.
    А вот создание собственной объемной программы - такое понимание дает в полной мере. Когда вы напишите 20й класс похожий на остальные, то зададитесь вопросом как это можно сделать проще, перечитаете учебник языка и поймете зачем нужны например шаблоны или виртуальные функции.
    Если до написания программы ( а лучше во время ) вы будете штудировать учебник языка - будет совсем хорошо.
    Ответ написан
    Комментировать