Задачник по программированию: 28 cайтов, на которых можно порешать задачи по программированию

Содержание

28 cайтов, на которых можно порешать задачи по программированию

Не секрет, что лучший способ повысить свои навыки в программировании — это практиковаться и только практиковаться. Мы подготовили для вас огромную подборку сайтов с задачами по программированию на самые разные темы.

Также можете попытаться решить самые заковыристые логические задачи с собеседований.

Codeforces — несомненно самая популярная и известная платформа во всем мире для проведения соревнований на алгоритмику. Кроме крупных контестов сайт зачастую проводит свои «раунды» — участникам даются 5 задач на два часа. Есть система рейтинга, на основе которой участники делятся на два дивизиона. Таким образом, профи не соревнуются с новичками напрямую. Все задачи можно сдать и проверить даже после соревнований. Кроме «раундов» доступны и «тренировки» — задачи с прошедших соревнований публикуются в режиме дорешивания.


 

TopCoder — ненамного отстающая по популярности от Codeforces американская платформа.

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


Timus Online Judge — русскоязычная (хотя английский язык также поддерживается) платформа, на которой более тысячи задач удачно отсортированы по темам и по сложности. Также тут регулярно проводятся контесты уральского региона, которые, впрочем, не представляют для вас ничего интересного, если только вы не студент УрФУ или другого близлежащего вуза 🙂


SPOJ — крупный англоязычный сайт с более чем 20000 задачами на абсолютно разные темы: динамическое программирование, графы, структуры данных и т.д. Изредка проводит контесты, которые не представляют интереса, если вы не живете в странах их проведения.


informatics.mccme.ru — платформа с множеством теоретических материалов и задач по соответствующим темам. Все очень удобно собрано по категориям и темам. Также содержит большую базу задач с прошедших олимпиад школьников.


CodeChef — менее крупный аналог Codeforces и TopCoder, тоже с огромным архивом задач и регулярными контестами.


 

acmp.ru — сайт, который будет полезен всем благодаря своему архиву задач, удобно (и по большей части правильно) отсортированному по сложности и темам. Соревнования проводятся, но участвовать в них имеет смысл только школьникам Красноярского края, для которых эта платформа изначально и предназначалась.


Project Euler — сборник 500 задач, которые невозможно решить без знаний математических и геометрических алгоритмов. Иногда используется на собеседованиях для приема на работу, чтобы лучше выяснить алгоритмическую подготовку претендента.


Kaggle — данная платформа отличается от описанных ранее тем, что тут не проводится алгоритмических соревнований — только задачи на исследование (как в марафонах на вышеприведенном TopCoder). Например, одна из задач, на которой сейчас там проверяют свои умения участники, состоит в распознании написанных вручную цифр. Вот несколько символов, для которых это не так просто, как кажется (прим. авт. — некоторые из них я не смог распознать даже не программно):


CodinGame — сайт, на котором программирование и видеоигры сливаются в единое целое. Здесь вы найдете большую коллекцию задач на программирование, оформленных в виде видеоигр. Также тут изредка (раз в два месяца) проводятся контесты, содержащие в себе задачи на оптимизацию и ИИ, победители которых получают ценные призы. А если вы решите много задач, то на вас могут обратить внимание компании, которые набирают на этом сайте работников!


 

CodeCombat будет больше полезен для новичков. Эта платформа наглядно демонстрирует, что обучение программированию — это не так сложно и скучно, как может показаться. Сайт представлен в виде игры, которая разделена на несколько частей, возрастающих по сложности. В каждой части содержится множество задач на те или иные темы, призванные научить программированию с нуля любого человека. Если вы давно мечтали заняться программированием, но никак не находили в себе, обязательно обратите внимание на этот сайт.


HackerRank наоборот будет больше интересен профессионалам, которые уже многое умеют. На этом сайте собрано множество задач на самые разные разделы Computer Science: традиционная алгоритмика, ИИ, машинное обучение и т.д. Если вы решите много задач, то вами могут заинтересоваться работодатели, регуляторно мониторящие эту платформу.


C Puzzles — подборка головоломок, специфичный для языка С, со всеми его причудами. Например, дан код, который, по логике, не должен работать, но, тем не менее, он компилируется и даже правильно выполняет свою задачу. Надо понять, почему так? На этой сайте вы сможете приобрести навык отладки программ и чтения кода других.


Codewars — cборник задач на разные темы, от алгоритмов до шаблонов проектирования.


LeetCode — сайт с задачами для подготовки к собеседованиям.


Programming Praxis — блог, включающий в себя много интересных задач.


PythonChallange — сайт с загадками, возрастающими по сложности. Для их решения необходимо написать программу на Python.


Al Zimmermann’s Programming Contests — платформа, на которой раз в полгода проводятся контесты с задачами на исследование и оптимизацию. Интересен тем, что писать программу необязательно — даются только тестовые данные. Ответы можно расчитывать вручную, или просто гадать их на кофейной гуще.


Ruby Quiz — подборка задач для программистов на Ruby, но решения можно писать и на других языках.


Prolog Problems — аналогично с Ruby Quiz. Подборка задач для программистов, использующих Prolog.


MindCipher — сборник занимательных математических и логических задач (в том числе и по программированию).


Сборник задач для практики от СppStudio. Рекомендуется решать на С++, но можно и на других языках.


CheckIO — сайт с задачами для программистов всех уровней, оформленный в виде игры.


E-olimp — украинская тестирующая система с большим архивом задач.


Empire of Code — сайт для программистов, где необходимо писать код, реализующий стратегию и тактику виртуальных бойцов.


Operation Go — практика написания кода на Go в игровой форме.


Russian AI Cup — ежегодный контест от mail.ru по разработке ИИ. Участвовать могут все — от школьников до профессионалов. Победителям и призерам так же полагаются крутые призы. Обязательно примите участие, если вы заинтересованы этой темой.


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

Сложные простые задачи по программированию

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

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

В организации практических заданий существует две крайности. Первая — давать задания, которые решаются почти точным повторением кода из теории урока. Вторая — давать задания, которые требуют глубокого самостоятельного погружения в тему. Эти две крайности сами по себе встречаются редко, как правило конкретное задание находится где-то между. В одних школах ближе к одному краю, в других — к другому. Какой подход лучше? Где баланс?

