diff --git a/.gitmodules b/.gitmodules index 8f69639..7eeb3c4 100644 --- a/.gitmodules +++ b/.gitmodules @@ -4,3 +4,6 @@ [submodule "Homeworks/2-Git/hw-project"] path = Homeworks/02-Git/hw-project url = git@github.com:czertyaka/CppDevCourse-hw2.git +[submodule "Homeworks/04-Guessing-Game/hw-project"] + path = Homeworks/04-Guessing-Game/hw-project + url = git@github.com:czertyaka/CppDevCourse-hw-guessing-game.git diff --git a/Homeworks/04-Guessing-Game/guessing-game.tex b/Homeworks/04-Guessing-Game/guessing-game.tex new file mode 100644 index 0000000..bbb48d9 --- /dev/null +++ b/Homeworks/04-Guessing-Game/guessing-game.tex @@ -0,0 +1,147 @@ +\documentclass[14pt]{extarticle} + +\usepackage{homeworktemplate} +\usepackage[askip=3mm, bskip=3mm]{mylisting} +\usepackage[stable]{footmisc} +\usepackage{csquotes} +\usetikzlibrary{positioning} +\usetikzlibrary{shapes.geometric} +\usetikzlibrary {arrows.meta} + +\title{Домашняя работа 3 \\ The Guessing Game} + +\begin{document} + +\maketitle + +\tableofcontents + +\section{Задание} \label{requirements} + + В этом домашнем задании вам предлагается реализовать простейший случай + игры Guessing Game. + Её суть сводится к тому, что программа \enquote{загадывает} число в известном + диапазоне, а пользователь должен это число угадать с нескольких попыток. + + \subsection{Требования} + + \begin{enumerate} + + \item Программа после начала выполнения должна \enquote{загадывать} случайное число в + диапазоне от 0 до 9. + Программа на протяжении всей дальнейшей работы не должна менять это число. + + \item Количество попыток пользователя не ограничено. + Программа штатно завершает работу только после удачной попытки угадать число. + + \item Программа должна выводить строку \framebox{Guess a number from 0 to 9: } + (обратите внимание на пробел в конце строки) перед каждой попыткой + пользователя угадать число. + + \item Программа должна выводить \framebox{Wrong!}, когда введенное пользователем число + не совпало с \enquote{загаданным}, и \framebox{Correct!}, когда совпало. + + \end{enumerate} + + \subsection{Алгоритм} + + Алгоритм игры изображен на рис.~\ref{fig:algorithm}. + + \begin{figure}[h!] + + \centering + + \begin{tikzpicture} + + \tikzstyle{every node}=[draw] + + \node (start) [rounded corners=10pt] {Начало работы}; + \node (generation) [rectangle, below=1cm of start] {Генерация случайного числа}; + \node (input) [trapezium, trapezium right angle=120, trapezium left angle=60, below=1cm of generation] {Ввод числа пользователем}; + \node (decision) [diamond, aspect=2, below=1cm of input] {Числа равны?}; + \node (end) [rounded corners=10pt, below=1cm of decision] {Завершение работы}; + + \node (no) [draw=none, fill=none, below right=0.1cm and 0.1cm of decision.east] {Нет}; + \node (no) [draw=none, fill=none, below right=0.1cm and 0.1cm of decision.south] {Да}; + + \draw[-{>[length=1mm]}] (start) -- (generation); + \draw[-{>[length=1mm]}] (generation) -- (input); + \draw[-{>[length=1mm]}] (input) -- (decision); + \draw[-{>[length=1mm]}] (decision) -- (end); + \draw[-{>[length=1mm]}] (decision.east) to[bend right=90] (input.east); + + \end{tikzpicture} + + \caption{Алгоритм игры}\label{fig:algorithm} + + \end{figure} + + \subsection{Ограничения} + + \begin{itemize} + + \item Можно считать, что в поток ввода всегда поступает строка, + корректно преобразующаяся в число. + Т.е., не нужно добавлять в программу валидацию ввода пользователя. + + \end{itemize} + +\section{Порядок выполнения} + + \begin{enumerate} + + \item Создайте форк репозитория \url{https://github.com/czertyaka/CppDevCourse-hw-guessing-game}. + + \item Добавьте в форк файл \textit{main.cpp}. + + \item В файл \textit{main.cpp} добавьте код Guessing Game. + + \item Соберите проект и протестируйте решение. + + \item Создайте pull request из вашего форка в оригинальный репозиторий, + в названии которого есть ваше ФИО. + + \end{enumerate} + +\section{Критерии выполнения} + + \begin{itemize} + + \item Выполнены все требования из \ref{requirements}. + + \item Pull request проходит автоматизированные проверки. + + \item Код в pull request прошел ревью преподавателем. + + \end{itemize} + +\section{Полезные ссылки} + + \begin{itemize} + + \item Операции ввода-вывода: + + \begin{itemize} + + \item \url{https://www.geeksforgeeks.org/cpp/basic-input-output-c/} + + \item \url{http://en.cppreference.com/w/cpp/io/cin.html} + + \item \url{http://en.cppreference.com/w/cpp/io/cout.html} + + \item \url{https://en.cppreference.com/w/cpp/io/manip.html} + + \end{itemize} + + \item Генерация случайный чисел: + + \begin{itemize} + + \item \url{http://en.cppreference.com/w/cpp/numeric/random.html} + + \end{itemize} + + \end{itemize} + +\end{document} + diff --git a/Homeworks/04-Guessing-Game/hw-project b/Homeworks/04-Guessing-Game/hw-project new file mode 160000 index 0000000..d7ac2b1 --- /dev/null +++ b/Homeworks/04-Guessing-Game/hw-project @@ -0,0 +1 @@ +Subproject commit d7ac2b14513521917889461fb611551c475ac580 diff --git a/Makefile b/Makefile index 55fe1e7..0cd1749 100644 --- a/Makefile +++ b/Makefile @@ -9,6 +9,7 @@ BUILD_DIR := build hw-01 \ hw-02 \ hw-03 \ + hw-04 \ install \ pr-01 \ pr-02 \ @@ -31,6 +32,7 @@ build: \ hw-01 \ hw-02 \ hw-03 \ + hw-04 \ pr-01 \ pr-02 \ pr-03 \ @@ -64,6 +66,7 @@ install: build cp "$(BUILD_DIR)/hw-01.pdf" "$(PREFIX)/Домашние задания/01 Hello World.pdf" cp "$(BUILD_DIR)/hw-02.pdf" "$(PREFIX)/Домашние задания/02 Git & Github.pdf" cp "$(BUILD_DIR)/hw-03.pdf" "$(PREFIX)/Домашние задания/03 Two Sum.pdf" + cp "$(BUILD_DIR)/hw-04.pdf" "$(PREFIX)/Домашние задания/04 The Guessing Game.pdf" mkdir -p "$(PREFIX)/Проекты" cp "$(BUILD_DIR)/prj-auth-lib.pdf" "$(PREFIX)/Проекты/Библиотека идентификации и аутентификации.pdf" cp "$(BUILD_DIR)/prj-enc-exch.pdf" "$(PREFIX)/Проекты/Baremetal шифрование обмена.pdf" @@ -79,6 +82,7 @@ help: @printf "hw-01\tbuild homework hw-01.pdf\n" @printf "hw-02\tbuild homework hw-02.pdf\n" @printf "hw-03\tbuild homework hw-03.pdf\n" + @printf "hw-04\tbuild homework hw-04.pdf\n" @printf "install\tinstall all presentations and homeworks\n" @printf "pr-01\tbuild presentation pr-01.pdf\n" @printf "pr-02\tbuild presentation pr-02.pdf\n" @@ -111,6 +115,7 @@ pr-12: pr-12.pdf hw-01: hw-01.pdf hw-02: hw-02.pdf hw-03: hw-03.pdf +hw-04: hw-04.pdf prj-auth-lib: prj-auth-lib.pdf prj-enc-exch: prj-enc-exch.pdf @@ -275,8 +280,13 @@ hw-02.pdf: \ hw-03.pdf: \ Homeworks/03-TwoSum/two-sum.tex \ Homeworks/homeworktemplate.sty \ - $(wildcard Homeworks/03-TwoSum/**/*.cpp) \ - $(wildcard Homeworks/03-TwoSum/**/*.h) \ + Packages/terminal.sty \ + Packages/mylisting.sty + $(call generate_pdf,$<,$@) + +hw-04.pdf: \ + Homeworks/04-Guessing-Game/guessing-game.tex \ + Homeworks/homeworktemplate.sty \ Packages/terminal.sty \ Packages/mylisting.sty $(call generate_pdf,$<,$@)