>> Плата за структурное программирование.  В варианте Сергея Абрамова
>> (в следующем письме) вводится дополнительная булевская переменная и
>> тоже требуется дополнительная проверка

> И, кроме того, дополнительная переменная оказывается нелокальной
> для цикла,-ов, хотя ей лучше быть локальной, ведь дальше она не
> используется.

Ну, это я так написал. Перетащите ее мышкой правее первого слова for и
она станет локальной.

По поводу "дальше она не используется"... это зависит от задачи ;-)
Ее смысл: уже нашли или еще нет.  То есть, это то самое <элемент
обнаружен>.  И в этом смысле, то, что я написал
НИКАК не отличается от:

> <установить на начало>
> while (! <достигли конца> && ! <элемент обнаружен>)
>   <вычисление следующего и переход к нему>
> if (<достигли конца>)
>   <действия, если элемент не найден>
> else
>   <действия, если элемент найден>

Считать, что вот такой переход в 2D-массиве:

>, ++col;
>  if (col == MAXCOL) {
>    col = 0;
>    ++row;
>  }

лучше вложенного  цикла... Ну, не знаю ;-) Дело вкуса ;-) А о нем не
спорят.

Мои предпочтения давно в области прозрачности кода для чтения, а не в
области эффективности для исполнения.

Лет семь назад встретил цитаты из великих (не помню кто и цитата по
памяти, не точный текст):

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

С тей пор как прочитал, как и отрезало ;-)

PS.  Я не уверен, что нормальный компилятор не удалит в моем тексте
так называемую "лишнюю проверку" ;-) А "лишняя переменная" это не
более, как экономия вычислений за счет табулирования ранее
посчитанного значения.  Кстати, если окажется, что она действительно
лишняя, то и ее компилятор должен удалить (дефорестация).  А читать
приятнее с нею (опять, дело вкуса).

Всего доброго,

Сергей Абрамов

Ответить