GCD LCM в PABCSystem

This commit is contained in:
Mikhalkovich Stanislav 2025-10-21 11:40:02 +03:00
parent 5ee38daf37
commit c63d812a5c
15 changed files with 150 additions and 73 deletions

View file

@ -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;

View file

@ -1,4 +1,4 @@
%COREVERSION%=0
%REVISION%=3672
%MINOR%=11 %MINOR%=11
%REVISION%=3673
%COREVERSION%=0
%MAJOR%=3 %MAJOR%=3

View file

@ -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.

View file

@ -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.

View file

@ -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.

View file

@ -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.

View file

@ -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.

View file

@ -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.

View file

@ -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.

View file

@ -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.

View file

@ -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.

View 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.

View file

@ -1 +1 @@
3.11.0.3672 3.11.0.3673

View file

@ -1 +1 @@
!define VERSION '3.11.0.3672' !define VERSION '3.11.0.3673'

View file

@ -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