Файл с текстом параграфа

Основные алгоритмические структуры. Понятие типа (переменных, возвращаемых значений и пр.). Анализ простых алгоритмов и программ на некотором языке программирования (Pascal, Python, Java, C++, C#, 1С).
Поляков
Posts: 47
Joined: Wed May 06, 2026 8:29 am

Файл с текстом параграфа

Post by Поляков »

Скачать файл: Введение
nikolay
Posts: 10
Joined: Wed May 06, 2026 8:33 am

Re: Файл с текстом параграфа

Post by nikolay »

Коллеги, небольшие комментарии, скорее не замечание, а мнение:

1. "переменная занимает в памяти 28 байт" -- возможно это избыточно? Обвязка питона затрудняет понимание хранения чисел, также почему строка из 6 символов занимает 86 байт.
2. Также вопрос про присваивание b = a и неизменяемость чисел и строк, возможно это несколько затрудняет понимание и ссылки отложить до коллекций? Хотя опять же если это только повторение прошлых годов, то возможно и нормально.
3. В блоке про приведение определение «более широкий» тип вводится неформально. Возможно явно добавитьдля основных типов int → float, bool → int и т.д.?
4. Вопрос №4, в нем используется сложное вычисление: a = 2 + 3*4**2**3 // 5 . Формально последовательность описана в тексте, возможно стоит добавить пример типа такого, но с расставленными скобками?
Поляков
Posts: 47
Joined: Wed May 06, 2026 8:29 am

Re: Файл с текстом параграфа

Post by Поляков »

Спасибо за рецензию.
1. "переменная занимает в памяти 28 байт" -- возможно это избыточно?
Хотелось показать, что переменная с одним именем в разных частях программы может занимать области памяти разного размера. Конечно, тут Python много "смазывает". Давайте подумаем. Возможно, это стоит и убрать.
2. Также вопрос про присваивание b = a и неизменяемость чисел и строк, возможно это несколько затрудняет понимание и ссылки отложить до коллекций? Хотя опять же если это только повторение прошлых годов, то возможно и нормально.
Да, переменные уже вводились в 8-9 классах. Здесь просто копаем чуть более глубоко. Мне кажется, что это нормально.
3. В блоке про приведение определение «более широкий» тип вводится неформально. Возможно явно добавитьдля основных типов int → float, bool → int и т.д.?
Согласен, добавил в текст (по той же ссылке).
4. Вопрос №4, в нем используется сложное вычисление: a = 2 + 3*4**2**3 // 5 . Формально последовательность описана в тексте, возможно стоит добавить пример типа такого, но с расставленными скобками?
Смысл этого вопроса в том, чтобы под руководством учителя (или самостоятельно) разобраться в достаточно сложной конструкции. Пример добавил в основной текст.
bonzo
Posts: 9
Joined: Wed May 06, 2026 11:08 am

Re: Файл с текстом параграфа

Post by bonzo »

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

"Цель любой программы — преобразованию данных" -- здесь опечатка, преобразование.

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

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

"в буквах" -- аналогично. Тогда уж "в именах", можно также провести параллель с алгебраической формулой.

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

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

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

При появлении неизменяемых объектов не хватает комментария, зачем так сделано, просто констатируется факт. Как и выше, я бы пояснил, почему так и что это дает. (Можно вставить вопрос, если формат учебника такое позволяет и хочется, чтобы дети сами подумали?)

"Арифметические выражения в любом языке программирования" -- ну не совсем в любом, есть экзотика вроде джулии или вольфрама, можно мягче -- почти во всех?

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

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

"Как это ни странно, по статистике бóльшую часть своего рабочего времени программисты не пишут новые программы, а исправляют ошибки в существующих, которые часто написаны другими людьми." -- тут мне однозначную статистику найти не удалось, видел разные цифры, например, 25% времени на отладку. Предложил бы более осторожную фразу, сказать, что программисты часто пишут программы не с нуля, а дорабатывают существующие (если есть желание это сказать, заодно можно было бы сделать сноску про опен сорс), и значительную часть времени занимает не реализация алгоритмов, а исправление ошибок в коде.

"сколько места занимают данные в памяти" -- для питона это как раз вряд ли нужно, скорее хотелось сказать, как распределяются данные в памяти? Или убрать.

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

В записи исходного алгоритма Евклида в строке с b - a короткое тире, а не минус (думаю, сейчас это неважно, но на всякий случай).

Большее и большего иногда содержит ударение, а иногда нет. Кажется, даже без ударения разночтения не будет.

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

--
Андрей Белеванцев
Поляков
Posts: 47
Joined: Wed May 06, 2026 8:29 am

Re: Файл с текстом параграфа

Post by Поляков »

Спасибо за отзыв и предложения. Отвечаю только на то, с чем не совсем согласен.
Остальное принято с багодарностью и исправлено.
может быть, стоит сказать в начале, что на вход подается последовательность бит (или байт)
Не думаю, что здесь нужно спускаться до битов и байтов. Мы ведь программируем на языке высокого уровня.
"наклейка на контейнере" тоже не кажется удачным для 11 класса
"метка, связанная с областью памяти".
"в буквах" -- аналогично
"через символьные обозначения величин"
На рисунках про связывание имени переменной и объекта нет собственно имен переменных? Я бы ожидал, что они там подписаны (а где нет, это и есть висячая ссылка).
Не совсем понял замечание. Имена в кружочке, значения в прямоугольниках.
При появлении неизменяемых объектов не хватает комментария, зачем так сделано, просто констатируется факт. Как и выше, я бы пояснил, почему так и что это дает.
На мой взгляд, тут нужно очень глубоко копать и это уведет от темы.
"сколько места занимают данные в памяти" -- для питона это как раз вряд ли нужно, скорее хотелось сказать, как распределяются данные в памяти?
Нет, хотелось сказать, что нужно оценивать размер массива A[2**31]. И мы же стараемся не только про Python говорить.
По поводу практических задач -- есть ли смысл предлагать дополнительные задания? Я немного потерялся, будут ли такие задания цифровой частью учебника или заданиями со звездочкой прямо в тексте.
Еслии поместяся, то они войдут в учебник, если нет - выведем в цифровое приложение.
bonzo
Posts: 9
Joined: Wed May 06, 2026 11:08 am

Re: Файл с текстом параграфа

Post by bonzo »

Поляков wrote: Thu Jun 11, 2026 12:14 pm Не совсем понял замечание. Имена в кружочке, значения в прямоугольниках.
Это я виноват, доверился яндексовскому просмотрщику. Он съел буквы в кружочках :) В ворде все хорошо.
Neket
Posts: 10
Joined: Wed May 06, 2026 11:11 am

