OberonCore
https://forum.oberoncore.ru/

Интересный сайт - обучение школьников С++ и Паскаль
https://forum.oberoncore.ru/viewtopic.php?f=88&t=2008
Страница 1 из 13

Автор:  Валерий Лаптев [ Среда, 04 Ноябрь, 2009 17:16 ]
Заголовок сообщения:  Интересный сайт - обучение школьников С++ и Паскаль

Вот опять нарвался на сайт Полякова
http://kpolyakov.narod.ru/school/prog.htm
Вполне себе обучает школьников на С++ и Паскале.
А также есть собственные проекты Робота, Черепахи и Исполнителя.

Автор:  Дмитрий Колосов [ Четверг, 05 Ноябрь, 2009 11:51 ]
Заголовок сообщения:  Re: Интересный сайт - обучение школьников С++ и Паскаль

Валерий Лаптев писал(а):
http://kpolyakov.narod.ru/school/prog.htm
Вполне себе обучает школьников на С++ и Паскале.
А также есть собственные проекты Робота, Черепахи и Исполнителя.


Нет, не так.
Здесь важно правильно расставить акценты.

К.Ю. Поляков владеет методикой Кушниренко.
Вот та печка, от которой необходимо рассматривать его опыт.

Кроме того, это единственный на моей памяти играющий тренер, который может себе позволить критиковать (и очень обоснованно) результаты работы выдающихся методистов и книгоиздателей.

За
  • Спасение от забвения тренажёра "Логика" (последний из могикан Новосибирского института ИВТ МинОбраза; сколько так модных сейчас ЦОР-ов было там разработано - эх!);
  • Следование целям Школьной информатики;
  • Методически верное преподавание темы "Алгоритмизация и программирование" по методу Кушниренко;
  • Последовательную критику <известная_фамилия_1>, <известная_фамилия_2>, <известная_фамилия_3> и т.п. <эпитеты>;
  • Спасение от лихо нагрянувшего в 2009 году ЕГЭ по информатике через публикацию материалов для подготовки к итоговой аттестации (для контраста сравните с поделками на любом книжном развале);
  • Предоставленный материал, открыто и однозначно показывающий, что может сделать учитель информатики, знающий своё дело, но оказавшийся в ситуации БУП-2004.
необходимо поставить бронзовый бюст при жизни на народные деньги.

Автор:  Евгений Темиргалеев [ Четверг, 05 Ноябрь, 2009 14:34 ]
Заголовок сообщения:  Re: Интересный сайт - обучение школьников С++ и Паскаль

скачал поглядеть исполнителей... запускал под wine, там с шрифтами не густо - получил ошибку ".... monospace font required".. гм.

c "куриером" запустилась - впечатление - вариация КУМИР под винду
сишным синт-с - операторы прервать, продолжить, for... эх..

Автор:  Валерий Лаптев [ Четверг, 05 Ноябрь, 2009 15:21 ]
Заголовок сообщения:  Re: Интересный сайт - обучение школьников С++ и Паскаль

Сие, как я понимаю, говорит о том, что язык - дело вторичное (до определенного предела, конечно. Если модулей нет, то никак их грамотно не преподать, блин!), а методика преподавания - первично...

Автор:  ___ [ Среда, 10 Апрель, 2013 19:35 ]
Заголовок сообщения:  Re: Интересный сайт - обучение школьников С++ и Паскаль

http://kpolyakov.blogspot.ru/2012/10/break-break.html

Цитата:
Вот решение с использованием break:

s := 0;
while True do begin
Readln(x);
if x = 999 then break;
s := s + x;
end;

На взгляд автора, этот алгоритм очень хорошо соответствует словесному описанию: «строим цикл, выход из которого происходит при получении числа 999».


Цитата:
Можно вынести оператор Readln за цикл, продублировав его в теле цикла:

s := 0;
Readln(x);
while x <> 999 do begin
s := s + x;
Readln(x);
end;

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


Цитата:
Эта статья, прежде всего, о том, что любые идеи и принципы нужно воспринимать в контексте конечной цели. Одна из основных целей концепции структурного программирования — повысить читаемость программ и за счёт этого облегчить их отладку, тестирование и сопровождение. Поэтому применение операторов break, continue и exit нельзя считать отступлением от структурного программирования, если это не ухудшает читаемость программы и не приводит к запутыванию логики алгоритма.

