Как собрать решение с ошибками

Метод проб и ошибок: достоинства и недостатки

Человечество берет свое начало несколько тысяч лет назад. И на протяжении всего этого времени оно неустанно развивается. Причин на это было всегда много, но без изобретательности человека это просто не представлялось бы возможным. Метод проб и ошибок был и является в настоящее время одним из основных.

Описание способа

Четко зафиксированного в исторических документах применения данного метода мало. Но, несмотря на это, он заслуживает особого внимания.

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

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

Метод в мировой истории

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

Степени трудности

У данного метода есть несколько уровней сложности. Они были так разделены для лучшего усвоения. Задача первого уровня считается легкой, и на поиск ее решения затрачивается немного сил. Но и вариантов ответов она имеет не так много. С повышением степени трудности растет и сложность поставленной задачи. Метод проб и ошибок 5 класса – самый труднорешаемый и затратный по времени.

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

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

Преимущества метода

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

Стоит привести в пример, как строились лодки. Раскопки показывают, как на протяжении столетий деталь за деталью менялась форма. Исследователи постоянно пробовали что-то новое. Если лодка тонула, то эту форму вычеркивали, если оставалась держаться на воде, то принимали это к сведению. Таким образом, в итоге было найдено компромиссное решение.

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

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

Недостатки метода

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

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

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

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

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

Не всегда исследователь уверен, что ответ вообще будет найден.

Автор метода проб и ошибок

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

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

Известно, что многие ученые использовали этот метод в своих трудах.

Однако именно описание метода и активное использование мы наблюдаем у физиолога Торндайка в конце девятнадцатого века.

Исследования Торндайка

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

Один из экспериментов выглядел приблизительно следующим образом. Кошка, помещенная в ящик, ищет выход. Сама коробка может иметь 1 вариант открытия: нужно было нажать на пружинку — и дверца распахивалась. Животное применяло много действий (так называемых проб), и большинство из них оказывались неудачными. Кошка так и оставалась в коробке. Но после некоторого набора вариантов животному удавалось нажать на пружинку и выбраться из ящика. Таким образом, кошка, попадая в коробку, с течением времени запоминала варианты развития событий. И выбиралась из ящика за более короткое время.

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

Решение задач методом проб и ошибок

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

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

Александр Александрович встретил на улице мужчину с подбитым глазом. В тот момент к нему и пришло озарение, что человек без одного глаза видит намного хуже. Он поделился этим наблюдением с авиатором Уточкиным. Когда установили в самолеты второе магнето, количество авиакатастроф значительно уменьшилось. А Уточкин некоторое время выплачивал после каждого показательного полета Микулину денежные вознаграждения.

Применение способа в математике

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

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

Пример практической задачи

Метод проб и ошибок в математике 5 класса (в последних изданиях) часто фигурирует. Приведем пример.

Необходимо назвать, какие стороны могут быть у прямоугольника. При условии, что площадь (S) = 32 см, а периметр (P) = 24 см.

Решение данной задачи: предположим, что длина одной стороны 4. Значит и длина еще одной стороны такая же.

Получаем следующее уравнение:

16 делим на 2 = 8

8 см – это ширина.

Проверяем по формуле площади. S = A*B = 8*4 = 32 сантиметра. Как мы видим, решение верное. Так же можно вычислить и периметр. По формуле получается следующий расчет Р = 2* (А + В) = 2* (4 + 8) = 24.

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

Теория решения изобретательских задач

В ТРИЗ метод проб и ошибок считается одним из самых неэффективных. Когда человек попадает в необычную для него затруднительную ситуацию, то действия наугад, скорее всего, будут безрезультатными. Можно потратить много времени и в результате не добиться успеха. Теория решения изобретательских задач основана на уже известных закономерностях, и обычно используются другие методы познания. Часто ТРИЗ используют в воспитании детей, делая этот процесс интересным и увлекательным для ребенка.

Выводы

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

Однако не всегда он позволяет добиться нужного результата. Никогда исследователь не знает, когда стоит прекратить поиски или, может, стоит сделать еще пару усилий и гениальное изобретение появится на свет. Также непонятно, сколько времени будет затрачено.

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

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

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

Художники используют данный способ для поиска вдохновения.

Метод стоит опробовать в обыденной жизни при решении проблем. Возможно, какие-то вещи предстанут вам по-другому.

Урок «Способы решения уравнений»

Обращаем Ваше внимание, что в соответствии с Федеральным законом N 273-ФЗ «Об образовании в Российской Федерации» в организациях, осуществляющих образовательную деятельность, организовывается обучение и воспитание обучающихся с ОВЗ как совместно с другими обучающимися, так и в отдельных классах или группах.

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

Пример 1. Решить.уравнение 8х — 9 = -2х + 3.

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

Метод проб и ошибок.

Метод проб и ошибок заключается в следующем:

экспериментально подбираются корни уравнения;

доказывается, что других корней уравнение не имеет.

Пример 2. Решить уравнение х 2 +3х 54 = 0, где х — натуральное число.

Решение: Перенесем слагаемое — 54 в правую часть уравнения, а в левой части вынесем за скобки общий множитель х:

Число 6 является корнем данного уравнения. Действительно,

6(6 + 3) = 54 (истинно).

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

Метод перебора заключается в проверке всех возможных вариантов решения уравнения.

Например, глядя на уравнение х(х + 3) = 54, можно заметить, что его. натуральные корни должны быть делителями числа 54. Значит, х может принимать лишь значения: 1, 2,3, 6,9,18,27, 54. Подставляя эти числа вместо переменной х в уравнение, находим единственный корень: х = 6

Реши уравнения методом перебора:

а) 7х( 9 — 2х) = 70; б) х( 2х — 1)(4 — х)( х + 1) = 60.

• Реши уравнения методом проб и ошибок:

а) х( х + 8) = 33; б) Зх 2 — 14х — 15 = 0.

Краткое описание документа:

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

Курс повышения квалификации

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

  • Сейчас обучается 932 человека из 80 регионов

Курс профессиональной переподготовки

Математика: теория и методика преподавания в образовательной организации

  • Сейчас обучается 682 человека из 75 регионов

Курс повышения квалификации

Методика обучения математике в основной и средней школе в условиях реализации ФГОС ОО

  • Сейчас обучается 308 человек из 69 регионов

Ищем педагогов в команду «Инфоурок»

Дистанционные курсы для педагогов

Самые массовые международные дистанционные

Школьные Инфоконкурсы 2022

33 конкурса для учеников 1–11 классов и дошкольников от проекта «Инфоурок»

Найдите материал к любому уроку, указав свой предмет (категорию), класс, учебник и тему:

5 574 587 материалов в базе

Материал подходит для УМК

«Математика (в 2 частях)», Виленкин Н.Я., Жохов В.И., Чесноков А.С., Шварцбурд С.И.

42. Решение уравнений

Другие материалы

  • 28.09.2019
  • 208
  • 0

  • 18.09.2019
  • 378
  • 0

  • 12.09.2019
  • 261
  • 1

  • 25.08.2019
  • 466
  • 2

  • 19.08.2019
  • 161
  • 0

  • 01.07.2019
  • 449
  • 16

  • 15.06.2019
  • 311
  • 0

  • 27.04.2019
  • 827
  • 1

Вам будут интересны эти курсы:

Оставьте свой комментарий

Авторизуйтесь, чтобы задавать вопросы.

Добавить в избранное

  • 08.10.2019 500
  • DOCX 15.8 кбайт
  • 2 скачивания
  • Оцените материал:

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

Если Вы считаете, что материал нарушает авторские права либо по каким-то другим причинам должен быть удален с сайта, Вы можете оставить жалобу на материал.

Автор материала

  • На сайте: 5 лет и 2 месяца
  • Подписчики: 0
  • Всего просмотров: 4442
  • Всего материалов: 4

Московский институт профессиональной
переподготовки и повышения
квалификации педагогов

Дистанционные курсы
для педагогов

663 курса от 690 рублей

Выбрать курс со скидкой

Выдаём документы
установленного образца!

Учителя о ЕГЭ: секреты успешной подготовки

Время чтения: 11 минут

Минпросвещения подключит студотряды к обновлению школьной инфраструктуры

Время чтения: 1 минута

Приемная кампания в вузах начнется 20 июня

Время чтения: 1 минута

Минобрнауки создаст для вузов рекомендации по поддержке молодых семей

Время чтения: 1 минута

Онлайн-конференция о создании школьных служб примирения

Время чтения: 3 минуты

В России действуют более 3,5 тысячи студенческих отрядов

Время чтения: 2 минуты

В Курганской области дистанционный режим для школьников продлили до конца февраля

Время чтения: 1 минута

Подарочные сертификаты

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

Все материалы, размещенные на сайте, созданы авторами сайта либо размещены пользователями сайта и представлены на сайте исключительно для ознакомления. Авторские права на материалы принадлежат их законным авторам. Частичное или полное копирование материалов сайта без письменного разрешения администрации сайта запрещено! Мнение администрации может не совпадать с точкой зрения авторов.

Эти загадочные уравнения

Окружная научная конференция учащихся

Эти загадочные уравнения

Наумов Виктор, ученик 6 класса

ГБОУ СОШ ж.-д. ст. Погрузная

ГБОУ СОШ ж.-д. ст. Погрузная

с. Красный Яр, 2013 г.

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

Глава 1. Исторические сведения…………………………………….4-8

Глава 2. Эти загадочные уравнения………………………………..8-15

2.1. Что мне было известно про уравнение………………………..8-9

2.2. Решение простейших уравнений …………………..……

2.3. Что я нового узнал об уравнениях из школьных учебников……………………………………………………………11-15

Глава 3. Что я нового узнал об уравнении из дополнительной

3.1. Тайное становится явным (исследование)………….……… 15-18

3.2. Способы решения уравнений……………………….……….. 18-20

а) Решение уравнений с помощью правила нахождения неизвестной компоненты…………………………………………………….…………..18

