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

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

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 17.06.2020, 12:04   #1
almasitou
Новичок
Джуниор
 
Регистрация: 17.06.2020
Сообщений: 1
По умолчанию c++, sort, matrix, сортировка, матрица

Здравствуйте! Есть задача "Упорядочить строки матрицы по возрастанию значений элементов ее побочной диагонали". Матрица считывается с файла. Всё работает прекрасно, но не получается написать корректный код сортировки и перестановки.
Код:
#include <iostream>
#include <cstdlib>
#include <fstream>
#include <ctime>
#include <vector>
#include <windows.h>
#include <algorithm>

using namespace std;

void Create_matrix(int n, int min, int max) {
	ofstream out("matrix.txt", false);

	if (out.is_open())
	{
		srand(time(NULL));
		static const double fraction = 1.0 / (static_cast<double>(RAND_MAX) + 1.0);
		
		string s;
		for (int i = 0; i < n; i++)
		{
			s = "\t";
			for (int j = 0; j < n; j++)
			{
				if (j == n - 1)s = "\n";
				out << static_cast<int>(rand() * fraction * (max - min + 1) + min) << s;
			}
		}
		out.close();
	}
	else cout << "Произошла невиданная ошибка!";
}

int Read_File(vector<int>& a) {
	ifstream in("matrix.txt");
	if (in.is_open())
	{
		int number;
		do
		{
			in >> number;
			a.push_back(number);

		} while (!in.eof());
		a.pop_back();
		return a.size();
	}
	else { cout << "Не удалось открыть файл!"; return -1; }
}

void Sort_matrix(int** a, int n) {
	bool flag = true;
	int counter = 0;
	int tmp = 0;
	while (flag && counter < 50)
	{
		flag = false;
		counter++;
		for (int i = 0; i < n - 1; i++) {

			if (a[i][n - 1 - i] > a[i + 1][n - 1 - (i + 1)]) {
				for (int k = 0; k < n; k++)
				{
					flag = true;
				 tmp = a[i][k];
					a[i][k] = a[i + 1][k];
					a[i + 1][k] = tmp;
					
				}
				
			}
		}

	}
}

void Print(int** a, int n) {
	for (int i = 0; i < n; i++)
	{
		for (int j = 0; j < n; j++)
		{
			cout << a[i][j] << "\t";

		}
		cout << endl;

	}
}
int main() {
	SetConsoleCP(1251);
	SetConsoleOutputCP(1251);
	Create_matrix(5, -100, 100);
	vector<int>arr;
	bool check = false;
	int n = Read_File(arr);
	n = sqrt(n);
	
	
	if (n % 1 == 0) {
		int** matrix = new int* [n];
		for (int count = 0; count < n; count++)
			matrix[count] = new int[n];
		int k = 0;

		for (int i = 0; i < n; i++)
		{
			for (int j = 0; j < n; j++)
			{
				matrix[i][j] = arr[k];
				k++;
				
			}
			
		}

		Print(matrix, n);
		Sort_matrix(matrix, n);
		cout << endl << endl;
		Print(matrix, n);


		for (int count = 0; count < n; count++)
			delete[] matrix[count];
	}

	system("pause");

}
almasitou вне форума Ответить с цитированием
Старый 17.06.2020, 17:54   #2
BDA
МегаМодератор
СуперМодератор
 
Аватар для BDA
 
Регистрация: 09.11.2010
Сообщений: 7,285
По умолчанию

После перестановки строк изменятся и элементы побочной диагонали. Нужно определиться, сортировать ли в порядке возрастания по исходным элементам или после каждой перестановки строк рассматривать новые элементы.
Пишите язык программирования - это форум программистов, а не экстрасенсов. (<= это подпись )
BDA вне форума Ответить с цитированием
Ответ


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

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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Сортировка вставками,матрица,C++ pechenkacatTT Visual C++ 1 14.11.2018 14:42
Сортировка текстовых файлов. Программу для осуществления Bubble sort и Simple Selection olegts94 Паскаль, Turbo Pascal, PascalABC.NET 0 08.12.2013 17:24
Матрица целых чисел(n, m).Сортировка произведений столбцов. zips Помощь студентам 0 05.04.2013 14:29
матрица и сортировка aleko05 Паскаль, Turbo Pascal, PascalABC.NET 2 07.01.2013 14:48
(STL LIST SORT) Сортировка по некольким критериям htatsu Общие вопросы C/C++ 4 19.07.2009 01:44