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

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

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Как считать информацию из файла, если в конце стоит пробел? http://www.cyberforum.ru/cpp-beginners/thread17323.html
У меня при считывании из файла в массив, если в конце файла стоит пробел, то копируется ещё один символ (-842…..). Как определить, что в конце стоит пробел и дальше ничего не считывать? for (i = 0;!feof (fin); i++) { fscanf (fin, "%d", &mas); n++; }
C++ Однонаправленный связанный список вот задание Однонаправленный связанный список Тип информационной части узла списка-char 1. Определение структуры информационной части узла, структуры узла списка выполните через спецификацию typedef в отдельном заголовочном файле (Например, Р21.h). 2. Определите все операции над структурой, определенные вашим вариантом, а также операцию создания списка из N узлов, вывод списка и... http://www.cyberforum.ru/cpp-beginners/thread17310.html
Сохранение всех входящих лексем(строк) в порядке поступления C++
:help: Уже ни первый день бьюсь над ошибкой в подпрограмме транслятора? :wall: Цель подпрограммы: сохранение всех входящих лексем(строк) в порядке поступления. Описание: в динамическом массиве сохраняются только ранее неизвестные лексем. А порядок поступления обеспечивает массив указателей, ссылаясь на динамический массив. Реализация: struct entry { char importance; }; struct entry...
C++ Комментарии к Системе счисления
Кто может напишите комментарии к проге,просто по отдельности нет смысла спрашивать потому что очень много что не понятна! Из 2-ой в 10-ую и обратно #include<iostream.h> #include<math.h> #include<conio.h> #include<stdlib.h> #include<stdio.h> #include<string.h> void main(void)
C++ Вывести на экран все слова, встречающиеся более 1 раза http://www.cyberforum.ru/cpp-beginners/thread17270.html
Помогите пожалуйста, запуталась в циклах!!! (( Сама задача такова:Дана строка в ней не более 30 слов, в каждом слове не более 8 букв. Слова отделены запятыми, за последним - точка. Вывести на экран все слова, встречающиеся более 1 раза. Последовательность я ввела в двумерный массив. В конце каждого слова как и полагается - нуль-символ. Может быть существует какая-нибудь хитрость сравнения...
C++ Работа с файлами. Редактирование файла Задачка такая... переписать содержимое файла А в файл Б, удалив однобуквенные слова и пробелы.. #define _CRT_SECURE_NO_WARNINGS #include <stdio.h> #include <conio.h> #include <locale> int main() { setlocale (LC_ALL, ".1251"); FILE *f; f = fopen( "read.txt", "r"); подробнее

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