Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- program main;
- const
- NN = 10;//Фактическое ограничение матрицы(максимальное значение n)
- type
- mtr = array[1..NN, 1..NN] of integer;//Матрица n * n
- type
- mas = array[1..NN] of integer;
- var
- n, i, j: integer;
- a: mtr;
- n1, n2: string;
- procedure swap(var a, b: integer);
- begin
- if (a - b = 0) then exit;//Максимально важная проверка. без нее При совпадающих элементах массива, т.е. swap(a[i], a[i]), возвращает a[i] = 0!!
- a := a + b;// a = 3, b = 4 ---> a = 7, b = 4
- b := a - b;// a = 7, b = 4 ---> a = 7, b = 3
- a := a - b;// a = 7, b = 3 ---> a = 4, b = 3;
- // magic of numbers, nothing more \\
- end;
- procedure InPut(var a: mtr; name: string);//процедура ввода. n - формальное ограничение матрицы
- var
- i, j: integer;
- input_t: text;
- begin
- assign(input_t, name);
- reset(input_t);
- readln(input_t, n);
- for i := 1 to n do
- begin
- for j := 1 to n do
- read(input_t, a[i, j]);
- readln(input_t);
- end;
- close(input_t);
- end;
- procedure OutPut(var a: mtr; name: string);
- var
- i, j: integer;
- output_t: text;
- begin
- assign(output_t, name);
- rewrite(output_t);
- for i := 1 to n do
- begin
- for j := 1 to n do
- write(output_t, a[i, j]:3);
- writeln(output_t);
- end;
- close(output_t);
- end;
- procedure Insertion_sort(var t: mas; size: integer);
- var
- cur, i, j: integer;
- begin
- for i := 2 to size do
- begin
- cur := t[i];
- for j := i - 1 downto 1 do
- if (cur < t[j]) then
- swap(t[j + 1], t[j])
- else
- break;
- end;
- end;
- procedure SortDiagonal(var a: mtr);
- var
- tmp: mas;//вспомогательный массив
- i, j: integer;
- begin
- for i := n - 1 downto 1 do//Выше главной D
- begin
- for j := 1 to i do
- tmp[j] := a[i - j + 1, j];
- Insertion_sort(tmp, i);
- for j := 1 to i do
- a[i - j + 1, j] := tmp[j];
- end;
- for i := n downto 1 do// Гл. D
- tmp[i] := a[i, n - i + 1];
- Insertion_sort(tmp, n);
- j := 1;
- for i := n downto 1 do
- begin
- a[i, n - i + 1] := tmp[j];
- j := j + 1;
- end;
- for i := 2 to n do //Ниже главной D
- begin
- for j := n downto i do
- tmp[j - i + 1] := a[n + i - j, j];
- Insertion_sort(tmp, n - i + 1);
- for j := n downto i do
- a[n + i - j, j] := tmp[j - i + 1];
- end;
- end;
- var
- b: mas;
- begin
- n1 := 'input.txt';{имена файлов}
- n2 := 'output.txt';
- InPut(a, n1);//ввод матрицы a из файла n, размерность задается в процедудере
- SortDiagonal(a);//функция сортировки
- OutPut(a, n2);//вывод матрицы, по заданной n(глобальная переменная)
- end.
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement