This repository has been archived on 2023-05-13. You can view files and clone it, but cannot push or open issues or pull requests.
mipt_cpp/seminar01_overload/classroom_tasks/classroom_tasks_overload.tex

180 lines
7.5 KiB
TeX
Raw Normal View History

2022-09-01 16:37:41 +03:00
\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}