OberonCore

Библиотека  Wiki  Форум  BlackBox  Компоненты  Проекты
Текущее время: Суббота, 18 Ноябрь, 2017 01:51

Часовой пояс: UTC + 3 часа




Начать новую тему Ответить на тему  [ Сообщений: 235 ]  На страницу 1, 2, 3, 4, 5 ... 12  След.
Автор Сообщение
СообщениеДобавлено: Среда, 04 Ноябрь, 2009 17:16 

Зарегистрирован: Суббота, 07 Март, 2009 15:39
Сообщения: 2846
Откуда: Астрахань
Вот опять нарвался на сайт Полякова
http://kpolyakov.narod.ru/school/prog.htm
Вполне себе обучает школьников на С++ и Паскале.
А также есть собственные проекты Робота, Черепахи и Исполнителя.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Четверг, 05 Ноябрь, 2009 11:51 

Зарегистрирован: Понедельник, 23 Март, 2009 10:35
Сообщения: 98
Откуда: Ханты-Мансийск
Валерий Лаптев писал(а):
http://kpolyakov.narod.ru/school/prog.htm
Вполне себе обучает школьников на С++ и Паскале.
А также есть собственные проекты Робота, Черепахи и Исполнителя.


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

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

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

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


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Четверг, 05 Ноябрь, 2009 14:34 
Модератор
Аватара пользователя

Зарегистрирован: Среда, 16 Ноябрь, 2005 00:53
Сообщения: 4419
Откуда: Россия, Орёл
скачал поглядеть исполнителей... запускал под wine, там с шрифтами не густо - получил ошибку ".... monospace font required".. гм.

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


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Четверг, 05 Ноябрь, 2009 15:21 

Зарегистрирован: Суббота, 07 Март, 2009 15:39
Сообщения: 2846
Откуда: Астрахань
Сие, как я понимаю, говорит о том, что язык - дело вторичное (до определенного предела, конечно. Если модулей нет, то никак их грамотно не преподать, блин!), а методика преподавания - первично...


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Среда, 10 Апрель, 2013 19:35 

Зарегистрирован: Четверг, 01 Июнь, 2006 11:14
Сообщения: 238
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 

Зарегистрирован: Четверг, 01 Июнь, 2006 11:14
Сообщения: 238
Цитата:
Любителей «чистого» структурного программирования наверняка устроит такой вариант решения:

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.


...


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Среда, 10 Апрель, 2013 20:27 

Зарегистрирован: Пятница, 25 Ноябрь, 2005 12:02
Сообщения: 7712
Откуда: Троицк, Москва
Ужос.

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

Работаем.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Четверг, 11 Апрель, 2013 13:36 
Модератор
Аватара пользователя

Зарегистрирован: Понедельник, 14 Ноябрь, 2005 18:39
Сообщения: 8861
Откуда: Россия, Орёл
На самом деле линейный поиск автор тоже привёл.
Только тут же испугался, о ужас! - опции компилятора.
Код:
Вот альтернатива без 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 

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

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


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Пятница, 22 Ноябрь, 2013 13:43 
Модератор
Аватара пользователя

Зарегистрирован: Понедельник, 14 Ноябрь, 2005 18:39
Сообщения: 8861
Откуда: Россия, Орёл
Поляков, однако, писал странную (для современного состояния понимания проблемы) статью "break или не break"
http://kpolyakov.blogspot.ru/2012/10/break-break.html

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


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Пятница, 22 Ноябрь, 2013 14:26 

Зарегистрирован: Вторник, 30 Июнь, 2009 14:58
Сообщения: 1427
Илья Ермаков писал(а):
Поляков, однако, писал странную (для современного состояния понимания проблемы) статью "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 
Модератор
Аватара пользователя

Зарегистрирован: Понедельник, 14 Ноябрь, 2005 18:39
Сообщения: 8861
Откуда: Россия, Орёл
Удивительно, как совершенно очевидная мысль, что если действие выполняется на 1 раз больше, чем остальное тело цикла, то оно неизбежно должно продублироваться, никак не доходит до людей...

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


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Пятница, 22 Ноябрь, 2013 15:52 

Зарегистрирован: Вторник, 30 Июнь, 2009 14:58
Сообщения: 1427
Илья Ермаков писал(а):
Удивительно, как совершенно очевидная мысль, что если действие выполняется на 1 раз больше, чем остальное тело цикла, то оно неизбежно должно продублироваться, никак не доходит до людей...

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


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Пятница, 22 Ноябрь, 2013 16:24 

Зарегистрирован: Суббота, 07 Март, 2009 15:39
Сообщения: 2846
Откуда: Астрахань
Илья Ермаков писал(а):
Поляков, однако, писал странную (для современного состояния понимания проблемы) статью "break или не break"
http://kpolyakov.blogspot.ru/2012/10/break-break.html

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

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

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


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Вторник, 26 Ноябрь, 2013 08:15 

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


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Вторник, 26 Ноябрь, 2013 19:06 

Зарегистрирован: Вторник, 30 Июнь, 2009 14:58
Сообщения: 1427
igor писал(а):
Дублирования можно избежать.

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

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


Вложения:
Fence.png
Fence.png [ 4.2 КБ | Просмотров: 3177 ]
Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Вторник, 26 Ноябрь, 2013 19:44 

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


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Вторник, 26 Ноябрь, 2013 19:47 

Зарегистрирован: Вторник, 13 Ноябрь, 2007 20:38
Сообщения: 1056
Хоть это и очевидно, но на всякий случай озвучу.
Операторы ДО проверки выхода из цикла выполняются n+1 раз, а операторы ПОСЛЕ проверки выполняются n раз.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Вторник, 26 Ноябрь, 2013 20:19 

Зарегистрирован: Вторник, 30 Июнь, 2009 14:58
Сообщения: 1427
igor писал(а):
Хоть это и очевидно, но на всякий случай озвучу.
Операторы ДО проверки выхода из цикла выполняются n+1 раз, а операторы ПОСЛЕ проверки выполняются n раз.

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

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

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


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

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

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

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


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Вторник, 26 Ноябрь, 2013 20:40 

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

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


Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 235 ]  На страницу 1, 2, 3, 4, 5 ... 12  След.

Часовой пояс: UTC + 3 часа


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

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


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Вся информация, размещаемая участниками на конференции (тексты сообщений, вложения и пр.) © 2005-2017, участники конференции «OberonCore», если специально не оговорено иное.
Администрация не несет ответственности за мнения, стиль и достоверность высказываний участников, равно как и за безопасность материалов, предоставляемых участниками во вложениях.
Без разрешения участников и ссылки на конференцию «OberonCore» любое воспроизведение и/или копирование высказываний полностью и/или по частям запрещено.
Powered by phpBB® Forum Software © phpBB Group
Русская поддержка phpBB