б) Решение уравнений методом весов…………………………..18

в) Решение уравнений методом проб и ошибок………………..19

г) Решением уравнений методом перебора……………. 19

3.3 Математические фокусы…………………………………. 21-23

· Список использованной литературы……………………. 25

· Приложения. Задания для моих одноклассников

Введение. Актуальность проблемы

Уравнение – одно из важнейших понятий математики. В большинстве практических и научных задач, где какую-то величину нельзя непосредственно измерить или вычислить по готовой формуле, удается составить выражение, которым оно удовлетворяет. Так получают уравнение для определения неизвестной величины. Кто и когда придумал уравнения? Кто ввёл неизвестные величины? Как решаются уравнения? Эти проблемные вопросы, думаю, интересны многим, в том числе и мне. Я высказал гипотезу, что существуют какие-то определенные способы решения уравнений и поставил перед собой цель:

• изучить способы решения уравнений

• углубить математические знания по этой теме

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

• изучить литературу и систематизировать материал по данной теме

• исследовать свойства преобразования уравнений

• выявить основные доступные способы решения уравнений

• выработать навыки поисково-исследовательской работы

• систематизация изученного материала

• классификация уравнений по способам их решения

Объект исследования: Уравнения

Предмет исследования: Способы решения уравнений

Слова уравнение и равенство имеют один и тот же корень. Да, и на самом деле, уравнение – это равенство, содержащее неизвестную величину, значение которой нужно найти.

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

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

Но мне не захотелось ждать седьмого класса. Из дополнительной литературы я решил узнать новое, интересное и загадочное об уравнениях. Поэтому тема моей работы «Эти загадочные уравнения».

Глава 1.Исторические сведения

Кто и когда придумал первое уравнение?

Задачи, которые довольно просто мы сегодня можем решить при помощи уравнений, решали хорошо обученные науке мудрецы, чиновники и жрецы ещё в Древнем Вавилоне и Древнем Египте, Древнем Китае, Древней Индии и Древней Греции. Дошедшие до нас источники свидетельствуют, что древние учёные владели какими-то общими приёмами решения задач с неизвестными. Однако ни в одном папирусе, ни на одной глиняной табличке не дано описание приёмов. Авторы лишь изредка снабжают выкладки скупыми комментариями типа: «Смотри!», «Делай так!», «Ты верно нашёл!» В те времена не было ещё общепринятых теперь обозначений неизвестных буквами, а действий – знаками. Древние египтяне для удобства рассуждений придумали специальное слово, обозначающее неизвестное число, но так как у них не было ещё знаков равенства и знаков действий, то записывать уравнения они, конечно, не умели. Уравнения записывались словами.

Но и в «словесной форме» уравнения существенно облегчали решение задач.

Первым придумал обозначение для

неизвестных греческий математик

Диофант, живший в III веке.

Посредством уравнений, теорем

Он уйму всяких разрешал проблем.

И засуху предсказывал, и ливни –

Поистине его познанья дивны.

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

Во времена Диофанта языком науки был греческий. Но греки ещё не знали цифр и обозначали числа при помощи букв своего алфавита. Первые девять букв: обозначали числа от 1 до 9; следующие девять:обозначали числа от 10 до 90; наконец, следующие девять: обозначали числа от 100 до 900. чтобы не ошибиться и не принять число за слово, над буквами, обозначающими число, ставилась чёрточка. Букв в алфавите было 28, одна из них была особой – она обозначалась (сигма концевая), ставилась только в конце слов и числового значения не имела. Вот ею-то Диофант и стал обозначать неизвестную величину, так же как мы обычно обозначаем её буквой х.

Придумав это, Диофант стал двигаться дальше. И вместо слова «получится» или «равняется» стал писать — две первые буквы слова («исос» — равный). Диофант придумал знак и для вычитания – им служила буква (пси), только перевёрнутая. А без знака сложения Диофант обходился довольно просто – слагаемые записывал рядом друг с другом. Придумал Диофант и два основных приёма решения уравнений – перенос неизвестных в одну сторону уравнения и приведение подобных членов. С этими приёмами я познакомлюсь при изучении математики в этом году.

Первым руководством по решению уравнений, получившим широкую известность, стал труд арабского учёного IX века Мухаммеда Бен Мус аль -Хорезми. Об аль – Хорезми известно лишь, что он написал ряд трудов по астрономии и географии. И самое главное – он написал сочинение, которое по-арабски называется «Китаб аль-джебр валь-мукабала» (Книга о восстановлении и противопоставлении). Это сочинение оказало большое влияние на развитие математики в Европе, а само слово «аль-джебр», входившее в название книги, постепенно стало названием науки – алгебра. Алгебра – часть математики, которая изучает общие свойства действий над различными величинами и решение уравнений, связанных с этими действиями.

Аль-Хорезми одним из первых стал обращаться с уравнениями так, как торговец обращается с рычажными весами. Пусть, например, имеется равенство 5х – 16 = 20 – 4х. Считая, что оно задаёт равновесие некоторых грузов на чашах весов, торговец вправе заключить, что равенство не изменится, если он на обе чаши добавит одно и то же количество:

было 5х – 16 = 20 – 4х,

стало 5х = 36 – 4х.

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

было 5х = 36 – 4х.,

Опять из правой части равенства выражение 4х пропало, а в левой части оно восстановилось со знаком плюс. Из полученного простого равенства 9х = 36 уже легко вычислить, что х = 4.

Взгляд на уравнение как на равенство грузов на весах, на обеих чашах которых можно производить одинаковые преобразования, оказался очень плодотворным. Равные количества можно не только прибавлять к обеим частям уравнения или вычитать из них. Равенство не нарушится и тогда, когда обе части умножаются или делятся на одно и то же число (если оно не нуль). Главный принцип: если над равными количествами произвести одинаковые действия, то в результате снова получатся равные количества – стал своеобразной «волшебной палочкой», которую обнаружили вдумчивые читатели руководства аль-Хорезми.

Новый великий прорыв в решении уравнений связан с именем французского учёного XVI века Франсуа Виета. Он первым из математиков ввёл буквенные обозначения для неизвестных величин. А традицией обозначать неизвестные величины последними буквами латинского алфавита (х, у или z) мы обязаны соотечественнику Виета – Рене Декарту.

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

Уравнение – это золотой ключ, открывающий все математические сезамы» С. Коваль

Сезам – заклинание в арабской сказке, силой которого раскрывалась тайная сокровищница.

Глава 2. Эти загадочные уравнения.

2.1.Что мне было известно про уравнение

В учебнике «Математика – 4, часть 2» в разделе «Справочный материал» на странице 92 про уравнение можно прочитать следующее:

« Уравнение – это равенство, содержащее неизвестное число, которое надо найти. Неизвестное число в таком равенстве обозначают латинской буквой (например, х, а, b и др.). Решить уравнение – значит найти такое значение буквы, чтобы равенство стало верным. Например: 15 + х = 18 – уравнение. х = 3 – решение уравнения, так как 15 + 3 = 18 – верное равенство».

В учебнике Виленкина «Математика – 5», в п.10 на страницах 58-59 мы прочтём про уравнение почти то же самое.

Задача. На левой чашке весов лежит арбуз и гиря в 2 кг, а на правой чашке – гиря в5 кг. Весы находятся в равновесии. Чему равна масса арбуза?

Решение. Обозначим неизвестную массу арбуза буквой х. Так как весы находятся в равновесии, то должно выполняться равенство х + 2 = 5.

Нужно найти такое значение х, при котором выполняется это равенство. По смыслу вычитания таким значением будет разность чисел 5 и 2, то есть 3. Значит, масса арбуза равна 3 кг. Пишут: х = 3.

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

Например, равенство х + 2 = 5 верно при х = 3 и неверно при х = 4.

Уравнением называют равенство, содержащее букву, значение которой надо найти. Значение буквы, при котором из уравнения получается верное числовое равенство, называют корнем уравнения. (Например, корнем первого уравнения х + 2 = 5 является число3).

Решить уравнение – значит найти все его корни (или убедиться, что это уравнение не имеет ни одного корня).

Таким образом, уравнение характеризуется двумя свойствами, которые легко определить на глаз, по внешнему виду: 1) уравнение – это равенство; 2) в этом равенстве есть буква.

2.2. Решение простейших уравнений

Пример 1. Решим уравнение х + 37 = 85.

Решение. По смыслу вычитания неизвестное слагаемое равно разности суммы и другого слагаемого. Поэтому х = 85 – 37 , то есть х = 48.Число 48 является корнем уравнения х + 37 = 85, потому что 48 + 37 = 85.

Чтобы найти неизвестное слагаемое, надо из суммы вычесть известное слагаемое.

Пример 2. Решим уравнение у – 94 = 18.

Решение. По смыслу вычитания у является суммой чисел 18 и 94. Значит, у = 18 + 94, то есть у = 112.Число 112 является корнем уравнения у – 94 = 18, так как верно равенство у – 94 = 18.

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

Пример 3. Решим уравнение 91 – z = 36.

Решение. По смыслу вычитания число 91 является суммой z и 36 , то есть z + 36 = 91. Из этого уравнения находим неизвестное слагаемое: z = 91 – 36, то есть z = 55.Число 55 является корнем уравнения 91 – z = 36, так как верно равенство 91 – 55 = 36.

Чтобы найти неизвестное вычитаемое, надо из уменьшаемого вычесть разность.

Пример 4. Решим уравнение 35х = 175.

Решение. По смыслу деления имеем: х = 175 : 35, то есть х = 5. Число 5 является корнем уравнения 35х = 175, так как верно равенство 355 = 175.

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

Пример 5. Решим уравнение у : 8 = 16.

Решение. По смыслу деления у – произведение множителей 8 и 16. Значит, у = 168, то есть у = 128. Число 128 является корнем уравнения у : 8 = 16, так как верно равенство 128 : 8 = 16.

Чтобы найти неизвестное делимое, надо частное умножить на делитель.

Пример 6. Решим уравнение 252 : z = 21.

Решение. По смыслу деления число 252 – произведение множителей 21 и z, то есть 21z = 252. Применяя правило нахождения неизвестного множителя, находим: z = 252 : 21, то есть z = 12. Число 12 является корнем уравнения 252 : z = 21, так как верно равенство 252 : 12 = 21.

Чтобы найти неизвестный делитель, надо делимое разделить на частное.

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

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

2.3.Что я узнал об уравнениях из школьных учебников

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

Рассмотрю несколько заданий из учебника.

№ 000. Решите двумя способами уравнение:

а) (х + 98) + 14 = 169; б) (35 + у) – 15 = 31 .

Решу первое уравнение двумя способами:

1) сначала найду неизвестное слагаемое х + 98:

а потом найду слагаемое х: х = 155 – 98,

2) сначала упростим выражение, стоящее в левой части уравнения, используя сочетательное свойство сложения

а затем найду неизвестное слагаемое х:

Решу второе уравнение двумя способами:

1) сначала найду неизвестное уменьшаемое 35 + у:

а потом найду слагаемое у: у = 46 – 35,

2) сначала упростим выражение, стоящее в левой части уравнения, используя свойство вычитания: (35 + у) – 15 = 31,

а затем найду неизвестное слагаемое у:

№ 000. Решите уравнение:

а) 3х + 5х + 96 = 1568;

Используя распределительное свойство умножения относительно сложения, упрощу левую часть первого и третьего уравнения, а распределительное свойство умножения относительно вычитания для второго и получу более простые уравнения. а) 8х + 96 = 1568;

б) 208z – 1843 = 11469;

После этого найду неизвестные компоненты: слагаемое, вычитаемое и множитель а) 8х + 96 = 1568,

х = 144. Ответ: 144.

б) 208z – 1843 = 11469,

208z = 11469 + 1843,

у = 167. Ответ: 167.

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

Решу задачи из нашего учебника.

№ 000. Для школы купили 220 столов и стульев, причем стульев – в 9 раз больше, чем столов. Сколько столов и сколько стульев купили?

Решение. Пусть столов купили х штук, тогда стульев – 9х штук. Всего купили (х + 9х) штук, или 220. Получил уравнение: х + 9х = 220. Решу его. х + 9х = 220,

х = 22. Итак, купили 22 стола, тогда стульев – 229 = 198 .

№ 000(1). Первое число в 2,4 раза больше третьего, а второе число на 0,6 больше третьего числа. Найдите эти три числа, если их среднее арифметическое равно 2, 4.

Решение. Пусть третье число равно х, тогда 2,4х – первое число, а второе х + 0,6 . Среднее арифметическое этих чисел (2,4х + х + 0,6 + х) : 3 по условию задачи равно 2,4. Составлю уравнение и решу его.

(2,4х + х + 0,6 + х) : 3 = 2,4,

4,4х + 0,6 = 2,43,

1,5 –третье число, тогда 1,5 + 0,6 = 2,1 – второе число и 1,52,4 = 3,6 – первое число. Ответ: 3,6; 2,1 и 1,5.

Я провел маленькое исследование и убедился, что в учебнике «Математика – 5» достаточно много заданий, связанных с решением уравнений. Это задания первого вида: «Решите уравнение», «Угадайте корни уравнения» или «Найдите корни уравнения» и задания второго вида: «Решите задачу с помощью уравнения», «Придумайте задачу по уравнению», «Решите задачу».

372, 374, 375, 376, 379, 380, 395, 396, 439, 442, 445, 446, 462, 464, 482, 483, 485, 487, 490, 491, 496, 504, 505, 523, 524, 525 , 551, 568, 569, 570, 574, 576, 592, 593, 614, 615, 635, 639, 647, 660, 707, 727,

878, 1018, 1022, 1036, 1042, 1058, 1107, 1127, 1165, 1210, 1236, 1238, 1251, 1268, 1326, 1329, 1348, 1358, 1362, 1373, 1379, 1389, 1441, 1459, 1489, 1517, 1752, 1817.

373, 377, 397, 410, 440, 447, 484, 486, 489, 512, 526, 571,

572, 577, 578,579, 580, 581, 582, 583, 584, 585, 586, 587, 588, 589, 594, 602, 603, 607, 618, 619, 621, 622, 623, 624, 641, 643, 665, 669, 704, 705, 706, 726, 777, 837, 870, 871, 997, 1126, 1081, 1073, 1105,

1140, 1170, 1253, 1328, 1349, 1350, 1351, 1430,1460, 1461, 1462, 1463, 1490, 1491, 1558, 1559, 15 97, 1647, 1669, 1755, 1756, 1757, 1758, 1760, 1838, 1839, 1840.

То есть, 155 номеров всех заданий учебника, а их 1849, связаны с решением уравнений, то есть = 0, 083 829…. 8,4%. Но если учесть, что в данном учебнике первое задание, связанное с решением уравнения начинается с номера 372, то 1849 – 371 = 1478 и = 0, 10 487… 10%.

Теперь можно сделать вывод, что после изучения темы «Уравнение», каждое 10-е задание учебника требует умений решать уравнения. И это еще раз подчеркивает важность изучения темы «Уравнение»

Глава 3. Что я узнал об уравнении из дополнительной литературы.

3.1.Тайное становится явным (исследование)

Представьте, что в очень лёгком — практиче­ски невесомом — кошельке содержится какое-то количество монет одинакового достоинства. Как узнать, сколько монет в кошельке, не за­глядывая внутрь? Есть очень простой способ: положим кошелёк на одну чашу рычажных ве­сов и уравновесим его монетками на другой чаше. Сколько монет для этого потре­буется — столько же их и в кошельке.

В кошельке семь монет.

Весы — испытанный измерительный инструмент продавцов, химиков и аптекарей приходит на помощь и в чуть более сложном случае.

На левой чаше находящихся в равновесии весов лежат кошелёк с неизвестным числом монет и ещё 5 монет рядом с ним, а на правой чаше — 15 точно таких же монеток. Для того чтобы узнать, сколько монет в кошельке, снимем по 5 монет с обеих чаш — равновесие при этом не нарушится.

Следовательно, внутри кошелька 10 монет

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

Проведу исследования и узнаю, на самом ли деле значение х = 19, останется везде одинаковым.

1) Прибавлю к обеим частям уравнения число 12, получу новое уравнение 2х + 28 + 12 = 66 + 12,

воспользуюсь правилом, что два соседних слагаемых можно заменять их суммой, тогда 2х + 40 = 78,

2) Вычту из обеих частей уравнения 16,

чтобы найти неизвестное уменьшаемое (2х + 28) нужно к разности прибавить вычитаемое 2х + 28 = 50 + 16,

1) Умножу обе части уравнения на 3,

(2х + 28) 3= 663,

воспользуюсь правилом, что при умножении суммы на число можно на него умножить каждое слагаемое в отдельности и полученные результаты сложить. 2х 3 + 28 3 = 198, применю правило, что от перестановки множителей произведение не изменяется, и получу 3 2х + 84 = 198,

4) Разделю обе части уравнения на 2,

(2х + 28) : 2 = 66 : 2,

Чтобы разделить сумму на число, можно разделить каждое слагаемое и полученные результаты сложить 2х : 2 + 28 :2 = 66 : 2,

Вывод: значение корня не изменится, если :

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

— обе части уравнения умножить или разделить на число, неравное нулю.

Эти правила применяются для решения уравнений методом весов.

3.2. Способы решения уравнений.

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

а) Решение уравнений с помощью правила нахождения неизвестного компонента. Решение уравнений этим методом я подробно рассмотрел в главе 2.

б) Решение уравнений методом весов. Решение уравнений методом весов я рассматривал в главе «Исторические сведения».

Решу уравнения таким методом.

а) 4х – 9 = 2х + 11, в) 8х – 10 = 5х + 8,

из обеих частей уравнения из обеих частей уравнения

отнимем по 2х и прибавим 9, отнимем по 5х и прибавим 10,

получим уравнение получим уравнение

х = 20 : 2, х = 18 : 3,

Проверка. 4 10 – 9 = 2 10 + 11, Проверка. 8 6 – 10 = 56 + 8,

40 – 9 = 20 + 11, 48 – 10 = 30 + 8,

Ответ: х = 10. Ответ: х = 6.

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

в) Решение уравнений методом проб и ошибок

а) Решите уравнение х (х + 3) = 70.

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

Нам надо найти такое число х, чтобы значение выражения х(х + 3) было равно 70. Попробуем подставить в это выражение, например, х = 4: 4 (4 + 3) = 28. Мы видим, что выбранное число х слишком мало.

Возьмём теперь х = 6: 6 (6 + 3) = 54, и снова выбранное значение мало, хотя ближе к искомому. А следующая попытка оказывается удачной: при х = 7, имеем 7 (7 + 3) = 70. Значит, при х = 7 данное в условии равенство верно.

Казалось бы, уравнение уже решено, но это не так: ведь может оказаться, что буквенное выражение равно 70 при разных значениях букв. Поэтому нужны некоторые дополнительные рассуждения. Если бы число х было больше 7, то число х + 3 было больше 10, и тогда произведение оказалось бы больше 70. Точно так же число х не может быть меньше 7, иначе произведение будет меньше 70. Следовательно, среди натуральных чисел, есть только одно решение этого уравнения. Ответ: х = 7.

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

г). Решение уравнений методом перебора.

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

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

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

Например, глядя на уравнение х (х + 3) = 54, можно заметить, что его натуральные корни должны быть делителями числа 54. Значит, х может принимать лишь значения: 1, 2, 3,6, 9, 18, 27, 54. Подставляя эти числа вместо буквы х в уравнение, находим единственный корень х = 6.

Решим еще одно уравнение методом перебора.

Делители числа 20 – 1, 2, 4, 5, 10, 20.

