Этот блог посвящён олимпиадному программированию.Если вы хотите узнать, что это такое и с чем его едят - милости просим.Если вы хотите чему-то научиться, что-то дополнить - добро пожаловать!
В данном блоге я буду стараться рассказать про особенности спортивного программирования.Также расскажу о различных типах задач и, конечно, алгоритмах.
В данном блоге я буду стараться рассказать про особенности спортивного программирования.Также расскажу о различных типах задач и, конечно, алгоритмах.
Структура программы, ввод\вывод и много чего ещё
Запись от ZaMaZaN4iK размещена 26.05.2013 в 22:45
Показов 6848
Комментарии 5
|
Ну, надо начинать что-либо более близкое к практике.Для начала я хотел бы рассказать про построение программы, ввод\вывод данных, перенаправление ввода и выода в файлы, типы используемых переменных и отладку программ. Сделаю ещё раз оговорку - все исходники будут только на С++. Что ж, как надо структурировать программу? В спортивном программировании принято делать так: В начале исходника подключаются все необходимые библиотеки(стандартный набор и опциональные), обьявляют пространство имен std,потом все переменные и массивы обьявляют глобально, затем пишут функции-заготовки, и в конце-концов пишут main(). Как всё это выглядит:
using namespace std используется для удобства, чтобы каждый раз не писать std:: Всё разбито на функции для лучшего понимания кода(а то бывает, напишешь, а потом сидишь, думаешь - где и что) В функции prepare() я задаю всем переменным какие либо значения.В input() ввожу все необходимые данные. Ans() это функция решения задачи, ну а output() выводит ответ.А потом всё это вызывается поочередно в main() и всё. Такое структурирование исходника очень удобно.Рекомендую к нему привыкнуть. Теперь поговорим про ввод\вывод. В С++ принято использовать cin и cout.Но в спортивном программировании их использование нежелательно, так как они работают довольно медленно.А вместо них используют функции ввода\вывода языка Си - scanf и printf и иже с ними.С этими функциями немного труднее работать, но они работают значительно быстрее, чем функции потокового ввода\вывода.Давайте с ними познакомимся. Функции ввода. scanf() - функция ввода.Читает значения из стандартного потока и записывает их в переменные.Если ввод невозможен, возвращает EOF(end of file).Функцию следует использовать так:
Для каждого типа существует свой идентификатор для переменной.Вот таблица для этих типов: %c Читает один символ %d Читает десятичное целое %i Читает целое в любом формате (десятичное, восьмеричное или шестнадцатеричное) %e Читает число с плавающей точкой %f Читает число с плавающей точкой %lf Читает число с плавающей точкой(сохраняет в double) %o Читает восьмеричное число %s Читает строку %x Читает шестнадцатеричное число %p Читает указатель %n Принимает целое значение, равное количеству прочитанных до сих пор символов %u Читает десятичное целое без знака %% Читает знак процента %I64d Читает 64-битное число Эту таблицу надо выучить. С этой функцией надо быть очень аккуратными.Если что -то забудете написать, то весь ввод пойдет насмарку. getchar() - функция, возвращающая код прочитанного символа, если ввод неудачен, до возвращает EOF. Ввод заканчивается при получении функцией символа '\n'(Enter). Тоже очень удобная функция.Рекомендую её запомнить. С выводом всё очень просто, если вы усвоили ввод.вывод осуществляется при помощи функций printf() и putchar(). printf() используется также, как и scanf(), только передавать аргументы нужно без &, иначе он напечатает не то, что вы хотели.А putchar() используйте как getchar(). С вводом и выводом разобрались.А как же вводить и выводить данные из и в файлы?Можно конечно использовать файловый ввод\вывод, открывать файловый поток, потом его закрывать,но это всё немного дольше писать, да и работает оно всё медленно.А используется для наших целей замечательная функция freopen(). Пример использования:
Что касается типа переменных.Рекомендуется везде использовать long long(он же int64).Не будем боятся всяких переполнений.Место под массив лучше сразу резервировать+ ещё пару элементов, чтобы случайно не вышли за границу массива.И только в случаях крайней нехватки памяти используйте типы меньшего размера. Ну вот, по плану только осталась отладка.На олимпиадах пишут во многих средах - MSVS 2010, CodeBlocks, Dev-C++.В студии обычно писать не дают, а отладчик там очень хороший.Codeblocks чаще появляется, но в нем компилятор настроить немного сложновато, поэтому я выбрал для себя и постоянно на олимпиадах пишу в Dev-C++.Но хочу огорчить Вас - в Дэве нет отладчика.Поэтому всё приходится делать ручками. И вот тут нам пригодится структура нашей программы.Если программа не работает, то комментим все функции, кроме одной, и проверяем её.Не нашли ошибок - проверяем следующую, и так далее.да, в Дэве отладка программ - это сущий ад, но ничего не поделаешь - зато IDE мало весит, не требовательна к ресурсам машинки(а иногда на таких корчах пишут олимпиаду, что удивляешься, как он работает вообще).Точки останова - system("pause"), вывод переменных сами пишем, и вот так продолжаем до победного конца. Надеюсь, информация Вам пригодится.И удачи! | |||||||||||||||
Размещено в Без категории
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Всего комментариев 5
Комментарии
-
и тут остапа понеслоЗапись от Jupiter размещена 26.05.2013 в 23:15
-
Запись от ZaMaZaN4iK размещена 27.05.2013 в 02:07
-
Запись от dr.curse размещена 05.06.2013 в 18:51
-
Запись от ZaMaZaN4iK размещена 08.06.2013 в 19:59
-
Запись от dr.curse размещена 08.06.2013 в 20:09