У программирования есть одна отличительная черта, которая выделяет его среди привычных нам областей деятельности. Возьмём для примера повара. Хорошие повара много знают про продукты, про способы приготовления, хранения, про обеспечение нужных условий (гигиена, санитарные правила). Они эффективно орудуют ножом и выполняют любое действие во много раз быстрее, чем мы с вами. При этом большинство поваров — люди, которые используют готовые рецепты для приготовления чего-либо. И лишь небольшая их часть способна создавать новые блюда самостоятельно. Да и потребности в этом мало.

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


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

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

Читайте также: DevOps — что это такое и почему эти практики меняют мир разработки уже сейчас

В реальной жизни программист большую часть времени делает четыре вещи (если говорить только про кодинг):

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

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

Почему же тогда такой способ довольно популярен? Хотя бы потому, что такое обучение легче продать и так проще удерживать людей (до определённого момента). Пользователи сами подсознательно ожидают, что им всё разжуют, ведь они заплатили деньги (и переубеждать их себе дороже, проще сразу дать ответ на все вопросы).

Другая крайность гораздо ближе к реальной жизни. Сложные задания заставляют разобраться в теме, почитать дополнительную литературу, перепробовать разные алгоритмы решения, ошибиться и в конце концов добиться результата. Но на таких заданиях значительная часть людей потеряет мотивацию и просто уйдёт туда, где проще. Кто-то вообще разочаруется в себе и подумает, что не способен стать программистом. Поэтому слишком сложные задачи почти так же плохи как и простые.

Вспомните школьных учителей. Кто дал больше всех знаний? Как отразилась строгость преподавателя на качестве вашей подготовки?

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

Главный вывод, который мы сделали: уровень самостоятельности нужно поднимать постепенно (это не то же самое, что уровень сложности). Идеально, если начальное обучение построено максимально просто, в духе «повторяй за мной». Это придаст уверенности и заложит базу. На этом уровне идёт фокус на структуре и синтаксисе. Именно поэтому для совсем новичков мы сделали отдельный проект https://ru.code-basics.com. Короткие уроки, в каждом из которых даётся ровно одна мысль. Например, только вызову функций на бейзиксе посвящёно больше 6 уроков. Для человека, который только начал учить программирование, вызов f(10) и f(x + 5) — абсолютно разные вещи, которые нужно объяснять последовательно, давая возможность как можно чаще пробовать набирать простой код.

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

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

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


Прямо сейчас эта идея полностью реализована в профессии PHP-программист. В JavaScript профессиях обновление произойдёт на днях. UPD: Профессии JavaScript уже обновили.

Этот подход базируется на нескольких важных предположениях:

  • У студента есть уровень мотивации стать профессиональным разработчиком. Так получается, что далеко не каждый человек, который решил стать программистом, хочет стать по-настоящему классным специалистом. Иногда мотивация — это просто деньги за способность делать хотя бы самую простую работу. В таком случае наши курсы могут оказаться слишком сложными для таких людей.
  • В такой парадигме невозможно учиться целиком самостоятельно (если получается, значит для вас эти курсы бесполезны). Всегда будут ситуации, когда придётся задать вопрос. Задавать вопросы — это нормально. Если они есть, значит процесс идет. Если обучение проходит без вопросов и «всё понятно», значит это плохое обучение. Вспомните школу и университет. Можно ли их пройти, не задавая вопросов? И проблема не в том, как преподают (это тоже проблема, но другая), — мозг НЕ учится там, где всё понятно.
  • Периодически будут встречаться задания, которые решить не получится. Не потому, что они сложные. Практика показывает, что у разных людей возникают сложности в совершенно разных местах и формах. Что одному сложно, то другой щёлкает, как орехи.
  • Каждое новое упражнение, в идеале, базируется на теории, полученной во всех предыдущих уроках. Это правило становится строже ближе к концу обучения.

Наша генеральная цель, помимо конкретных знаний, научить студента самостоятельно справляться с трудностями: гуглить, читать документацию, отлаживать (это целое искусство), смотреть исходники, анализировать тесты. Всё отражается на том, как мы структурируем практику и работаем с пользователями в комьюнити. Менторы Хекслета крайне редко дают прямой ответ на вопрос, так как это не помощь, а наоборот, вред для студента (хотя многие этого не понимают — опять же следствие отношения к школе, как к сервису). Это, кстати, не так просто, многие ожидают прямых ответов и очень раздражаются, когда с ними говорят «загадками». Единственный способ, который может это изменить – подобные статьи, которые объясняют принципы обучения.

Лёгкое (или тяжёлое) ощущение раздражения к учителю — это не просто нормально, но и скорее всего показатель, что всё идёт хорошо (кроме ситуаций, когда сам преподаватель вызывает неприятие в силу личных качеств). Обучение чему-то новому почти всегда болезненный процесс.

Несмотря на все вышесказанное, от ошибок не застрахован никто. Даже несмотря на наш обширный опыт офлайнового обучения, нам понадобилось много лет, перед тем как мы начали понимать эффективные стратегии обучения программированию онлайн. Более того, даже зная их, мы понимаем, что невозможно создать заранее хорошо спроектированный курс. Онлайн аудитория, в отличие от студенческой скамьи абсолютно непредсказуема. На ресурсах типа Хекслета учатся совершенно разные люди, имеющие разный опыт, уровень подготовки и отношение к процессу. Именно поэтому для нас так важна обратная связь. Конструктивная обратная связь — единственный способ понять, где мы ошиблись, не объяснили хорошо теорию, сделали упражнение слишком сложным или простым и так далее.

Выводы

  • Эффективное обучение программированию не может быть простым.
  • Обучение происходит не тогда, когда понятно как правильно, а тогда, когда сделано неправильно.
  • Знание конструкций языка не делает из человека программиста.
  • Нужно учиться самостоятельно искать ответы и правильно задавать вопросы.
  • Отладка – ключ к эффективному программированию.

Семь бесплатных автоматизированных платформ-задачников для прокачки навыков программирования

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

CheckiO

Проект из Украины «Чекио» сфокусирован на Python и JavaScript. Это сборник игровых задач по программированию для тех, кто уже не новичок. Большой упор на геймификацию, симпатичную графику и общение в сообществе. В самом решении задач игрового процесса нет, но есть общий сценарий для прохождения платформы. Полезная фича — смотреть другие решения и подсказывать студентам как их можно улучшить.

leetcode

Сборник задач по программированию на разных языках. Цель сервиса — готовить программистов к заданиям, которые встречаются на интервью. Платформа сразу даёт фидбэк на правильность и эффективность решения, показывает варианты решений и позволяет обсудить их с другими участниками. В платной версии можно пройти автоматизированное интервью в Google, Facebook или Amazon: робот подберёт вопросы, засечёт время и даже поможет оценить.

