Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 17.12.2007, 03:43   #1
Damokl
 
Регистрация: 17.12.2007
Сообщений: 3
По умолчанию Задача с матрицей. Ломаю голову уже неделю

Привожу текст задачи без изменений.

Дана числовая матрица M*N. Сохранив без изменения элементы крайних строк и столбцов таблицы, замените каждый внутренний элемент средним арифметическим четырех соседних с ним элементов (сверху, снизу, слева, справа).(Без использования вспомогательного массива)


Помогите, пожалуйста с алгоритмом (принципом) решения задачи. Код писать не нужно. Заранее благодарен
Damokl вне форума Ответить с цитированием
Старый 17.12.2007, 07:43   #2
puporev
Старожил
 
Регистрация: 13.10.2007
Сообщений: 2,740
По умолчанию

Можно и без вспомогательного массива.
1.Создаем массив a[M,N].
2.В цикле for i:=2 to m-1 do
begin
for j:=2 to n-1 do
begin
считаем среднеарифметическое по предложенному условию и заносим данные как бы в виртуальный массив справа от основного:
a[i,j+n-1]:=(a[i-1,j]+a[i+1,j]+a[i,j-1]+a[i,j+1])/4;
end;
end;
3.В таком же цикле заносим полученные данные на "место":
a[i,j]:=a[i,j+n-1];
end;
end;
4.В цикле
for i:=1 to m do
begin
for j:=1 to n do
begin
выводим обработанный массив на экран.
puporev вне форума Ответить с цитированием
Старый 17.12.2007, 14:45   #3
Damokl
 
Регистрация: 17.12.2007
Сообщений: 3
По умолчанию

Идея, конечно, интересная.
Для отмазки конечно сойдёт. Но. Работа достаточно серьёзная. А метод, предложенный Вами обходной. Де-юре все условия соблюдены, де-факто не хочется бесить препода.

Судя по другим задачам, есть какой-то красивый метод решения, но пока я его обнаружить не смог.
Всё равно спасибо за идею. Если ничего не найду, буду пользоваться этой.
Damokl вне форума Ответить с цитированием
Старый 17.12.2007, 15:24   #4
puporev
Старожил
 
Регистрация: 13.10.2007
Сообщений: 2,740
По умолчанию

Покажи пару других задач, может мысль какая придет.
puporev вне форума Ответить с цитированием
Старый 17.12.2007, 16:03   #5
mutabor
Телепат с дипломом
Старожил
 
Аватар для mutabor
 
Регистрация: 10.06.2007
Сообщений: 4,929
По умолчанию

В лоб без вспомогательного масссива или в каком либо другом виде временного хранения данных эту задачу не решить. Очевидно здесь какая-то математическая хитрость.
The future is not a tablet with a 9" screen no more than the future was a 9" black & white screen in a box. It’s the paradigm that survives. (Kroc Camen)
Проверь себя! Онлайн тестирование | Мой блог
mutabor вне форума Ответить с цитированием
Старый 17.12.2007, 16:19   #6
Malice
Пользователь
 
Регистрация: 28.01.2007
Сообщений: 27
По умолчанию

Можно по-хитрому:
Код:
const z=$FFFF;
x:array [1..n,1..m] of longint;
i,j,v: longint;
....
for i:=2 to n-1 do
  for j:=2 to m-1 do begin
     v:=((x[i-1,j] and z)+(x[i+1,j] and z)
        +(x[i,j+1] and z)+(x[i,j-1] and z)) div 4;
 x[i,j]:=x[i,j] and z + (v shl 16);
  end;
for i:=2 to n-1 do
  for j:=2 to m-1 do
    x[i,j]:=x[i,j] shr 16;
Но такой способ накладывает ограничение на хранимые в массиве значения.
Malice вне форума Ответить с цитированием
Старый 19.12.2007, 03:20   #7
Damokl
 
Регистрация: 17.12.2007
Сообщений: 3
По умолчанию

А задача всё-таки оказалась не математической а программистской
Это задача на рекурсию. Ниже кусок программы на Паскале, который я только что написал. (Идея не моя, её мне подсказал друг )

i:=2;
j:=2;
element(i,j);
.....
{================================== ===========}
procedure element(a,b:integer);
var work:real;
begin
if b=Ncolumn then begin
a:=a+1;
b:=2;
end;
work:=(Mas[a-1,b]+Mas[a,b-1]+Mas[a+1,b]+Mas[a,b+1])/4;
if not((b=2)and(a=Mrow)) then
begin
element(a,b+1);
Mas[a,b]:=work;
end;
end;
{================================== ===========}
Damokl вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Задача,опять же с матрицей groth88 Паскаль, Turbo Pascal, PascalABC.NET 3 16.04.2008 13:22
Задача с матрицей H[o][o]K Помощь студентам 1 15.12.2007 16:51
Задача с матрицей на Delphi POPOV Помощь студентам 28 29.10.2007 06:39
Задача с матрицей(нужна помощь) VDK23RUS Помощь студентам 5 14.06.2007 12:55
Задача с матрицей, Паскаль Integra Помощь студентам 1 25.04.2007 16:14