Итак, не далее, как сейчас вечером один из моих лучших студентов - правильно обученный, но ещё с не набитой рукой, выдаёт мне в Джаббере следующее (это после стольких-то разборов относительно правильности циклов...):

> -- Цитата:
> [22:30:00] <Seraf> FOR спасет мир)[22:30:08] <ermakov> ))[22:31:14] <Seraf> Сидел над курсачом щас... Нужне был линейный поиск... Через WHILE такая фигня получалась и не работала) Допетрил сделать через FOR - и все заработало) [22:31:39] <ermakov> Покажи поиск. Через FOR поиск писать нельзя.[22:31:55] <Seraf>         PROCEDURE Double():BOOLEAN;            VAR i: INTEGER;        BEGIN            FOR i:=0 TO c0.outCount-1 DO                IF (c0.outs[i].x = i1) & (c0.outs[i].y = j1) THEN                    RETURN TRUE;                END;            END;                RETURN FALSE;        END Double;[22:32:03] <Seraf> =)[22:32:14] <Seraf> Может быть это  и не совсем поиск)))[22:32:58] <ermakov> Поиск. С завуалированным goto. Надо кого-то линейкой по рукам.[22:33:23] <Seraf> Я тут не причем)[22:33:29] <Seraf> Он сам)[22:33:31] <ermakov> Блин. Правильно Вирт в Обероне 07 запретил RETURN из середины. Ибо народ найдёт даже такой GOTO ))[22:33:41] <Seraf> =)[22:33:45] <ermakov> Через WHILE перепиши.[22:34:01] <ermakov> То, что ты написал - безграмотнейшая вещь.[22:34:02] <Seraf> Вот перепиши мне) Я пол часа мучался)[22:34:09] <Seraf> Да я знаю[22:34:13] <Seraf> Но она хоть работает)[22:35:14] <ermakov> i := 0;WHILE (i < c0.outCount) & ~ (  (c0.outs[i].x = i1) & (c0.outs[i].y = j1) ) DO   INC(i)END[22:36:09] <ermakov> Условие окончания у поиска - это всегда, когда бегунок - за последним элементом. Т.е. = кол-ву в массиве. Тогда усл-е продолжения - < кол-ва в массиве.[22:36:15] <ermakov> Так и верно.[22:36:21] <ermakov> Ты, видать, опечатался там.[22:36:26] <Seraf> нет[22:36:28] <ermakov> Вместо i написал j или вроде того.[22:36:34] <Seraf> Неа[22:36:38] <Seraf> Я все помню[22:36:38] <ermakov> Или забыл i := 0.[22:36:40] <ermakov> В начале.[22:36:41] <Seraf> Нет[22:36:43] <Seraf> Тоже было[22:46:59] <Seraf>     PROCEDURE Link* (VAR grid: Grid; i0, j0, i1, j1: INTEGER);        VAR c0,c1: Cell;            r1,r2: Ref;                    PROCEDURE Double():BOOLEAN;            VAR i: INTEGER;        BEGIN            i := 0;            WHILE (i < c0.outCount) & ((c0.outs[i].x # i1) & (c0.outs[i].y # j1)) DO               INC(i);            END;            RETURN i<c0.outCount;        END Double;[22:48:18] <Seraf> Дядь Илюш, в каком месте я промахнулся?)[23:02:11] <ermakov> Ну, друг... Я тебя без сладкого оставлю!!![23:02:22] <ermakov>  & ~ (  (c0.outs[i].x = i1) & (c0.outs[i].y = j1) ) [23:02:43] <ermakov> если ты хочешь внести ~ в скобки, то как ты это должен сделать?[23:03:06] <Seraf> # поставить[23:03:09] <ermakov> Отрицание, применённое к конъюнкиции - это дизъюнкция отрицаний членов.[23:03:30] <ermakov> т.е. <=>  (c0.outs[i].x # i1) OR (c0.outs[i].y # j1) [23:03:39] <Seraf> У меня так и стояли)[23:03:44] <Seraf> Ой[23:03:53] <Seraf> Как OR?[23:03:55] <Seraf> Ты что?[23:03:57] <Seraf> нееее[23:04:14] <Seraf> Нужно чтобы и то выполнялось[23:04:17] <ermakov> Правила мат. логики неумолимы. Кроме того, можно просто порассуждать - и убедишься, что именно так )[23:05:02] <ermakov> НЕ (А и В) - это значит, что конъюнкция ложна. Конъюнкция ложна, когда ложен один ИЛИ оба её члена. Т.е. (НЕ А) ИЛИ (НЕ Б)[23:05:24] <Seraf> ТвАя мать...[23:05:43] <ermakov> Ничего, бывает ) Учимся ещё )[23:06:08] <ermakov> (только вот гораздо более великовозрастные дядьки вот так проколюццца, а потом орут, что без FOR жисть не мила  )[23:06:27] <ermakov> Поэтому НЕ НАДО было упрощать исходное условие.[23:06:46] <Seraf> Пошел я любить Матан...[23:06:54] <Seraf> Неудачник(([23:06:55] <ermakov> Есть шаблон лин. поиска, где идёт ~ (условие_поиска). Нахрена вносить этот ~ в скобки? Он те мешал? ))[23:07:28] <ermakov> условие поиска имеет смысл - оно из задачи идёт. Условие, обратное к нему, уже не из задачи поиска. Его сознанию проверить сложнее.[23:07:32] <Seraf> Мешал[23:08:15] <Seraf> Хнык...[23:08:25] <Seraf> *море слез[23:12:15] <Seraf> Бей меня в следующий раз по рукам, если я FOR напишу...