В то же время попытки избавиться от этих операторов (для того, чтобы формально соблюсти «классические правила») могут привести к ухудшению читаемости программы.


при том, что на этот сайт ходят поголовно за егэ...

Автор:  ___ [ Среда, 10 Апрель, 2013 19:43 ]
Заголовок сообщения:  Re: Интересный сайт - обучение школьников С++ и Паскаль

Цитата:
Любителей «чистого» структурного программирования наверняка устроит такой вариант решения:

function Find(A: Matrix; X: integer): Boolean;
var i, j: integer;
begin
Result := False;
for i:=1 to N do
for j:=1 to N do
if A[i,j] = X then Result := True
end;

Но, к сожалению, по эффективности он не может составить конкуренцию предыдущим, так как в любом случае рассматриваются все N2 элементов массива, даже если элемент A[1,1] равен X.


...

Автор:  Info21 [ Среда, 10 Апрель, 2013 20:27 ]
Заголовок сообщения:  Re: Интересный сайт - обучение школьников С++ и Паскаль

Ужос.

Толпу остановить можно только пушками.

Работаем.

Автор:  Илья Ермаков [ Четверг, 11 Апрель, 2013 13:36 ]
Заголовок сообщения:  Re: Интересный сайт - обучение школьников С++ и Паскаль

На самом деле линейный поиск автор тоже привёл.
Только тут же испугался, о ужас! - опции компилятора.
Код:
Вот альтернатива без break:

nX := 1;
while (nX <= N) and (A[nX] <> X) do
  Inc(nX);
if nX > N then
     writeln('Не нашли!')
else writeln('nX = ', nX);

Теперь представим себе, что будет, если в трансляторе включена проверка выхода за границы массива, логические выражения вычисляются полностью и элемента, равного X, в массиве нет: программа вылетит в результате обращения за пределы массива.

Автор:  Валерий Лаптев [ Четверг, 21 Ноябрь, 2013 20:47 ]
Заголовок сообщения:  Re: Интересный сайт - обучение школьников С++ и Паскаль

Константин Поляков выпустил учебник информатики для профильных классов.
Я купил.
Что впечатляет:
1. Широта охвата материала - в 11 классе рассматривается и ООП, и довольно серьезные алгоритмы. Динамическое программирование, например. Не говоря уж о более простых вещах, таких как указатели и списки. Есть также понятие о сложности алгоритмов и много еще чего.
2. Ясность изложения - удивительно простой язык. Но не в ущерб точности. Ошибок и ляпов, коих в других учебниках дофига - здесь пока не обнаружилось.
3. Все программирование до ООП и динамических структур данных дано на ДВУХ ЯЗЫКАХ: на русском кумире и английском паскале! Что как бы намекает... :)

В общем, понравилось.
Если к нам школьники начнут приходить с подобным багажом - мы сразу их сможем двинуть глубже без потери времени на ликбез.

Автор:  Илья Ермаков [ Пятница, 22 Ноябрь, 2013 13:43 ]
Заголовок сообщения:  Re: Интересный сайт - обучение школьников С++ и Паскаль

Поляков, однако, писал странную (для современного состояния понимания проблемы) статью "break или не break"
http://kpolyakov.blogspot.ru/2012/10/break-break.html

Я в конце высказывался, но ответа уже не было ))

Автор:  ilovb [ Пятница, 22 Ноябрь, 2013 14:26 ]
Заголовок сообщения:  Re: Интересный сайт - обучение школьников С++ и Паскаль

Илья Ермаков писал(а):
Поляков, однако, писал странную (для современного состояния понимания проблемы) статью "break или не break"


Такая бредятина...

Запудривание мозгов во всей красе. Автор приводит кучу "уродливых" примеров без бряка, среди коих проскакивает такой:
Цитата:
s := 0;
Readln(x);
while x <> 999 do begin
s := s + x;
Readln(x);
end;

Цитата:
На взгляд автора, при этом два оператора ввода, выполняющие одну и ту же функцию, «размывают» логику программы и не добавляют ей «прозрачности». Кроме того, вместо Readln в других ситуациях может стоять целая группа операторов, и тут уже дублирование будет выглядеть совсем некрасиво.


Автору конечно в голову совсем никак не пришло, что это нормальная схема для цикла while.
Цитата:
<получить первый>
while <Не закончили?> do
<что-то делаем>
<получить следующий>
end;


Ну и как бэ:
Цитата:
s := 0;
x := 0;
while x <> 999 do begin
s := s + x;
Readln(x);
end;

Автор:  Илья Ермаков [ Пятница, 22 Ноябрь, 2013 15:34 ]
Заголовок сообщения:  Re: Интересный сайт - обучение школьников С++ и Паскаль

Удивительно, как совершенно очевидная мысль, что если действие выполняется на 1 раз больше, чем остальное тело цикла, то оно неизбежно должно продублироваться, никак не доходит до людей...

Просто, убеждаюсь раз за разом, народ смотрит на код как на "инструкцию для компьютера, что делать" (и гоняет в голове построчно), а не смотрит на код как на описание семейства процессов...

Автор:  ilovb [ Пятница, 22 Ноябрь, 2013 15:52 ]
Заголовок сообщения:  Re: Интересный сайт - обучение школьников С++ и Паскаль

Илья Ермаков писал(а):
Удивительно, как совершенно очевидная мысль, что если действие выполняется на 1 раз больше, чем остальное тело цикла, то оно неизбежно должно продублироваться, никак не доходит до людей...

Действительно. Вот именно так, имхо, должен объяснять джедай суть цикла while. :)

Автор:  Валерий Лаптев [ Пятница, 22 Ноябрь, 2013 16:24 ]
Заголовок сообщения:  Re: Интересный сайт - обучение школьников С++ и Паскаль

Илья Ермаков писал(а):
Поляков, однако, писал странную (для современного состояния понимания проблемы) статью "break или не break"
http://kpolyakov.blogspot.ru/2012/10/break-break.html

Я в конце высказывался, но ответа уже не было ))

Статья - не странная. Статья довольно обычная для программиста-самоучки.
Он не изучал программирование специально как программирование.
Поэтому на многие вопросы смотрит исключительно как практик, который к тому же никогда не работал в коллективе программистов над большим проектом.

Я тут уже где-то приводил ссылку на книжку о качестве ПО, где приводится отличный довод в пользу структурности - цикломатическое число графа потоку управления вычисляется для структурной программы очень просто.

Автор:  igor [ Вторник, 26 Ноябрь, 2013 08:15 ]
Заголовок сообщения:  Re: Интересный сайт - обучение школьников С++ и Паскаль

Илья Ермаков писал(а):
Удивительно, как совершенно очевидная мысль, что если действие выполняется на 1 раз больше, чем остальное тело цикла, то оно неизбежно должно продублироваться, никак не доходит до людей...
Илья, Вы заблуждаетесь. Дублирования можно избежать.
В качестве иллюстрации вот решение Вашей задачки про покраску забора:
Вложение:
Fence.png
Fence.png [ 6.75 КБ | Просмотров: 7749 ]
В этом примере оператор <Покрасить стобл> выполнится ровно на один раз больше, чем оператор <Покрасить секцию>. При этом дублирования кода нет.
Думаю, что Ваша ошибка связана с тем стереотипом, что якобы проверка выхода из цикла может производиться только непосредственно перед телом цикла (цикл WHILE), либо сразу после него (цикл REPEAT). А на самом деле в общем случае проверка выхода из цикла может производится и в середине тела цикла, как в приведённом мной примере.
Пример реализации на КП:
Код:
LOOP <Покрасить столб>
  IF <Забор закончился> THEN EXIT END;
  <Покрасить секцию>
END

Автор:  ilovb [ Вторник, 26 Ноябрь, 2013 19:06 ]
Заголовок сообщения:  Re: Интересный сайт - обучение школьников С++ и Паскаль

igor писал(а):
Дублирования можно избежать.

Думаю, что Илья имел в виду цикл без exit/break :wink:

ps Картинку вашу подправил.
pps EXIT "рвет" цикл. Неужели не видно? Вы впихиваете в цикл лишнее действие, которое ему явно не принадлежит.

