OberonCore
https://forum.oberoncore.ru/

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

Автор:  Info21 [ Вторник, 03 Декабрь, 2013 12:37 ]
Заголовок сообщения:  Re: Интересный сайт - обучение школьников С++ и Паскаль

Геннадий Тышов писал(а):
http://forum.oberoncore.ru/viewtopic.php?p=13427#p13427 Четверг, 28 Февраль, 2008 20:10 Владимир Паронджанов
Цитата:
... Сегодня тюрьма имени Эдсгера Дейкстры тормозит повышение производительности труда программистов....

Кто-кто тормозит?

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

albobin писал(а):
Извините, если ненароком всё-таки обидел, видимо неудачно подшутил.
Нет проблем. Ваша шутка, высказанная в форме предположения, для меня безобидна. Мотивация, которую Вы озвучили, весьма популярна в народе, и вполне ожидаема, хоть ко мне и не относится.

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

Геннадий Тышов писал(а):
http://forum.oberoncore.ru/viewtopic.php?p=13427#p13427 Четверг, 28 Февраль, 2008 20:10 Владимир Паронджанов
Цитата:
Дейкстрианская революция состоит в том, что Дейкстра ввел строгую дисциплину в анархическом царстве процедурного программирования. Но любая дисциплина — это ограничение свободы. Недостаток в том, что Дейкстра ввел неоправданно жесткие ограничения. Фактически Дейкстра добился успеха за счет того, что ввел интеллектуальное рабство и заковал программистов в кандалы.
...
Сегодня тюрьма имени Эдсгера Дейкстры тормозит повышение производительности труда программистов.
...
Данное высказывание Владимира Паронджанова - поразительный пример того, как можно вывернуть факты наизнанку. Даст фору любому политику. Что характерно, зародыш рационального зерна в этом изречении есть, но нет никакой меры, и выводы доведены до абсурда.

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

Геннадий Тышов писал(а):
igor писал(а):
Никаких exit'ов, брейков и прочей нечисти!

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

Геннадий Тышов писал(а):
Средства предоставлены Вам создателями языка и среды программирования.
Спасибо, что напомнили.

Геннадий Тышов писал(а):
Если не можете или боитесь, то Вам мешает Ваша зашоренность, возможно Вас так учили и напугали.
Пусть моя зашоренность, моя недоученность и мой испуг Вас не беспокоят.

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

igor писал(а):
Я программирую головой
"А ещё я в неё ем" (С) Из анекдота про Тайсона :)

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

albobin писал(а):
Для внешнего наблюдателя (по отношению к макаронам) это выглядит так:

Код:
  [ операторы ]
  [ макароны ]
  [ операторы ]


т.е. даже нет нарушения линейности.

:)

Причём здесь это ?
когда я писал
Код:
...
[ цикл с выходом внутри ]
..

то опирался на то, что цикл, в данном случае, является структурной единицей программы.

Конкретизируя, считаю что Вирту нужно вернуться к паскалевским традициям:
Код:
IF условие THEN оператор [ ELSIF условие THEN оператор ] [ ELSE оператор ] ;
WHILE условие DO оператор;
FOR i = нач TO кон BY шаг DO оператор;
REPEAT оператор UNTIL условие;

то есть уйти от порочного END, который позволяет лепить последовательность операторов.

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

Не проще ли обойтись без BREAK, чем отказываться от последовательностей операторов.

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

Madzi писал(а):
то есть уйти от порочного END, который позволяет лепить последовательность операторов.
А как быть с проблемой "висящего ELSE"? Да к тому же код станет густо усыпан операторными скобками.

Автор:  Madzi [ Среда, 04 Декабрь, 2013 13:15 ]
Заголовок сообщения:  Re: Интересный сайт - обучение школьников С++ и Паскаль

albobin писал(а):
Не проще ли обойтись без BREAK, чем отказываться от последовательностей операторов.

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

С другой стороны, BREAK встречается в циклах примерно в 3 случаях из 100.

Автор:  Madzi [ Среда, 04 Декабрь, 2013 13:17 ]
Заголовок сообщения:  Re: Интересный сайт - обучение школьников С++ и Паскаль

igor писал(а):
Madzi писал(а):
то есть уйти от порочного END, который позволяет лепить последовательность операторов.
А как быть с проблемой "висящего ELSE"? Да к тому же код станет густо усыпан операторными скобками.

Не вижу проблем с висящим ELSE.
Если вы о
Код:
  IF условие THEN
    IF условие THEN оператор
  ELSE оператор;

и
Код:
  IF условие THEN
    IF условие THEN оператор;
  ELSE оператор;

то тут не проблема языка, а проблема оформления кода :)

Простите, а где в Обероне фигурные скобки ? :)

Автор:  ilovb [ Среда, 04 Декабрь, 2013 13:21 ]
Заголовок сообщения:  Re: Интересный сайт - обучение школьников С++ и Паскаль

Madzi писал(а):
Как показывает практика, а не абстрактные размышления о конях в вакууме, чаще всего более понятен код с BREAK


Вот те раз. А примеры можно?

