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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 07.12.2021, 00:32   #1
Airy
 
Регистрация: 27.11.2021
Сообщений: 8
По умолчанию сортировка элементов массива типа double

Для трех матриц написать перегруженные функции (тип элементов int, double, char) для выполнения следующих задач:
- инициализация квадратной матрицы (заполнение случайными значениями);
- вывод матрицы на экран;
- определение максимального и минимального элементов на главной диагонали матрицы;
- сортировка элементов по возрастанию отдельно для каждой строки матрицы.

программа работает, НО во время сортировки массива double некоторые элементы округляет и выводит как int. Подскажите как исправить, пожалуйста
Код:
#include <iostream>
#include <string>
#include <cstdlib>
#include <ctime>

using namespace std;

void rndarray(int**, int);
void rndarray(double**, int);
void rndarray(char**, int);
void out_arr(int**, int);
void out_arr(double**, int);
void out_arr(char**, int);
int max_el(int**, int);
double max_el(double**, int);
char max_el(char**, int);
int min_el(int**, int);
double min_el(double**, int);
char min_el(char**, int);

void Bsort(int**, int size);
void Bsort(double**, int size);
void Bsort(char**, int size);

int main()
{
	srand(time(NULL));
	const int size = 4;
	int** arr_i = new int* [size];
	for (int i = 0; i < size; i++)
		arr_i[i] = new int[size];
	rndarray(arr_i, size);
	out_arr(arr_i, size);
	cout << "\nmax in array 1 main diagonal =\t" << max_el(arr_i, size);
	cout << "\nmin in array 1 main diagonal =\t" << min_el(arr_i, size);
	cout << endl << endl;

	double** arr_d = new double* [size];
	for (int i = 0; i < size; i++)
		arr_d[i] = new double[size];
	rndarray(arr_d, size);
	out_arr(arr_d, size);
	cout << "\nmax in array 2 main diagonal =\t" << max_el(arr_d, size);
	cout << "\nmin in array 2 main diagonal =\t" << min_el(arr_d, size);
	cout << endl << endl;

	char** arr_c = new char* [size];
	for (int i = 0; i < size; i++)
		arr_c[i] = new char[size];
	rndarray(arr_c, size);
	out_arr(arr_c, size);
	cout << "\nmax in array 3 main diagonal =\t" << max_el(arr_c, size);
	cout << "\nmin in array 3 main diagonal =\t" << min_el(arr_c, size);
	cout << endl << endl;

	cout << "\n\tArrays after sort\n";
	Bsort(arr_i, size); cout << endl;
	Bsort(arr_d, size); cout << endl;
	Bsort(arr_c, size); cout << endl;

	for (int i = 0; i < size; i++)
		delete[]arr_i[i];
	delete[]arr_i;
	for (int i = 0; i < size; i++)
		delete[]arr_d[i];
	delete[]arr_d;
	for (int i = 0; i < size; i++)
		delete[]arr_c[i];
	delete[]arr_c;
	return 0;
}

