Здравствуйте, fuyant, Вы писали:
F>http://articles.org.ru/cfaq/index.php?qid=2520
F>ИМХО, чушь полная. F>Я бы сделал наверное так (не знаю pl/2, и не знаю, есть ли там такой оператор):
F>
F>i = (i == 1 ? 2 : 1);
F>
F>Так как по условию задача может имееть всего два ответа и это решение очень легко в данном случае читается. ИМХО . F>Если бы были шансы, что будут другие варианты входных данных и/или вариантов ответа, переделал бы через if/else if или switch для облегчения поддержки кода. F>Плюс лишняя проверка не нужна (о которой говорится в 10м решении), хотя это уже некорректно, т.к. задано, что "i принимает значения 1 либо 2".
Нефига себе не нужна. Сколько раз говорилось миру — проверяте значения входных параметров на корректность.
Знаю кучу контор где без ассертов на проверку этих условий код был бы некорректен.
Здравствуйте, Кодёнок, Вы писали:
Кё>Вообще-то программер с опытом уже научен, что спецификация тоже может содержать ошибки. Если вы договорились с программистом Н что он будет давать вашей функции 1 или 2, то это не значит что однажды вы не получите 3.
Но оверхедить свой код из-за ошибки программиста Н тоже не стоит.
Обязательно бахнем! И не раз. Весь мир в труху! Но потом. (ДМБ)
Здравствуйте, Кодёнок, Вы писали:
Кё>Вообще-то программер с опытом уже научен, что спецификация тоже может содержать ошибки. Если вы договорились с программистом Н что он будет давать вашей функции 1 или 2, то это не значит что однажды вы не получите 3.
Верно. Но если вы рассчитываете, что можете получить что угодно, то тогда придется договариваться о том, как обрабатывать ошибки. Если же вы договорились, что передается 1 или 2, то вы вправе на это твердо рассчитывать, если же ваш друг лажанулся — то это его проблема и ему ее решать.
Я отвечаю за свои слова, а не за то как вы их интерпретируете!
Здравствуйте, Young, Вы писали:
Y>Нефига себе не нужна. Сколько раз говорилось миру — проверяте значения входных параметров на корректность.
Y>И считаю это правильным....
Переменная i представляет собой полное слово с фиксированной
точкой. i принимает значения 1 либо 2. Если i оказалось равным 1,
замените его на 2 и наоборот.
Отсыда следует, что если i оказалась другой, то я вправе вернуть что-угодно. А return some_error — это не обработка ошибки. Это ее маскировка.
Я отвечаю за свои слова, а не за то как вы их интерпретируете!
Здравствуйте, qwertyuiop, Вы писали:
Q>Здравствуйте, Кодёнок, Вы писали:
Q>>>Вероятно составитель этого теста считает себя гением, а преподавателей идиотами, раз он им приписал такое решение. Однако сам он написал свои тесты на паскакале — и этим все сказано.
Кё>>Не идиотами, а теоретиками. Кем они зачастую и являются. Это простейшая ошибка из-за невнимательности. Они, так же как и ты, который не догадался что это pl/1, а не паскаль, на что в тексте дан очень четкий намек, и выдают решение №2
Q>Могу прзнаться — я не знаю pl/1; кроме того — я никогда не писал на паскале и горжусь этим. Что же до твоего самоуверенного заявления, что "они выдают решение №2" — то это лишь твои домыслы граничащие с комплексом неполноценности (хочется самому себе казаться умнее преподавателей). Как раз теоретики такого не напишут. Это больше свойственно студентам-первокурсникам.
Здравствуйте, fuyant, Вы писали:
F>Плюс лишняя проверка не нужна (о которой говорится в 10м решении), хотя это уже некорректно, т.к. задано, что "i принимает значения 1 либо 2".
А в некоторых языках следовало бы проверить ещё и тип входных данных
Проблема России не в том, что она не может накормить бедных, а в том, что богатые никак не нажрутся
Здравствуйте, Young, Вы писали:
Y>Здравствуйте, fuyant, Вы писали:
F>>http://articles.org.ru/cfaq/index.php?qid=2520
F>>ИМХО, чушь полная. F>>Я бы сделал наверное так (не знаю pl/2, и не знаю, есть ли там такой оператор):
F>>
F>>i = (i == 1 ? 2 : 1);
F>>
F>>Так как по условию задача может имееть всего два ответа и это решение очень легко в данном случае читается. ИМХО . F>>Если бы были шансы, что будут другие варианты входных данных и/или вариантов ответа, переделал бы через if/else if или switch для облегчения поддержки кода. F>>Плюс лишняя проверка не нужна (о которой говорится в 10м решении), хотя это уже некорректно, т.к. задано, что "i принимает значения 1 либо 2".
Y>Нефига себе не нужна. Сколько раз говорилось миру — проверяте значения входных параметров на корректность.
Y>Знаю кучу контор где без ассертов на проверку этих условий код был бы некорректен.
Y>И считаю это правильным....
Функция больше похожа алгоритмическую, поэтому, имхо, все проверки входных данных должны быть на совести того, кто функцию вызывает. Представьте, если бы, например, во всех апи-функциях типа strlen ставились проверки валидности входных данных. По скорости они бы и работали, как MFC.
Есть условие — входные данные должны быть корректны, тогда алгоритм работает верно. Если вызывающий не озабочивается тем чтобы проверить, что он передает в алггоритмическую функцию, то пусть не особо и расчитывает на корректный результат.
Максимум, что бы я поставил, это assert (i == 1 || i == 2);
Другое дело, если эта фунгкция без посредников обрабатывает ввод пользователя, например. Но в условии таким случаем даже не пахнет
L>>...
L>>Я в таких случаях пишу i=3-i;
U>Там же внизу комментарии есть
U>Написано "Ни в одном из примеров не проверяется начальное значение переменной i". U>Так что i = 3-i не совсем верно.
В условии сказано, что мне на вход должны передавать iє{1;2}
Условия некорректности входных параметров не указаны: что я должен вернуть в таком случае? Плюнуть эксепшном? Вернуть какое-то определенное значение?
Если входные данные некорректные, я возвращаю i вне нашего промежутка. Пускай сами дальше об этом заботятся
Я ваще ближе к 7-му, но наверное даже в битовой интерпретации... про проверку условия думал, но не при таком условии...
В ответе рекомендуют: >10. if i=1 then i=2; >if i^=2 then do; >put list('ПЛoxoe i — Зameheho ha 1'); >i=1; >end;
Вот только не пойму, где тут if i==2 then i=1 ??? (pl/1 не знаю)
Здравствуйте, Кодёнок, Вы писали:
Q>>Осталось только понять, почему ты решил что преподаватели не запускают программы...
Кё>потому что то, что написано на доске или на бумажке, нельзя запустить
Слабенькая отмазка. Может придумаешь что-то убедительнее?
Я отвечаю за свои слова, а не за то как вы их интерпретируете!
Здравствуйте, qwertyuiop, Вы писали:
Q>Могу прзнаться — я не знаю pl/1; кроме того — я никогда не писал на паскале и горжусь этим. Что же до твоего самоуверенного заявления, что "они выдают решение №2" — то это лишь твои домыслы граничащие с комплексом неполноценности (хочется самому себе казаться умнее преподавателей). Как раз теоретики такого не напишут. Это больше свойственно студентам-первокурсникам.
Здравствуйте, Lloyd, Вы писали:
Q>>Могу прзнаться — я не знаю pl/1; кроме того — я никогда не писал на паскале и горжусь этим.
L>В первый раз вижу человека, который гордится своим незнанием.
Ну, во-первых, я хвалился не незнанием pl/1, а тем, что мне не приходилось программировать на паскале.
Может это на первый взгляд выглядит шокирующе, но я рад что мне не приходилось писать на паскале, а я сразу учился на C, благодаря чему мне удалось избежать той зашоренности оторая свойственна паскалистам. Мне приходилось видеть немало умных программистов, которые были до такой степени затюканы этим дубовым и неповоротливым языком, что так и не смогли писать нормальные программы на C. (Кстати, такие люди любят доказывать с пеной у рта, что никаких принципиальных различий у них нет, и что разница лишь в написании скобок.) Многолетняя работа с паскалем зашорила их до такой степени, что они упорно не видели гибкости, которую дает C. Даже банальный цикл for они писали всегда одинаково: for(int i=0; i<SIZE; i++). Когда им говоришь, что переменой цикла может быть не только int, что условием окончания может быть любое логическое выражение, а не только сравнение с размером, а выражением для продолжения не только инкремент или декремент, а что угодно, они просто не понимали — а зачем это может монадобится. Когда же показываешь пример они удивляются буквально как в том анекдоте — "а что, можно было?"
Я отвечаю за свои слова, а не за то как вы их интерпретируете!
Здравствуйте, qwertyuiop, Вы писали:
Q>Здравствуйте, Young, Вы писали:
Y>>Нефига себе не нужна. Сколько раз говорилось миру — проверяте значения входных параметров на корректность.
Y>>И считаю это правильным.... Q>
Q>Переменная i представляет собой полное слово с фиксированной
Q>точкой. i принимает значения 1 либо 2. Если i оказалось равным 1,
Q>замените его на 2 и наоборот.
Q>Отсыда следует, что если i оказалась другой, то я вправе вернуть что-угодно. А return some_error — это не обработка ошибки. Это ее маскировка.
Речь идет не об обработке ошибки данных , а о обработке некоректной программы. Т.е. Если кто то использовал функцию и послал неправильные дщанные , хорошо бы нам об этом узнать , а не надеяться на чудо.
Здравствуйте, Кодёнок, Вы писали:
Кё>Здравствуйте, qwertyuiop, Вы писали:
Q>>Ага, только в начале написано Q>>Переменная i представляет собой полное слово с фиксированной Q>>точкой. i принимает значения 1 либо 2. Q>>А потом он ехидничает что никто не проверяет значение.
Кё>Вообще-то программер с опытом уже научен, что спецификация тоже может содержать ошибки. Если вы договорились с программистом Н что он будет давать вашей функции 1 или 2, то это не значит что однажды вы не получите 3.
Вообще-то, здесь рассматривался теоретический пример, где в условии был дан полный спектр принимаемых переменной значений. Про человеческий фактор ничего сказано не было.
Здравствуйте, minorlogic, Вы писали:
M>Речь идет не об обработке ошибки данных , а о обработке некоректной программы. Т.е. Если кто то использовал функцию и послал неправильные дщанные , хорошо бы нам об этом узнать , а не надеяться на чудо.
Кому "нам"? Тому, кто обратился к этой функции? То есть обращаемся к функции, узнаем о том, что она не выполнилась, после чего думаем: а правильные ли данные мы послали? Проверяем их — действительно, неправильные! Исправляем, обращаемся снова — и получаем правильный результат. Ты предлагаешь такой алгоритм? Или найдешь способ его упростить?
Я отвечаю за свои слова, а не за то как вы их интерпретируете!
Здравствуйте, qwertyuiop, Вы писали:
Q>Здравствуйте, Lloyd, Вы писали:
Q>>>Могу прзнаться — я не знаю pl/1; кроме того — я никогда не писал на паскале и горжусь этим.
L>>В первый раз вижу человека, который гордится своим незнанием.
Q>Ну, во-первых, я хвалился не незнанием pl/1, а тем, что мне не приходилось программировать на паскале. Q>Может это на первый взгляд выглядит шокирующе, но я рад что мне не приходилось писать на паскале, а я сразу учился на C, благодаря чему мне удалось избежать той зашоренности оторая свойственна паскалистам. Мне приходилось видеть немало умных программистов, которые были до такой степени затюканы этим дубовым и неповоротливым языком, что так и не смогли писать нормальные программы на C. (Кстати, такие люди любят доказывать с пеной у рта, что никаких принципиальных различий у них нет, и что разница лишь в написании скобок.) Многолетняя работа с паскалем зашорила их до такой степени, что они упорно не видели гибкости, которую дает C. Даже банальный цикл for они писали всегда одинаково: for(int i=0; i<SIZE; i++). Когда им говоришь, что переменой цикла может быть не только int, что условием окончания может быть любое логическое выражение, а не только сравнение с размером, а выражением для продолжения не только инкремент или декремент, а что угодно, они просто не понимали — а зачем это может монадобится. Когда же показываешь пример они удивляются буквально как в том анекдоте — "а что, можно было?"
Сильно сомневаюсь, что программистов, никогда не слышавших про
while
и
repeat
можно назвать "умными". И уж конечно, не стоит по ним судить о всех паскальщиках/дельфистах.
Здравствуйте, Hiller, Вы писали:
H>Вообще-то, здесь рассматривался теоретический пример, где в условии был дан полный спектр принимаемых переменной значений. Про человеческий фактор ничего сказано не было.
А зачем тогда вот это сказано:
Переменная i представляет собой полное слово с фиксированной
точкой.