Помогите сделать задачу с двумерными массивами.

За вознаграждение или нахаляву (если повезёт)

Модераторы: Хыиуду, MOTOCoder, Medved, dr.Jekill

Ответить
santalix
Сообщения: 8
Зарегистрирован: 20 ноя 2012, 19:17

Задать двумерный массив размерности N x N (N-нечетное)
Найти: произведение элементов выделенной области и максимальный из них.
dr.Jekill
Сообщения: 526
Зарегистрирован: 03 янв 2009, 23:17
Откуда: Voronezh
Контактная информация:

Как выделяется область?
Нет религии выше истины
santalix
Сообщения: 8
Зарегистрирован: 20 ноя 2012, 19:17

Да вот сам не знаю...
dr.Jekill
Сообщения: 526
Зарегистрирован: 03 янв 2009, 23:17
Откуда: Voronezh
Контактная информация:

Если предположить, что задаются индексы верхнего-левого и нижнего-правого элементов, то:

Код: Выделить всё

uses crt;
const
  maxn = 100;
var
  a: array[1..maxn, 1..maxn] of Integer;
  n, i, j, i1, j1, i2, j2: Integer;
  p: Longint;
  max: Integer;
begin
  repeat
    ClrScr;
    Write('n: ');
    ReadLn(n);
  until (n > 0) and (n mod 2 <> 0);
  repeat
    ClrScr;
    Write('i1: ');
    ReadLn(i1);
  until (i1 > 0) and (i1 < n);
  repeat
    ClrScr;
    Write('j1: ');
    ReadLn(j1);
  until (j1 > 0) and (j1 < n);
  repeat
    ClrScr;
    Write('i2: ');
    ReadLn(i2);
  until (i2 >= i1) and (i2 <= n);
  repeat
    ClrScr;
    Write('j2: ');
    ReadLn(j2);
  until (j2 >= j1) and (j2 <= n);
  ClrScr;
  Randomize;
  for i := 1 to n do
  begin
    for j := 1 to n do
    begin
      a[i, j] := Random(5) + 1;
      Write(a[i, j]: 2, ' ');
    end;
    WriteLn;
  end;
  p := 1;
  max := 0;
  for i := i1 to i2 do
    for j := j1 to j2 do
    begin
      p := p * a[i, j];
      if a[i, j] > max then
        max := a[i, j];
    end;
  WriteLn('p=', p);
  WriteLn('max=', max);
  ReadKey;
end.
Нет религии выше истины
santalix
Сообщения: 8
Зарегистрирован: 20 ноя 2012, 19:17

Спасибо , справился сам.
Вложения
Снимок..jpg
santalix
Сообщения: 8
Зарегистрирован: 20 ноя 2012, 19:17

Код: Выделить всё

Program lab3;
var
S,i,j,maxN,max,m:integer;
z:real;
matr: array [1..100, 1..100] of longint;
begin
writeln('Массив');
repeat
writeln('Введите размерность массива');
readln(maxN);
If maxN mod 2=0 then
writeln('Неправильная размерность');
until maxN mod 2<>0;
i:=0;
repeat
i:=i+1;
j:=0;
repeat
j:=j+1;
write('graph[',i,',',j,']= ');
readln(matr[i,j]);
until j=maxN;
until i=maxN;
S:=1;
z:=maxN div 2+1;
for i:=1 to maxN do
for j:=1 to maxN do
If (i+j=maxN+1) or( (i>=z) and (i+j<>maxN+1) and (i+j<maxN+1)) or ((j>=z) and (i+j<>maxN+1) and (i+j<maxN+1)) then
S:=S*matr[i,j];
writeln('S=',S);
max:=-maxint;
for i:=1 to maxN do
for j:=1 to maxN do
If (i+j=maxN+1) or( (i>=z) and (i+j<>maxN+1) and (i+j<maxN+1)) or ((j>=z) and (i+j<>maxN+1) and (i+j<maxN+1)) then
m:=matr[i,j];
If m>max then
max:=m;
writeln('max= ',max);
end.
Ответить