Дело в том, что книга все еще в работе, редактируется. Приходят какие-то новые мысли, и порой они не стыкуются с прежним текстом. И задачи добавляются, поэтому нумерация в ответах может иногда не соответствовать . Буду поправлять. Еще раз спасибо, мне нужны дотошные читатели
Редактирование и вычитка книги
Модераторы: Oleg_D, Модераторы
Ага, точно, спасибо за это замечание.
Дело в том, что книга все еще в работе, редактируется. Приходят какие-то новые мысли, и порой они не стыкуются с прежним текстом. И задачи добавляются, поэтому нумерация в ответах может иногда не соответствовать . Буду поправлять. Еще раз спасибо, мне нужны дотошные читатели
Дело в том, что книга все еще в работе, редактируется. Приходят какие-то новые мысли, и порой они не стыкуются с прежним текстом. И задачи добавляются, поэтому нумерация в ответах может иногда не соответствовать . Буду поправлять. Еще раз спасибо, мне нужны дотошные читатели
- Paster Fob
- постоялец
- Сообщения: 188
- Зарегистрирован: 22.02.2011 20:53:36
- Откуда: Новосибирск.
Oleg_D здравствуйте!В главе 24 в разделе "А вам слабо?" под пунктом А. есть такое задание:
Что-то я не пойму как это сделать.Если ключ передавать в функции,зачем тогда его передавать в процедуры?И если его передавать в процедуры,зачем тогда вообще нужны функции в программе?Тогда проще всё в процедурах сделать.Или как?
Переработайте программу шифрования так, чтобы ключ задавался
пользователем с клавиатуры (в начале работы программы). Затем этот ключ
должен передаваться в процедуры и функции через параметр. Заголовки процедур
и функций должны быть такими.
function CryptChar(arg: char; key: integer): char;
procedure CryptString(var arg: string; key: integer);
Что-то я не пойму как это сделать.Если ключ передавать в функции,зачем тогда его передавать в процедуры?И если его передавать в процедуры,зачем тогда вообще нужны функции в программе?Тогда проще всё в процедурах сделать.Или как?
Paster Fob писал(а):Если ключ передавать в функции,зачем тогда его передавать в процедуры?И если его передавать в процедуры,зачем тогда вообще нужны функции в программе?
Если Вы внимательно посмотрите аргументы функции и процедуры (это я Вам говорю на тот случай, если для Вас английский - как китайская грамота), то можно понять, для чего служит функция, а для чего процедура. Попробуйте на основании этих аргументов самостоятельно понять, что для чего нужно.
Paster Fob писал(а):Что-то я не пойму как это сделать.Если ключ передавать в функции,зачем тогда его передавать в процедуры?И если его передавать в процедуры,зачем тогда вообще нужны функции в программе?Тогда проще всё в процедурах сделать.Или как?
Дело в том, что ключ используется внутри функций шифрования/дешифрования символа, а функции эти вызываются из процедур. Таким образом, ключ может попасть в функцию только через процедуру (ну, если профессионально делать).
-
Padre_Mortius
- энтузиаст
- Сообщения: 1265
- Зарегистрирован: 29.05.2007 17:38:07
- Откуда: Спб
Oleg_D,можно поинтересоваться почему отказались от использования в функциях зарезервированного Result для возврата результата.
Совместимость с TP, imho.
-
Padre_Mortius
- энтузиаст
- Сообщения: 1265
- Зарегистрирован: 29.05.2007 17:38:07
- Откуда: Спб
GrayEddy, все немного сложнее
Padre_Mortius писал(а):Oleg_D,можно поинтересоваться почему отказались от использования в функциях зарезервированного Result для возврата результата.
На стр. 152 упомянуто об этом способе возвращения результата. В целом я стремился к максимальной совместимости с разными версиями и настройками компиляторов, поскольку книга то - для новичков.
16 июля 2011 г. выложена 7-я редакция книги.
27 августа 2011 г. выложена 8-я редакция книги.
Здравствуйте, Олег. Я решил вспомнить школьный курс информатики (признаться, не самый лучший), вспомнить паскаль, который изучал больше 10 лет назад, и Ваша книга пришлась кстати. Здорово, что Вы выкладываете ее совершенно бесплатно.
Как педагогу по образованию (в гуманитарной области) она мне очень нравится. Особенно те главы, которые убивают сразу несколько зайцев: например, учат использованию процедур и функций, заодно рассказывают про новые операторы и, ко всему прочему, разбирают это на примере алгоритма шифрования.
В общем, кроме обучения исключительно синтаксису, как это было в школе, Вы в своей книге приучаете ученика мыслить самостоятельно, учите аккуратности кода, даете интересные задачки, показываете готовые решения, и так далее.
Даже меня, человека, которому поздно учиться, книга всего за два-три занятия приучила при решении очередной задачи сразу думать, какие программе понадобятся переменные, что выделить в подпрограммы и т.д. И писать грамотно: не забывать объявлять переменные, разделять операторы, не пропускать параметры функции, и т. д. Это плюс.
Что касается минусов, то скажу исключительно об опечатках и прочих неточностях. Пока что я дошел только до 25 главы.
стр. 120, "А Слабо?", пункт в, третий пример.
Не совсем понятно, что Вы хотели проиллюстрировать этим. Ведь переменная S каждую итерацию цикла переписывается, и на выходе в нее записывается только последний символ строки и '-'. Логически этот пример выбиваетсся из предыдущих.
стр. 156, пятый абзац.
"...в приложение И". Правильно "в приложении".
стр. 159, "Расшифровка символа".
Здесь Вы предлагаете для функции расшифровки название EnCrypt. Но по-английски это означает "зашифровать", а "расшифровать" это decrypt. Конечно, можно называть функции как угодно, но я думаю, раз в начале книги Вы сподвигали читателей к изучению английского языка, то лучше следовать заданному курсу.
Где-то в начале была еще одна опечатка, но сейчас я не могу ее найти. Найду, когда закончу и перечитаю книгу.
Большое спасибо за труд. Надеюсь, Вы прочитаете мой комментарий.
Как педагогу по образованию (в гуманитарной области) она мне очень нравится. Особенно те главы, которые убивают сразу несколько зайцев: например, учат использованию процедур и функций, заодно рассказывают про новые операторы и, ко всему прочему, разбирают это на примере алгоритма шифрования.
В общем, кроме обучения исключительно синтаксису, как это было в школе, Вы в своей книге приучаете ученика мыслить самостоятельно, учите аккуратности кода, даете интересные задачки, показываете готовые решения, и так далее.
Даже меня, человека, которому поздно учиться, книга всего за два-три занятия приучила при решении очередной задачи сразу думать, какие программе понадобятся переменные, что выделить в подпрограммы и т.д. И писать грамотно: не забывать объявлять переменные, разделять операторы, не пропускать параметры функции, и т. д. Это плюс.
Что касается минусов, то скажу исключительно об опечатках и прочих неточностях. Пока что я дошел только до 25 главы.
стр. 120, "А Слабо?", пункт в, третий пример.
Код: Выделить всё
for i:=1 to Length(S) do S:= S[i] + '-'; Не совсем понятно, что Вы хотели проиллюстрировать этим. Ведь переменная S каждую итерацию цикла переписывается, и на выходе в нее записывается только последний символ строки и '-'. Логически этот пример выбиваетсся из предыдущих.
стр. 156, пятый абзац.
"...в приложение И". Правильно "в приложении".
стр. 159, "Расшифровка символа".
Здесь Вы предлагаете для функции расшифровки название EnCrypt. Но по-английски это означает "зашифровать", а "расшифровать" это decrypt. Конечно, можно называть функции как угодно, но я думаю, раз в начале книги Вы сподвигали читателей к изучению английского языка, то лучше следовать заданному курсу.
Где-то в начале была еще одна опечатка, но сейчас я не могу ее найти. Найду, когда закончу и перечитаю книгу.
Большое спасибо за труд. Надеюсь, Вы прочитаете мой комментарий.
Уважаемый teapot, спасибо Вам за лестный отзыв и внимательное чтение книги! Ваши замечания по делу и очень кстати, - сейчас я накапливаю исправления к очередной редакции, учту и Ваши подсказки. У автора взгляд все-таки "замылен" - читаешь в сотый раз одно и то же, а очевидных огрехов не замечаешь... 
Найдете еще что-либо, пишите хоть сюда, хоть на почту (адрес в книге). Еще раз большое спасибо!
Найдете еще что-либо, пишите хоть сюда, хоть на почту (адрес в книге). Еще раз большое спасибо!
Текст программы P_31_1, Глава 31, стр 216 содержит опечатку в строке:
if not Eof(InFile) do Readln(InFile);
Параметр - do
И ещё вопрос.
Зачем в этой же строке применён оператор if, ведь можно обойтись без него как было в программе P_30_1:
while not Eof(InFile) do begin
Counter:= Counter+1;
HandleString;
Readln(InFile);
end;
Close(InFile); Close(OutFile);
end.
if not Eof(InFile) do Readln(InFile);
Параметр - do
И ещё вопрос.
Зачем в этой же строке применён оператор if, ведь можно обойтись без него как было в программе P_30_1:
while not Eof(InFile) do begin
Counter:= Counter+1;
HandleString;
Readln(InFile);
end;
Close(InFile); Close(OutFile);
end.
Valeriy писал(а):Текст программы P_31_1, Глава 31, стр 216 содержит опечатку в строке:Код: Выделить всё
if not Eof(InFile) do Readln(InFile);
Параметр - do
Об этой опечатке уже знаю, но все равно спасибо за подсказку, Валерий!
Valeriy писал(а):И ещё вопрос.Зачем в этой же строке применён оператор if, ведь можно обойтись без него как было в программе P_30_1:Код: Выделить всё
while not Eof(InFile) do begin
Counter:= Counter+1;
HandleString;
Readln(InFile);
end;
Close(InFile); Close(OutFile);
end.
В данном случае нужен If, и вот почему.
Мы договорились выполнять перевод строки после HandleString, а внутри этой процедуры в принципе можно достичь конца файла, и тогда простой Readln(InFile) без IF вызовет ошибку.
Еще раз благодарю всех за подсказки!
Здравствуйте, Олег. У меня возникло еще несколько вопросов. Пишу здесь, так как может быть еще кто-нибудь захочет на них ответить.
Если Вы против, то буду писать только на e-mail.
1)стр. 185, "А слабо?", пункт б.
Я открыл файл "блокнотом" Windows, и программа на паскале спокойно переписала его. Получился пример не совсем наглядный, видимо у "Блокнота" как-то по-другому реализован доступ к текстовым файлам. Или это я что-то сделал не так?
2)стр. 188, 4-ый абзац.
Может быть, я снова что-то делаю не так, но «Ctrl+H» у меня (в последней версии ФП) работает как backspace, стирает символ слева от курсора.
3)стр. 193, третий абзац
Может быть, Вы имели в виду "результату функции"? Или я что-то неправильно понял?
4)стр. 196, "А слабо?", пункт а. Это не опечатка, просто не кое-что непонятно.
В ответах к этому заданию Вы представили следующий код:
У меня получилась почти так же, только переменной, в которую записывается номер (в данном случае - N), я присвоил тип string. И получилось вот что: программа впадала в бесконечный цикл, файл police.out рос бесконечно. Я почему-то не могу догадаться, из-за чего это происходит. Думаю, потому что конец строки не достигается, верно? Но почему? Пожалуйста, объясните!
Если Вы против, то буду писать только на e-mail.
1)стр. 185, "А слабо?", пункт б.
Сделайте то же самое для случая, когда программа пытается открыть для
записи файл, уже открытый вами в редакторе текста.
Я открыл файл "блокнотом" Windows, и программа на паскале спокойно переписала его. Получился пример не совсем наглядный, видимо у "Блокнота" как-то по-другому реализован доступ к текстовым файлам. Или это я что-то сделал не так?
2)стр. 188, 4-ый абзац.
Когда выделение станет ненужным, его можно снять, щелкнув мышью в
любом месте текста, либо нажав комбинацию «Ctrl+H».
Может быть, я снова что-то делаю не так, но «Ctrl+H» у меня (в последней версии ФП) работает как backspace, стирает символ слева от курсора.
3)стр. 193, третий абзац
Теперь заглянем внутрь функции FindNumber. В первой строке результату
функции присваивается значение FALSE. И это оправдано, поскольку имени
функции должно быть обязательно присвоено значение.
Может быть, Вы имели в виду "результату функции"? Или я что-то неправильно понял?
4)стр. 196, "А слабо?", пункт а. Это не опечатка, просто не кое-что непонятно.
В ответах к этому заданию Вы представили следующий код:
Код: Выделить всё
var F1, F2: text;
N: integer;
begin
Assign(F1, 'Police.in'); Reset(F1);
Assign(F2, 'Police.out'); Rewrite(F2);
while not Eof(F1) do begin
Read(F1, N);
Writeln(F2,N);
end;
CloseУ меня получилась почти так же, только переменной, в которую записывается номер (в данном случае - N), я присвоил тип string. И получилось вот что: программа впадала в бесконечный цикл, файл police.out рос бесконечно. Я почему-то не могу догадаться, из-за чего это происходит. Думаю, потому что конец строки не достигается, верно? Но почему? Пожалуйста, объясните!