Re: Файл с текстом параграфа

Post by Neket »

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

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

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

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

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

4. В пункте про арифметические операции и выражения, на мой взгляд, немного смешаны в кучу понятия операции, оператора и выражения. Сначала словами корректно определено выражение, однако потом оператор присваивания a =(c + 5 - 1) / 2*d назван выражением, хотя строго говоря, выражением является только правая часть. Затем говорится о переносе длинных выражений между строками, однако в последнем предложении сказано, что "Эти правила переноса справедливы и для других операторов языка Python".

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

5. В пункте про циклы меня немного смущает, что цикл while охарактеризован с точки зрения способа выхода из него (цикл с условием), а цикл for -- с точки зрения его назначения. Для последовательности изложения можно сказать, что существуют цикл while (цикл с условием) и цикл for (цикл с фиксированным количеством итераций). Первый используется, когда количество повторений обусловлено желаемым реузльтатом, а второй -- количеством элементов, для которых необходимо выполнить заданное действие.
Поляков
Posts: 47
Joined: Wed May 06, 2026 8:29 am

Re: Файл с текстом параграфа

Post by Поляков »

Спасибо за отзыв.
Neket wrote: Wed Jun 17, 2026 11:48 am 1. В момент, когда сообщается, что питон -- интерпретируемый язык, я бы наверное упомянул, что второй вариант, когда программа переводится в команды процессора, называется компилируемым, а та программа, которая перевод выполняет -- компилятором.
Я попробовал, но получилось плохо. В преамбуле речь идет про язык Python, а разговор про компиляторы здесь будет отвлечением от темы. Хотя когда я буду вести урок, про это обязательно скажу. :-) Дал эту информацию в сноске.
Neket wrote: Wed Jun 17, 2026 11:48 am 2. Меня смущает противоречие, которое мы допускаем, вводя понятие переменной. С одной стороны сказано, что переменная -- это область памяти компьютера. С другой, что если переприсвоить переменной другое значение, то область памяти изменится. Получается что переменная -- это имя, потому что это единственное, что остается неизменным при присваивании, в то время как область памяти изменяется.
На мой взгляд, переменная - это имя + данные определенного типа в памяти, весь комплекс.
Neket wrote: Wed Jun 17, 2026 11:48 am К тому же, не вполне корректным становится и утверждение о том, что присваивая переменной новое значение мы уничтожаем предыдущее -- оно остается в старой области памяти, и на него могут ссылаться другие переменные.
Добавил "(если оно, конечно, не было сохранено в другой переменной)".
Neket wrote: Wed Jun 17, 2026 11:48 am 3. Я не уверен, но мне казалось, что в русскоязычных текстах название языка Си обычно переводят. Возможно я не прав.
Алиса говорит, что не переводят.
Neket wrote: Wed Jun 17, 2026 11:48 am 4. В пункте про арифметические операции и выражения, на мой взгляд, немного смешаны в кучу понятия операции, оператора и выражения. Сначала словами корректно определено выражение, однако потом оператор присваивания a =(c + 5 - 1) / 2*d назван выражением
, хотя строго говоря, выражением является только правая часть.
Написал "Если запись длинного оператора не поместилась в одной строке на экране...".
Neket wrote: Wed Jun 17, 2026 11:48 am однако в последнем предложении сказано, что "Эти правила переноса справедливы и для других операторов языка Python".
Убрал эту фразу.
Neket wrote: Wed Jun 17, 2026 11:48 am 5. В пункте про циклы меня немного смущает, что цикл while охарактеризован с точки зрения способа выхода из него (цикл с условием), а цикл for -- с точки зрения его назначения. Для последовательности изложения можно сказать, что существуют цикл while (цикл с условием) и цикл for (цикл с фиксированным количеством итераций). Первый используется, когда количество повторений обусловлено желаемым реузльтатом, а второй -- количеством элементов, для которых необходимо выполнить заданное действие.
Не совсем согласен. Можно написать бесконечный цикл for, который берет значения из бесконечного генератора. Но мысль я понял, поправил текст.
Спасибо!
Neket
Posts: 10
Joined: Wed May 06, 2026 11:11 am

