diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..c232294 --- /dev/null +++ b/.gitignore @@ -0,0 +1,5 @@ +*.*~ +*.*# + +/build/* +!/build/*.pdf diff --git a/build/main.pdf b/build/main.pdf new file mode 100644 index 0000000..6f19e1e Binary files /dev/null and b/build/main.pdf differ diff --git a/formatting.tex b/formatting.tex index 701c448..a16e873 100644 --- a/formatting.tex +++ b/formatting.tex @@ -1,79 +1,67 @@ -%%% Работа с русским языком -\usepackage{cmap} % поиск в PDF -\usepackage[T2A]{fontenc} % кодировка -\usepackage[utf8]{inputenc} % кодировка исходного текста -\usepackage[english,russian]{babel} % локализация и переносы -\usepackage[printwatermark]{xwatermark} -\usepackage{xcolor} -\usepackage{multicol} -\usepackage{setspace} -\usepackage{titlesec} -\usepackage{indentfirst} -\usepackage{amsmath,amsfonts,amssymb,amsthm,mathtools} % AMS -\usepackage{icomma} % "Умная" запятая: $0,2$ --- число, $0, 2$ --- перечисление -\usepackage{layout} -\usepackage{titlesec} -\usepackage{hyperref} -\usepackage[lmargin=1.5cm,rmargin=2.5cm,tmargin=2.5cm,bmargin=2.5cm,paperheight=240mm,paperwidth=170mm]{geometry} - -\onehalfspacing -\addto{\captionsrussian}{\renewcommand{\figurename}{}} -\hypersetup{ - colorlinks=false, %set true if you want colored links - linktoc=all %set to all if you want both sections and subsections linked -} -\hbadness=99999 -\author{Иван Овчинников} -\date{\today} -\newwatermark[allpages,color=red!50,angle=70,scale=7,xpos=-36,ypos=14]{DRAFT} - -\usepackage[cache=false]{minted} - -\usepackage{listings} -\usepackage{xcolor} - -\definecolor{codekeywords}{rgb}{0.1,0.3,0.3} -\definecolor{codecomments}{rgb}{0,0.4,0} -\definecolor{codenumbers}{rgb}{0.4,0.4,0.4} -\definecolor{codestring}{rgb}{0.85,0.2,0.1} -\definecolor{backcolour}{rgb}{0.95,0.95,0.92} -\definecolor{codefine}{rgb}{0.7,0.5,0.3} - -\lstdefinestyle{CCodeStyle}{ - commentstyle=\color{codecomments}, - morecomment=[l][\color{codefine}]{\#}, - numberstyle=\tiny\color{codenumbers}, - stringstyle=\color{codestring}, - basicstyle=\ttfamily\footnotesize, - keywordstyle=\color{codekeywords}, - emph={int,char,double,float,unsigned,void,bool}, - emphstyle={\color{blue}}, - breakatwhitespace=false, - breaklines=true, - captionpos=b, - keepspaces=true, - numbers=left, - numbersep=5pt, - showspaces=false, - showstringspaces=false, - showtabs=false, - tabsize=4 -} - -%\lstinputlisting[language=Octave,caption=some code here]{BitXorMatrix.m} - - -\def\code#1{\texttt{#1}} -\newcommand{\sectionbreak}{\clearpage} -\newcommand{\frm}[1]{ -\newline -\newline -\indent -\fbox{% - \parbox{0.9\textwidth}{% - #1 - }% -} -\newline -\newline -} +% \usepackage[printwatermark]{xwatermark} +\usepackage{import} +\usepackage{listings} +\usepackage{xcolor} +\usepackage{bookmark} +\usepackage{setspace} +\usepackage{titlesec} +\usepackage{indentfirst} +\usepackage{amsmath,amsfonts,amssymb,amsthm,mathtools} +\usepackage{icomma} +\usepackage{layout} +\usepackage{titlesec} +\usepackage{hyperref} +\usepackage[lmargin=1.5cm,rmargin=2.5cm,tmargin=2.5cm,bmargin=2.5cm,paperheight=240mm,paperwidth=170mm]{geometry} + +\definecolor{codekeywords}{rgb}{0.1,0.3,0.3} +\definecolor{codecomments}{rgb}{0,0.4,0} +\definecolor{codenumbers}{rgb}{0.4,0.4,0.4} +\definecolor{codestring}{rgb}{0.85,0.2,0.1} +\definecolor{backcolour}{rgb}{0.95,0.95,0.92} +\definecolor{codefine}{rgb}{0.7,0.5,0.3} +\lstdefinestyle{CCodeStyle}{ + commentstyle=\color{codecomments}, + morecomment=[l][\color{codefine}]{\#}, + numberstyle=\tiny\color{codenumbers}, + stringstyle=\color{codestring}, + basicstyle=\ttfamily\footnotesize, + keywordstyle=\color{codekeywords}, + emph={int,char,double,float,unsigned,void,bool}, + emphstyle={\color{blue}}, + breakatwhitespace=false, + breaklines=true, + captionpos=b, + keepspaces=true, + numbers=left, + numbersep=5pt, + showspaces=false, + showstringspaces=false, + showtabs=false, + tabsize=4 +} + +\author{Иван Овчинников} +\date{\today} +\title{Очередное введение в\\язык программирования C} +\babelfont{rm}{Times New Roman} +\babelfont{sf}{Microsoft Sans Serif} +\babelfont{tt}{Courier New} +% \newwatermark[allpages,color=red!50,angle=70,scale=7,xpos=-36,ypos=14]{DRAFT} +\onehalfspacing +\addto{\captionsrussian}{\renewcommand{\figurename}{}} +\hypersetup{ + colorlinks=false, + linktoc=all +} + +\newcommand{\code}[1]{\texttt{#1}} +\newcommand{\sectionbreak}{\clearpage} +\newcommand{\frm}[1]{\newline% +\newline% +\indent\fbox{% + \parbox{0.9\textwidth}{% + #1}% +}% +\newline% +\newline% +}% diff --git a/main.tex b/main.tex index 9254780..bf476dc 100644 --- a/main.tex +++ b/main.tex @@ -1,52 +1,52 @@ -\documentclass[a5paper,twoside]{article} +\documentclass[a4paper]{article} +\usepackage[russian]{babel} \include{formatting} -\title{Очередное введение в\\язык программирования C} \begin{document} \maketitle \thispagestyle{empty} \newpage +\thispagestyle{empty} \tableofcontents \newpage % 01 intro -\include{sections/01-intro} +\import{sections/}{01-intro.tex} % 02 basics -\include{sections/02-basics} +\import{sections/}{02-basics} % 03 io -\include{sections/03-io} +\import{sections/}{03-io} % 04 variables -\include{sections/04-variables} +\import{sections/}{04-variables} % 05 conditions -\include{sections/05-conditions} +\import{sections/}{05-conditions} % 06 cycles -\include{sections/06-cycles} -\section{Функции} -Функция - это такая обособленная часть кода, которую можно выполнять любое количество раз. У функций обязательно в таком порядке должны быть описаны: тип возвращаемого значения, название, аргументы и так называемое тело, то есть собственно исполняемый код. Рассмотрим более детально функцию \code{int main (int argc, char *argv[])}: \code{int} - это \textit{тип возвращаемого значения}, то есть на том месте, откуда будет вызвана эта функция, в результате её работы по выполнении оператора \code{return;}, появится некое целое число. Возвращаемые значения могут быть любых типов. В случае же когда функция не должна возвращать результат своей работы, или никакого возвращаемого результата не предполагается, указывается ключевое слово \code{void} (англ. - пустота). То есть на месте вызова функции в результате её выполнения ничего не появится. Оператор \code{return;} обязателен для не-void функций, а в \code{void} функциях может присутствовать или нет, но никогда не содержит возвращаемого значения. \code{main} - это \textit{название функции}. Функция именно с таким названием, написанным с маленькой буквы, всегда является точкой входа в программу (\hyperref[text:main]{\ref{text:main}}). Операционная система ищет именно эту функцию, когда получает команду на выполнение программы. -\frm{Названия функций в рамках одной программы не должны повторяться и не должны начинаться с цифр или спецсимволов, также, как и названия переменных (\hyperref[text:naming]{\ref{text:naming}}) никаких других ограничений на название функций не накладывается.} -Конструкция в круглых скобках \code{(int argc, char *argv[])} - это \textit{аргументы функции}. Аргументы функции - это такие переменные, которые создаются при вызове функции и существуют только внутри неё. С их помощью можно передать в функцию какие-то параметры и исходные данные для работы. Аргументы пишутся в круглых скобках сразу после названия функции. В случае если функция не принимает аргументов необходимо поставить после названия пустые круглые скобки. Весь код, содержащийся в фигурных скобках после аргументов функции называется \textit{телом функции}. Это те операторы и команды, которые будут последовательно выполнены при вызове функции. В теле функции мы можем \textbf{вызывать} другие функции, но никогда не можем создавать в теле функции другие функции. Никаких других ограничений на написание тела функции язык не накладывает. -\begin{verbatim} -ТипВозвращаемогоЗначения Имя (СписокАргументов) -{ - ТелоФункции - return ВозвращаемоеЗначение; -} -\end{verbatim} +\import{sections/}{06-cycles} +% \section{Функции} +% Функция - это такая обособленная часть кода, которую можно выполнять любое количество раз. У функций обязательно в таком порядке должны быть описаны: тип возвращаемого значения, название, аргументы и так называемое тело, то есть собственно исполняемый код. Рассмотрим более детально функцию \code{int main (int argc, char *argv[])}: \code{int} - это \textit{тип возвращаемого значения}, то есть на том месте, откуда будет вызвана эта функция, в результате её работы по выполнении оператора \code{return;}, появится некое целое число. Возвращаемые значения могут быть любых типов. В случае же когда функция не должна возвращать результат своей работы, или никакого возвращаемого результата не предполагается, указывается ключевое слово \code{void} (англ. - пустота). То есть на месте вызова функции в результате её выполнения ничего не появится. Оператор \code{return;} обязателен для не-void функций, а в \code{void} функциях может присутствовать или нет, но никогда не содержит возвращаемого значения. \code{main} - это \textit{название функции}. Функция именно с таким названием, написанным с маленькой буквы, всегда является точкой входа в программу (\hyperref[text:main]{\ref{text:main}}). Операционная система ищет именно эту функцию, когда получает команду на выполнение программы. +% \frm{Названия функций в рамках одной программы не должны повторяться и не должны начинаться с цифр или спецсимволов, также, как и названия переменных (\hyperref[text:naming]{\ref{text:naming}}) никаких других ограничений на название функций не накладывается.} +% Конструкция в круглых скобках \code{(int argc, char *argv[])} - это \textit{аргументы функции}. Аргументы функции - это такие переменные, которые создаются при вызове функции и существуют только внутри неё. С их помощью можно передать в функцию какие-то параметры и исходные данные для работы. Аргументы пишутся в круглых скобках сразу после названия функции. В случае если функция не принимает аргументов необходимо поставить после названия пустые круглые скобки. Весь код, содержащийся в фигурных скобках после аргументов функции называется \textit{телом функции}. Это те операторы и команды, которые будут последовательно выполнены при вызове функции. В теле функции мы можем \textbf{вызывать} другие функции, но никогда не можем создавать в теле функции другие функции. Никаких других ограничений на написание тела функции язык не накладывает. +% \begin{verbatim} +% ТипВозвращаемогоЗначения Имя (СписокАргументов) +% { +% ТелоФункции +% return ВозвращаемоеЗначение; +% } +% \end{verbatim} +% \begin{lstlisting}[language=C,style=CCodeStyle] +% void somefunction() { // <-- this is a function +% // some useful things +% } -\begin{lstlisting}[language=C,style=CCodeStyle] -void somefunction() { // <-- this is a function - // some useful things -} +% int main (int argc, const char* argv[]) { +% // more useful things +% somefunction(); // <-- this is invocation +% return 0; +% } +% \end{lstlisting} -int main (int argc, const char* argv[]) { - // more useful things - somefunction(); // <-- this is invocation - return 0; -} -\end{lstlisting} - -Функции принято разделять на проверяющие, считающие и выводящие, и каждая из вышеописанных функций не должна нести дополнительной нагрузки. То есть, функция не должна знать откуда в программе появились её аргументы, и где будет использован результат её работы. Для примера опишем функцию суммирующую два числа. в качестве аргументов она будет принимать целые числа и возвращать целочисленный результат. Обратите внимание что функция не знает откуда взялись эти числа, мы можем их считать с консоли, можем задать в виде констант или получить в результате работы какой то другой функции. -Внутри функции main мы вызываем нашу функцию sum суммирующую два числа и передаем в качестве аргументов эти числа. +% Функции принято разделять на проверяющие, считающие и выводящие, и каждая из вышеописанных функций не должна нести дополнительной нагрузки. То есть, функция не должна знать откуда в программе появились её аргументы, и где будет использован результат её работы. Для примера опишем функцию суммирующую два числа. в качестве аргументов она будет принимать целые числа и возвращать целочисленный результат. Обратите внимание что функция не знает откуда взялись эти числа, мы можем их считать с консоли, можем задать в виде констант или получить в результате работы какой то другой функции. +% Внутри функции main мы вызываем нашу функцию sum суммирующую два числа и передаем в качестве аргументов эти числа.