Алгоритмы и программы. Решение олимпиадных задач

Содержание

Слайд 2

НЕОБХОДИМЫЙ МИНИМУМ Прекрасное владение языком программирования Уверенное знание большого количества алгоритмов

НЕОБХОДИМЫЙ МИНИМУМ

Прекрасное владение языком программирования
Уверенное знание большого количества алгоритмов (уверенно знать

– значит уметь быстро, без подготовки реализовать алгоритм)
Математическая подготовка
Большое количество прорешенных задач
Опыт участия в тренировочных и реальных олимпиадах
Психологическая подготовка
Слайд 3

ЛИТЕРАТУРА Окулов С.М. «Программирование в алгоритмах», 2004 Порублев И.Н., Ставройский А.Б.

ЛИТЕРАТУРА

Окулов С.М. «Программирование в алгоритмах», 2004
Порублев И.Н., Ставройский А.Б.

«Алгоритмы и программы. Решение олимпиадных задач», 2007
Меньшиков Ф.В. «Олимпиадные задачи по программированию», 2006
Андреева Е.В. «Математические основы информатики. Элективный курс», 2012
Шень А. «Программирование. Теоремы и задачи», 2004
Слайд 4

САЙТЫ Учебные курсы www.intuit.ru Коллекция алгоритмов http://e-maxx.ru/algo Международные и всероссийские олимпиады

САЙТЫ

Учебные курсы www.intuit.ru
Коллекция алгоритмов http://e-maxx.ru/algo
Международные и всероссийские олимпиады

по информатике http://info.rusolymp.ru
Сайт школьных олимпиад, проводимых в Приморском крае http://imcs.dvgu.ru/works/school.html
Площадка соревнований по программированию http://codeforces.ru/
Дистанционная подготовка школьников по информатике http://informatics.mccme.ru
Сайт «Школа программиста» Красноярского края http://acmp.ru
Слайд 5

ЯЗЫКИ Конкретный язык не существенен – задачи спортивного программирования успешно решаются

ЯЗЫКИ

Конкретный язык не существенен – задачи спортивного программирования успешно решаются на

любых языках программирования (возможно, за исключением эзотерических).
В рамках занятий задачи будут рассматриваться на языке C++
Слайд 6

ПРАВИЛА ХОРОШЕГО ТОНА Не забывайте о проектировании программ сверху вниз: прежде

ПРАВИЛА ХОРОШЕГО ТОНА

Не забывайте о проектировании программ сверху вниз:

прежде чем приступить к кодированию, вы должны спроектировать программу на достаточном уровне детализации на бумаге.
Не приступайте к кодированию до тех пор, пока не сможете ясно, понятно для любого слушателя рассказать идею решения
Разбивайте программу на отдельные подпрограммы (процедуры и функции). Старайтесь отлаживать каждую функцию по отдельности
Слайд 7

ПРАВИЛА ХОРОШЕГО ТОНА Старайтесь использовать как можно меньше глобальных переменных: процедуры

ПРАВИЛА ХОРОШЕГО ТОНА

Старайтесь использовать как можно меньше глобальных переменных: процедуры и

функции должны быть максимально независимыми
Всегда программируйте «с отступами»
Выбирайте осмысленные имена для переменных, функций и т.д.
Одна строка – один оператор
Не забывайте присваивать переменным начальные значения, даже если компилятор сделает это за вас
Добавляйте комментарии по ходу написания программы
Не пренебрегайте тестированием программы. Помните, что каждая последняя ошибка – есть предпоследняя.
Слайд 8

ОСОБЕННОСТИ РЕШЕНИЯ ОЛИМПИАДНЫХ ЗАДАЧ Программа представляет собой консольное приложение Как правило,

ОСОБЕННОСТИ РЕШЕНИЯ ОЛИМПИАДНЫХ ЗАДАЧ

Программа представляет собой консольное приложение
Как правило,

исходные данные должны считываться из исходного файла и записываться в выходной файл. Все файлы текстовые.
Проверять корректность данных в исходном файле не требуется!
Необходимо тщательно следить за корректностью данных, которые записываются в выходной файл.
Слайд 9

ОСОБЕННОСТИ РЕШЕНИЯ ОЛИМПИАДНЫХ ЗАДАЧ Заданы ограничения на время и на ресурсы

ОСОБЕННОСТИ РЕШЕНИЯ ОЛИМПИАДНЫХ ЗАДАЧ

Заданы ограничения на время и на ресурсы

памяти (программа должна выполняться не дольше предъявленного лимита и не превышать требований к допустимому объему памяти), т.е. необходимо работать над эффективностью программы
Решения проверяются автоматизированной системой по заранее заготовленному большому набору тестов (порядка 30 – 40).
Слайд 10

ТИПЫ ДАННЫХ C++

ТИПЫ ДАННЫХ C++

Слайд 11

ТИПЫ ДАННЫХ C++

ТИПЫ ДАННЫХ C++

Слайд 12

ВВОД/ВЫВОД В КОНСОЛЬ Из языка C: printf scanf Из языка C++: std::cout std::cin>>

ВВОД/ВЫВОД В КОНСОЛЬ

Из языка C:
printf
scanf
Из языка C++:
std::cout<<
std::cin>>

Слайд 13

УСЛОВИЯ if (условие) {} еlse{} switch (парам) { case a: …

УСЛОВИЯ

if (условие)
{}
еlse{}

switch (парам)
{
case a:

break;
case b:

break;
default:
….
break;
}

b=условие?x:y;

Слайд 14

ЦИКЛЫ for – цикл со счетчиком while – цикл с условием

ЦИКЛЫ

for – цикл со счетчиком
while – цикл с условием
do-while – цикл

с постусловием

int a=0;
while (a==1) //ни разу не выполнится
cout<do{ //выполнится один раз
cout<}
while (a==1);

Слайд 15

МАССИВЫ int *a=new int[n]; //динамический – размер можно задать по ходу

МАССИВЫ

int *a=new int[n]; //динамический – размер можно задать по ходу программы
int

b[10]; //статический
int c[10][5]; //статический двумерный
int ** d=new int*[n]; //динамический двумерный
for (int i=0;i d[i]=new int[m];
Слайд 16

ОПЕРАЦИИ + – сложение - – вычитание * – умножение /

ОПЕРАЦИИ

+ – сложение
- – вычитание
* – умножение
/ – деление
% –

остаток от деления
^ – XOR – исключающее ИЛИ
& – И
| – ИЛИ
>> – битовый сдвиг вправо
<< – битовый сдвиг влево
~ – инверсия битов
Слайд 17

ФУНКЦИИ int func (int a, int b){ return a+b; } Функции

ФУНКЦИИ

int func (int a, int b){
return a+b;
}

Функции описываются по порядку их

следования в программе.

int f1 (int a, int b) { //Не заработает
int c=f2(a,b); // f2 тут ещё не объявлена
return c+a+b;
}
int f2 (int a, int b){
return a*b;
}

Слайд 18

ФУНКЦИИ int f2 (int a, int b); int f1 (int a,

ФУНКЦИИ

int f2 (int a, int b);
int f1 (int a, int b)

{ //заработает
int c=f2(a,b);
return c+a+b;
}

int f2 (int a, int b){
return a*b;
}

Прототип – объявление функции с отложенным описанием

Слайд 19

ФАЙЛЫ #include ifstream in; //поток для чтения ofstream out; //поток для

ФАЙЛЫ

#include
ifstream in; //поток для чтения
ofstream out; //поток для записи
string d;
in.open(“file.txt”);
out=new

ofstream (“file2.txt”);
in>>d;
ofstream<