Добрый день, Сергей!

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

И это цитирует специалист по метавычислениям и суперкомпиляции — технологии 
оптимизации программ. :-)

-----Original Message-----
From: Sergei M. Abramov [mailto:ab...@botik.ru] 
Sent: Wednesday, August 9, 2017 5:07 PM
To: Boyko Bantchev <boyk...@gmail.com>; refal@botik.ru
Subject: Re: FW: Рефал умер?

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Ответить