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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 12.04.2017, 17:39   #1
ggjgj
Пользователь
 
Регистрация: 25.10.2016
Сообщений: 83
По умолчанию Заменить в коде параллельные главной, на параллельные побочной диагонали

Вот код,нужно сделать чтобы сортировались диагонали параллельные побочной, а не главной. помогите пожалуйста.

Код:
int *diag1;
	diag1 = new int[n + 1];
	for (i = n - 2; i >= 0; i--)
	{
		for (j = 0; j<n - i; j++) diag1[j] = a[j][i + j];

		sort(diag1, n - i);
		for (j = 0; j<n - i; j++) a[j][i + j] = diag1[j];
	}
	int *diag2;
	diag2 = new int[n + 1];
	for (i = 1; i<n - 1; i++)
	{
		for (j = i; j <= n - 1; j++) diag2[j] = a[j][j - i];
		sort(diag2, n - i);
		for (j = i; j <= n - 1; j++) a[j][j - i] = diag2[j];
	}
Код:
#include <fstream>
#include <iomanip>
#include <iostream>

using namespace std;
ifstream in("input.txt");
ofstream out("output.txt");
void sort(int *a, int n)
{
	int temp;
	int i, j;
	for (i = 1; i < n; i++)
	{
		j = i;
		while (j > 0 && a[j] < a[j - 1])
		{
			temp = a[j];
			a[j] = a[j - 1];
			a[j - 1] = temp;
			j--;
		}
	}
}

int main()
{
	int n, i, j;
	in >> n;
	int** a = new int*[n];
	for (i = 0; i < n; i++)
	{
		a[i] = new int[n];
		for (int j = 0; j<n; j++)
			in >> a[i][j];
	}

	int *diag1;
	diag1 = new int[n + 1];
	for (i = n - 2; i >= 0; i--)
	{
		for (j = 0; j<n - i; j++) diag1[j] = a[j][i + j];

		sort(diag1, n - i);
		for (j = 0; j<n - i; j++) a[j][i + j] = diag1[j];
	}
	int *diag2;
	diag2 = new int[n + 1];
	for (i = 1; i<n - 1; i++)
	{
		for (j = i; j <= n - 1; j++) diag2[j] = a[j][j - i];
		sort(diag2, n - i);
		for (j = i; j <= n - 1; j++) a[j][j - i] = diag2[j];
	}
	{
		out << n << endl;
		for (int i = 0; i<n; i++, out << endl)
			for (j = 0; j<n; j++)
				out << setw(5) << left << a[i][j];


	}
	in.close();
	out.close();
	for (int i = 0; i < n; ++i)
		delete[] a[i];
	delete[] a;
	return 0;
}
ggjgj вне форума Ответить с цитированием
Старый 13.04.2017, 11:39   #2
ggjgj
Пользователь
 
Регистрация: 25.10.2016
Сообщений: 83
По умолчанию

ну помогите разобраться в циклах, не думаю ,что это сложно для тех кто понимает
ggjgj вне форума Ответить с цитированием
Старый 13.04.2017, 11:56   #3
alexzk
Форумчанин
 
Регистрация: 12.04.2017
Сообщений: 889
По умолчанию

Цитата:
Сообщение от ggjgj Посмотреть сообщение
ну помогите разобраться в циклах, не думаю ,что это сложно для тех кто понимает
сложно...) реально сложно, в основном из-за однобуквенных названий. В хорошей практике пишут полные слова, типа
fullMatrix

а i-j-k резервируют для счетчиков цикла...

...а вообще задание нифига не понятно...

кстати подсказка вам, вы там копии походу делаете diag1 = new int[n + 1];
к чему? У вас уже есть источник а, а[i][j] можно записать как указатель ptr = (a + i*n +j), вот и сортируйте по таким указателям внутри оригинала. Копии удалите.

можно сделать "итератор", некоторую сущность (обычно это структура с методами), которая принимает при создании указатель на оригинал таблицы и размеры. Дальше, при вызове метода next() она выдает указатель на след. ячейку в диагонали (или нуль, если более нет ячеек). По сути туда половина ваших циклов и уйдет (а вторую удаяем, ибо они копии плодят).
Дальше вы создаете такой итератор и циклом вызываете next() и проводите сортировку. Код получается разделенный и не запутаный. Вся сложность такая - это борьба с кашей в голове. Более того, правильно написаный итератор может применятся и в других лабах без изменений.

Последний раз редактировалось alexzk; 13.04.2017 в 12:01.
alexzk вне форума Ответить с цитированием
Ответ


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

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Отсортировать диагонали, параллельные побочной по возрастанию ggjgj Помощь студентам 3 08.04.2017 19:11
Отсортировать диагонали матрицы параллельные побочной по возрастанию элементов методом выбора. - C++ vladrrom Помощь студентам 1 18.03.2017 11:48
pascal или Delphi: массив A[n,n]. Если на главной диагонали нет отрицательных элементов, то элементы побочной диагонали - удвоить, Ману Помощь студентам 3 29.05.2014 18:00
В квадратной матрице заменить элементы главной и побочной диагонали единицами.Язык Си. East Undia Trading Помощь студентам 17 21.12.2013 20:56
подсчитывать сумму главной и побочной диагонали Fantazerishka Помощь студентам 2 14.10.2009 21:55