Ученик: А как мне запомнить, что нужно обязательно писать вот эту строчку в программе?
Пал Саныч: Головой.
- Можно купить у вас солёный огурец?
- Нет
- Почему?
- Потому что он порезан.
- Но он же у вас порезан из огурца?
(М. Н. Задорнов)
Тот же ученик: А почему без вот этой скобки программа не запускается? Она же там не нужна!
Пал Саныч: Возможно, потому что она всё-таки нужна?
Ученик: Нет, не нужна же.
Величайший специалист в программировании, второй месяц безуспешно сражающийся с алфавитом и таблицей умножения, спорит с изобретателем языка Python Гвидо ван Россумом. Таблица умножения и алфавит победили всухую, Гвидо ван Россум снисходительно улыбается
*******
Разбираем с учеником тему поиска делителей. Алгоритм очень простой, и его нужно усвоить на уровне рефлексов, чтобы использовать в более сложных задачах. Требуется понять и реализовать следующее. Например, есть задача:
"Напишите программу, которая ищет среди целых чисел, принадлежащих числовому отрезку [126849; 126871], числа, имеющие ровно 4 различных делителя. Выведите эти четыре делителя для каждого найденного числа в порядке возрастания".
Как и что делать? Напоминаю, в простейшем, неоптимизированном виде. Чтобы вывести четыре делителя, их надо где-то записать сначала. Такая штука называется массивом или списком. Ученик знает о них, применял. Хорошо, чешем по алгоритму, то есть, определяем порядок действий:
1. Перебираем все подряд числа указанного диапазона.
2. Для каждого числа создаём пустой список, куда будем пихать найденные делители. Для каждого, повторяю, числа.
3. Для каждого же числа проверяем делимость на всё, начиная с единицы и заканчивая самим числом.
4. Если делитель (на промежутке от единицы до самого числа) найден, он под белы рученьки помещается в список.
5. Если по окончании поиска делителей в списке находятся ровно четыре элемента, то это наш случай, и мы выводим содержимое списка на экран.
Подробно разбираем эту задачу, пишем программу, комментируем каждую строчку. Понятно? Понятно. Даю ученику такую же задачу, только там надо найти на другом числовом промежутке другие числа - чтобы по шесть делителей было. Ура, нормально, порядок, получилось, всё работает. Идём дальше.
Спрашиваю: Какие числа называются простыми? Ученик отвечает: такие у которых всего два делителя - единица и само, собственно, число. Ого, думаю, помнит. Отлично. Говорю: теперь, используя тот же самый алгоритм, найдите на таком-то числовом промежутке простые числа и выведите их на экран.
Какие изменения - очень незначительные нужно сделать? Правильно, делителей должно быть не три, не восемь, не сколько-то там, а два. И вывести на экран нужно не список с делителями, а само число.
Две минуты. Три. Спрашиваю: помочь?
Хотя уже прекрасно знаю - не помочь, а объяснить заново.
Да, говорит. Я вообще, говорит, не понимаю.
Вообще не понимает. При более глубоком рассмотрении выясняется, что это истинная правда. Не понимает. То есть, как вывести список из четырёх делителей - понятно. Как вывести список из шести делителей - тоже. как вывести число, у которого только два делителя - никак. При условии, что алгоритм менялся на одну букву. То есть, не понимает человек, что обозначают вот эти буковки. Не видит разницы между переменными. Каббалистика это для него. И он планирует стать каббалистом. А не программистом. Правда, никогда не поймёт разницы.
Да, я знаю, что алгоритм поиска простых чисел реализуется многократно быстрее, если искать делители от двух до квадратного корня, но это следующий шаг. Ученик ещё не понял самое начало, не надо торопиться. Нельзя сделать второй шаг, не сделав первый, верно?
Прям Козьма Прутков по уровню пафоса и банальности))
Я часто привожу в пример первоклассников, которые блестяще справляются со сложением и вычитанием яблок, но теряются и даже плачут, если видят в задаче груши или конфеты. Одиннадцатиклассники идут дальше - или ближе? - они пасуют, когда яблоки просто становятся не красными, а, например, зелёными.
Всё бы ничего, но... Четвёртый случай за год. На одной и той же задаче.
******
Щас будет скуууушно, кому не шибко понятно - пролистывайте.
Как устроено число? Что такое вот эти цифры в числе? Возьмём какое-нибудь самое обычное десятичное число, например, 197. Это сумма степеней десятки с коэффициентами, на тайном математическом языке называемыми мантиссой. То есть, это 1 * 10 во второй степени + 9 * 10 в первой степени и 7 * 10 в нулевой степени. Если мы возьмёмся переводить числа из какой-либо позиционной (то есть, проще говоря, не римской, не вавилонской и им подобных) системы счисления в десятичную, то нам так и надо поступить - взять число, расписать над его разрядами степени (правая цифра - нулевая степень), возвести основание системы в нужные степени и сложить это всё хозяйство.
Последняя цифра в записи любого числа в любой позиционной системе счисления - это остаток от деления числа на основание системы счисления. Если эту операцию, деление, то бишь, с остатком выполнить, то в записи числа в этой системе уберётся младший разряд, то есть, правая цифра. И на её месте будет уже цифра, которая была предпоследней. То есть, можно сказать, что число - это запись, состоящая из остатков от деления этого числа на основание системы счисления.
В ЕГЭ есть задание одно, там надо посчитать количество цифр определённого значения в числе, записанном в какой-либо системе счисления. Алгоритм (не лучший, но универсальный) выглядит примерно так:
1. Объявить переменную, пусть будет Х, присвоить ей значение арифметического выражения из условия задачи.
2. Объявить ещё одну переменную, пусть будет К, присвоить ей значение 0 (нуль). Она будет отвечать за количество нужных цифр.
3. Делить Х нацело на заданное основание системы счисления, но перед этим проверять, будет ли остаток от деления (последняя цифра, то есть) равен нужной цифре. Если да, то К увеличивать на 1. Повторять это деление, пока от Х ничего не останется.
После подробных объяснений с этим справляются почти все. Есть диагностические признаки. Например, при незначительном изменении условий задачи ученик впадает в ступор, так как забывает изменить текст программы НЕ ПОНИМАЯ, что именно надо изменить:
Если в примере мы переводили число в систему, например, двоичную, то тот самый Х надо было делить на два, и К должно считать остатки от деления именно на два. Однако, если в задании система счисления становится шестеричной или семнадцатиричной, эти деятели по-прежнему делят на два, и остаток от деления у них тоже на два.
Трое из десяти, собирающихся сдавать ЕГЭ, между прочим.
Ещё четверо из десяти безвозвратно тонут, когда, посчитав количество цифр определённого достоинства в числе, даже повторив это нехитрое действие несколько раз, сталкиваются с заданием, где надо посчитать не количество определённых цифр, а сумму всех цифр без разбора. То есть, просто сложить их все. Алгоритм почти такой же.
1. Объявить переменную, пусть будет Х, присвоить ей значение арифметического выражения из условия задачи.
2. Объявить ещё одну переменную, пусть будет S, присвоить ей значение 0 (нуль). Она будет отвечать за СУММУ ВСЕХ цифр.
3. Делить Х нацело на заданное основание системы счисления, перед этим к переменной S прибавлять остаток от деления, не проверяя его размер - пофиг, Господь признает своих. Повторять это деление, пока от Х ничего не останется.
Так вот, четверо из десяти вообще не представляют, как это. И пошевелить серым веществом, может, и могли бы, но шевелилка не работает.
Подводя итог, скажу честно, что для этих (три плюс четыре) семерых из десяти у меня плохие новости. Они поступят. Куда-нибудь. Но и всё. Дальше - "свободная касса". И обвинение всех, кроме себя, во всём, что можно и нельзя.
И да, эти задания - одни из простейших.
******
Ученик: У меня что-то не работает, помогите.
Пал Саныч: Я могу помочь только в том случае, если увижу результат работы - код программы и то, что она выдаёт вместо ответа.
Ученик: Ой, нет, я переделаю.
Вот чего они боятся? Что я им уши оборву? Так я их и так оборву)))) Но времени будет потрачено меньше.
Причин, по которым результат своей потной борьбы не хотят показывать, думаю, четыре штуки.
1. Там действительно ахинея.
2. Не умеют делать скриншоты. Учишь, учишь их, головотяпов...
3. Аналогично горцам, которые не доверяют осматривать врачам-мужчинам своих жён или сестёр, не считают возможным допустить репетитора в "святая святых".
4. Боятся, что я увижу нечто постороннее - да, некоторые параллельно Ютуб смотрят или ЧатЖПТ юзают. Обычно я это всё равно раскалываю - и тогда действительно начинают бояться. Совершенно зря. Бояться надо было раньше))
******
Вообще вот такие товарищи у меня недолго задерживаются. Либо начинают думать и строить более реалистичные планы на будущее, понимая, что троечник - это не отличник всё-таки, и миром он править не может априори, либо начинает грустить и искать волшебника в голубом вертолёте, который вложит свои мозги и подарит пицот эскимо. Таких мало. В самом деле мало.
И их не жалко.
Обнимаю.
Ваш Пал Саныч Рябчиков