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

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

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

Re: "Песни о Паскале" - для школьников и начинающих

Сообщение Oleg_D » 27.02.2012 14:44:56

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

Re: "Песни о Паскале" - для школьников и начинающих

Сообщение Oleg_D » 16.03.2012 23:04:29

2012-03-16 выложена 10-я редакция книги "Песни о Паскале"

Нумерация страниц не изменилась.

Основные исправления:

Код: Выделить всё
Гл.     Стр.      Исправление
9   67   Добавлено о типизированных константах
26   175   Исправлены функции шифрования-дешифрования
33   239   Исправлено объявление типа
36   260   Удалена лишняя запятая
38   272   6 7 22 21  <-– в строке входного файла была пропущена граница  20
49   378   Рис. 111 – исправлена нумерация границ на рисунке
49   380   Assign(FileIn, 'P_36_3.in'); --> Assign(FileIn, 'P_38_3.in');


Добавлено 11 задач:

Код: Выделить всё
Гл. Стр.
9    68
14  100
16  110
20  135
24  162
33  240
34  247
47  370
50  396

Добавлены решения задач.
Исправлены несколько файлов в архиве программ.
Еще раз благодарю всех, кто указал на ошибки и дал полезные советы!
Oleg_D
постоялец
 
Сообщения: 391
Зарегистрирован: 09.05.2011 11:28:36

Re: "Песни о Паскале" - для школьников и начинающих

Сообщение Vadim » 17.03.2012 10:14:25

Oleg_D
Отлично!
Vadim
долгожитель
 
Сообщения: 4112
Зарегистрирован: 05.10.2006 08:52:59
Откуда: Красноярск

Re: "Песни о Паскале" - для школьников и начинающих

Сообщение Oleg_D » 18.03.2012 08:41:02

Случайно обнаружил какую-то кривость в ссылке на сайт с 10-й редакцией, сейчас исправил.
Oleg_D
постоялец
 
Сообщения: 391
Зарегистрирован: 09.05.2011 11:28:36

Re: "Песни о Паскале" - для школьников и начинающих

Сообщение Valeriy » 18.03.2012 16:55:49

Глава 38 стр 275
Код: Выделить всё
1-й отсев чисел, кратных 2:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
2-й отсев чисел, кратных 3:
1 2 3 * 5 * 7 * 9  * 11  * 13  * 15  * 17  * 19  *
Результат – простые числа:
1 2 3 * 5 * 7 * *  * 11  * 13  *  *  * 17  * 19  *

В итоговом результате в множестве Simples единица отсутствует:

2 3 5 7 11 13 17 19 23 29 31 37 41 . . . . . 251

так как в множестве Simples:= [2..255]; её нет и в цикле for n:=2 to
(255 div 2) do begin она тоже не указана. Но если её в эти места
подставить то выходной файл вообще не выведет, не могу сообразить
почему. Ведь в этом случае должна появиться единица, а двойка
исчезнуть?
Valeriy
новенький
 
Сообщения: 14
Зарегистрирован: 02.09.2011 06:13:57

Re: "Песни о Паскале" - для школьников и начинающих

Сообщение Oleg_D » 18.03.2012 17:18:09

Поскольку на единицу делятся все числа, то с неё нельзя начинать, - тогда все числа будут вычеркнуты.
Погуглите о простых числах.
Oleg_D
постоялец
 
Сообщения: 391
Зарегистрирован: 09.05.2011 11:28:36

Re: "Песни о Паскале" - для школьников и начинающих

Сообщение Valeriy » 24.03.2012 16:45:02

Глава 39 стр 278.
В примере в двух местах после end отсутствует точка с запятой.

И ещё, посмотрите пожайлуста, правильно ли я сделал ввод и вывод
массива?
Код: Выделить всё
var Names : array [ 1..30 ] of string;
    i : integer;    inF, outF : text;
begin
i:=1;
Assign ( inF, 'C:\InFile.txt');   Assign ( outF, 'C:\OutFile.txt');
Reset ( inF );   Rewrite ( outF );
  { пока не конец файла и не введены все элементы }
  while not Eof ( inF ) and ( i <=30 ) do begin
    Readln ( inF,  Names [ i ] );
    Writeln ( outF, Names [ i ] );
    i:= i+1;
  end;
  Close ( inF );   Close ( outF );
end.

