Студопедия.Орг Главная | Случайная страница | Контакты | Мы поможем в написании вашей работы!  
 

Пример №2



//Методы сортировки

//Массивы динамические двумерные

//Сортировка элементов всех строк двумерного массива целых чисел

//по убыванию

#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; Прочитано: 208 | Нарушение авторского права страницы | Мы поможем в написании вашей работы!



studopedia.org - Студопедия.Орг - 2014-2024 год. Студопедия не является автором материалов, которые размещены. Но предоставляет возможность бесплатного использования (0.005 с)...