Можно проанализировать и сделать вывод, что среди натуральных решений могут быть только числа большие 3, но меньшие 7. такими числами будут 4 и 5. проверим это.

х = 4, 4( 4 –– 4) = 4 13 = 12.

х = 5, 5(5 – 2)(7 – 5) = 52 2 = 20.

х= 5 – корень уравнения.

Если бы мы не делали анализа, то нам нужно было проверить все 6 чисел. А если число имеет много делителей, то перебор вариантов может оказаться слишком громоздким. Не всегда удаётся подобрать корни уравнения, и тем более доказать единственность решения. Может оказаться, что среди натуральных чисел решения нет, а среди других чисел оно есть.

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

3.3. Математические фокусы.

В этом разделе я хочу показать, как с помощью уравнений отгадывать математические загадки и показывать математические фокусы. Основной темой математических фокусов являются угадывание задуманных чисел или результатов действий над ними. Весь секрет фокусов в том, что «отгадчик» знает и умеет использовать особые свойства чисел, а задумавший этих свойств не знает. Математический интерес каждого фокуса и заключается в разоблачении его теоретических основ, которые в большинстве случаев довольно просты, но иногда бывают хитро замаскированы. Рассмотрю один из математических фокусов. Фокусник предложил каждому из публики задумать число. Потом он сказал: «Прибавьте к задуманному числу 5. Теперь из результата вычтите 2. Теперь к результату прибавьте 7». Потом фокусник спросил у желающих, какое число получилось. Услышав ответ, он немедленно объявил каждому, какое число тот задумал. Этот фокус легко разгадать, если умеешь составлять и решать уравнения. Слева запишу задания «фокусника», а справа — выражения, которые он мысленно при этом составляет.

Задумайте число. Обозначаю его буквой х. Прибавьте к нему число 5. Получается число х + 5.

Из результата вычтите 2. Получается (х + 5) – 2.

К результату прибавьте 7. Получается ((х + 5) – 2) + 7. Скажите ваш результат. Допустим, он равен 17.

Приравнивая составленное выражение ((х + 5) – 2) + 7 к 17, получаю уравнение. ((х + 5) – 2) + 7 = 17, Упростим левую часть уравнения, воспользовавшись свойствами сложения и вычитания: ((х + 5) – 2) + 7 = (х + (5 – 2)) + 7 = (х + 3) + 7 = х + (3 + 7) = х + 10. Уравнение теперь получилось совсем простое : х + 10 = 17. Задуманное число х = 17 – 10, х = 7. Такие фокусы нетрудно придумать и самому. Например, эти два фокуса я придумал сам.

· Задумайте число, утройте его. Прибавьте к результату 10, а затем вычтите 1.Скажите, сколько получилось? А я скажу, какое число вы задумали (нужно от названного числа отнять 9 и результат разделить на 3).

· Задумайте число, прибавьте к нему 15, затем вычтите 7 и прибавьте задуманное число. Скажите, сколько получилось? А я скажу, какое число вы задумали (нужно от названного числа отнять 8 и результат разделить на 2).

Удивительной для непосвященных кажется способность отгадывать задуманное другим число. Но если вы узнаете секреты математических фокусов, то сможете не только их показывать, но и придумывать новые. Вы просите товарища задумать любое число, затем отнять от него 1, результат умножить на 2, из произведения вычисть задуманное число и сообщить вам результат. Прибавив к нему число 2, вы отгадаете задуманное. Секрет фокуса становится понятен, если записать предложенные действия в виде алгебраического выражения (x-1)2 – x, где x – задуманное число. Раскрыв скобки, и выполнив действия, мы получим, что это выражение равно x-2. Если ответ равен 23, то задумано число 21. Чтобы угадать задуманное число нужно от результата отнять 2

1.Задумайте число. Умножьте его на 3. К полученному прибавьте полученное разделите на 3. Скажите, сколько получилось?

Решение. (3х + 6) : 3 = х + 2. Чтобы получить задуманное число, нужно от названного числа отнять 2.

2. Задумайте число. Умножьте его на 4. Из полученного вычтите 3. Полученное умножьте на 3, К полученному прибавьте 5. Полученное разделите на 4. К полученному прибавьте 1. Скажите, сколько получилось? Решение. ((4х – 3)3 + 5) : 4 + 1 = (12х – 9 + 5) : 4 + 1 = ( 12х – (9 – 5)) : 4 + +1 = (12х – 4) : 4 + 1 = 3х – 1 + 1 = 3х – (1 – 1) = 3х – 0 = 3х.

Чтобы получить задуманное число, нужно названное число разделить на 3.

3. Задумайте число. Прибавьте к нему 3. Умножьте полученное на 6. Отнимите от полученного 3. Вычтите из полученного результата задуманное число. Полученное разделите на 5. Скажите”, сколько получилось?

Решение (( х + 3) 6 – 3 – х ) : 5 = ( 6х + 18 – 3 – х) : 5 = ( 5х + 15) : 5 = х + 3 . Чтобы получить задуманное число, нужно от названного числа отнять 3.

4. Задумайте любое число. Удвойте его. К полученному прибавьте 3. Полученное число умножьте на задуманное. От полученного результата отнимите задуманное. Полученное разделите на удвоенное задуманное число. Скажите, сколько получилось? Чтобы получить задуманное число, надо от названного числа отнять 1.

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

Возраст и дата рождения

Порядковый номер месяца рождения нужно умножить на 100 и к получившемуся произведению прибавить число месяца, на которое приходится день рождения. Затем полученную сумму нужно умножить на 2 и к тому, что получится, прибавить 8. Результат нужно умножить на 5, к произведению прибавить 4 и получившуюся сумму умножить на 10. К тому, что получится, остается прибавить полное число лет (возраст), увеличенное на 4. Пусть каждый, выполнивший все эти вычисления, запишет на листочке бумаги свою фамилию, получившееся число и передаст листочек вам. Получив эти листочки, вы по ним каждому можете сказать его возраст и дату рождения. Придется поступать так: из получившегося числа, записанного на листочке, каждый раз вычитайте по 444 и разность разбивайте на грани справа налево по две цифры в каждой. Первая грань справа даст возраст, вторая — число и третья — порядковый номер месяца рождения.

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

Просмотрев все учебники по математики с 5 по 11 классы, я убедился в важности выбранной темы. В течение всех лет мы расширяем знания по теме «Уравнения». Я узнал решение более сложных уравнений с помощью правила

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

Конечно, эти названия мне ни о чём не говорят, но я теперь знаю, какие бывают уравнения, и что со временем я научусь их решать.

Мне было интересно узнать, что уравнения и математические фокусы, которые сейчас могут решать ученики 5-6 класса, в древности были по силам только математикам и мудрецам. И что, используя известные мне свойства сложения и умножения, я смог провести исследования и доказал на простых уравнениях, что значение корня не изменится, если:

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

— обе части уравнения умножить или разделить на число, неравное нулю.

Я научился решать более сложные уравнения, используя 4 способа, о них я прочитал в дополнительной литературе. При выполнении работы мне пришлось решить более 120 уравнений. Во время недели математики я показал математические фокусы в 5-х классах и в 3 – 4 классах.

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

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

Список использованной литературы

общеобразовательных учреждений. // М.: Мнемозина, 2005.

2. , БеленковаЕ. Ю. Математика 5 класс.

Задания для обучения и развития учащихся.// М.: Интеллект-

3. Математика: Учебник-собеседник для 5 – 6 классов средних школ//

Просвещение, 1989. (Б-ка учителя математики), стр.187

4. , и др. Математика. Учебник для 4 класса нач.

Школы в 2 ч. Ч. 2. (Второе полугодие) – М.: Просвещение, 2005.

5. Энциклопедический словарь юного математика //

Сост. . М.: Педагогика, 1985, стр.345

6. Энциклопедия для детей. Т. 11. Математика // Ред. коллегия:

М. Аксёнова, В. Володин и др. – М.: Аванта, 2005, стр.237

источники:

http://infourok.ru/urok-sposobi-resheniya-uravneniy-3873746.html

http://pandia.ru/text/78/386/20944.php

Задача 1

Напишите функцию what_weather() (англ. «какая погода?»), которую затем будете использовать в коде Анфисы:

  • Выполните HTTP-запрос, поместив вызов функции get() внутрь блока try.
  • Значения URL и параметров получите из функций make_url() (в неё нужно передать нужный город как аргумент city) и make_parameters().
  • При «выбрасывании» исключения типа requests.ConnectionError (от англ. «ошибка соединения») — функция what_weather() должна возвращать сообщение об ошибке '<сетевая ошибка>'.
  • Если код HTTP-ответа равен 200 (всё хорошо), верните из функции текст ответа. В противном случае функция должна вернуть строку '<ошибка на сервере погоды>'.

Код:

import requests

cities = [
    'Омск',
    'Калининград',
    'Челябинск',
    'Владивосток',
    'Красноярск',
    'Москва',
    'Екатеринбург'
]

def make_url(city):
    # в URL задаём город, в котором узнаем погоду
    return f'http://wttr.in/{city}'

def make_parameters():
    params = {
        'format': 2,  # погода одной строкой
        'M': ''  # скорость ветра в "м/с"
    }
    return params

def what_weather(city):
    # Напишите тело этой функции.
    # Не изменяйте остальной код!
    try:
        request = requests.get(make_url(city), params=make_parameters())
        #print(request.status_code)
        if request.status_code == 200: return request.text
        else: return '<ошибка на сервере погоды>'
    except requests.ConnectionError : return '<сетевая ошибка>'

print('Погода в городах:')
for city in cities:
    print(city, what_weather(city))

Результат:

Погода в городах:
Омск ? ?️-7°C ?️↖4.2 m/s

Калининград ⛅️ ?️+2°C ?️↖6.1 m/s

Челябинск ? ?️-3°C ?️↘6.1 m/s