Автор:  Madzi [ Среда, 04 Декабрь, 2013 13:23 ]
Заголовок сообщения:  Re: Интересный сайт - обучение школьников С++ и Паскаль

К предыдущему сообщению.
По моему мнению, оператор IF следует оформлять следующим образом.
Код:
    IF условие THEN оператор ELSE оператор;
    ...
    IF условие THEN IF условие THEN оператор; ELSE оператор; (** => IF условие AND условие THEN оператор ELSE оператор; *)
    (** Кстати такая конструкция будет не допустима в силу ";" перед ELSE *)
    ...
    IF условие THEN IF условие THEN оператор ELSE оператор; (** останется без изменений *)


Предвосхищая вопросы по поводу операторных скобок - оформляйте требуемый код процедурами.
Код станет лаконичнее и нагляднее. Удобнее к чтению и анализу.
Своеобразное прокрустово ложе для нерадивых программистов.

Автор:  Madzi [ Среда, 04 Декабрь, 2013 13:50 ]
Заголовок сообщения:  Re: Интересный сайт - обучение школьников С++ и Паскаль

ilovb писал(а):
Madzi писал(а):
Как показывает практика, а не абстрактные размышления о конях в вакууме, чаще всего более понятен код с BREAK


Вот те раз. А примеры можно?

Код:
PROCEDURE Proc1(x, y, epsion : REAL);
VAR
    x : REAL;
    i : INTEGER;
BEGIN
    i := 0;
    WHILE i < 100 DO
        x := x * Fn1(i) * y;
        IF (x > epsilon) THEN
            x := Fn2(y);
            IF (x > y) THEN EXIT; END;
            y := y - epsion / 2;
        END;
        y := (y + x - i) / epsion;
       INC(i);
    END;
    RETURN y;
END Proc1;

Автор:  albobin [ Среда, 04 Декабрь, 2013 14:13 ]
Заголовок сообщения:  Re: Интересный сайт - обучение школьников С++ и Паскаль

Madzi писал(а):
оформляйте требуемый код процедурами.
Код станет лаконичнее и нагляднее. Удобнее к чтению и анализу.

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

PS.
Концу - не END!
Тьфу, не так.
ENDу -не конец!
Я - за последовательность (операторов).

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

Madzi: Просьба еще запостить код функций Fn1, Fn2, ибо по вашему "понятному" коду совершенно непонятно что он делает.

ps И еще хотелось бы услышать формулировку задачи и доказательство правильности вашего цикла.

Автор:  Madzi [ Среда, 04 Декабрь, 2013 14:50 ]
Заголовок сообщения:  Re: Интересный сайт - обучение школьников С++ и Паскаль

ilovb писал(а):
Madzi: Просьба еще запостить код функций Fn1, Fn2, ибо по вашему "понятному" коду совершенно непонятно что он делает.

ps И еще хотелось бы услышать формулировку задачи и доказательство правильности вашего цикла.

Считайте Fn1 и Fn2 некоторыми функциями, определёнными на всей числовой прямой.

Нужно найти определённое значение, которое... в коде всё описано :), неужели не понятно ?
Выполняем 100 шагов, если нашли раньше, то молодцы, если нет, то после 100 шага возвращаем то на чём остановились.

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

Вы верно шутите? Думаете что нет никакого значения что делают процедуры и функции внутри цикла?
ОК.
Ну вот пусть Fn1 возвращает всегда 0. А INC до кучи уменьшает i на единицу (нам ведь пофиг, код и так понятный)

ps Вы всегда так код пишете?

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

Madzi писал(а):
igor писал(а):
Да к тому же код станет густо усыпан операторными скобками.
Простите, а где в Обероне фигурные скобки ? :)
В "паскалевских традициях", к которым Вы призвали, в качестве операторных скобок используются BEGIN и END.
Кстати, ортодоксальные сишники за одно только это люто ненавидят Паскаль, а за одно и тех, кто пишет на Паскале (видимо, чтоб два раза не бегать) :)

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

По коду у меня сразу возникает вопросы.
А если передаваемые в качестве параметров x, y, epsilon сразу удовлетворяют условиям выхода?
Это же никак не проверяется перед циклом.

Или если x постоянно (при входе) < epsilon, то х и у в цикле вычисляются 100 раз?

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

ilovb писал(а):
Вы верно шутите? Думаете что нет никакого значения что делают процедуры и функции внутри цикла?
ОК.
Ну вот пусть Fn1 возвращает всегда 0. А INC до кучи уменьшает i на единицу (нам ведь пофиг, код и так понятный)

ps Вы всегда так код пишете?

Fn1 и Fn2 принимают значения от $-\inf$ до $+\inf$ и возвращают значения в таких же пределах (естественно, что значение ограничено разрешающей способностью чисел с плавающей запятой).
Значения функций (Fn1 и Fn2) вычисляются на основе наблюдений внешнего объекта и фиксируются перед каждым вызовом процедуры Proc1 (т.е. внутри процедуры (y = Fn1(x)) === (z = Fn1(x)) бесконечное число вызовов функции с одним и тем же параметром, даст один и тот же результат).

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