SlideShare uma empresa Scribd logo
1 de 53
Baixar para ler offline
Основы программирования на
C++
Максименкова Ольга Вениаминовна
Старший преподаватель Департамента программной инженерии
Факультета компьютерных наук
(с) Максименкова О.В., НИУ ВШЭ, ФКН, ДПИ 1
Ответы на уже заданные вопросы
(с) Максименкова О.В., НИУ ВШЭ, ФКН, ДПИ 2
• Как же программа работает со всеми этими ошибками?
(http://habrahabr.ru/company/pvs-studio/blog/261279/)
• О библиотеках C++
• A list of open source C++ libraries (http://ru.cppreference.com/w/cpp/links/libs)
• Category:C++ libraries
(https://en.wikipedia.org/wiki/Category:C%2B%2B_libraries)
• News, Status & Discussion about Standard C++
(https://isocpp.org)
Цели лекции
(с) Максименкова О.В., НИУ ВШЭ, ФКН, ДПИ 3
Рассмотреть
• Основные типы данных
• Базовые конструкции языка
• Производные типы данных
• Функции и их параметры
Выявить
• Способы повышения быстродействия кода
• Особенности языка C++
Соглашения о терминологии
(с) Максименкова О.В., НИУ ВШЭ, ФКН, ДПИ 4
Идентификатор – последовательность из букв латинского алфавита, десятичных
цифр и символов подчёркивания, начинающаяся не с цифры.
Ключевые (служебные) слова – это идентификаторы, зарезервированные в
языке для специального использования.
Выражение – это последовательность операндов, разделителей и знаков операций,
задающая вычисления, то есть это правила для получения значения
Знаки операций обеспечивают формирование и последующее вычисление
выражений.
Директива (команда) препроцессора
Определение [declaration]
Описание [specification]
Подбельский В.В. Язык Си++. - М.: Финансы и статистика, 2003. – 560 с.
Учебные материалы
(с) Максименкова О.В., НИУ ВШЭ, ФКН, ДПИ 5
1. Ахметсафина Р.З. Построение и анализ алгоритмов (ДПИ, ФКН, НИУ ВШЭ, 2 курс
бакалавриата) (http://www.hse.ru/edu/courses/126217828.html)
2. Eunsuk Kang, and Jean Yang. 6.088 Introduction to C Memory Management and C++
Object-Oriented Programming, January IAP 2010. (Massachusetts Institute of
Technology: MIT OpenCourseWare), http://ocw.mit.edu (Accessed 21 Jun, 2015).
License: Creative Commons BY-NC-SA
3. Jesse Dunietz, Geza Kovacs, and John Marrero. 6.096 Introduction to C++, January IAP
2011. (Massachusetts Institute of Technology: MIT
OpenCourseWare),http://ocw.mit.edu (Accessed 21 Jun, 2015). License: Creative
Commons BY-NC-SA
4. Tom Lieber, Kyle Murray, and Frank Li. 6.S096 Introduction to C and C++, January IAP
2013. (Massachusetts Institute of Technology: MIT
OpenCourseWare),http://ocw.mit.edu (Accessed 21 Jun, 2015). License: Creative
Commons BY-NC-SA
5. Andre Kessler. 6.S096 Effective Programming in C and C++, January IAP 2014.
(Massachusetts Institute of Technology: MIT
OpenCourseWare), http://ocw.mit.edu(Accessed 21 Jun, 2015). License: Creative
Commons BY-NC-SA
Первая программа на C++
(с) Максименкова О.В., НИУ ВШЭ, ФКН, ДПИ 6
// Task_01.cpp : Defines the entry point for the console
application.
//
#include "iostream"
int main()
{
std::cout << "Hello, World!";
return 0;
}
• Ключевые слова
• Идентификаторы
• Литералы
• Операции
• Разделители
• Пробельные символы
Типы данных и
переменные
(с) Максименкова О.В., НИУ ВШЭ, ФКН, ДПИ 7
Основные типы данных
(с) Максименкова О.В., НИУ ВШЭ, ФКН, ДПИ 8
Тип Размер (байты)
char 1
unsigned char 1
int 4
unsigned int 4
bool 1
double 8
Переменные
(с) Максименкова О.В., НИУ ВШЭ, ФКН, ДПИ 9
C++ tutorial. Variables and types (http://www.cplusplus.com/doc/tutorial/variables/)
• Декларация (описание) [declaration]
• Инициализация [initialization]
#include "iostream"
using namespace std;
int main()
{
int x; // декларация
x = 5 * 12; // инициализация
cout << "x: " << x;
return 0;
}
int x = 5 * 12; // декларация c инициализацией
Ввод значения переменной
(с) Максименкова О.В., НИУ ВШЭ, ФКН, ДПИ 10
#include "iostream"
using namespace std;
int main()
{
int x; // декларация
cout << "Enter integer value:n";
cin >> x; // получения значения переменной
cout << "nnx: " << x;
return 0;
}
Условия
Логические и условные операции
Условный оператор
Переключатель
(с) Максименкова О.В., НИУ ВШЭ, ФКН, ДПИ 11
Условные операции
(с) Максименкова О.В., НИУ ВШЭ, ФКН, ДПИ 12
Операция Название
> Больше
>= Больше или равно
< Меньше
<= Меньше или равно
== Равно
!= Не равно
Логические операции
(с) Максименкова О.В., НИУ ВШЭ, ФКН, ДПИ 13
Операция Название
&& И
|| ИЛИ
! НЕ
^ Исключающее ИЛИ (XOR)
Побитовые логические операции в рамках знакомства с C++ мы рассматривать не
будем, но они есть…
Операторы в C и C++ (https://ru.wikipedia.org/wiki/Операторы_в_C_и_C%2B%2B)
Tutorial. Operators (http://www.cplusplus.com/doc/tutorial/operators/)
Tutorial. Operators in C++ (http://www.tutorialspoint.com/cplusplus/cpp_operators.htm)
Тернарный оператор
(с) Максименкова О.В., НИУ ВШЭ, ФКН, ДПИ 14
<операнд_1>?<операнд_2>:<операнд_3>
true
false
Условный оператор
(с) Максименкова О.В., НИУ ВШЭ, ФКН, ДПИ 15
if (условие)
ThenStat_1
if (условие)
{
ThenStat_1
ThenStat_2
...
}
if (условие)
{
ThenStat_1
ThenStat_2
...
}
else
{
ElseStat_1
ElseStat_2
...
}
if (условие)
ThenStat_1
else
ElseStat_2
Краткая форма
Tutorial. C++ decision making statements (http://www.tutorialspoint.com/cplusplus/cpp_decision_making.htm)
Tutorial Statements and flow control (http://www.cplusplus.com/doc/tutorial/control/)
Пример использования условия
(с) Максименкова О.В., НИУ ВШЭ, ФКН, ДПИ 16
#include "iostream"
using namespace std;
int main()
{
double x;
cout << "Enter x: ";
cin >> x;
if (x > 0)
cout << "nAbsolute value is: " << x;
else
cout << "nAbsolute value is: " << -x;
return 0;
}
Получение значения модуля вещественного числа. Используем
математическое определение
Переключатель
(с) Максименкова О.В., НИУ ВШЭ, ФКН, ДПИ 17
switch (выражение)
{
case constant1:
statement_A1
statement_A2
...
break;
case constant2:
statement_B1
statement_B2
...
break;
...
default:
statement_Z1
statement_Z2
...
}
Пример использования переключателя
(с) Максименкова О.В., НИУ ВШЭ, ФКН, ДПИ 18
int x;
cout << "Enter your mark: ";
cin >> x;
switch (x) {
case 1:
case 2:
case 3: cout << "Your mark is 2"; break;
case 4:
case 5: cout << "Your mark is 3"; break;
case 6:
case 7: cout << "Your mark is 4" ;break;
case 8:
case 9:
case 10: cout << "Your mark is 5"; break;
}
Получение четырёх балльного эквивалента для десятибалльной оценки
На практических занятиях мы дополним код этой программы, чтобы при вводе
чисел меньше единицы и больше 10 выводилось сообщение.
Циклы
Цикл с постусловием
Цикл с предусловием
Цикл с параметром
(с) Максименкова О.В., НИУ ВШЭ, ФКН, ДПИ 19
while
(с) Максименкова О.В., НИУ ВШЭ, ФКН, ДПИ 20
while (условие)
{
statement1
statement2
...
}
#include "iostream"
using namespace std;
const int N = 10;
int main()
{
int i = 0;
while (i < N)
cout << ++i << " ";
return 0;
}
Если команда в теле цикла
одна, операторные скобки
также могут быть опущены.
Вывод первых десяти чисел
натурального ряда
Tutorial. Constants (http://www.cplusplus.com/doc/tutorial/constants/)
do-while
(с) Максименкова О.В., НИУ ВШЭ, ФКН, ДПИ 21
do
{
statement1
statement2
...
} while (условие); Вывод количества чисел делящихся на 10 и не
делящихся на 10 из диапазона [1;99]
#include "iostream"
#define N 100
using namespace std;
int main()
{
int i = 1, decs=0, other=0;
do (i++ % 10 == 0) ? decs++ : other++;
while (i < N);
cout << decs << " " << other;
}
for
(с) Максименкова О.В., НИУ ВШЭ, ФКН, ДПИ 22
for(инициализации; условие; список выражений)
{
statement1
statement2
...
}
for (int i = 0; i < 5; cout << i++);
int i = 0;
for (; i < 5; cout << i++);
int i = 0;
for (; i < 5; i++)
cout << i;
Функции
Повторное использование кода
Перегрузка функций
(с) Максименкова О.В., НИУ ВШЭ, ФКН, ДПИ 23
Студенты могут не знать, что
(с) Максименкова О.В., НИУ ВШЭ, ФКН, ДПИ 24
Алгоритмическая декомпозиция [algorithmic decomposition] - процесс
разделения системы на части, каждая из которых отражает этап общего
процесса
Структурное проектирование по методу сверху вниз
основной базовой единицей является подпрограмма, и программа в
целом принимает форму дерева, в котором одни подпрограммы в
процессе работы вызывают другие подпрограммы
Процедурная инкапсуляция используется в процедурной парадигме в
виде подпрограмм, которые скрывают детали реализации части алгоритма.
SADT (Structured Analysis and Design Technique)
методология структурного анализа и проектирования, интегрирующая
процесс моделирования, управление конфигурацией проекта,
использование дополнительных языковых средств и руководство
проектом со своим графическим языком
Описание функций
(с) Максименкова О.В., НИУ ВШЭ, ФКН, ДПИ 25
#include <iostream>
using namespace std;
int main() {
int x;
cout << "Enter integer value: ";
cin >> x;
cout << sqrt(x);
return 0;
}
Описание
функции main()
Возвращение
значения
Вызов функции
Тип возвращаемого
значения
Tutorial. Functions (http://www.cplusplus.com/doc/tutorial/functions/)
Tutorial. Функции в C++ — урок 6 (https://code-live.ru/post/cpp-functions/#more)
Оформление кода в виде функции
(с) Максименкова О.В., НИУ ВШЭ, ФКН, ДПИ 26
#include <iostream>
using namespace std;
int getValue(); // определение функции
int main() {
int x = getValue(); // вызов функции
cout << sqrt(x);
return 0;
}
int getValue() { // описание функции
int x;
cout << "Enter integer value: ";
cin >> x;
return x;
}
Прототип
В С++ при помощи ключевого слова inline можно описывать инлайн-функции.
Небольшие инлайн-функции позволяют сделать программу быстрее. Но не все
компиляторы об этом знают 
Inline functions(http://www.learncpp.com/cpp-tutorial/75-inline-functions/)
(с) Максименкова О.В., НИУ ВШЭ, ФКН, ДПИ 27
#include <iostream>
using namespace std;
double getValue();
double geom(double x, double y) {
return sqrt(x*y);
}
int main() {
double x = getValue();
double y = getValue();
cout << geom(x,y);
return 0;
}
double getValue() {
int x;
cout << "Enter integer value: ";
cin >> x;
return x;
}
параметры
Как сделать так, чтобы в getValue()
передавать имя переменной и сохранять в
неё значение?
аргументы
Вариант?
(с) Максименкова О.В., НИУ ВШЭ, ФКН, ДПИ 28
#include <iostream>
using namespace std;
double getValue();
double geom(double x, double y) {
return sqrt(x*y);
}
int main() {
double x; getValue(x);
double y; getValue(y);
cout << geom(x,y);
return 0;
}
void getValue(double x) {
cout << "Enter double value: ";
cin >> x;
}
Функция не
возвращает
значения
К сожалению, не вариант.
Код не будет компилироваться…
Почему?
Используем ссылку
(с) Максименкова О.В., НИУ ВШЭ, ФКН, ДПИ 29
#include <iostream>
using namespace std;
void getValue(double&); // изменяем объявление
double geom(double x, double y) {
return sqrt(x*y);
}
int main() {
double x; getValue(x); // параметр передаётся по ссылке
double y; getValue(y); // и здесь
cout << geom(x,y);
return 0;
}
void getValue(double& x) { // параметр - ссылка
cout << "Enter double value: ";
cin >> x;
}
ссылка
Tutorial. Passing arguments by reference (http://www.learncpp.com/cpp-tutorial/73-passing-arguments-by-reference/)
Как работает быстрее? При передаче
по ссылке или при передаче по
значению?
Перегрузка функций
(с) Максименкова О.В., НИУ ВШЭ, ФКН, ДПИ 30
#include <iostream>
using namespace std;
void getValue(double&);
void getValue(int&); // объявляем одноимённую
double geom(double x, double y) {
return sqrt(x*y);
}
int main() {
double x; getValue(x); // параметр передаётся по ссылке
int y; getValue(y); // и здесь, но другого типа
cout << geom(x, y); // тип приведён неявно!!!
return 0;
}
void getValue(double &x) { // параметр - ссылка
cout << "Enter double value: ";
cin >> x;
}
void getValue(int &x) { // параметр - ссылка
cout << "Enter integer value: ";
cin >> x;
}
Умалчиваемые значения параметров
(с) Максименкова О.В., НИУ ВШЭ, ФКН, ДПИ 31
#include <iostream>
using namespace std;
void print(char* str1, char *str2 = "Default string") {
cout << str1 << " " << str2 << "n";
}
int main() {
char *text = new char[256];
cout << "Enter your string: ";
cin >> text;
// умаливаемое значение заменится
print(text, "My string");
// у второго параметра есть умалчиваемое
// значение, его можно опускать при вызове
print(text);
return 0;
}
Умалчиваемое
значение
Выделение памяти
под 256 символов
А ничего ли мы не забыли?delete text;
Функции с переменным количеством
параметров
(с) Максименкова О.В., НИУ ВШЭ, ФКН, ДПИ 32
тип имя (спецификация_явных_параметров, ...)
К сожалению, в программировании волшебство мало
распространено, и поэтому каждая функция с переменным
списком параметров должна иметь механизм определения
их количества и их типов. (с) В.В. Подбельский
Дальше без указателей нам не обойтись
Производные типы
данных
Указатели
Массивы
(с) Максименкова О.В., НИУ ВШЭ, ФКН, ДПИ 33
Указатели
(с) Максименкова О.В., НИУ ВШЭ, ФКН, ДПИ 34
тип *имя_указателя int *ptr1;
double *ptr2;
Операция
разыменовывания
тип *имя_указателя = инициализирующее_выражение;
тип *имя_указателя (инициализирующее_выражение);
Описание переменной с типом указателя
Формы записи инициализатора
double x = 3;
int *ptr1(NULL);
double *ptr2;
ptr2 = &x; // указатель связан с адресом x
(с) Максименкова О.В., НИУ ВШЭ, ФКН, ДПИ 35
double x = 3;
int *ptr1(NULL);
double *ptr2;
ptr2 = &x; // указатель связан с адресом x
cout << *ptr2; // получение значение по адресу
double x = 3;
int *ptr1(NULL);
double *ptr2;
*ptr2 = 44; // Не компилируется. Почему?
cout << *ptr2;
double x = 3;
int *ptr1(NULL);
double *ptr2;
*ptr1 = 44; // Так компилируется, но тоже не работает
Операции над указателями. Арифметика
указателей
(с) Максименкова О.В., НИУ ВШЭ, ФКН, ДПИ 36
int x;
int *ptr = &x;
cout << ptr << " " << ptr++ << "n";
cout << ptr - 2 << "n";
cout << ptr + sizeof(int) * 4 << "n";
0076FDD8 0076FDD4
0076FDD0
0076FE18
• операция разыменования (*)
• приведение типов
• присваивание
• получение адреса (&)
• аддитивные операции
• инкремент/декремент
• операции сравнения
Массивы
(с) Максименкова О.В., НИУ ВШЭ, ФКН, ДПИ 37
int arr[]; // нельзя определить массив без размера
тип имя_массива[константое_выражение]
int arr[10]; // определён массив из 10 элементов
int arr[10]; // определён массив из 10 элементов
for (int i = 0;i < 10;i++)
cout << arr[i] << " ";
return 0;
-858993460 -858993460 -858993460 -858993460 -858993460
-858993460 -858993460 -858993460 -858993460 -858993460
for (int i = 0;i < 10;i++) {
arr[i] = 0;
cout << arr[i] << " ";
}
Как изменится вывод?
Массивы и указатели
(с) Максименкова О.В., НИУ ВШЭ, ФКН, ДПИ 38
for (int i = 0;i < 10;i++) {
arr[i] = i;
cout << arr[i] << " ";
}
cout << "nExperiments!!!n";
for (int i = 0;i < 10;i++) {
*(arr + i) = 9 - i;
cout << arr[i] << " ";
}
0 1 2 3 4 5 6 7 8 9
Experiments!!!
9 8 7 6 5 4 3 2 1 0
char *str = "ABCDEFGH";
int i = 0;
while (*(str + i)) { // <=> *(x+i)!='0'
cout << str[i++] << "n";
}
Строки – это массивы символов
char *str = "ABCDEFGH";
int i = 0;
cout << ++str;
char *str = "ABCDEFGH";
cout << strlen(str);
Небольшой пример со строчками
(с) Максименкова О.В., НИУ ВШЭ, ФКН, ДПИ 39
#include <iostream>
using namespace std;
int main() {
char a[][10] = { "foo", "bar", "baz", "quux" };
char *b[] = { "foo","bar", "baz","quux" };
cout << strlen(a[0])<< "n";
cout << strlen(*b);
for (int i = 0; i < 10; i++) {
cout << a[0][i] << " ";
}
for (int i = 0; i < 10; i++) {
cout << *b[i] << " ";
}
return 0;
}
Ошибка при
выполнении
Многомерные массивы
(с) Максименкова О.В., НИУ ВШЭ, ФКН, ДПИ 40
тип имя_массива[К1][K2]...[KN];
массив, элементами которого служат массивы
#include <iostream>
using namespace std;
const int N = 3;
const int M = 5;
const int K = 7;
int main() {
int multiArr[N][M][K]; // трёхмерный массив
return 0;
}
К всему прочему, мы можем описать массив указателей
(с) Максименкова О.В., НИУ ВШЭ, ФКН, ДПИ 41
#include <iostream>
using namespace std;
const int N = 3;
const int M = 5;
const int K = 7;
int main() {
int multiArr[N][M][K] = {1, 2, 3, 4, 5, 6, 7, 8};
for (int i = 0; i < N; i++)
for (int j = 0; j < M; j++)
for (int k = 0; k < K; k++)
cout << multiArr[i][j][k] << " ";
return 0;
}
int multiArr[N][M][K] = { {1,2,3},{4,5},{6,7,8} };
Что изменится?
Многомерные массивы и указатели
(с) Максименкова О.В., НИУ ВШЭ, ФКН, ДПИ 42
const int N = 2;
const int M = 2;
const int K = 2;
int multiArr[N][M][K] = { {1,2},{3,4},{5,6}};
int multiArr[N][M][K] = { {1,2},{3,4} };
#include <iostream>
using namespace std;
const int N = 2;
const int M = 2;
int main() {
int multiArr[N][M] = { {1,2},{3,4} };
cout << *multiArr << "n";
cout << **multiArr << "n";
return 0;
}
*(*(multiArr + 1)) + 1 **multiArr + 1
Массивы и функции
(с) Максименкова О.В., НИУ ВШЭ, ФКН, ДПИ 43
#include <iostream>
using namespace std;
void changeArray(int[]);
int main() {
int ar[] = { 1,2,3,4 };
cout << *ar << *ar + 1 << *ar + 2 << *ar + 3;
cout << "n";
changeArray(ar);
cout << ar[0] << ar[1] << ar[2] << ar[3];
cout << "n";
cout << *ar << *ar + 1 << *ar + 2 << *ar + 3;
return 0;
}
void changeArray(int ar[]) {
ar[0] = ar[3];
}
Передача массива в функцию и немного подозрительного кода
Модификация с указателем
(с) Максименкова О.В., НИУ ВШЭ, ФКН, ДПИ 44
#include <iostream>
using namespace std;
void changeArray(int*);
int main() {
int ar[] = { 1,2,3,4 };
cout << *ar << *(ar + 1) << *(ar + 2) << *(ar + 3);
cout << "n";
changeArray(ar);
cout << *ar << *(ar + 1) << *(ar + 2) << *(ar + 3);
return 0;
}
void changeArray(int* ar) {
ar[0] = ar[3];
}
Указатели на функции
(с) Максименкова О.В., НИУ ВШЭ, ФКН, ДПИ 45
тип_функции (*имя_указателя) (спецификация_параметров);
Дети, этого нельзя понять – это нужно запомнить…
Так ли это?
int(*operation)(int, int);
(с) Максименкова О.В., НИУ ВШЭ, ФКН, ДПИ 46
#include <iostream>
using namespace std;
int op1(int a, int b) { // сложение целых
return a + b;
}
int op2(int a, int b) { // вычитание целых
return a - b;
}
int calculation(int(*op)(int, int), int op1,int op2) {
return (*op)(op1, op2); // вызов функции
}
int main() {
int x = 5, y = 3;
int(*operation)(int, int); // указатель на функцию
operation = op1; // связь указателя с функцией
// передаём в качестве аргумента
cout << calculation(operation,x,y);
return 0;
}
Это уже почти целочисленный калькулятор. Допишем его на практических занятиях.
Ни слова о драконах
(с) Максименкова О.В., НИУ ВШЭ, ФКН, ДПИ 47
тип_функции (*имя_указателя(спец_пар1)) (спецификация_параметров);
Здесь действует тоже мнемоническое правило!
int(*whatTheOperation()) (int, int);
(с) Максименкова О.В., НИУ ВШЭ, ФКН, ДПИ 48
#include <iostream>
using namespace std;
int op1(int a, int b) { // сложение целых
return a + b;
}
int op2(int a, int b) { // вычитание целых
return a - b;
}
int calculation(int(*op)(int, int), int op1,int op2) {
return (*op)(op1, op2); // вызов функции
}
int(*whatTheOperation()) (int, int) {
int(*operation)(int, int); // указатель на функцию
operation = op2;
return operation;
}
int main() {
int x = 5, y = 3;
// передаём в качестве аргумента функцию
cout << calculation(whatTheOperation(),x,y);
return 0;
}
Ссылки
(с) Максименкова О.В., НИУ ВШЭ, ФКН, ДПИ 49
тип &имя_ссылки int &a;
double &b;
тип &имя_ссылки = инициализирующее_выражение;
тип &имя_ссылки (инициализирующее_выражение);
Описание переменной с типом ссылки
Формы записи инициализатора
int myVar = 123;
int &myVarLink = myVar; // сохранили адрес
int &myVarLink2(myVar);
(с) Максименкова О.В., НИУ ВШЭ, ФКН, ДПИ 50
#include <iostream>
using namespace std;
int main() {
int myVar = 123;
int &myVarLink = myVar; // сохранили адрес
int &myVarLink2(myVar);
cout << &myVarLink << " " << myVarLink << "n";
myVarLink++;
cout << myVar << " " << myVarLink << " " << myVarLink2;
return 0;
}
Структуры
(с) Максименкова О.В., НИУ ВШЭ, ФКН, ДПИ 51
struct имя_структурного_типа {
тип1 поле_структуры1;
тип2 поле_структуры2;
.
.
.
} имена_объектов;
Структуры сегодня потребуются нам на практических занятиях.
Tutorial. DataStructures (http://www.cplusplus.com/doc/tutorial/structures/)
Доступ к полям структуры
(с) Максименкова О.В., НИУ ВШЭ, ФКН, ДПИ 52
По имени объекта
По указателю
имя_структуры.имя_элемента_структуры
имя_указателя -> имя_элемента_структуры
(*имя_указателя).имя_элемента_структуры
(с) Максименкова О.В., НИУ ВШЭ, ФКН, ДПИ 53
Спасибо за внимание!
Максименкова Ольга Вениаминовна
Старший преподаватель Департамента программной инженерии, ФКН
E-mail: omaksimenkova@hse.ru
Blog: Stop To Scale (http://stoptoscale.blogspot.ru)

Mais conteúdo relacionado

Mais procurados

2. Операторы языка C#
2. Операторы языка C#2. Операторы языка C#
2. Операторы языка C#Olga Maksimenkova
 
A Method of Reducing Computational Complexity in Verification of Programming ...
A Method of Reducing Computational Complexity in Verification of Programming ...A Method of Reducing Computational Complexity in Verification of Programming ...
A Method of Reducing Computational Complexity in Verification of Programming ...Iosif Itkin
 
C++ Базовый. Занятие 02.
C++ Базовый. Занятие 02.C++ Базовый. Занятие 02.
C++ Базовый. Занятие 02.Igor Shkulipa
 
Советский суперкомпьютер К-340А и секретные вычисления
Советский суперкомпьютер К-340А и секретные вычисленияСоветский суперкомпьютер К-340А и секретные вычисления
Советский суперкомпьютер К-340А и секретные вычисленияPositive Hack Days
 
Алгоритмы и языки программирования
Алгоритмы и языки программированияАлгоритмы и языки программирования
Алгоритмы и языки программированияTheoretical mechanics department
 
Лекция 4: Стеки и очереди
Лекция 4: Стеки и очередиЛекция 4: Стеки и очереди
Лекция 4: Стеки и очередиMikhail Kurnosov
 
TMPA-2015: Lexical analysis of dynamically formed string expressions
TMPA-2015: Lexical analysis of dynamically formed string expressionsTMPA-2015: Lexical analysis of dynamically formed string expressions
TMPA-2015: Lexical analysis of dynamically formed string expressionsIosif Itkin
 
Григорий Демченко, “Асинхронность и сопрограммы: обработка данных“
Григорий Демченко, “Асинхронность и сопрограммы: обработка данных“Григорий Демченко, “Асинхронность и сопрограммы: обработка данных“
Григорий Демченко, “Асинхронность и сопрограммы: обработка данных“Platonov Sergey
 
Михаил Матросов, “С++ без new и delete”
Михаил Матросов, “С++ без new и delete”Михаил Матросов, “С++ без new и delete”
Михаил Матросов, “С++ без new и delete”Platonov Sergey
 
ПВТ - весна 2015 - Лекция 0. Описание курса
ПВТ - весна 2015 - Лекция 0. Описание курсаПВТ - весна 2015 - Лекция 0. Описание курса
ПВТ - весна 2015 - Лекция 0. Описание курсаAlexey Paznikov
 
Игорь Кудрин, «Используем неизменяемые данные и создаем качественный код»
Игорь Кудрин, «Используем неизменяемые данные и создаем качественный код»Игорь Кудрин, «Используем неизменяемые данные и создаем качественный код»
Игорь Кудрин, «Используем неизменяемые данные и создаем качественный код»Platonov Sergey
 
Основы языка Питон: типы данных, операторы
Основы языка Питон: типы данных, операторыОсновы языка Питон: типы данных, операторы
Основы языка Питон: типы данных, операторыTheoretical mechanics department
 
A System of Deductive Verification of Predicate Programs
A System of Deductive Verification of Predicate ProgramsA System of Deductive Verification of Predicate Programs
A System of Deductive Verification of Predicate ProgramsIosif Itkin
 
Лекция №1. Введение. Предмет "Теория вычислительных процессов"
Лекция №1. Введение. Предмет "Теория вычислительных процессов"Лекция №1. Введение. Предмет "Теория вычислительных процессов"
Лекция №1. Введение. Предмет "Теория вычислительных процессов"Nikolay Grebenshikov
 

Mais procurados (20)

2. Операторы языка C#
2. Операторы языка C#2. Операторы языка C#
2. Операторы языка C#
 
A Method of Reducing Computational Complexity in Verification of Programming ...
A Method of Reducing Computational Complexity in Verification of Programming ...A Method of Reducing Computational Complexity in Verification of Programming ...
A Method of Reducing Computational Complexity in Verification of Programming ...
 
Основы MATLAB. Лекция 1.
Основы MATLAB. Лекция 1.Основы MATLAB. Лекция 1.
Основы MATLAB. Лекция 1.
 
Основы MATLAB. Программирование
Основы MATLAB. ПрограммированиеОсновы MATLAB. Программирование
Основы MATLAB. Программирование
 
C++ Базовый. Занятие 02.
C++ Базовый. Занятие 02.C++ Базовый. Занятие 02.
C++ Базовый. Занятие 02.
 
Советский суперкомпьютер К-340А и секретные вычисления
Советский суперкомпьютер К-340А и секретные вычисленияСоветский суперкомпьютер К-340А и секретные вычисления
Советский суперкомпьютер К-340А и секретные вычисления
 
Алгоритмы и языки программирования
Алгоритмы и языки программированияАлгоритмы и языки программирования
Алгоритмы и языки программирования
 
Лекция 4: Стеки и очереди
Лекция 4: Стеки и очередиЛекция 4: Стеки и очереди
Лекция 4: Стеки и очереди
 
TMPA-2015: Lexical analysis of dynamically formed string expressions
TMPA-2015: Lexical analysis of dynamically formed string expressionsTMPA-2015: Lexical analysis of dynamically formed string expressions
TMPA-2015: Lexical analysis of dynamically formed string expressions
 
Python: ввод и вывод
Python: ввод и выводPython: ввод и вывод
Python: ввод и вывод
 
Григорий Демченко, “Асинхронность и сопрограммы: обработка данных“
Григорий Демченко, “Асинхронность и сопрограммы: обработка данных“Григорий Демченко, “Асинхронность и сопрограммы: обработка данных“
Григорий Демченко, “Асинхронность и сопрограммы: обработка данных“
 
01 вводная
01 вводная01 вводная
01 вводная
 
Excel in Javascript
Excel in JavascriptExcel in Javascript
Excel in Javascript
 
Михаил Матросов, “С++ без new и delete”
Михаил Матросов, “С++ без new и delete”Михаил Матросов, “С++ без new и delete”
Михаил Матросов, “С++ без new и delete”
 
ПВТ - весна 2015 - Лекция 0. Описание курса
ПВТ - весна 2015 - Лекция 0. Описание курсаПВТ - весна 2015 - Лекция 0. Описание курса
ПВТ - весна 2015 - Лекция 0. Описание курса
 
Игорь Кудрин, «Используем неизменяемые данные и создаем качественный код»
Игорь Кудрин, «Используем неизменяемые данные и создаем качественный код»Игорь Кудрин, «Используем неизменяемые данные и создаем качественный код»
Игорь Кудрин, «Используем неизменяемые данные и создаем качественный код»
 
Основы языка Питон: типы данных, операторы
Основы языка Питон: типы данных, операторыОсновы языка Питон: типы данных, операторы
Основы языка Питон: типы данных, операторы
 
A System of Deductive Verification of Predicate Programs
A System of Deductive Verification of Predicate ProgramsA System of Deductive Verification of Predicate Programs
A System of Deductive Verification of Predicate Programs
 
Лекция №1. Введение. Предмет "Теория вычислительных процессов"
Лекция №1. Введение. Предмет "Теория вычислительных процессов"Лекция №1. Введение. Предмет "Теория вычислительных процессов"
Лекция №1. Введение. Предмет "Теория вычислительных процессов"
 
Алгоритмы сортировки
Алгоритмы сортировкиАлгоритмы сортировки
Алгоритмы сортировки
 

Semelhante a Основы программирования на C++

О сложностях программирования, или C# нас не спасет?
О сложностях программирования, или C# нас не спасет?О сложностях программирования, или C# нас не спасет?
О сложностях программирования, или C# нас не спасет?Tatyanazaxarova
 
Статический анализ кода: Что? Как? Зачем?
Статический анализ кода: Что? Как? Зачем?Статический анализ кода: Что? Как? Зачем?
Статический анализ кода: Что? Как? Зачем?Andrey Karpov
 
DUMP-2012 - Только хардкор! - "Расширяем PHP" Сергей Горшков (index.art)
DUMP-2012 - Только хардкор! - "Расширяем PHP" Сергей Горшков (index.art) DUMP-2012 - Только хардкор! - "Расширяем PHP" Сергей Горшков (index.art)
DUMP-2012 - Только хардкор! - "Расширяем PHP" Сергей Горшков (index.art) it-people
 
Разработка модуля для отладки приложений на языке ActionScript 3 в среде Visu...
Разработка модуля для отладки приложений на языке ActionScript 3 в среде Visu...Разработка модуля для отладки приложений на языке ActionScript 3 в среде Visu...
Разработка модуля для отладки приложений на языке ActionScript 3 в среде Visu...Rinat Shaikhutdinov
 
Microsoft Visual Studio 2010
Microsoft Visual Studio 2010Microsoft Visual Studio 2010
Microsoft Visual Studio 2010Alexander Babich
 
Java осень 2014 занятие 5
Java осень 2014 занятие 5Java осень 2014 занятие 5
Java осень 2014 занятие 5Technopark
 
PVS-Studio. Статический анализатор кода. Windows/Linux, C/C++/C#
PVS-Studio. Статический анализатор кода. Windows/Linux, C/C++/C#PVS-Studio. Статический анализатор кода. Windows/Linux, C/C++/C#
PVS-Studio. Статический анализатор кода. Windows/Linux, C/C++/C#Andrey Karpov
 
О.В.Сухорослов "Параллельное программирование"
О.В.Сухорослов "Параллельное программирование"О.В.Сухорослов "Параллельное программирование"
О.В.Сухорослов "Параллельное программирование"Yandex
 
C++ теория
C++ теорияC++ теория
C++ теорияtank1975
 
C++ теория
C++ теорияC++ теория
C++ теорияtank1975
 
C++ теория
C++ теорияC++ теория
C++ теорияtank1975
 
C++ Базовый. Занятие 04.
C++ Базовый. Занятие 04.C++ Базовый. Занятие 04.
C++ Базовый. Занятие 04.Igor Shkulipa
 
Использование библиотеки анализа кода OpenC++: модификация, улучшение, исправ...
Использование библиотеки анализа кода OpenC++: модификация, улучшение, исправ...Использование библиотеки анализа кода OpenC++: модификация, улучшение, исправ...
Использование библиотеки анализа кода OpenC++: модификация, улучшение, исправ...Tatyanazaxarova
 
МАИ, Сети ЭВМ, Лекция №5
МАИ, Сети ЭВМ, Лекция №5МАИ, Сети ЭВМ, Лекция №5
МАИ, Сети ЭВМ, Лекция №5Dima Dzuba
 
20090720 hpc exercise1
20090720 hpc exercise120090720 hpc exercise1
20090720 hpc exercise1Michael Karpov
 
Проблемы системной инженерии. Русский взгляд.
Проблемы системной инженерии. Русский взгляд.Проблемы системной инженерии. Русский взгляд.
Проблемы системной инженерии. Русский взгляд.Anatoly Levenchuk
 
06 vasenin roganov siis_2013
06 vasenin roganov siis_201306 vasenin roganov siis_2013
06 vasenin roganov siis_2013Marina_creautor
 
Всё о статическом анализе кода для Java программиста
Всё о статическом анализе кода для Java программистаВсё о статическом анализе кода для Java программиста
Всё о статическом анализе кода для Java программистаAndrey Karpov
 
C# Desktop. Занятие 16.
C# Desktop. Занятие 16.C# Desktop. Занятие 16.
C# Desktop. Занятие 16.Igor Shkulipa
 

Semelhante a Основы программирования на C++ (20)

О сложностях программирования, или C# нас не спасет?
О сложностях программирования, или C# нас не спасет?О сложностях программирования, или C# нас не спасет?
О сложностях программирования, или C# нас не спасет?
 
Статический анализ кода: Что? Как? Зачем?
Статический анализ кода: Что? Как? Зачем?Статический анализ кода: Что? Как? Зачем?
Статический анализ кода: Что? Как? Зачем?
 
DUMP-2012 - Только хардкор! - "Расширяем PHP" Сергей Горшков (index.art)
DUMP-2012 - Только хардкор! - "Расширяем PHP" Сергей Горшков (index.art) DUMP-2012 - Только хардкор! - "Расширяем PHP" Сергей Горшков (index.art)
DUMP-2012 - Только хардкор! - "Расширяем PHP" Сергей Горшков (index.art)
 
Разработка модуля для отладки приложений на языке ActionScript 3 в среде Visu...
Разработка модуля для отладки приложений на языке ActionScript 3 в среде Visu...Разработка модуля для отладки приложений на языке ActionScript 3 в среде Visu...
Разработка модуля для отладки приложений на языке ActionScript 3 в среде Visu...
 
Microsoft Visual Studio 2010
Microsoft Visual Studio 2010Microsoft Visual Studio 2010
Microsoft Visual Studio 2010
 
Java осень 2014 занятие 5
Java осень 2014 занятие 5Java осень 2014 занятие 5
Java осень 2014 занятие 5
 
PVS-Studio. Статический анализатор кода. Windows/Linux, C/C++/C#
PVS-Studio. Статический анализатор кода. Windows/Linux, C/C++/C#PVS-Studio. Статический анализатор кода. Windows/Linux, C/C++/C#
PVS-Studio. Статический анализатор кода. Windows/Linux, C/C++/C#
 
О.В.Сухорослов "Параллельное программирование"
О.В.Сухорослов "Параллельное программирование"О.В.Сухорослов "Параллельное программирование"
О.В.Сухорослов "Параллельное программирование"
 
C++ теория
C++ теорияC++ теория
C++ теория
 
C++ теория
C++ теорияC++ теория
C++ теория
 
C++ теория
C++ теорияC++ теория
C++ теория
 
C++ Базовый. Занятие 04.
C++ Базовый. Занятие 04.C++ Базовый. Занятие 04.
C++ Базовый. Занятие 04.
 
Использование библиотеки анализа кода OpenC++: модификация, улучшение, исправ...
Использование библиотеки анализа кода OpenC++: модификация, улучшение, исправ...Использование библиотеки анализа кода OpenC++: модификация, улучшение, исправ...
Использование библиотеки анализа кода OpenC++: модификация, улучшение, исправ...
 
МАИ, Сети ЭВМ, Лекция №5
МАИ, Сети ЭВМ, Лекция №5МАИ, Сети ЭВМ, Лекция №5
МАИ, Сети ЭВМ, Лекция №5
 
C#5 What's new?
C#5 What's new?C#5 What's new?
C#5 What's new?
 
20090720 hpc exercise1
20090720 hpc exercise120090720 hpc exercise1
20090720 hpc exercise1
 
Проблемы системной инженерии. Русский взгляд.
Проблемы системной инженерии. Русский взгляд.Проблемы системной инженерии. Русский взгляд.
Проблемы системной инженерии. Русский взгляд.
 
06 vasenin roganov siis_2013
06 vasenin roganov siis_201306 vasenin roganov siis_2013
06 vasenin roganov siis_2013
 
Всё о статическом анализе кода для Java программиста
Всё о статическом анализе кода для Java программистаВсё о статическом анализе кода для Java программиста
Всё о статическом анализе кода для Java программиста
 
C# Desktop. Занятие 16.
C# Desktop. Занятие 16.C# Desktop. Занятие 16.
C# Desktop. Занятие 16.
 

Mais de Olga Maksimenkova

Информатика в школе: методы и технологии активного обучения
Информатика в школе: методы и технологии активного обученияИнформатика в школе: методы и технологии активного обучения
Информатика в школе: методы и технологии активного обученияOlga Maksimenkova
 
Взаимное оценивание в дисцилине "Программирование"
Взаимное оценивание в дисцилине "Программирование"Взаимное оценивание в дисцилине "Программирование"
Взаимное оценивание в дисцилине "Программирование"Olga Maksimenkova
 
2020 maksimenkova-dist learning
2020 maksimenkova-dist learning2020 maksimenkova-dist learning
2020 maksimenkova-dist learningOlga Maksimenkova
 
Intelligent Virtual Reality Tutoring Systems as a New Generation of Simulator...
Intelligent Virtual Reality Tutoring Systems as a New Generation of Simulator...Intelligent Virtual Reality Tutoring Systems as a New Generation of Simulator...
Intelligent Virtual Reality Tutoring Systems as a New Generation of Simulator...Olga Maksimenkova
 
Геймификация образования: фан, мотивация и преодоление себя
Геймификация образования: фан, мотивация и преодоление себяГеймификация образования: фан, мотивация и преодоление себя
Геймификация образования: фан, мотивация и преодоление себяOlga Maksimenkova
 
2019-01-11-Digital Transformation of Education
2019-01-11-Digital Transformation of Education2019-01-11-Digital Transformation of Education
2019-01-11-Digital Transformation of EducationOlga Maksimenkova
 
Providing Cognitive Scaffolding within Computer-Supported Adaptive Learning E...
Providing Cognitive Scaffolding within Computer-Supported Adaptive Learning E...Providing Cognitive Scaffolding within Computer-Supported Adaptive Learning E...
Providing Cognitive Scaffolding within Computer-Supported Adaptive Learning E...Olga Maksimenkova
 
Collaborative Learning in Data Science Education: a Data Expedition as a Form...
Collaborative Learning in Data Science Education: a Data Expedition as a Form...Collaborative Learning in Data Science Education: a Data Expedition as a Form...
Collaborative Learning in Data Science Education: a Data Expedition as a Form...Olga Maksimenkova
 
Инженерия Хаоса или научите меня геймдеву
Инженерия Хаоса или научите меня геймдевуИнженерия Хаоса или научите меня геймдеву
Инженерия Хаоса или научите меня геймдевуOlga Maksimenkova
 
Maksimenkova edu infosystems-2018-05-25
Maksimenkova edu infosystems-2018-05-25Maksimenkova edu infosystems-2018-05-25
Maksimenkova edu infosystems-2018-05-25Olga Maksimenkova
 
Lec 04. The way to production: game testing and analytics
Lec 04. The way to production: game testing and analyticsLec 04. The way to production: game testing and analytics
Lec 04. The way to production: game testing and analyticsOlga Maksimenkova
 
Lec 03. The fates of the Games. Game engines, development
Lec 03. The fates of the Games. Game engines, developmentLec 03. The fates of the Games. Game engines, development
Lec 03. The fates of the Games. Game engines, developmentOlga Maksimenkova
 
Lec 01. Mobile games development
Lec 01. Mobile games developmentLec 01. Mobile games development
Lec 01. Mobile games developmentOlga Maksimenkova
 
[Maksimenkova_ Neznanov]apkit 2017
[Maksimenkova_ Neznanov]apkit 2017[Maksimenkova_ Neznanov]apkit 2017
[Maksimenkova_ Neznanov]apkit 2017Olga Maksimenkova
 
Что скрывают открытые образовательные ресурсы?
Что скрывают открытые образовательные ресурсы?Что скрывают открытые образовательные ресурсы?
Что скрывают открытые образовательные ресурсы?Olga Maksimenkova
 
Очистка данных на практике: мифы и легенты Excel и R
Очистка данных на практике: мифы и легенты Excel и RОчистка данных на практике: мифы и легенты Excel и R
Очистка данных на практике: мифы и легенты Excel и ROlga Maksimenkova
 
Решение систем логических уравнений, ЕГЭ 23 информатика
Решение систем логических уравнений, ЕГЭ 23 информатикаРешение систем логических уравнений, ЕГЭ 23 информатика
Решение систем логических уравнений, ЕГЭ 23 информатикаOlga Maksimenkova
 
Математические основы методов решений систем логических уравнений
Математические основы методов решений систем логических уравненийМатематические основы методов решений систем логических уравнений
Математические основы методов решений систем логических уравненийOlga Maksimenkova
 
[Maksimenkova_Neznanov] Peer Assessment to Programmers & Peer Assessment Syst...
[Maksimenkova_Neznanov] Peer Assessment to Programmers & Peer Assessment Syst...[Maksimenkova_Neznanov] Peer Assessment to Programmers & Peer Assessment Syst...
[Maksimenkova_Neznanov] Peer Assessment to Programmers & Peer Assessment Syst...Olga Maksimenkova
 

Mais de Olga Maksimenkova (20)

Информатика в школе: методы и технологии активного обучения
Информатика в школе: методы и технологии активного обученияИнформатика в школе: методы и технологии активного обучения
Информатика в школе: методы и технологии активного обучения
 
Взаимное оценивание в дисцилине "Программирование"
Взаимное оценивание в дисцилине "Программирование"Взаимное оценивание в дисцилине "Программирование"
Взаимное оценивание в дисцилине "Программирование"
 
2020 maksimenkova-dist learning
2020 maksimenkova-dist learning2020 maksimenkova-dist learning
2020 maksimenkova-dist learning
 
Intelligent Virtual Reality Tutoring Systems as a New Generation of Simulator...
Intelligent Virtual Reality Tutoring Systems as a New Generation of Simulator...Intelligent Virtual Reality Tutoring Systems as a New Generation of Simulator...
Intelligent Virtual Reality Tutoring Systems as a New Generation of Simulator...
 
Геймификация образования: фан, мотивация и преодоление себя
Геймификация образования: фан, мотивация и преодоление себяГеймификация образования: фан, мотивация и преодоление себя
Геймификация образования: фан, мотивация и преодоление себя
 
2019-01-11-Digital Transformation of Education
2019-01-11-Digital Transformation of Education2019-01-11-Digital Transformation of Education
2019-01-11-Digital Transformation of Education
 
Providing Cognitive Scaffolding within Computer-Supported Adaptive Learning E...
Providing Cognitive Scaffolding within Computer-Supported Adaptive Learning E...Providing Cognitive Scaffolding within Computer-Supported Adaptive Learning E...
Providing Cognitive Scaffolding within Computer-Supported Adaptive Learning E...
 
Collaborative Learning in Data Science Education: a Data Expedition as a Form...
Collaborative Learning in Data Science Education: a Data Expedition as a Form...Collaborative Learning in Data Science Education: a Data Expedition as a Form...
Collaborative Learning in Data Science Education: a Data Expedition as a Form...
 
Инженерия Хаоса или научите меня геймдеву
Инженерия Хаоса или научите меня геймдевуИнженерия Хаоса или научите меня геймдеву
Инженерия Хаоса или научите меня геймдеву
 
Video Game Design History
Video Game Design HistoryVideo Game Design History
Video Game Design History
 
Maksimenkova edu infosystems-2018-05-25
Maksimenkova edu infosystems-2018-05-25Maksimenkova edu infosystems-2018-05-25
Maksimenkova edu infosystems-2018-05-25
 
Lec 04. The way to production: game testing and analytics
Lec 04. The way to production: game testing and analyticsLec 04. The way to production: game testing and analytics
Lec 04. The way to production: game testing and analytics
 
Lec 03. The fates of the Games. Game engines, development
Lec 03. The fates of the Games. Game engines, developmentLec 03. The fates of the Games. Game engines, development
Lec 03. The fates of the Games. Game engines, development
 
Lec 01. Mobile games development
Lec 01. Mobile games developmentLec 01. Mobile games development
Lec 01. Mobile games development
 
[Maksimenkova_ Neznanov]apkit 2017
[Maksimenkova_ Neznanov]apkit 2017[Maksimenkova_ Neznanov]apkit 2017
[Maksimenkova_ Neznanov]apkit 2017
 
Что скрывают открытые образовательные ресурсы?
Что скрывают открытые образовательные ресурсы?Что скрывают открытые образовательные ресурсы?
Что скрывают открытые образовательные ресурсы?
 
Очистка данных на практике: мифы и легенты Excel и R
Очистка данных на практике: мифы и легенты Excel и RОчистка данных на практике: мифы и легенты Excel и R
Очистка данных на практике: мифы и легенты Excel и R
 
Решение систем логических уравнений, ЕГЭ 23 информатика
Решение систем логических уравнений, ЕГЭ 23 информатикаРешение систем логических уравнений, ЕГЭ 23 информатика
Решение систем логических уравнений, ЕГЭ 23 информатика
 
Математические основы методов решений систем логических уравнений
Математические основы методов решений систем логических уравненийМатематические основы методов решений систем логических уравнений
Математические основы методов решений систем логических уравнений
 
[Maksimenkova_Neznanov] Peer Assessment to Programmers & Peer Assessment Syst...
[Maksimenkova_Neznanov] Peer Assessment to Programmers & Peer Assessment Syst...[Maksimenkova_Neznanov] Peer Assessment to Programmers & Peer Assessment Syst...
[Maksimenkova_Neznanov] Peer Assessment to Programmers & Peer Assessment Syst...
 

Основы программирования на C++

  • 1. Основы программирования на C++ Максименкова Ольга Вениаминовна Старший преподаватель Департамента программной инженерии Факультета компьютерных наук (с) Максименкова О.В., НИУ ВШЭ, ФКН, ДПИ 1
  • 2. Ответы на уже заданные вопросы (с) Максименкова О.В., НИУ ВШЭ, ФКН, ДПИ 2 • Как же программа работает со всеми этими ошибками? (http://habrahabr.ru/company/pvs-studio/blog/261279/) • О библиотеках C++ • A list of open source C++ libraries (http://ru.cppreference.com/w/cpp/links/libs) • Category:C++ libraries (https://en.wikipedia.org/wiki/Category:C%2B%2B_libraries) • News, Status & Discussion about Standard C++ (https://isocpp.org)
  • 3. Цели лекции (с) Максименкова О.В., НИУ ВШЭ, ФКН, ДПИ 3 Рассмотреть • Основные типы данных • Базовые конструкции языка • Производные типы данных • Функции и их параметры Выявить • Способы повышения быстродействия кода • Особенности языка C++
  • 4. Соглашения о терминологии (с) Максименкова О.В., НИУ ВШЭ, ФКН, ДПИ 4 Идентификатор – последовательность из букв латинского алфавита, десятичных цифр и символов подчёркивания, начинающаяся не с цифры. Ключевые (служебные) слова – это идентификаторы, зарезервированные в языке для специального использования. Выражение – это последовательность операндов, разделителей и знаков операций, задающая вычисления, то есть это правила для получения значения Знаки операций обеспечивают формирование и последующее вычисление выражений. Директива (команда) препроцессора Определение [declaration] Описание [specification] Подбельский В.В. Язык Си++. - М.: Финансы и статистика, 2003. – 560 с.
  • 5. Учебные материалы (с) Максименкова О.В., НИУ ВШЭ, ФКН, ДПИ 5 1. Ахметсафина Р.З. Построение и анализ алгоритмов (ДПИ, ФКН, НИУ ВШЭ, 2 курс бакалавриата) (http://www.hse.ru/edu/courses/126217828.html) 2. Eunsuk Kang, and Jean Yang. 6.088 Introduction to C Memory Management and C++ Object-Oriented Programming, January IAP 2010. (Massachusetts Institute of Technology: MIT OpenCourseWare), http://ocw.mit.edu (Accessed 21 Jun, 2015). License: Creative Commons BY-NC-SA 3. Jesse Dunietz, Geza Kovacs, and John Marrero. 6.096 Introduction to C++, January IAP 2011. (Massachusetts Institute of Technology: MIT OpenCourseWare),http://ocw.mit.edu (Accessed 21 Jun, 2015). License: Creative Commons BY-NC-SA 4. Tom Lieber, Kyle Murray, and Frank Li. 6.S096 Introduction to C and C++, January IAP 2013. (Massachusetts Institute of Technology: MIT OpenCourseWare),http://ocw.mit.edu (Accessed 21 Jun, 2015). License: Creative Commons BY-NC-SA 5. Andre Kessler. 6.S096 Effective Programming in C and C++, January IAP 2014. (Massachusetts Institute of Technology: MIT OpenCourseWare), http://ocw.mit.edu(Accessed 21 Jun, 2015). License: Creative Commons BY-NC-SA
  • 6. Первая программа на C++ (с) Максименкова О.В., НИУ ВШЭ, ФКН, ДПИ 6 // Task_01.cpp : Defines the entry point for the console application. // #include "iostream" int main() { std::cout << "Hello, World!"; return 0; } • Ключевые слова • Идентификаторы • Литералы • Операции • Разделители • Пробельные символы
  • 7. Типы данных и переменные (с) Максименкова О.В., НИУ ВШЭ, ФКН, ДПИ 7
  • 8. Основные типы данных (с) Максименкова О.В., НИУ ВШЭ, ФКН, ДПИ 8 Тип Размер (байты) char 1 unsigned char 1 int 4 unsigned int 4 bool 1 double 8
  • 9. Переменные (с) Максименкова О.В., НИУ ВШЭ, ФКН, ДПИ 9 C++ tutorial. Variables and types (http://www.cplusplus.com/doc/tutorial/variables/) • Декларация (описание) [declaration] • Инициализация [initialization] #include "iostream" using namespace std; int main() { int x; // декларация x = 5 * 12; // инициализация cout << "x: " << x; return 0; } int x = 5 * 12; // декларация c инициализацией
  • 10. Ввод значения переменной (с) Максименкова О.В., НИУ ВШЭ, ФКН, ДПИ 10 #include "iostream" using namespace std; int main() { int x; // декларация cout << "Enter integer value:n"; cin >> x; // получения значения переменной cout << "nnx: " << x; return 0; }
  • 11. Условия Логические и условные операции Условный оператор Переключатель (с) Максименкова О.В., НИУ ВШЭ, ФКН, ДПИ 11
  • 12. Условные операции (с) Максименкова О.В., НИУ ВШЭ, ФКН, ДПИ 12 Операция Название > Больше >= Больше или равно < Меньше <= Меньше или равно == Равно != Не равно
  • 13. Логические операции (с) Максименкова О.В., НИУ ВШЭ, ФКН, ДПИ 13 Операция Название && И || ИЛИ ! НЕ ^ Исключающее ИЛИ (XOR) Побитовые логические операции в рамках знакомства с C++ мы рассматривать не будем, но они есть… Операторы в C и C++ (https://ru.wikipedia.org/wiki/Операторы_в_C_и_C%2B%2B) Tutorial. Operators (http://www.cplusplus.com/doc/tutorial/operators/) Tutorial. Operators in C++ (http://www.tutorialspoint.com/cplusplus/cpp_operators.htm)
  • 14. Тернарный оператор (с) Максименкова О.В., НИУ ВШЭ, ФКН, ДПИ 14 <операнд_1>?<операнд_2>:<операнд_3> true false
  • 15. Условный оператор (с) Максименкова О.В., НИУ ВШЭ, ФКН, ДПИ 15 if (условие) ThenStat_1 if (условие) { ThenStat_1 ThenStat_2 ... } if (условие) { ThenStat_1 ThenStat_2 ... } else { ElseStat_1 ElseStat_2 ... } if (условие) ThenStat_1 else ElseStat_2 Краткая форма Tutorial. C++ decision making statements (http://www.tutorialspoint.com/cplusplus/cpp_decision_making.htm) Tutorial Statements and flow control (http://www.cplusplus.com/doc/tutorial/control/)
  • 16. Пример использования условия (с) Максименкова О.В., НИУ ВШЭ, ФКН, ДПИ 16 #include "iostream" using namespace std; int main() { double x; cout << "Enter x: "; cin >> x; if (x > 0) cout << "nAbsolute value is: " << x; else cout << "nAbsolute value is: " << -x; return 0; } Получение значения модуля вещественного числа. Используем математическое определение
  • 17. Переключатель (с) Максименкова О.В., НИУ ВШЭ, ФКН, ДПИ 17 switch (выражение) { case constant1: statement_A1 statement_A2 ... break; case constant2: statement_B1 statement_B2 ... break; ... default: statement_Z1 statement_Z2 ... }
  • 18. Пример использования переключателя (с) Максименкова О.В., НИУ ВШЭ, ФКН, ДПИ 18 int x; cout << "Enter your mark: "; cin >> x; switch (x) { case 1: case 2: case 3: cout << "Your mark is 2"; break; case 4: case 5: cout << "Your mark is 3"; break; case 6: case 7: cout << "Your mark is 4" ;break; case 8: case 9: case 10: cout << "Your mark is 5"; break; } Получение четырёх балльного эквивалента для десятибалльной оценки На практических занятиях мы дополним код этой программы, чтобы при вводе чисел меньше единицы и больше 10 выводилось сообщение.
  • 19. Циклы Цикл с постусловием Цикл с предусловием Цикл с параметром (с) Максименкова О.В., НИУ ВШЭ, ФКН, ДПИ 19
  • 20. while (с) Максименкова О.В., НИУ ВШЭ, ФКН, ДПИ 20 while (условие) { statement1 statement2 ... } #include "iostream" using namespace std; const int N = 10; int main() { int i = 0; while (i < N) cout << ++i << " "; return 0; } Если команда в теле цикла одна, операторные скобки также могут быть опущены. Вывод первых десяти чисел натурального ряда Tutorial. Constants (http://www.cplusplus.com/doc/tutorial/constants/)
  • 21. do-while (с) Максименкова О.В., НИУ ВШЭ, ФКН, ДПИ 21 do { statement1 statement2 ... } while (условие); Вывод количества чисел делящихся на 10 и не делящихся на 10 из диапазона [1;99] #include "iostream" #define N 100 using namespace std; int main() { int i = 1, decs=0, other=0; do (i++ % 10 == 0) ? decs++ : other++; while (i < N); cout << decs << " " << other; }
  • 22. for (с) Максименкова О.В., НИУ ВШЭ, ФКН, ДПИ 22 for(инициализации; условие; список выражений) { statement1 statement2 ... } for (int i = 0; i < 5; cout << i++); int i = 0; for (; i < 5; cout << i++); int i = 0; for (; i < 5; i++) cout << i;
  • 23. Функции Повторное использование кода Перегрузка функций (с) Максименкова О.В., НИУ ВШЭ, ФКН, ДПИ 23
  • 24. Студенты могут не знать, что (с) Максименкова О.В., НИУ ВШЭ, ФКН, ДПИ 24 Алгоритмическая декомпозиция [algorithmic decomposition] - процесс разделения системы на части, каждая из которых отражает этап общего процесса Структурное проектирование по методу сверху вниз основной базовой единицей является подпрограмма, и программа в целом принимает форму дерева, в котором одни подпрограммы в процессе работы вызывают другие подпрограммы Процедурная инкапсуляция используется в процедурной парадигме в виде подпрограмм, которые скрывают детали реализации части алгоритма. SADT (Structured Analysis and Design Technique) методология структурного анализа и проектирования, интегрирующая процесс моделирования, управление конфигурацией проекта, использование дополнительных языковых средств и руководство проектом со своим графическим языком
  • 25. Описание функций (с) Максименкова О.В., НИУ ВШЭ, ФКН, ДПИ 25 #include <iostream> using namespace std; int main() { int x; cout << "Enter integer value: "; cin >> x; cout << sqrt(x); return 0; } Описание функции main() Возвращение значения Вызов функции Тип возвращаемого значения Tutorial. Functions (http://www.cplusplus.com/doc/tutorial/functions/) Tutorial. Функции в C++ — урок 6 (https://code-live.ru/post/cpp-functions/#more)
  • 26. Оформление кода в виде функции (с) Максименкова О.В., НИУ ВШЭ, ФКН, ДПИ 26 #include <iostream> using namespace std; int getValue(); // определение функции int main() { int x = getValue(); // вызов функции cout << sqrt(x); return 0; } int getValue() { // описание функции int x; cout << "Enter integer value: "; cin >> x; return x; } Прототип В С++ при помощи ключевого слова inline можно описывать инлайн-функции. Небольшие инлайн-функции позволяют сделать программу быстрее. Но не все компиляторы об этом знают  Inline functions(http://www.learncpp.com/cpp-tutorial/75-inline-functions/)
  • 27. (с) Максименкова О.В., НИУ ВШЭ, ФКН, ДПИ 27 #include <iostream> using namespace std; double getValue(); double geom(double x, double y) { return sqrt(x*y); } int main() { double x = getValue(); double y = getValue(); cout << geom(x,y); return 0; } double getValue() { int x; cout << "Enter integer value: "; cin >> x; return x; } параметры Как сделать так, чтобы в getValue() передавать имя переменной и сохранять в неё значение? аргументы
  • 28. Вариант? (с) Максименкова О.В., НИУ ВШЭ, ФКН, ДПИ 28 #include <iostream> using namespace std; double getValue(); double geom(double x, double y) { return sqrt(x*y); } int main() { double x; getValue(x); double y; getValue(y); cout << geom(x,y); return 0; } void getValue(double x) { cout << "Enter double value: "; cin >> x; } Функция не возвращает значения К сожалению, не вариант. Код не будет компилироваться… Почему?
  • 29. Используем ссылку (с) Максименкова О.В., НИУ ВШЭ, ФКН, ДПИ 29 #include <iostream> using namespace std; void getValue(double&); // изменяем объявление double geom(double x, double y) { return sqrt(x*y); } int main() { double x; getValue(x); // параметр передаётся по ссылке double y; getValue(y); // и здесь cout << geom(x,y); return 0; } void getValue(double& x) { // параметр - ссылка cout << "Enter double value: "; cin >> x; } ссылка Tutorial. Passing arguments by reference (http://www.learncpp.com/cpp-tutorial/73-passing-arguments-by-reference/) Как работает быстрее? При передаче по ссылке или при передаче по значению?
  • 30. Перегрузка функций (с) Максименкова О.В., НИУ ВШЭ, ФКН, ДПИ 30 #include <iostream> using namespace std; void getValue(double&); void getValue(int&); // объявляем одноимённую double geom(double x, double y) { return sqrt(x*y); } int main() { double x; getValue(x); // параметр передаётся по ссылке int y; getValue(y); // и здесь, но другого типа cout << geom(x, y); // тип приведён неявно!!! return 0; } void getValue(double &x) { // параметр - ссылка cout << "Enter double value: "; cin >> x; } void getValue(int &x) { // параметр - ссылка cout << "Enter integer value: "; cin >> x; }
  • 31. Умалчиваемые значения параметров (с) Максименкова О.В., НИУ ВШЭ, ФКН, ДПИ 31 #include <iostream> using namespace std; void print(char* str1, char *str2 = "Default string") { cout << str1 << " " << str2 << "n"; } int main() { char *text = new char[256]; cout << "Enter your string: "; cin >> text; // умаливаемое значение заменится print(text, "My string"); // у второго параметра есть умалчиваемое // значение, его можно опускать при вызове print(text); return 0; } Умалчиваемое значение Выделение памяти под 256 символов А ничего ли мы не забыли?delete text;
  • 32. Функции с переменным количеством параметров (с) Максименкова О.В., НИУ ВШЭ, ФКН, ДПИ 32 тип имя (спецификация_явных_параметров, ...) К сожалению, в программировании волшебство мало распространено, и поэтому каждая функция с переменным списком параметров должна иметь механизм определения их количества и их типов. (с) В.В. Подбельский Дальше без указателей нам не обойтись
  • 34. Указатели (с) Максименкова О.В., НИУ ВШЭ, ФКН, ДПИ 34 тип *имя_указателя int *ptr1; double *ptr2; Операция разыменовывания тип *имя_указателя = инициализирующее_выражение; тип *имя_указателя (инициализирующее_выражение); Описание переменной с типом указателя Формы записи инициализатора double x = 3; int *ptr1(NULL); double *ptr2; ptr2 = &x; // указатель связан с адресом x
  • 35. (с) Максименкова О.В., НИУ ВШЭ, ФКН, ДПИ 35 double x = 3; int *ptr1(NULL); double *ptr2; ptr2 = &x; // указатель связан с адресом x cout << *ptr2; // получение значение по адресу double x = 3; int *ptr1(NULL); double *ptr2; *ptr2 = 44; // Не компилируется. Почему? cout << *ptr2; double x = 3; int *ptr1(NULL); double *ptr2; *ptr1 = 44; // Так компилируется, но тоже не работает
  • 36. Операции над указателями. Арифметика указателей (с) Максименкова О.В., НИУ ВШЭ, ФКН, ДПИ 36 int x; int *ptr = &x; cout << ptr << " " << ptr++ << "n"; cout << ptr - 2 << "n"; cout << ptr + sizeof(int) * 4 << "n"; 0076FDD8 0076FDD4 0076FDD0 0076FE18 • операция разыменования (*) • приведение типов • присваивание • получение адреса (&) • аддитивные операции • инкремент/декремент • операции сравнения
  • 37. Массивы (с) Максименкова О.В., НИУ ВШЭ, ФКН, ДПИ 37 int arr[]; // нельзя определить массив без размера тип имя_массива[константое_выражение] int arr[10]; // определён массив из 10 элементов int arr[10]; // определён массив из 10 элементов for (int i = 0;i < 10;i++) cout << arr[i] << " "; return 0; -858993460 -858993460 -858993460 -858993460 -858993460 -858993460 -858993460 -858993460 -858993460 -858993460 for (int i = 0;i < 10;i++) { arr[i] = 0; cout << arr[i] << " "; } Как изменится вывод?
  • 38. Массивы и указатели (с) Максименкова О.В., НИУ ВШЭ, ФКН, ДПИ 38 for (int i = 0;i < 10;i++) { arr[i] = i; cout << arr[i] << " "; } cout << "nExperiments!!!n"; for (int i = 0;i < 10;i++) { *(arr + i) = 9 - i; cout << arr[i] << " "; } 0 1 2 3 4 5 6 7 8 9 Experiments!!! 9 8 7 6 5 4 3 2 1 0 char *str = "ABCDEFGH"; int i = 0; while (*(str + i)) { // <=> *(x+i)!='0' cout << str[i++] << "n"; } Строки – это массивы символов char *str = "ABCDEFGH"; int i = 0; cout << ++str; char *str = "ABCDEFGH"; cout << strlen(str);
  • 39. Небольшой пример со строчками (с) Максименкова О.В., НИУ ВШЭ, ФКН, ДПИ 39 #include <iostream> using namespace std; int main() { char a[][10] = { "foo", "bar", "baz", "quux" }; char *b[] = { "foo","bar", "baz","quux" }; cout << strlen(a[0])<< "n"; cout << strlen(*b); for (int i = 0; i < 10; i++) { cout << a[0][i] << " "; } for (int i = 0; i < 10; i++) { cout << *b[i] << " "; } return 0; } Ошибка при выполнении
  • 40. Многомерные массивы (с) Максименкова О.В., НИУ ВШЭ, ФКН, ДПИ 40 тип имя_массива[К1][K2]...[KN]; массив, элементами которого служат массивы #include <iostream> using namespace std; const int N = 3; const int M = 5; const int K = 7; int main() { int multiArr[N][M][K]; // трёхмерный массив return 0; } К всему прочему, мы можем описать массив указателей
  • 41. (с) Максименкова О.В., НИУ ВШЭ, ФКН, ДПИ 41 #include <iostream> using namespace std; const int N = 3; const int M = 5; const int K = 7; int main() { int multiArr[N][M][K] = {1, 2, 3, 4, 5, 6, 7, 8}; for (int i = 0; i < N; i++) for (int j = 0; j < M; j++) for (int k = 0; k < K; k++) cout << multiArr[i][j][k] << " "; return 0; } int multiArr[N][M][K] = { {1,2,3},{4,5},{6,7,8} }; Что изменится?
  • 42. Многомерные массивы и указатели (с) Максименкова О.В., НИУ ВШЭ, ФКН, ДПИ 42 const int N = 2; const int M = 2; const int K = 2; int multiArr[N][M][K] = { {1,2},{3,4},{5,6}}; int multiArr[N][M][K] = { {1,2},{3,4} }; #include <iostream> using namespace std; const int N = 2; const int M = 2; int main() { int multiArr[N][M] = { {1,2},{3,4} }; cout << *multiArr << "n"; cout << **multiArr << "n"; return 0; } *(*(multiArr + 1)) + 1 **multiArr + 1
  • 43. Массивы и функции (с) Максименкова О.В., НИУ ВШЭ, ФКН, ДПИ 43 #include <iostream> using namespace std; void changeArray(int[]); int main() { int ar[] = { 1,2,3,4 }; cout << *ar << *ar + 1 << *ar + 2 << *ar + 3; cout << "n"; changeArray(ar); cout << ar[0] << ar[1] << ar[2] << ar[3]; cout << "n"; cout << *ar << *ar + 1 << *ar + 2 << *ar + 3; return 0; } void changeArray(int ar[]) { ar[0] = ar[3]; } Передача массива в функцию и немного подозрительного кода
  • 44. Модификация с указателем (с) Максименкова О.В., НИУ ВШЭ, ФКН, ДПИ 44 #include <iostream> using namespace std; void changeArray(int*); int main() { int ar[] = { 1,2,3,4 }; cout << *ar << *(ar + 1) << *(ar + 2) << *(ar + 3); cout << "n"; changeArray(ar); cout << *ar << *(ar + 1) << *(ar + 2) << *(ar + 3); return 0; } void changeArray(int* ar) { ar[0] = ar[3]; }
  • 45. Указатели на функции (с) Максименкова О.В., НИУ ВШЭ, ФКН, ДПИ 45 тип_функции (*имя_указателя) (спецификация_параметров); Дети, этого нельзя понять – это нужно запомнить… Так ли это? int(*operation)(int, int);
  • 46. (с) Максименкова О.В., НИУ ВШЭ, ФКН, ДПИ 46 #include <iostream> using namespace std; int op1(int a, int b) { // сложение целых return a + b; } int op2(int a, int b) { // вычитание целых return a - b; } int calculation(int(*op)(int, int), int op1,int op2) { return (*op)(op1, op2); // вызов функции } int main() { int x = 5, y = 3; int(*operation)(int, int); // указатель на функцию operation = op1; // связь указателя с функцией // передаём в качестве аргумента cout << calculation(operation,x,y); return 0; } Это уже почти целочисленный калькулятор. Допишем его на практических занятиях.
  • 47. Ни слова о драконах (с) Максименкова О.В., НИУ ВШЭ, ФКН, ДПИ 47 тип_функции (*имя_указателя(спец_пар1)) (спецификация_параметров); Здесь действует тоже мнемоническое правило! int(*whatTheOperation()) (int, int);
  • 48. (с) Максименкова О.В., НИУ ВШЭ, ФКН, ДПИ 48 #include <iostream> using namespace std; int op1(int a, int b) { // сложение целых return a + b; } int op2(int a, int b) { // вычитание целых return a - b; } int calculation(int(*op)(int, int), int op1,int op2) { return (*op)(op1, op2); // вызов функции } int(*whatTheOperation()) (int, int) { int(*operation)(int, int); // указатель на функцию operation = op2; return operation; } int main() { int x = 5, y = 3; // передаём в качестве аргумента функцию cout << calculation(whatTheOperation(),x,y); return 0; }
  • 49. Ссылки (с) Максименкова О.В., НИУ ВШЭ, ФКН, ДПИ 49 тип &имя_ссылки int &a; double &b; тип &имя_ссылки = инициализирующее_выражение; тип &имя_ссылки (инициализирующее_выражение); Описание переменной с типом ссылки Формы записи инициализатора int myVar = 123; int &myVarLink = myVar; // сохранили адрес int &myVarLink2(myVar);
  • 50. (с) Максименкова О.В., НИУ ВШЭ, ФКН, ДПИ 50 #include <iostream> using namespace std; int main() { int myVar = 123; int &myVarLink = myVar; // сохранили адрес int &myVarLink2(myVar); cout << &myVarLink << " " << myVarLink << "n"; myVarLink++; cout << myVar << " " << myVarLink << " " << myVarLink2; return 0; }
  • 51. Структуры (с) Максименкова О.В., НИУ ВШЭ, ФКН, ДПИ 51 struct имя_структурного_типа { тип1 поле_структуры1; тип2 поле_структуры2; . . . } имена_объектов; Структуры сегодня потребуются нам на практических занятиях. Tutorial. DataStructures (http://www.cplusplus.com/doc/tutorial/structures/)
  • 52. Доступ к полям структуры (с) Максименкова О.В., НИУ ВШЭ, ФКН, ДПИ 52 По имени объекта По указателю имя_структуры.имя_элемента_структуры имя_указателя -> имя_элемента_структуры (*имя_указателя).имя_элемента_структуры
  • 53. (с) Максименкова О.В., НИУ ВШЭ, ФКН, ДПИ 53 Спасибо за внимание! Максименкова Ольга Вениаминовна Старший преподаватель Департамента программной инженерии, ФКН E-mail: omaksimenkova@hse.ru Blog: Stop To Scale (http://stoptoscale.blogspot.ru)