nextupprevious

Next:5.4.5 Упражнения
Up:5.4 Программы обработки матриц
Previous:5.4.3 Преобразование матриц
 


5.4.4 Поиск номера строки-серии

Задача. Для заданной матрицы целых чисел размером 30 х 30 найти максимальный среди номеров строк, являющихся сериями, т.е. таких строк, в которых значения всех элементов совпадают.

Решение. Если в матрице есть хотя бы одна строка-серия, то при обработке строк "с конца" требуемая строка будет обнаружена первой. Чтобы определить, является ли строка серией, достаточно сравнить каждый ее элемент с первым элементом строки. Для распознавания серии естественно выделить функцию Паскаля, решающую эту задачу. В этой функции мы предусмотрим логическую переменную РАВНЫ, которая становится ложной, когда в строке обнаруживается элемент, отличный от первого. Переменная РАВНЫ используется для управления циклом, в котором элементы строки сравниваются с ее первым элементом: процесс итерации можно оборвать, когда переменная РАВНЫ станет ложной.

module НомерСтрокиСерии;
    const M = 30;
    var A : array M+1, M+1 of integer; I : integer;
    procedure СЕРИЯ (I:Integer): boolean;
        var РАВНЫ : boolean;
               F, (* Первый элемент I-й строки матрицы A *)
                J :integer;
    begin
           F := A[I,1]; J := 2; РАВНЫ := True;
           while (J # M) & РАВНЫ do
                (* {Ограничивающее выражение: M-J} *)
                РАВНЫ := (F = A[I,J]);
                J := J+1
           end;
           return РАВНЫ
    end СЕРИЯ;
begin I := M;
    (* Ниже I-й строки нет строк-серий *)
     while ~ СЕРИЯ (I) & (I $>$ 0) do
        I := I-1 (* Ниже I-й строки нет строк-серий *)
     end;
     if I = 0 then writeln(' В матрице нет строк-серий ')
     else writeln(I,'- номер последней строки-серии ')
     end
end.

Next:5.4.5 Упражнения
Up:5.4 Программы обработки матриц
Previous:5.4.3 Преобразование матриц


© В.Н. Касьянов, Е.В.Касьянова, 2004