Консультация № 168349
26.05.2009, 21:23
0.00 руб.
29.05.2009, 10:43
0 5 2
1. Элемент матрицы называется локальным минимумом, если он строго меньше всех имеющихся у него соседей. Подсчитать количество локальных минимумов заданной матрицы размером 10 на 10 ( оформить в виде процедуры ).

2. Найти сумму модулей эл-тов, расположенных выше главной диагонали (оформить в виде функции).

Обсуждение

Неизвестный
26.05.2009, 22:08
общий
это ответ
Здравствуйте, Nevr34.
Код второй программы в приложении.

Главное в программе это функция GetSum, которая возвращает сумму нужных элементов матрицы:
Код:
{Функция получения суммы нужных элементов}
function GetSum: integer;
var
Sum: integer;

begin
sum := 0;
{в этом цикле суммируем все элемнты которые находятся выше главной диагонали}
for i := 1 to N - 1 do
for j := i + 1 to N do
{abs() - возвращает модуль аргумента}
sum := sum + abs(a[i, j]);
GetSum := sum;
end;

Элементы находящиеся выше главной диагонали можно получить с помощью такого цикла:
Код:
for i := 1  to N - 1 do
for j := i + 1 to N do
{a[i, j] - нужный элемент}

Затем в теле цикла прибавляем к сумме модуль элемента с индексами i, j.
Модуль можно получить с помощью функции abs(), которая возвращает модуль переданного числа.
После завершения цикла в переменной sum находится сумма нужных нам элементов.

Удачи!!!

Приложение:
const
{Размерность матрицы}
N = 5;

var
{Матрица}
a: array [1..N, 1..N] of integer;
{Счетчики для цикла For}
i, j: integer;

{Процедура заполнения и вывода матрицы}
procedure Fill;
begin
WriteLn('Исходная матрица: ');
{Инициируем генаратор случайных чисел}
randomize;
{В цикле заполняем матрицу случайными числами и выводим}
for i := 1 to N do
begin
for j := 1 to N do
begin
a[i, j] := random(20) - 10;
Write(a[i, j]:4);
end;
WriteLn;
end;
end;

{Функция получения суммы нужных элементов}
function GetSum: integer;
var
Sum: integer;

begin
sum := 0;
{в этом цикле суммируем все элемнты которые находятся выше главной диагонали}
for i := 1 to N - 1 do
for j := i + 1 to N do
{abs() - возвращает модуль аргумента}
sum := sum + abs(a[i, j]);
GetSum := sum;
end;

begin
{Основной код программы}
Fill;
Write('Ответ: ', GetSum);
ReadLn;
end.
Неизвестный
27.05.2009, 00:02
общий
А угловые соседи тоже рассматриваются?
Неизвестный
27.05.2009, 12:08
общий
Тимошенко Дмитрий:
У меня только вычисляется сумма модулей элементов, расположенных выше главной диагонали.
Неизвестный
27.05.2009, 12:53
общий
Я имел ввиду первое задание.
давно
Старший Модератор
31795
6196
29.05.2009, 13:47
общий
это ответ
Здравствуйте, Nevr34.

Первая задача в приложении.
Удачи!

Приложение:
uses
Crt;
const
n=10;
type
Tmatrix=array[1..n,1..n]of integer;
var
a:Tmatrix;
{процедура генерации массива}
procedure CreateMatrix(var z:Tmatrix);
var
i,j:integer;
begin
for i:=1 to n do
begin
for j:=1 to n do
begin
z[i,j]:=random(50);
write(z[i,j]:3);
end;
writeln;
end;
end;
{процедура поиска локальных минимумов}
procedure SearchMinimum(z:Tmatrix);
var
i,j,x,y,k,l:integer;
w:boolean;
begin
y:=0;
for i:=1 to n do
begin
for j:=1 to n do
begin
w:=true;
TextColor(7);
for x:=0 to 8 do
begin
k:=i-1+x mod 3;
l:=j-1+x div 3;
if ((i<>k)or(j<>l))and{исключаем проверку одно и тогоже числа}
(1<=k)and(k<=n)and{исключаем выход за пределы массива}
(1<=l)and(l<=n)and{исключаем выход за пределы массива}
(z[k,l]<=z[i,j])then{проверяем неравенство}
w:=false;
end;
if w then TextColor(15);{меняем цвет}
inc(y,ord(w));{считаем минимумы}
write(z[i,j]:3);{выводим элемент}
end;
writeln;
end;
TextColor(7);
writeln('Local Mimimum:=', y:4);
end;
begin
{создаем матрицу}
CreateMatrix(a);
writeln;
{выводим результат}
SearchMinimum(a);
ReadKey;
end.
Об авторе:
Мне безразлично, что Вы думаете о обо мне, но я рад за Вас - Вы начали думать.

Форма ответа