Владивосток ☀️ ?️-3°C ?️↓7.2 m/s

Красноярск ⛅️ ?️-10°C ?️→8.3 m/s

Москва ☀️ ?️-2°C ?️↑4.2 m/s

Екатеринбург ? ?️-2°C ?️↘4.2 m/s

Задача 2

Это задание — финальное.

В нём вы сделаете Анфису мастером на все руки.

Анфиса будет знать всё про ваших друзей — где они, сколько у них времени, и какая у них погода.В список запросов queries в функции runner() добавлены новые запросы про погоду:

  • Коля, как погода?
  • Соня, как погода?
  • Антон, как погода?

Научите Анфису отвечать на вопросы такого вида.

Для этого:

  1. Добавьте в функцию process_friend() обработку ещё одного запроса 'как погода?'. Для получения ответа на этот вопрос используйте значение city — это город, в котором живёт друг.
  2. Затем вызовите функцию what_weather() — вы написали на прошлом уроке почти такую же. Она уже доступна в коде этого задания.
  3. Верните результат выполнения этой функции как результат process_friend().

Код:

import datetime as dt
import requests

DATABASE = {
    'Сергей': 'Омск',
    'Соня': 'Москва',
    'Алексей': 'Калининград',
    'Миша': 'Москва',
    'Дима': 'Челябинск',
    'Алина': 'Красноярск',
    'Егор': 'Пермь',
    'Коля': 'Красноярск',
    'Артём': 'Владивосток',
    'Петя': 'Михайловка'
}

UTC_OFFSET = {
    'Москва': 3,
    'Санкт-Петербург': 3,
    'Новосибирск': 7,
    'Екатеринбург': 5,
    'Нижний Новгород': 3,
    'Казань': 3,
    'Челябинск': 5,
    'Омск': 6,
    'Самара': 4,
    'Ростов-на-Дону': 3,
    'Уфа': 5,
    'Красноярск': 7,
    'Воронеж': 3,
    'Пермь': 5,
    'Волгоград': 4,
    'Краснодар': 3,
    'Калининград': 2,
    'Владивосток': 10
}


def format_count_friends(count_friends):
    if count_friends == 1:
        return '1 друг'
    elif 2 <= count_friends <= 4:
        return f'{count_friends} друга'
    else:
        return f'{count_friends} друзей'


def what_time(city):
    offset = UTC_OFFSET[city]
    city_time = dt.datetime.utcnow() + dt.timedelta(hours=offset)
    f_time = city_time.strftime("%H:%M")
    return f_time


def what_weather(city):
    url = f'http://wttr.in/{city}'
    weather_parameters = {
        'format': 2,
        'M': ''
    }
    try:
        response = requests.get(url, params=weather_parameters)
    except requests.ConnectionError:
        return '<сетевая ошибка>'
    if response.status_code == 200:
        return response.text.strip()
    else:
        return '<ошибка на сервере погоды>'


def process_anfisa(query):
    if query == 'сколько у меня друзей?':
        count_string = format_count_friends(len(DATABASE))
        return f'У тебя {count_string}'
    elif query == 'кто все мои друзья?':
        friends_string = ', '.join(DATABASE.keys())
        return f'Твои друзья: {friends_string}'
    elif query == 'где все мои друзья?':
        unique_cities = set(DATABASE.values())
        cities_string = ', '.join(unique_cities)
        return f'Твои друзья в городах: {cities_string}'
    else:
        return '<неизвестный запрос>'


def process_friend(name, query):
    if name in DATABASE:
        city = DATABASE[name]
        if query == 'ты где?':
            return f'{name} в городе {city}'
        elif query == 'который час?':
            if city not in UTC_OFFSET:
                return f'<не могу определить время в городе {city}>'
            time = what_time(city)
            return f'Там сейчас {time}'
        elif query == 'как погода?':
            return what_weather(city)
            
        else:
            return '<неизвестный запрос>'
    else:
        return f'У тебя нет друга по имени {name}'


def process_query(query):
    tokens = query.split(', ')
    name = tokens[0]
    if name == 'Анфиса':
        return process_anfisa(tokens[1])
    else:
        return process_friend(name, tokens[1])


def runner():
    queries = [
        'Анфиса, сколько у меня друзей?',
        'Анфиса, кто все мои друзья?',
        'Анфиса, где все мои друзья?',
        'Анфиса, кто виноват?',
        'Коля, ты где?',
        'Соня, что делать?',
        'Антон, ты где?',
        'Алексей, который час?',
        'Артём, который час?',
        'Антон, который час?',
        'Петя, который час?',
        'Коля, как погода?',
        'Соня, как погода?',
        'Антон, как погода?'
    ]
    for query in queries:
        print(query, '-', process_query(query))


runner()

Результат:

Анфиса, сколько у меня друзей? - У тебя 10 друзей
Анфиса, кто все мои друзья? - Твои друзья: Сергей, Соня, Алексей, Миша, Дима, Алина, Егор, Коля, Артём, Петя
Анфиса, где все мои друзья? - Твои друзья в городах: Омск, Калининград, Михайловка, Красноярск, Москва, Челябинск, Владивосток, Пермь
Анфиса, кто виноват? - <неизвестный запрос>
Коля, ты где? - Коля в городе Красноярск
Соня, что делать? - <неизвестный запрос>
Антон, ты где? - У тебя нет друга по имени Антон
Алексей, который час? - Там сейчас 15:50
Артём, который час? - Там сейчас 23:50
Антон, который час? - У тебя нет друга по имени Антон
Петя, который час? - <не могу определить время в городе Михайловка>
Коля, как погода? - ⛅️ ?️-10°C ?️→7.2 m/s
Соня, как погода? - ☀️ ?️-3°C ?️↑4.2 m/s
Антон, как погода? - У тебя нет друга по имени Антон

Сегодня говорим про обработку ошибок и отказоустойчивость программ. Это продолжение статьи про исключения, но применительно к нашему проекту под кодовым названием «Воруй, убивай, цепи Маркова». Мы учимся забирать текст с чужих сайтов и генерировать на основе этого текста собственные. 

В предыдущих версиях у нас были идеальные условия: заготовленный список веб-страниц одинакового формата, с одинаковой кодировкой и одинаковой разметкой заголовков. 

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

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

Что делаем

Идея для сегодняшнего проекта — спарсить часть текста и заголовков с сайта «Коммерсанта» для учебных целей. Потом мы их отдадим нашему алгоритму на цепях Маркова и получим новые тексты в духе «Коммерсанта».

Мы выбрали «Коммерсант» из-за его удобной структуры URL-адреса. Вот как выглядят типичные адреса новостей оттуда:

https://www.kommersant.ru/doc/4815427

https://www.kommersant.ru/doc/4803922

Видно, что каждая новость или статья просто опубликована под каким-то своим номером и есть ощущение, что эти номера идут по порядку. Поэтому сделаем так:

  1. Выберем стартовый номер у новости.
  2. Будем отнимать от этого номера единичку, подставлять его в адрес и смотреть на результат.
  3. Если страница откроется, сохраним заголовок и текст новости, а если нет — пойдём дальше.
  4. Повторим это 500 раз и посмотрим, что получится.

Адаптируем старый проект под новую задачу

Чтобы не писать всё с нуля, мы возьмём наш парсер из прошлого проекта и выкинем оттуда громадный кусок с массивом URL-адресов.

# подключаем urlopen из модуля urllib
from urllib.request import urlopen

# подключаем библиотеку BeautifulSout
from bs4 import BeautifulSoup

# открываем текстовый файл, куда будем добавлять заголовки
file = open("zag.txt", "a")

# перебираем все адреса из списка
for x in url:
    # получаем исходный код очередной страницы из списка
    html_code = str(urlopen(x).read(),'utf-8')
    # отправляем исходный код страницы на обработку в библиотеку
    soup = BeautifulSoup(html_code, "html.parser")

    # находим название страницы с помощью метода find()
    s = soup.find('title').text

    # выводим его на экран
    print(s)

    # сохраняем заголовок в файле и переносим курсор на новую строку
    file.write(s + '. ')

# закрываем файл
file.close()

Теперь добавим в этот код нашу логику. Для этого мы пропишем общую часть URL-адреса, запомним стартовый номер новости, а потом в цикле будем вычитать из него единичку и смотреть, что получилось.

👉 Мы вычитаем единицы из стартового числа, чтобы получить доступ к предыдущим материалам, потому что у новых статей номер в адресе «Коммерсанта» всегда больше, чем у старых. Ещё мы теперь ищем заголовок самой новости, а не всей страницы, потому что в заголовке страницы много лишнего текста.

# подключаем urlopen из модуля urllib
from urllib.request import urlopen

# подключаем библиотеку BeautifulSout
from bs4 import BeautifulSoup

# общая часть URL-адреса
url = "https://www.kommersant.ru/doc/"
# стартовый номер, с которого начинаем парсинг
start_id = 4804129

# открываем  файл, куда будем добавлять заголовки
file_zag = open("komm_zag.txt", "a")
# открываем  файл, куда будем добавлять текст
file_text = open('komm_text.txt','a')

# перебираем предыдущие 500 адресов
for x in range(0,500):

    # формируем новый адрес из общей части и номера материала
    # на каждом шаге номер уменьшается на единицу, чтобы обратиться к более старым материалам
    work_url = url + str(start_id - x)

    # получаем исходный код очередной страницы из списка
    html_code = str(urlopen(work_url).read(),'utf-8')
    # отправляем исходный код страницы на обработку в библиотеку
    soup = BeautifulSoup(html_code, "html.parser")

    # находим заголовок материала с помощью метода find()
    s = soup.find('h1').text
    # выводим его на экран
    print(s)

    # сохраняем заголовок в файле и переносим курсор на новую строку
    file_zag.write(s + '. ')

    # находим все абзацы с текстом
    content = soup.find_all('p')
    # перебираем все найденные абзацы
    for item in content:
        # сохраняем каждый абзац в другой файл
        file_text.write(item.text + ' ')
        print(item.text)