Hackerrank

Известный американский проект включает «челленджи», соревнования, вакансии, лидерборд и помощь в подготовке к интервью. Много тематических туториалов в стиле «30 Days of Code» или «10 Days of Statistics».

Задания делятся по конкретным скиллам: алгоритмы, структуры данных и математику. Задачи можно решать на большинстве популярных языков: C++/#, Java, PHP, Python, JavaScript, Kotlin и другие. Еще Hackerrank выпускает ежегодные исследования на тему востребованных технологий и образования в программировании.

Codewars

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

Codebattle

Codebattle — проект сообщества Хекслета. Название говорит за себя: вам и сопернику даётся задача, выбираете язык и решаете. Вы видите код соперника в реальном времени, результаты запуска тестов и можете общаться с ним и зрителями в чате. Кто первый решит задачу (пройдёт тесты) — тот победил.

Еще известные сервисы:

Kaggle. Платформа для дата-саентистов и специалистов по машинному обучению. Предлагает открытые датасеты и контесты от компаний с призовыми фондами.

Codeforces. Проект ориентирован на олимпиадные задачи, публикует новости с ACM ICPC и поддерживается Telegram.

Поделитесь в комментариях какими платформами-задачниками вы пользуетесь и чем они нравятся. Интересные сервисы добавим в этот пост.

Вычислительная математика и программирование | Механико-математический факультет

Информационно-вычислительная система для коллективного исследования проблем атмосферного пограничного слоя с использованием вычислительного кластера
 

ЗАДАЧНИК по программированию для математиков /под ред. Старченко А.В.
 

СОВРЕМЕННЫЕ ПРОГНОСТИЧЕСКИЕ МОДЕЛИ В ЧИСЛЕННЫХ ПРОГНОЗАХ ПОГОДЫ
 

МОНИТОРИНГ И ЧИСЛЕННЫЙ ПРОГНОЗ ПОГОДЫ ДЛЯ ШКОЛЬНИКОВ
 

Методы приближенных вычислений
 

Методы параллельных вычислений
 

Практикум по математическому моделированию
 

Пакет прикладных программ FLUENT для решения задач механики жидкости и газа, тепло и массопереноса
 

Сплайны сеточных функций и их приложения
 

Фортран 90 в примерах и задачах
 

Fire-3D. Программа расчета аэродинамики, горения и теплообмена в топках котлоагрегатов и газоходах

Аналитический метод решения краевых задач : [учебное пособие для математических специальностей] /А. С. Якимов ; Том. гос. ун-т, 2005
 

Математическое моделирование на графах. Часть I 
Глава 1,  
Глава 2,   
Литература и Библиографический указатель
 

Математическое моделирование на графах. Часть II 
Глава 1,    
Глава 2,    
Глава 3,    
Литература и Приложения 1,2
 

Элементы визуального программирования в средах Delphi и Lazarus
 

Зюзьков В.М. Компьютерная алгебра
 

Зюзьков В.М. Программирование
 

Пчелкина Д.Е., Зюзьков В.М. Применение система Mathematica в математическом анализе
 

Зюзьков В.М. Математическая логика и теория алгоритмов
 

Меркулова Н.Н., Михайлов М.Д. РАЗНОСТНЫЕ СХЕМЫ ДЛЯ ОБЫКНОВЕННЫХ ДИФФЕРЕНЦИАЛЬНЫХ УРАВНЕНИЙ (Учебное пособие)
 

Данилкин Е. А. Распараллеливание явных и неявных разностных схем, эффективность параллельных и последовательных программ (Методические указания)
 

Берцун В.Н., Гольдин В.Д., Лаева В.И., Меркулова Н.Н., Михайлов М.Д., Старченко А.В., Фазлиев А.З. Учебно-методический комплекс специализации «Параллельные компьютерные технологии» (010128)
 

Беликов Д.А., Говязов И.В., Данилкин Е.А., Лаева В.И., Проханов С.А., Старченко А.В. Высокопроизводительные вычисления на кластере (Учебное пособие)
 

Старченко А.В., Берцун В.Н. Методы параллельных вычислений (Учебник)
 

А.В. Старченко, Р.Б. Нутерман, Е.А. Данилкин Численное моделирование турбулентных течений и переноса примеси в уличных каньонах (Монография)
 

Компьютерные науки, практика (В.М. Зюзьков)
Основные типы и операторы
Условный оператор и циклы
Массивы Подпрограммы
Символы и строки
Сортировка и множества
Рекурсия
 

Введение в методы параллельных вычислений 

Лекция №1 
Лекция №2 
Лекция №3 
Лекция №4 
Лекция №5 
Лекция №6 
Лекция №7 
Лекция №8


Тынкевич М. А., Пимонов А.Г. Введение в численный анализ: Учебное пособие/ КузГУ. — Кемерово, 2017. — 176 с.

Задачник по программированию — Задача

Воронежский государственный педагогический университет

Кафедра информатики и методики преподавания математик

В.А. ЧУЛЮКОВ

ЗАДАЧНИК

по программированию

Воронеж — 2000

Содержание

Оператор присваивания 6

Ввод данных с клавиатуры 11

Операторы Read, Readln 11

Операторы Read…Data…Restore 12

Программирование ветвлений 12

Условный переход 12

Оператор выбора 15

Программирование циклов 16

Циклы с предварительным условием 16

Циклы с последующим условием 20

Циклы с параметром 20

Организация данных в виде массивов 24

Одномерные массивы 24

Двумерные массивы 26

Подпрограммы 30

Подпрограммы-функции 30

Подпрограммы-процедуры 30

Работа со строками 30

Работа с файлами 30

Оператор присваивания
Задача 1.

Вычислить объем пирамиды, основанием которой является треугольник, для значений А, В, С и Н данных в контрольном примере. Для вычисления площади основания использовать формулу Герона:

,

где:

.

Объем пирамиды:

.

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

Контрольный пример: A=3, B=4, C=5, H=6. Результат V=12.

Задача 2.

П

о заданным величинам радиусов оснований R и r и высоты h найти объем и площадь поверхности усеченного конуса по формулам:

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

Контрольный пример: R=20, r=10, h=30. Результат: S=4548.866, V=21980.

Задача 3.

Дана длина ребра куба. Вычислить объем куба и площадь его боковой поверхности. Данные взять из контрольного примера.

Контрольный пример: A=5. Результат: V=125, S=100.

