О сайте

На сайте "Решение задач по программированию. Языки Pascal, Basic, КуМир, C, Python" опубликованы задачи по структурному программированию с пояснением к ним и решением на указанных языках программирования.

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

Сайт представляет собой сборник задач, отсортированных по темам и уровням сложности.

Владельцем ресурса, автором поясняющего текста, составителем части алгоритмов решения задач является Шапошникова Светлана Вячеславовна (plustilino). Большинство задач по программированию в школьном курсе решается относительно стандартными и известными способами.

Авторами комментариев являются авторы комментариев.

Использование материалов сайта разрешено при условии указания ссылки на данный ресурс.

Об используемых языках программирования

Выбор языков программирования для решения задач обусловлен их популярностью в образовательных учреждениях, использованием в ГИА и ЕГЭ. 

Каждый язык программирования может существовать в различных версиях и диалектах. Также могут использоваться различные среды программирования. При решении задач мы использовали следующие языки/среды/компиляторы:

  • FreePascal,
  • Basic-256,
  • С (компилятор gcc) в GNU/Linux,
  • КуМир последних версий,
  • Python версии 3.x.

Ниже несколько слов об этих языках. Изложены не только факты, но и выражено наше мнение об уместности, последовательности их изучения, возрасте обучающихся. Возможно наше мнение не совпадет с чьим-то, но мы основываемся не только на логических рассуждениях, но и собственном опыте обучения программированию.

Языки программирования Basic-256 и тот, что "живет" в среде КуМир (вероятно тот самый "школьный алгоритмический") - это исключительно учебные языки, поставляемые с удобными средами программирования. Установив одно приложение, вы получаете полноценную среду программирования, в котором пишете программу, нажимаете кнопку и тут же видите результат исполнения программы. Кроме того, обе среды (Basic-256 и КуМир) содержат встроенную возможность программирования графики, что дает простор для разнообразного обучения программированию и преподаванию в более младшем школьном возрасте.

Однако поскольку оба языка учебные, они имеют ряд ограничений. Например, ни в том ни в другом нет возможности форматированного вывода. В КуМир отсутствуют битовые операции. Кроме того сам синтаксис языков не совсем удобен. Только ленивый не ругал Basic в том числе и из-за неочевидности конструкций. В КуМир же постоянно приходится переключаться с русской раскладки на английскую и обратно. На наш взгляд использование русских команд в сокращенной форме слов также теряет очевидность для детей, как и английские команды. То есть выигрыш в облегчении при знакомстве с конструкциями структурного программирования минимален.

На наш взгляд Basic-256 можно использовать при преподавании программирования в 5-7 классах, т. к. язык достаточно прост в синтаксисе (не надо писать никаких лишних скобок и слов), в нем только два простых типа данных - числа и строки. Данный язык хорош, чтобы познакомить с такими понятиями как логические выражения, ветвления в программе, циклы, массивы, развить логическое мышление и творческие способности, разнообразить кругозор, дать представление о том, что такое программирование. Писать на Basic решения более-менее сложных алгоритмов неудобно, да и не нужно в этом возрасте.

Несмотря на то, что Pascal позиционируется также как учебный язык, он в отличие от Basic и КуМир более соответствует практическим языкам. При этом его большим плюсом для обучения является отсутствие всего лишнего, что ненадобно при изучении алгоритмики (структурного программирования). Т.е. никакие специфические особенности языка не будет отвлекать (ну если не считать нагромождений begin-end, уменьшающих читабельность программы). Паскаль позволяет изучать программирование шаг за шагом, а не погружаться сразу в несколько парадигм.

На наш взгляд Pascal хорош как первый язык программирования, если знакомство с программированием начинается в 8-10 классах. В этом возрасте обучающиеся уже знакомы с различными типами чисел и операциями над ними, более внимательны к деталям (не забудут про точку с запятой), способны понять более сложные и объемные конструкции. Если вы планируете не ограничиваться только ветвлениями и циклами, а также требуется изучить подпрограммы, структуры данных (записи) и ООП, то вам не нужно смотреть в сторону Basic (даже если что-то и есть там), изучайте Pascal.

