Стоит ли давать ученикам не совсем обычные методы?
|
|
Маня58 | Дата: Четверг, 05.01.2012, 17:24 | Сообщение # 31 |
Маня58
Ранг: Студент (?)
Группа: Я - учитель
Должность: информатика
|
Сообщений: |
165 |
Награды: |
2 |
Статус: |
Offline |
|
C Новым годом!
Честно говоря, автором не интересовалась. Я давала этот метод в разделе "Приближенные вычисления" в курсе программирования в в профильных физматах в 10 классе. Там же были формулы вычисления корня квадратного, экспоненты, синуса методами Ньютона, Тейлора.
Что же касается Вашего желания поговорить о том, что стоит "давать в руки детям" - по-моему все очень индивидуально. Если развивать эту тему, наверное, придем к вопросу соотношения традиций и новаторства. И все равно каждый будет решать в каждом отдельном случае - стоит или не стоит "заморачивать" детей, готовы ли они воспринять Ваше новаторство и куда это может завести.
05.01.2012
|
|
|
| |
|
Александр_Игрицкий | Дата: Четверг, 05.01.2012, 19:41 | Сообщение # 32 |
Сообщений: |
11095 |
Награды: |
129 |
Статус: |
Offline |
|
Маня58, и Вас с Новым!!! Что ни говорите - диалектика!
05.01.2012
Сообщение отредактировал Александр_Игрицкий - Четверг, 05.01.2012, 19:42
|
|
|
| |
|
Александр_Игрицкий | Дата: Четверг, 05.01.2012, 21:54 | Сообщение # 33 |
Сообщений: |
11095 |
Награды: |
129 |
Статус: |
Offline |
|
pavel7, если хорошо подумать, то тему нужно было закрывать с самого начала! Ответ очевидный: каждый как хочет, так и поступает. Я иссяк.
05.01.2012
|
|
|
| |
|
alex_edu | Дата: Воскресенье, 08.01.2012, 12:43 | Сообщение # 34 |
alex_edu
Ранг: Магистр (?)
Группа: Пользователи
|
Сообщений: |
607 |
Награды: |
7 |
Статус: |
Offline |
|
Не согласен с тем, что "каждый как хочет". Программирование в школе, похоже, используют как средство развития логики. А ведь программирование само по себе "наука" и не терпит кульбитов. Ладно если программу веет один разработчиу - это его проблемы. Но вот вдруг молодой программист в команде решит написать нечто нетривиальное после таких примеров от учителя на уроках.... И все..... Функция складывающая 2 + 2 уносит весь проект к черту на кулички
Код должен быть максимально читаемым: язык программирования для того и создан. Для извращений - машинные коды
08.01.2012
|
|
|
| |
|
Александр_Игрицкий | Дата: Воскресенье, 08.01.2012, 14:26 | Сообщение # 35 |
Сообщений: |
11095 |
Награды: |
129 |
Статус: |
Offline |
|
Quote (alex_edu) Для извращений - машинные коды Об остальном не говорю, а вот эту мысль можно подробнее?
08.01.2012
|
|
|
| |
|
alex_edu | Дата: Понедельник, 09.01.2012, 13:28 | Сообщение # 36 |
alex_edu
Ранг: Магистр (?)
Группа: Пользователи
|
Сообщений: |
607 |
Награды: |
7 |
Статус: |
Offline |
|
Quote (Александр_Игрицкий) Об остальном не говорю, а вот эту мысль можно подробнее? Я вот о чем. По сути любой язык программирования это язык связующий человека и компьютер. С одной стороны понятный человеку (и это основная задача), с другой стороны компьютеру (посредством компилятора/интерпретатора). Потенциально любую программу надо писать так, что б ее использовали на несколько поколений вперед. Поэтому задача кода программы не просто быть понятным компилятору, но и понятным любому другому программисту читающему данный код.
С другой стороны теоретически писать программы можно и "в машинных кодах"... Вот уж где зарядка для ума. Но это целесообразно лишь в одном случае (за исключением каких либо специфический ситуаций) : тренировка ума, изучение и т.п. Т.е. ни кто (в том числе автор кода) в здравом уме этот код в дальнейшем изучать/править не будет....
Т.е. если гипотетически представить что на уроке ученикам адли несколько вариантов в машинных кодах. Там не суть важна понятность алгоритма. А главное у учеников не отложится мысль что "чем навороченней алгоритм - тем круче выглядит программа". Я пару раз встречал код молодых программистов, у которых обучение было построено на академических интересах.... Ну "чесслово" не удивился бы сложению 2+2 через логарифм. И сидишь въезжаешь что автор имел тут ввиду. Порой действительно код получается более быстрый (разница заметна при нескольких триллионах итерациях) возможно чуть экономящий память..... Но одно маленькое но: такие незначительные оптимизации нужны лишь в очень специфических задачах. Где попросту уже прижало. А в большинстве случаев надо приучать (как правило перехода на зеленый свет) код должен быть понятный соседу. У меня у сына на английском в этом году было задание: один составляет рассказ, сосед переводит и сверяют.... Возможно на программировании тоже полезная практика: с одной стороны учатся писать понятный код, с другой стороны читать чужой код.
Уж если давать сверх программы какие то интересные знания. Например, использование ассемблера. С одной стороны можно показать, что это на самом не такой уж и сложный язык как его малюют, с другой стороны показать если вдруг приперло с быстродействием есть вариант. Хотя тут маленькое но. Нынешние компиляторы достаточно умные и дают хороший код. Наглядную задачку придется поискать. Я в свое время другу часть расчета на ассемблер перевел. Задача была расчет температуры головки молнии. Без ассемблера трое суток, с ассемблером несколько часов....
09.01.2012
|
|
|
| |
|
Александр_Игрицкий | Дата: Понедельник, 09.01.2012, 13:50 | Сообщение # 37 |
Сообщений: |
11095 |
Награды: |
129 |
Статус: |
Offline |
|
alex_edu, я начинал с обычных машинных кодов для наших первых машин БЭСМ-6, ЕС-1010, М-20. Потом пришел Ассемблер, Алгол, Fortran ... Мне вся эта кухня известна от и до. Ляшенко В.Ф. Программирование для ЦВМ с системой команд типа М-20 - долгое время была настольной книгой, наизусть выучил. Я не об этом. Я и сейчас залезу в любой винчестер на низшем уровне. Мне всегда казалось, что умение работать с РС на уровне его внутренних команд - это не просто квалификация, а высокая квалификация. Понимание, как язык трансформируется в команды, это глубокое понимание. Но почему это извращение?
09.01.2012
|
|
|
| |
|
alex_edu | Дата: Понедельник, 09.01.2012, 15:59 | Сообщение # 38 |
alex_edu
Ранг: Магистр (?)
Группа: Пользователи
|
Сообщений: |
607 |
Награды: |
7 |
Статус: |
Offline |
|
Quote (Александр_Игрицкий) Но почему это извращение? Я ж извращением назвал не "программирование в машинных кодах". А решение типичных задач нетривиальными способами без серьёзных на то причин
09.01.2012
Сообщение отредактировал alex_edu - Понедельник, 09.01.2012, 16:00
|
|
|
| |
|
Александр_Игрицкий | Дата: Понедельник, 09.01.2012, 17:50 | Сообщение # 39 |
Сообщений: |
11095 |
Награды: |
129 |
Статус: |
Offline |
|
alex_edu, спасибо! Вопрос снят!
09.01.2012
|
|
|
| |
|
YuiSe | Дата: Четверг, 12.01.2012, 18:31 | Сообщение # 40 |
YuiSe
Ранг: Школьник (?)
Группа: Пользователи
|
Сообщений: |
80 |
Награды: |
2 |
Статус: |
Offline |
|
Поставлю себе задачу ответить на вопрос: можно ли показывать ученикам (и если да, то в каком ракурсе, пограмму, представленную в первом посте. сначала разберем алгоритм ее действия: 1. задаются границы поиска решения для заданной функции. При этом t[-1] левая граница поиска, в данном случае с априори отрицательным значением функции, t[1] - правая граница с априори положительным значением функции. t[0] - аргумент-индикатор 0, должен быть по дальнейшей логике программы задан меньше левой границы поиска, его значение нам неинтересно, лишь бы было левее левого. 2. Определяем середину текущего интервала поиска решения. 3. Определяем знак произведения значения функции посередине интервала поиска на правую границу (!). 4. В соответствии со полученным значением "знака" передвигаем соответственно левую (если отрицательный) или правую (если положительный), либо присваиваем значение t[0] середине интервала, если знак "нулевой":). 5. Проверяем сходимость: если интервал поиска сузился до допустимой ошибки или t[0] стало правее левой границы (т.е. сработал индикатор появления нулевого значения функции и мы нашли совсем точное решение), то стало быть результат найден и дальнейшие изыскания проводить не следует, в противном случае перейти к п. 2. 6. Выводим последнюю вычисленную середину интервала и соответствующее ему значение функции (!) 7. Закончили.
Вроде бы почти все правильно, кроме грубейшей ошибки в п. 3. Надо определять знак функции, а не знак произведения функции на аргумент. Знак аргумента никак не должен влиять на решение. Представим, что исправили и написали . Идем дальше. П. 4 предполагает простую проверку на знак и в соответствие с этим изменение значения в области памяти. Но код заставляет процессор записать операнд из памяти в регистр, перейти в функцию, выполнить там ТРИ раза оператор условного перехода (крайне дорогая операция), записать результат, вернуться обратно, и уже по полученному сдвигу в памяти записать значение. Вывод в данном случае быстрее будет работать код: Code if (fx > 0) then t[1] := x else if (fx<0) then t[-1] := x else t[0] := x; , где fx - есть сохраненное вычисленное значение функции f(x). По п.6 в строке Code writeln('x=',x:8:5, ' y=',f(x):8:5); автор еще раз вычисляет уже один раз вычисленное значение функции, что немного противоречит концепции метода половинного деления, предполагающего в жизни, что операция вычисления функции может быть крайне дорогой. Также никак не учитывается возможное срабатывание "индикатора точного решения", что, наверно, тоже не есть комильфо.
Итог 1. Представленная реализация метода дихотомии содержит грубую ошибку в п.3., а главное опасную. Итог 2. На этом примере, аналогично разобрав программу на операции процессора с памятью, можно показать студентам/ученикам смысл оптимизации программ, что изыски в текстовом отображении кода не есть изыски его функциональности и скорости работы.
Итог 3. Жаль ArthurL не догадался, что быстродействие реализаций метода половинного деления при прочих равных исчисляется отнюдь не количеством итераций, а затраченным машинным временем, и зачем нужна t[0], но зато потренировался в трассировке и отладке.
P.S.: и надо заменить все реалы на double. Со времен четвертого пентиума все процессоры 64-битные, а мы не то, что 32-битными системами пользуемся, так еще и ориентируемся на отсутствие поддержки процессором операций с плавающей точкой.
12.01.2012
|
|
|
| |
|
Александр_Игрицкий | Дата: Четверг, 12.01.2012, 20:05 | Сообщение # 41 |
Сообщений: |
11095 |
Награды: |
129 |
Статус: |
Offline |
|
Quote (YuiSe) Поставлю себе задачу ответить на вопрос: можно ли показывать ученикам (и если да, то в каком ракурсе, пограмму, представленную в первом посте. Уважаемые коллеги! Я не буду обсуждать тонкости используемого подхода с профессиональной точки зрения. Они не выдерживают критики. Я о другом. Обратите внимание но то, сколько усилий и времени люди потратили на то, чтобы ДОБРОСОВЕСТНО разобраться в том, что просто ОБЯЗАН был сделать автор в самом начале. Вот и хочу сказать, что нельзя так легкомысленно относиться к своим сообщениям, предлагая серьезным людям разбираться в несозревших и непродуманных до конца решениях. Понимаю, что никто никого силой не заставляет, но все-таки есть границы легкомысия, переходить которые учителю стыдно. Конечно, чтобы оставаться учителем.
12.01.2012
Сообщение отредактировал Александр_Игрицкий - Четверг, 12.01.2012, 20:16
|
|
|
| |
|
ArthurL | Дата: Понедельник, 16.01.2012, 01:35 | Сообщение # 42 |
ArthurL
Ранг: Первоклашка (?)
Группа: Пользователи
|
Сообщений: |
27 |
Награды: |
3 |
Статус: |
Offline |
|
YuiSe, поверьте, я догадался зачем нужна t[0]. Этот костыль отрабатывает, если границы диапазона симметричны(!) относительно корня. Говорить о том, что идеальный случай не укладывается в общкую схему "гениального решения" мне было просто скучно и не интересно. А отладкой я не занимался )) Разве тестирование методом ЧЯ.
16.01.2012
|
|
|
| |
|
YuiSe | Дата: Понедельник, 16.01.2012, 12:59 | Сообщение # 43 |
YuiSe
Ранг: Школьник (?)
Группа: Пользователи
|
Сообщений: |
80 |
Награды: |
2 |
Статус: |
Offline |
|
Quote (ArthurL) YuiSe, поверьте, я догадался зачем нужна t[0]. Как это соотносится с написанным ранее? Quote (ArthurL) Ввиду того, что выбор значения для инициализации t[0] непонятен, попробуем поиграть с этим значением. Был использован диапазон от -10 000 до 10 000.
16.01.2012
|
|
|
| |
|
ArthurL | Дата: Понедельник, 16.01.2012, 16:22 | Сообщение # 44 |
ArthurL
Ранг: Первоклашка (?)
Группа: Пользователи
|
Сообщений: |
27 |
Награды: |
3 |
Статус: |
Offline |
|
YuiSe, и что вас смущает?
16.01.2012
|
|
|
| |
|
YuiSe | Дата: Вторник, 17.01.2012, 09:49 | Сообщение # 45 |
YuiSe
Ранг: Школьник (?)
Группа: Пользователи
|
Сообщений: |
80 |
Награды: |
2 |
Статус: |
Offline |
|
Quote (ArthurL) YuiSe, и что вас смущает? Да, да, я знаю, что отвечать вопросом на неудобный вопрос является одним из правил демагога, и что это принято в Одессе.
17.01.2012
|
|
|
| |
|