Re: Файл с текстом параграфа

Post by Neket »

Поляков wrote: Wed Jun 17, 2026 8:16 pm
Neket wrote: Wed Jun 17, 2026 11:48 am 2. Меня смущает противоречие, которое мы допускаем, вводя понятие переменной. С одной стороны сказано, что переменная -- это область памяти компьютера. С другой, что если переприсвоить переменной другое значение, то область памяти изменится. Получается что переменная -- это имя, потому что это единственное, что остается неизменным при присваивании, в то время как область памяти изменяется.
На мой взгляд, переменная - это имя + данные определенного типа в памяти, весь комплекс.
Концептуально я согласен (если совсем придираться, то конкретные данные переменную не определяют, область памяти да, тип дискуссионно, возможно только размер), вот только на мой взгляд это не очень вяжется с теми понятиями, которые даются в учебнике далее. Если переменная это имя + память, то после того, как произошло переприсваивание, и область памяти, связанная с некоторым именем, поменялась, то это теперь новая переменная? Ссылки то мы полноценно не вводим, и что переменная это имя + область памяти, в которой лежит ссылка -- не говорим.

Как будто с точки зрения тех понятий, которые мы даем и используем, привязка переменной к памяти не играет роли. То, что для нас принципиально -- что переменная имеет значение, которое может изменяться нами по желанию; при этом оно может поменять свой тип, область памяти, в котором хранится, но мы все равно будем считать это одной и той же переменной.
volkov
Posts: 8
Joined: Thu Jun 18, 2026 12:09 pm
Location: Moscow, A. Solzhenitsyna, 25, room 129

Re: Файл с текстом параграфа

Post by volkov »

Поляков wrote: Wed Jun 17, 2026 8:16 pm Спасибо за отзыв.
Neket wrote: Wed Jun 17, 2026 11:48 am 1. В момент, когда сообщается, что питон -- интерпретируемый язык, я бы наверное упомянул, что второй вариант, когда программа переводится в команды процессора, называется компилируемым, а та программа, которая перевод выполняет -- компилятором.
Я попробовал, но получилось плохо. В преамбуле речь идет про язык Python, а разговор про компиляторы здесь будет отвлечением от темы. Хотя когда я буду вести урок, про это обязательно скажу. :-) Дал эту информацию в сноске.
Не буду утверждать, что это критично, но для 11 класса лично я бы всё-таки присоединился к мнению, что пояснить в каком-то месте курса различие между компиляцией и интерпретацией как к подходам к выполнению программы вполне уместно чуть более развёрнуто, чем сноска.

Если вдруг чем-то поможет - я использую (наверное, достаточно популярную и известную) метафору про "человеческий" перевод - "обычного" переводчика (translator) vs переводчика-синхрониста (interpreter, sic!).

Для 9-го класса (с которым я раньше начинал программирование) я обычно давал в качестве д.з. ссылку на мульт (1983-й год, между прочим!)
https://www.youtube.com/watch?v=_C5AHaS1mOA

Ну а поскольку он на англ., то потом мы смотрели вместе с обсуждением про плюсы и минусы (но плюсы и минусы - это уже вряд ли для базового курса).
Alexander Volkov
Post Reply

Return to “§ 1. Основные алгоритмические структуры”