Разбор примеров из книги

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

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

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

Сообщение Valeriy » 31.01.2012 18:35:05

Тоесть в данном случае в файл можно только добавлять данные с помощью процедуры Append, а удалять, или менять в нём ничего нельзя.
А вот чтобы скопировать из файла в файл нужна отдельная процедура?
Valeriy
новенький
 
Сообщения: 14
Зарегистрирован: 02.09.2011 06:13:57

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

Сообщение Oleg_D » 31.01.2012 18:43:20

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

Конечно.
Valeriy писал(а):А вот чтобы скопировать из файла в файл нужна отдельная процедура?

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

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

Сообщение cavalorn » 22.02.2012 22:03:53

Доброго времени. Извините за идиотский вопрос, но застопорилась на простейшей задаче.
Глава 13, задача В из раздела "А слабо".
Целый день сижу и пытаюсь понять, почему не могу проехать по дорогам со шлагбаумами)
Не понимаю, как здесь можно сделать что-то не так, ибо все настолько прозрачно, но все же что-то действительно не так. Буду благодарна за помощь.

Код: Выделить всё
var A,B,C,D,E,F,G:boolean;
S:string;
begin
write('Улица A: '); readln(S); A:=S='1';
write('Улица B: '); readln(S); B:=S='1';
write('Улица C: '); readln(S); C:=S='1';
write('Улица D: '); readln(S); D:=S='1';
write('Улица E: '); readln(S); E:=S='1';
write('Шлагбаум F: '); readln(S); F:=S='1';
write('Шлагбаум G: '); readln(S); G:=S='1';
if A and B and not F or C and D or E and not G
then S:='Можно ехать'
else S:='Сиди дома';
writeln(S); readln
end.

Делала и как в ответах вместо S:= - writeln (я так понимаю, суть от этого не меняется), и скобки ставила, и переменные все латинские, но в результате выполняется только условие "С and D", а те, которые с NOT - ни в какую.
cavalorn
незнакомец
 
Сообщения: 2
Зарегистрирован: 22.02.2012 21:43:58

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

Сообщение Oleg_D » 23.02.2012 11:17:14

Скопировал Вашу программу и проверил на нескольких наборах данных, - работает.
Не забывайте, что через шлагбаум можно проехать, если для него вводите S<>'1', а для улицы - наоборот.
Составьте для себя схемку попроще - из одного-двух шлагбаумов - и попробуйте разобраться в этом.
Не стесняйтесь спрашивать, успехов Вам!
Oleg_D
постоялец
 
Сообщения: 391
Зарегистрирован: 09.05.2011 11:28:36

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

Сообщение Paster Fob » 23.02.2012 12:18:00

Решение задачи зависит от поставленного вопроса,проезда по улице.Я так вообще без not решал эту задачу.
Код: Выделить всё
program proezd_po_ulice2;
var a,b,c,d,e,f,g:boolean;
  s:string;
begin
  writeln('программа имитирующая проезд по улице');
  writeln('отвечайте "да" или "нет"');
  write('Улица A свободна для проезда? ');
  readln(s);
   a:=s='да';
  write('Улица B свободна для проезда? ');
  readln(s);
   b:=s='да';
  write('Шлакбаум F открыт? ');
  readln(s);
   f:=s='да';
  write('Улица С свободна для проезда? ');
  readln(s);
   c:=s='да';
  write('Улица D свободна для проезда? ');
  readln(s);
   d:=s='да';
  write('Улица Е свободна для проезда? ');
  readln(s);
   e:=s='да';
  write('Шлакбаум G открыт? ');
  readln(s);
   g:=s='да';
     if (a and b and f) or (c and d) or (e and g) then
       writeln('Проезд открыт,вперёд!')
     else
       writeln('дороги нет!');
  readln
end.

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

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

Сообщение Oleg_D » 23.02.2012 12:47:08

Paster Fob
Хорошо, что Вы эксперементируете и составляете свои решения.
Но здесь я умышлено "опрокинул" шлагбаумы, чтобы учащийся применил операцию NOT и разобрался с нею.
Oleg_D
постоялец
 
Сообщения: 391
Зарегистрирован: 09.05.2011 11:28:36

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

Сообщение cavalorn » 23.02.2012 22:44:37

Спасибо за помошь, Oleg_D и Paster Fob. Кажись, разобралась, что для логического отрицания нужно задавать другой вопрос, соответственно, и получить другой ответ. А без него и того понятнее. Воистину в правильном вопросе половина ответа) Благодарствую.
cavalorn
незнакомец
 
Сообщения: 2
Зарегистрирован: 22.02.2012 21:43:58

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

Сообщение Paster Fob » 27.02.2012 15:46:02

Доброе время суток.У меня небольшая проблемка,в задании под буквой В) к 30 главе есть такая задача:
Сформируйте файл «Numbers.txt», поместив в него 100 случайных чисел
в диапазоне от 0 до 999 (некоторые числа могут повторяться)...
Так вот я создаю этот самый файл.Почему в него записывается только 52 или 53 случайных числа,почему не 100?

Код: Выделить всё
var f:text;i,n:integer;
begin
  randomize;
  assign(f,'C:\Files for Program Pascal\Numbers.txt');  // создаём файл
  rewrite(f);                                           // открываем его для записи
  for i:=1 to 100 do begin                              // запускаем цикл со счётчиком
    n:=random(1000);                                    // создаём случайное число
    writeln(f,n);                                       // и записываем его в созданный файл
  end;
end.


вот созданный файл: http://zalil.ru/32786274
Последний раз редактировалось Paster Fob 27.02.2012 15:50:49, всего редактировалось 1 раз.
Аватара пользователя
Paster Fob
постоялец
 
Сообщения: 188
Зарегистрирован: 22.02.2011 21:53:36
Откуда: Новосибирск.

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

Сообщение Brainenjii » 27.02.2012 15:50:14

Файл следует закрыть после использования.
офтоп:
маститые учителя советуют избегать такого стиля комментирования. В частности, есть проблема с длинными строками (чтобы увидеть конец комментария приходится смотреть далеко вправо), и при внесении изменений много сил уходит на поддержание форматирования (поставить требуемое число пробелов до //). Лучше делать вот так:
Код: Выделить всё
var f:text;i,n:integer;
begin
  randomize;
  // создаём файл
  assign(f,'C:\Files for Program Pascal\Numbers.txt'); 
  // открываем его для записи
  rewrite(f);                                           
  // запускаем цикл со счётчиком
  for i:=1 to 100 do begin                             
    // создаём случайное число
    n:=random(1000);                                   
    // и записываем его в созданный файл
    writeln(f,n);                                       
  end;
  close(f);
end.
Последний раз редактировалось Brainenjii 27.02.2012 15:54:46, всего редактировалось 2 раз(а).
Аватара пользователя
Brainenjii
энтузиаст
 
Сообщения: 1351
Зарегистрирован: 10.05.2007 00:04:46

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

Сообщение Paster Fob » 27.02.2012 15:53:43

блин забыл почему-то это сделать.

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

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

Сообщение Oleg_D » 28.02.2012 13:23:11

Paster Fob писал(а):Oleg_D мои решения задач почти все отличаются от тех что в книге,стоит расстраиваться или ничего страшного?

Вы об ответах на "Слабо?" Так они и не могут совпадать. Даже опытные программисты решают одну и ту же задачу по-разному. И примеры задач из книги тоже можно изменять по-своему. Новичкам порой нужны не самые эффективные примеры, а самые понятные, - к этому я и стремился. А опыт со временем придет. Не видя Ваших задач, я не могу их оценить, если хотите, упакуйте в архив и пришлите почтой, я гляну.
Oleg_D
постоялец
 
Сообщения: 391
Зарегистрирован: 09.05.2011 11:28:36

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

Сообщение Paster Fob » 28.02.2012 14:17:26

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

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

Сообщение bw » 28.02.2012 22:39:18

> создаём файл
Может инициализируем дескриптор? Под "создаём файл" лично я понимаю то, что по указанному пути действительно будет создан файл, уверен не один я такой. А в действительности эта строчка лишь "подкручивает" переменную f.
Что касается стиля комментирования, вариант Paster Fob куда предпочтительнее. Когда однострочный комментарий мешается с кодом, невозможно прочитать ни код, ни комментарий. Или делаем отступ перед таким комментарием. Все ведь читали Макконнелла с его "Пишите код так, как будто сопровождать его будет склонный к насилию психопат, который знает, где вы живете" :-).

..bw
Аватара пользователя
bw
постоялец
 
Сообщения: 359
Зарегистрирован: 01.12.2005 11:36:23
Откуда: Усть-Илимск

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

Сообщение Paster Fob » 03.05.2012 17:58:59

Ни как не могу решить задание глава 41 раздел "А слабо?" под буквой а)Отсортировать фамилии учеников по возрастанию и убыванию.
Заглянул в ответ.Но как ни старался так и не понял его. :( Если разложить строку на символы и сравнивать например 1-ый символ 1-ой строки с 1-ым символом 2-ой строки ,то так понятно.Но вы сравниваете между собой строки т.е фамилии учеников.И они сортируются.Как так?По какому принципу они сравниваются и сортируются?Объясните пожалуйста. :?:
Аватара пользователя
Paster Fob
постоялец
 
Сообщения: 188
Зарегистрирован: 22.02.2011 21:53:36
Откуда: Новосибирск.

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

Сообщение Oleg_D » 03.05.2012 22:56:53

Paster Fob писал(а):Ни как не могу решить задание глава 41 раздел "А слабо?" под буквой а)Отсортировать фамилии учеников по возрастанию и убыванию.

Здесь функция сравнения возвращает TRUE или FALSE в зависимости от того,
А) какая из двух строк "выше" в алфавитном порядке и
Б) в каком направлении надо сортировать
Код: Выделить всё
function Compare(Item1, Item2 : TItem; Direct: boolean): boolean;
begin
if Direct
then Compare:= Item1 > Item2
else Compare:= Item1 < Item2
end;

Я подразумевал английские фамилии, но забыл сказать об этом. В Дельфи и русские строки будут сравниваться правильно.
Если не ясно, загляните в главу 44.
Oleg_D
постоялец
 
Сообщения: 391
Зарегистрирован: 09.05.2011 11:28:36

Пред.След.

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

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

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

Рейтинг@Mail.ru