pascalabcnet/bin/Lib/Arrays.pas
Mikhalkovich Stanislav e603b1fd6d Mikhalkovich в Copyright
Заготовка для школьного плагина образцов кода
2019-07-28 23:53:15 +03:00

278 lines
10 KiB
ObjectPascal

// Copyright (c) Ivan Bondarev, Stanislav Mikhalkovich (for details please see \doc\copyright.txt)
// This code is distributed under the GNU LGPL (for details please see \doc\license.txt)
unit Arrays;
interface
uses
System;
/// Выводит массив, используя delimiter в качестве разделителя
procedure &Array.Write(delimiter: string := ' ');
/// Выводит массив, используя delimiter в качестве разделителя, и осуществляет переход на новую строку
procedure &Array.Writeln(delimiter: string := ' ');
/// Заполняет целый массив случайными числами в диапазоне от 0 до 99
procedure FillByRandom(a: array of integer);
/// Заполняет целый массив случайными числами в диапазоне от minValue до maxValue
procedure FillByRandom(a: array of integer; minValue, maxValue: integer);
/// Заполняет вещественный массив случайными числами в диапазоне от 0 до 10
procedure FillByRandom(a: array of real);
/// Заполняет вещественный массив случайными числами в диапазоне от minValue до maxValue
procedure FillByRandom(a: array of real; minValue, maxValue: real);
/// Заполняет массив значением x
procedure FillByValue<T>(a: array of T; x: T);
/// Создает и возвращает целый массив размера n, заполненный случайными числами в диапазоне от 0 до 99
function CreateRandomIntegerArray(n: integer): array of integer;
/// Создает и возвращает целый массив размера n, заполненный случайными числами в диапазоне от minValue до maxValue
function CreateRandomIntegerArray(n: integer; minValue, maxValue: integer): array of integer;
/// Создает и возвращает вещественный массив размера n, заполненный случайными числами в диапазоне от 0 до 10
function CreateRandomRealArray(n: integer): array of real;
/// Создает и возвращает вещественный массив размера n, заполненный случайными числами в диапазоне от minValue до maxValue
function CreateRandomRealArray(n: integer; minValue, maxValue: real): array of real;
/// Вводит целый массив
procedure ReadArray(a: array of integer);
/// Вводит вещественный массив
procedure ReadArray(a: array of real);
/// Вводит массив строк
procedure ReadArray(a: array of string);
/// Выводит массив, используя delimiter в качестве разделителя значений
procedure WriteArray<T>(a: array of T; delimiter: string := ' ');
/// Выводит массив, используя delimiter в качестве разделителя значений, и осуществляет переход на новую строку
procedure WritelnArray<T>(a: array of T; delimiter: string := ' ');
/// Сортирует массив по возрастанию
procedure Sort<T>(a: array of T);
/// Сортирует массив по убыванию
procedure SortDescending<T>(a: array of T);
/// Заполняет двумерный целый массив случайными числами в диапазоне от 0 до 99
procedure FillByRandom(a: array [,] of integer);
/// Заполняет двумерный целый массив случайными числами в диапазоне от minValue до maxValue
procedure FillByRandom(a: array [,] of integer; minValue, maxValue: integer);
/// Заполняет двумерный вещественный массив случайными числами в диапазоне от 0 до 99
procedure FillByRandom(a: array [,] of real);
/// Заполняет двумерный вещественный массив случайными числами в диапазоне от minValue до maxValue
procedure FillByRandom(a: array [,] of real; minValue, maxValue: real);
/// Заполняет массив значением x
procedure FillByValue<T>(a: array [,] of T; x: T);
/// Создает и возвращает целый массив размера n, заполненный случайными числами в диапазоне от 0 до 99
function CreateRandomIntegerMatrix(m, n: integer): array [,] of integer;
/// Создает и возвращает целый массив размера n, заполненный случайными числами в диапазоне от minValue до maxValue
function CreateRandomIntegerMatrix(m, n: integer; minValue, maxValue: integer): array [,] of integer;
/// Создает и возвращает вещественный массив размера n, заполненный случайными числами в диапазоне от 0 до 10
function CreateRandomRealMatrix(m, n: integer): array [,] of real;
/// Создает и возвращает вещественный массив размера n, заполненный случайными числами в диапазоне от minValue до maxValue
function CreateRandomRealMatrix(m, n: integer; minValue, maxValue: real): array [,] of real;
/// Выводит двумерный массив
procedure WriteMatrix<T>(a: array [,] of T; width: integer := 0);
/// Выводит двумерный массив
procedure WriteMatrix(a: array [,] of real; width: integer := 0; digitsAfterPoint: integer := 2);
implementation
// ================== Одномерные массивы ==================
procedure FillByRandom(a: array of integer; minValue, maxValue: integer);
begin
for var i := 0 to a.Length - 1 do
a[i] := PABCSystem.Random(minValue, maxValue);
end;
procedure FillByRandom(a: array of integer);
begin
FillByRandom(a, 0, 99);
end;
procedure FillByRandom(a: array of real; minValue, maxValue: real);
begin
for var i := 0 to a.Length - 1 do
a[i] := PABCSystem.Random * (maxValue - minValue);
end;
procedure FillByRandom(a: array of real);
begin
FillByRandom(a, 0, 10);
end;
procedure FillByValue<T>(a: array of T; x: T);
begin
for var i := 0 to a.Length - 1 do
a[i] := x;
end;
function CreateRandomIntegerArray(n: integer; minValue, maxValue: integer): array of integer;
begin
SetLength(Result, n);
FillByRandom(Result, minValue, maxValue);
end;
function CreateRandomRealArray(n: integer; minValue, maxValue: real): array of real;
begin
SetLength(Result, n);
FillByRandom(Result, minValue, maxValue);
end;
function CreateRandomIntegerArray(n: integer): array of integer;
begin
SetLength(Result, n);
FillByRandom(Result);
end;
function CreateRandomRealArray(n: integer): array of real;
begin
SetLength(Result, n);
FillByRandom(Result);
end;
procedure ReadArray(a: array of integer);
begin
for var i := 0 to a.Length - 1 do
read(a[i]);
readln;
end;
procedure ReadArray(a: array of real);
begin
for var i := 0 to a.Length - 1 do
read(a[i]);
readln;
end;
procedure ReadArray(a: array of string);
begin
for var i := 0 to a.Length - 1 do
read(a[i]);
readln;
end;
procedure WriteArray<T>(a: array of T; delimiter: string);
begin
if (a=nil) or (a.Length=0) then
exit;
for var i := 0 to a.Length - 2 do
write(a[i], delimiter);
write(a[a.Length - 1]);
end;
procedure WritelnArray<T>(a: array of T; delimiter: string);
begin
WriteArray(a, delimiter);
writeln;
end;
procedure Sort<T>(a: array of T);
begin
System.Array.Sort(a);
end;
procedure SortDescending<T>(a: array of T);
begin
System.Array.Sort(a);
System.Array.Reverse(a);
end;
// ================== Двумерные массивы ==================
procedure FillByRandom(a: array [,] of integer; minValue, maxValue: integer);
begin
for var i := 0 to a.GetLength(0) - 1 do
for var j := 0 to a.GetLength(1) - 1 do
a[i, j] := PABCSystem.Random(minValue, maxValue);
end;
procedure FillByRandom(a: array [,] of integer);
begin
FillByRandom(a, 0, 100);
end;
procedure FillByRandom(a: array [,] of real; minValue, maxValue: real);
begin
for var i := 0 to a.GetLength(0) - 1 do
for var j := 0 to a.GetLength(1) - 1 do
a[i, j] := PABCSystem.Random * (maxValue - minValue);
end;
procedure FillByValue<T>(a: array [,] of T; x: T);
begin
for var i := 0 to a.GetLength(0) - 1 do
for var j := 0 to a.GetLength(1) - 1 do
a[i, j] := x
end;
procedure FillByRandom(a: array [,] of real);
begin
FillByRandom(a, 0, 10);
end;
function CreateRandomIntegerMatrix(m, n: integer): array [,] of integer;
begin
SetLength(Result, m, n);
FillByRandom(Result, 0, 100);
end;
function CreateRandomIntegerMatrix(m, n: integer; minValue, maxValue: integer): array [,] of integer;
begin
SetLength(Result, m, n);
FillByRandom(Result, minValue, maxValue);
end;
function CreateRandomRealMatrix(m, n: integer): array [,] of real;
begin
SetLength(Result, m, n);
FillByRandom(Result, 0, 10);
end;
function CreateRandomRealMatrix(m, n: integer; minValue, maxValue: real): array [,] of real;
begin
SetLength(Result, m, n);
FillByRandom(Result, minValue, maxValue);
end;
procedure WriteMatrix<T>(a: array [,] of T; width: integer);
begin
for var i := 0 to a.GetLength(0) - 1 do
begin
for var j := 0 to a.GetLength(1) - 1 do
write(a[i, j]:width, ' ');
writeln;
end;
end;
procedure WriteMatrix(a: array [,] of real; width: integer; digitsafterpoint: integer);
begin
for var i := 0 to a.GetLength(0) - 1 do
begin
for var j := 0 to a.GetLength(1) - 1 do
write(a[i, j]:width:digitsafterpoint, ' ');
writeln;
end;
end;
// ================== Методы расширения для массивов ==================
procedure &Array.Write(delimiter: string);
begin
if Self.Rank = 1 then
for var i := 0 to Self.Length - 1 do
begin
PABCSystem.write(Self.GetValue(i));
if i < Self.Length - 1 then
PABCSystem.write(delimiter);
end
else if Self.Rank = 2 then
for var i := 0 to Self.GetLength(0) - 1 do
begin
for var j := 0 to Self.GetLength(1) - 1 do
PABCSystem.write(Self.GetValue(i, j), delimiter);
PABCSystem.writeln;
end;
end;
procedure &Array.Writeln(delimiter: string);
begin
Self.Write(delimiter);
PABCSystem.writeln;
end;
end.