\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 int main() { printf("Hello World++\n"); } \end{lstlisting} Все библиотеки из языка \texttt{C} можно использовать и в языке \texttt{C++}. Только название библиотеки без \texttt{.h} на конце и с символом \texttt{c} в начале: \begin{verbatim} -------> \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 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 // Определяем переменные, структуры, функции внутри пространства имён 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 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}