Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.62/13: Рейтинг темы: голосов - 13, средняя оценка - 4.62
0 / 0 / 0
Регистрация: 10.04.2013
Сообщений: 6

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

10.04.2013, 14:39. Показов 2761. Ответов 8
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте, помогите пожалуйста, как можно сделать цикл по перемещению квадрата в матрице. Понятно, что мы должны вычитать и прибавлять столбцы и строки, но вот как ограничить этот цикл?
Вот формулировка задачи:
Дана квадратная таблица A[N,N] и число M<N. Для каждого квадрата размером MxM в этой таблице вычислить сумму
стоящих в нём чисел. Общее число действий должно быть порядка n^2. Указание сначала для каждого горизонтального прямоугольника размером MxM вычислить сумму стоящих в нём чисел. (При сдвиге такого прямоугольника по горизонтали на М нужно добавить одно число и одно вычесть) Затем используя эти суммы , вычислить суммы в квадратах. (При сдвиге квадрата по вертикали добавляется полоска, а другая полоска убавляется)
Заранее спасибо.
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
10.04.2013, 14:39
Ответы с готовыми решениями:

Для каждого квадрата размером MхM матрицы вычислить сумму стоящих в нем чисел
Примечание: Вывод результата на рабочий лист MS Excel. При решении задач использовать динами-ческие массивы. Дана квадратная таблица A и...

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

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

8
:)
Эксперт С++
4773 / 3267 / 497
Регистрация: 19.02.2013
Сообщений: 9,046
10.04.2013, 15:01
Hamidam, вот Вам для начала координаты левого верхнего угла для квадрата внутри матрицы:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
#include <iostream>
 
int main() {
   
   const int N = 3;
   const int M = 2;
   
   for( int i=0; i<=N-M; ++i )
      for( int j=0; j<=N-M; ++j )
         std::cout << "Square top-left corner : (" << i << ":" << j << ")" << std::endl;
   
   return 0;
}
0
0 / 0 / 0
Регистрация: 10.04.2013
Сообщений: 6
10.04.2013, 15:15  [ТС]
Вот код программы:
Кликните здесь для просмотра всего текста
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
#include<iostream.h>
main()
{
int n,m,i,j,**mat,s=0;
printf("vvedite razmernost'\t");
scanf("%d",&n);
printf("vvedite razmernost' kvadrata\t");
scanf("%d",&m);
mat=(int **)calloc(n,sizeof(int *));
         for(i=0;i<n;i++)
           {mat[i]=(int *)calloc(n,sizeof(int));}
for(i=0;i<n;i++)
 {
                for(j=0;j<n;j++)
                {
                                mat[i][j]=rand()%10;
                                printf("%d\t",mat[i][j]);}
                printf("\n");}
for(i=0;i<m;i++)//öèêë ñóììèðîâàíèÿ ÷èñåë â êâàäðàòå
           {
                for(j=0;j<m;j++)
                {
                                s+=mat[i][j];
                                printf("\ns=%d",s);}
                                }                      
 
                                                 
for(i=0;i<m;i++)
free(mat[i]);
free(mat);
system("pause");
}
0
:)
Эксперт С++
4773 / 3267 / 497
Регистрация: 19.02.2013
Сообщений: 9,046
10.04.2013, 15:18
Hamidam, Вам на С надо или на С++ всё же?
0
0 / 0 / 0
Регистрация: 10.04.2013
Сообщений: 6
10.04.2013, 15:18  [ТС]
с++
0
:)
Эксперт С++
4773 / 3267 / 497
Регистрация: 19.02.2013
Сообщений: 9,046
10.04.2013, 16:08
Цитата Сообщение от Hamidam Посмотреть сообщение
с++
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
#include <iostream>
 
int main() {
   
   using std::cout;
   using std::cin;
   using std::endl;
   
   int N, M;
   cin >> N >> M;
   
   srand(time(0));
   
   int** matrix = new int*[N];
   for( int i=0; i<N; ++i )
   {
      matrix[i] = new int[N];
      for( int j=0; j<N; ++j )
      {
         cout << (matrix[i][j] = rand() % 10) << " ";
      }
      cout << endl;
   }
   
   for( int i=0; i<=N-M; ++i )
      for( int j=0; j<=N-M; ++j )
      {
         cout << "Square top-left corner : (" << i << ":" << j << ")";
         
         int sum = 0;
         for( int k=i; k<i+M; ++k )
            for( int m=j; m<j+M; ++m )
            {
               sum += matrix[k][m];
            }
         
         cout << " Sum = " << sum << endl;
      }
   
   return 0;
}
Малость в кучу и без освобождения памяти.

Добавлено через 16 минут
Hamidam, правда сделано "в лоб". Если нужно вычислять сумму в новом квадрате на основании предыдущего, то придется переделать
1
503 / 352 / 94
Регистрация: 22.03.2011
Сообщений: 1,112
10.04.2013, 16:41
Кликните здесь для просмотра всего текста

Цитата Сообщение от Tulosba Посмотреть сообщение
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
#include <iostream>
 
int main() {
   
   using std::cout;
   using std::cin;
   using std::endl;
   
   int N, M;
   cin >> N >> M;
   
   srand(time(0));
   
   int** matrix = new int*[N];
   for( int i=0; i<N; ++i )
   {
      matrix[i] = new int[N];
      for( int j=0; j<N; ++j )
      {
         cout << (matrix[i][j] = rand() % 10) << " ";
      }
      cout << endl;
   }
   
   for( int i=0; i<=N-M; ++i )
      for( int j=0; j<=N-M; ++j )
      {
         cout << "Square top-left corner : (" << i << ":" << j << ")";
         
         int sum = 0;
         for( int k=i; k<i+M; ++k )
            for( int m=j; m<j+M; ++m )
            {
               sum += matrix[k][m];
            }
         
         cout << " Sum = " << sum << endl;
      }
   
   return 0;
}
Малость в кучу и без освобождения памяти.

Добавлено через 16 минут
Hamidam, правда сделано "в лоб". Если нужно вычислять сумму в новом квадрате на основании предыдущего, то придется переделать


Решение не правильно. Требуемая сложность О(2), а у Вас О(4) и куча ошибок.
Но в свою очередь условие не корректно. Для составление правильной итерации нужно точно знать как двигаться по матрице со сдвигом на 1 (т.е. для каждого квадрата) или со сдвигом на размер квадрата (то что указано в "указании"). И что вообще значит это указание? Решить так и не как иначе?
0
0 / 0 / 0
Регистрация: 10.04.2013
Сообщений: 6
10.04.2013, 16:52  [ТС]
Цитата Сообщение от stima Посмотреть сообщение
Кликните здесь для просмотра всего текста




Решение не правильно. Требуемая сложность О(2), а у Вас О(4) и куча ошибок.
Но в свою очередь условие не корректно. Для составление правильной итерации нужно точно знать как двигаться по матрице со сдвигом на 1 (т.е. для каждого квадрата) или со сдвигом на размер квадрата (то что указано в "указании"). И что вообще значит это указание? Решить так и не как иначе?
Указание было дано вместе с текстом самой задачи. Как я понял совершенно не обязательно выполнять как там написано, это что то типа подсказки.
0
:)
Эксперт С++
4773 / 3267 / 497
Регистрация: 19.02.2013
Сообщений: 9,046
10.04.2013, 16:53
stima, про сложность добавил в комментарии. Только вот, говоря про сложность, следовало бы писать O(n^2), O(n^4), а не O(2), O(4). Потому что иначе это константная сложность.
Цитата Сообщение от stima Посмотреть сообщение
и куча ошибок.
Укажите где.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
10.04.2013, 16:53
Помогаю со студенческими работами здесь

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

Массив: Вычислить сумму неотрицательных чисел, стоящих на местах, кратных 3, и количество чисел равных заданному T.
Задан динамически массив чисел. Программа должна: 1) вводить размерность и элементы массива; 2) вводить некоторые дополнительные...


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

Или воспользуйтесь поиском по форуму:
9
Ответ Создать тему
Новые блоги и статьи
Знаешь почему 90% людей редко бывают счастливыми?
kumehtar 14.04.2026
Потому что они ждут. Ждут выходных, ждут отпуска, ждут удачного момента. . . а удачный момент так и не приходит.
Фиксация колонок в отчете СКД
Maks 14.04.2026
Фиксация колонок в СКД отчета типа Таблица. Задача: зафиксировать три левых колонки в отчете. Процедура ПриКомпоновкеРезультата(ДокументРезультат, ДанныеРасшифровки, СтандартнаяОбработка) / / . . .
Настройки VS Code
Loafer 13.04.2026
{ "cmake. configureOnOpen": false, "diffEditor. ignoreTrimWhitespace": true, "editor. guides. bracketPairs": "active", "extensions. ignoreRecommendations": true, . . .
Оптимизация кода на разграничение прав доступа к элементам формы
Maks 13.04.2026
Алгоритм из решения ниже реализован на нетиповом документе, разработанного в конфигурации КА2. Задачи, как таковой, поставлено не было, проделанное ниже исключительно моя инициатива. Было так:. . .
Контроль заполнения и очистка дат в зависимости от значения перечислений
Maks 12.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеПерсонала", разработанного в конфигурации КА2. Задача: реализовать контроль корректности заполнения дат назначения. . .
Архитектура слоя интернета для сервера-слоя.
Hrethgir 11.04.2026
В продолжение https:/ / www. cyberforum. ru/ blogs/ 223907/ 10860. html Знаешь что я подумал? Раз мы все источники пишем в голове ветки, то ничего не мешает добавить в голову такой источник, который сам. . .
Подстановка значения реквизита справочника в табличную часть документа
Maks 10.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеПерсонала", разработанного в конфигурации КА2. Задача: при выборе сотрудника (справочник Сотрудники) в ТЧ документа. . .
Очистка реквизитов документа при копировании
Maks 09.04.2026
Алгоритм из решения ниже применим как для типовых, так и для нетиповых документов на самых различных конфигурациях. Задача: при копировании документа очищать определенные реквизиты и табличную. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru