Здесь представлены новые функции, созданные на языке Паскаль, которые могут пригодиться при написании своих программ.
Числовое значение математических выражений
Здесь для работы необходим модуль (файл) http://newerow1989.narod.ru/FunctionString.pas. В этом модуле рассмотрены следующие функции:
function FunctionToReal(s: string): real;
function FunctionToString(s: string): string;
function MsgError: string;
где
s - исходное строковое выражение, записанное с помощью математических операций, формул и т.д.
Функция FunctionToReal вычисляет готовое численное выражение, записанное в виде десятичной дроби (вещественного числа).
Функция FunctionToString вычисляет готовое численное выражение, записанное в виде строки.
Функция MsgError выдает ошибку в выражении.
Например, FunctionToReal('(6+4)*(.85-7.1)-2/5.') выведет '-62,9'; FunctionToString('-LogN(11,-Round(-121.47))') выведет '-2'; FunctionToString('Sqrt(-3)') выведет 'Корень отрицательного числа -3 не существует'.
Примечание 1. Для ввода десятичных чисел используется точка, так как выражения строятся по правилам языка Паскаль.
Примечание 2. Рекомендуется использовать функцию FunctionToString, так как она обладает еще дополнительной опцией: вывод ошибки.
Запись числа прописью
function ChisloPropis(n: int64): string;
const Chislo1000: array[1..6, 0..2] of string = (('тысяча', 'тысячи', 'тысяч'),
('миллион', 'миллиона', 'миллионов'),
('миллиард', 'миллиарда', 'миллиардов'),
('триллион', 'триллиона', 'триллионов'),
('квадриллион', 'квадриллиона', 'квадриллионов'),
('квинтиллион', 'квинтиллиона', 'квинтиллионов'));
Chislo100: array[1..9] of string = ('сто', 'двести', 'триста',
'четыреста', 'пятьсот', 'шестьсот', 'семьсот', 'восемьсот',
'девятьсот');
Chislo10: array[2..9] of string = ('двадцать', 'тридцать', 'сорок',
'пятьдесят', 'шестьдесят', 'семьдесят', 'восемьдесят', 'девяносто');
Chislo1: array[0..19] of string = ('ноль', 'один', 'два', 'три', 'четыре',
'пять', 'шесть', 'семь', 'восемь', 'девять', 'десять', 'одиннадцать',
'двенадцать', 'тринадцать', 'четырнадцать', 'пятнадцать',
'шестнадцать', 'семнадцать', 'восемнадцать', 'девятнадцать');
Chislo1_2: array[1..2] of string = ('одна', 'две');
var n1000: byte;
s, znak: string;
function Length3(a, n1000: integer): string;
var b: byte;
s: string;
begin
a:=a mod 1000; //для защиты
b:=a div 100;
a:=a mod 100;
If b>0 then
Result:=Chislo100[b] else
Result:='';
If (a>0) and (Result<>'') then
Result:=Result+' ';
If a>=20 then
begin
b:=a div 10;
a:=a mod 10;
If b>0 then
Result:=Result+Chislo10[b];
If a>0 then
begin
If Result<>'' then
Result:=Result+' ';
s:=Chislo1[a]; //два миллиона
If (n1000=1) and (a>=1) and (a<=2) then //один или одна (два или две)
s:=Chislo1_2[a]; //две тысячи
Result:=Result+s;
end;
end else
If a>0 then
begin
s:=Chislo1[a]; //два миллиона
If (n1000=1) and (a>=1) and (a<=2) then //один или одна (два или две)
s:=Chislo1_2[a]; //две тысячи
Result:=Result+s;
end;
If (n1000>0) and (Result<>'') then
begin
Result:=Result+' ';
If n1000>High(Chislo1000) then
begin
Result:=Format('%s(x 10^%d)', [Result, 3*n1000]);
Exit;
end;
s:=Chislo1000[n1000, 2];
If a=1 then
s:=Chislo1000[n1000, 0];
If (a>=2) and (a<=4) then
s:=Chislo1000[n1000, 1];
Result:=Result+s;
end;
end;
begin
Result:='';
If n<0 then
znak:='минус ' else
znak:='';
n:=Abs(n);
n1000:=0;
While n>0 do
begin
s:=Length3(n mod 1000, n1000);
Inc(n1000);
If s<>'' then
begin
If Result<>'' then
Result:=' '+Result;
Result:=s+Result;
end;
n:=n div 1000;
end;
Result:=znak+Result;
If Result='' then
Result:=Chislo1[0];
end;
где
n - исходное число.
Например, ChisloPropis(0) выведет 'ноль'; ChisloPropis(-2000) выведет 'минус две тысячи'; ChisloPropis(2000000) выведет 'два миллиона'; ChisloPropis(974012500000641000) выведет 'девятьсот семьдесят четыре квадриллиона двенадцать триллионов пятьсот миллиардов шестьсот сорок одна тысяча'; ChisloPropis(High(Int64)) выведет 'девять квинтиллионов двести двадцать три квадриллиона триста семьдесят два триллиона тридцать шесть миллиардов восемьсот пятьдесят четыре миллиона семьсот семьдесят пять тысяч восемьсот семь'.
Сложение обыкновенных дробей
1. Общий знаменатель дроби
function DrobObschijZnamenatel(a, b: integer): integer;
var z: integer;
begin
If a>b then
begin
z:=a;
a:=b;
b:=z;
end;
Result:=b;
While Result mod a<>0 do
Result:=Result+b;
end;
где
a - знаменатель первой дроби;
b - знаменатель второй дроби.
Например, DrobObschijZnamenatel(6, 8) выведет '24'.
2. Сложение обыкновенных дробей
function DrobSlozhenie(a1, b1, a2, b2: integer; var a, b: integer): real;
var i, m: integer;
begin
b:=DrobObschijZnamenatel(b1, b2);
a1:=b div b1 * a1;
a2:=b div b2 * a2;
a:=a1+a2;
If a=1E3 then
begin
r:=bait/1024;
Case edinitsa_izmereniya of
1: s:='Кб';
2: s:='Кбит';
3: s:='КБ';
4: s:='Кбайт';
end;
end;
If bait>=1E6 then
begin
r:=bait/1024/1024;
Case edinitsa_izmereniya of
1: s:='Мб';
2: s:='Мбит';
3: s:='МБ';
4: s:='Мбайт';
end;
end;
If bait>=1E9 then
begin
r:=bait/1024/1024/1024;
Case edinitsa_izmereniya of
1: s:='Гб';
2: s:='Гбит';
3: s:='ГБ';
4: s:='Гбайт';
end;
end;
do_zpt:=Length(IntToStr(Trunc(r)));
If do_zpt>=kol_wo_znak then
kol_wo_znak:=do_zpt+1;
Result:=Format('%*.*f', [do_zpt, kol_wo_znak-do_zpt-1, r]);
If s<>'' then
Result:=Result+' '+s;
end;
где
bait - исходное число;
kol_wo_znak - минимальное количество символов, выводимых в строке (запятая включается в количество знаков десятичного числа!);
edinitsa_izmereniya - формат единицы измерения, значения которых даны ниже:
0 - без единиц измерения,
1 - биты сокращенно (б, Кб, Мб, Гб),
2 - биты полностью (бит, Кбит, Мбит, Гбит),
3 - байты сокращенно (Б, КБ, МБ, ГБ),
4 - байты полностью (байт, Кбайт, Мбайт, Гбайт).
Например, BaitAutoToKMGb(58423695412, 5, 4) выведет '54,41 Гбайт'.
Запись числа по разрядам
function IntToStrRazryad(n: string): string;
var i: integer;
begin
i:=Length(n)-2;
While i>1 do
begin
Insert(' ', n, i);
i:=i-3;
end;
Result:=n;
end;
где
n - исходное число.
Например, IntToStrRazryad('21489248288223') выведет '21 489 248 288 223'.
Формат процента
function ProcentFormat(r: real; kol_wo_znak: integer): string;
var do_zpt: integer;
begin
do_zpt:=Length(IntToStr(Trunc(r)));
If do_zpt>=kol_wo_znak then
kol_wo_znak:=do_zpt+1;
Result:=Format('%*.*f%%', [do_zpt, kol_wo_znak-do_zpt-1, r]);
end;
где
r - исходное число;
kol_wo_znak - минимальное количество символов, выводимых в строке (запятая включается в количество знаков десятичного числа!).
Например, ProcentFormat(38.5255, 5) выведет '38,53%'.
Склонение существительных по числу
function SklonenieSuschestwitelnyh(n: int64; kol_wo_1, kol_wo_234, kol_wo_5: string): string;
begin
Result:=IntToStr(n)+' '+kol_wo_5;
If n mod 10=1 then
Result:=IntToStr(n)+' '+kol_wo_1;
If (n mod 10>=2) and (n mod 10<=4) then
Result:=IntToStr(n)+' '+kol_wo_234;
If (n mod 100>=11) and (n mod 100<=14) then
Result:=IntToStr(n)+' '+kol_wo_5;
end;
где
n - число (количество чего-либо);
kol_wo_1 - существительное в единственном числе;
kol_wo_234, kol_wo_5 - существительные во множественном числе.
Например, SklonenieSuschestwitelnyh(3, 'копейка', 'копейки', 'копеек') выведет '3 копейки'.
Максимальное и минимальное число в массиве
1. Максимальное число в массиве
function Max(p: array of integer): integer;
var i: integer;
begin
Result:=p[Low(p)];
For i:=Low(p)+1 to High(p) do
If Result
p[i] then
Result:=p[i];
end;
где
p - массив из целых чисел.
Например, Min([6, 3, 8, 7, 4, 5]) выведет '3'.
Примечание. Допускается использовать не только целочисленные числа, но и вещественные (десятичные, дробные). В этом случае integer заменяют на real:
function Max(p: array of real): real;
function Min(p: array of real): real;
Текст программного кода остается неизменным.
Среднее значение массива
function SredneeZnachenie(p: array of integer): real;
var i: integer;
begin
Result:=0;
For i:=Low(p) to High(p) do
Result:=Result+p[i];
Result:=Result/(1+High(p)-Low(p));
end;
где
p - массив из целых чисел.
Например, SredneeZnachenie([5, 2, 6, 7, 1]) выведет '4,2'.
Принадлежность числа массиву и диапазону
1. Принадлежность числа массиву
function Prinadlezhit(n: integer; p: array of integer): boolean;
var i: integer;
begin
Result:=false;
For i:=Low(p) to High(p) do
If n=p[i] then
Result:=true;
end;
где
n - искомое число;
p - массив из целых чисел.
Например, Prinadlezhit(3, [1, 5, 8, 6]) выведет отрицательное значение.
Примечание. Допускается использовать не только целочисленные числа, но и вещественные (десятичные, дробные), а также строковые значения. В этом случае integer заменяют на real, string:
function Prinadlezhit(n: real; p: array of real): boolean;
function Prinadlezhit(n: string; p: array of string): boolean;
Текст программного кода остается неизменным.
2. Принадлежность числа диапазону
function PrinadlezhitDiapazon(n: integer; diapazons: string): boolean;
var i, n1, n2: integer;
c: char;
s: string;
begin
Result:=false;
If diapazons='' then
Exit;
For i:=Length(diapazons) downto 1 do
If diapazons[i]=' ' then
Delete(diapazons, i, 1);
s:='';
c:=',';
n1:=1;
For i:=1 to Length(diapazons)+1 do
begin
If (i=Length(diapazons)+1) or (diapazons[i]=',') then
begin
n2:=StrToInt(s);
If c=',' then
n1:=n2;
If (n1<=n) and (n<=n2) then
begin
Result:=true;
Exit;
end;
s:='';
c:=',';
end else
If diapazons[i]='-' then
begin
n1:=StrToInt(s);
c:='-';
s:='';
end else
s:=s+diapazons[i];
end;
end;
где
n - искомое число;
diapazons - диапазон чисел.
Например, PrinadlezhitDiapazon(6, '1,3,5-7,10') выведет положительное значение; PrinadlezhitDiapazonB(6, '3-5,7') выведет отрицательное значение.
Примечание. В параметре diapazons допускается писать пробелы (например, '8, 12-15, 20').
Перевод чисел из одних систем счисления в другие
1. Определение кода числа системы счисления
function Kod_chisla_system(cifra: integer): char;
begin
Result:='0';
If (cifra>=0) and (cifra<=9) then
Result:=Char(48+cifra);
If (cifra>=10) and (cifra<=35) then
Result:=Char(55+cifra);
end;
где
cifra - цифра от 0 до 35.
Например, Kod_chisla_system(2) выведет '2'; Kod_chisla_system(14) выведет 'E' (в шестнадцатеричной системе счисления).
Примечание 1. Вспомогательная функция Kod_chisla_system предназначена для нижеуказанных функций.
Примечание 2. В настоящее время существуют 16-ричные системы счисления, однако автор решил пофантазировать и расширил весь латинский алфавит. Поэтому не стоит удивляться, если при вызове функции Kod_chisla_system(35) выведет 'Z'. Но может в дальнейшем "изобретут" 32-ричные системы счисления, 36-ричные и т.д.
2. Перевод целого числа из одной системы счисления в любую другую (общий случай)
function Perewod_iz_n_w_m(chislo: string; iz_n, w_m: integer): string;
var i, k, step: integer;
chislo_10: int64;
s: char;
z: -1..1;
begin
Result:='';
{ проверка основания системы счисления }
If (iz_n<2) or (iz_n>36) or (w_m<2) or (w_m>36) then
Exit;
{ проверка на отрицательные числа }
If (chislo<>'') and (chislo[1]='-') then
begin
z:=-1;
Delete(chislo, 1, 1);
end else
z:=1;
{ перевод в десятичное число }
step:=1;
chislo_10:=0;
For i:=Length(chislo) downto 1 do
begin
s:=chislo[i];
k:=0;
If (s>='0') and (s<='9') then
k:=StrToInt(s);
If (s>='a') and (s<='z') then
s:=UpCase(s);
If (s>='A') and (s<='Z') then
k:=Ord(s)-55;
If k>=iz_n then
Exit;
chislo_10:=chislo_10+k*step;
step:=step*iz_n;
end;
{ далее перевод в нужную систему счисления }
Repeat
i:=chislo_10 mod w_m;
Result:=kod_chisla_system(i)+Result;
chislo_10:=chislo_10 div w_m;
Until chislo_10=0;
{ корректировка ответа и знака }
If Result='' then
Result:='0';
If (z<0) and (Result<>'0') then
Result:='-'+Result;
end;
где
chislo - исходное целое число, записанное в строковом виде;
iz_n - система счисления числа chislo;
w_m - система счисления получаемого числа.
Например, Perewod_iz_n_w_m('11110', 2, 10) выведет '30'; Perewod_iz_n_w_m('1F', 16, 10) выведет '31'; Perewod_iz_n_w_m('71', 8, 16) выведет '39'; Perewod_iz_n_w_m('-z', 36, 2) выведет '-100011'.
Примечание. Функция Perewod_iz_n_w_m и другие нижеперечисленные функции позволяют переводить отрицательные числа. Если необходимо перевести только положительные числа, достаточно убрать в коде следующие строки:
z: -1..1;
...
{ проверка на отрицательные числа }
If (chislo<>'') and (chislo[1]='-') then
begin
z:=-1;
Delete(chislo, 1, 1);
end else
z:=1;
...
If (z<0) and (Result<>'0') then
Result:='-'+Result;
3. Перевод целого десятеричного числа в любую систему счисления
function Perewod_iz_10_w_n(chislo, w_n: int64): string;
var i: integer;
z: -1..1;
begin
Result:='';
If (w_n>36) or (w_n<2) then
Exit;
If chislo<0 then
begin
z:=-1;
chislo:=-chislo;
end else
z:=1;
Repeat
i:=chislo mod w_n;
Result:=Kod_chisla_system(i)+Result;
chislo:=chislo div w_n;
Until chislo=0;
If Result='' then
Result:='0';
If (z<0) and (Result<>'0') then
Result:='-'+Result;
end;
где
chislo - исходное целое десятеричное число;
w_n - система счисления.
Например, Perewod_iz_10_w_n(225, 2) выведет '11100001'; Perewod_iz_10_w_n(-541, 16) выведет '-21D'; самое интересное, что Perewod_iz_10_w_n(1583, 36) выведет '17Z'.
4. Перевод целого десятеричного числа в двоичную систему счисления (частный случай)
function Perewod_iz_10_w_2(chislo: int64): string;
var i: integer;
z: -1..1;
begin
Result:='';
If chislo<0 then
begin
z:=-1;
chislo:=-chislo;
end else
z:=1;
Repeat
i:=chislo mod 2;
Result:=IntToStr(i)+Result;
chislo:=chislo div 2;
Until chislo=0;
If Result='' then
Result:='0';
If (z<0) and (Result<>'0') then
Result:='-'+Result;
end;
где
chislo - исходное целое десятеричное число.
Например, Perewod_iz_10_w_2(12) выведет '1100'; Perewod_iz_10_w_2(-8) выведет '-1000'.
5. Перевод вещественного (десятичного) десятеричного числа в любую систему счисления
function Perewod_iz_10_w_nR(chislo: real; w_n, kol_wo_posle_zapyat: integer): string;
var i: integer;
z: -1..1;
begin
If chislo<0 then
begin
z:=-1;
chislo:=-chislo;
end else
z:=1;
Result:=Perewod_iz_10_w_n(Trunc(chislo), w_n)+',';
chislo:=Frac(chislo);
For i:=1 to kol_wo_posle_zapyat do
begin
chislo:=chislo*w_n;
Result:=Result+Kod_chisla_system(Trunc(chislo));
chislo:=Frac(chislo);
end;
If z<0 then
Result:='-'+Result;
end;
где
chislo - исходное вещественное (десятичное) десятеричное число;
w_n - система счисления;
kol_wo_posle_zapyat - количество цифр после запятой.
Например, Perewod_iz_10_w_nR(25.93, 8, 10) выведет '31,7341217270'; Perewod_iz_10_w_nR(-0.01, 16, 7) выведет '-0,028F5C2'.
6. Перевод целого числа любой системы счисления в десятеричное число
function Perewod_iz_n_w_10(chislo: string; iz_n: integer): int64;
var i, k: integer;
step: int64;
s: char;
z: -1..1;
begin
Result:=0;
If (iz_n<2) or (iz_n>36) then
Exit;
If (chislo<>'') and (chislo[1]='-') then
begin
z:=-1;
Delete(chislo, 1, 1);
end else
z:=1;
step:=1;
For i:=Length(chislo) downto 1 do
begin
s:=chislo[i];
k:=0;
If (s>='0') and (s<='9') then
k:=StrToInt(s);
If (s>='a') and (s<='z') then
s:=UpCase(s);
If (s>='A') and (s<='Z') then
k:=Ord(s)-55;
If k>=iz_n then
begin
Result:=0;
Exit;
end;
Result:=Result+k*step;
step:=step*iz_n;
end;
If z<0 then
Result:=-Result;
end;
где
chislo - исходное число любой системы счисления;
iz_n - система счисления.
Например, Perewod_iz_n_w_10('-6a7D', 16) выведет '-27261'; Perewod_iz_n_w_10('17z', 36) выведет '1583'.
7. Перевод целого двоичного числа в десятеричную систему счисления (частный случай)
function Perewod_iz_2_w_10(chislo: string): int64;
var i, k: integer;
step: int64;
s: char;
z: -1..1;
begin
Result:=0;
If (chislo<>'') and (chislo[1]='-') then
begin
z:=-1;
Delete(chislo, 1, 1);
end else
z:=1;
step:=1;
For i:=Length(chislo) downto 1 do
begin
s:=chislo[i];
k:=StrToInt(s);
Result:=Result+k*step;
step:=step*2;
end;
If z<0 then
Result:=-Result;
end;
где
chislo - исходное целое двоичное число.
Например, Perewod_iz_2_w_10('-1110') выведет '-14'.
8. Перевод целого двоичного числа в шестнадцатеричную систему счисления (частный случай)
function Perewod_iz_2_w_16(chislo: string): string;
const Base: array [0..15, 0..1] of string = (('0000', '0'), ('0001', '1'),
('0010', '2'), ('0011', '3'), ('0100', '4'), ('0101', '5'),
('0110', '6'), ('0111', '7'), ('1000', '8'), ('1001', '9'),
('1010', 'A'), ('1011', 'B'), ('1100', 'C'), ('1101', 'D'),
('1110', 'E'), ('1111', 'F'));
var i, j: integer;
z: -1..1;
begin
Result:='';
If (chislo<>'') and (chislo[1]='-') then
begin
z:=-1;
Delete(chislo, 1, 1);
end else
z:=1;
While Length(chislo) mod 4<>0 do
chislo:='0'+chislo;
For i:=1 to Length(chislo) div 4 do
For j:=Low(Base) to High(Base) do
If Base[j, 0]=Copy(chislo, (i-1)*4+1, 4) then
begin
Result:=Result+Base[j, 1];
Break;
end;
If Result='' then
Result:='0';
If (z<0) and (Result<>'0') then
Result:='-'+Result;
end;
где
chislo - исходное целое двоичное число.
Например, Perewod_iz_2_w_16('-1101') выведет '-D'.
9. Перевод целого шестнадцатеричного числа в двоичную систему счисления (частный случай)
function Perewod_iz_16_w_2(chislo: string): string;
const Base: array [0..15, 0..1] of string = (('0000', '0'), ('0001', '1'),
('0010', '2'), ('0011', '3'), ('0100', '4'), ('0101', '5'),
('0110', '6'), ('0111', '7'), ('1000', '8'), ('1001', '9'),
('1010', 'A'), ('1011', 'B'), ('1100', 'C'), ('1101', 'D'),
('1110', 'E'), ('1111', 'F'));
var i, j: integer;
z: -1..1;
c: char;
begin
Result:='';
If (chislo<>'') and (chislo[1]='-') then
begin
z:=-1;
Delete(chislo, 1, 1);
end else
z:=1;
For i:=1 to Length(chislo) do
begin
c:=chislo[i];
If (c>='a') and (c<='z') then
c:=UpCase(c);
For j:=Low(Base) to High(Base) do
If Base[j, 1]=c then
begin
Result:=Result+Base[j, 0];
Break;
end;
end;
While (Result<>'') and (Result[1]='0') do
Delete(Result, 1, 1);
If Result='' then
Result:='0';
If (z<0) and (Result<>'0') then
Result:='-'+Result;
end;
где
chislo - исходное целое шестнадцатеричное число.
Например, Perewod_iz_16_w_2('-6A') выведет '-1101010'.
Безопасный перевод строки в число
1. Перевод строки в число, удаляя посторонние символы, находящиеся в этой строке
function Perewod_w_chislo(s, simwol: string): string;
var i, zap: integer;
begin
{ удаляем посторонние символы }
For i:=Length(s) downto 1 do
If Pos(s[i], simwol)=0 then
Delete(s, i, 1);
{ удаляем - }
For i:=Length(s) downto 2 do
If s[i]='-' then
Delete(s, i, 1);
{ удаляем , }
zap:=Pos(',', s);
If zap>0 then
begin
For i:=Length(s) downto zap+1 do
If s[i]=',' then
Delete(s, i, 1);
If s[1]='-' then
If (Length(s)>=2) and (s[2]=',') then
Delete(s, 2, 1) else
else
If s[1]=',' then
Delete(s, 1, 1);
If (Length(s)>=1) and (s[Length(s)]=',') then
Delete(s, Length(s), 1);
end;
If (s='') or (s='-') then
Result:='0' else
Result:=s;
end;
где
s - исходная строка, содержащий цифры;
simwol - допустимые символы.
Например, Perewod_w_chislo('-8-5d2a12,s4,5', '0123456789-,') выведет '-85212,45'. В данном случае удалились посторонние символы (буквы), и получилось '-8-5212,4,5'. Далее были удалены лишние знаки "-" и ",".
2. Безопасный перевод строки в целое число
function StrToIntA(text: string): int64;
begin
text:=Perewod_w_chislo(text, '0123456789-');
Result:=StrToInt64(text);
end;
где
text - целое число, записанное в строковом виде.
Например, StrToIntA('--426w785h,s1') выведет '-4267851'.
3. Безопасный перевод строки в вещественное (десятичное) число
function StrToFloatA(text: string): real;
var e: integer;
s1, s2: string;
begin
e:=Pos('e', text);
If e=0 then
e:=Pos('E', text);
If e>1 then
begin
s1:=Copy(text, 1, e-1);
s2:=Copy(text, e+1, Length(text));
s1:=Perewod_w_chislo(s1, '0123456789-,');
s2:=Perewod_w_chislo(s2, '0123456789-');
text:=s1+'E'+s2;
end else
text:=Perewod_w_chislo(text, '0123456789-,');
Result:=StrToFloat(text);
end;
где
text - вещественное (десятичное) число, записанное в строковом виде.
Например, StrToFloatA('32fd12,,d52,ds36') выведет '3212,5236'; StrToFloatA('-8-5d2a12,s4,5E2,2') выведет '-8,521245E26'.
Примечание. В данном примере число '-85212,45E22' преобразовалось в нормальную экспоненциальную форму '-8,521245E26' (путем переноса запятой и увеличением степени).
Сложение и умножение "длинных" чисел
1. Сложение "длинных" чисел
function SlozhenieChisel(chislo1, chislo2: string): string;
var i, dlina: integer;
p: array of byte;
begin
dlina:=Length(chislo1);
If Length(chislo2)>dlina then
dlina:=Length(chislo2)+1 else
dlina:=dlina+1;
While Length(chislo1)=10 then
begin
p[i-2]:=p[i-1] div 10;
p[i-1]:=p[i-1] mod 10;
end;
end;
For i:=0 to dlina-1 do
Result:=Result+IntToStr(p[i]);
While (Result<>'') and (Result[1]='0') do
Delete(Result, 1, 1);
end;
где
chislo1, chislo2 - исходные числа, записанные в строковом виде.
Например, SlozhenieChisel('6523652323523541369829625622653684654235426354687232536263', '9413983543685263162354967467534953745376453764257642734523') выведет '15937635867208804532184593090188638399611880118944875270786'.
2. Умножение "длинных" чисел
function UmnozhenieChisel(chislo1, chislo2: string): string;
var i1, i2: integer;
s: string;
p: array of byte;
begin
SetLength(p, Length(chislo1)+Length(chislo2));
Result:='';
For i1:=Length(chislo1) downto 1 do
begin
s:='';
For i2:=0 to Length(chislo1)+Length(chislo2)-1 do
p[i2]:=0;
For i2:=Length(chislo2) downto 1 do
begin
p[i1+i2-1]:=p[i1+i2-1]+StrToInt(chislo1[i1])*StrToInt(chislo2[i2]);
If p[i1+i2-1]>=10 then
begin
p[i1+i2-2]:=p[i1+i2-1] div 10;
p[i1+i2-1]:=p[i1+i2-1] mod 10;
end;
end;
For i2:=0 to Length(chislo1)+Length(chislo2)-1 do
s:=s+IntToStr(p[i2]);
While (s<>'') and (s[1]='0') do
Delete(s, 1, 1);
Result:=SlozhenieChisel(Result, s);
end;
end;
где
chislo1, chislo2 - исходные числа, записанные в строковом виде.
Например, UmnozhenieChisel('6523652323523541369829625622653684654235426354687232536263', '9413983543685263162354967467534953745376453764257642734523') выведет '61413555618374748849977845610399844217660687681909351978534411248705150246948702748286484885796873132969976079507549'.
Примечание. Функция UmnozhenieChisel зависит от функции SlozhenieChisel.
Факториал числа
function Faktorial(chislo: integer): string;
const max_dlina=3000;
var i: integer;
p: array[0..3000] of byte;
procedure Umnozhit(chislo: integer);
var i, k, um: integer;
p1: array[0..max_dlina-1] of integer;
begin
k:=0;
For i:=0 to max_dlina-1 do
p1[i]:=0;
Repeat
k:=k+1;
um:=0;
For i:=max_dlina-1 downto 1 do
If (i>k) then
begin
p1[i-k+1]:=p1[i-k+1]+um+p[i]*(chislo mod 10);
um:=p1[i-k+1] div 10;
p1[i-k+1]:=p1[i-k+1] mod 10;
end;
chislo:=chislo div 10;
Until chislo=0;
For i:=0 to max_dlina-1 do
p[i]:=p1[i];
end;
begin
For i:=0 to max_dlina-2 do
p[i]:=0;
p[max_dlina-1]:=1;
For i:=1 to chislo do
Umnozhit(i);
Result:='';
For i:=0 to max_dlina-1 do
Result:=Result+IntToStr(p[i]);
While (Result<>'') and (Result[1]='0') do
Delete(Result, 1, 1);
end;
где
chislo - исходное число.
Например, Faktorial(10) выведет '3628800'.
Операции с регистрами
1. Проверка прописной буквы в строке
function Registr(s: string): boolean;
var i: integer;
begin
Result:=false;
For i:=1 to Length(s) do
If (s[i]>='A') and (s[i]<='Z') or (s[i]>='А') and (s[i]<='Я') or (s[i]='Ё') then
begin
Result:=true;
Exit;
end;
end;
где
s - исходная строка.
Например, Registr('Программа') выведет положительное значение; Registr('паскаль') выведет отрицательное значение.
2. Перевод всех букв строки в нижний регистр
function RegistrNizhniy(s: string): string;
var i: integer;
begin
For i:=1 to Length(s) do
begin
If (s[i]>='A') and (s[i]<='Z') or (s[i]>='А') and (s[i]<='Я') then
Inc(s[i], 32);
If s[i]='Ё' then
Inc(s[i], 16);
end;
Result:=s;
end;
где
s - исходная строка.
Например, RegistrNizhniy('Windows МоЖет всЁ!') выведет 'windows может всё!'.
3. Перевод всех букв строки в верхний регистр
function RegistrWerhniy(s: string): string;
var i: integer;
begin
For i:=1 to Length(s) do
begin
If (s[i]>='a') and (s[i]<='z') or (s[i]>='а') and (s[i]<='я') then
Dec(s[i], 32);
If s[i]='ё' then
Dec(s[i], 16);
end;
Result:=s;
end;
где
s - исходная строка.
Например, RegistrWerhniy('Windows МоЖет всё!') выведет 'WINDOWS МОЖЕТ ВСЁ!'.
Замена символа или фразы в строке на новое значение
function SimwolZamenit(s, simwol_star, simwol_now: string; Registr_star, Registr_now: boolean): string;
var i, LSS: integer;
sC, SS, SN: string;
begin
LSS:=Length(simwol_star);
i:=1;
While (i<=Length(s)) and (s<>'') do
begin
sC:=Copy(s, i, LSS);
If not Registr_star and not Registr_now then
begin
If Registr(sC) then
begin
sC:=RegistrWerhniy(sC);
SS:=RegistrWerhniy(simwol_star);
SN:=RegistrWerhniy(simwol_now);
end else
begin
sC:=RegistrNizhniy(sC);
SS:=RegistrNizhniy(simwol_star);
SN:=RegistrNizhniy(simwol_now);
end;
end;
If Registr_star and not Registr_now then
begin
SS:=simwol_star;
If Registr(simwol_now) then
SN:=RegistrWerhniy(simwol_now) else
SN:=RegistrNizhniy(simwol_now);
If Registr(sC) and Registr(simwol_star) then
SN:=RegistrWerhniy(simwol_now);
If not Registr(sC) and not Registr(simwol_star) then
SN:=RegistrNizhniy(simwol_now);
end;
If not Registr_star and Registr_now then
begin
SN:=simwol_now;
If Registr(sC) then
SS:=RegistrWerhniy(simwol_star) else
SS:=RegistrNizhniy(simwol_star);
end;
If Registr_star and Registr_now then
begin
SS:=simwol_star;
SN:=simwol_now;
end;
If (sC=SS) and (sC<>'') then
begin
Delete(s, i, LSS);
Insert(SN, s, i);
i:=i+Length(SN)-1;
end;
i:=i+1;
end;
Result:=s;
end;
где
s - исходная строка;
simwol_star - старый символ (фраза);
simwol_now - новый символ (фраза);
Registr_star - соблюдение регистра старого символа;
Registr_now - соблюдение регистра нового символа.
Например, SimwolZamenit('Программист', 'М', 'Н', false, true) выведет 'ПрограННист'; SimwolZamenit('барабАн', 'ба', 'ле', true, false) выведет 'лерабАн'.
Примечание. Для полноценной работы данной функции необходимо скопировать функции из раздела "Операции с регистрами":
function Registr(s: string): boolean;
function RegistrNizhniy(s: string): string;
function RegistrWerhniy(s: string): string;
Перевод текста из одной кодировки в другую
Для начала объявим константу, состоящую из массива, которая необходима для нашей работы:
const UTF8: array[0..65, 0..1] of string=
((Char($EF)+Char($BB)+Char($BF), ''),
(Char($D0)+Char($82), Char($80)),
(Char($D0)+Char($83), Char($81)),
(Char($E2)+Char($80)+Char($9A), Char($82)),
(Char($D1)+Char($93), Char($83)),
(Char($E2)+Char($80)+Char($9E), Char($84)),
(Char($E2)+Char($80)+Char($A6), Char($85)),
(Char($E2)+Char($80)+Char($A0), Char($86)),
(Char($E2)+Char($80)+Char($A1), Char($87)),
(Char($E2)+Char($82)+Char($AC), Char($88)),
(Char($E2)+Char($80)+Char($B0), Char($89)),
(Char($D0)+Char($89), Char($8A)),
(Char($E2)+Char($80)+Char($B9), Char($8B)),
(Char($D0)+Char($8A), Char($8C)),
(Char($D0)+Char($8C), Char($8D)),
(Char($D0)+Char($8B), Char($8E)),
(Char($D0)+Char($8F), Char($8F)),
(Char($D1)+Char($92), Char($90)),
(Char($E2)+Char($80)+Char($98), Char($91)),
(Char($E2)+Char($80)+Char($99), Char($92)),
(Char($E2)+Char($80)+Char($9C), Char($93)),
(Char($E2)+Char($80)+Char($9D), Char($94)),
(Char($E2)+Char($80)+Char($A2), Char($95)),
(Char($E2)+Char($80)+Char($93), Char($96)),
(Char($E2)+Char($88)+Char($92), Char($96)),
(Char($E2)+Char($80)+Char($94), Char($97)),
(Char($C2)+Char($98), Char($98)),
(Char($E2)+Char($84)+Char($A2), Char($99)),
(Char($D1)+Char($99), Char($9A)),
(Char($E2)+Char($80)+Char($BA), Char($9B)),
(Char($D1)+Char($9A), Char($9C)),
(Char($D1)+Char($9C), Char($9D)),
(Char($D1)+Char($9B), Char($9E)),
(Char($D1)+Char($9F), Char($9F)),
(Char($C2)+Char($A0), Char($A0)),
(Char($D0)+Char($8E), Char($A1)),
(Char($D1)+Char($9E), Char($A2)),
(Char($D0)+Char($88), Char($A3)),
(Char($C2)+Char($A4), Char($A4)),
(Char($D2)+Char($90), Char($A5)),
(Char($C2)+Char($A6), Char($A6)),
(Char($C2)+Char($A7), Char($A7)),
(Char($D0)+Char($81), Char($A8)),
(Char($C2)+Char($A9), Char($A9)),
(Char($D0)+Char($84), Char($AA)),
(Char($C2)+Char($AB), Char($AB)),
(Char($C2)+Char($AC), Char($AC)),
(Char($C2)+Char($AD), Char($AD)),
(Char($C2)+Char($AE), Char($AE)),
(Char($D0)+Char($87), Char($AF)),
(Char($C2)+Char($B0), Char($B0)),
(Char($C2)+Char($B1), Char($B1)),
(Char($D0)+Char($86), Char($B2)),
(Char($D1)+Char($96), Char($B3)),
(Char($D2)+Char($91), Char($B4)),
(Char($C2)+Char($B5), Char($B5)),
(Char($C2)+Char($B6), Char($B6)),
(Char($C2)+Char($B7), Char($B7)),
(Char($D1)+Char($91), Char($B8)),
(Char($E2)+Char($84)+Char($96), Char($B9)),
(Char($D1)+Char($94), Char($BA)),
(Char($C2)+Char($BB), Char($BB)),
(Char($D1)+Char($98), Char($BC)),
(Char($D0)+Char($85), Char($BD)),
(Char($D1)+Char($95), Char($BE)),
(Char($D1)+Char($97), Char($BF)));
1. Перевод текста из кодировки ANSI в UTF8
function ANSIToUTF8(s: string): string;
label le;
var i, l: integer;
begin
For l:=Length(s) downto 1 do
begin
For i:=Low(UTF8) to High(UTF8) do
If s[l]=UTF8[i, 1] then
begin
Delete(s, l, 1);
Insert(UTF8[i, 0], s, l);
goto le;
end;
For i:=$90 to $BF do
If s[l]=Char(i+$30) then
begin
Delete(s, l, 1);
Insert(Char($D0)+Char(i), s, l);
goto le;
end;
For i:=$80 to $8F do
If s[l]=Char(i+$70) then
begin
Delete(s, l, 1);
Insert(Char($D1)+Char(i), s, l);
goto le;
end;
le:
end;
Result:=s;
end;
где
s - исходная строка.
2. Перевод текста из кодировки UTF8 в ANSI
function UTF8ToANSI(s: string): string;
var i: integer;
begin
For i:=Low(UTF8) to High(UTF8) do
s:=SimwolZamenit(s, UTF8[i, 0], UTF8[i, 1], true, true);
For i:=$90 to $BF do
s:=SimwolZamenit(s, Char($D0)+Char(i), Char(i+$30), true, true);
For i:=$80 to $8F do
s:=SimwolZamenit(s, Char($D1)+Char(i), Char(i+$70), true, true);
s:=SimwolZamenit(s, '−', '-', true, true);
s:=SimwolZamenit(s, '°', '°', true, true);
s:=SimwolZamenit(s, '…', '...', true, true);
s:=SimwolZamenit(s, ' ', #160, true, true);
s:=SimwolZamenit(s, ' ', #160, true, true);
s:=SimwolZamenit(s, #226#128#137, ' ', true, true);
Result:=s;
end;
где
s - исходная строка.
Примечание. Для полноценной работы данной функции необходимо скопировать функцию "Замена символа или фразы на новое значение":
function SimwolZamenit(s, simwol_star, simwol_now: string; Registr_star, Registr_now: boolean): string;
Кодировка и раскодировка текста в ASCII
1. Кодировка текста в ASCII
function StrToKod(s: string): string;
var i: integer;
function IntToStrL(n: integer): string;
begin
Result:=IntToStr(n);
While Length(Result)<3 do
Result:='0'+Result;
end;
begin
Result:='';
For i:=1 to Length(s) do
Result:=Result+'#'+IntToStrL(Ord(s[i]));
end;
где
s - исходная строка.
Например, StrToKod('Я и ты!') выведет '#223#032#232#032#242#251#033'.
2. Раскодировка текста из ASCII
function KodToStr(s: string): string;
var i: integer;
begin
Result:='';
While s<>'' do
begin
i:=Pos('#', s);
If i>0 then
begin
Delete(s, 1, i);
i:=Pos('#', s);
If i=0 then
i:=Length(s)+1;
Result:=Result+Char(StrToInt(Copy(s, 1, i-1)));
Delete(s, 1, i-1);
end else
Exit;
end;
end;
где
s - исходная строка.
Например, KodToStr('#223#032#232#032#242#251#033') выведет 'Я и ты!'.
Конвертация раскладки клавиатуры
1. Конвертация раскладки русской клавиатуры на США
function KonwertatsiyaRaskladkiEn(rus: string): string;
begin
rus:=SimwolZamenit(rus, ';', '$', false, false);
rus:=SimwolZamenit(rus, '/', '|', false, false);
rus:=SimwolZamenit(rus, '.', '/', false, false);
rus:=SimwolZamenit(rus, '?', '&', false, false);
rus:=SimwolZamenit(rus, ',', '?', false, false);
rus:=SimwolZamenit(rus, '"', '@', false, false);
rus:=SimwolZamenit(rus, ':', '^', false, false);
rus:=SimwolZamenit(rus, 'й', 'q', false, false);
rus:=SimwolZamenit(rus, 'ц', 'w', false, false);
rus:=SimwolZamenit(rus, 'у', 'e', false, false);
rus:=SimwolZamenit(rus, 'к', 'r', false, false);
rus:=SimwolZamenit(rus, 'е', 't', false, false);
rus:=SimwolZamenit(rus, 'н', 'y', false, false);
rus:=SimwolZamenit(rus, 'г', 'u', false, false);
rus:=SimwolZamenit(rus, 'ш', 'i', false, false);
rus:=SimwolZamenit(rus, 'щ', 'o', false, false);
rus:=SimwolZamenit(rus, 'з', 'p', false, false);
rus:=SimwolZamenit(rus, 'х', '[', true, false);
rus:=SimwolZamenit(rus, 'Х', '{', true, false);
rus:=SimwolZamenit(rus, 'ъ', ']', true, false);
rus:=SimwolZamenit(rus, 'Ъ', '}', true, false);
rus:=SimwolZamenit(rus, 'ф', 'a', false, false);
rus:=SimwolZamenit(rus, 'ы', 's', false, false);
rus:=SimwolZamenit(rus, 'в', 'd', false, false);
rus:=SimwolZamenit(rus, 'а', 'f', false, false);
rus:=SimwolZamenit(rus, 'п', 'g', false, false);
rus:=SimwolZamenit(rus, 'р', 'h', false, false);
rus:=SimwolZamenit(rus, 'о', 'j', false, false);
rus:=SimwolZamenit(rus, 'л', 'k', false, false);
rus:=SimwolZamenit(rus, 'д', 'l', false, false);
rus:=SimwolZamenit(rus, 'ж', ';', true, false);
rus:=SimwolZamenit(rus, 'Ж', ':', true, false);
rus:=SimwolZamenit(rus, 'э', '''', true, false);
rus:=SimwolZamenit(rus, 'Э', '"', true, false);
rus:=SimwolZamenit(rus, 'я', 'z', false, false);
rus:=SimwolZamenit(rus, 'ч', 'x', false, false);
rus:=SimwolZamenit(rus, 'с', 'c', false, false);
rus:=SimwolZamenit(rus, 'м', 'v', false, false);
rus:=SimwolZamenit(rus, 'и', 'b', false, false);
rus:=SimwolZamenit(rus, 'т', 'n', false, false);
rus:=SimwolZamenit(rus, 'ь', 'm', false, false);
rus:=SimwolZamenit(rus, 'б', ',', true, false);
rus:=SimwolZamenit(rus, 'Б', '<', true, false);
rus:=SimwolZamenit(rus, 'ю', '.', true, false);
rus:=SimwolZamenit(rus, 'Ю', '>', true, false);
rus:=SimwolZamenit(rus, 'ё', '`', true, false);
rus:=SimwolZamenit(rus, 'Ё', '~', true, false);
rus:=SimwolZamenit(rus, '№', '#', false, false);
Result:=rus;
end;
где
rus - исходная строка.
Например, KonwertatsiyaRaskladkiEn('Цштвщцы') выведет 'Windows'.
2. Конвертация раскладки США-клавиатуры на русскую
function KonwertatsiyaRaskladkiRu(eng: string): string;
begin
eng:=SimwolZamenit(eng, 'q', 'й', false, false);
eng:=SimwolZamenit(eng, 'w', 'ц', false, false);
eng:=SimwolZamenit(eng, 'e', 'у', false, false);
eng:=SimwolZamenit(eng, 'r', 'к', false, false);
eng:=SimwolZamenit(eng, 't', 'е', false, false);
eng:=SimwolZamenit(eng, 'y', 'н', false, false);
eng:=SimwolZamenit(eng, 'u', 'г', false, false);
eng:=SimwolZamenit(eng, 'i', 'ш', false, false);
eng:=SimwolZamenit(eng, 'o', 'щ', false, false);
eng:=SimwolZamenit(eng, 'p', 'з', false, false);
eng:=SimwolZamenit(eng, '[', 'х', false, true);
eng:=SimwolZamenit(eng, '{', 'Х', false, true);
eng:=SimwolZamenit(eng, ']', 'ъ', false, true);
eng:=SimwolZamenit(eng, '}', 'Ъ', false, true);
eng:=SimwolZamenit(eng, 'a', 'ф', false, false);
eng:=SimwolZamenit(eng, 's', 'ы', false, false);
eng:=SimwolZamenit(eng, 'd', 'в', false, false);
eng:=SimwolZamenit(eng, 'f', 'а', false, false);
eng:=SimwolZamenit(eng, 'g', 'п', false, false);
eng:=SimwolZamenit(eng, 'h', 'р', false, false);
eng:=SimwolZamenit(eng, 'j', 'о', false, false);
eng:=SimwolZamenit(eng, 'k', 'л', false, false);
eng:=SimwolZamenit(eng, 'l', 'д', false, false);
eng:=SimwolZamenit(eng, ';', 'ж', false, true);
eng:=SimwolZamenit(eng, ':', 'Ж', false, true);
eng:=SimwolZamenit(eng, '''', 'э', false, true);
eng:=SimwolZamenit(eng, '"', 'Э', false, true);
eng:=SimwolZamenit(eng, 'z', 'я', false, false);
eng:=SimwolZamenit(eng, 'x', 'ч', false, false);
eng:=SimwolZamenit(eng, 'c', 'с', false, false);
eng:=SimwolZamenit(eng, 'v', 'м', false, false);
eng:=SimwolZamenit(eng, 'b', 'и', false, false);
eng:=SimwolZamenit(eng, 'n', 'т', false, false);
eng:=SimwolZamenit(eng, 'm', 'ь', false, false);
eng:=SimwolZamenit(eng, ',', 'б', false, true);
eng:=SimwolZamenit(eng, '<', 'Б', false, true);
eng:=SimwolZamenit(eng, '.', 'ю', false, true);
eng:=SimwolZamenit(eng, '>', 'Ю', false, true);
eng:=SimwolZamenit(eng, '/', '.', false, false);
eng:=SimwolZamenit(eng, '?', ',', false, false);
eng:=SimwolZamenit(eng, '`', 'ё', false, true);
eng:=SimwolZamenit(eng, '~', 'Ё', false, true);
eng:=SimwolZamenit(eng, '@', '"', false, false);
eng:=SimwolZamenit(eng, '#', '№', false, false);
eng:=SimwolZamenit(eng, '$', ';', false, false);
eng:=SimwolZamenit(eng, '^', ':', false, false);
eng:=SimwolZamenit(eng, '&', '?', false, false);
eng:=SimwolZamenit(eng, '|', '/', false, false);
Result:=eng;
end;
где
eng - исходная строка.
Например, KonwertatsiyaRaskladkiRu('Z ''nj [jxe!') выведет 'Я это хочу!'.
Примечание. Для полноценной работы данных функций необходимо скопировать функцию "Замена символа или фразы на новое значение":
function SimwolZamenit(s, simwol_star, simwol_now: string; Registr_star, Registr_now: boolean): string;
Транслитерация
1. Определение символа как русской или английской буквы, цифры
type TTranslit = (Ru, En, Num, Sym);
function Translit(s: char): TTranslit;
begin
Result:=Sym;
If (s>='А') and (s<='я') or (s='ё') or (s='Ё') then
Result:=Ru;
If (s>='A') and (s<='z') then
Result:=En;
If (s>='0') and (s<='9') then
Result:=Num;
end;
где
s - исходный символ.
Например, Translit('5') выведет значение типа Num.
2. Проверка английских букв в строке
function TranslitEn(s: string): boolean;
var i: integer;
begin
Result:=false;
For i:=1 to Length(s) do
If Translit(s[i])=En then
Result:=true;
end;
где
s - исходная строка.
Например, TranslitEn('куb') выведет положительное значение.
3. Проверка русских букв в строке
function TranslitRu(s: string): boolean;
var i: integer;
begin
Result:=false;
For i:=1 to Length(s) do
If strTranslit(s[i])=Ru then
Result:=true;
end;
где
s - исходная строка.
Например, TranslitRu('domiно') выведет положительное значение.
4. Замена транслируемых символов с английского языка на русский
function TranslitEnRu(s: string): string;
begin
s:=SimwolZamenit(s, 'sch', 'щ', false, false);
s:=SimwolZamenit(s, 'ch', 'ч', false, false);
s:=SimwolZamenit(s, 'sh', 'ш', false, false);
s:=SimwolZamenit(s, 'ts', 'ц', false, false);
s:=SimwolZamenit(s, 'ya', 'я', false, false);
s:=SimwolZamenit(s, 'ye', 'э', false, false);
s:=SimwolZamenit(s, 'yi', 'ы', false, false);
s:=SimwolZamenit(s, 'yo', 'ё', false, false);
s:=SimwolZamenit(s, 'yu', 'ю', false, false);
s:=SimwolZamenit(s, 'zh', 'ж', false, false);
s:=SimwolZamenit(s, 'a', 'а', false, false);
s:=SimwolZamenit(s, 'b', 'б', false, false);
s:=SimwolZamenit(s, 'v', 'в', false, false);
s:=SimwolZamenit(s, 'w', 'в', false, false);
s:=SimwolZamenit(s, 'g', 'г', false, false);
s:=SimwolZamenit(s, 'd', 'д', false, false);
s:=SimwolZamenit(s, 'e', 'е', false, false);
s:=SimwolZamenit(s, 'z', 'з', false, false);
s:=SimwolZamenit(s, 'i', 'и', false, false);
s:=SimwolZamenit(s, 'j', 'й', false, false);
s:=SimwolZamenit(s, 'k', 'к', false, false);
s:=SimwolZamenit(s, 'l', 'л', false, false);
s:=SimwolZamenit(s, 'm', 'м', false, false);
s:=SimwolZamenit(s, 'n', 'н', false, false);
s:=SimwolZamenit(s, 'o', 'о', false, false);
s:=SimwolZamenit(s, 'p', 'п', false, false);
s:=SimwolZamenit(s, 'r', 'р', false, false);
s:=SimwolZamenit(s, 's', 'с', false, false);
s:=SimwolZamenit(s, 't', 'т', false, false);
s:=SimwolZamenit(s, 'u', 'у', false, false);
s:=SimwolZamenit(s, 'f', 'ф', false, false);
s:=SimwolZamenit(s, 'h', 'х', false, false);
s:=SimwolZamenit(s, 'c', 'ц', false, false);
s:=SimwolZamenit(s, '''''', 'ъ', false, false);
s:=SimwolZamenit(s, 'y', 'ы', false, false);
s:=SimwolZamenit(s, '''', 'ь', false, false);
s:=SimwolZamenit(s, '`', 'ь', false, false);
Result:=s;
end;
где
s - исходная строка.
Например, TranslitEnRu('Chislo') выведет 'Число'.
5. Замена транслируемых символов с русского языка на английский
function TranslitRuEn(s: string): string;
begin
s:=SimwolZamenit(s, 'а', 'a', false, false);
s:=SimwolZamenit(s, 'б', 'b', false, false);
s:=SimwolZamenit(s, 'в', 'v', false, false);
s:=SimwolZamenit(s, 'г', 'g', false, false);
s:=SimwolZamenit(s, 'д', 'd', false, false);
s:=SimwolZamenit(s, 'е', 'e', false, false);
s:=SimwolZamenit(s, 'ё', 'yo', false, false);
s:=SimwolZamenit(s, 'ж', 'zh', false, false);
s:=SimwolZamenit(s, 'з', 'z', false, false);
s:=SimwolZamenit(s, 'и', 'i', false, false);
s:=SimwolZamenit(s, 'й', 'j', false, false);
s:=SimwolZamenit(s, 'к', 'k', false, false);
s:=SimwolZamenit(s, 'л', 'l', false, false);
s:=SimwolZamenit(s, 'м', 'm', false, false);
s:=SimwolZamenit(s, 'н', 'n', false, false);
s:=SimwolZamenit(s, 'о', 'o', false, false);
s:=SimwolZamenit(s, 'п', 'p', false, false);
s:=SimwolZamenit(s, 'р', 'r', false, false);
s:=SimwolZamenit(s, 'с', 's', false, false);
s:=SimwolZamenit(s, 'т', 't', false, false);
s:=SimwolZamenit(s, 'у', 'u', false, false);
s:=SimwolZamenit(s, 'ф', 'f', false, false);
s:=SimwolZamenit(s, 'х', 'h', false, false);
s:=SimwolZamenit(s, 'ц', 'ts', false, false);
s:=SimwolZamenit(s, 'ч', 'ch', false, false);
s:=SimwolZamenit(s, 'ш', 'sh', false, false);
s:=SimwolZamenit(s, 'щ', 'sch', false, false);
s:=SimwolZamenit(s, 'ъ', '''''', false, false);
s:=SimwolZamenit(s, 'ы', 'y', false, false);
s:=SimwolZamenit(s, 'ь', '''', false, false);
s:=SimwolZamenit(s, 'э', 'ye', false, false);
s:=SimwolZamenit(s, 'ю', 'yu', false, false);
s:=SimwolZamenit(s, 'я', 'ya', false, false);
Result:=s;
end;
где
s - исходная строка.
Например, TranslitRuEn('Дрожжи') выведет 'Drozhzhi'.
Примечание. Для полноценной работы данных функций необходимо скопировать функцию "Замена символа или фразы на новое значение":
function SimwolZamenit(s, simwol_star, simwol_now: string; Registr_star, Registr_now: boolean): string;
Выделение текстовой части под номером, разделенным символом в строке
function Copy1(s: string; index: byte; c: char): string;
var i, x, l: integer;
begin
x:=1;
l:=0;
If index<1 then
index:=1;
For i:=1 to Length(s) do
begin
If s[i]=c then
begin
index:=index-1;
If index=1 then
x:=i+1;
end else
If index=1 then
l:=l+1;
If index<=0 then
Break;
end;
Result:=Copy(s, x, l);
end;
где
s - исходная строка;
index - порядковый номер значения;
c - разделитель.
Например, Copy1('апрель,июль,февраль,май,август,март,июнь,октябрь,сентябрь', 5, ',') выведет 'август'.
Позиция подстроки в строке
function Pos1(index0: integer; substr, s: string): integer;
begin
If index0<1 then
index0:=1;
s:=Copy(s, index0, Length(s));
Result:=index0+Pos(substr, s)-1;
end;
где
index0 - начальный индекс;
substr - подстрока;
s - исходная строка.
Например, Pos1(3, 'ба', 'барабан') выведет '5'.
Установка минимального по длине строкового значения
function DlinaStroki(s: string; dlina_s: integer; ch: char): string;
begin
While Length(s)'') and (s[1]=' ') do
Delete(s, 1, 1);
While (s<>'') and (s[Length(s)]=' ') do
Delete(s, Length(s), 1);
Result:=s;
end;
где
s - исходная строка.
Например, ProbelUdalit(' Новый год! ') выведет 'Новый год!'.
Случайный набор символов (генератор новых слов)
function SlowoRandom(dlina: integer; PROPIS, rus, eng, tsifra: boolean): string;
var b: array[0..255] of boolean;
i, n: integer;
begin
Result:='';
If not PROPIS and not rus and not eng and not tsifra then
Exit;
For i:=0 to 255 do
b[i]:=false;
If tsifra then
For i:=48 to 57 do
b[i]:=true;
If PROPIS and eng then
For i:=65 to 90 do
b[i]:=true;
If eng then
For i:=97 to 122 do
b[i]:=true;
If PROPIS and rus then
For i:=192 to 223 do
b[i]:=true;
If rus then
For i:=224 to 255 do
b[i]:=true;
n:=0;
While n', '|':
If c=#0 then
Delete(f, i, 1) else
f[i]:=c;
end;
Result:=f;
end;
где
f - имя файла;
c - заменяемый символ.
Например, FormatNameFile('Info?5.txt', '_') выведет 'Info_5.txt'.
Функции даты и времени
1. Форматирование даты и времени путем преобразования в строку
function FormatDateTime(const Format: string; DateTime: TDateTime): string;
где
Format - формат строки;
DateTime - дата и время.
Поддерживаются следующие описатели формата строки Format:
c - число.месяц.год час:минута:секунда (например, '1.01.2127 1:08:04')
d - число (1..31)
dd - число (01..31)
ddd - день недели (Пн..Вс)
dddd - день недели (понедельник..воскресенье)
ddddd - число.месяц.год (например, '04.05.2096')
dddddd - число месяц год (например, '4 мая 2096 год')
g - эра (выводит 'наша эра' с 1.01.1601)
gg - эра (выводит 'наша эра' с 1.01.1601)
e - год в течение текущего периода/эры (0..99)
ee - год в течение текущего периода/эры (00..99)
m - месяц (1..12)
mm - месяц (01..12)
mmm - месяц (январь..декабрь)
mmmm - месяц (Январь..Декабрь)
yy - год (00..99)
yyyy - год (0000..9999)
h - час (0..23)
hh - час (00..23)
n - минута (0..59)
nn - минута (00..59)
s - секунда (0..59)
ss - секунда (00..59)
z - миллисекунда (0..999)
zzz - миллисекунда (000..999)
t - час:минута (например, '9:02')
tt - час:минута:секунда (например, '4:08:00')
am/pm - обозначение времени до и после полудня (выводит 'am' или 'pm')
a/p - обозначение времени до и после полудня (выводит 'a' или 'p')
ampm - обозначение времени до и после полудня (выводит в зависимости от настройки компьютера)
Например, FormatDateTime('dd.mm.yyyy hh:nn:ss am/pm', Now) выведет '01.01.2016 08:00:00 am'.
Примечание. Данная функция входит в состав языка Паскаль.
2. Проверка правильности введения даты
function TryEncodeDate(Year, Month, Day: Word; out Date: TDateTime): Boolean;
где
Year - год;
Month - месяц;
Day - день;
Date - полученная дата.
Например, TryEncodeDate(2015, 2, 29, Date) выведет отрицательное значение; TryEncodeDate(2016, 5, 1, Date) выведет положительное значение, а значение Date станет равным '42491'.
Примечание. Данная функция входит в состав языка Паскаль.
3. Объединение года, месяца и дня в дату
function EncodeDate(Year, Month, Day: Word): TDateTime;
где
Year - год;
Month - месяц;
Day - день.
Например, EncodeDate(2012, 9, 30) выведет '41182'.
Примечание. Данная функция входит в состав языка Паскаль.
4. Проверка правильности введения времени
function TryEncodeTime(Hour, Min, Sec, MSec: Word; out Time: TDateTime): Boolean;
где
Hour - часы;
Min - минуты;
Sec - секунды;
MSec - миллисекунды;
Time - полученное время.
Например, TryEncodeTime(24, 8, 60, 984, Time) выведет отрицательное значение; TryEncodeTime(23, 51, 37, 687, Time) выведет положительное значение, а значение Time станет равным '0,994186' (округленно).
Примечание. Данная функция входит в состав языка Паскаль.
5. Объединение часов, минут, секунд и миллисекунд во время
function EncodeTime(Hour, Min, Sec, MSec: Word): TDateTime;
где
Hour - часы;
Min - минуты;
Sec - секунды;
MSec - миллисекунды.
Например, EncodeTime(22, 47, 36, 1) выведет '0,949722' (округленно).
Примечание. Данная функция входит в состав языка Паскаль.
6. Порядковый номер дня года
function DenNomer(DateTime: TDateTime): integer;
var g: integer;
r: TDateTime;
begin
DateTime:=Trunc(DateTime);
g:=StrToInt(FormatDateTime('yyyy', DateTime));
r:=EncodeDate(g, 1, 1);
Result:=Round(DateTime-r+1);
end;
где
DateTime - исходная дата.
Например, DenNomer(EncodeDate(2087, 6, 27)) выведет '178' (178-й день 2087-го года).
7. Порядковый номер недели года
function NedelyaNomer(DateTime: TDateTime): integer;
var g, n: integer;
r: TDateTime;
begin
DateTime:=Trunc(DateTime);
g:=StrToInt(FormatDateTime('yyyy', DateTime));
r:=EncodeDate(g, 1, 1);
n:=DayOfWeek(DateTime)-1;
If n=0 then
n:=7;
r:=r-n+1;
n:=Round(DateTime-r);
Result:=n div 7+1;
end;
где
DateTime - исходная дата.
Например, NedelyaNomer(EncodeDate(2087, 6, 27)) выведет '26' (26-я неделя 2087-го года).
8. Перевод количества секунд в привычный нам формат
function FormatSec(Sec: real): string;
var dn, ch, min, s, ms: integer;
begin
ms:=Trunc(Frac(Sec)*1000);
Sec:=Trunc(Sec);
s:=Trunc(Sec) mod 60;
Sec:=Trunc(Sec/60);
min:=Trunc(Sec) mod 60;
Sec:=Trunc(Sec/60);
ch:=Trunc(Sec) mod 24;
Sec:=Trunc(Sec/24);
dn:=Trunc(Sec);
Result:='';
If dn>0 then
Result:=Format('%d дн. ', [dn]);
Result:=Format('%s%d:%d:%d', [Result, ch, min, s]);
If ms>0 then
Result:=Format('%s,%d', [Result, ms]);
end;
где
Sec - количество секунд.
Например, FormatSec(658745.8) выведет '7 дн. 14:59:05,800'.
9. Количество дней в месяце
function Kol_WoDnejWMesyatse(Month, Year: word): word;
var DayTable: TDayTable;
begin
DayTable:=MonthDays[IsLeapYear(Year)];
Result:=DayTable[Month];
end;
где
Month - месяц;
Year - год.
Например, Kol_WoDnejWMesyatse(2, 2096) выведет '29'.
10. Часовой пояс
function Zone: real;
var lp: TTimeZoneInformation;
begin
GetTimeZoneInformation(lp);
Result:=-lp.Bias/60;
end;
Примечание. Выводит часовой пояс в зависимости от настройки компьютера (например, '3').
11. Вычисление даты Пасхи
function Pasha(Year: integer): TDateTime;
var a, b, c: integer;
begin
a:=Year mod 19;
b:=Year mod 4;
c:=Year mod 7;
a:=(19*a+15) mod 30;
b:=(2*b+4*c+6*a+6) mod 7;
a:=a+b;
b:=-2+Year div 100-Year div 400;
If TryEncodeDate(Year, 3, 22, Result) then
Result:=Result+a+b else
Result:=0;
end;
где
Year - год.
Например, FormatDateTime('c', Pasha(2016)) выведет '01.05.2016'.
Автор: © Неверов Евгений Викторович
E-mail: newerow1989@yandex.ru, newerow1989@mail.ru
Сайт: newerow1989.narod.ru
Дата изменения: 23.10.2017 г.