program Lab1_Variant23;
{$APPTYPE CONSOLE}
{$MODE OBJFPC} { для Free Pascal, совместимость с Delphi }
uses
SysUtils;
const
AlphUp =
'АБВГДЕЁЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯ';
AlphLow =
'абвгдеёжзийклмнопрстуфхцчшщъыьэюя';
SymbTable =
'АБВГДЕЁЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯ' +
'0123456789' +
'абвгдеёжзийклмнопрстуфхцчшщъыьэюя';
const
Digits : set of Char = ['0'..'9'];
function IsUpperCyr(C: Char): Boolean;
begin
IsUpperCyr := Pos(C, AlphUp) > 0;
end;
function IsLowerCyr(C: Char): Boolean;
begin
IsLowerCyr := Pos(C, AlphLow) > 0;
end;
function Prov1(const S: String): Byte;
var
i : Integer;
begin
if Length(S)=0 then
begin
Prov1:=1;
Exit;
end;
for i:=1 to Length(S) do
if not ((S[i] in Digits) or
IsUpperCyr(S[i]) or
IsLowerCyr(S[i])) then
begin
Prov1:=2;
Exit;
end;
Prov1:=0;
end;
function Prov2(const S: String): Byte;
var
i : Integer;
begin
if Length(S)=0 then
begin
Prov2:=1;
Exit;
end;
for i:=1 to Length(S) do
if Pos(S[i], SymbTable)=0 then
begin
Prov2:=2;
Exit;
end;
Prov2:=0;
end;
procedure Sort1(var S: String);
var
i,z,len : Integer;
flag : Boolean;
ch : Char;
begin
len:=Length(S);
z:=1;
repeat
flag:=True;
for i:=1 to len-z do
if
((S[i] in Digits) and IsUpperCyr(S[i+1]))
or
(IsLowerCyr(S[i]) and
(IsUpperCyr(S[i+1]) or
(S[i+1] in Digits)))
or
(IsUpperCyr(S[i]) and
IsUpperCyr(S[i+1]) and
(Pos(S[i],AlphUp) >
Pos(S[i+1],AlphUp)))
then
begin
ch:=S[i];
S[i]:=S[i+1];
S[i+1]:=ch;
flag:=False;
end;
Inc(z);
until flag or (z=len);
end;
procedure Sort2(var S: String);
var
i,z,len : Integer;
flag : Boolean;
ch : Char;
p1,p2 : Integer;
begin
len:=Length(S);
z:=1;
repeat
flag:=True;
for i:=1 to len-z do
begin
p1:=Pos(S[i],SymbTable);
p2:=Pos(S[i+1],SymbTable);
if
((p1>33) and (p1<=43) and (p2<=33))
or
((p1>=44) and (p2<=43))
or
(IsUpperCyr(S[i]) and
IsUpperCyr(S[i+1]) and
(Pos(S[i],AlphUp) >
Pos(S[i+1],AlphUp)))
then
begin
ch:=S[i];
S[i]:=S[i+1];
S[i+1]:=ch;
flag:=False;
end;
end;
Inc(z);
until flag or (z=len);
end;
var
S,S1,S2 : String;
Nom : Byte;
begin
Write('Введите строку: ');
ReadLn(S);
S1:=S;
S2:=S;
Writeln;
Writeln('Исходная строка');
Writeln('"',S,'"');
Writeln;
Writeln('Метод 1');
Nom:=Prov1(S1);
case Nom of
1:
Writeln('Пустая строка');
2:
Writeln('Некорректные символы');
else
begin
Sort1(S1);
Writeln('Результат:');
Writeln('"',S1,'"');
end;
end;
Writeln;
Writeln('Метод 2');
Nom:=Prov2(S2);
case Nom of
1:
Writeln('Пустая строка');
2:
Writeln('Некорректные символы');
else
begin
Sort2(S2);
Writeln('Результат:');
Writeln('"',S2,'"');
end;
end;
end.
cHJvZ3JhbSBMYWIxX1ZhcmlhbnQyMzsKCnskQVBQVFlQRSBDT05TT0xFfQp7JE1PREUgT0JKRlBDfSB7INC00LvRjyBGcmVlIFBhc2NhbCwg0YHQvtCy0LzQtdGB0YLQuNC80L7RgdGC0Ywg0YEgRGVscGhpIH0KCnVzZXMKICBTeXNVdGlsczsKCmNvbnN0CiAgQWxwaFVwID0KICAgICfQkNCR0JLQk9CU0JXQgdCW0JfQmNCZ0JrQm9Cc0J3QntCf0KDQodCi0KPQpNCl0KbQp9Co0KnQqtCr0KzQrdCu0K8nOwoKICBBbHBoTG93ID0KICAgICfQsNCx0LLQs9C00LXRkdC20LfQuNC50LrQu9C80L3QvtC/0YDRgdGC0YPRhNGF0YbRh9GI0YnRitGL0YzRjdGO0Y8nOwoKICBTeW1iVGFibGUgPQogICAgJ9CQ0JHQktCT0JTQldCB0JbQl9CY0JnQmtCb0JzQndCe0J/QoNCh0KLQo9Ck0KXQptCn0KjQqdCq0KvQrNCt0K7QrycgKwogICAgJzAxMjM0NTY3ODknICsKICAgICfQsNCx0LLQs9C00LXRkdC20LfQuNC50LrQu9C80L3QvtC/0YDRgdGC0YPRhNGF0YbRh9GI0YnRitGL0YzRjdGO0Y8nOwoKY29uc3QKICBEaWdpdHMgOiBzZXQgb2YgQ2hhciA9IFsnMCcuLic5J107CgpmdW5jdGlvbiBJc1VwcGVyQ3lyKEM6IENoYXIpOiBCb29sZWFuOwpiZWdpbgogIElzVXBwZXJDeXIgOj0gUG9zKEMsIEFscGhVcCkgPiAwOwplbmQ7CgpmdW5jdGlvbiBJc0xvd2VyQ3lyKEM6IENoYXIpOiBCb29sZWFuOwpiZWdpbgogIElzTG93ZXJDeXIgOj0gUG9zKEMsIEFscGhMb3cpID4gMDsKZW5kOwoKZnVuY3Rpb24gUHJvdjEoY29uc3QgUzogU3RyaW5nKTogQnl0ZTsKdmFyCiAgaSA6IEludGVnZXI7CmJlZ2luCgogIGlmIExlbmd0aChTKT0wIHRoZW4KICBiZWdpbgogICAgUHJvdjE6PTE7CiAgICBFeGl0OwogIGVuZDsKCiAgZm9yIGk6PTEgdG8gTGVuZ3RoKFMpIGRvCiAgICBpZiBub3QgKChTW2ldIGluIERpZ2l0cykgb3IKICAgICAgICAgICAgSXNVcHBlckN5cihTW2ldKSBvcgogICAgICAgICAgICBJc0xvd2VyQ3lyKFNbaV0pKSB0aGVuCiAgICBiZWdpbgogICAgICBQcm92MTo9MjsKICAgICAgRXhpdDsKICAgIGVuZDsKCiAgUHJvdjE6PTA7CmVuZDsKCmZ1bmN0aW9uIFByb3YyKGNvbnN0IFM6IFN0cmluZyk6IEJ5dGU7CnZhcgogIGkgOiBJbnRlZ2VyOwpiZWdpbgoKICBpZiBMZW5ndGgoUyk9MCB0aGVuCiAgYmVnaW4KICAgIFByb3YyOj0xOwogICAgRXhpdDsKICBlbmQ7CgogIGZvciBpOj0xIHRvIExlbmd0aChTKSBkbwogICAgaWYgUG9zKFNbaV0sIFN5bWJUYWJsZSk9MCB0aGVuCiAgICBiZWdpbgogICAgICBQcm92Mjo9MjsKICAgICAgRXhpdDsKICAgIGVuZDsKCiAgUHJvdjI6PTA7CmVuZDsKCnByb2NlZHVyZSBTb3J0MSh2YXIgUzogU3RyaW5nKTsKdmFyCiAgaSx6LGxlbiA6IEludGVnZXI7CiAgZmxhZyA6IEJvb2xlYW47CiAgY2ggOiBDaGFyOwpiZWdpbgoKICBsZW46PUxlbmd0aChTKTsKICB6Oj0xOwoKICByZXBlYXQKCiAgICBmbGFnOj1UcnVlOwoKICAgIGZvciBpOj0xIHRvIGxlbi16IGRvCgogICAgICBpZgoKICAgICAgKChTW2ldIGluIERpZ2l0cykgYW5kIElzVXBwZXJDeXIoU1tpKzFdKSkKCiAgICAgIG9yCgogICAgICAoSXNMb3dlckN5cihTW2ldKSBhbmQKICAgICAgIChJc1VwcGVyQ3lyKFNbaSsxXSkgb3IKICAgICAgICAoU1tpKzFdIGluIERpZ2l0cykpKQoKICAgICAgb3IKCiAgICAgIChJc1VwcGVyQ3lyKFNbaV0pIGFuZAogICAgICAgSXNVcHBlckN5cihTW2krMV0pIGFuZAogICAgICAgKFBvcyhTW2ldLEFscGhVcCkgPgogICAgICAgIFBvcyhTW2krMV0sQWxwaFVwKSkpCgogICAgICB0aGVuCiAgICAgIGJlZ2luCiAgICAgICAgY2g6PVNbaV07CiAgICAgICAgU1tpXTo9U1tpKzFdOwogICAgICAgIFNbaSsxXTo9Y2g7CiAgICAgICAgZmxhZzo9RmFsc2U7CiAgICAgIGVuZDsKCiAgICBJbmMoeik7CgogIHVudGlsIGZsYWcgb3IgKHo9bGVuKTsKCmVuZDsKCnByb2NlZHVyZSBTb3J0Mih2YXIgUzogU3RyaW5nKTsKdmFyCiAgaSx6LGxlbiA6IEludGVnZXI7CiAgZmxhZyA6IEJvb2xlYW47CiAgY2ggOiBDaGFyOwogIHAxLHAyIDogSW50ZWdlcjsKYmVnaW4KCiAgbGVuOj1MZW5ndGgoUyk7CiAgejo9MTsKCiAgcmVwZWF0CgogICAgZmxhZzo9VHJ1ZTsKCiAgICBmb3IgaTo9MSB0byBsZW4teiBkbwogICAgYmVnaW4KCiAgICAgIHAxOj1Qb3MoU1tpXSxTeW1iVGFibGUpOwogICAgICBwMjo9UG9zKFNbaSsxXSxTeW1iVGFibGUpOwoKICAgICAgaWYKCiAgICAgICgocDE+MzMpIGFuZCAocDE8PTQzKSBhbmQgKHAyPD0zMykpCgogICAgICBvcgoKICAgICAgKChwMT49NDQpIGFuZCAocDI8PTQzKSkKCiAgICAgIG9yCgogICAgICAoSXNVcHBlckN5cihTW2ldKSBhbmQKICAgICAgIElzVXBwZXJDeXIoU1tpKzFdKSBhbmQKICAgICAgIChQb3MoU1tpXSxBbHBoVXApID4KICAgICAgICBQb3MoU1tpKzFdLEFscGhVcCkpKQoKICAgICAgdGhlbgogICAgICBiZWdpbgogICAgICAgIGNoOj1TW2ldOwogICAgICAgIFNbaV06PVNbaSsxXTsKICAgICAgICBTW2krMV06PWNoOwogICAgICAgIGZsYWc6PUZhbHNlOwogICAgICBlbmQ7CgogICAgZW5kOwoKICAgIEluYyh6KTsKCiAgdW50aWwgZmxhZyBvciAoej1sZW4pOwoKZW5kOwoKdmFyCiAgUyxTMSxTMiA6IFN0cmluZzsKICBOb20gOiBCeXRlOwoKYmVnaW4KCiAgV3JpdGUoJ9CS0LLQtdC00LjRgtC1INGB0YLRgNC+0LrRgzogJyk7CiAgUmVhZExuKFMpOwoKICBTMTo9UzsKICBTMjo9UzsKCiAgV3JpdGVsbjsKICBXcml0ZWxuKCfQmNGB0YXQvtC00L3QsNGPINGB0YLRgNC+0LrQsCcpOwogIFdyaXRlbG4oJyInLFMsJyInKTsKCiAgV3JpdGVsbjsKICBXcml0ZWxuKCfQnNC10YLQvtC0IDEnKTsKCiAgTm9tOj1Qcm92MShTMSk7CgogIGNhc2UgTm9tIG9mCgogICAgMToKICAgICAgV3JpdGVsbign0J/Rg9GB0YLQsNGPINGB0YLRgNC+0LrQsCcpOwoKICAgIDI6CiAgICAgIFdyaXRlbG4oJ9Cd0LXQutC+0YDRgNC10LrRgtC90YvQtSDRgdC40LzQstC+0LvRiycpOwoKICBlbHNlCiAgICBiZWdpbgogICAgICBTb3J0MShTMSk7CiAgICAgIFdyaXRlbG4oJ9Cg0LXQt9GD0LvRjNGC0LDRgjonKTsKICAgICAgV3JpdGVsbignIicsUzEsJyInKTsKICAgIGVuZDsKCiAgZW5kOwoKICBXcml0ZWxuOwogIFdyaXRlbG4oJ9Cc0LXRgtC+0LQgMicpOwoKICBOb206PVByb3YyKFMyKTsKCiAgY2FzZSBOb20gb2YKCiAgICAxOgogICAgICBXcml0ZWxuKCfQn9GD0YHRgtCw0Y8g0YHRgtGA0L7QutCwJyk7CgogICAgMjoKICAgICAgV3JpdGVsbign0J3QtdC60L7RgNGA0LXQutGC0L3Ri9C1INGB0LjQvNCy0L7Qu9GLJyk7CgogIGVsc2UKICAgIGJlZ2luCiAgICAgIFNvcnQyKFMyKTsKICAgICAgV3JpdGVsbign0KDQtdC30YPQu9GM0YLQsNGCOicpOwogICAgICBXcml0ZWxuKCciJyxTMiwnIicpOwogICAgZW5kOwoKICBlbmQ7CgplbmQu