Пример программы
//Область 5 (правая половина матрицы ниже главной диагонали).
//Метод вставки. Строки по возрастанию.
#include<stdio.h>
#include<iostream.h>
#include<stdlib.h>
#include<conio.h>
#include<string.h>
const RAZ = 8; //максимально возможный размер матрицы
void okno(int x1,int y1,int x2,int y2,int bkcol,int colb,char zag[15]);
void obnul(const int n,int**);
void sortir(const int n,int**);
void imputmas(const int n,int a,int b,int**);
void outputmas(const int n,int**);
void main()
{int i,a,b,n;
int matr[RAZ][RAZ];
okno(1,1,80,25,BLACK,WHITE,"");
okno(1,1,30,12,WHITE,BLACK,"Описание");
cprintf("\r\nВ двумерном массие размером\r\n");
cprintf("2n x 2n отсортировать строки\r\n");
cprintf("области № 5 по возрастанию\r\n");
cprintf("методом вставки.\r\n");
okno(32,1,79,12,BLUE,WHITE,"Исходная матрица");
okno(32,14,79,24,BLUE,WHITE,"Результирующая матрица");
okno(1,14,30,24,WHITE,BLACK,"Окно ввода");
cout << "\nВведите границы диапазона\n";
cout << "изменения случайных чисел\n";
cin >> a >> b;
cout << "Введите размер матрицы <=4:\n ";
cin >> n;
int *dinamo[RAZ];
for(i = 0; i < RAZ; i++)
dinamo[i] = matr [i];
imputmas(n,a,b,dinamo);
okno(32,1,79,12,BLUE,WHITE,"Исходная матрица");
outputmas(n,dinamo);
sortir(n,dinamo);
obnul(n,dinamo);
okno(32,14,79,24,BLUE,WHITE,"Результирующая матрица");
outputmas(n,dinamo);
getchar();
}
void okno(int x1,int y1,int x2,int y2,int bkcol,int colb,char zag[15])
{window(x1,y1,x2,y2);
textbackground(bkcol);
textcolor(colb);
clrscr();
gotoxy((x2 - x1 - strlen(zag)) / 2,1);
cprintf("%s\n\r",zag);
}
void imputmas(const int n,int a,int b,int** dinamit)
{int i,j;
randomize();
for(i = 0; i < 2 * n; i++)
for(j = 0; j < 2 * n; j++)
dinamit[i][j] = random(1+b-a) + a;
}
void outputmas(const int n,int** dinamit)
{int i,j;
for(i = 0; i < 2 * n; i++)
{for(j = 0; j < 2 * n; j++)
if((j <= i)&&(j > n - 1))
{textbackground(WHITE);
textcolor(RED);
cprintf("%4i",dinamit[i][j]);
textcolor(WHITE);
textbackground(BLUE);
}
else cprintf("%4i",dinamit[i][j]);
gotoxy(1,i+3);
}
}
void sortir(const int n,int** dinamit)
{int i,j,k,t,b;
for(k = n + 1; k < 2 * n; k++) //номер строки
for(i = n + 1; i <= k; i++) //номер прохода
{t = dinamit[k][i];
b = n;
while(b < i && dinamit[k][b] <= dinamit[k][i])
b++;
for(j = i - 1; j >= b; j--) //номер столбца
dinamit[k][j + 1] = dinamit[k][j];
dinamit[k][b] = t;
}
}
void obnul(const int n,int** dinamit)
{int i,j;
for(i = 0; i < 2 * n; i++)
for(j = 0; j < 2 * n; j++)
if(!(j <= i && j > n - 1))
dinamit[i][j] = 0;
}
Лабораторная работа №8