Консультация № 109115
12.11.2007, 20:09
0.00 руб.
0 1 1
Уважаемые знатоки, помогите, пожалуйста, с такой задачкой: элемент матрицы называется локальным минимумом, если он строго меньше всех имеющихся у него соседей. Соседними элементами А (i,j) в матрице называются элементы А (k,l), где i-1<=k<=i+1, j-1<=l<=j+1, (k,l)<>(i,j). 1.Подсчитать количество локальных минимумов заданной матрицы размером 10*10(оформить в виде процедуры). 2. Найти сумму модулейэлементов, расположенныхвыше главной диагонали (оформить в виде функции). Помогите, пожалуйста, а то я даже не знаю с чего начать.

Обсуждение

Неизвестный
12.11.2007, 21:36
общий
это ответ
Здравствуйте, Cмирнова Наталья Викторовна!
По поводу первой части. "Соседей" будем оббегать в дополнительном цикле и сравнивать с текущим элементом. По поводу второй - индексы элементов над главной диагональю соотносятся как j < i (на самой диагонали i=j). Только следует учитывать, что смысл это имеет только для квадратной матрицы. Решение в приложении.
Удачи!

Приложение:
Type matr = array [1..10, 1..10] of integer; {Объявляем тип матрица}Var a: matr; m, n, i, j, s: byte;procedure LocMin (var a: matr; m,n: byte; var s: byte); {процедра подсчёта локальных минимумов}var i,j,p,q,k:byte;begin s:=0; {обнуляем сумму} i:=1; while i<=m do begin j:=1; while j<=n do begin k:=0; {обнуляем счётчик} for p:=i-1 to i+1 do {циклы по соседям} for q:=j-1 to j+1 do if (p>0)and(p<=m)and {проверяем, не вышли ли за границу массива} (q>0)and(q<=n)and (not((i=p)and(q=j))) then if a[p,q]<a[i,j] then {если сосед меньше текущего, меняем к} inc(k); if k=0 then inc (s); {если меньших соседей не было - наращиваем сумму} inc(j); end; inc(i); end;end;function Sum (var a: matr; n: byte): byte; {сумма элементов над главной диагональю}var i, j, s: byte;begin s:=0; for i:=1 to n do for j:=1 to n do if j>i then s:= s+abs(a[i,j]); {если текущий элемент над главной диагональю - прибавим} Sum:= s;end;begin readln (n); {считываем размерность квадратной матрицы} for i:=1 to n do {считываем элементы} for j:=1 to n do readln (a[i,j]); writeln; for i:=1 to n do {выведем на экран} begin for j:=1 to n do write (a[i,j]:5); writeln; end; LocMin (a, n, n, s); {вывод результата} writeln (‘Количество локальных минимумов: ‘, s); writeln (‘Сумма модулей элементов над главной диагональю: ‘, Sum (a, n, n));end.
Форма ответа