Задача 4.

Даны два положительных действительных числа. Найти среднее арифметическое и среднее геометрическое этих чисел. Данные взять из контрольного примера.

Среднее геометрическое вычисляется по формуле:

.

Контрольный пример: А=4, B=9. Результат: среднее арифметическое = 6,5. Среднее геометрическое = 6.

Задача 5.

Даны катеты прямоугольного треугольника. Найти его гипотенузу и площадь. Данные взять из контрольного примера.

Контрольный пример: A=4, B=3. Результат: гипотенуза = 5,

площадь = 6.

Задача 6.

Дана сторона равностороннего треугольника (взять из контрольного примера). Найти площадь треугольника по формуле Герона:

,

где:

.

Контрольный пример: A=B=C=4. Результат: S=6.928203.

Задача 7.

Даны два действительных числа. Найти среднее арифметическое и среднее геометрическое их модулей. Данные взять из контрольного примера.

Среднее геометрическое вычисляется по формуле:

.

К
онтрольный пример:
А=-4, B=-9. Результат: среднее арифметическое = 6,5. Среднее геометрическое = 6.

Задача 8.

Три сопротивления R1, R2, R3 соединены параллельно. Найти сопротивление соединения R0 по формуле:

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

Контрольный пример: R1=2, R2=4, R3=8. Результат: R0=1.142857.

Задача 9.

По заданной длине окружности L найти площадь круга S, ограниченного этой окружностью. Длина окружности вычисляется по формуле:

Площадь круга вычисляется по формуле:

Данные взять из контрольного примера.

Контрольный пример: L=6. Результат: S=2.866242.

Задача 10.

Даны гипотенуза и катет прямоугольного треугольника. Найти второй катет и радиус вписанной окружности, который вычисляется по формуле:

где pполупериметр.

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

Контрольный пример: с=5, a=3. Результат: b=4, r = 1.

Задача 11.

Найти площадь кольца, внутренний радиус которого 20, а внешний радиус больше 20. Площадь круга радиусом R вычисляется по формуле:

Данные взять из контрольного примера.

Контрольный пример: Rвнешний=30. Результат: Площадь кольца = 1570.

Задача 12.

Найти площадь равнобедренной трапеции по заданным величинам оснований A и B, и угла при большем основании. Исходные данные взять из контрольного примера.

Контрольный пример: A=20, B=10, угол=45о. Результат: S=74.9403.

Задача 13.

Треугольник задан длинами сторон a, b, c. Найти длины высот.

Д
лина высоты, проведенной на сторону a, вычисляется по формуле:

Площадь треугольника S вычислить по формуле Герона:

,

где:

.

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

Контрольный пример: a=3, b=4, c=5. Результат: ha=4, hb=3, hc=2.4.

Задача 14.

Треугольник задан длинами сторон a, b, c. Найти длины медиан.

Длина медианы, проведенной на сторону a, вычисляется по формуле:

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

Контрольный пример: a=3, b=4, c=5. Результат: ma=4. 27, mb=3.61, mc=2.5.

Задача 15.

Треугольник задан длинами сторон a, b, c. Найти длины биссектрис.

Д
лина биссектрисы, проведенной на сторону a, вычисляется по формуле:

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

Контрольный пример: a=3, b=4, c=5. Результат: la=4.22, lb=3.35, lc=2.42.

Задача 16.

Вычислить расстояние между двумя точками с заданными координатами x1, y1 и x2, y2. Исходные данные взять из контрольного примера.

Контрольный пример: x1=1, y1=1, x2=3, y2=3. Результат: l = 2.83.

Задача 17.

Д

аны x, y, z. Вычислить a, b, если

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

Контрольный пример: x=-1, y=-1, z=3. Результат: a = 0.2366935, b=-1.384381.

Задача 18.

Д

аны x, y, z. Вычислить a, b, если

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

Контрольный пример: x=1, y=1, z=3. Результат: a = 9.608184, b=2.962605.

Задача 19.

Д
аны x, y, z. Вычислить a, b, если

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

Контрольный пример: x=3, y=4, z=5. Результат: a = -1.467187, b=4.125.

Задача 20.

Д
аны x, y, z. Вычислить a, b, если

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

Контрольный пример: x=3, y=4, z=5. Результат: a = 3.288716, b=0.9615385.

Ввод данных с клавиатуры
Операторы Read, Readln

Решить задачи 1-20 раздела «Оператор присваивания» с использованием оператора ввода.

Операторы Read…Data…Restore

Решить задачи 1-20 раздела «Оператор присваивания» для трех групп исходных данных.

Программирование ветвлений
Условный переход
Задача 1.

Даны три действительных числа X, Y, Z. Найти максимальное из этих трех чисел.

Задача 2.

Даны три действительных числа X, Y, Z. Найти минимальное из этих трех чисел.

Задача 3.

Даны три действительных числа X, Y, Z. Удвоить эти числа, если , и заменить их абсолютными значениями, если это не так.

Задача 4.

Даны два действительных числа. Вывести первое число, если оно больше второго, и оба числа, если это не так.

Задача 5.

Даны два действительных числа. Заменить первое число нулем, если оно меньше или равно второму, и оставить числа без изменения в противном случае.

Задача 6.

Даны три действительных числа. Выбрать из них те, которые принадлежат интервалу (1, 3).

Задача 7.

Даны действительные числа X, Y (). Меньшее из этих двух чисел заменить их полусуммой, а большее – их удвоенным произведением.

Задача 8.

Даны три действительные числа. Возвести в квадрат те из них, значения которых неотрицательны.

Задача 9.

Даны два действительные числа X, Y (). Найти большее из них, если X отрицательное число, и меньшее, если это не так.

Задача 10.

Точка задана координатами X, Y. Определить, находится ли эта точка внутри круга радиусом R с центром в начале координат.

Задача 11.

Даны действительные числа A, B, C и D. Если то каждое число заменить наибольшим из них; если A<B<C<D, то числа оставить без изменения; в противном случае все числа заменяются их квадратами.

Задача 12.

Даны действительные числа X, Y. Если X и Y отрицательны, то каждое значение заменить его модулем; если отрицательно только одно из них, то оба значения увеличить на 0.5; если оба значения неотрицательны и ни одно из них не принадлежит отрезку [0.5, 2.0], то оба значения уменьшить в 10 раз; в остальных случаях X и Y оставить без изменения.

Задача 13.

Даны действительные положительные числа X, Y, Z. Выяснить, существует ли треугольник с длинами сторон X, Y, Z.

Задача 14.

Определить, верно ли, что при делении неотрицательного целого числа A на положительное целое число B получается остаток, равный одному из заданных чисел R или S.

Задача 15.

Дано натуральное число N (), определяющее возраст человека (в годах). Дать для этого числа наименование «год», «года» или «лет»: например, 1 год, 23 года, 45 лет и т.д.

Задача 16.

Найти значение функции, вычисляемое по формуле:

при 0 < x < 2, иначе .

Задача 17.

Перераспределить значения переменных X и Y так, чтобы в X оказалось большее из этих значений, а в Y – меньшее.

Задача 18.

Переменной K присвоить номер четверти плоскости, в которой находится точка с координатами X и Y ().

Задача 19.

По номеру Y (Y>0) некоторого года определить номер его столетия (учесть, что, к примеру, началом ХХ столетия был 1901, а не 1900 год).

Задача 20.

Для заданных x, y, z найти:

Контрольный пример: x=3, y=4, z=5. Ответ: 0,38961.

Задача 21.

Значения переменных A, B и C поменять местами так, чтобы оказалось

Оператор выбора
Задача 1.

По введенному номеру дня недели вывести его словесное наименование. Например, 1 – понедельник.

Задача 2.

По введенному номеру месяца вывести его словесное наименование. Например, 1 – январь.

Задача 3.

Написать программу, позволяющую получить словесное наименование школьных оценок. Например, 1 – очень плохо.

Задача 4.

Написать программу, которая по введенному номеру выводит фамилию студента вашей группы.

Задача 5.

По введенному номеру музыкальной ноты вывести ее словесное наименование. Например, 3 – ми.

Задача 6.

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

Задача 7.

Написать программу, которая выводит возможные значения координат X и Y в зависимости от номера координатной четверти.

Задача 8.

Чтобы определить на какую цифру оканчивается квадрат целого числа, достаточно знать последнюю цифру самого числа. Написать программу, которая по одной из цифр 0,1,2,3, 4,5,6,7,8,9 – последней цифре числа N — находит последнюю цифру квадрата этого числа.

Задача 9.

Написать программу нахождения числа дней в месяце, если даны номер месяца и целая величина, равная 1 для високосного года и 0 в противном случае.

Задача 10.

Написать программу калькулятор, которая выполняет арифметические действия, задаваемые в виде:

знак_операции, операнд1, операнд2,

где знак_операции – 1-сложение, 2-вычитание, 3-умножение, 4-деление,

операнды – числа, над которыми выполняются действия.

Например, при вводе 3, 4, 5 результат – 20.

Программирование циклов
Циклы с предварительным условием
Задача 1.

С помощью цикла «пока» или цикла «до» написать программу возведения числа A в целую степень N.

Задача 2.

С помощью цикла «пока» или цикла «до» написать программу вычисления факториала заданного целого числа.

Ф
акториал числа N вычисляется по следующей формуле:

Задача 3.

С помощью цикла «пока» или цикла «до» написать программу вычисления числа Фибоначчи, не превосходящего заранее заданное число N.

Ч
исла Фибоначчи вычисляются с помощью следующих соотношений:

Задача 4.

С помощью цикла «пока» или цикла «до» написать программу вычисления суммы S квадратов чисел от 1 до N.

Задача 5.

Составить программу, вычисляющую для заданного x сумму:

При суммировании учитывать только слагаемые, большие по абсолютной величине заданного положительного числа E.

Знак «!» после числа означает факториал этого числа. Факториал числа N вычисляется по следующей формуле:

Контрольный пример: x=1, E=0.1. Результат: 2.666667.

Задача 6.

С помощью цикла «пока» или цикла «до» написать программу вычисления суммы S квадратов четных и кубов нечетных чисел от 1 до N. Проверку числа на четность осуществить с помощью встроенной функции ODD.

Задача 7.

Составить программу для определения k, при котором функция становится меньше заданного числа A при заданном x для k=1,2,3,….

Контрольный пример: x=1, A=0.25. Результат: 5.

Задача 8.

Написать программу поиска суммы последовательности чисел, вводимых с клавиатуры, предшествующих первому введенному нулю.

Указание: должен многократно выполняться оператор ввода.

Контрольный пример: 1,2,3,-4,5,-2,0. Результат: 7.

Задача 9.

Написать программу поиска суммы последовательности положительных чисел, вводимых с клавиатуры, предшествующих первому введенному нулю.

Указание: должен многократно выполняться оператор ввода.

Контрольный пример: 1,2,3,-4,5,-2,0. Результат: 11.

Задача 10.

Написать программу поиска суммы последовательности отрицательных чисел, вводимых с клавиатуры, предшествующих первому введенному нулю.

Указание: должен многократно выполняться оператор ввода.

Контрольный пример: 1,2,3,-4,5,-2,0. Результат: -6.

Задача 11.

Написать программу поиска произведения последовательности чисел, вводимых с клавиатуры, предшествующих первому введенному отрицательному числу.

Указание: должен многократно выполняться оператор ввода.

Контрольный пример: 1,2,3,4,5,-2. Результат: 120.

Задача 12.

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

Указание: должен многократно выполняться оператор ввода.

Контрольный пример: 1,2,3,-4,5,-2,0. Результат: 240.

Задача 13.

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

Указание: должен многократно выполняться оператор ввода.

Контрольный пример: 1,2,3,-4,5,-2,0. Результат: 30.

Задача 14.

Написать программу поиска произведения последовательности отрицательных чисел, вводимых с клавиатуры, предшествующих первому введенному нулю.

Указание: должен многократно выполняться оператор ввода.

Контрольный пример: 1,2,3,-4,5,-2,0. Результат: 8.

Задача 15.

Написать программу поиска чисел, лежащих в интервале от -5 до 5, в последовательности чисел, вводимых с клавиатуры, предшествующих первому введенному нулю.

Указание: должен многократно выполняться оператор ввода.

Контрольный пример: 1,10,-4,5,-16,-5,0. Результат: 1,-4,5,-5.

Задача 16.

Написать программу поиска чисел, лежащих в интервале от 3 до 13, в последовательности чисел, вводимых с клавиатуры, предшествующих первому введенному отрицательному числу.

Указание: должен многократно выполняться оператор ввода.

Контрольный пример: 1,3,16,7,13,10,2,-1. Результат: 3,7,13,10.

Задача 17.

Вычислить y – первое из чисел sin x, sin sin x, sin sin sin x, …, меньшее по модулю 10-4.

