Главная Случайная страница Контакты | Мы поможем в написании вашей работы! | ||
|
//Методы сортировки
//Массивы динамические двумерные
//Сортировка элементов всех строк двумерного массива целых чисел
//по убыванию
#include<iostream.h>
#include <locale.h>
//using namespace std;
typedef int telem; //определение типа элементов массива
typedef telem *tstr; //определение типа "указатель на telem"
typedef tstr *tmatr; //определение типа "указатель на указатель на telem"
void inputmatr(tmatr a, int str, int sto);
void outputmatr(tmatr a, int str, int sto);
void sort_obmenF(tmatr a, int str, int sto);
int main()
{ int i, j;
int n; //число строк матрицы
int m; //число столбцов матрицы
tmatr a; //объявляется переменная-указатель на указатель на telem
setlocale(LC_ALL,"Russian");
cout << "\nВведите количество строк и столбцов матрицы: ";
cin >> n >> m;
a = new tstr [n]; //выделение динамической памяти под массив
//указателей на строки массива
for(i = 0; i < n; i++) //цикл выделения памяти под каждую строку
*(a + i) = new telem [m];//каждому элементу массива указателей
//на строки присваивается адрес начала
//области памяти, выделяемой под строку
inputmatr(a, n, m);
cout << "Исходная матрица:\n";
outputmatr(a, n, m);
sort_obmenF(a, n, m);
cout << "Матрица с отсортированными строками:" << endl;
outputmatr(a, n, m);
cout << endl;
//Освобождение динамической памяти
for(i = 0; i < n; i++)
delete a[i];
delete a;
return 0;
}
void inputmatr(tmatr a, int str, int sto)
{ cout << "Введите построчно через пробел элементы" << endl;
cout << "двумерного массива размера " << str << "x" << sto << endl;
cout << "После ввода строки нажимайте <Enter>" << endl;
for(int i = 0; i < str; i++)
for(int j = 0; j < sto; j++)
*(*(a + i) + j) = 10 * i + j;
}
//сортировка элементов массива по возрастанию методом обмена с флагом
void sort_obmenF(tmatr a, int str, int sto)
{ int i, j, k, flag;
telem z;
for(i = 0; i < str; i++)
{k = sto; //начальное количество не сортированных элементов строки
do{flag = 0;
for(j = 0; j < k - 1; j++)
if(*(*(a + i) + j) < *(*(a + i) + j + 1))
{z = *(*(a + i) + j);
*(*(a + i) + j) = *(*(a + i) + j + 1);
*(*(a + i) + j + 1) = z;
flag = 1;
}
k--;
}while(flag);
}
}
void outputmatr(tmatr a, int str, int sto)
{ int i, j;
for(i = 0; i < str; i++)
{for(j = 0; j < sto; j++)
{cout.width(2); //ширина поля выводимого параметра
cout << *(*(a + i) + j) << ' ';
}
cout << '\n';
}
}
Дата публикования: 2015-09-18; Прочитано: 210 | Нарушение авторского права страницы | Мы поможем в написании вашей работы!