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

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

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

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


Новичок
*

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

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


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


Сообщение отредактировано: DruiD -
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #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;
 К началу страницы 
+ Ответить 
сообщение
Сообщение #3


Новичок
*

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

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


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


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

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

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


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


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


Новичок
*

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

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


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


Гость






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


Новичок
*

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

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


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


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


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

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

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


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


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


Новичок
*

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

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


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

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

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


Гость






Подразумевается возврат значения НЕ в виде True/False, как положено при сравнении, а в виде 1 если условие выполнено, и 0 - в противном случае... Для этого результат рассматривается НЕ как Boolean, а как Byte...
 К началу страницы 
+ Ответить 
сообщение
Сообщение #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 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #12


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

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

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


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

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

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


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

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

 





- Текстовая версия 29.03.2024 19:25
500Gb HDD, 6Gb RAM, 2 Cores, 7 EUR в месяц — такие хостинги правда бывают
Связь с администрацией: bu_gen в домене octagram.name