Редактирование и вычитка книги

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

Модераторы: Oleg_D, Модераторы

Oleg_D
постоялец
Сообщения: 391
Зарегистрирован: 09.05.2011 11:28:36

Сообщение Oleg_D »

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

Добавлено спустя 12 часов 55 минут 43 секунды:
enot777 писал(а):Параметр F в Writeln наверное лишний.

Ну да, можно и выбросить.
enot777 писал(а):Проблема именно в совпадении Dec (сокращение December) и Dec() (декремент)

Это точно мне надо исправить, но не сразу, подожду ещё ваших подсказок, наверняка накопаете :)
Пока исправил только ошибку в файле с ответами: на стр. 79 добавлено w:=0 в функции ExpandTo80.

Кстати, до сих пор мне не приходило в голову проверить Inc/Dec на перечислениях. В стандартном Паскале Вирта этих процедур нет, это новые плюшки. Действительно, работают. При {$R-} даже выход за границы перечисления позволяют. Аккуратней с ними надо.
enot777
новенький
Сообщения: 24
Зарегистрирован: 24.11.2016 14:20:58

Сообщение enot777 »

>> Oleg_D
Глава 36
стр.258 снизу
Проверкой на надмножество (=>) выясняют
стр.259 сверху пример

Код: Выделить всё

if SN1 => SN2 then … else …//ошибка записи оператора сравнения, правильно: '>='.

В Паскале запись операторов сравнения '<=' и '>=' фиксированы (сначала '<' или '>', потом '=') как и присвоения ':='.
Желательно об этом упомянуть в книге.
Oleg_D
постоялец
Сообщения: 391
Зарегистрирован: 09.05.2011 11:28:36

Сообщение Oleg_D »

Спасибо, взял на карандаш!
enot777
новенький
Сообщения: 24
Зарегистрирован: 24.11.2016 14:20:58

Сообщение enot777 »

>>Oleg_D
Заметил такую вещь, рассказывая про циклы был упомянут break, а continue нет.
Тому есть причина? Если нет, то стоит и про этот оператор управления циклом упомянуть.
Oleg_D
постоялец
Сообщения: 391
Зарегистрирован: 09.05.2011 11:28:36

Сообщение Oleg_D »

enot777 писал(а):Тому есть причина?

Причина указана в предисловии, — я сознательно ограничил объём подаваемой информации, чтобы не отвлекать ученика от главного. По моим ощущениям (из богатого личного опыта) необходимость в Continue возникает гораздо реже, чем в Break. По крайней мере, в данной книге таких моментов не возникало. Кстати, в исконном виртовском Паскале не было ни того, ни другого — обходились. Зато теперь столько всего вкусного наворочено, что можно ещё пару томов написать.
Аватара пользователя
bormant
постоялец
Сообщения: 408
Зарегистрирован: 21.03.2012 11:26:01

Сообщение bormant »

И Break, и Continue -- суть синтаксический сахар, позволяющий не потерять читаемость в эквивалентных конструкциях из if и goto, "меньшее зло".
На мой взгляд, сказав про Break, стоит упомянуть и Continue, в частности про его основной "подводный камень" -- управление возвращается на проверку условия, что не имеет особого значения для for/while (всегда вверх), но способно "выстрелить" для repeat until:

Код: Выделить всё

repeat
  ...
  if ... then Continue;
  ...
until ...;
В данном случае по Continue управление передаётся на until (вниз), а не на repeat (вверх), как это могло бы показаться по аналогии с for или while.
Существенный вопрос остаётся и для for -- производится ли инкремент/декремент (to/downto) управляющей переменной.
Оптимальным может являться указание, что Continue заставляет пропустить исполнение всех оставшихся в теле цикла операторов на текущей итерации. Отсюда новое значение счетчика для новой итерации for, проверка условия по завершении итерации для until и while.
Oleg_D
постоялец
Сообщения: 391
Зарегистрирован: 09.05.2011 11:28:36

Сообщение Oleg_D »

Спасибо за интересные замечания, и по поводу "подводного камня" согласен. И потому мне думается, что начинающих не следует нагружать этими вещами, хотя более продвинутый "кодер" безусловно должен знать и понимать всё это. Вопрос не в том, нужно это или не нужно, а в том, когда, на каком этапе это подать? После того, как в голове ученика осядут азы, он будет копать глубже и найдёт ещё много чего полезного и интересного. Мы знаем, что некоторые современные конструкции языка повышают эффективность программ, но несут и некоторый риск в плане вероятных субъективных ошибок. Или требуют более глубокого понимания механизмов, спрятанных за компилятором.
Аватара пользователя
Лекс Айрин
долгожитель
Сообщения: 5723
Зарегистрирован: 19.02.2013 16:54:51
Откуда: Волгоград
Контактная информация:

Сообщение Лекс Айрин »

Oleg_D писал(а): После того, как в голове ученика осядут азы,

Имхо, как раз давать надо как Break так Continue одновременно.
Oleg_D
постоялец
Сообщения: 391
Зарегистрирован: 09.05.2011 11:28:36