Язык C (Си) - это практический язык в том смысле, что его используют в профессиональном программировании. Он адаптирован для решения конкретных задач, а не для обучения. В языке Си существует много специфических особенностей, часто связанных с тем, что язык не является в полном смысле высокоуровневым. Большое место в Си занимают указатели и ссылки. Поэтому изучать Си и при этом оставлять без внимания ссылочный механизм, это значит не изучать Си, а просто использовать его для преподавания алгоритмики. Понять, что такое указатели, как хранятся данные в памяти компьютера и др. способен далеко не каждый старшеклассник. Поэтому мы бы рекомендовали язык Си для изучения только в старшем школьном возрасте, если знакомство с программированием произошло ранее с использованием другого (какого-либо учебного) языка.

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

Особенности Python позволяют использовать его и для обучения структурному программированию, и для обучения ООП, и для изучения создания программ с графическим интерфейсом, и для изучения Web-программирования и многого другого. На основе Python уместно разрабатывать последовательные курсы по программированию. Например, в первый год вы изучаете структурное программирование на Python, на втором - ООП, на третьем - создание GUI, на четвертом - рассматриваете возможности различных библиотек (т.е. осознаете сферы применения программирования).

В странах Запада и США популярна детская среда программирования Scratch, для более старшего возраста часто используется язык Java. Данный выбор становится понятен, если учесть, что в этих странах образование преимущественно сводится к обучению тому, что имеет непосредственное практическое значение.

Об уровнях сложности задач

На данном сайте мы условно относим любую задачу к одному из трех уровней сложности (простому, среднему и сложному) и понимаем под этим следующее.

Простая задача не содержит в себе сложной логики и не предполагает знаний по математике и другим предметам, которые изучаются примерно с 8-го класса. Поэтому простые задачи доступны для понимания обучающимся 5-7 классов, либо для того, чтобы они стали понятны, требуется минимум пояснений.

Задача средней сложности может содержать в себе более сложную логику, т. е. вложенные конструкции (условие в цикле, вложенный цикл), функции, сложные выражения и др. Также если задача требует от обучающегося знаний по математике и другим предметам, которые изучаются в 7-8 классе и старше, то даже если ее логика проста, она также будет отнесена к задачам средней сложности. Отсюда не следует, что средние задачи не предназначены для 5-7 классов. Однако для их решения скорее всего потребуются дополнительные разъяснения, более детальный разбор алгоритма решения.

Сложные задачи предполагают неоднозначный алгоритм решения, сложные логические конструкции, относительно длинный код программы. Это задачи близкие по сложности к олимпиадным и к задачам C3-C4 ЕГЭ по информатике, а также все виды сортировок.

Темы, их содержание и последовательность

На сайте задачи отсортированы по темам. Последовательность тем имеет значение. В последующих темах могут использоваться конструкции предыдущих, обратное не верно (за некоторыми исключениями), т. е. в предыдущих темах не могут использоваться инструкции последующих. Например, тема "Циклы" может содержать задачи, в которых помимо циклов используется инструкция ветвления, однако тема "Ветвления" не может содержать задачи, для решения которых необходимо использовать циклы.

Предполагается, что при изучении программирования после знакомства с теоретическим материалом следует решить ряд задач, чтобы закрепить тему. Обучающийся при этом еще ничего не знает об инструкциях, выражениях и данных, изучаемых в следующих темах. В различных курсах и учебниках последовательность тем может отличаться. В данном случае принята такая:

  1. Линейные алгоритмы
  2. Ветвления
  3. Циклы
  4. Вложенные циклы
  5. Массивы (списки)
  6. Матрицы
  7. Строки
  8. Структуры данных (записи, словари)
  9. Функции
  10. Файлы