Задача 18.

Не используя стандартные функции (за исключением abs), вычислить с точностью eps>0

Считать, что требуемая точность достигнута, если очередное слагаемое по модулю меньше eps, — все последующие слагаемые можно уже не учитывать.

Задача 19.

Не используя стандартные функции (за исключением abs), вычислить с точностью eps>0

Считать, что требуемая точность достигнута, если очередное слагаемое по модулю меньше eps, — все последующие слагаемые можно уже не учитывать.

Задача 20.

Не используя стандартные функции (за исключением abs), вычислить с точностью eps>0

Считать, что требуемая точность достигнута, если очередное слагаемое по модулю меньше eps, — все последующие слагаемые можно уже не учитывать.

Циклы с последующим условием

С помощью цикла «пока» или цикла «до» решить задачи 1 – 20 раздела «Циклы с предварительным условием».

Циклы с параметром
Задача 1.

Написать программу возведения числа A в целую степень N.

Задача 2.

Написать программу вычисления факториала заданного целого числа.

Ф
акториал числа N вычисляется по следующей формуле:

Задача 3.

Написать программу вычисления суммы S квадратов четных и кубов нечетных чисел от 1 до N. Проверку числа на четность осуществить с помощью встроенной функции ODD.

Задача 4.

Написать программу выбора наименьшего из 10 данных чисел.

Задача 5.

Написать программу получения в порядке убывания всех делителей данного числа.

Задача 6.

Написать программу вычисления суммы положительных и количества отрицательных чисел, содержащихся среди данных 10 чисел.

Задача 7.

Написать программу, выясняющую, есть ли среди чисел:

меньшие 0.0001. Если такие числа есть – вывести их на экран.

Задача 8.

Написать программу, выясняющую, есть ли среди чисел

i3-17in2+n3, i=1,…,n

числа кратные заданному числу A и одновременно не кратные заданному числу B.

Вывести найденные числа на печать.

Контрольный пример: n=10, A=3, B=2. Ответ: -699, -10557.

Задача 9.

Написать программу, выясняющую, есть ли среди данных 10 чисел точные квадраты. Если такие есть, то после ввода числа должно появляться сообщение «Точный квадрат».

Задача 10.

Написать программу, в которой определяется сумма S всех целых чисел в интервале, заданном переменными N и M, а также сумма SA четных и SB нечетных чисел в том же интервале. «).

Задача 12.

Даны действительные числа. Вычислить их среднее арифметическое.

Задача 13.

Дано 10 вещественных чисел. Вычислить разность между максимальным и минимальным из них.

Задача 14.

Вычислить:

Ответ: 2.469926

Задача 15.

Вычислить:

Y = 1! + 2! + 3! +…+ N! (N>1)

Ф
акториал числа N вычисляется по следующей формуле:

Задача 16.

Определить 20-е число Фибоначчи.

Ч
исла Фибоначчи вычисляются с помощью следующих соотношений:

Ответ: 6765.

Задача 17.

Дано 10 вещественных чисел. Определить, образуют ли они возрастающую последовательность.

Задача 18.

Дана последовательность из 10 целых чисел. Определить, со скольких отрицательных чисел она начинается.

Задача 19.

Дано число N. Определить, является ли это число простым.

Задача 20.

Дано натуральное число n. Вычислить:

Задача 21.

Написать программу, печатающую все буквы латинского алфавита от A до Z.

Задача 22.

Написать программу, печатающую все буквы латинского алфавита от Z до A.

Задача 23.

Написать программу вывода последовательности букв:

A

AB

ABC

….

ABC…XYZ.

Задача 24.

Написать программу вывода последовательности букв:

ZYYXXX…AAA…A.

Организация данных в виде массивов
Одномерные массивы
Задача 1.

В массиве из 15 чисел найти наибольший элемент и его индекс в массиве.

Задача 2.

В массиве из 15 чисел найти наименьший элемент и его индекс в массиве.

Задача 3.

В массиве из 15 чисел найти первый отрицательный элемент и его индекс в массиве.

Задача 4.

В массиве из 15 чисел найти индекс первого нулевого элемента.

Задача 5.

В массиве из 10 чисел есть хотя бы один отрицательный элемент. Вычислить произведение элементов массива до первого отрицательного.

Задача 6.

В массиве из 10 чисел есть хотя бы один нулевой элемент. Вычислить сумму элементов массива до первого нуля.

Задача 7.

В массиве из 10 чисел есть положительные и отрицательные элементы. Вычислить сумму положительных элементов массива.

Задача 8.

В массиве из 10 чисел есть хотя бы один нулевой элемент. Вычислить произведение элементов массива до первого нуля.

Задача 9.

В массиве из 10 чисел есть положительные и отрицательные элементы. Вычислить сумму отрицательных элементов массива.

Задача 10.

В массиве из 10 чисел есть положительные и отрицательные элементы. Подсчитать количество положительных элементов массива.

Задача 11.

В массиве из 10 чисел есть положительные и отрицательные элементы. Вычислить произведение положительных элементов массива.

Задача 12.

В массиве из 10 чисел есть положительные и отрицательные элементы. Подсчитать количество отрицательных элементов массива.

Задача 13.

В массиве из 10 чисел есть положительные и отрицательные элементы. Вычислить произведение отрицательных элементов массива.

Задача 14.

В массиве из 10 чисел подсчитать количество элементов, больших трех.

Задача 15.

В массиве из 10 чисел подсчитать сумму элементов, стоящих на четных местах.

Задача 16.

Дан массив X из 10 чисел. Воспользовавшись вспомогательным массивом такой же размерности, сдвинуть элементы массива X на заданное число K позиций влево.

Контрольный пример: массив X =[1,2,3,4,5,6,7,8,9,10]. Число K=4. Результат: полученный массив = [4,5,6,7,8,9,10,1,2,3].

Задача 17.

В массиве из 10 чисел переставить все нули в конец массива, не меняя порядок не нулевых элементов.

Контрольный пример: исходный массив X =[1,0,3,4,0,0,7,0,9,10] Результат: полученный массив X =[1,3,4,7,9,10,0,0,0,0].

Задача 18.

В массиве из 10 чисел поменять местами первое и десятое, второе и девятое и т.д. (т.е. перевернуть массив).

Задача 19.

В массиве из 10 чисел переставить минимальный элемент на последнее место.

Задача 20.

Сформировать массив из 9 чисел, элементы которого равны квадратному корню из индекса элемента.

