IPB
ЛогинПароль:

> Прочтите прежде чем задавать вопрос!

1. Заголовок темы должен быть информативным. В противном случае тема удаляется ...
2. Все тексты программ должны помещаться в теги [code=pas] ... [/code].
3. Прежде чем задавать вопрос, см. "FAQ", если там не нашли ответа, воспользуйтесь ПОИСКОМ, возможно такую задачу уже решали!
4. Не предлагайте свои решения на других языках, кроме Паскаля (исключение - только с согласия модератора).
5. НЕ используйте форум для личного общения, все что не относится к обсуждению темы - на PM!
6. Одна тема - один вопрос (задача)
7. Проверяйте программы перед тем, как разместить их на форуме!!!
8. Спрашивайте и отвечайте четко и по существу!!!

 
 Ответить  Открыть новую тему 
> Двумерный массив. соседи элементов, оочень интересная задача не для глупых
DruiD
сообщение 24.10.2006 5:47
Сообщение #1


Новичок
*

Группа: Пользователи
Сообщений: 31
Пол: Мужской
Реальное имя: Андрей

Репутация: -  0  +


Будем называть соседями элемента с индексами i,j некой матрицы такие элементы, что соответствующие индексы которых отличаются от i,j не больше чем на единицу. Для данной целочисленной матрицы А(m*m) найдите матрицу В, которая состоит из нулей и единиц, элемент которой bi равен единице, когда все соседи a ij меньше самого a ij.
Обьясню подробно:
У каждого элемента в матрице есть соседние элементы: справа, слева, сверху, снизу и по диагоналям (соответсвенно у крайних элементов соседей меньше). Необходимо найти сумму всех соседей и определить больше ли сумма соседей самого элемента. Если да то в новой матрице на месте элемента ставим 0 если нет, то 1.


Сообщение отредактировано: DruiD - 24.10.2006 5:51
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
volvo
сообщение 24.10.2006 9:18
Сообщение #2


Гость






Ну и что в этой задаче такого интересного? Опиши функцию, которая по i, j будет возврашать тебе 0 или 1 в зависимости от того, больше или нет сумма соседей в матрице A, чем сам элемент... И возвращенное значение ставь в матрицу B на то же место [i, j]...

Как написать такую функцию?

type matrix = array[1 .. m, 1 .. m] of integer;

function GetNeighbour(const A: matrix; i, j: integer): byte;
var ix, iy, s: integer;
begin
s := 0;
for ix := -1 to 1 do
for iy := -1 to 1 do
if (ix = 0) and (iy = 0) then continue
else
if ((i + ix) > 0) and ((i + ix) <= m) and
((j + iy) > 0) and ((j + iy) <= m) then inc(s, A[i+ix, j+iy]);
GetNeighbour := Byte(s < A[i, j]);
end;
 К началу страницы 
+ Ответить 
DruiD
сообщение 25.10.2006 17:44
Сообщение #3


Новичок
*

Группа: Пользователи
Сообщений: 31
Пол: Мужской
Реальное имя: Андрей

Репутация: -  0  +


А как мне матрицу В поставить на прежнее место [i,j]?
И почему ты матрицу В не описал в приведённой программе
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
мисс_граффити
сообщение 25.10.2006 21:30
Сообщение #4


просто человек
******

Группа: Модераторы
Сообщений: 3 641
Пол: Женский
Реальное имя: Юлия

Репутация: -  55  +


потому что это не программа, а функция - подпрограмма....


--------------------
Все содержимое данного сообщения (кроме цитат) является моим личным скромным мнением и на статус истины в высшей инстанции не претендует.
На вопросы по программированию, физике, математике и т.д. в аське и личке не отвечаю. Даже "один-единственный раз" в виде исключения!
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
DruiD
сообщение 26.10.2006 7:03
Сообщение #5


Новичок
*

Группа: Пользователи
Сообщений: 31
Пол: Мужской
Реальное имя: Андрей

Репутация: -  0  +


а как тогда будет выглядеть программа?
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
volvo
сообщение 26.10.2006 9:16
Сообщение #6


Гость






А это уж ты сам как-нибудь... Основная честь уже готова, а ПОЛНОСТЬЮ писать за тех, кто не хочет пальцем пошевелить, я не буду...
 К началу страницы 
+ Ответить 
DruiD
сообщение 26.10.2006 14:41
Сообщение #7


Новичок
*

Группа: Пользователи
Сообщений: 31
Пол: Мужской
Реальное имя: Андрей

Репутация: -  0  +


Цитата
А это уж ты сам как-нибудь... Основная честь уже готова, а ПОЛНОСТЬЮ писать за тех, кто не хочет пальцем пошевелить, я не буду...


