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

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

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

 
 Ответить  Открыть новую тему 
> Удаление элементов двумерного массива
сообщение
Сообщение #1


Бывалый
***

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

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


В общем дан двумерный массив N^N.
Нужно высчитать суммы средних квадратов массива т.е. подмассивов NxN.
И вот мне нужно после вычисления суммы удалить данный подмассив. Как это можно выполнить?
Пример:
1 2 3 4
4 3 2 1
9 8 7 6
6 7 8 9
Первый шаг: Подсчитали сумму. Удалили:
. . 3 4
. . 2 1
9 8 7 6
6 7 8 9
Второй шаг: Подсчитали сумму. Удалили:
. . . .
. . . .
9 8 7 6
6 7 8 9


Точками являются удалённые элементы

Сообщение отредактировано: Сергей Меркурьев -


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


Профи
****

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

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


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


Бывалый
***

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

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


Уж поверьте попыток моих было очень много))
Ну в общем как я писал требуется для начала подсчитать сумму NxN подмассива. Затем просто напросто перейти к следующему подмассиву. А вот у меня это никак не получается(( Поможете?


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


Профи
****

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

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


Ну понимаеш,если я в массиве 4х4 выделю подмассив 3х3,то у меня больше подмассивов не будет.Каким образом мы определяем подмассив?и чо мы делаем,если например остается строка?как в описанном мною случае.Либо мы выделяем подмассивы строго 2х2.плюс НхН означает,что с клавиатуры вводим?Насчет количества попыток....выложите наиболее продуктивную по вашему мнению(наиболее работоспособную)

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


Гость






Цитата
требуется для начала подсчитать сумму NxN подмассива. Затем просто напросто перейти к следующему подмассиву.
Легко... Описываешь массивы - не как Array[1.. 4, 1 .. 4] of integer, скажем, а так:
const
n = 2;
type
box = array[1 .. n, 1 .. n] of integer;
matrix = array[1 .. 2, 1 .. 2] of box;
(для твоего случая)

Вот тебе и все решение... Теперь проходи по содержимому matrix, "квадратов" всего 4, и считай для каждого из них что тебе надо...

P.S. Паскаль - язык с очень хорошо развитой системой типов. И если ими пользоваться правильно - то многие проблемы перестают быть вообще проблемами: правильно опиши тип, и обработай его.
 К началу страницы 
+ Ответить 
сообщение
Сообщение #6


Бывалый
***

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

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


Всё это я конечно понимаю, но мне нужно ту часть в которой я буду именно каждый раз записывать новый подмассив NxN из массива N^N.

Сообщение отредактировано: Сергей Меркурьев -


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


Уникум
*******

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

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


volvo, я что-то не врубаюсь.. Мне показалось, что Сергею нужно именно подматрицы. Иначе говоря, если разложить большой массив в линию построчно, то первый маленький массивчик будет представлен в нем элементами 1, 2, 5, 6. А если делать так, как ты описал, то подмассивы будут следовать один за другим, то есть элементы первого будут иметь номера 1, 2, 3, 4. По-моему, это противоречит условию.. Или я чего-то не понял)).

Сергей, а что ты подразумеваешь под "удалением"? Замена точками, может, и наглядна, но не говорит ничего о природе самого действия..

Сергей, просьба-замечание к тебе: пожалуйста, пользуйся тэгами для представления степени (кнопка sup)


--------------------
я - ветер, я северный холодный ветер
я час расставанья, я год возвращенья домой
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #8


Гость






Цитата
А если делать так, как ты описал, то подмассивы будут следовать один за другим, то есть элементы первого будут иметь номера 1, 2, 3, 4
это зависит от того, как заполнять матрицу данными... Смотри:
const
n = 2;
type
box = array[1 .. n, 1 .. n] of integer;
matrix = array[1 .. 2, 1 .. 2] of box;

procedure print_box(const b: box);
var i, j: integer;
begin
for i := 1 to n do begin
for j := 1 to n do write(b[i, j]:4);
writeln;
end;
end;
procedure print_mx(const mx: matrix);
var i, j, ib, jb: integer;
begin
for ib := 1 to 2 do
for i := 1 to n do begin
for jb := 1 to 2 do
for j := 1 to n do write(mx[ib, jb][i, j]:4);
writeln;
end;
writeln;
end;
var
mx: matrix;
i, j, ib, jb: integer;
curr: integer;
begin
curr := 0;
for ib := 1 to 2 do
for i := 1 to n do
for jb := 1 to 2 do
for j := 1 to n do begin
mx[ib, jb][i, j] := curr; inc(curr)
end;

