Пупышев В.В 50 задач по началам программирования
Пупышев В.В
50 задач по началам программирования
http://ulm.uni.udm.ru/~pvv/packst/
Введение
Эта книжка – очень сжатый вариант задачника для желающих научиться программировать. Конечно, она не самоучитель, скорее нужна для закрепления, углубления и контроля знаний и умений, полученных от учителя, из учебников или еще каким-нибудь путем.
Задачи не требуют знания какого-то конкретного языка программирования. Их можно решать на том языке, который Вы решили изучить. Задачи также требуют только общих знаний, может, чуть более глубоких по математике.
Задачи, для большей пользы, надо решать подряд. Пропускать можно только задачи повышенной трудности (помеченные звездочкой) лишь в том случае, если решить их Вы не можете.
В каждой задаче приведен пример. Входные и выходные данные примера всегда правильные. Если формулировка задания не ясна до конца. Проанализируйте пример. Во всех примерах показаны входные и выходные данные, но это не значит, что нужно вводить и выводить именно так, как показано. Если способ ввода и вывода не указан, то выбирайте его сами.
Поясним некоторые обозначения. В задачнике встречаются названия задач, начинающиеся латинскими заглавными буквами и цифрами. Эти условные обозначения показывают, когда и на каком соревновании по программированию давалась данная задача. Число после букв указывает год, а буквы обозначают само соревнование. DOI –районные олимпиады школьников Удмуртии. MFOI – олимпиада про программированию Удмуртского государственного университета для поступающих на математический факультет. MARK – студенческая олимпиада, спонсируемая ассоциацией предприятий МАРК. Некоторые части примеров записаны разными шрифтами. Если текст написан таким шрифтом, то этот текст выводится на экран, если таким шрифтом, тот этот текст надо набирать с клавиатуры.
Проверка правильности решения
После того, как для решения задачи придуман алгоритм и готова программа, надо проверить, правильно ли она работает. Для этого очень часто применяется метод тестов. Этот метод используется следующим образом: придумывают входные данные и вычисляют, какие должны быть выходные значения.
Входные данные, правильный ответ и время, через которое программа должна дать ответ, называют тестом. Потом входные данные задаются программе и проверяют, совпадают ли вычисленные ранее выходные значения и результат работы программы. Если программа выдала ответ, такой как было вычислено ранее, не позже заданного времени, то тест считается пройденным. Для большей уверенности нужно придумать несколько тестов и выполнить для них программу. Придумывать тесты для программы надо так, как будто Вы желаете, чтобы программа не смогла их пойти.
Этот способ не даёт полной гарантии того, что программа работает правильно. Не существует способа проверить любую программу лучше, чем хорошо подобранным набором тестов.
В этом задачнике для каждой задачи уже есть набор тестов. Но не спешите проверять программу сразу, как только её написали, на этих тестах.
Проверять решение нужно так:
0. Придумайте несколько (не меньше трёх) тестов для Вашей программы.
1. В каждой задаче есть пример. Проверьте, правильно ли работает Ваша программа на этом примере. Если пример не пройден то, нужно исправить ошибки в программе или алгоритме[1]. И вернуться к пункту 1. Только после того, как программа пройдет пример, можно идти дальше.
2. Проверьте программу на тестах из пункта 0. Если программа прошла не все тесты, исправьте программу или алгоритм и вернитесь к пункту 1. Если удалось пройти все тесты, то переходите к пункту 3.
3. Теперь нужно открыть тесты в конце книги. Проверять программу тестами нужно обязательно подряд, начиная с первого. Проверять нужно до тех пор, пока программа проходит тесты. Но как только программа тест не прошла, необходимо вернуться к пункту 1. Если программа прошла все тесты, то эту задачу Вы сделали полностью и можно переходить к следующей.
Более 800 000 книг и аудиокниг! 📚
Получи 2 месяца Литрес Подписки в подарок и наслаждайся неограниченным чтением
ПОЛУЧИТЬ ПОДАРОКЧитайте также
V Красота программирования
V Красота программирования Не знаю, как описать мою любовь к программированию, но я попробую. Если этим занимаешься, кажется, что в мире нет ничего интереснее. Эта игра гораздо увлекательнее шахмат, игра, в которой можно устанавливать собственные правила и где конечный
Додзё программирования
Додзё программирования С 2001 года я провожу демонстрацию TDD, которую я называю «игрой в кегли[27]». Это маленькое упражнение занимает около 30 минут. Оно выявляет конфликт в архитектуре, развивается до кульминационной точки и преподносит сюрприз напоследок. Я написал целую
Язык программирования PHP
Язык программирования PHP PHP, в настоящее время, – один из наиболее популярных языков для реализации веб-приложений. Данный курс посвящен изучению его основ. Акцент делается на практическое применение полученных навыков.Язык PHP был создан для решения конкретной
1.10 Элементы программирования оболочки
1.10 Элементы программирования оболочки В предыдущих главах мы рассматривали язык оболочки с точки зрения, в основном, непосредственного исполнения вводимых команд. Теперь взглянем на него под другим углом: как на универсальный язык программирования, а на оболочку — как
1. Системы программирования
1. Системы программирования Машинно-ориентированные языки являются машинно-зависимым языком программирования. Основные конструктивные средства подобных языков дают возможность учитывать особенности архитектуры и принципов работы каждой ЭВМ.Они позволяют записывать
56. Язык программирования VВА
56. Язык программирования VВА Алфавит и лексемы языкаЯзык программирования VBA предназначен для написания кода программы. Он обладает своим алфавитом, который включает:1) строчные и прописные буквы латинского алфавита (А, В,…, Z, а, b,…, z);2) строчные и прописные буквы
14 Языки программирования: С или не С?
14 Языки программирования: С или не С? Границы моего языка — границы моего мира. Логико-философский трактат (Tractatus Logico-Philosophicus 5.6,1918) —Людвиг Виттгенштейн (Ludwig Wittgenstein). 14.1. Многообразие языков в Unix В Unix поддерживается более широкий по сравнению с любой другой операционной
14 Языки программирования: С или не С?
14 Языки программирования: С или не С? Границы моего языка — границы моего мира. Логико-философский трактат (Tractatus Logico-Philosophicus 5.6, 1918) —Людвиг Виттгенштейн (Ludwig Wittgenstein). 14.1. Многообразие языков в Unix В Unix поддерживается более широкий по сравнению с любой другой операционной
1.5.2. Перспективы программирования
1.5.2. Перспективы программирования Наверное, каждый, кто знает Ruby (сегодня), в прошлом изучал или пользовался другими языками. Это, с одной стороны, облегчает изучение Ruby, так как многие средства похожи на аналогичные средства в других языках. С другой стороны, у
Классы для программирования графики
Классы для программирования графики Программирование графики в .NET Compact Framework опирается на те же базовые приемы, что и работа с графикой для полной версии .NET Framework. Все основные классы для работы с графикой сосредоточены в пространстве имен System.Drawing. С помощью этих классов
Особенности программирования для смартфонов
Особенности программирования для смартфонов В этой главе мы научимся создавать приложения для смартфонов под управлением системы Windows Mobile 5.0. Так получилось, что в России смартфоны под управлением Smartphone 2003 поначалу не получили широкого признания. Признанными лидерами
Глава 32. Стиль программирования
Глава 32. Стиль программирования Возьмите в привычку структурный и систематический подход к программированию на языке командной оболочки. Даже для сценариев "выходного дня" и "писаных на коленке", не поленитесь, найдите время для того, чтобы разложить свои мысли по
8.3. Стиль программирования
8.3. Стиль программирования Подчиняться при программировании некоторым стилистическим соглашениям нужно для того, чтобы• уменьшить опасность внесения ошибок в программы и• создавать программы, которые легко читать, понимать, отлаживать и модифицировать.Ниже дается
У3.1 Модульность в языках программирования
У3.1 Модульность в языках программирования Рассмотрите модульные структуры в любом хорошо знакомом вам языке программирования и оцените, насколько они удовлетворяют критериям и принципам, изложенным в этой
3.9. ПОДХОДЫ ИССЛЕДОВАТЕЛЬСКОГО ПРОГРАММИРОВАНИЯ
3.9. ПОДХОДЫ ИССЛЕДОВАТЕЛЬСКОГО ПРОГРАММИРОВАНИЯ Исследовательское программирование имеет следующие особенности (http://www.osp.ru/pcworld/2001/01/062.htm):— разработчик ясно представляет направление поиска, но не знает заранее, как далеко он сможет продвинуться к цели;— нет