Еще раз спасибо за внимание к моей книге. Думаю, что обсуждать Ваши вопросы на форуме будет полезней для всех: и для меня, и для читателей. Завтра постараюсь Вам ответить, если меня не опередят .
Добавлено спустя 12 часов 15 минут 36 секунд:
Теперь отвечаю на вопросы.
teapot писал(а):1)стр. 185, "А слабо?", пункт б.Сделайте то же самое для случая, когда программа пытается открыть для записи файл, уже открытый вами в редакторе текста.Я открыл файл "блокнотом" Windows, и программа на паскале спокойно переписала его. Получился пример не совсем наглядный, видимо у "Блокнота" как-то по-другому реализован доступ к текстовым файлам. Или это я что-то сделал не так?
Я проверил и получил то же самое. Дело, вероятно, не в блокноте, а в Windows, - она ведет себя не так, как однозадачная MS-DOS. Когда в свойствах файла я установил флаг «только чтение» (правой кнопкой мыши), то программа сработала, как надо, т.е. выдала код ошибки 5 (File access denied - Отказано в доступе к файлу).
teapot писал(а):2)стр. 188, 4-ый абзац.
Когда выделение станет ненужным, его можно снять, щелкнув мышью в
любом месте текста, либо нажав комбинацию «Ctrl+H».
Может быть, я снова что-то делаю не так, но «Ctrl+H» у меня (в последней версии ФП) работает как backspace, стирает символ слева от курсора.
Тут моя промашка – надо нажимать «Ctrl+K+H». По горячим клавишам лучше порыться в хелпах или других источниках.
teapot писал(а):3)стр. 193, третий абзац
Теперь заглянем внутрь функции FindNumber. В первой строке результату
функции присваивается значение FALSE. И это оправдано, поскольку имени
функции должно быть обязательно присвоено значение. Может быть, Вы имели в виду "результату функции"? Или я что-то неправильно понял?
Вы правильно поняли. Я хотел выразиться короче, понятней, но Ваш вариант, наверное, лучше.
teapot писал(а):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(F1); Close(F2);
end.
У меня получилась почти так же, только переменной, в которую записывается номер (в данном случае - N), я присвоил тип string. И получилось вот что: программа впадала в бесконечный цикл, файл police.out рос бесконечно. Я почему-то не могу догадаться, из-за чего это происходит. Думаю, потому что конец строки не достигается, верно? Но почему? Пожалуйста, объясните!
Тут все просто. Процедура Read читает в переменную типа STRING символы до конца текущей строки файла, но не переходит на следующую строку (в отличие от Readln). Потому при первом её вызове получите всю текущую строку, а при последующих – пустые строки, а позиция чтения сдвигаться не будет. Соответственно и до конца файла не дойдете.
Еще раз благодарю за въедливость - Вы просто находка для меня! Пишите сюда и дальше, желаю успешного продвижения по страницам.