GCD LCM в PABCSystem
This commit is contained in:
parent
5ee38daf37
commit
c63d812a5c
|
|
@ -15,7 +15,7 @@ internal static class RevisionClass
|
||||||
public const string Major = "3";
|
public const string Major = "3";
|
||||||
public const string Minor = "11";
|
public const string Minor = "11";
|
||||||
public const string Build = "0";
|
public const string Build = "0";
|
||||||
public const string Revision = "3672";
|
public const string Revision = "3673";
|
||||||
|
|
||||||
public const string MainVersion = Major + "." + Minor;
|
public const string MainVersion = Major + "." + Minor;
|
||||||
public const string FullVersion = Major + "." + Minor + "." + Build + "." + Revision;
|
public const string FullVersion = Major + "." + Minor + "." + Build + "." + Revision;
|
||||||
|
|
|
||||||
|
|
@ -1,4 +1,4 @@
|
||||||
%COREVERSION%=0
|
|
||||||
%REVISION%=3672
|
|
||||||
%MINOR%=11
|
%MINOR%=11
|
||||||
|
%REVISION%=3673
|
||||||
|
%COREVERSION%=0
|
||||||
%MAJOR%=3
|
%MAJOR%=3
|
||||||
|
|
|
||||||
|
|
@ -1,9 +1,7 @@
|
||||||
// Стандартные функции UpperCase LowerCase
|
// Стандартные функции UpperCase и LowerCase
|
||||||
var c: char;
|
|
||||||
|
|
||||||
begin
|
begin
|
||||||
c := 'д';
|
var c := 'д';
|
||||||
writelnFormat('Символ {0} в верхнем регистре: {1}',c,UpperCase(c));
|
Println($'Символ {c} в верхнем регистре: {UpperCase(c)}');
|
||||||
c := 'F';
|
c := 'F';
|
||||||
writelnFormat('Символ {0} в нижнем регистре: {1}',c,LowerCase(c));
|
Println($'Символ {c} в нижнем регистре: {LowerCase(c)}');
|
||||||
end.
|
end.
|
||||||
|
|
@ -1,8 +1,8 @@
|
||||||
// Таблица символов и их кодов
|
// Таблица символов и их кодов
|
||||||
begin
|
begin
|
||||||
for var i:=32 to 255 do
|
for var i:=32 to 255 do
|
||||||
begin
|
begin
|
||||||
write(i:4,chr(i):2,' ');
|
Write(i:4,chr(i):2,' ');
|
||||||
if i mod 8 = 7 then writeln;
|
if i mod 8 = 7 then Writeln;
|
||||||
end;
|
end;
|
||||||
end.
|
end.
|
||||||
|
|
|
||||||
|
|
@ -1,12 +1,11 @@
|
||||||
// Строки. Операция + и оператор +=. Доступ по индексу
|
// Строки. Операция + и оператор +=. Доступ по индексу
|
||||||
|
|
||||||
var s: string := 'Pascal';
|
|
||||||
|
|
||||||
begin
|
begin
|
||||||
writeln(s);
|
var s := 'Pascal';
|
||||||
|
Println(s);
|
||||||
s := s + '.';
|
s := s + '.';
|
||||||
writeln(s);
|
Println(s);
|
||||||
s += 'NET';
|
s += 'NET';
|
||||||
writeln(s);
|
Println(s);
|
||||||
writeln(s[1],' ',s[2],' ',s[3],' ',s[4],' ',s[5],' ',s[6]);
|
Println(s[1], s[2], s[3], s[4], s[5], s[6]);
|
||||||
end.
|
end.
|
||||||
|
|
@ -1,14 +1,14 @@
|
||||||
// Строки. Процедура SetLength, функция Length и свойство Length
|
// Строки. Процедура SetLength, функция Length и свойство Length
|
||||||
|
|
||||||
var s: string;
|
|
||||||
|
|
||||||
begin
|
begin
|
||||||
writeln('Length(s) = ',Length(s));
|
var s := '';
|
||||||
SetLength(s,3);
|
Println('Length(s) =', s.Length);
|
||||||
|
SetLength(s, 3);
|
||||||
s[1] := 'N';
|
s[1] := 'N';
|
||||||
s[2] := 'E';
|
s[2] := 'E';
|
||||||
s[3] := 'T';
|
s[3] := 'T';
|
||||||
writeln(s,' Length(s) = ',Length(s));
|
Println(s, ' Length(s) =', s.Length);
|
||||||
for var i:= 1 to s.Length do
|
for var i := 1 to s.Length do
|
||||||
write(s[i],' ');
|
Print(s[i]);
|
||||||
|
Println;
|
||||||
end.
|
end.
|
||||||
|
|
@ -1,12 +1,10 @@
|
||||||
// Строки. Строка может иметь произвольную длину
|
// Строки. Строка может иметь произвольную длину
|
||||||
var s: string;
|
|
||||||
|
|
||||||
begin
|
begin
|
||||||
s := 'abcdefghijklmnopqrstuvwxyz';
|
var s := 'abcdefghijklmnopqrstuvwxyz';
|
||||||
s := s + Uppercase(s);
|
s := s + UpperCase(s);
|
||||||
s += s;
|
|
||||||
s += s;
|
|
||||||
s += s;
|
s += s;
|
||||||
writeln('Длина строки = ',s.Length);
|
s += s;
|
||||||
writeln('Cтрока: ',s);
|
s += s;
|
||||||
|
Println('Длина строки =', s.Length);
|
||||||
|
Println('Строка:', s);
|
||||||
end.
|
end.
|
||||||
|
|
@ -1,12 +1,10 @@
|
||||||
// Строки фиксированной длины. Длина не может быть больше 255
|
// Строки фиксированной длины (устарели). Длина не может быть больше 255
|
||||||
var
|
|
||||||
s: string[9];
|
|
||||||
s1: shortstring; // shortstring = string[255]
|
|
||||||
slong: string;
|
|
||||||
|
|
||||||
begin
|
begin
|
||||||
slong := 'PascalABC.NET';
|
var s: string[9];
|
||||||
writeln('Cтрока произвольной длины: ',slong);
|
var s1: shortstring; // shortstring = string[255]
|
||||||
|
var slong := 'PascalABC.NET';
|
||||||
|
Println('Строка произвольной длины:', slong);
|
||||||
s := slong;
|
s := slong;
|
||||||
writeln('Cтрока фиксированной длины обрезается: ',s);
|
Println('Строка фиксированной длины обрезается:', s);
|
||||||
end.
|
end.
|
||||||
|
|
@ -1,18 +1,18 @@
|
||||||
// Строки. Стандартные подпрограммы работы со строками
|
// Строки. Стандартные подпрограммы работы со строками (Copy устарела - используйте срезы)
|
||||||
var
|
var
|
||||||
s: string := ' Pascal__NET ';
|
s: string := ' Pascal__NET ';
|
||||||
s1: string := 'NET';
|
s1: string := 'NET';
|
||||||
|
|
||||||
begin
|
begin
|
||||||
writeln('Исходная строка: ''',s,'''');
|
Writeln('Исходная строка: ''',s,'''');
|
||||||
s := Trim(s);
|
s := Trim(s);
|
||||||
writeln('После вызова функции Trim: ''',s,'''');
|
Writeln('После вызова функции Trim: ''',s,'''');
|
||||||
var p := Pos(s1,s);
|
var p := Pos(s1,s);
|
||||||
writelnFormat('Позиция подстроки ''{0}'' в строке ''{1}'' равна {2}',s1,s,p);
|
WritelnFormat('Позиция подстроки ''{0}'' в строке ''{1}'' равна {2}',s1,s,p);
|
||||||
Delete(s,7,2);
|
Delete(s,7,2);
|
||||||
writeln('После удаления символов __: ',s);
|
Writeln('После удаления символов __: ',s);
|
||||||
Insert('ABC.',s,7);
|
Insert('ABC.',s,7);
|
||||||
writeln('После вставки подстроки ''ABC.'': ',s);
|
Writeln('После вставки подстроки ''ABC.'': ',s);
|
||||||
writeln('Первая часть строки: ',Copy(s,1,9));
|
Writeln('Первая часть строки: ',Copy(s,1,9));
|
||||||
writeln('Последняя часть строки: ',Copy(s,11,3));
|
Writeln('Последняя часть строки: ',Copy(s,11,3));
|
||||||
end.
|
end.
|
||||||
|
|
@ -1,18 +1,18 @@
|
||||||
// Строки. Методы класса string
|
// Строки. Методы класса string
|
||||||
var
|
var
|
||||||
s: string := ' Pascal__NET ';
|
s: string := ' Pascal__NET ';
|
||||||
s1: string := 'NET';
|
s1: string := 'NET';
|
||||||
|
|
||||||
begin
|
begin
|
||||||
writeln('Исходная строка: ''',s,'''');
|
Writeln('Исходная строка: ''',s,'''');
|
||||||
s := s.Trim;
|
s := s.Trim;
|
||||||
writeln('После вызова s.Trim: ''',s,'''');
|
Writeln('После вызова s.Trim: ''',s,'''');
|
||||||
var p := s.IndexOf(s1); // Индексация - с нуля
|
var p := s.IndexOf(s1); // Индексация - с нуля
|
||||||
writelnFormat('Позиция подстроки ''{0}'' в строке ''{1}'' равна {2}',s1,s,p);
|
WritelnFormat('Позиция подстроки ''{0}'' в строке ''{1}'' равна {2}',s1,s,p);
|
||||||
s := s.Remove(6,2);
|
s := s.Remove(6,2);
|
||||||
writeln('После удаления символов __: ',s);
|
Writeln('После удаления символов __: ',s);
|
||||||
s := s.Insert(6,'ABC.');
|
s := s.Insert(6,'ABC.');
|
||||||
writeln('После вставки подстроки ''ABC.'': ',s);
|
Writeln('После вставки подстроки ''ABC.'': ',s);
|
||||||
writeln('Первая часть строки: ',s.Substring(0,9));
|
Writeln('Первая часть строки: ',s.Substring(0,9));
|
||||||
writeln('Последняя часть строки: ',s.Substring(10,3));
|
Writeln('Последняя часть строки: ',s.Substring(10,3));
|
||||||
end.
|
end.
|
||||||
|
|
@ -1,16 +1,13 @@
|
||||||
// Преобразование целое <-> строка
|
// Преобразование целое <-> строка
|
||||||
var
|
|
||||||
s: string;
|
|
||||||
i: integer;
|
|
||||||
|
|
||||||
begin
|
begin
|
||||||
// Преобразование целого в строку
|
// Преобразование целого в строку
|
||||||
i := 234;
|
var i := 234;
|
||||||
s := IntToStr(i);
|
var s := IntToStr(i);
|
||||||
writelnFormat('Целое: {0}. После преобразования к строке: ''{1}''',i,s);
|
WritelnFormat('Целое: {0}. После преобразования к строке: ''{1}''',i,s);
|
||||||
|
|
||||||
// Преобразование строки в целое (может произойти исключение)
|
// Преобразование строки в целое (может произойти исключение)
|
||||||
s := '567';
|
s := '567';
|
||||||
i := StrToInt(s);
|
i := StrToInt(s);
|
||||||
writelnFormat('Строка: ''{0}''. После преобразования к целому: {1}',s,i);
|
WritelnFormat('Строка: ''{0}''. После преобразования к целому: {1}',s,i);
|
||||||
end.
|
end.
|
||||||
34
InstallerSamples/Algorithms/Recursion/Queens2.pas
Normal file
34
InstallerSamples/Algorithms/Recursion/Queens2.pas
Normal file
|
|
@ -0,0 +1,34 @@
|
||||||
|
// Все решения задачи о расстановке ферзей на шахматной доске
|
||||||
|
const N = 8;
|
||||||
|
|
||||||
|
var board := new integer[N]; // board[row] = столбец ферзя в этой строке
|
||||||
|
|
||||||
|
procedure Place(row: integer);
|
||||||
|
begin
|
||||||
|
for var col := 0 to N-1 do
|
||||||
|
begin
|
||||||
|
// проверяем конфликты со всеми ранее поставленными ферзями
|
||||||
|
var conflict := False;
|
||||||
|
for var prevRow := 0 to row-1 do
|
||||||
|
if (board[prevRow] = col) or // тот же столбец
|
||||||
|
(Abs(board[prevRow] - col) = Abs(prevRow - row)) then // та же диагональ
|
||||||
|
begin
|
||||||
|
conflict := True;
|
||||||
|
break;
|
||||||
|
end;
|
||||||
|
|
||||||
|
if not conflict then
|
||||||
|
begin
|
||||||
|
board[row] := col; // ставим ферзя
|
||||||
|
|
||||||
|
if row = N-1 then
|
||||||
|
board.Println // выводим решение
|
||||||
|
else Place(row+1); // продолжаем рекурсию
|
||||||
|
end
|
||||||
|
end;
|
||||||
|
end;
|
||||||
|
|
||||||
|
begin
|
||||||
|
Println('Все решения задачи о 8 ферзях:');
|
||||||
|
Place(0);
|
||||||
|
end.
|
||||||
|
|
@ -1 +1 @@
|
||||||
3.11.0.3672
|
3.11.0.3673
|
||||||
|
|
|
||||||
|
|
@ -1 +1 @@
|
||||||
!define VERSION '3.11.0.3672'
|
!define VERSION '3.11.0.3673'
|
||||||
|
|
|
||||||
|
|
@ -1902,6 +1902,17 @@ function Lerp(a, b, t: real): real;
|
||||||
/// Преобразует x из диапазона [a1,b1] в диапазон [a2,b2] с сохранением относительной позиции
|
/// Преобразует x из диапазона [a1,b1] в диапазон [a2,b2] с сохранением относительной позиции
|
||||||
function Remap(x, a1, b1, a2, b2: real): real;
|
function Remap(x, a1, b1, a2, b2: real): real;
|
||||||
|
|
||||||
|
/// Возвращает наибольший общий делитель двух целых чисел
|
||||||
|
function GCD(a, b: integer): integer;
|
||||||
|
/// Возвращает наибольший общий делитель двух целых чисел
|
||||||
|
function GCD(a, b: int64): int64;
|
||||||
|
/// Возвращает наибольший общий делитель двух BigInteger
|
||||||
|
function GCD(a, b: BigInteger): BigInteger;
|
||||||
|
/// Возвращает наименьшее общее кратное двух целых чисел
|
||||||
|
function LCM(a, b: int64): int64;
|
||||||
|
/// Возвращает наименьшее общее кратное двух BigInteger
|
||||||
|
function LCM(a, b: BigInteger): BigInteger;
|
||||||
|
|
||||||
/// Инициализирует датчик псевдослучайных чисел
|
/// Инициализирует датчик псевдослучайных чисел
|
||||||
procedure Randomize;
|
procedure Randomize;
|
||||||
/// Инициализирует датчик псевдослучайных чисел, используя значение seed. При одном и том же seed генерируются одинаковые псевдослучайные последовательности
|
/// Инициализирует датчик псевдослучайных чисел, используя значение seed. При одном и том же seed генерируются одинаковые псевдослучайные последовательности
|
||||||
|
|
@ -9525,6 +9536,48 @@ function Lerp(a, b, t: real): real := a + (b - a) * t;
|
||||||
|
|
||||||
function Remap(x, a1, b1, a2, b2: real): real := a2 + (x - a1) * (b2 - a2) / (b1 - a1);
|
function Remap(x, a1, b1, a2, b2: real): real := a2 + (x - a1) * (b2 - a2) / (b1 - a1);
|
||||||
|
|
||||||
|
/// Возвращает наибольший общий делитель двух целых чисел
|
||||||
|
function GCD(a, b: integer): integer;
|
||||||
|
begin
|
||||||
|
var (x, y) := (Abs(a), Abs(b));
|
||||||
|
while y <> 0 do
|
||||||
|
(x, y) := (y, x mod y);
|
||||||
|
Result := x;
|
||||||
|
end;
|
||||||
|
|
||||||
|
/// Возвращает наибольший общий делитель двух больших целых чисел
|
||||||
|
function GCD(a, b: int64): int64;
|
||||||
|
begin
|
||||||
|
var (x, y) := (Abs(a), Abs(b));
|
||||||
|
while y <> 0 do
|
||||||
|
(x, y) := (y, x mod y);
|
||||||
|
Result := x;
|
||||||
|
end;
|
||||||
|
|
||||||
|
/// Возвращает наибольший общий делитель двух BigInteger
|
||||||
|
function GCD(a, b: BigInteger): BigInteger;
|
||||||
|
begin
|
||||||
|
var (x, y) := (Abs(a), Abs(b));
|
||||||
|
while y <> 0 do
|
||||||
|
(x, y) := (y, x mod y);
|
||||||
|
Result := x;
|
||||||
|
end;
|
||||||
|
|
||||||
|
/// Возвращает наименьшее общее кратное двух больших целых чисел
|
||||||
|
function LCM(a, b: int64): int64;
|
||||||
|
begin
|
||||||
|
if (a = 0) or (b = 0) then
|
||||||
|
Result := 0
|
||||||
|
else Result := Abs(a div GCD(a, b)) * Abs(b);
|
||||||
|
end;
|
||||||
|
|
||||||
|
/// Возвращает наименьшее общее кратное двух BigInteger
|
||||||
|
function LCM(a, b: BigInteger): BigInteger;
|
||||||
|
begin
|
||||||
|
if (a = 0) or (b = 0) then
|
||||||
|
Result := 0
|
||||||
|
else Result := Abs(a div GCD(a, b)) * Abs(b);
|
||||||
|
end;
|
||||||
|
|
||||||
procedure Randomize;
|
procedure Randomize;
|
||||||
begin
|
begin
|
||||||
|
|
@ -13878,7 +13931,7 @@ begin
|
||||||
Result := True;
|
Result := True;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
/// Возвращает все перестановки множества элементов, заданного массивом
|
/// Возвращает все перестановки элементов массива
|
||||||
function Permutations<T>(Self: array of T): sequence of array of T; extensionmethod;
|
function Permutations<T>(Self: array of T): sequence of array of T; extensionmethod;
|
||||||
begin
|
begin
|
||||||
var a := Self;
|
var a := Self;
|
||||||
|
|
@ -13892,7 +13945,7 @@ begin
|
||||||
until not NextPermutation(ind);
|
until not NextPermutation(ind);
|
||||||
end;
|
end;
|
||||||
|
|
||||||
/// Возвращает все перестановки множества элементов, заданного последовательностью
|
/// Возвращает все перестановки элементов последовательности
|
||||||
function Permutations<T>(Self: sequence of T): sequence of array of T; extensionmethod;
|
function Permutations<T>(Self: sequence of T): sequence of array of T; extensionmethod;
|
||||||
begin
|
begin
|
||||||
Result := Self.ToArray.Permutations
|
Result := Self.ToArray.Permutations
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue