program Lab1_Variant23;
{$APPTYPE CONSOLE}
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.
cHJvZ3JhbSBMYWIxX1ZhcmlhbnQyMzsKCnskQVBQVFlQRSBDT05TT0xFfQoKdXNlcwogIFN5c1V0aWxzOwoKY29uc3QKICBBbHBoVXAgPQogICAgJ9CQ0JHQktCT0JTQldCB0JbQl9CY0JnQmtCb0JzQndCe0J/QoNCh0KLQo9Ck0KXQptCn0KjQqdCq0KvQrNCt0K7Qryc7CgogIEFscGhMb3cgPQogICAgJ9Cw0LHQstCz0LTQtdGR0LbQt9C40LnQutC70LzQvdC+0L/RgNGB0YLRg9GE0YXRhtGH0YjRidGK0YvRjNGN0Y7Rjyc7CgogIFN5bWJUYWJsZSA9CiAgICAn0JDQkdCS0JPQlNCV0IHQltCX0JjQmdCa0JvQnNCd0J7Qn9Cg0KHQotCj0KTQpdCm0KfQqNCp0KrQq9Cs0K3QrtCvJyArCiAgICAnMDEyMzQ1Njc4OScgKwogICAgJ9Cw0LHQstCz0LTQtdGR0LbQt9C40LnQutC70LzQvdC+0L/RgNGB0YLRg9GE0YXRhtGH0YjRidGK0YvRjNGN0Y7Rjyc7Cgpjb25zdAogIERpZ2l0cyA6IHNldCBvZiBDaGFyID0gWycwJy4uJzknXTsKCmZ1bmN0aW9uIElzVXBwZXJDeXIoQzogQ2hhcik6IEJvb2xlYW47CmJlZ2luCiAgSXNVcHBlckN5ciA6PSBQb3MoQywgQWxwaFVwKSA+IDA7CmVuZDsKCmZ1bmN0aW9uIElzTG93ZXJDeXIoQzogQ2hhcik6IEJvb2xlYW47CmJlZ2luCiAgSXNMb3dlckN5ciA6PSBQb3MoQywgQWxwaExvdykgPiAwOwplbmQ7CgpmdW5jdGlvbiBQcm92MShjb25zdCBTOiBTdHJpbmcpOiBCeXRlOwp2YXIKICBpIDogSW50ZWdlcjsKYmVnaW4KCiAgaWYgTGVuZ3RoKFMpPTAgdGhlbgogIGJlZ2luCiAgICBQcm92MTo9MTsKICAgIEV4aXQ7CiAgZW5kOwoKICBmb3IgaTo9MSB0byBMZW5ndGgoUykgZG8KICAgIGlmIG5vdCAoKFNbaV0gaW4gRGlnaXRzKSBvcgogICAgICAgICAgICBJc1VwcGVyQ3lyKFNbaV0pIG9yCiAgICAgICAgICAgIElzTG93ZXJDeXIoU1tpXSkpIHRoZW4KICAgIGJlZ2luCiAgICAgIFByb3YxOj0yOwogICAgICBFeGl0OwogICAgZW5kOwoKICBQcm92MTo9MDsKZW5kOwoKZnVuY3Rpb24gUHJvdjIoY29uc3QgUzogU3RyaW5nKTogQnl0ZTsKdmFyCiAgaSA6IEludGVnZXI7CmJlZ2luCgogIGlmIExlbmd0aChTKT0wIHRoZW4KICBiZWdpbgogICAgUHJvdjI6PTE7CiAgICBFeGl0OwogIGVuZDsKCiAgZm9yIGk6PTEgdG8gTGVuZ3RoKFMpIGRvCiAgICBpZiBQb3MoU1tpXSwgU3ltYlRhYmxlKT0wIHRoZW4KICAgIGJlZ2luCiAgICAgIFByb3YyOj0yOwogICAgICBFeGl0OwogICAgZW5kOwoKICBQcm92Mjo9MDsKZW5kOwoKcHJvY2VkdXJlIFNvcnQxKHZhciBTOiBTdHJpbmcpOwp2YXIKICBpLHosbGVuIDogSW50ZWdlcjsKICBmbGFnIDogQm9vbGVhbjsKICBjaCA6IENoYXI7CmJlZ2luCgogIGxlbjo9TGVuZ3RoKFMpOwogIHo6PTE7CgogIHJlcGVhdAoKICAgIGZsYWc6PVRydWU7CgogICAgZm9yIGk6PTEgdG8gbGVuLXogZG8KCiAgICAgIGlmCgogICAgICAoKFNbaV0gaW4gRGlnaXRzKSBhbmQgSXNVcHBlckN5cihTW2krMV0pKQoKICAgICAgb3IKCiAgICAgIChJc0xvd2VyQ3lyKFNbaV0pIGFuZAogICAgICAgKElzVXBwZXJDeXIoU1tpKzFdKSBvcgogICAgICAgIChTW2krMV0gaW4gRGlnaXRzKSkpCgogICAgICBvcgoKICAgICAgKElzVXBwZXJDeXIoU1tpXSkgYW5kCiAgICAgICBJc1VwcGVyQ3lyKFNbaSsxXSkgYW5kCiAgICAgICAoUG9zKFNbaV0sQWxwaFVwKSA+CiAgICAgICAgUG9zKFNbaSsxXSxBbHBoVXApKSkKCiAgICAgIHRoZW4KICAgICAgYmVnaW4KICAgICAgICBjaDo9U1tpXTsKICAgICAgICBTW2ldOj1TW2krMV07CiAgICAgICAgU1tpKzFdOj1jaDsKICAgICAgICBmbGFnOj1GYWxzZTsKICAgICAgZW5kOwoKICAgIEluYyh6KTsKCiAgdW50aWwgZmxhZyBvciAoej1sZW4pOwoKZW5kOwoKcHJvY2VkdXJlIFNvcnQyKHZhciBTOiBTdHJpbmcpOwp2YXIKICBpLHosbGVuIDogSW50ZWdlcjsKICBmbGFnIDogQm9vbGVhbjsKICBjaCA6IENoYXI7CiAgcDEscDIgOiBJbnRlZ2VyOwpiZWdpbgoKICBsZW46PUxlbmd0aChTKTsKICB6Oj0xOwoKICByZXBlYXQKCiAgICBmbGFnOj1UcnVlOwoKICAgIGZvciBpOj0xIHRvIGxlbi16IGRvCiAgICBiZWdpbgoKICAgICAgcDE6PVBvcyhTW2ldLFN5bWJUYWJsZSk7CiAgICAgIHAyOj1Qb3MoU1tpKzFdLFN5bWJUYWJsZSk7CgogICAgICBpZgoKICAgICAgKChwMT4zMykgYW5kIChwMTw9NDMpIGFuZCAocDI8PTMzKSkKCiAgICAgIG9yCgogICAgICAoKHAxPj00NCkgYW5kIChwMjw9NDMpKQoKICAgICAgb3IKCiAgICAgIChJc1VwcGVyQ3lyKFNbaV0pIGFuZAogICAgICAgSXNVcHBlckN5cihTW2krMV0pIGFuZAogICAgICAgKFBvcyhTW2ldLEFscGhVcCkgPgogICAgICAgIFBvcyhTW2krMV0sQWxwaFVwKSkpCgogICAgICB0aGVuCiAgICAgIGJlZ2luCiAgICAgICAgY2g6PVNbaV07CiAgICAgICAgU1tpXTo9U1tpKzFdOwogICAgICAgIFNbaSsxXTo9Y2g7CiAgICAgICAgZmxhZzo9RmFsc2U7CiAgICAgIGVuZDsKCiAgICBlbmQ7CgogICAgSW5jKHopOwoKICB1bnRpbCBmbGFnIG9yICh6PWxlbik7CgplbmQ7Cgp2YXIKICBTLFMxLFMyIDogU3RyaW5nOwogIE5vbSA6IEJ5dGU7CgpiZWdpbgoKICBXcml0ZSgn0JLQstC10LTQuNGC0LUg0YHRgtGA0L7QutGDOiAnKTsKICBSZWFkTG4oUyk7CgogIFMxOj1TOwogIFMyOj1TOwoKICBXcml0ZWxuOwogIFdyaXRlbG4oJ9CY0YHRhdC+0LTQvdCw0Y8g0YHRgtGA0L7QutCwJyk7CiAgV3JpdGVsbignIicsUywnIicpOwoKICBXcml0ZWxuOwogIFdyaXRlbG4oJ9Cc0LXRgtC+0LQgMScpOwoKICBOb206PVByb3YxKFMxKTsKCiAgY2FzZSBOb20gb2YKCiAgICAxOgogICAgICBXcml0ZWxuKCfQn9GD0YHRgtCw0Y8g0YHRgtGA0L7QutCwJyk7CgogICAgMjoKICAgICAgV3JpdGVsbign0J3QtdC60L7RgNGA0LXQutGC0L3Ri9C1INGB0LjQvNCy0L7Qu9GLJyk7CgogIGVsc2UKICAgIGJlZ2luCiAgICAgIFNvcnQxKFMxKTsKICAgICAgV3JpdGVsbign0KDQtdC30YPQu9GM0YLQsNGCOicpOwogICAgICBXcml0ZWxuKCciJyxTMSwnIicpOwogICAgZW5kOwoKICBlbmQ7CgogIFdyaXRlbG47CiAgV3JpdGVsbign0JzQtdGC0L7QtCAyJyk7CgogIE5vbTo9UHJvdjIoUzIpOwoKICBjYXNlIE5vbSBvZgoKICAgIDE6CiAgICAgIFdyaXRlbG4oJ9Cf0YPRgdGC0LDRjyDRgdGC0YDQvtC60LAnKTsKCiAgICAyOgogICAgICBXcml0ZWxuKCfQndC10LrQvtGA0YDQtdC60YLQvdGL0LUg0YHQuNC80LLQvtC70YsnKTsKCiAgZWxzZQogICAgYmVnaW4KICAgICAgU29ydDIoUzIpOwogICAgICBXcml0ZWxuKCfQoNC10LfRg9C70YzRgtCw0YI6Jyk7CiAgICAgIFdyaXRlbG4oJyInLFMyLCciJyk7CiAgICBlbmQ7CgogIGVuZDsKCmVuZC4=