|
|
|
@ -0,0 +1,180 @@
|
|
|
|
|
\documentclass{article}
|
|
|
|
|
\usepackage[utf8x]{inputenc}
|
|
|
|
|
\usepackage{ucs}
|
|
|
|
|
\usepackage{amsmath}
|
|
|
|
|
\usepackage{amsfonts}
|
|
|
|
|
\usepackage{marvosym}
|
|
|
|
|
\usepackage{wasysym}
|
|
|
|
|
\usepackage{upgreek}
|
|
|
|
|
\usepackage[english,russian]{babel}
|
|
|
|
|
\usepackage{graphicx}
|
|
|
|
|
\usepackage{float}
|
|
|
|
|
\usepackage{textcomp}
|
|
|
|
|
\usepackage{hyperref}
|
|
|
|
|
\usepackage{geometry}
|
|
|
|
|
\geometry{left=2cm}
|
|
|
|
|
\geometry{right=1.5cm}
|
|
|
|
|
\geometry{top=1cm}
|
|
|
|
|
\geometry{bottom=2cm}
|
|
|
|
|
\usepackage{tikz}
|
|
|
|
|
\usepackage{ccaption}
|
|
|
|
|
\usepackage{multicol}
|
|
|
|
|
\usepackage{fancyvrb}
|
|
|
|
|
|
|
|
|
|
\usepackage{listings}
|
|
|
|
|
%\setlength{\columnsep}{1.5cm}
|
|
|
|
|
%\setlength{\columnseprule}{0.2pt}
|
|
|
|
|
|
|
|
|
|
\usepackage{colortbl,graphicx,tikz}
|
|
|
|
|
\definecolor{X}{rgb}{.5,.5,.5}
|
|
|
|
|
|
|
|
|
|
\title{ДЗ. Работа с изображениями в формате \texttt{.ppm}}
|
|
|
|
|
\date{}
|
|
|
|
|
\begin{document}
|
|
|
|
|
\pagenumbering{gobble}
|
|
|
|
|
|
|
|
|
|
\lstset{
|
|
|
|
|
language=C++, % choose the language of the code
|
|
|
|
|
basicstyle=\linespread{1.1}\ttfamily,
|
|
|
|
|
columns=fixed,
|
|
|
|
|
fontadjust=true,
|
|
|
|
|
basewidth=0.5em,
|
|
|
|
|
keywordstyle=\color{blue}\bfseries,
|
|
|
|
|
commentstyle=\color{gray},
|
|
|
|
|
stringstyle=\ttfamily\color{orange!50!black},
|
|
|
|
|
showstringspaces=false,
|
|
|
|
|
%numbers=false, % where to put the line-numbers
|
|
|
|
|
numbersep=5pt,
|
|
|
|
|
numberstyle=\tiny\color{black},
|
|
|
|
|
numberfirstline=true,
|
|
|
|
|
stepnumber=1, % the step between two line-numbers.
|
|
|
|
|
numbersep=10pt, % how far the line-numbers are from the code
|
|
|
|
|
backgroundcolor=\color{white}, % choose the background color. You must add \usepackage{color}
|
|
|
|
|
showstringspaces=false, % underline spaces within strings
|
|
|
|
|
captionpos=b, % sets the caption-position to bottom
|
|
|
|
|
breaklines=true, % sets automatic line breaking
|
|
|
|
|
breakatwhitespace=true, % sets if automatic breaks should only happen at whitespace
|
|
|
|
|
xleftmargin=.2in,
|
|
|
|
|
extendedchars=\true,
|
|
|
|
|
keepspaces = true,
|
|
|
|
|
}
|
|
|
|
|
\lstset{literate=%
|
|
|
|
|
*{0}{{{\color{red!20!violet}0}}}1
|
|
|
|
|
{1}{{{\color{red!20!violet}1}}}1
|
|
|
|
|
{2}{{{\color{red!20!violet}2}}}1
|
|
|
|
|
{3}{{{\color{red!20!violet}3}}}1
|
|
|
|
|
{4}{{{\color{red!20!violet}4}}}1
|
|
|
|
|
{5}{{{\color{red!20!violet}5}}}1
|
|
|
|
|
{6}{{{\color{red!20!violet}6}}}1
|
|
|
|
|
{7}{{{\color{red!20!violet}7}}}1
|
|
|
|
|
{8}{{{\color{red!20!violet}8}}}1
|
|
|
|
|
{9}{{{\color{red!20!violet}9}}}1
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
\title{Семинар \#1: Введение в язык C++ (для тех, кто знает C). Классные задачи.\vspace{-5ex}}\date{}\maketitle
|
|
|
|
|
|
|
|
|
|
\section*{Hello world++}
|
|
|
|
|
Пишем первую программу на \texttt{C++}
|
|
|
|
|
\begin{lstlisting}
|
|
|
|
|
#include <cstdio>
|
|
|
|
|
int main() {
|
|
|
|
|
printf("Hello World++\n");
|
|
|
|
|
}
|
|
|
|
|
\end{lstlisting}
|
|
|
|
|
Все библиотеки из языка \texttt{C} можно использовать и в языке \texttt{C++}. Только название библиотеки без \texttt{.h} на конце и с символом \texttt{c} в начале:
|
|
|
|
|
\begin{verbatim}
|
|
|
|
|
<stdio.h> -------> <cstdio>
|
|
|
|
|
\end{verbatim}
|
|
|
|
|
|
|
|
|
|
Для компиляции используйте компилятор \texttt{g++}. Вот так:
|
|
|
|
|
\begin{verbatim}
|
|
|
|
|
g++ helloworld.cpp
|
|
|
|
|
./a.out
|
|
|
|
|
\end{verbatim}
|
|
|
|
|
Или, если вы хотите установить у исполняемого файла своё имя за место \texttt{a.out}:
|
|
|
|
|
\begin{verbatim}
|
|
|
|
|
g++ -o hello helloworld.cpp
|
|
|
|
|
./hello
|
|
|
|
|
\end{verbatim}
|
|
|
|
|
|
|
|
|
|
\begin{itemize}
|
|
|
|
|
\item \textbf{Задача 1:} Скомпилируйте и запустите простейшую программу \texttt{00helloworld.cpp}.
|
|
|
|
|
\item \textbf{Задача 2:} Разберитесь в программе \texttt{01structnaming.cpp}. Скомпилируйте и запустите.
|
|
|
|
|
\end{itemize}
|
|
|
|
|
|
|
|
|
|
\section*{Тип bool}
|
|
|
|
|
В прошлом семестре, для хранения результатов логических операций, мы использовали целочисленные типы.\\
|
|
|
|
|
В языке \texttt{C++} есть встроенный тип \texttt{bool}, который может принимать 2 значения (\texttt{true} и \texttt{false}).
|
|
|
|
|
\begin{lstlisting}
|
|
|
|
|
#include <cstdio>
|
|
|
|
|
int main() {
|
|
|
|
|
bool a = true;
|
|
|
|
|
bool b = false;
|
|
|
|
|
bool c = a || b;
|
|
|
|
|
|
|
|
|
|
if (c)
|
|
|
|
|
printf("Yes\n");
|
|
|
|
|
else
|
|
|
|
|
printf("No\n");
|
|
|
|
|
}
|
|
|
|
|
\end{lstlisting}
|
|
|
|
|
\begin{itemize}
|
|
|
|
|
\item \textbf{Задача 3:} Что напечатает эта программа? Скомпилируйте её и запустите (\texttt{02bool.cpp})
|
|
|
|
|
\item \textbf{Задача 4:} Напишите функцию, которая будет принимать на вход целое число и возвращать \texttt{true}, если число оканчивается на \texttt{0} и \texttt{false} иначе. Вызовите эту функцию из \texttt{main}.
|
|
|
|
|
\end{itemize}
|
|
|
|
|
|
|
|
|
|
\newpage
|
|
|
|
|
\section*{Пространство имён}
|
|
|
|
|
\begin{lstlisting}
|
|
|
|
|
#include <cstdio>
|
|
|
|
|
// Определяем переменные, структуры, функции внутри пространства имён foo
|
|
|
|
|
namespace foo {
|
|
|
|
|
int a = 5;
|
|
|
|
|
int square(int x) {
|
|
|
|
|
return x * x;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
// Чтобы получить доступ к ним вне пространства имён, нужно добавить к именам foo::
|
|
|
|
|
int main() {
|
|
|
|
|
printf("%d\n", foo::a);
|
|
|
|
|
}
|
|
|
|
|
\end{lstlisting}
|
|
|
|
|
\begin{itemize}
|
|
|
|
|
\item \textbf{Задача 5:} Возведите \texttt{foo::a} в квадрат с помощью функции \texttt{foo::square}.
|
|
|
|
|
\item \textbf{Задача 6:} Создайте своё пространство имён по имени \texttt{bar} и определите в нём переменную \texttt{a = 7}. Напечатайте значение этой переменной в \texttt{main}.
|
|
|
|
|
\item \textbf{Задача 7:} Сделайте задание в программе \texttt{03namespace.cpp}.
|
|
|
|
|
\end{itemize}
|
|
|
|
|
|
|
|
|
|
\section*{Ссылки}
|
|
|
|
|
Ссылка -- это переменная, которая является новым именем для существующего участка памяти.
|
|
|
|
|
\begin{lstlisting}
|
|
|
|
|
#include <cstdio>
|
|
|
|
|
|
|
|
|
|
int main() {
|
|
|
|
|
int a = 10;
|
|
|
|
|
// Создадим ссылку r на переменную a
|
|
|
|
|
int& r = a;
|
|
|
|
|
// Теперь, если изменить r, то поменяется и a
|
|
|
|
|
r += 5;
|
|
|
|
|
printf("%d\n", a);
|
|
|
|
|
}
|
|
|
|
|
\end{lstlisting}
|
|
|
|
|
Ссылки часто используются для тех же целей, что и указатели (только со ссылкам работать удобнее).
|
|
|
|
|
В отличии от указателей, ссылки:
|
|
|
|
|
\begin{enumerate}
|
|
|
|
|
\item Должны всегда инициализироваться при создании
|
|
|
|
|
\item Не могут никуда не ссылаться (т.е. не могут равняться \texttt{NULL})
|
|
|
|
|
\item Их нельзя переприсвоить. При использовании оператора \texttt{=} со ссылками изменяется та переменная, на которую ссылка ссылается, а не сама ссылка.
|
|
|
|
|
\end{enumerate}
|
|
|
|
|
\begin{itemize}
|
|
|
|
|
\item \textbf{Задача 8:} Сделайте задание в файлах \texttt{04ref.cpp}, \texttt{05ref.cpp} и \texttt{06ref.cpp}.
|
|
|
|
|
\end{itemize}
|
|
|
|
|
\section*{Перегрузка функций}
|
|
|
|
|
\begin{itemize}
|
|
|
|
|
\item \textbf{Задача 9:} Сделайте задание в файлах \texttt{07function\_overload.cpp}, \texttt{08nulptr.cpp} и \texttt{09default\_arguments.cpp}.
|
|
|
|
|
\end{itemize}
|
|
|
|
|
\section*{Перегрузка операторов}
|
|
|
|
|
\begin{itemize}
|
|
|
|
|
\item \textbf{Задача 10:} Сделайте задание в файлах \texttt{10operator\_overload.cpp}, \texttt{11iostream.cpp} и \texttt{12iostream\_overload.cpp}.
|
|
|
|
|
\end{itemize}
|
|
|
|
|
\end{document}
|