Двумерные массивы
Задача 1.

Дан двумерный массив чисел А размером 6х6 и одномерный массив Х из 6-ти чисел. Нечетные строки массива А заменить на Х.

Задача 2.

Дан двумерный массив чисел А размером 6х6 и одномерный массив Х из 6-ти чисел. Четные столбцы массива А заменить на Х.

Задача 3.

Дан двумерный массив чисел А размером 6х6 и одномерный массив Х из 6-ти чисел. Первые три строки массива А заменить на Х.

Задача 4.

Дан двумерный массив чисел А размером 6х6. Воспользовавшись одномерным массивом размером 6 элементов как вспомогательным, поменять местами 1-ю и 2-ю строки, 3-ю и 4-ю строки, 5-ю и 6-ю строки.

Задача 5.

В массиве чисел размером 6х6 элементов найти максимальный элемент, минимальный элемент и их индексы.

Задача 6.

Дана матрица чисел размером 3х4. Переставляя ее строки и столбцы, добиться того, чтобы ее наибольший элемент (один из них) оказался в верхнем левом углу.

Задача 7.

Дана матрица А чисел размером 5х5 элементов. Найти сумму элементов массива А из заштрихованной области:

Задача 8.

Массив целых чисел размером 10х10 элементов заполнить следующим образом:

a) б) в)

Задача 9.

Заполнить массив А из 6 строк и 9 столбцов по следующему правилу: .

Задача 10.

Даны целые числа a1, a2, a3. Получить целочисленную матрицу 3х3, для которой

Задача 11.

Получить действительную матрицу 7х7, первая строка которой задается формулой , вторая строка задается формулой , а каждая следующая строка есть сумма двух предыдущих.

Задача 12.

Даны натуральное число n, действительная матрица размера n x 9. Найти среднее арифметическое каждого из столбцов.

Задача 13.

Даны натуральное число n, действительная матрица размера n x 9. Найти среднее арифметическое каждого из столбцов, имеющих четные номера.

Задача 14.

Дана действительная матрица размера n x m, в которой не все элементы равны нулю. Получить новую матрицу путем деления всех элементов данной матрицы на ее наибольший элемент.

Задача 15.

Дана действительная квадратная матрица порядка 6. Заменить нулями все ее элементы, расположенные на главной диагонали и выше нее.

Задача 16.

Даны натуральное число n, действительная матрица A размером n x n. Получить последовательность элементов главной диагонали A11, A22, …, Ann.

Задача 17.

Все элементы с наибольшим значением в данной целочисленной квадратной матрице порядка 6 заменить нулями.

Задача 18.

Дана действительная матрица размером 6 х 9. Найти среднее арифметическое наибольшего и наименьшего значений ее элементов.

Задача 19.

Дана действительная матрица размером n x m. Найти сумму наибольших значений ее строк.

Задача 20.

В данной квадратной целочисленной матрице порядка 6 указать индексы всех элементов с наибольшим значением.

Подпрограммы
Подпрограммы-функции
Подпрограммы-процедуры
Работа со строками
Работа с файлами

Задачник по программированию для школы. Задачник по программированию( для школы )

Читайте также

Приложение А Научитесь программированию за десять лет

Приложение А Научитесь программированию за десять лет «Опыт, сущ. : Нечто, что вы не получаете до тех пор, пока это вам не понадобится». — Оливер — Данная глава написана Петером Норвигом (Peter Norvig, © 2001 г.). Воспроизводится по разрешению. Оригинальную статью, включая

ОБЩАЯ ЗАДАЧА ОБУЧЕНИЯ ПРОГРАММИРОВАНИЮ

ОБЩАЯ ЗАДАЧА ОБУЧЕНИЯ ПРОГРАММИРОВАНИЮ Итак, мы хотим учить детей законам программирования. Еще не зная их, мы понимаем, что они неизбежно будут выражены в сумме некоторых достаточно специфических приемов. Нам еще предстоит разбираться, в какой мере они посильны детям,

Электронный задачник Programming Taskbook

Электронный задачник Programming Taskbook Общее описание Электронный задачник Programming Taskbook предназначен для обучения программированию на языках Pascal, Visual Basic, C++, C#, Visual Basic .NET, Python и Java. Он содержит 1300 учебных заданий, охватывающих все основные разделы базового курса

История на расстоянии вытянутой руки: задачник без ответов Василий Щепетнёв

История на расстоянии вытянутой руки: задачник без ответов Василий Щепетнёв Опубликовано 16 марта 2014 В школьные годы чудесные одной из наиболее почитаемой книг был задачник. Любишь математику, не любишь, по складу ума ничего в ней не понимаешь, а

Augmented Reality: этапы эволюции Андрей Мамонтов,заместитель директора Высшей школы маркетинга и развития бизнеса НИУ ВШЭ

Augmented Reality: этапы эволюции Андрей Мамонтов,заместитель директора Высшей школы маркетинга и развития бизнеса НИУ ВШЭ Опубликовано 13 мая 2013 В поле зрения российских стартаперов дополненная реальность попала относительно недавно, несмотря на то что

Зачем нам чемпионы по программированию?

Зачем нам чемпионы по программированию? Автор: Анатолий ШалытоОлимпиады школьников по математике проходят в нашей стране с 1934 года, когда в Ленинграде состоялась первая из них. Для многих школьников, особенно победителей олимпиад высокого уровня, участие в этих

Типовые задачи для обучения программированию | GeekBrains

Каждый новичок должен их решить.

https://gbcdn.mrgcdn.ru/uploads/post/1216/og_cover_image/9ad8187ff6c5fe48d27e557139767946

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

О том, какие образовательные проекты были на моём пути, расскажу далее.

Боец

Тип приложения: игра.

Платформа: Turbo Pascal.

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

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

Далее генерируется случайное число от 2 до 12. Если выпадает меньше 5 — удар не достигает цели, 5−8 — только рукой, 9−11 — засчитывается любой, 12 — критическое попадание. Удар левой рукой оценивается в 1 пункт, правой — 2, ногой 3, критическое попадание прибавляет единицу. Блок нивелирует любые попадания, кроме критического, но по номинальной «цене».

Необходимые навыки: никаких. Знания математики и языка хватит, чтобы устроить небольшое соревнование с друзьями. Научитесь записывать и считывать данные из файла — станет еще интереснее.

Калькулятор

Тип приложения: офисное.

Платформа: Borland Delphi.

