gitignore+local (no xwatermark, works only online)

This commit is contained in:
Ivan I. Ovchinnikov 2021-08-23 11:24:09 +03:00
parent 1029785176
commit 70c5fae762
4 changed files with 104 additions and 111 deletions

5
.gitignore vendored Normal file
View File

@ -0,0 +1,5 @@
*.*~
*.*#
/build/*
!/build/*.pdf

BIN
build/main.pdf Normal file

Binary file not shown.

View File

@ -1,79 +1,67 @@
%%% Работа с русским языком % \usepackage[printwatermark]{xwatermark}
\usepackage{cmap} % поиск в PDF \usepackage{import}
\usepackage[T2A]{fontenc} % кодировка \usepackage{listings}
\usepackage[utf8]{inputenc} % кодировка исходного текста \usepackage{xcolor}
\usepackage[english,russian]{babel} % локализация и переносы \usepackage{bookmark}
\usepackage[printwatermark]{xwatermark} \usepackage{setspace}
\usepackage{xcolor} \usepackage{titlesec}
\usepackage{multicol} \usepackage{indentfirst}
\usepackage{setspace} \usepackage{amsmath,amsfonts,amssymb,amsthm,mathtools}
\usepackage{titlesec} \usepackage{icomma}
\usepackage{indentfirst} \usepackage{layout}
\usepackage{amsmath,amsfonts,amssymb,amsthm,mathtools} % AMS \usepackage{titlesec}
\usepackage{icomma} % "Умная" запятая: $0,2$ --- число, $0, 2$ --- перечисление \usepackage{hyperref}
\usepackage{layout} \usepackage[lmargin=1.5cm,rmargin=2.5cm,tmargin=2.5cm,bmargin=2.5cm,paperheight=240mm,paperwidth=170mm]{geometry}
\usepackage{titlesec}
\usepackage{hyperref} \definecolor{codekeywords}{rgb}{0.1,0.3,0.3}
\usepackage[lmargin=1.5cm,rmargin=2.5cm,tmargin=2.5cm,bmargin=2.5cm,paperheight=240mm,paperwidth=170mm]{geometry} \definecolor{codecomments}{rgb}{0,0.4,0}
\definecolor{codenumbers}{rgb}{0.4,0.4,0.4}
\onehalfspacing \definecolor{codestring}{rgb}{0.85,0.2,0.1}
\addto{\captionsrussian}{\renewcommand{\figurename}{}} \definecolor{backcolour}{rgb}{0.95,0.95,0.92}
\hypersetup{ \definecolor{codefine}{rgb}{0.7,0.5,0.3}
colorlinks=false, %set true if you want colored links \lstdefinestyle{CCodeStyle}{
linktoc=all %set to all if you want both sections and subsections linked commentstyle=\color{codecomments},
} morecomment=[l][\color{codefine}]{\#},
\hbadness=99999 numberstyle=\tiny\color{codenumbers},
\author{Иван Овчинников} stringstyle=\color{codestring},
\date{\today} basicstyle=\ttfamily\footnotesize,
\newwatermark[allpages,color=red!50,angle=70,scale=7,xpos=-36,ypos=14]{DRAFT} keywordstyle=\color{codekeywords},
emph={int,char,double,float,unsigned,void,bool},
\usepackage[cache=false]{minted} emphstyle={\color{blue}},
breakatwhitespace=false,
\usepackage{listings} breaklines=true,
\usepackage{xcolor} captionpos=b,
keepspaces=true,
\definecolor{codekeywords}{rgb}{0.1,0.3,0.3} numbers=left,
\definecolor{codecomments}{rgb}{0,0.4,0} numbersep=5pt,
\definecolor{codenumbers}{rgb}{0.4,0.4,0.4} showspaces=false,
\definecolor{codestring}{rgb}{0.85,0.2,0.1} showstringspaces=false,
\definecolor{backcolour}{rgb}{0.95,0.95,0.92} showtabs=false,
\definecolor{codefine}{rgb}{0.7,0.5,0.3} tabsize=4
}
\lstdefinestyle{CCodeStyle}{
commentstyle=\color{codecomments}, \author{Иван Овчинников}
morecomment=[l][\color{codefine}]{\#}, \date{\today}
numberstyle=\tiny\color{codenumbers}, \title{Очередное введение в\\язык программирования C}
stringstyle=\color{codestring}, \babelfont{rm}{Times New Roman}
basicstyle=\ttfamily\footnotesize, \babelfont{sf}{Microsoft Sans Serif}
keywordstyle=\color{codekeywords}, \babelfont{tt}{Courier New}
emph={int,char,double,float,unsigned,void,bool}, % \newwatermark[allpages,color=red!50,angle=70,scale=7,xpos=-36,ypos=14]{DRAFT}
emphstyle={\color{blue}}, \onehalfspacing
breakatwhitespace=false, \addto{\captionsrussian}{\renewcommand{\figurename}{}}
breaklines=true, \hypersetup{
captionpos=b, colorlinks=false,
keepspaces=true, linktoc=all
numbers=left, }
numbersep=5pt,
showspaces=false, \newcommand{\code}[1]{\texttt{#1}}
showstringspaces=false, \newcommand{\sectionbreak}{\clearpage}
showtabs=false, \newcommand{\frm}[1]{\newline%
tabsize=4 \newline%
} \indent\fbox{%
\parbox{0.9\textwidth}{%
%\lstinputlisting[language=Octave,caption=some code here]{BitXorMatrix.m} #1}%
}%
\newline%
\def\code#1{\texttt{#1}} \newline%
\newcommand{\sectionbreak}{\clearpage} }%
\newcommand{\frm}[1]{
\newline
\newline
\indent
\fbox{%
\parbox{0.9\textwidth}{%
#1
}%
}
\newline
\newline
}

View File

@ -1,52 +1,52 @@
\documentclass[a5paper,twoside]{article} \documentclass[a4paper]{article}
\usepackage[russian]{babel}
\include{formatting} \include{formatting}
\title{Очередное введение в\\язык программирования C}
\begin{document} \begin{document}
\maketitle \maketitle
\thispagestyle{empty} \thispagestyle{empty}
\newpage \newpage
\thispagestyle{empty}
\tableofcontents \tableofcontents
\newpage \newpage
% 01 intro % 01 intro
\include{sections/01-intro} \import{sections/}{01-intro.tex}
% 02 basics % 02 basics
\include{sections/02-basics} \import{sections/}{02-basics}
% 03 io % 03 io
\include{sections/03-io} \import{sections/}{03-io}
% 04 variables % 04 variables
\include{sections/04-variables} \import{sections/}{04-variables}
% 05 conditions % 05 conditions
\include{sections/05-conditions} \import{sections/}{05-conditions}
% 06 cycles % 06 cycles
\include{sections/06-cycles} \import{sections/}{06-cycles}
\section{Функции} % \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}}). Операционная система ищет именно эту функцию, когда получает команду на выполнение программы. % Функция - это такая обособленная часть кода, которую можно выполнять любое количество раз. У функций обязательно в таком порядке должны быть описаны: тип возвращаемого значения, название, аргументы и так называемое тело, то есть собственно исполняемый код. Рассмотрим более детально функцию \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}}) никаких других ограничений на название функций не накладывается.} % \frm{Названия функций в рамках одной программы не должны повторяться и не должны начинаться с цифр или спецсимволов, также, как и названия переменных (\hyperref[text:naming]{\ref{text:naming}}) никаких других ограничений на название функций не накладывается.}
Конструкция в круглых скобках \code{(int argc, char *argv[])} - это \textit{аргументы функции}. Аргументы функции - это такие переменные, которые создаются при вызове функции и существуют только внутри неё. С их помощью можно передать в функцию какие-то параметры и исходные данные для работы. Аргументы пишутся в круглых скобках сразу после названия функции. В случае если функция не принимает аргументов необходимо поставить после названия пустые круглые скобки. Весь код, содержащийся в фигурных скобках после аргументов функции называется \textit{телом функции}. Это те операторы и команды, которые будут последовательно выполнены при вызове функции. В теле функции мы можем \textbf{вызывать} другие функции, но никогда не можем создавать в теле функции другие функции. Никаких других ограничений на написание тела функции язык не накладывает. % Конструкция в круглых скобках \code{(int argc, char *argv[])} - это \textit{аргументы функции}. Аргументы функции - это такие переменные, которые создаются при вызове функции и существуют только внутри неё. С их помощью можно передать в функцию какие-то параметры и исходные данные для работы. Аргументы пишутся в круглых скобках сразу после названия функции. В случае если функция не принимает аргументов необходимо поставить после названия пустые круглые скобки. Весь код, содержащийся в фигурных скобках после аргументов функции называется \textit{телом функции}. Это те операторы и команды, которые будут последовательно выполнены при вызове функции. В теле функции мы можем \textbf{вызывать} другие функции, но никогда не можем создавать в теле функции другие функции. Никаких других ограничений на написание тела функции язык не накладывает.
\begin{verbatim} % \begin{verbatim}
ТипВозвращаемогоЗначения Имя (СписокАргументов) % ТипВозвращаемогоЗначения Имя (СписокАргументов)
{ % {
ТелоФункции % ТелоФункции
return ВозвращаемоеЗначение; % return ВозвращаемоеЗначение;
} % }
\end{verbatim} % \end{verbatim}
% \begin{lstlisting}[language=C,style=CCodeStyle]
% void somefunction() { // <-- this is a function
% // some useful things
% }
\begin{lstlisting}[language=C,style=CCodeStyle] % int main (int argc, const char* argv[]) {
void somefunction() { // <-- this is a function % // more useful things
// some useful things % somefunction(); // <-- this is invocation
} % return 0;
% }
% \end{lstlisting}
int main (int argc, const char* argv[]) { % Функции принято разделять на проверяющие, считающие и выводящие, и каждая из вышеописанных функций не должна нести дополнительной нагрузки. То есть, функция не должна знать откуда в программе появились её аргументы, и где будет использован результат её работы. Для примера опишем функцию суммирующую два числа. в качестве аргументов она будет принимать целые числа и возвращать целочисленный результат. Обратите внимание что функция не знает откуда взялись эти числа, мы можем их считать с консоли, можем задать в виде констант или получить в результате работы какой то другой функции.
// more useful things % Внутри функции main мы вызываем нашу функцию sum суммирующую два числа и передаем в качестве аргументов эти числа.
somefunction(); // <-- this is invocation
return 0;
}
\end{lstlisting}
Функции принято разделять на проверяющие, считающие и выводящие, и каждая из вышеописанных функций не должна нести дополнительной нагрузки. То есть, функция не должна знать откуда в программе появились её аргументы, и где будет использован результат её работы. Для примера опишем функцию суммирующую два числа. в качестве аргументов она будет принимать целые числа и возвращать целочисленный результат. Обратите внимание что функция не знает откуда взялись эти числа, мы можем их считать с консоли, можем задать в виде констант или получить в результате работы какой то другой функции.
Внутри функции main мы вызываем нашу функцию sum суммирующую два числа и передаем в качестве аргументов эти числа.