Да я бы с радостью написал бы, только я функции ещё не проходил, а только двумерные массивы. Так что функция, которую ты написал мне абсолютно бесполезна. Здесь наверно можно решить просто через обычные циклы с параметрами, как мне и необходимо. Я не прошу вылаживать все решения, я прошу только обьяснить мне как через цикл с параметрами найти сумму соседей, а остальное я уж сам. И всё...
Но всё равно спасибо, что хоть уделил внимание...
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
мисс_граффити
сообщение 26.10.2006 14:59
Сообщение #8


просто человек
******

Группа: Модераторы
Сообщений: 3 641
Пол: Женский
Реальное имя: Юлия

Репутация: -  55  +


просто не оформляй это отдельной функцией, а возьми ее тело и запихни в основную программу (добавив описание и задание значений переменных и т.д.)


--------------------
Все содержимое данного сообщения (кроме цитат) является моим личным скромным мнением и на статус истины в высшей инстанции не претендует.
На вопросы по программированию, физике, математике и т.д. в аське и личке не отвечаю. Даже "один-единственный раз" в виде исключения!
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
DruiD
сообщение 27.10.2006 14:32
Сообщение #9


Новичок
*

Группа: Пользователи
Сообщений: 31
Пол: Мужской
Реальное имя: Андрей

Репутация: -  0  +


Можете обьяснить что означает эта строка, у меня в ней выводит ошибку.
Код
GetNeighbour := Byte(s < A[i, j]);

что здесь подразумевается под Byte

Сообщение отредактировано: DruiD - 27.10.2006 14:35
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
volvo
сообщение 27.10.2006 14:41
Сообщение #10


Гость






Подразумевается возврат значения НЕ в виде True/False, как положено при сравнении, а в виде 1 если условие выполнено, и 0 - в противном случае... Для этого результат рассматривается НЕ как Boolean, а как Byte...
 К началу страницы 
+ Ответить 
DruiD
сообщение 29.10.2006 17:15
Сообщение #11


Новичок
*

Группа: Пользователи
Сообщений: 31
Пол: Мужской
Реальное имя: Андрей

Репутация: -  0  +


Вышеуказанное утверждение (ix = 0) and (iy = 0) неправильно так как нам будет искать сумму только по диагоналям. Блоки ix = 0 и iy = 0 необходимо расписывать отдельно. Вот Полная программа
program insatiable;
const m=4;
var A:array[1.. m,1..m]of integer;
i,j: byte;
B:array[1..m,1..m]of byte;
ix,iy,s: integer;
Begin
for i:=1 to m do
for j:=1 to m do
begin
writeln ('stro4ka ',i,' stolbec ',j,' ');
readln (A[i,j]);
end;
for i:=1 to m do
for j:=1 to m do
begin
s:=0;
for ix:=-1 to 1 do
begin
for iy:=-1 to 1 do
if ix<>0 then begin
if iy<>0 then
begin
if ((i+ix)>0) and ((i+ix)<=m) and
((j+iy)>0) and ((j+iy)<=m) then inc(s,A[i+ix, j+iy]);
end
else
begin
if((i+ix)>0) and ((i+ix)<=m) then inc(s,A[i+ix, j+iy]);
end
end
else
begin
if iy<>0 then

if ((j+iy)>0) and ((j+iy)<=m) then inc(s,A[i+ix, j+iy]);

end;

end;
if s<A[i,j] then B[i,j]:=1 else B[i,j]:=0;
end;
for i:=1 to m do begin writeln;
for j:=1 to m do write(' ',B[i,j]);
end;
readln;
end.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
мисс_граффити
сообщение 29.10.2006 18:49
Сообщение #12


просто человек
******

Группа: Модераторы
Сообщений: 3 641
Пол: Женский
Реальное имя: Юлия

Репутация: -  55  +


Цитата(DruiD @ 29.10.2006 17:15) *

Вышеуказанное утверждение (ix = 0) and (iy = 0) неправильно так как нам будет искать сумму только по диагоналям. Блоки ix = 0 и iy = 0 необходимо расписывать отдельно.

ну ладно, написал вариант, который тебе понятнее - хорошо.... зачем другой неправильным обзывать?


--------------------
Все содержимое данного сообщения (кроме цитат) является моим личным скромным мнением и на статус истины в высшей инстанции не претендует.
На вопросы по программированию, физике, математике и т.д. в аське и личке не отвечаю. Даже "один-единственный раз" в виде исключения!
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 

 Ответить  Открыть новую тему 
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 



- Текстовая версия 25.06.2025 4:45
Хостинг предоставлен компанией "Веб Сервис Центр" при поддержке компании "ДокЛаб"