Описание: на следующей стадии обучения программированию я и мои одноклассники решили использовать программирование не в развлекательных целях, а для пользы дела. Классический калькулятор никто не создавал, все творили «моды»: у кого-то он решал уравнения 2−3 степени, у кого-то строил графики, некоторые умудрялись адаптировать его под задачи по физике и геометрии.

Необходимые навыки: знакомство с диалоговыми окнами и математикой. Все остальное — игра воображения.

Бильярд

Тип приложения: игра.

Платформа: Borland Delphi.

Описание: в старших классах я загорелся идеей создать собственное приложение с двухмерным бильярдом. Реализация кажется довольно простой до тех пор, пока вы ей не займетесь. Главная проблема — графическое описание физики столкновений. Здесь есть два решения: отрисовывать каждый пиксель смещения, что смертельно для быстродействия, или отрисовывать физику с учетом допусков, количества шаров, их положения и даже цвета.

Необходимые знания: работа с графикой, физика и математика за 8−10 класс, много желания и свободного времени.

Онлайн-анкета

Тип приложения: офисное.

Платформа: Visual Studio, C#.

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

Необходимые навыки: работа с файлами и БД. Сложностей здесь мало, зато механически набивать код придется много.

Робот-собеседник

Тип приложения: искусственный интеллект.

Платформа: MATLAB/Simulink.

Описание: в университете также был полугодовой курс по дисциплине «нейронные сети», по итогам которого студенты сдавали какой-нибудь проект. Я отделался примитивной системой перемещения для робота, в то время как большинство сокурсников взялось за создание «умного» собеседника. Те, кто работал с нейронными сетями в MATLAB, понимает, что это проект или для очень амбициозного человека, или для мазохиста. Не знаю, к какому типу относился каждый из сокурсников, но рабочего проекта так никто и не создал.

Необходимые навыки: Во-первых, начните не с нейронных сетей, а с простой комбинаторики. Чатбота создать проще(необходимы лишь навыки работы с БД), да и язык роли не играет. Во-вторых, выберите другую платформу, MATLAB не для этого. Python с PyBrain будут полезнее.

Управление умным домом

Тип приложения: домашнее вспомогательное.

Платформа: Keil uVision для МК, Netbeans для веб-интерфейса.

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

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

Если же подходить к делу серьёзно, куда проще купить Raspberry Pi для сбора информации и взаимодействия с клиентом, а остальное реализовать на готовых датчиках.

Какие интересные задачи в школе, университете и на курсах решали вы? Пишите в комментариях.

Решение проблем для сбитого с толку

неуклюже, или и то, и другое (хотя это общее правило, которое не всегда применяется —

иногда скорость выполнения более важна, чем элегантность или понятность —

умение). Поэтому в главе 8 мы рассмотрим некоторые из доступных вам техник

для разработки хороших программ, которые, в конце концов, являются просто решением проблем.

Псевдокод: алгоритмический язык

Как вы, наверное, заметили, люди склонны использовать естественный язык (особенно

разговорный) неточно, а значения часто неоднозначны. 5 Представьте себе друга

, которого вы выбрали, чтобы следовать инструкциям, которые вы будете записывать, пока вы будете работать над этой книгой.

невероятно глуп и говорит только на одном языке, в котором

содержит около тридцати слов. Он не может интерпретировать расплывчатые или нечеткие инструкции

и отвергнет любые инструкции, которые не соответствуют точным грамматическим правилам

его собственного малого языка. Более того, он будет рабски подчиняться всему, что вы говорите

в точности.Представьте, с какой осторожностью вы должны были бы записать свое решение

в точности так, чтобы ваш друг мог понять его и выполнить ваши желания

. Именно так обстоит дело с компьютером, который не может думать самостоятельно. Для

по этой причине, хотя эта книга не имеет отношения к реальному программированию на языке

, в ней действительно используется форма структурированного английского языка (называемая псевдокодом) для выражения

решений проблем. Псевдокод, используемый в этой книге, впервые представлен в главе 3

.Обучение использованию псевдокода обеспечивает прочную основу для последующего перехода

на язык компьютерного программирования.

1.6 Кодирование и решение проблем

Можно сказать, что рецепт — это решение проблемы приготовления еды. Аналогично,

компьютерная программа — это описание решения вычислительной или логической задачи, которое выполняется компьютером, а не человеком. Проблема может заключаться в том, чтобы

вычислить сумму налога, которую мы должны, или вычислить среднюю оценку студента университета

.Проблема может быть даже такой общей, как разрешение человеку

вводить текст, изменять его, перемещать, применять к нему различное форматирование, сохранять его и

распечатывать его (именно то, что делает текстовый редактор). Однако во всех этих случаях грамм pro

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

на самом деле не решает поставленную задачу, 6 скорее она вычисляет (или вычисляет) ответ на

12 ГЛАВА 1 ■ Введение: Начинаем думать как программист

5 Сделайте следующее анонимное посвящение из книги: «Моим родителям, Джорджу Полиа и Богу.

Что это значит? Разве автор не утверждает, что Бог — один из его родителей? Предложение

синтаксически (грамматически) правильно, хотя его значение может быть неправильно понято.

Добавление дополнительной запятой проясняет ситуацию: «моим родителям, Джорджу Полиа,

и Богу». Большинство людей учат не ставить запятую после элемента, который предшествует

«и» в списке, но в этом случае добавление порядковой запятой действительно помогает прояснить смысл автора.Возможно, вам будет интересно узнать, что порядковая запятая также известна как Оксфордская запятая

, поскольку это стилистическая практика Oxford University Press (OUP). OUP использует

именно потому, что устраняет двусмысленность из списков. Большинство людей не используют его, но я использую. Если вы присмотритесь к

, то увидите, что оно используется в этой книге. Вы не заметили? Позор

вам, программисты должны быть внимательны к деталям, которые вы знаете.

6 За исключением некоторых задач по математике и инженерии.

Vickers_CH01_001-018.qxd 12/1/07 20:14 Страница 12

Copyright 2008 Cengage Learning, Inc. Все права защищены. Запрещается копировать, сканировать или дублировать, полностью или частично.

Лицензия на:

Обучение программированию путем решения проблем: Учебник по программированию на Python

Здравствуйте, Python люди! Возможно, вам уже ясно, что написание кода имеет решающее значение в процессе обучения программированию. Но есть и другие важные навыки, которые могут быть менее очевидными, но которые нам тоже нужно практиковать.Например: чтение кода, написанного другими. Никогда не угадаешь, что ты узнаешь, читая чужой код. You mi … Подробнее