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

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

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Как считать информацию из файла, если в конце стоит пробел? http://www.cyberforum.ru/cpp-beginners/thread17323.html
У меня при считывании из файла в массив, если в конце файла стоит пробел, то копируется ещё один символ (-842…..). Как определить, что в конце стоит пробел и дальше ничего не считывать? for (i =...
C++ Однонаправленный связанный список вот задание Однонаправленный связанный список Тип информационной части узла списка-char 1. Определение структуры информационной части узла, структуры узла списка выполните через спецификацию... http://www.cyberforum.ru/cpp-beginners/thread17310.html
Сохранение всех входящих лексем(строк) в порядке поступления C++
:help: Уже ни первый день бьюсь над ошибкой в подпрограмме транслятора? :wall: Цель подпрограммы: сохранение всех входящих лексем(строк) в порядке поступления. Описание: в динамическом массиве...
C++ Комментарии к Системе счисления
Кто может напишите комментарии к проге,просто по отдельности нет смысла спрашивать потому что очень много что не понятна! Из 2-ой в 10-ую и обратно #include<iostream.h> #include<math.h>...
C++ Вывести на экран все слова, встречающиеся более 1 раза http://www.cyberforum.ru/cpp-beginners/thread17270.html
Помогите пожалуйста, запуталась в циклах!!! (( Сама задача такова:Дана строка в ней не более 30 слов, в каждом слове не более 8 букв. Слова отделены запятыми, за последним - точка. Вывести на экран...
C++ Работа с файлами. Редактирование файла Задачка такая... переписать содержимое файла А в файл Б, удалив однобуквенные слова и пробелы.. #define _CRT_SECURE_NO_WARNINGS #include <stdio.h> #include <conio.h> #include <locale> int main()... подробнее

Показать сообщение отдельно
desop
0 / 0 / 0
Регистрация: 04.04.2016
Сообщений: 9
08.09.2016, 18:51
Сомневаюсь, что ответ для автора темы всё ещё актуален, но возможно будет полезно для других
Для более удобного случая покажу пример.
Пусть будет квадратного вида матрица 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
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.