Форум программистов, компьютерный форум CyberForum.ru

Разбить матрицу на квадраты размером 3х3; в центре каждого квадрата поместить сумму прочих элементов квадрата - C++

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 48, средняя оценка - 4.85
dimacat
1 / 1 / 0
Регистрация: 04.10.2008
Сообщений: 96
03.12.2008, 13:17     Разбить матрицу на квадраты размером 3х3; в центре каждого квадрата поместить сумму прочих элементов квадрата #1
Есть задача:

Заполнить матрицу случайными числами. Разбить матрицу на квадраты размером 3х3. В центре каждого квадрата поместить сумму остальных элементов квадрата

Рисунок прикреплён. Хотелось бы узнать как можно релизовать подсчёт суммы элементов квадрата.
Изображения
 
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
03.12.2008, 13:17     Разбить матрицу на квадраты размером 3х3; в центре каждого квадрата поместить сумму прочих элементов квадрата
Посмотрите здесь:

Записать программу, содержащую шаблон функции, возвращающей сумму квадрата и куба числа любого числового типа C++
Найти произведение квадрата всех положиельны элементов массива C++
Из заданной матрицы A размером получить матрицу В размером по правилу: первый столбец состоит из положительных элементов, второй – из отрицате C++
C++ Массив: Для каждого квадрата размером MxM в этой таблице вычислить сумму стоящих в нём чисел.
C++ Из массива (15 элементов) получите новый массив, каждый элемент которого равен сумме соответствующего исходного элемента и его квадрата
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Spo1ler
 Аватар для Spo1ler
291 / 51 / 3
Регистрация: 22.05.2008
Сообщений: 788
03.12.2008, 17:53     Разбить матрицу на квадраты размером 3х3; в центре каждого квадрата поместить сумму прочих элементов квадрата #2
Если судить по названию темы, то вы видимо не знаете, что в Си++ динамические многомерные массивы нельзя.
Knjagskij
-4 / 6 / 0
Регистрация: 10.11.2008
Сообщений: 772
Завершенные тесты: 1
03.12.2008, 18:21     Разбить матрицу на квадраты размером 3х3; в центре каждого квадрата поместить сумму прочих элементов квадрата #3
А если воспользовать встроенным ассемблером?
Spo1ler
 Аватар для Spo1ler
291 / 51 / 3
Регистрация: 22.05.2008
Сообщений: 788
03.12.2008, 18:40     Разбить матрицу на квадраты размером 3х3; в центре каждого квадрата поместить сумму прочих элементов квадрата #4
А зачем? Есть std::vector<std::vector<int>> например.
XuTPbIu_MuHTAu
Эксперт C++
 Аватар для XuTPbIu_MuHTAu
2218 / 733 / 10
Регистрация: 27.05.2008
Сообщений: 1,507
03.12.2008, 22:00     Разбить матрицу на квадраты размером 3х3; в центре каждого квадрата поместить сумму прочих элементов квадрата #5
Спойлер в корне не прав. Динамические многомерные массивы реализуются легко,если заранее известна нужная размерность. Если не известна - придется подумать,и все равно реализуются.
Начнем с примитивного способа
Код
int ** arr2d = new int * [n]; 
for(int i=0;i<n;i++) arr2d[i]= new int[m];
Как вариант,разумеется,вектор.

Сама задача,кстати,некорректна,допускает разные трактовки.Но это уже вам разбираться.
Слово "разбить" не стоит понимать буквально. Это логическая абстракция. На деле я бы реализовал функцию,которая по входящим координатам (int i,int j) и указателю на массив (int ** ) меняла бы значение этого элемента на сумму соседних. После чего прогнал бы ее по диагональным элементам.(тут есть неточность задачи : диагональные элементы сами входят в другие квадраты...какой нужно брать для суммы : изначальный или новый?решайте сами..)
Spo1ler
 Аватар для Spo1ler
291 / 51 / 3
Регистрация: 22.05.2008
Сообщений: 788
03.12.2008, 22:39     Разбить матрицу на квадраты размером 3х3; в центре каждого квадрата поместить сумму прочих элементов квадрата #6
Я имел ввиду, что запись T** arr=new T[n][m]; недопустима.
dimacat
1 / 1 / 0
Регистрация: 04.10.2008
Сообщений: 96
05.12.2008, 15:09  [ТС]     Разбить матрицу на квадраты размером 3х3; в центре каждого квадрата поместить сумму прочих элементов квадрата #7
ребят, спасибо за всё вышеизложенное. дайте идею: как сделать проход по массиву, чтобы он складывал элементы квадрата 3х3?

с остальным, кроме этого я уже разобрался.
XuTPbIu_MuHTAu
Эксперт C++
 Аватар для XuTPbIu_MuHTAu