Сообщение Oleg_D »

А не замутить ли нам референдум по сему вопросу? Свой BrExit? Кстати, после Break на втором месте по популярности в моей практике идёт оператор Exit –- досрочный выход из процедуры, -- очень удобно. Но в «Песни» он тоже не попал, опять же по злонамеренности автора. Сейчас пришла жестокая мысль, что и Break я рано обнародовал, -- пусть бы новички помучились на «классике», -- так было бы методически правильней. Зато потом… Ведь всё равно раскопают и Break, и Continue, и Exit, и многое другое. От этого ушлого народа ничего ведь не утаишь.
А если серьёзно, то эти и многие другие сладости можно было бы изложить в некоем аппендиксе к «Песням», где обстоятельно, с примерами показать, где и как их можно использовать. Но я не созрел пока, обещать не буду.
-----
В русле этой дискуссии уместно напомнить о целях и целевой аудитории книги. Надеюсь, это многое объяснит. Основная аудитория – школьники и студенты младших курсов, а цель в том, чтобы дать объём знаний, достаточный для:
1) успешного участия в школьных олимпиадах;
2) последующего углублённого изучения Pascal/Delphi;
3) освоения других языков программирования в соответствии с потребностями и вкусами читателей.
Аватара пользователя
Лекс Айрин
долгожитель
Сообщения: 5723
Зарегистрирован: 19.02.2013 16:54:51
Откуда: Волгоград
Контактная информация:

Сообщение Лекс Айрин »

Oleg_D писал(а):Сейчас пришла жестокая мысль, что и Break я рано обнародовал, -- пусть бы новички помучились на «классике», -- так было бы методически правильней. Зато потом… Ведь всё равно раскопают и Break, и Continue, и Exit, и многое другое. От этого ушлого народа ничего ведь не утаишь.


Я, например, все это знаю, но не пользуюсь. Просто не вижу в них смысла. Имхо, их ввели чтобы не пользоваться (или поменьше) Goto.
enot777
новенький
Сообщения: 24
Зарегистрирован: 24.11.2016 14:20:58

Сообщение enot777 »

>> Oleg_D
Глава 39 стр.282

Код: Выделить всё

var
  A : array [1..5] of integer;
  B : array [1..5] of integer;
begin
  A:= B; { здесь компилятор видит ошибку несовместимости типов}
end.

Замечание: в FPC 3.0.0 Win32 компилируется без ошибок.
Oleg_D
постоялец
Сообщения: 391
Зарегистрирован: 09.05.2011 11:28:36

Сообщение Oleg_D »

enot777 писал(а):Замечание: в FPC 3.0.0 Win32 компилируется без ошибок.

Неправильный компилятор какой-то. :shock: Помнится, Borland браковал такие вещи, надо будет пощупать это место.
tema
постоялец
Сообщения: 376
Зарегистрирован: 24.03.2011 19:19:27

Сообщение tema »

Oleg_D писал(а):А если серьёзно, то эти и многие другие сладости можно было бы изложить в некоем аппендиксе к «Песням», где обстоятельно, с примерами показать, где и как их можно использовать. Но я не созрел пока, обещать не буду.

Я уже давно думаю о некотором дополнении к книге. Я по ней преподаю и некоторых вещей всё же не хватает. Я это к чему: раз не мне одному пришла в голову эта мысль, то, наверное, пора :D
ЗЫ
Давно думаю над одной хорошей идеей по развитию книги, но всё никак не соберусь с силами её реализовать. Слишком глобальная работа... Но я всё же сделаю скоро тему с этой идеей и, может пойдёт :)
Oleg_D
постоялец
Сообщения: 391
Зарегистрирован: 09.05.2011 11:28:36

Сообщение Oleg_D »

enot777 писал(а):Замечание: в FPC 3.0.0 Win32 компилируется без ошибок.

Проверил компиляцию на:
1) Free Pascal
2) Borland Pascal
3) Delphi
4) PascalABC
Действительно, первый глотает этот кусок, остальные три сообщают об ошибке. Разумеется, исходники не должны зависеть от капризов конкретного компилятора. По крайней мере, надо стремиться к этому.

Добавлено спустя 17 минут 54 секунды:
tema писал(а):Но я всё же сделаю скоро тему с этой идеей и, может пойдёт

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

Добавлено спустя 6 часов 41 минуту 33 секунды:
tema писал(а):Я по ней преподаю

Ваш опыт преподавателя-практика особенно интересен, вам лучше видны и слабые, и сильные стороны книги. Какие темы даются легче или труднее? Есть ли тут какая-то закономерность, или всё это индивидуально? Думаю, это интересно не только мне.
enot777
новенький
Сообщения: 24
Зарегистрирован: 24.11.2016 14:20:58

Сообщение enot777 »

>> Oleg_D

Глава 43 стр.323

Позволено ль процедуре вызывать саму себя?

Вместо "ль" так и просится "ли". На "ЛЬ" мозг спотыкаестя. Хотя здесь нет ошибки, потому что ль = ли.
Ответить