writeln('matrix');
print_mx(mx);

for ib := 1 to 2 do
for jb := 1 to 2 do begin
writeln('box[', ib:2, ',', jb:2, ']:');
print_box(mx[ib, jb]);
end;
end.
По-моему, как раз так как нужно заполняется матрица, так, как ее удобнее обрабатывать, а не заполнять... Если стоит задача имеющиеся где-то в файле или получаемые "на лету" данные обработать так, как сказано в первом посте, то есть, квадратными блоками, то как там и что будет использоваться для промежуточного хранения информации - это вообще неважно... Если матрица, описанная как Array[1 .. n, 1 .. n] of integer уже есть, то даже тогда может оказаться выгоднее переформировать данные, как я показал, и очень быстро пробежаться по ним и обработать, не высчитывая каждый раз каких-то индексов, смещений и т.п.

На кой тогда программист вообще нужен, если ничего из средств языка не задействовано? Зачем вообще учить структуры данных, давайте обрабатывать все линейными массивами, и больше ничего не использовать...
В общем, дело ваше, я предложил работающее решение, а воспользоваться им или (как обычно) все переделать по-своему, еще и высказав, что "это неправильно, надо делать по-другому" - дело ваше... Мне как-то плевать на все эти догмы, я использую то, что подходит для решения задачи, а не то, что ПРИНЯТО для этого использовать...

Цитата
мне нужно ту часть в которой я буду именно каждый раз записывать новый подмассив NxN из массива N^N.
Это уже что-то совсем новенькое, то тебе надо удалять, теперь - записывать... Ты уж определись...
 К началу страницы 
+ Ответить 
сообщение
Сообщение #9


Бывалый
***

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

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


Хм... Спасибо конечно)) В принципе большая часть из данной программы мне пригодится в реализации своей. Спасибо ещё раз smile.gif


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


Уникум
*******

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

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


Цитата(volvo @ 8.06.2009 13:38) *
По-моему, как раз так как нужно заполняется матрица, так, как ее удобнее обрабатывать, а не заполнять... Если стоит задача имеющиеся где-то в файле или получаемые "на лету" данные обработать так, как сказано в первом посте, то есть, квадратными блоками, то как там и что будет использоваться для промежуточного хранения информации - это вообще неважно... Если матрица, описанная как Array[1 .. n, 1 .. n] of integer уже есть, то даже тогда может оказаться выгоднее переформировать данные, как я показал, и очень быстро пробежаться по ним и обработать, не высчитывая каждый раз каких-то индексов, смещений и т.п.

На кой тогда программист вообще нужен, если ничего из средств языка не задействовано? Зачем вообще учить структуры данных, давайте обрабатывать все линейными массивами, и больше ничего не использовать...
В общем, дело ваше, я предложил работающее решение, а воспользоваться им или (как обычно) все переделать по-своему, еще и высказав, что "это неправильно, надо делать по-другому" - дело ваше... Мне как-то плевать на все эти догмы, я использую то, что подходит для решения задачи, а не то, что ПРИНЯТО для этого использовать...

Это уже что-то совсем новенькое, то тебе надо удалять, теперь - записывать... Ты уж определись...
Это верно в случае, когда это есть единственное действие, производящееся с матрицей. В общем случае это не так, и естественное построчное заполнение, безусновно, не имеет конкурентов. Переформатирование матрицы, конечно, возможно, если не жалко память (а ее сейчас обычно не жалко) либо есть возможность сделать это на месте, но тогда ее нужно сделать частью процедуры (где вылезут те же самые смещения и т.п.).
Использование средства языка не может же являться самоцелью. Программист нужен, в частности, для того, чтоб решить, какие средства использовать, а какие нет)). Я не спорю, что такая организация матрицы - первое, что приходит в голову в этом специфическом случае. Но.. (см. выше)) smile.gif

Сергей Меркурьев, Вы намеренно игнорируете мой вопрос в Вашей теме? Это хороший способ добиться игнорирования своих вопросов..


--------------------
я - ветер, я северный холодный ветер
я час расставанья, я год возвращенья домой
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 

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

 





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