Метапрограммирование в C++11/14 и C++17. Новые инструменты - новые проблемы.Roman Orlov
В докладе будут затронуты принципиальные вопросы — зачем нам программировать на шаблонах, как мы это делаем в C++11/14 и как будем это делать в C++17. Проведем параллель с функциональными языками (привет Haskell!). На примере реального кода разберем fold-expressions и увидим, чем опасен constexpr-if. А также взглянем на метапрограммирование в стиле C++11/14 и C++17 глазами компилятора.
Обобщенное программирование в C++ или как сделать свою жизнь проще через стра...corehard_by
Обобщенное программирование - это подход к программированию, когда алгоритм пишется без указания конкретных типов данных. Используя данный подход можно значительно увеличить количество повторно используемого кода. В C++ данный подход реализуется за счет механизма шаблонов. В данном докладе рассмотрим некоторые возможности по обобщенному программированию, которые предоставляет C++. На конкретных примерах рассмотрим, как они могут упростить нам жизнь и с какими трудностями приходится сталкиваться при их использовании.
Метапрограммирование в C++11/14 и C++17. Новые инструменты - новые проблемы.Roman Orlov
В докладе будут затронуты принципиальные вопросы — зачем нам программировать на шаблонах, как мы это делаем в C++11/14 и как будем это делать в C++17. Проведем параллель с функциональными языками (привет Haskell!). На примере реального кода разберем fold-expressions и увидим, чем опасен constexpr-if. А также взглянем на метапрограммирование в стиле C++11/14 и C++17 глазами компилятора.
Обобщенное программирование в C++ или как сделать свою жизнь проще через стра...corehard_by
Обобщенное программирование - это подход к программированию, когда алгоритм пишется без указания конкретных типов данных. Используя данный подход можно значительно увеличить количество повторно используемого кода. В C++ данный подход реализуется за счет механизма шаблонов. В данном докладе рассмотрим некоторые возможности по обобщенному программированию, которые предоставляет C++. На конкретных примерах рассмотрим, как они могут упростить нам жизнь и с какими трудностями приходится сталкиваться при их использовании.
Дается математическое обоснование S.O.L.I.D принципов с помощью логики Хоара, из которого следует, что S.O.L.I.D верны не только для ООП, но и для статического полиморфизма, но и для императивного программирования вообще.
Техносфера Mail.ru Group, МГУ им. М.В. Ломоносова. Курс "Алгоритмы интеллектуальной обработки больших объемов данных", Лекция №10 "Алгоритмические композиции. Завершение"
Лектор - Владимир Гулин
Ключевые идеи бустинга. Отличия бустинга и бэггинга. Алгорим AdaBoost. Градиентный бустинг. Мета-алгоритмы над алгоритмическими композициями. Алгоритм BagBoo.
Видео лекции курса https://www.youtube.com/playlist?list=PLrCZzMib1e9pyyrqknouMZbIPf4l3CwUP
2. Присваивание – это занесение значение в память.
В общем виде оператор присваивания записывается
так:
переменная := выражение
Здесь символами := обозначена операция
присваивания.
Механизм выполнения оператора присваивания
такой: вычисляется выражение, и его результат
заносится в память по адресу, который определяется
именем переменной находящейся слева от знака
операции.
переменная выражение
3. Примеры операторов присваивания:
A := b + c/2;
b := a;
a := b;
X := 1;
X := x + 0.5;
Обратите внимание: b := а и а := b – это совершенно
разные действия.
4. Правая и левая части оператора присваивания
должны быть, как правило, одного типа.
Говоря точно они должны быть совместимы по
присваиванию. Например, выражение целого типа
можно присвоить вещественной переменной, потому
что целые числа являются подмножеством
вещественных, и информация при таком присваивании
не теряется.
Вещественная переменная := целое выражение;
5. По заданной длине окружности L найти площадь
круга S, ограниченного этой окружностью. Длина
окружности вычисляется по формуле:
L = 2 * Pi * R
Площадь круга вычисляется по формуле:
S = Pi * R2
Данные взять из контрольного примера.
Контрольный пример: L=6. Результат:
S=2.866242.
9. Наименов Обознач
ание
ение
Функция
Терминатор
(пускостановка)
Элемент отображает вход из внешней среды или выход из нее
(наиболее частое применение − начало и конец программы).
Внутри фигуры записывается соответствующее действие.
Блок
вычислений
(вычислител
ьный блок)
Выполнение одной или нескольких операций, обработка данных
любого вида (изменение значения данных, формы представления,
расположения). Внутри фигуры записывают непосредственно
сами операции, например, операцию присваивания: a = 10*b + c.
Логический
блок (блок
условия)
Отображает решение или функцию переключательного типа с
одним входом и двумя или более альтернативными выходами, из
которых только один может быть выбран после вычисления
условий, определенных внутри этого элемента. Вход в элемент
обозначается линией, входящей обычно в верхнюю вершину
элемента. Если выходов два или три то обычно каждый выход
обозначается линией, выходящей из оставшихся вершин (боковых
и нижней). Если выходов больше трех, то их следует показывать
одной линией, выходящей из вершины (чаще нижней) элемента,
которая затем разветвляется.
10. Наименов Обознач
ание
ение
Функция
Предопреде
ленный
процесс
Символ отображает выполнение процесса, состоящего из одной
или нескольких операций, который определен в другом месте
программы (в подпрограмме, модуле). Внутри символа
записывается название процесса и передаваемые в него данные.
Например, в программировании − вызов процедуры или функции.
Данные
(вводвывод)
Преобразование данных в форму, пригодную для обработки (ввод)
или отображения результатов обработки (вывод). Данный символ
не определяет носителя данных (для указания типа носителя
данных используются специфические символы).
Граница
цикла
Символ состоит из двух частей − соответственно, начало и конец
цикла − операции, выполняемые внутри цикла, размещаются
между ними. Условия цикла и приращения записываются внутри
символа начала или конца цикла − в зависимости от типа
организации цикла. Часто для изображения на блок-схеме цикла
вместо данного символа используют символ решения, указывая в
нем условие, а одну из линий выхода замыкают выше в блоксхеме (перед операциями цикла).
11. Математическая операция
Операция в Паскале
X=Y2
X:=sqr(Y);
X= Y
X:=sqrt(Y);
X=|Y|
X:=abs(Y);
X=sin Y
X:=sin(Y);
X=cos Y
X:=cos(Y);
X=ey
X:=exp(Y);
X=lnY
X:=ln(Y);
Важно помнить про тип переменной, а именно результат квадратного
корня, деления чаще всего будет дробным числом, следовательно
присвоить данное выражение можно только вещественным переменным.
12. Вычислить объем пирамиды, основанием которой является
треугольник, для значений А, В, С и Н данных в контрольном
примере. Для вычисления площади основания использовать формулу
Герона:
S = P ( P − A)( P − B )( P − C )
где:
A+ B +C
P=
2
Объем пирамиды:
SH
V=
3
Исходные данные взять из контрольного примера.
Контрольный пример: A=3, B=4, C=5, H=6. Результат V=12.
14. По заданным величинам радиусов оснований R и r и
высоты h найти объем и площадь поверхности
усеченного конуса по формулам:
πh 2 2
V = ( R + r + Rr )
3
S = πl ( R + r ) + π ( R 2 + r 2 )
l = h2 + (R − r)2
Исходные данные взять из контрольного примера.
Контрольный пример: R=20, r=10, h=30.
Результат: S=4548.866, V=21980.
16. Что такое оператор присваивания.
Как использовать оператор присваивания.
Что такое структура следования программы.
Что такое блок схема.
Обозначения в блок-схемах.
Дополнительные операции с переменными.
Научились писать программы со структурой следования.