program Lab1_Variant23;
uses SysUtils;
const
AlphUp =
'АБВГДЕЁЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯ';
AlphLow =
'абвгдеёжзийклмнопрстуфхцчшщъыьэюя';
SymbTable =
'АБВГДЕЁЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯ' +
'0123456789' +
'абвгдеёжзийклмнопрстуфхцчшщъыьэюя';
function IsDigit(C: Char): Boolean;
begin
IsDigit := (C >= '0') and (C <= '9');
end;
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 (
IsDigit(S[i])
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
(IsDigit(S[i]) and IsUpperCyr(S[i+1]))
or
(IsLowerCyr(S[i]) and
(IsUpperCyr(S[i+1]) or IsDigit(S[i+1])))
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;
begin
len:=Length(S);
z:=1;
repeat
flag:=True;
for i:=1 to len-z do
if
(
Pos(S[i],SymbTable)
>
Pos(S[i+1],SymbTable)
)
and
not
(
IsDigit(S[i])
and
IsDigit(S[i+1])
)
and
not
(
IsLowerCyr(S[i])
and
IsLowerCyr(S[i+1])
)
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;
var
S,S1,S2 : String;
Nom : Byte;
begin
Writeln('Введите строку');
Readln(S);
S1:=S;
S2:=S;
Writeln;
Writeln('Исходная строка: "',S,'"');
Writeln;
Writeln('Метод 1');
Nom:=Prov1(S1);
case Nom of
1:
Writeln('Пустая строка');
2:
Writeln('Некорректные символы');
else
begin
Sort1(S1);
Writeln('Результат: "',S1,'"');
end;
end;
Writeln;
Writeln('Метод 2');
Nom:=Prov2(S2);
case Nom of
1:
Writeln('Пустая строка');
2:
Writeln('Некорректные символы');
else
begin
Sort2(S2);
Writeln('Результат: "',S2,'"');
end;
end;
end.
cHJvZ3JhbSBMYWIxX1ZhcmlhbnQyMzsKCnVzZXMgU3lzVXRpbHM7Cgpjb25zdAogIEFscGhVcCA9CiAgJ9CQ0JHQktCT0JTQldCB0JbQl9CY0JnQmtCb0JzQndCe0J/QoNCh0KLQo9Ck0KXQptCn0KjQqdCq0KvQrNCt0K7Qryc7CgogIEFscGhMb3cgPQogICfQsNCx0LLQs9C00LXRkdC20LfQuNC50LrQu9C80L3QvtC/0YDRgdGC0YPRhNGF0YbRh9GI0YnRitGL0YzRjdGO0Y8nOwoKICBTeW1iVGFibGUgPQogICfQkNCR0JLQk9CU0JXQgdCW0JfQmNCZ0JrQm9Cc0J3QntCf0KDQodCi0KPQpNCl0KbQp9Co0KnQqtCr0KzQrdCu0K8nICsKICAnMDEyMzQ1Njc4OScgKwogICfQsNCx0LLQs9C00LXRkdC20LfQuNC50LrQu9C80L3QvtC/0YDRgdGC0YPRhNGF0YbRh9GI0YnRitGL0YzRjdGO0Y8nOwoKZnVuY3Rpb24gSXNEaWdpdChDOiBDaGFyKTogQm9vbGVhbjsKYmVnaW4KICBJc0RpZ2l0IDo9IChDID49ICcwJykgYW5kIChDIDw9ICc5Jyk7CmVuZDsKCmZ1bmN0aW9uIElzVXBwZXJDeXIoQzogQ2hhcik6IEJvb2xlYW47CmJlZ2luCiAgSXNVcHBlckN5ciA6PSBQb3MoQywgQWxwaFVwKSA+IDA7CmVuZDsKCmZ1bmN0aW9uIElzTG93ZXJDeXIoQzogQ2hhcik6IEJvb2xlYW47CmJlZ2luCiAgSXNMb3dlckN5ciA6PSBQb3MoQywgQWxwaExvdykgPiAwOwplbmQ7CgpmdW5jdGlvbiBQcm92MShjb25zdCBTOiBTdHJpbmcpOiBCeXRlOwp2YXIKICBpOiBJbnRlZ2VyOwpiZWdpbgoKICBpZiBMZW5ndGgoUyk9MCB0aGVuCiAgYmVnaW4KICAgIFByb3YxOj0xOwogICAgRXhpdDsKICBlbmQ7CgogIGZvciBpOj0xIHRvIExlbmd0aChTKSBkbwogICAgaWYgbm90ICgKICAgICAgIElzRGlnaXQoU1tpXSkKICAgICAgIG9yCiAgICAgICBJc1VwcGVyQ3lyKFNbaV0pCiAgICAgICBvcgogICAgICAgSXNMb3dlckN5cihTW2ldKQogICAgKSB0aGVuCiAgICBiZWdpbgogICAgICBQcm92MTo9MjsKICAgICAgRXhpdDsKICAgIGVuZDsKCiAgUHJvdjE6PTA7CmVuZDsKCmZ1bmN0aW9uIFByb3YyKGNvbnN0IFM6IFN0cmluZyk6IEJ5dGU7CnZhcgogIGk6IEludGVnZXI7CmJlZ2luCgogIGlmIExlbmd0aChTKT0wIHRoZW4KICBiZWdpbgogICAgUHJvdjI6PTE7CiAgICBFeGl0OwogIGVuZDsKCiAgZm9yIGk6PTEgdG8gTGVuZ3RoKFMpIGRvCiAgICBpZiBQb3MoU1tpXSxTeW1iVGFibGUpPTAgdGhlbgogICAgYmVnaW4KICAgICAgUHJvdjI6PTI7CiAgICAgIEV4aXQ7CiAgICBlbmQ7CgogIFByb3YyOj0wOwplbmQ7Cgpwcm9jZWR1cmUgU29ydDEodmFyIFM6IFN0cmluZyk7CnZhcgogIGkseixsZW4gOiBJbnRlZ2VyOwogIGZsYWcgOiBCb29sZWFuOwogIGNoIDogQ2hhcjsKYmVnaW4KCiAgbGVuOj1MZW5ndGgoUyk7CiAgejo9MTsKCiAgcmVwZWF0CgogICAgZmxhZzo9VHJ1ZTsKCiAgICBmb3IgaTo9MSB0byBsZW4teiBkbwoKICAgICAgaWYKCiAgICAgIChJc0RpZ2l0KFNbaV0pIGFuZCBJc1VwcGVyQ3lyKFNbaSsxXSkpCgogICAgICBvcgoKICAgICAgKElzTG93ZXJDeXIoU1tpXSkgYW5kCiAgICAgIChJc1VwcGVyQ3lyKFNbaSsxXSkgb3IgSXNEaWdpdChTW2krMV0pKSkKCiAgICAgIG9yCgogICAgICAoCiAgICAgIElzVXBwZXJDeXIoU1tpXSkKICAgICAgYW5kCiAgICAgIElzVXBwZXJDeXIoU1tpKzFdKQogICAgICBhbmQKICAgICAgKAogICAgICBQb3MoU1tpXSxBbHBoVXApCiAgICAgID4KICAgICAgUG9zKFNbaSsxXSxBbHBoVXApCiAgICAgICkKICAgICAgKQoKICAgICAgdGhlbgogICAgICBiZWdpbgoKICAgICAgICBjaDo9U1tpXTsKICAgICAgICBTW2ldOj1TW2krMV07CiAgICAgICAgU1tpKzFdOj1jaDsKCiAgICAgICAgZmxhZzo9RmFsc2U7CgogICAgICBlbmQ7CgogICAgSW5jKHopOwoKICB1bnRpbCBmbGFnIG9yICh6PWxlbik7CgplbmQ7Cgpwcm9jZWR1cmUgU29ydDIodmFyIFM6IFN0cmluZyk7CnZhcgogIGkseixsZW4gOiBJbnRlZ2VyOwogIGZsYWcgOiBCb29sZWFuOwogIGNoIDogQ2hhcjsKYmVnaW4KCiAgbGVuOj1MZW5ndGgoUyk7CiAgejo9MTsKCiAgcmVwZWF0CgogICAgZmxhZzo9VHJ1ZTsKCiAgICBmb3IgaTo9MSB0byBsZW4teiBkbwoKICAgICAgaWYKCiAgICAgICgKICAgICAgUG9zKFNbaV0sU3ltYlRhYmxlKQogICAgICA+CiAgICAgIFBvcyhTW2krMV0sU3ltYlRhYmxlKQogICAgICApCgogICAgICBhbmQKCiAgICAgIG5vdAogICAgICAoCiAgICAgIElzRGlnaXQoU1tpXSkKICAgICAgYW5kCiAgICAgIElzRGlnaXQoU1tpKzFdKQogICAgICApCgogICAgICBhbmQKCiAgICAgIG5vdAogICAgICAoCiAgICAgIElzTG93ZXJDeXIoU1tpXSkKICAgICAgYW5kCiAgICAgIElzTG93ZXJDeXIoU1tpKzFdKQogICAgICApCgogICAgICB0aGVuCiAgICAgIGJlZ2luCgogICAgICAgIGNoOj1TW2ldOwogICAgICAgIFNbaV06PVNbaSsxXTsKICAgICAgICBTW2krMV06PWNoOwoKICAgICAgICBmbGFnOj1GYWxzZTsKCiAgICAgIGVuZDsKCiAgICBJbmMoeik7CgogIHVudGlsIGZsYWcgb3IgKHo9bGVuKTsKCmVuZDsKCnZhcgogIFMsUzEsUzIgOiBTdHJpbmc7CiAgTm9tIDogQnl0ZTsKCmJlZ2luCgogIFdyaXRlbG4oJ9CS0LLQtdC00LjRgtC1INGB0YLRgNC+0LrRgycpOwogIFJlYWRsbihTKTsKCiAgUzE6PVM7CiAgUzI6PVM7CgogIFdyaXRlbG47CiAgV3JpdGVsbign0JjRgdGF0L7QtNC90LDRjyDRgdGC0YDQvtC60LA6ICInLFMsJyInKTsKCiAgV3JpdGVsbjsKICBXcml0ZWxuKCfQnNC10YLQvtC0IDEnKTsKCiAgTm9tOj1Qcm92MShTMSk7CgogIGNhc2UgTm9tIG9mCgogICAgMToKICAgICAgV3JpdGVsbign0J/Rg9GB0YLQsNGPINGB0YLRgNC+0LrQsCcpOwoKICAgIDI6CiAgICAgIFdyaXRlbG4oJ9Cd0LXQutC+0YDRgNC10LrRgtC90YvQtSDRgdC40LzQstC+0LvRiycpOwoKICBlbHNlCiAgICBiZWdpbgogICAgICBTb3J0MShTMSk7CiAgICAgIFdyaXRlbG4oJ9Cg0LXQt9GD0LvRjNGC0LDRgjogIicsUzEsJyInKTsKICAgIGVuZDsKCiAgZW5kOwoKICBXcml0ZWxuOwogIFdyaXRlbG4oJ9Cc0LXRgtC+0LQgMicpOwoKICBOb206PVByb3YyKFMyKTsKCiAgY2FzZSBOb20gb2YKCiAgICAxOgogICAgICBXcml0ZWxuKCfQn9GD0YHRgtCw0Y8g0YHRgtGA0L7QutCwJyk7CgogICAgMjoKICAgICAgV3JpdGVsbign0J3QtdC60L7RgNGA0LXQutGC0L3Ri9C1INGB0LjQvNCy0L7Qu9GLJyk7CgogIGVsc2UKICAgIGJlZ2luCiAgICAgIFNvcnQyKFMyKTsKICAgICAgV3JpdGVsbign0KDQtdC30YPQu9GM0YLQsNGCOiAiJyxTMiwnIicpOwogICAgZW5kOwoKICBlbmQ7CgplbmQu