2218 / 733 / 10
Регистрация: 27.05.2008
Сообщений: 1,507
05.12.2008, 16:30     Разбить матрицу на квадраты размером 3х3; в центре каждого квадрата поместить сумму прочих элементов квадрата #8
Код
int sum=0;
for(int i=0;i<N;i++) {
    for(int j=0;j<M;j++)
         sum+=mas[i][j];
};
dimacat
1 / 1 / 0
Регистрация: 04.10.2008
Сообщений: 96
05.12.2008, 16:40  [ТС]     Разбить матрицу на квадраты размером 3х3; в центре каждого квадрата поместить сумму прочих элементов квадрата #9
сорри, если не уточнил: я имел ввиду в этой задаче, которая дана. т.е. как посчитать все элементы, входящие в квадратик 3х3, кроме того элемента, который стоит посередине квадратика. посчитав первый квадратик перейти ко второму - посчитать, перейти к третьему квадрату и т.д.
XuTPbIu_MuHTAu
Эксперт C++
 Аватар для XuTPbIu_MuHTAu
2218 / 733 / 10
Регистрация: 27.05.2008
Сообщений: 1,507
05.12.2008, 18:15     Разбить матрицу на квадраты размером 3х3; в центре каждого квадрата поместить сумму прочих элементов квадрата #10
из этой суммы потом вычти центральный элемент

Добавлено через 11 минут 36 секунд
Чтобы выбрать нужный квадрат - меняй начальные значения i,j. N=M=3 в твоем случае.
dimacat
1 / 1 / 0
Регистрация: 04.10.2008
Сообщений: 96
06.12.2008, 21:30  [ТС]     Разбить матрицу на квадраты размером 3х3; в центре каждого квадрата поместить сумму прочих элементов квадрата #11
XuTPbIu_MuHTAu, что-то у меня не получается. первый квадрат 3х3 понятно как посчитать, а вот второй, например?
dimacat
1 / 1 / 0
Регистрация: 04.10.2008
Сообщений: 96
10.12.2008, 16:07  [ТС]     Разбить матрицу на квадраты размером 3х3; в центре каждого квадрата поместить сумму прочих элементов квадрата #12
http://dimacat.at.tut.by/l09_e013.gif

Вообщем, оказалось, что рисунок к задаче не тот был. Но всё равно у меня вопрос: как реализовать обход этой матрицы по квадратам? Жду ответа! Заранее благодарен!
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
08.09.2016, 18:51     Разбить матрицу на квадраты размером 3х3; в центре каждого квадрата поместить сумму прочих элементов квадрата
Еще ссылки по теме:

C++ Вычислить количество элементов массива целых M [15] больших квадрата первого элемента этого массива
Матрица 3х3, найти количество отрицательных и сумму положительных элементов C++
C++ Реализовать класс "Квадрат" с данными-членами "центр квадрата" и "сторона квадрата"

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
desop
 Аватар для desop
0 / 0 / 0
Регистрация: 04.04.2016
Сообщений: 5
08.09.2016, 18:51     Разбить матрицу на квадраты размером 3х3; в центре каждого квадрата поместить сумму прочих элементов квадрата #13
Сомневаюсь, что ответ для автора темы всё ещё актуален, но возможно будет полезно для других
Для более удобного случая покажу пример.
Пусть будет квадратного вида матрица mas из 81-го элемента (одномерный массив, кому надо из него легко сделают двухмерный), т.е. матрица 3х3, где каждая ячейка также имеет размерность 3х3
Нумерация индексов для 3х3 пусть будет для удобства:
0 1 2
3 4 5
6 7 8
В задаче необходимо иметь два типа индекса:
1) indexBig3x3, значения будут в интервале [0-8]
2) indexSmall3x3, значения будут в интервале [0-8]

Очевидно, что по координатам [ indexBig3x3 ][ indexSmall3x3 ], можно однозначно определить любой элемент в матрице и не важно в линейном будет представлении или двухмерный массив.
C++ (Qt)
1
indexBig3x3 = ((k/27)*3) + (k % 9) / 3; // кстати, для любителей сократить дробь, здесь сокращение будет не корректно!
, где k - это линейный индекс массива из 81-го элемента
C++ (Qt)
1
2
numHoriz = (indexBig3x3 / 3) * 3 + j / 3;
indexLine = 3 * indexBig3x3 + j + 6 * numHoriz; // j = внутренний индекс ячейки, т.е. indexSmall3x3
для суммирования в заданной indexBig3x3 = NUM , примерно так будет выглядеть код:
C++ (Qt)
1
2
3
4
5
6
7
int sum = 0, numHoriz, indexLine;
for ( int k = 0; k < 9; ++k)
{
numHoriz = (indexBig3x3 / 3) * 3 + k / 3;
indexLine = 3 * indexBig3x3 + k + 6 * numHoriz;
sum += mas [ indexLine ];
}
Для других размерностей блоков, надо заменить соответственно 3 на нужное. В общем случае размерность может быть не кратна размерностям блока и тогда алгоритм будет хитрее.

P.S.
Если кому-то надо, то спрашивайте в личке. У меня есть готовая реализация для конвертации индексов в различные представления и обратно при работе с блочными данными.
Yandex
Объявления
08.09.2016, 18:51     Разбить матрицу на квадраты размером 3х3; в центре каждого квадрата поместить сумму прочих элементов квадрата
Ответ Создать тему
Опции темы

Текущее время: 09:18. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru