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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 48, средняя оценка - 4.85
dimacat
1 / 1 / 0
Регистрация: 04.10.2008
Сообщений: 96
#1

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

03.12.2008, 13:17. Просмотров 5945. Ответов 12
Метки нет (Все метки)

Есть задача:

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

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

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

Заполнить матрицу случайными числами. Разбить матрицу на квадраты размером 3х3. В центре каждого квадрата поме - C++
Помогите пожалуйста есть некоторые мысли, ну успешного ответа нет :((( #include <iostream> #include <conio.h> #include <ctime> ...

Массив: Для каждого квадрата размером MxM в этой таблице вычислить сумму стоящих в нём чисел. - C++
Здравствуйте, помогите пожалуйста, как можно сделать цикл по перемещению квадрата в матрице. Понятно, что мы должны вычитать и прибавлять...

Площадь квадрата равна S. Вычислить сторону квадрата а, диагональ d и площадь S1 описанного около этого квадрата круга - C++
Напишите код в C++ Пожалуйста :confusion:

Шифровать методом Магического квадрата (размер квадрата 9х9) С++ - C++
Шифровать методом Магического квадрата (размер квадрата 9х9) С++ Дана таблица 9х9. Надо реализовать программу на С++...

Найти сумму элементов в строке матрицы с наименьшим элементом точного квадрата - C++
В данной матрице n найдите сумму элементов в строке с наименьшим элементом точного квадрата.(Берем только 1 наименьший элемент)

12
Spo1ler
292 / 52 / 3
Регистрация: 22.05.2008
Сообщений: 788
03.12.2008, 17:53 #2
Если судить по названию темы, то вы видимо не знаете, что в Си++ динамические многомерные массивы нельзя.
0
Knjagskij
-4 / 6 / 0
Регистрация: 10.11.2008
Сообщений: 775
Завершенные тесты: 1
03.12.2008, 18:21 #3
А если воспользовать встроенным ассемблером?
0
Spo1ler
292 / 52 / 3
Регистрация: 22.05.2008
Сообщений: 788
03.12.2008, 18:40 #4
А зачем? Есть std::vector<std::vector<int>> например.
0
XuTPbIu_MuHTAu
Эксперт С++
2226 / 741 / 10
Регистрация: 27.05.2008
Сообщений: 1,508
03.12.2008, 22:00 #5
Спойлер в корне не прав. Динамические многомерные массивы реализуются легко,если заранее известна нужная размерность. Если не известна - придется подумать,и все равно реализуются.
Начнем с примитивного способа
Код
int ** arr2d = new int * [n]; 
for(int i=0;i<n;i++) arr2d[i]= new int[m];
Как вариант,разумеется,вектор.

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

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

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

Вообщем, оказалось, что рисунок к задаче не тот был. Но всё равно у меня вопрос: как реализовать обход этой матрицы по квадратам? Жду ответа! Заранее благодарен!
0
desop
0 / 0 / 0
Регистрация: 04.04.2016
Сообщений: 9
08.09.2016, 18:51 #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.
Если кому-то надо, то спрашивайте в личке. У меня есть готовая реализация для конвертации индексов в различные представления и обратно при работе с блочными данными.
0
08.09.2016, 18:51
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
08.09.2016, 18:51
Привет! Вот еще темы с ответами:

Найти двузначные числа, у которых сумма удвоенного квадрата первой цифры и квадрата второй цифры равен самому числу - C++
Найти двузначные числа, у которых сумма удвоенного квадрата первой цифры и квадрата второй цифры равен самому числу

Сравнить площадь круга и площадь квадрата , которые заданы сответствено радиусом r и стороной квадрата a - C++
сравнить площадь круга и площадь квадрата , которые заданы сответствено радиусом r и стороной квадрата a

Реализовать класс "Квадрат" с данными-членами "центр квадрата" и "сторона квадрата" - C++
Объявить класс по приведенному ниже заданию в соответствии с номером варианта и определить для него конструктор по умолчанию,...

Разбить матрицу на квадраты размером 3х3. В центре каждого квадрата поместить сумму других элементов квадрата - Pascal ABC
Помогите, нужно написать код в паскале. Добавлено через 42 минуты Нашел на форуме, если он верный, переведите пожалуйста на паскаль ...


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

Или воспользуйтесь поиском по форуму:
13
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru