Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 22.05.2014, 19:32   #1
Driver_09
Пользователь
 
Регистрация: 11.10.2009
Сообщений: 61
По умолчанию

Здравствуйте.
Собственно задание в теме.
Число 1 <= M <= N. Пишу программу на С++.
Я только своим циклом смог "обрезать" последний столбик и строчку.
Вот код:
Код:
int i, j;
for (i = 1; i < n; i++)
{
for (j = 1; j < n; j++)
{
cout.width(4);
cout << A[i - 1][j - 1];
}
cout << endl;
}
Т.е. нужно найти сначала левый верхний подмассив 2*2, потом начать его двигать.
Ну или на примере массива 3*3:
Цитата:
1 2 3
4 5 6
7 8 9
В этом массива есть 4 подмассива:

Цитата:
[*]1 2
4 5

Цитата:
[*]2 3
5 6
Цитата:
[*]4 5
7 8
Цитата:
[*]5 6
8 9

Было еще предложение, делать кучу циклов, я конечно их сделал, но у меня ничего не выводит...Жалко что тут не структурировано отображается, и так сложно увидеть что откуда идет, так еще и структуры нет, но все же:
Код:
{
int i, j;
	int im = 0, jm = 0;
	int min;
	for (m = 1; m <= n; m++)
	{
		min = A[0][0];
		for (i = 0; i < n; i++)
		{
			for (j = 0; j<n; j++)
			{
				if (min > A[i][j])
				{
					min = A[i][j];
					im = i;
					jm = j;
				}
			}
		}
		for (i = 0; i<n - m + 1; i++)
			for (j = 0; j<n - m + 1; j++)
				sum = 0;
		{
			for (ii = i; ii < i + m; ii++)
				for (jj = j; jj < j + m; jj++)
					sum = sum + A[ii][jj];
			if (sum < min)
			{
				min = sum;
				im = ii;
				jm = jj;
			}
		}

	}
	cout << min << "\n";
	cout << im << "\n";
	cout << jm << "\n";
}
На минимум и суммы не обращайте внимание, они нужны для задания, но мне-то важнее понять как найти левый верхний квадрат, а потом начать его двигать и считать там сумму.

Последний раз редактировалось Stilet; 22.05.2014 в 21:04.
Driver_09 вне форума Ответить с цитированием
Старый 22.05.2014, 21:30   #2
Bugrimov
C/C++, Java
Участник клуба
 
Аватар для Bugrimov
 
Регистрация: 28.03.2012
Сообщений: 1,679
По умолчанию

Самый простой вариант, так сказать в лоб
Код:
#include <iostream>

using namespace std;

const int N = 3;
const int M = 2;

void printArray(int [N][N], int, int, int , int);

int main() {
	int Array[N][N] = {{2, 4, 3},{1, 0, 1},{5, 4, 6}};

	printArray(Array, 0, N, 0, N);
	cout << endl;

	printArray(Array, 0, M, 0, M);
	cout << endl;
	printArray(Array, 0, M, 1, N);
	cout << endl;
	printArray(Array, 1, N, 0, M);
	cout << endl;
	printArray(Array, 1, N, 1, N);

	return 0;
}

void printArray(int Array[N][N], int beginOne, int endOne, int beginTwo, int endTwo) {
	for(int i = beginOne; i < endOne; i++) {
		for(int j = beginTwo; j < endTwo; j++) {
			cout << " [" << Array[i][j] << "]";
		}
		cout << endl;
	}
}
А да, еще M, совсем упустил из виду
"Keep it simple" - придерживайтесь простоты!
Уильям Оккам - "Не следует множить сущее без необходимости"
Сложность - враг простоты и удобства!

Последний раз редактировалось Bugrimov; 22.05.2014 в 21:37.
Bugrimov вне форума Ответить с цитированием
Старый 22.05.2014, 23:20   #3
Driver_09
Пользователь
 
Регистрация: 11.10.2009
Сообщений: 61
По умолчанию

а если например на произвольный массив это сделать?
как менять m?
Driver_09 вне форума Ответить с цитированием
Старый 23.05.2014, 10:43   #4
Bugrimov
C/C++, Java
Участник клуба
 
Аватар для Bugrimov
 
Регистрация: 28.03.2012
Сообщений: 1,679
По умолчанию

Что вы имеете в виду под словом "произвольный"?
"Keep it simple" - придерживайтесь простоты!
Уильям Оккам - "Не следует множить сущее без необходимости"
Сложность - враг простоты и удобства!
Bugrimov вне форума Ответить с цитированием
Старый 23.05.2014, 13:51   #5
Driver_09
Пользователь
 
Регистрация: 11.10.2009
Сообщений: 61
По умолчанию

массив разной размерности)
Здесь же задан статичный массив 3*3, что если размерность делать произвольное N
Driver_09 вне форума Ответить с цитированием
Старый 23.05.2014, 13:54   #6
Bugrimov
C/C++, Java
Участник клуба
 
Аватар для Bugrimov
 
Регистрация: 28.03.2012
Сообщений: 1,679
По умолчанию

Сделайте, не проблема... Задача была решена на тех исходных данных, которые вы предоставили.
"Keep it simple" - придерживайтесь простоты!
Уильям Оккам - "Не следует множить сущее без необходимости"
Сложность - враг простоты и удобства!
Bugrimov вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Хм, а как найти сумму в двухмерном массиве? L6go1as Помощь студентам 3 28.10.2011 00:28
Подмассив Kventin.by Помощь студентам 3 22.11.2010 09:56
Скажите в чем ошибка, как в массиве найти арифметическую прогрессию и вывести элементы на экран? Lodyr Помощь студентам 0 21.12.2009 16:32
Как найти в двумерном массиве МАХ элемент каждой строки? Jasper92 Общие вопросы C/C++ 9 16.12.2009 12:58
Как найти проиизведение в одномерном массиве? kitty Помощь студентам 10 30.11.2007 20:30