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

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

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

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

Сообщение Vadim » 23.10.2012 02:51:11

Scraper писал(а):Просто времени учиться не много 1-2 часа в сутки.

У Вас просто вагон времени. Осталось самое малое - правильно его использовать. ;)
Vadim
долгожитель
 
Сообщения: 4112
Зарегистрирован: 05.10.2006 08:52:59
Откуда: Красноярск

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

Сообщение Paster Fob » 23.10.2012 08:22:47

deka47,Scraper Для закрепления понятия функций и процедур,не запуская данный код,вы должны посчитать возвращаемый результат.Затем запустите и проверьте себя.
Код: Выделить всё
function param(var a,b,c:integer):integer;
begin
  a:=a+1;
  b:=b+1;
  c:=c+1;
  param:=a+b+c;
end;

var n:integer;

begin
  n:=1;
  writeln(param(n,n,n));
  readln
end.


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

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

Сообщение Brainenjii » 23.10.2012 08:55:27

[offtop]ИМХО, подобные задачи не закрепляют понятия функций и процедур, а попросту сбивают с толку неочевидным поведением. За всё время работы с паскалем, мне ни разу не приходилось делать что-либо подобное[/offtop]
А час-два в день - это мало... Сейчас в таком же режиме осваиваю JS.
Аватара пользователя
Brainenjii
энтузиаст
 
Сообщения: 1351
Зарегистрирован: 10.05.2007 00:04:46

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

Сообщение Oleg_D » 24.10.2012 09:05:01

Brainenjii писал(а):За всё время работы с паскалем, мне ни разу не приходилось делать что-либо подобное

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

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

Сообщение deka47 » 26.10.2012 07:06:04

Опять застрял, уже на 31 главе. Ошибки бредовые, но не могу найти.

Сформируйте файл «Numbers.txt», поместив в него 10 случайных чисел
в диапазоне от 0 до 9 (некоторые числа могут повторяться). Затем найдите в этом
файле: 1) максимальное и минимальное число; 2) сумму всех чисел; 3) среднее
арифметическое – напечатайте его с двумя знаками после точки.

Код: Выделить всё
var f1, f2: text;
    max, min, sum, i, n, cnt: integer;
    aver: real;
begin
randomize;
assign (f1, 'Numbers.txt.'); rewrite (f1);
for i:=1 to 10 do writeln (f1, random (10));
close (f1);
assign (f2, 'Numbers.txt.'); reset (f2);
max:=0; min:=9;
while not eof (f2) do begin
read (f2, n);
writeln (n); {из-за этого оператора выводит вконце всех чисел в окно вывода 0 и даже если в .тхт не было 0, то минимальное 0, я не знаю как сделать так, чтобы выводило цифры, которые в документе в окно вывода, но не выводился чертов 0, все же, я думаю, что минимальное не из-за этого всегда 0, но тогда я не знаю из-за чего}
if n>max then max:=n;
if n<min then min:=n;
cnt:=cnt+1; {считает 11 раз, а не 10, из-за этого сбивается среднее арифм., почему 11 и как сделать, чтобы было 10, ведь в тхт 10 цифр}
sum:=sum+n;
end;
aver:=sum/cnt;
writeln ('Сумма - ', sum);
writeln ('Среднее арифм. - ', aver:0:2);
writeln ('Максимальное - ', max);
writeln ('Минимальное - ', min);
close (f2);
end.


Максимум и сумма работает.

Добавлено спустя 1 минуту 34 секунды:
Paster Fob, мой ответ был 6, посмотрел правильный - 12, просмотрел через откладку, не понял все равно.
deka47
новенький
 
Сообщения: 33
Зарегистрирован: 07.10.2012 22:43:26

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

Сообщение Oleg_D » 26.10.2012 09:36:38

deka47 писал(а):Опять застрял, уже на 31 главе.

Уточняю: это задача 30-В на стр. 209. В принципе она решена верно и работает, будучи откомпилирована в Borland Pascal, Delphi или PascalABC. Но под "фрями" проявляется давний глюк: он умудряется читать число за последней строкой файла или в пустой строке, возвращая ноль. Уже обсуждалось где-то. С учётом сказаного, я слегка подправил программу.
Код: Выделить всё
var f1, f2: text;
    max, min, sum, i, n, cnt: integer;
    aver: real;
begin
  randomize;
  assign (f1, 'Numbers.txt.'); rewrite (f1);
  for i:=1 to 10 do writeln (f1, 1+random (10));  { +1, чтобы не было нулей }
  close (f1);
  assign (f2, 'Numbers.txt.'); reset (f2);
  max:=0; min:=9;
  while not eof (f2) and not eoln(f2) do begin  { Проверяем и на конец строки }
    readln (f2, n);                            { Read исправил на Readln }
    writeln (n);
    if n>max then max:=n;
    if n<min then min:=n;
    cnt:=cnt+1;
    sum:=sum+n;
  end;
  aver:=sum/cnt;
  writeln ('sum= ', sum);
  writeln ('aver= ', aver:0:2);
  writeln ('max= ', max);
  writeln ('min= ', min);
  close (f2);
end.

И ещё пара замечаний. Здесь можно обойтись одной файловой переменной. А для устройства отступов удобно делать так: выделяете нужные строки (логический блок), а затем двигаете блок комбинациями:
Ctrl+K+I - вправо
Ctrl+K+U - влево
deka47 писал(а):мой ответ был 6, посмотрел правильный - 12, просмотрел через откладку, не понял все равно.

Вот почему так не пишут нормальные люди. :D А разгадка простая: все три параметра ссылаются на одну глобальную переменную, которая изначально равна 1. Внутри функции к ней прибавляется 3 и получается 4. Затем функция возвращает трижды скложенное это же число: 4+4+4.
Oleg_D
постоялец
 
Сообщения: 391
Зарегистрирован: 09.05.2011 11:28:36

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

Сообщение deka47 » 26.10.2012 15:09:08

Oleg_D, да спасибо, разобрался.
deka47
новенький
 
Сообщения: 33
Зарегистрирован: 07.10.2012 22:43:26

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

Сообщение tuzkozbir » 07.11.2012 14:47:40

Застрял на 14-главе.Как решить эту задачу?
"Пусть программа запросит три числа: A, B и C, а затем напечатает большее
из них. Подсказка: примените булевы выражения вкупе с операциями сравнения,
которые в булевых выражениях надо заключать в скобки, например:
if (A>=B) and (A>=C) then . . .
Примечание. Скобки ставят по той причине, что булевы операции можно
выполнять и с числами, и такие операции приоритетней операций сравнения. О
применении логических операций к числам сказано в главе 48."
Код: Выделить всё
var A, b, c :integer;
    s : string;
    r, t, y : boolean;
begin
    Write('Первое число');Readln(A);
    Write('Второе число');Readln(B);
    Write('Третье число');Readln(C);
    R:= (A>=B) and (A>=c);
    T:= (B>=A) and (B>=C);
    Y:= (C>=A) and (C>=B);
    IF R
    then S:=A
    else S:=('-');
    IF T
    then S:=B
    else S:=('-');
    IF Y
    then S:=C
    else S:=('-')
    Writeln(S);Readln


end.



tuzkozbir
незнакомец
 
Сообщения: 3
Зарегистрирован: 07.11.2012 14:39:05

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

Сообщение Oleg_D » 07.11.2012 15:06:48

Первая ошибка Вашего решения -- присваивание строковой переменной S числового значения.
Вторая -- что будет если два или три числа будут совпадать?
У меня так решено:
Код: Выделить всё
var A, B, C : integer;
begin
  Write('Введите A, B, C: '); Readln(A, B, C);
  if (A>B) and (A>C)
    then Writeln(A)
    else if (B>A) and (B>C)
      then Writeln(B)
      else Writeln(C);
  Readln;
end.
Oleg_D
постоялец
 
Сообщения: 391
Зарегистрирован: 09.05.2011 11:28:36

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

Сообщение tuzkozbir » 07.11.2012 16:04:45

Спасибо

Добавлено спустя 21 час 28 минут 25 секунд:
Пытаюсь решить эту задачу ,но паскаль выдаёт ошибку
Б) Напишите программу, которая бы запрашивала номер дня недели, и в ответ
печатала бы название этого дня («понедельник», «вторник» и так далее)
Можете сказать в чем проблема?
Код: Выделить всё
var s : string;
begin
      repeat
           Write('‚ и ў®Їа®б: ');Readln(S);
           if s='' then break;
           case Random(8) of
                 1: S:='Џ®­Ґ¤Ґ«м­ЁЄ';
                 2: S:='‚в®а­ЁЄ';
                 3: S:='‘। ';
                 4: S:='—ҐвўҐаЈ';
                 5: S:='Џпв­Ёж ';
                 6: S:='‘гЎЎ®в ';
                 7: S:='‚®бЄаҐбҐ­мҐ';
                 else S:='ЌҐвг в Є®Ј® ¤­п'
           end;
           Writeln(S);
      until false;
end.
tuzkozbir
незнакомец
 
Сообщения: 3
Зарегистрирован: 07.11.2012 14:39:05

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