# закрываем файл
file.close()

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

Простая работа с исключениями

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

Простая работа с исключениями

Находим только текст новости

Чтобы не собирать со страницы все абзацы, а брать только нужный текст, давайте посмотрим на структуру любой подобной страницы в инспекторе:

Простая работа с исключениями

В коде видно, что содержимое статьи помечается абзацем с классом «b-article__text» , значит, нам нужно забирать со страницы только абзацы с таким классом. Поменяем нашу команду на такое:

content = soup.find_all('p', class_ = "b-article__text")

Теперь мы найдём на странице только те абзацы, у которых будет нужный нам класс, а остальные проигнорируем.

Добавляем исключение для обработки заголовков

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

Мы уже рассказывали про то, что такое исключения и как они помогают программистам. Если коротко, то исключения позволяют обработать заранее известную ошибку так, чтобы программа не прекращала работу, а продолжала делать что-то своё.

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

  1. Мы добавляем обработчик исключений к команде нахождения заголовка.
  2. Если всё нашлось нормально и ошибки нет, то обработчик будет сидеть тихо и ничего не делать.
  3. Если после команды поиска заголовка случилась ошибка, то мы сразу прекращаем дальнейшие команды и переходим к следующему адресу.

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

Минус у этого способа тоже есть: мы не знаем, что именно произошло, и реагируем на всё одинаково. В простом учебном проекте это можно сделать, а в настоящем коммерческом коде — нет. Там нужно чётко всегда знать, что за ошибка случилась, чтобы проект более гибко и правильно реагировал на происходящее.

# включаем обработчик исключений для команды поиска
    try:
        # находим название страницы с помощью метода find()
        s = soup.find('h1').text
    # если случилась любая ошибка
    except Exception as e:
        print("Заголовок не найден")
        # прерываем этот шаг цикла и переходим к следующему
        continue

Обрабатываем ситуацию, когда страница не найдена

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

Простая работа с исключениями

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

Чтобы эта ошибка не мешала работать программе, снова добавим исключение с обработкой любой ошибки. Как только на этой команде встретили ошибку, то делаем как и раньше — бросаем всё и начинаем цикл с нового адреса.

# включаем обработчик исключений для запроса содержимого страницы
    try:
        # получаем исходный код страницы в виде байт-строки
        html_code = urlopen(work_url).read()
    # если случилась любая ошибка
    except Exception as e:
        print('Страница не найдена')
        # прерываем этот шаг цикла и переходим к следующему
        continue

Так, шаг за шагом, мы отлавливаем все ошибки и получаем код, который сможет обработать хоть 50 000 страниц и не упасть во время работы. В этом и есть смысл исключений — сделать так, чтобы программа продолжала работать, когда что-то пошло не по плану. Главное — предусмотреть возможные нештатные ситуации.

# подключаем urlopen из модуля urllib
from urllib.request import urlopen

# подключаем библиотеку BeautifulSout
from bs4 import BeautifulSoup

# общая часть URL-адреса
url = "https://www.kommersant.ru/doc/"
# стартовый номер, с которого начинаем парсинг
start_id = 4804129

# открываем  файл, куда будем добавлять заголовки
file_zag = open("komm_zag.txt", "a")
# открываем  файл, куда будем добавлять текст
file_text = open('komm_text.txt','a')

# перебираем предыдущие 500 адресов
for x in range(0,500):

    # формируем новый адрес из общей части и номера материала
    # на каждом шаге номер уменьшается на единицу, чтобы обратиться к более старым материалам
    work_url = url + str(start_id - x)

    # включаем обработчик исключений для запроса содержимого страницы
    try:
        # получаем исходный код страницы в виде байт-строки
        html_code = urlopen(work_url).read()
    # если случилась любая ошибка
    except Exception as e:
        print('Страница не найдена')
        # прерываем этот шаг цикла и переходим к следующему
        continue

    # отправляем исходный код страницы на обработку в библиотеку
    soup = BeautifulSoup(html_code, "html.parser")

    # включаем обработчик исключений для команды поиска
    try:
        # находим название страницы с помощью метода find()
        s = soup.find('h1').text
    # если случилась любая ошибка
    except Exception as e:
        print("Заголовок не найден")
        # прерываем этот шаг цикла и переходим к следующему
        continue
    # выводим его на экран
    print(s)

    # сохраняем заголовок в файле и переносим курсор на новую строку
    file_zag.write(s + '. ')

    # находим все абзацы с текстом новости
    content = soup.find_all('p', class_ = "b-article__text")
    # перебираем все найденные абзацы
    for item in content:
        # сохраняем каждый абзац в другой файл
        file_text.write(item.text + ' ')
        print(item.text)

# закрываем файл
file.close()

Что дальше

У нас есть 500 заголовков и столько же новостей — можно собрать новости в стиле «Коммерсанта». Если не знаете, как это сделать, — почитайте нашу статью про генератор на цепях Маркова

Здравствуйте все! Прохожу бесплатный курс на Яндекс Практикуме по Питону и застрял на одной задаче. Прошу не пугаться, что ниже такой длинный код, на самом деле тут всё просто, изменения нужны небольшие, только я уже 2 часа не могу понять, почему код не работает )). Просмотрел уже не один раз, ну ведь должен он работать )).

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

Анфиса, сколько у меня друзей? — У тебя 7 друзей
Анфиса, кто все мои друзья? — Твои друзья: Сергей, Соня, Миша, Дима, Алина, Егор, Коля
Анфиса, где все мои друзья? — Твои друзья в городах: Омск, Москва, Красноярск, Пермь, Челябинск
Анфиса, кто виноват? — <неизвестный запрос>
Коля, ты где? — Коля в городе Красноярск
Соня, что делать? — <неизвестный запрос>
Антон, ты где? — У тебя нет друга по имени Антон

Уберу в спойлер формулировку задания:

2.
А. Напишите функцию process_friend(name, query), принимающую имя друга name и запрос query.

  • Если друга с указанным именем ‘Н’ нет в списке, то функция должна вернуть сообщение об ошибке У тебя нет друга по имени Н.
  • Если запрос — «ты где?», то функция должна вернуть сообщения ‘Н в городе Г’, где Г определяется по данным словаря DATABASE.
  • Если запрос не «ты где?», а какой-то другой, то функция должна вернуть сообщение об ошибке <неизвестный запрос>.

Б. Допишите функцию process_query(). Если запрос начинается не с «Анфиса», а с другого имени, то вызовите функцию process_friend(name, query), передав в неё имя друга и тело запроса. И верните результат выполнения этой функции.
В. Добавьте в список queries новые запросы вида:

  • Коля, ты где?
  • Соня, что делать?
  • Антон, ты где?

Что-то неправильно написано в функции process_friend или в функции process_query. У меня получается такой результат (последние строки почему-то выводятся все в одну строку):

Анфиса, сколько у меня друзей? — У тебя 7 друзей
Анфиса, кто все мои друзья? — Твои друзья: Сергей, Соня, Миша, Дима, Алина, Егор, Коля
Анфиса, где все мои друзья? — Твои друзья в городах: Омск, Москва, Красноярск, Пермь, Челябинск
Анфиса, кто виноват?Коля, ты где?Соня, что делать?Антон, ты где? — <неизвестный запрос>

А вот код:

Python:

DATABASE = {
    'Сергей': 'Омск',
    'Соня': 'Москва',
    'Миша': 'Москва',
    'Дима': 'Челябинск',
    'Алина': 'Красноярск',
    'Егор': 'Пермь',
    'Коля': 'Красноярск'
}


def format_count_friends(count_friends):
    if count_friends == 1:
        return '1 друг'
    elif 2 <= count_friends <= 4:
        return f'{count_friends} друга'
    else:
        return f'{count_friends} друзей'


def process_anfisa(query):
    if query == 'сколько у меня друзей?' or query == 'колько у меня друзей?': # был какой-то глюк тренажера и пришлось добавить фразу 'колько у меня друзей?' 
        count_string = format_count_friends(len(DATABASE))
        return f'У тебя {count_string}'
    elif query == 'кто все мои друзья?':
        friends_string = ', '.join(DATABASE.keys())
        return f'Твои друзья: {friends_string}'
    elif query == 'где все мои друзья?':
        unique_cities = set(DATABASE.values())
        cities_string = ', '.join(unique_cities)
        return f'Твои друзья в городах: {cities_string}'
    else:
        return '<неизвестный запрос>'

    
def process_query(query):
    tokens = query.split(', ')
    name = tokens[0]
    if name == 'Анфиса':
        query = query.strip('Анфиса, ')
        return process_anfisa(query)
    else:
        query = query.strip('Коля, ')
        return process_friend(name, query)
        
def process_friend(name, query):
    if name in DATABASE:
        if query == 'ты где?':
            city = DATABASE[name]
            return f'{name} в городе {city}'
        else:
            return '<неизвестный запрос>'
    else:
        return f'У тебя нет друга по имени {name}'
    
        
def runner():
    queries = [
        'Анфиса, сколько у меня друзей?',
        'Анфиса, кто все мои друзья?',
        'Анфиса, где все мои друзья?',
        'Анфиса, кто виноват?'
        'Коля, ты где?'
        'Соня, что делать?'
        'Антон, ты где?'
    ]
    
    for query in queries:
        print(query + ' - ' + process_query(query))


runner()

Или как мы потеряли 120 000 рублей (60 000 каждый) на обучении.

Update 1:

Мы созвонились с Дианой, из команды Практикума.
В звонке нам удалось во всем разобраться и решить вопрос. Хочется поблагодарить всех людей, которые помогли нам в этой проблеме! Ребята, вы — сила 💪
В ближайшее время мы, наконец, получим дипломы. Когда это случится, сообщу в следующем апдейте.
Также нам предложили скидку 50% на два курса или 100% на один. Выбрали второе (для жены). Если в этот раз курс пройдет успешно и Яндекс действительно сделал работу над ошибками, то ждите похвальную статью уже от жены 💕

