Мой вариант ответа. Ищем значениеxв массивеarrразмером N раз по M строк.
## Код:
```
VAR 
   arr: ARRAY N, M OF INTEGER;
   i, k: INTEGER;
   found: BOOLEAN;
BEGIN
   i := 0;
   found := FALSE;
   WHILE (i < N) & ~found DO
      k := 0;
      WHILE (k < M) & ~found DO
         found := arr [i, k] = x;
         IF ~found THEN
            INC (k)
         END
      END;
      IF ~found THEN
         INC (i)
      END
   END;
   POST: (i >= N) OR (k >= M) OR (arr [i, k] = x)
END
```
Это было с дополнительной переменной. Без переменной - ещё проще: используем подпрограмму.
## Код:
```
TYPE
   Line = ARRAY M OF INTEGER;
VAR
   arr: ARRAY N OF Line;
   i: INTEGER;

   PROCEDURE FindInLine(IN line: Line; OUT pos: INTEGER): BOOLEAN;
   BEGIN
      pos := 0;
      WHILE (pos < M) & ~(line [pos] = x) DO
         INC (pos)
      END;
      RETURN pos < M (* если на выходе TRUE, pos = положению искомого *)
   END FindInLine;

BEGIN
   i := 0;
   WHILE (i < N) & ~FindInLine(arr [i], k) DO
      INC (i)
   END;
   POST: (i >= N) OR (k >= M) OR (arr [i, k] = x)
END
```
Во втором случае - два типичнейших линейных поиска, даже без дополнительных условий для инкрементов (IF ~found THEN INC...).