Сообщение Vadim » 08.11.2012 13:54:04

Пытаюсь решить эту задачу ,но паскаль выдаёт ошибку

А текст ошибки Вы разглашать категорически не хотите? :)
Vadim
долгожитель
 
Сообщения: 4112
Зарегистрирован: 05.10.2006 08:52:59
Откуда: Красноярск

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

Сообщение Oleg_D » 08.11.2012 14:04:03

tuzkozbir писал(а):Напишите программу, которая бы запрашивала номер дня недели

Для ввода дня недели нужна не строковая а числовая переменная (integer). И далее на ней оператор case построить.
Ну, и ошибки надо нам сообщать, иначе как отвечать?.
Oleg_D
постоялец
 
Сообщения: 391
Зарегистрирован: 09.05.2011 11:28:36

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

Сообщение tuzkozbir » 08.11.2012 14:08:44

Текст ошибки
Код: Выделить всё
P_16_2.pas(6,15) Error: Incompatible types: got "SmallInt" expected "ShortString"
P_16_2.pas(7,21) Error: Identifier not found "day"
P_16_2.pas(8,19) Error: Constant and CASE types do not match
P_16_2.pas(8,24) Error: Incompatible types: got "Constant String" expected "SmallInt"
P_16_2.pas(9,19) Error: Constant and CASE types do not match
P_16_2.pas(9,24) Error: Incompatible types: got "Constant String" expected "SmallInt"
P_16_2.pas(10,19) Error: Constant and CASE types do not match
P_16_2.pas(10,24) Error: Incompatible types: got "Constant String" expected "SmallInt"
P_16_2.pas(11,19) Error: Constant and CASE types do not match
P_16_2.pas(11,24) Error: Incompatible types: got "Constant String" expected "SmallInt"
P_16_2.pas(12,19) Error: Constant and CASE types do not match
P_16_2.pas(12,24) Error: Incompatible types: got "Constant String" expected "SmallInt"
P_16_2.pas(13,19) Error: Constant and CASE types do not match
P_16_2.pas(13,24) Error: Incompatible types: got "Constant String" expected "SmallInt"
P_16_2.pas(14,19) Error: Constant and CASE types do not match
P_16_2.pas(14,24) Error: Incompatible types: got "Constant String" expected "SmallInt"
P_16_2.pas(15,26) Error: Incompatible types: got "Constant String" expected "SmallInt"
P_16_2.pas(20) Fatal: There were 17 errors compiling module, stopping
P_16_2.pas(0) Fatal: Compilation aborted
tuzkozbir
незнакомец
 
Сообщения: 3
Зарегистрирован: 07.11.2012 14:39:05

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

Сообщение Oleg_D » 08.11.2012 14:19:43

Вот ваш код (чуть подправленны строки в кавычках). Компилится без проблем.
Код: Выделить всё
var s : string;
begin
      repeat
           Write('S: ');Readln(S);
           if s='' then break;
           case Random(8) of
                 1: S:='Пон';
                 2: S:='Втор';
                 3: S:='Ср;
                 4: S:='Четв';
                 5: S:='Пят';
                 6: S:='Суб';
                 7: S:='Воскр';
                 else S:='??'
           end;
           Writeln(S);
      until false;
end.
Oleg_D
постоялец
 
Сообщения: 391
Зарегистрирован: 09.05.2011 11:28:36

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

Сообщение Paster Fob » 08.11.2012 15:11:38

Код: Выделить всё
var s : string;
begin
      repeat
           Write('S: ');Readln(S);
           if s='' then break;
           case Random(8) of
                 1: S:='Пон';
                 2: S:='Втор';
                 3: S:='Ср;
                 4: S:='Четв';
                 5: S:='Пят';
                 6: S:='Суб';
                 7: S:='Воскр';
                 else S:='??'
           end;
           Writeln(S);
      until false;
end.


что-то совсем хрень какая-то,в задаче совсем не то сказано.Вот правильный код:
Код: Выделить всё
var n:byte;
begin
  repeat
    writeln('Введите номер дня недели');
    readln(n);
    case n of
      1 : writeln('Понедельник');
      2 : writeln('Вторник');
      3 : writeln('Среда');
      4 : writeln('Четверг');
      5 : writeln('Пятница');
      6 : writeln('Суббота');
      7 : writeln('Воскресенье');
      else
        if n>0 then
          writeln('в неделе 7 дней');
    end;
  until n=0;
end.
Аватара пользователя
Paster Fob
постоялец
 
Сообщения: 188
Зарегистрирован: 22.02.2011 21:53:36
Откуда: Новосибирск.

Пред.След.

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

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

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

Рейтинг@Mail.ru