void rndarray(int** ar, int s)
{
	for (int i = 0; i < s; i++)
		for (int j = 0; j < s; j++)
			ar[i][j] = rand() % 30;
}
void rndarray(double** ar, int s)
{
	for (int i = 0; i < s; i++)
		for (int j = 0; j < s; j++)
			ar[i][j] = rand() % 1000 / 10.;
}
void rndarray(char** ar, int s)
{
	for (int i = 0; i < s; i++)
		for (int j = 0; j < s; j++)
			ar[i][j] = rand() % 256;
}
void out_arr(int** ar, int s)
{
	for (int i = 0; i < s; i++)
	{
		for (int j = 0; j < s; j++)
		{
			cout << ar[i][j] << '\t';
		}cout << endl;
	}
}
void out_arr(double** ar, int s)
{
	for (int i = 0; i < s; i++)
	{
		for (int j = 0; j < s; j++)
		{
			cout << ar[i][j] << '\t';
		}cout << endl;
	}
}
void out_arr(char** ar, int s)
{
	for (int i = 0; i < s; i++)
	{
		for (int j = 0; j < s; j++)
		{
			cout << ar[i][j] << '\t';
		}cout << endl;
	}
}
int max_el(int** ar, int s)
{
	int max = ar[0][0];
	for (int i = 0; i < s; i++)
		if (ar[i][i] > max)max = ar[i][i];
	return max;
}
double max_el(double** ar, int s)
{
	double max = ar[0][0];
	for (int i = 0; i < s; i++)
		if (ar[i][i] > max)max = ar[i][i];
	return max;
}
char max_el(char** ar, int s)
{
	char max = ar[0][0];
	for (int i = 0; i < s; i++)
		if (ar[i][i] > max)max = ar[i][i];
	return max;
}
int min_el(int** ar, int s)
{
	int min = ar[0][0];
	for (int i = 0; i < s; i++)
		if (ar[i][i] < min)min = ar[i][i];
	return min;
}
double min_el(double** ar, int s)
{
	double min = ar[0][0];
	for (int i = 0; i < s; i++)
		if (ar[i][i] < min)min = ar[i][i];
	return min;
}
char min_el(char** ar, int s)
{
	char min = ar[0][0];
	for (int i = 0; i < s; i++)
		if (ar[i][i] < min)min = ar[i][i];
	return min;
}
void Bsort(int** arr, int size)
{
	for (int k = 0; k < size; k++)
		for (int i = 0; i < size; i++)
			for (int j = 0; j < size - 1; j++)
				if (arr[k][j] > arr[k][j + 1])
				{
					int tmp = arr[k][j];
					arr[k][j] = arr[k][j + 1];
					arr[k][j + 1] = tmp;
				}
	for (int i = 0; i < size; i++)
	{
		for (int j = 0; j < size; j++)
		{
			cout << arr[i][j] << '\t';
		}cout << endl;
	}
}
void Bsort(double** arr, int size)
{
	for (int k = 0; k < size; k++)
		for (int i = 0; i < size; i++)
			for (int j = 0; j < size - 1; j++)
				if (arr[k][j] > arr[k][j + 1])
				{
					int tmp = arr[k][j];
					arr[k][j] = arr[k][j + 1];
					arr[k][j + 1] = tmp;
				}
	for (int i = 0; i < size; i++)
	{
		for (int j = 0; j < size; j++)
		{
			cout << arr[i][j] << '\t';
		}cout << endl;
	}
}
void Bsort(char** arr, int size)
{
	for (int k = 0; k < size; k++)
		for (int i = 0; i < size; i++)
			for (char j = 0; j < size - 1; j++)
				if (arr[k][j] > arr[k][j + 1])
				{
					int tmp = arr[k][j];
					arr[k][j] = arr[k][j + 1];
					arr[k][j + 1] = tmp;
				}
	for (int i = 0; i < size; i++)
	{
		for (int j = 0; j < size; j++)
		{
			cout << arr[i][j] << '\t';
		}cout << endl;
	}
}
РУЗУЛЬТАТ ВЫПОЛНЕНИЯ
Цитата:
8 15 1 15
29 23 17 4
2 25 21 23
29 18 16 0

max in array 1 main diagonal = 23
min in array 1 main diagonal = 0

42.5 10.4 38.7 30.4
15.4 96.2 15 36.3
1.1 4.2 58.3 85.4
52.5 33.1 23.7 35.2

max in array 2 main diagonal = 96.2
min in array 2 main diagonal = 35.2

╘ = >
╞ ш ┬
5 Щ Ї №
И + ┌ ▓

max in array 3 main diagonal = Ї
min in array 3 main diagonal = ▓


Arrays after sort
1 8 15 15
4 17 23 29
2 21 23 25
0 16 18 29

10.4 30.4 38 42
15 15 36.3 96
1.1 4.2 58.3 85.4
23.7 33 35.2 52

╘ = >
┬ ╞ ш
Щ Ї № 5
И ▓ ┌ +
Airy вне форума Ответить с цитированием
Старый 07.12.2021, 05:36   #2
BDA
МегаМодератор
СуперМодератор
 
Аватар для BDA
 
Регистрация: 09.11.2010
Сообщений: 7,291
По умолчанию

Цитата:
Сообщение от Airy Посмотреть сообщение
int tmp
Почему во всех 3 сортировках временная переменная такого типа?
Пишите язык программирования - это форум программистов, а не экстрасенсов. (<= это подпись )
BDA вне форума Ответить с цитированием
Старый 07.12.2021, 19:54   #3
Airy
 
Регистрация: 27.11.2021
Сообщений: 8
По умолчанию

BDA, точно, вот где пропустила
спасибо!
Airy вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
сформировать несколько элементов массива типа структуры и вывести их Ленащщ Паскаль, Turbo Pascal, PascalABC.NET 2 21.12.2019 21:12
СИ: Сортировка элементов массива shewlett Помощь студентам 5 05.10.2015 21:37
Найти самый часто встречающийся элемент из массива из n элементов целого типа Kulia C# (си шарп) 1 23.12.2013 16:22
in Формула типа String out результат типа Double Gypsy Общие вопросы Delphi 3 16.04.2010 10:21
сортировка элементов массива Dr@gon Помощь студентам 2 03.03.2010 19:49