Вложения:
Fence.png
Fence.png [ 4.2 КБ | Просмотров: 7697 ]

Автор:  igor [ Вторник, 26 Ноябрь, 2013 19:44 ]
Заголовок сообщения:  Re: Интересный сайт - обучение школьников С++ и Паскаль

ilovb писал(а):
pps EXIT "рвет" цикл. Неужели не видно? Вы впихиваете в цикл лишнее действие, которое ему явно не принадлежит.
EXIT есть только в неудачном синтаксисе КП, а на картинке нет никаких EXIT'ов и бряков. :wink:
(Поэтому я и начал с картинки, потому что ни в одном известном мне языке нет адекватного оператора цикла).
Неудачность синтаксиса КП в данном случае проявляется в том, что такой цикл реализуется как оператор в операторе (оператор IF внутри оператора LOOP), ещё и EXIT сюда приплели. Ужос! Допустим, в том же WHILE'е EXIT'а нет, а выход из цикла есть, так же и LOOP надо было делать.

Автор:  igor [ Вторник, 26 Ноябрь, 2013 19:47 ]
Заголовок сообщения:  Re: Интересный сайт - обучение школьников С++ и Паскаль

Хоть это и очевидно, но на всякий случай озвучу.
Операторы ДО проверки выхода из цикла выполняются n+1 раз, а операторы ПОСЛЕ проверки выполняются n раз.

Автор:  ilovb [ Вторник, 26 Ноябрь, 2013 20:19 ]
Заголовок сообщения:  Re: Интересный сайт - обучение школьников С++ и Паскаль

igor писал(а):
Хоть это и очевидно, но на всякий случай озвучу.
Операторы ДО проверки выхода из цикла выполняются n+1 раз, а операторы ПОСЛЕ проверки выполняются n раз.

Ну лично мне очевидно, что это уже не цикл. :)

Видимо есть какая-то тонкая разница в восприятии циклов у народа.
Для меня цикл - это неделимая и конечная последовательность действий, которая выполняется 0 или N раз целиком

Вот имеем набор действий (каждое из которых выполняется ровно 1 раз):
Код:
<действе1>
<действе2>
<действе3>
<действе4>
<действе5>


Если выделить из этой последовательности неразрывную подпоследовательность и разрешить ей выполняться целиком 0 или N раз, то это будет цикл в моем понимании:
Код:
<действе1>
ПОВТОРИТЬ 0 или N раз
<действе2>
<действе3>
<действе4>
КОНЕЦ
<действе5>

Если разрешить произвольно "прыгать" внутрь цикла и наружу, то это уже не цикл а набор goto, которые только напоминают цикл.

Я вашу картинку подправил как раз для того, чтобы показать, что есть два пути, которые пресекают действие "Покрасить столб".
На мой взгляд такого быть не должно. Действие не может принадлежать двум путям (как дом не принадлежит двум улицам :) ). И на самом деле там два действия. Одно принадлежит прямому пути, другое циклу.

ps Действие дублируется, да. Но, имхо, как раз это и делает ясной логику потока управления.

Автор:  igor [ Вторник, 26 Ноябрь, 2013 20:40 ]
Заголовок сообщения:  Re: Интересный сайт - обучение школьников С++ и Паскаль

ilovb писал(а):
Я вашу картинку подправил как раз для того, чтобы показать, что есть два пути, которые пресекают действие "Покрасить столб".
На мой взгляд такого быть не должно. Действие не может принадлежать двум путям (как дом не принадлежит двум улицам :) ).
На Вашем рисунке левая стрелка на входе блока "Покрасить столб" означает вход в цикл, а правая стрелка - это ссылка для закольцовывания действий - необходимое условие образования цикла. Если Вы нарисуете аналогичную картинку для кошерного цикла REPEAT, то увидите, что там то же самое. :wink:

ilovb писал(а):
И на самом деле там два действия. Одно принадлежит прямому пути, другое циклу.
Все действия, которые находятся внутри кольца, принадлежат циклу.

Страница 1 из 13 Часовой пояс: UTC + 3 часа
Powered by phpBB® Forum Software © phpBB Group
https://www.phpbb.com/