Заранее спасибо.
Valeriy
новенький
 
Сообщения: 14
Зарегистрирован: 02.09.2011 06:13:57

Re: "Песни о Паскале" - для школьников и начинающих

Сообщение Oleg_D » 24.03.2012 21:39:59

Valeriy писал(а):Глава 39 стр 278.В примере в двух местах после end отсутствует точка с запятой.

В первом случае её не должо быть, а во втором действительно пропущена, спасибо!
Valeriy писал(а):И ещё, посмотрите пожайлуста, правильно ли я сделал ввод и вывод массива?

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

Re: "Песни о Паскале" - для школьников и начинающих

Сообщение Paster Fob » 29.03.2012 17:04:29

Добрый день.Пытаюсь решить проверкой на подмножество задачу "В тридевятом царстве" из главы 38.
Как я понял это работает так,например
Код: Выделить всё
sA:=[5];sb:=[4..7];
  if sA<=sb then
    writeln('пересекаются');
  else writeln('не пересекаются');

т.е если все элементы множества sA входят в множество sB то вывести на экран надпись 'пересекаются',иначе (например sA:=[3]) напечатать 'не пересекаются'.Правильно я понял или нет,просто в программе это не работает.
Аватара пользователя
Paster Fob
постоялец
 
Сообщения: 188
Зарегистрирован: 22.02.2011 21:53:36
Откуда: Новосибирск.

Re: "Песни о Паскале" - для школьников и начинающих

Сообщение Oleg_D » 29.03.2012 17:16:48

Уточните, пожалуйста, о какой задаче речь?
То, о чем Вы пишите, выясняется просто:
Код: Выделить всё
sA:=[5];sb:=[4..7];
  if sA*sb <>[] then
    writeln('пересекаются');
  else writeln('не пересекаются');

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

Re: "Песни о Паскале" - для школьников и начинающих

Сообщение Paster Fob » 29.03.2012 17:27:04

Oleg_D писал(а):Уточните, пожалуйста, о какой задаче речь?

"В тридевятом царстве" глава 38.
"Это случилось на затерянном в океане материке, носящем на себе несколько
царств-государств. Жители материка – те еще скряги, и потому тратили для
названий своих стран всего по одной букве: «A», «B», «C» и так далее..."
Oleg_D писал(а):А проверка на подмножество здесь не катит.

А почему?Хотелось бы разобраться.
Аватара пользователя
Paster Fob
постоялец
 
Сообщения: 188
Зарегистрирован: 22.02.2011 21:53:36
Откуда: Новосибирск.

Re: "Песни о Паскале" - для школьников и начинающих

Сообщение Oleg_D » 29.03.2012 17:39:42

Paster Fob писал(а):А почему?Хотелось бы разобраться.

Потому, что если SA будет даже пустым, то и тогда SA <= SB.
Вот Вам задачка на тему подмножеств. Даны два слова, можно ли из букв первого из них составить второе? Количество букв неважно, т.е. в обоих словах они могут повторяться. Попробуйте решить, а не получится - поможем.
Oleg_D
постоялец
 
Сообщения: 391
Зарегистрирован: 09.05.2011 11:28:36

Re: "Песни о Паскале" - для школьников и начинающих

Сообщение Paster Fob » 29.03.2012 18:20:53

Задание:В тридевятом царстве" глава 38.
Oleg_D писал(а):Потому, что если SA будет даже пустым, то и тогда SA <= SB.

поэтому у меня и не получалось,решить подмножеством.
вот так я решил эту задачу
Код: Выделить всё
type tset=set of byte;
     tchar='B'..'I';
procedure readset(var afile:text;var aset:tset);
var n:byte;
begin
  aset:=[];
  while not eoln(afile) do
    begin
      read(afile,n);
      aset:=aset+[n];
    end;
  readln(afile);
end;

procedure writeset(var afile:text;var asetA,asetB:tset;var ach:tchar);
begin
  if asetA*asetB<>[] then
    writeln(afile,'A граничит с ',ach)
  else
    writeln(afile,'A не граничит с ',ach);
  if ach<>'I' then
    ach:=succ(ach);
end;

var f:text;ch:tchar;
  snA,snB,snC,snD,snE,snF,snG,snH,snI:tset;
begin
  assign(f,'C:\Files for Program Pascal\Granicain.txt');
  reset(f);
  readset(f,snA);
  readset(f,snB);
  readset(f,snC);
  readset(f,snD);
  readset(f,snE);
  readset(f,snF);
  readset(f,snG);
  readset(f,snH);
  readset(f,snI);
  close(f);
  assign(f,'C:\Files for Program Pascal\Granicaout.txt');
  rewrite(f);
  ch:='B';
  writeset(f,snA,snB,ch);
  writeset(f,snA,snC,ch);
  writeset(f,snA,snD,ch);
  writeset(f,snA,snE,ch);
  writeset(f,snA,snF,ch);
  writeset(f,snA,snG,ch);
  writeset(f,snA,snH,ch);
  writeset(f,snA,snI,ch);
  close(f);
end.

Oleg_D писал(а):Вот Вам задачка на тему подмножеств. Даны два слова, можно ли из букв первого из них составить второе? Количество букв неважно, т.е. в обоих словах они могут повторяться. Попробуйте решить, а не получится - поможем.

С множеством до конца ещё не разобрался,а тут ещё и подмножество,но попробую куда ж деваться-то :)
Аватара пользователя
Paster Fob
постоялец
 
Сообщения: 188
Зарегистрирован: 22.02.2011 21:53:36
Откуда: Новосибирск.

Re: "Песни о Паскале" - для школьников и начинающих

Сообщение Oleg_D » 29.03.2012 23:02:39

Paster Fob писал(а):вот так я решил эту задачу

Можно принять в качестве тренеровочного упражнения. :D
Только в будущем старайтесь искать короткие решения, а для этого надо применять циклы.
Paster Fob писал(а):С множеством до конца ещё не разобрался,а тут ещё и подмножество

Подмножество - это и есть множество, то есть его часть. Вот примеры, проверьте.
Код: Выделить всё
Writeln([1..3] <= [1..9]); { true }
Writeln([4..7] <= [1..9]); { true }
Writeln([0..3] <= [1..9]); { false поскольку 0 не попадает в множество 1..9 }
Oleg_D
постоялец
 
Сообщения: 391
Зарегистрирован: 09.05.2011 11:28:36

Re: "Песни о Паскале" - для школьников и начинающих

Сообщение Paster Fob » 30.03.2012 12:54:08

Oleg_D писал(а):Можно принять в качестве тренеровочного упражнения.Только в будущем старайтесь искать короткие решения, а для этого надо применять циклы.


Ну а задачу "Подвиг контрразведчика" из той же главы вот так решил:
Код: Выделить всё
type tset=set of byte;
     tchar='A'..'H';
function readset(var arg:tchar):tset;
var f:text;s:string;asn:tset;
    n:byte;
begin
  writeln('введите путь к файлу ',arg);
    if arg<>'H' then
      arg:=succ(arg);
  readln(s);
  {s:=('C:\Files for Program Pascal\'+s);}
  assign(f,s);
  reset(f);
  asn:=[];
  while not eof(f) do begin
    read(f,n);
    asn:=asn+[n];
  end;
  close(f);
  readset:=asn;
end;

procedure writeset(arg:tset);
var k:byte;f:text;s:string;
begin
  assign(f,'');
  rewrite(f);
  s:='шпион найден!Это сотрудник под номером ';
  write(f,s);
  for k:=1 to 255 do
    if k in arg then
      write(f,k);
  close(f);
end;

var sn,snA,snB,snC,snD,snE,snF,snG,snH:tset;
    m:tchar;
begin
  m:='A';
  snA:=readset(m);
  snB:=readset(m);
  snC:=readset(m);
  snD:=readset(m);
  snE:=readset(m);
  snF:=readset(m);
  snG:=readset(m);
  snH:=readset(m);
  sn:=(snA*snD*snG*snH)-(snB+snC+snE+snF);
  writeset(sn);
  readln
end.


То же не очень?
Кстати нашёл мелкую опечатку.стр. 277,раздел "А вам слабо" задание в) написано "...Это был тестовый файл...",надо текстовый.
Последний раз редактировалось Paster Fob 30.03.2012 15:34:47, всего редактировалось 1 раз.
Аватара пользователя
Paster Fob
постоялец
 
Сообщения: 188
Зарегистрирован: 22.02.2011 21:53:36
Откуда: Новосибирск.

Пред.След.

Вернуться в Книга "Песни о Паскале"

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 1

Рейтинг@Mail.ru