Вступление. Немного о нас.

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

Учились мы на одном потоке примерно полгода. По началу было просто — всё как по маслу, и даже нравилось. Курсы с 3 по 6 (6 курс — диплом) уже тяжеловато, так как совмещали работу и учёбу. Работаем мы в одной крупной компании техническими специалистами, и, конечно же, хотим двигаться дальше. Начитавших хваленых отзывов в интернете и по советам коллег двинулись в Практикум на тестировщика.

Формат учёбы

Учёба происходила в формате спринтов с мягким и жестким дедлайном. Нам предоставили доступ в Slack, где распределили в группу с куратором и парой наставников.

Всю учёбу можно поделить на 3 блока:

  • Тренажер — он же портал Яндекс.Практикум.
  • Slack — с наставниками, вебинарами и флудилкой.
  • Ревьюверы — с которыми особо нет взаимодействий (помимо проектов), но они играют ключевую роль.

Тренажер

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

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

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

Slack

Толку от наставников было весьма мало, так как к вебинару они приходили чаще всего не подготовленными. Как оказалось, по причине наличия другой «основной» работы. На вопросы в группе Slack тебе отвечали в течение дня — и это в лучшем случае, иногда вообще забывали ответить.

Ревьюверы

Основная боль. Бардак и хаос.

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

Время на проверку у ревьювера: ~96 часов, которое почти регулярно нарушается. Ревьюверы разные: один может не заметить ошибку в работе, а другой попросить сделать как-то иначе. В нашем потоке ревьюверы требовали от тебя того, что даже не было в тренажере или вебинаре. Опять обоснования: «А что вы хотели? Так есть и на реальной работе. Заказчик может потребовать выполнить работу другим образом». Мы поняли, это удобная отговорка от не налаженного процесса между разными отделами.

Финальная часть. Диплом.

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

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

Первую дипломную работу проверяли долго. ОЧЕНЬ. ДОЛГО. Нервы у жены не выдержали, поэтому она написала в паблик потока. Куратор ответил в ЛС. Прикладываю скриншоты переписки (хорошо, что сохранили, ибо аккаунты в Slack уже удалены).

Куратор сливает работу ЧУЖОГО студента. Практически полностью готовый диплом. Спустя пару дней нам приходит ответ, что мы списали работу друг у друга 🤦‍♂

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

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

Какие доводы приводит Практикум.

Мой ответ был тотально проигнорирован и на просьбу детально предоставить доказательства — игнор.

Жалоба на почту Практикум не привела к результату.
Ответ от жены был также проигнорирован.

Альтернативный диплом был выполнен самостоятельно. Это касается меня и моей жены. Мы в глаза не видели работы друг друга.

Увы, потраченное время и нервные клетки уже не вернуть.

TL;DR

Я с женой заплатили за курсы тестировщика в Яндекс.Практикум 120 тысяч рублей (60 каждый). Учёба была на отвратительном уровне, но мы продолжали учиться. Куратор слил работу другого студента. После сдачи дипломного проекта меня и мою жену обвинили в списывании (дважды). На просьбу детально предоставить доказательства и пересмотреть дело — игнор. Нас отчислили без возврата денег.

Предисловие

Недавно для себя открыл сервис Яндекса — Практикум. Мне очень понравилась идея, и я прошёл серию бесплатных уроков курса Python beckend-разработчик. Бесплатный курс называется «Основы Python»

Хоть я и не новичок в Python-е, но курс для меня оказался очень полезным. Он учит не только основам программированию, но и правильному подходу к работе для новичков.

У меня отец хотел научиться. Ему, между прочим, 75 лет. Он попробовал, но у него не получилось. Камнем преткновения оказалось развернуть и пользоваться у себя на компьютере какую-нибудь IDE. Он начал изучать по книжке, а в книжке ничего про это не было.

Ему просто хотелось попрактиковаться программированию, понять вообще что это такое, приобщиться к новому опыту. И самое главное, просто понять, что это за программирование такое. Я разбираться в новом и непонятном редакторе IDE ему не хотелось.

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

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

Что я хочу сделать

Курс Яндекса устроен таким образом, что тебя как будто берут стажёром в IT-компанию. Там тебе дают в разработку небольшой проект, и ты постепенно его разрабатываешь начиная с самых азов и довольно глубоко.

Всё это происходит онлайн и соответственно весь этот проект остаётся на серверах Яндекса. А мне хочется получить этот проект, сначала, локально, затем, с ним поэкспериментировать и, наконец, выложить на Github-е.

Установка Python, Django и IDE PyCharm

У меня стоит совершенно новая система UBUNTU MATE 20.04, и все установки и настройки буду описывать именно для неё.

Установка Python

На самом деле в Ubuntu 20.04 уже стоит Python 3.8.2 и его устанавливать не надо. Но в будущем потребуется устанавливать различные модули, а для этого нужен менеджер пакетов pip.

sudo apt-get install python3-pip

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

Установка Django

Проект курса Яндекса использует Framework Django, а значит установить его нужно обязательно.

Вообще, насколько мне известно, установить Django можно тремя разными способами: в проект, текущему пользователю и в систему.

При установке локальному пользователю, консольные команды Django не попадают в пути по умолчанию $PATH, и вызывать их приходиться прописывая полный путь: ‘~/.local/bin/django-admin.

Часто вызывать такую команду не очень удобно, поэтому я решил установить Django в систему:

sudo python3 -m pip install django --system

Установка PyCharm

Конечно PyCharm не единственная IDE для разработки на Python, но я к ней уже привык.

Установить бесплатную версию PyCharm можно командой:

sudo snap install pycharm-community --classic

При первом запуске PyCharm можно выбрать светлую или тёмную тему. Я выбираю тёмную тему.

Резюме

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

sudo apt-get install python3-pip # Установка # менеджера пакетов Питона sudo python3 -m pip install django --system # Установка Django sudo snap install pycharm-community --classic # Установка # PyCharm

Знакомство с Django

Знакомство с Django на курсе Яндекс начинается уже с подготовленного проекта.

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

Однако, мне нужно, чтобы всё заработало на моём локальном компьютере. А для этого нужно создать проект. Проект будет называться «Anfisa for Friends». Это аналог Алисы Яндекса.

Создание Python-проекта в PyCharm

Сперва наперво, мы создаём пустой проект со следующими установками:

Настройки проекта PyCharm

Создание Django-проекта

Теперь заходим в директорию нашего проекта и создаем каркас приложения на Django:

django-admin startproject anfisa4friends

В результате получаем структуру нового проекта:

Структура Django-проекта

Структура получилась не совсем такая, как в курсе Яндекса.

Во-первых, нужно было запустить ‘django-admin’ не в папке проекта, а в папке проектов. Я это переделаю.

Запуск Django-проекта

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

python3 manage.py runserver

Теперь нужно перейти в браузер и набрать в строке адреса: http://127.0.0.1:8000/.

Если всё работает, то в окне браузера должно появиться следующее:

Успешный запуск Django

Ура! Ура! Ура-а-а-а! Всё работает!

Резюме

Как выяснилось для работы с Django нет необходимости сначала создавать Python-проект.

Для знакомства с Django мы используем две команды:

django-admin startproject anfisa4friends # создание проекта python3 manage.py runserver # запуск проекта

Проверить работу сайта проекта можно по адресу: http://127.0.0.1:8000/

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

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

python3 manage.py migrate # Обновление базы данных проекта

И так, у нас есть каркас Django-проекта, который работает, и что-то там печатает в окне браузера.

Знакомство с Git

Однако, нам хотелось бы, чтобы проект печатал не абы какой текст, а наш текст. К тому же в терминале, при запуске проекта, выскакивает предупреждение, суть которого в том, что проект может работать неправильно, до запуска python3 manage.py migrate.

Чтобы всё это исправить, нужно внести изменения. Самый простой способ это сделать — это удалить лишние файлы, а содержимой оставшихся файлов заменить содержимым файлов из курса Яндекс практикума.

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

Для контроля всех изменений в проекте, и особенно изменений в файле с одинаковым названием, существует система контроля версий Git.

Установка Git

В моей версии Ubuntu Git не установлен по умолчанию. Установить Git можно следующей командой:

sudo apt install git # Установка утилиты Git

Создание git-репозитория

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

git init # Создания git-репозитория

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

git status

Если репозиторий успешно создан, мы увидим следующий вывод в терминале:

Команда git status

Сообщение «Ещё нет коммитов» говорит о том, что в репозитории ещё ничего не сохранено. А красным выделены файлы и папки, которые могут быть сохранены.

Настройка git-репозитория

Для правильной работы git-репозитория требуются учётные данные. Они задаются следующими командами.

git config --global user.email "deviur@yandex.ru" git config --global user.name "Deviur"

Добавляем файл .gitignore

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

Какие файлы исключить с .gitignore

Эти папки нам не нужно сохранять в проект.

Для того чтобы исключить папки и файлы из проекта используется файл ‘.gitignore’. В этот файл записывается всё, что не нужно включать в проект.

.idea/ anfisa4friends/__pycache__/

Сохранение текущего состояния проекта

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

Чтобы добавить все доступные файлы используется следующая команда:

git add . # добавить файлы для сохранения в git-репозиторий

Теперь вывод `git status` показывает все изменения, которые произошли с файлами, которые мы добавили.

Результат команды git status

Как видно, коммитов ещё нет. Это значит текущее состояние мы ещё не сохранили. Мы только отметили, какие изменения и какие файлы сохранить.

Теперь сохраняем текущее состояние проекта в репозиторий:

git commit -m'Start Django-project'

Ура! Проект сохранён в git-репозитории. Теперь он имеет следующую структуру.

k

Резюме

Для начала работы с Git и сохранения нашего проекта мы использовали следующие команды:

sudo apt install git # установка Git git init # создание git-репозитория git status # проверка состояние git-репозитория # Настройка учётных данных git-репозитория: git config --global user.email "deviur@yandex.ru" git config --global user.name "Deviur" git add . # добавить файлы для сохранения в git-репозиторий git commit -m'Start Django-project' # сохранить проект # в репозиторий

Пишем проект anfisa4friends

Минимальные изменения

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

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

  1. Удаляем все файлы, которых не должно быть в проекте.
  2. В файле ‘settings.py‘ удаляем строку:
    WSGI_APPLICATION = 'anfisa4friends.wsgi.application'
    (остальное можно не менять).
  3. В файле ‘urls.py‘ после строки
    from django.contrib import admin
    вставляем
    from homepage import views as home_views,
    а также, ниже изменяем список urlpatterns на следующий:
    urlpatterns = [
    path('', home_views.index),
    ]
  4. Создаём папку ‘homepage‘.
  5. Создаём в этой папке файл ‘views.py’ со следующим кодом:
    from django.http import HttpResponse
    def index(request):
    return HttpResponse('Anfisa for Friends -- Hello, world! -- ¯(°:°)/¯')

Теперь запускаем проект и смотрим. Всё должно работать!

Что я не стал менять

У нас получилось три версии проекта anfisa4friends:

  1. Версия сохранённая на Яндекс-практикуме.
  2. Версия созданная Django, которую мы сохранили в git-репозитории.
  3. И последняя версия, с изменениями, которые мы сделали в предыдущем разделе.

Часть кода я умышленно не стал делать в точности как на курсе Яндекс-практикума. Код созданный Django мне показался более изящным. Посудите сами:

# Код созданный Django BASE_DIR = Path(__file__).resolve().parent.parent # Код с курса Яндекс-практикума BASE_DIR = os.path.dirname( os.path.dirname(os.path.abspath(__file__)) )

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

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

Знакомство с Github.com

Структура git-репозитория

Я планирую повторно пройти курс Яндекс-практикума, но уже на локальном компьютере. Поэтому в git-репозитории проекта будет три ветки:

  1. tasks (задания) — здесь будет код, который дан, как условие в Яндекс-практикуме.
  2. solutions (решения) — здесь мой код, который я предложил в качестве решения и Яндекс его принял, как правильный.
  3. master — основная ветка, в которой вы можете экспериментировать или пройти курс самостоятельно.

Создание структуры веток git-репозитория

У меня Яндекс-практикум уже пройден и сохранены только решения, поэтому начну с ветки solutions.

Для создания ветки и переключения на неё используется следующая команда:

git branch solutions # создание ветки solutions git checkout # переключение на ветку solutions

Теперь сохраню в это ветку последовательно решения всех уроков Яндекс-практикума. В первый коммит будет сохранено моё решение на задачу из темы (topic) №9 урока (lesson) №4.

git commit -m'Solution: topic 9 lesson 4'

Ошибка проверки CSRF. Запрос отклонён.

При прохождении темы 11 на уроке 4 «POST-запросы» на Яндекс-практикуме стала выскакивать эта ошибка. В среде Яндекс-практикума всё работает, а на локальном компьютере, когда нажимаешь кнопку «Угостить» вылетает эта ошибка.

Пришлось покопаться в документации. В результате я внёс небольшие изменения в шаблон ‘index.html

Строку
<form action="/" method="post">,
я заменил на
<form action="/" method="post">{% csrf_token %}

Теперь всё заработало!

Выкладываем наш проект на Github

Для того, чтобы выложить проект на GitHub, у вас должен быть зарегистрированный аккаунт на github.com. У меня аккаунт зарегистрирован под именем «deviur«

Затем вы должны в интерфейсе GitHub создать свой проект. В нашем случае проект будет называться «anfisa4friends«

Далее на нашем локальном компьютере, нужно добавить в git-репозиторий адрес удалённого репозитория.

# Добавляем удалённый репозиторий git remote add origin https://github.com/deviur/anfisa4friends.git # Здесь deviur - моё имя пользователя на GitHub. Не забудьте заменить на своё.А anfisa4friends - это название проекта, который был создан на GitHub.

Теперь остаётся только отправить наш проект на GitHub. Для этого используются следующие команды:

# Отправляем на удалённый репозиторий ветку master git push -u origin master # Отправляем на удалённый репозиторий ветку solutions git push origin solutions

Вот и готово! Теперь наш проект на GitHub-е. Теперь его всегда можно восстановить у себя на компьютере с помощью команды:

git clone https://github.com/deviur/anfisa4friends.git

А ознакомиться с проектом можно по адресу: https://github.com/deviur/anfisa4friends


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

Время на прочтение
3 мин

Количество просмотров 26K

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

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

Что же делать? На помощь приедет возможность языка Java обрабатывать исключения (Exceptions), в том числе и непойманные (unhandled).

Класс Thread имеет статический метод setDefaultUncaughtExceptionHandler. Данный метод позволяет установить собственный класс-обработчик непойманных исключений. Класс-обработчик должен имплементировать интерфейс Thread.UncaughtExceptionHandler. Каркас обработчика может выглядеть примерно так:

public class TryMe implements Thread.UncaughtExceptionHandler {
    @Override
    public void uncaughtException(Thread thread, Throwable throwable) {
        Log.d("TryMe", "Something wrong happened!");
    }
}

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

public class MainActivity extends MapActivity {
    @Override
    public void onCreate(Bundle savedInstanceState) {
        Thread.setDefaultUncaughtExceptionHandler(new TryMe());

        Integer a=1;
        if(true)
            a=null;
        int x = 6;
        x=x/a;  // Exception here!
    }
}

После запуска вышеприведенного кода мы (ура!) получим сообщение в логе… и черный экран. Установив наш собственный обработчик мы удалил штатный обработчик ОС Android и теперь нам больше не предлагают закрыть приложение.

Исправим положение

public class TryMe implements Thread.UncaughtExceptionHandler {

    Thread.UncaughtExceptionHandler oldHandler;

    public TryMe() {
        oldHandler = Thread.getDefaultUncaughtExceptionHandler(); // сохраним ранее установленный обработчик
    }

    @Override
    public void uncaughtException(Thread thread, Throwable throwable) {
        Log.d("TryMe", "Something wrong happened!");
        if(oldHandler != null) // если есть ранее установленный...
            oldHandler.uncaughtException(thread, throwable); // ...вызовем его
    }
}

Теперь мы видим и сообщение в логе, и привычное системное сообщение.

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

public class MyApplication extends Application {
    @Override
    public void onCreate() {
        Thread.setDefaultUncaughtExceptionHandler(new TryMe());
        super.onCreate();
    }
}

При этом нужно не забыть прописать новый класс приложения в манифест. Примерно вот так:

<manifest xmlns:android="http://schemas.android.com/apk/res/android"
      package="my.package">
    <application
        android:name="MyApplication" ...

Теперь при старте приложения (не важно какого его компонента) будет установлен обработчик исключений.

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

Приведенная реализация сохраняет информацию об необработанном исключении в файл на SD-карте в папку /Android/data/your.app.package.name/files/ (так велит Dev Guide) в файлах вида stacktrace-dd-MM-yy.txt. Для работы в манифесте приложения требуется разрешение WRITE_EXTERNAL_STORAGE.

Естественно это не единственное подобное решение.

Flurry — аналитика для мобильных приложений, содержит свой обработчик ошибок. ACRA — библиотека для Android, собирает данные об ошибках и постит их на GoogleDocs. Android-remote-stacktrace — аналогичная библиотека, шлет данные на пользовательский скрипт-приемник. Также много полезного можно получить в этом вопросе на StackOverflow

Макар-UA / RU

Как принудительно собрать решение ? чтобы ошибки не помешали сборке

?

russian

programming

dot

18:25 13.04.2021


3

ответов

Никак, как ты соберёшь что-то с ошибками

18:27 13.04.2021


Сергей

Никак, как ты соберёшь что-то с ошибками

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

18:29 13.04.2021


Макар UA / RU

программа рабочая , но старая , я подправил интерф…

Если пакетов нет то откуда их нужно взять?

18:30 13.04.2021

Похожие вопросы

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

С чего начать

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

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

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

Ищем ошибки в коде

Важная часть работы над задачей — это поиск ошибок, который начинается с логов. Это то, что выводит программа во время своего выполнения. Например, когда вы запускаете проверку вашего решения во вкладке OUTPUT отображается вывод работы тестов — это и есть логи. Вы можете добавлять к этому выводу любой собственный вывод, используя инструменты своего языка программирования (например в JS — console.log()).

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

export default (first, second) => {
  console.log('--------------------- START ------------------');
  console.log('параметры:');
  console.log(first);
  console.log(second);
  ...
  console.log('Результат');
  console.log(result);
};

Отметка «START» нужна, чтобы увидеть, в какой именно момент вызывается ваша функция. Например, в упражнениях на Хекслете часто идёт проверка через тесты, которые несколько раз запускают нашу функцию с разными данными. Таким образом, в выводе информации можно будет легче разобраться, что и к какому запуску вашей функции относится.

Иногда вместо логирования гораздо удобнее использовать дебаггер. Например, если вы делаете упражнение, в котором есть Web-доступ, можно открыть DevTools браузера и посмотреть в нём исполняемый код. Здесь вы можете поставить на паузу выполнение программы и посмотреть, чему равны все значения переменных или констант в текущий момент.

Изолируем код

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

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

Описываем алгоритм

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

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

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

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

Читайте также:
Как сохранять фокус на протяжении всего обучения: советы от Хекслета

Проверяем каждую идею

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

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

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

Делаем шаг назад

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

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

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

Понравилась статья? Поделить с друзьями:
  • Как снять чек ошибки в тигуане
  • Как снять с компьютера на опеле ошибку
  • Как снять ошибку шкода карог
  • Как снять ошибку чека с нивы
  • Как снять ошибку чек шкода октавия