Форум программистов, компьютерный форум, киберфорум
Ilot
Войти
Регистрация
Восстановить пароль
Карта форума Блоги Сообщество Поиск Заказать работу  
Оценить эту запись

Тестовое задание на должность программист Junior/Middle C++/DirectX

Запись от Ilot размещена 05.08.2016 в 07:39
Обновил(-а) Ilot 05.08.2016 в 07:44

Задание Junior C++: Техническое задание на должность Junior C++ developer.docx
Решение: source.rar

Задание: Middle C++/DirectX: Техническое задание на должность Middle С++ Developer.doc
Решение: не выполнялось
Размещено в Без категории
Показов 5771 Комментарии 8
Всего комментариев 8
Комментарии
  1. Старый комментарий
    Аватар для obivan
    круто попробую сделать может потяну на джуна !!! (хотя наверное нет )

    вот сделал

    Кликните здесь для просмотра всего текста
    C++
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    
    #include <iostream>
    #include <fstream>
    #include <map>
    #include <regex>
     
    class Parser {
    private:
        std::map<std::string, int32_t> m_OutList;
        std::fstream inputFile;
    public:
        enum AddSuccess { pluss = -1, error, newElem };
     
        AddSuccess AddTry(std::string& key) {
            static AddSuccess returnValue;
            returnValue = error;
            try {
                ++m_OutList[key];
                returnValue = pluss;
            }
            catch (...) {
                m_OutList.insert(std::pair<std::string, int32_t>(key, 0));
                returnValue = newElem;
            }
            return returnValue;
        }
     
        void replacePuncts(std::string& tmp) {
            static std::regex regPuncts("[[:punct:]]");
            tmp = std::regex_replace(tmp, regPuncts, "");
        }
     
        bool openFile(std::string& filePath) {
            inputFile.open(filePath);
     
            if (!inputFile.is_open()) {
                std::cerr << "File opening error!!!";
                return false;
            }
     
            return true;
        }
     
        void closeFile(void) {
            inputFile.close();
        }
     
        bool parseInfo(void) {
            std::string tmp;
            while (!inputFile.eof()) {
                inputFile >> tmp;
                replacePuncts(tmp);
     
                if (AddTry(tmp) == error)
                    return false;
            }
     
            return true;
        }
     
        bool saveResult(std::string& name) {
            std::ofstream out(name, std::fstream::out);
     
            if (!inputFile.is_open()) {
                std::cerr << "File creation or opening error!!!";
                return false;
            }
     
            for (auto it = m_OutList.begin(); it != m_OutList.end(); ++it)
                out << it->first << " " << it->second << std::endl;
     
            out.close();
     
            return true;
        }
     
    };
     
    int main(int argc, char* argv[]) {
        setlocale(LC_ALL, "Russian");
        std::ios::sync_with_stdio(false);
        Parser handler;
        
        if (!handler.openFile(
            static_cast<std::string>("input.txt"))) {
            return -1;
        }
     
        if (!handler.parseInfo()) {
            handler.closeFile();
            return -1;
        }
     
        handler.closeFile();
     
        if (!handler.saveResult(
            static_cast<std::string>("output.txt"))) {
            return -1;
        }
     
        return NULL;
    }


    на ваше взглянул после своего решения, порадовало что я тоже решил воспользоватся map

    P.S у нас с вами кстати довольно похожее решение, отличается только сам парсер
    Запись от obivan размещена 05.08.2016 в 11:17 obivan вне форума
    Обновил(-а) obivan 05.08.2016 в 13:08
  2. Старый комментарий
    Аватар для KOPOJI

    Не по теме:

    cParser::parse априори возвращает true, занятно :)

    Запись от KOPOJI размещена 05.08.2016 в 14:04 KOPOJI вне форума
  3. Старый комментарий
    Аватар для Avazart
    C++
    1
    2
    3
    4
    5
    6
    7
    8
    
         try {
                ++m_OutList[key];
                returnValue = pluss;
            }
            catch (...) {
                m_OutList.insert(std::pair<std::string, int32_t>(key, 0));
                returnValue = newElem;
            }
    obivan, А что это вообще за фигня? Что хотели то сказать?
    Запись от Avazart размещена 05.08.2016 в 16:38 Avazart вне форума
    Обновил(-а) Avazart 05.08.2016 в 16:41
  4. Старый комментарий
    Аватар для obivan
    Avazart, ну я подразумевал, мы пробуем добавить элемент по ключу, если такого ключа нет, то оператор [] кидает исключение, в таком случае мы его отлавливаем и добавляем новые элемент с таким ключом и значением 0, а если элемент был то увеличиваем его на 1, returnValue для анализа был ли добавлен новые элемент, был ли увеличен или вообще если прошел error то плохо все, ну согласен может глуповато сделал но решил так.

    хотя перечитал как мап работает, все таки хрень написал там надо было через find проверить существование ключа, ну что уж поделать вот такие костыли
    Запись от obivan размещена 06.08.2016 в 02:48 obivan вне форума
    Обновил(-а) obivan 06.08.2016 в 03:05
  5. Старый комментарий
    Аватар для Fulcrum_013
    Ну и заданьица однако. На мида это что для детсада? У нас подобная штука была частью первого курсача в первом семестре. Тока без DirectX (его тогда еще не было). Сам отрисовывай. Мало того еще и скроллируй по алгоритму (трассировка работы блок-схемы) а не только в режиме просмотра по кнопке.
    Запись от Fulcrum_013 размещена 06.08.2016 в 06:50 Fulcrum_013 вне форума
  6. Старый комментарий
    Аватар для Avazart
    Цитата:
    то оператор [] кидает исключение,
    Ну так в том то и дело что он не кидает исключение, а просто добавляет ключ (если такового не было ранее, теперь будет).
    И я уже не говорю о зле вида catch(...).

    Для определения есть или элемент используйте метод find.
    Кстати,между прочем insert тоже возвращает результат.
    Запись от Avazart размещена 18.08.2016 в 14:34 Avazart вне форума
    Обновил(-а) Avazart 18.08.2016 в 15:10
  7. Старый комментарий
    Аватар для obivan
    Цитата:
    Сообщение от Avazart Просмотреть комментарий
    Ну так в том то и дело что он не кидает исключение, а просто добавляет ключ (если такового не было ранее, теперь будет).
    И я уже не говорю о зле вида catch(...).

    Для определения есть или элемент используйте метод find.
    Кстати,между прочем insert тоже возвращает результат.
    да полностью с вами согласен, ошибку уже понял на самом деле повезло что код работает, а вот как раз таки catch(...)
    написал потому что не знал какой тип исключения кидает(ну его и нет собственно ), вообщем наговнокодил признаю )
    Запись от obivan размещена 18.08.2016 в 15:53 obivan вне форума
  8. Старый комментарий
    Аватар для Avazart
    Кидают исключения .at() методы, все остальное сделано так что бы не было потери скорости на лишних проверках.
    Запись от Avazart размещена 20.08.2016 в 17:23 Avazart вне форума
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru