program Lab1_Variant23;
{$mode 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.
cHJvZ3JhbSBMYWIxX1ZhcmlhbnQyMzsKCnskbW9kZSBkZWxwaGl9Cgp1c2VzCiAgU3lzVXRpbHM7Cgpjb25zdAogIEFscGhVcCA9CiAgICAn0JDQkdCS0JPQlNCV0IHQltCX0JjQmdCa0JvQnNCd0J7Qn9Cg0KHQotCj0KTQpdCm0KfQqNCp0KrQq9Cs0K3QrtCvJzsKCiAgQWxwaExvdyA9CiAgICAn0LDQsdCy0LPQtNC10ZHQttC30LjQudC60LvQvNC90L7Qv9GA0YHRgtGD0YTRhdGG0YfRiNGJ0YrRi9GM0Y3RjtGPJzsKCiAgU3ltYlRhYmxlID0KICAgICfQkNCR0JLQk9CU0JXQgdCW0JfQmNCZ0JrQm9Cc0J3QntCf0KDQodCi0KPQpNCl0KbQp9Co0KnQqtCr0KzQrdCu0K8nICsKICAgICcwMTIzNDU2Nzg5JyArCiAgICAn0LDQsdCy0LPQtNC10ZHQttC30LjQudC60LvQvNC90L7Qv9GA0YHRgtGD0YTRhdGG0YfRiNGJ0YrRi9GM0Y3RjtGPJzsKCmNvbnN0CiAgRGlnaXRzIDogc2V0IG9mIENoYXIgPSBbJzAnLi4nOSddOwoKZnVuY3Rpb24gSXNVcHBlckN5cihDOiBDaGFyKTogQm9vbGVhbjsKYmVnaW4KICBJc1VwcGVyQ3lyIDo9IFBvcyhDLCBBbHBoVXApID4gMDsKZW5kOwoKZnVuY3Rpb24gSXNMb3dlckN5cihDOiBDaGFyKTogQm9vbGVhbjsKYmVnaW4KICBJc0xvd2VyQ3lyIDo9IFBvcyhDLCBBbHBoTG93KSA+IDA7CmVuZDsKCmZ1bmN0aW9uIFByb3YxKGNvbnN0IFM6IFN0cmluZyk6IEJ5dGU7CnZhcgogIGkgOiBJbnRlZ2VyOwpiZWdpbgoKICBpZiBMZW5ndGgoUyk9MCB0aGVuCiAgYmVnaW4KICAgIFByb3YxOj0xOwogICAgRXhpdDsKICBlbmQ7CgogIGZvciBpOj0xIHRvIExlbmd0aChTKSBkbwogICAgaWYgbm90ICgoU1tpXSBpbiBEaWdpdHMpIG9yCiAgICAgICAgICAgIElzVXBwZXJDeXIoU1tpXSkgb3IKICAgICAgICAgICAgSXNMb3dlckN5cihTW2ldKSkgdGhlbgogICAgYmVnaW4KICAgICAgUHJvdjE6PTI7CiAgICAgIEV4aXQ7CiAgICBlbmQ7CgogIFByb3YxOj0wOwplbmQ7CgpmdW5jdGlvbiBQcm92Mihjb25zdCBTOiBTdHJpbmcpOiBCeXRlOwp2YXIKICBpIDogSW50ZWdlcjsKYmVnaW4KCiAgaWYgTGVuZ3RoKFMpPTAgdGhlbgogIGJlZ2luCiAgICBQcm92Mjo9MTsKICAgIEV4aXQ7CiAgZW5kOwoKICBmb3IgaTo9MSB0byBMZW5ndGgoUykgZG8KICAgIGlmIFBvcyhTW2ldLCBTeW1iVGFibGUpPTAgdGhlbgogICAgYmVnaW4KICAgICAgUHJvdjI6PTI7CiAgICAgIEV4aXQ7CiAgICBlbmQ7CgogIFByb3YyOj0wOwplbmQ7Cgpwcm9jZWR1cmUgU29ydDEodmFyIFM6IFN0cmluZyk7CnZhcgogIGkseixsZW4gOiBJbnRlZ2VyOwogIGZsYWcgOiBCb29sZWFuOwogIGNoIDogQ2hhcjsKYmVnaW4KCiAgbGVuOj1MZW5ndGgoUyk7CiAgejo9MTsKCiAgcmVwZWF0CgogICAgZmxhZzo9VHJ1ZTsKCiAgICBmb3IgaTo9MSB0byBsZW4teiBkbwoKICAgICAgaWYKCiAgICAgICgoU1tpXSBpbiBEaWdpdHMpIGFuZCBJc1VwcGVyQ3lyKFNbaSsxXSkpCgogICAgICBvcgoKICAgICAgKElzTG93ZXJDeXIoU1tpXSkgYW5kCiAgICAgICAoSXNVcHBlckN5cihTW2krMV0pIG9yCiAgICAgICAgKFNbaSsxXSBpbiBEaWdpdHMpKSkKCiAgICAgIG9yCgogICAgICAoSXNVcHBlckN5cihTW2ldKSBhbmQKICAgICAgIElzVXBwZXJDeXIoU1tpKzFdKSBhbmQKICAgICAgIChQb3MoU1tpXSxBbHBoVXApID4KICAgICAgICBQb3MoU1tpKzFdLEFscGhVcCkpKQoKICAgICAgdGhlbgogICAgICBiZWdpbgogICAgICAgIGNoOj1TW2ldOwogICAgICAgIFNbaV06PVNbaSsxXTsKICAgICAgICBTW2krMV06PWNoOwogICAgICAgIGZsYWc6PUZhbHNlOwogICAgICBlbmQ7CgogICAgSW5jKHopOwoKICB1bnRpbCBmbGFnIG9yICh6PWxlbik7CgplbmQ7Cgpwcm9jZWR1cmUgU29ydDIodmFyIFM6IFN0cmluZyk7CnZhcgogIGkseixsZW4gOiBJbnRlZ2VyOwogIGZsYWcgOiBCb29sZWFuOwogIGNoIDogQ2hhcjsKICBwMSxwMiA6IEludGVnZXI7CmJlZ2luCgogIGxlbjo9TGVuZ3RoKFMpOwogIHo6PTE7CgogIHJlcGVhdAoKICAgIGZsYWc6PVRydWU7CgogICAgZm9yIGk6PTEgdG8gbGVuLXogZG8KICAgIGJlZ2luCgogICAgICBwMTo9UG9zKFNbaV0sU3ltYlRhYmxlKTsKICAgICAgcDI6PVBvcyhTW2krMV0sU3ltYlRhYmxlKTsKCiAgICAgIGlmCgogICAgICAoKHAxPjMzKSBhbmQgKHAxPD00MykgYW5kIChwMjw9MzMpKQoKICAgICAgb3IKCiAgICAgICgocDE+PTQ0KSBhbmQgKHAyPD00MykpCgogICAgICBvcgoKICAgICAgKElzVXBwZXJDeXIoU1tpXSkgYW5kCiAgICAgICBJc1VwcGVyQ3lyKFNbaSsxXSkgYW5kCiAgICAgICAoUG9zKFNbaV0sQWxwaFVwKSA+CiAgICAgICAgUG9zKFNbaSsxXSxBbHBoVXApKSkKCiAgICAgIHRoZW4KICAgICAgYmVnaW4KICAgICAgICBjaDo9U1tpXTsKICAgICAgICBTW2ldOj1TW2krMV07CiAgICAgICAgU1tpKzFdOj1jaDsKICAgICAgICBmbGFnOj1GYWxzZTsKICAgICAgZW5kOwoKICAgIGVuZDsKCiAgICBJbmMoeik7CgogIHVudGlsIGZsYWcgb3IgKHo9bGVuKTsKCmVuZDsKCnZhcgogIFMsUzEsUzIgOiBTdHJpbmc7CiAgTm9tIDogQnl0ZTsKCmJlZ2luCgogIFdyaXRlKCfQktCy0LXQtNC40YLQtSDRgdGC0YDQvtC60YM6ICcpOwogIFJlYWRMbihTKTsKCiAgUzE6PVM7CiAgUzI6PVM7CgogIFdyaXRlbG47CiAgV3JpdGVsbign0JjRgdGF0L7QtNC90LDRjyDRgdGC0YDQvtC60LAnKTsKICBXcml0ZWxuKCciJyxTLCciJyk7CgogIFdyaXRlbG47CiAgV3JpdGVsbign0JzQtdGC0L7QtCAxJyk7CgogIE5vbTo9UHJvdjEoUzEpOwoKICBjYXNlIE5vbSBvZgoKICAgIDE6CiAgICAgIFdyaXRlbG4oJ9Cf0YPRgdGC0LDRjyDRgdGC0YDQvtC60LAnKTsKCiAgICAyOgogICAgICBXcml0ZWxuKCfQndC10LrQvtGA0YDQtdC60YLQvdGL0LUg0YHQuNC80LLQvtC70YsnKTsKCiAgZWxzZQogICAgYmVnaW4KICAgICAgU29ydDEoUzEpOwogICAgICBXcml0ZWxuKCfQoNC10LfRg9C70YzRgtCw0YI6Jyk7CiAgICAgIFdyaXRlbG4oJyInLFMxLCciJyk7CiAgICBlbmQ7CgogIGVuZDsKCiAgV3JpdGVsbjsKICBXcml0ZWxuKCfQnNC10YLQvtC0IDInKTsKCiAgTm9tOj1Qcm92MihTMik7CgogIGNhc2UgTm9tIG9mCgogICAgMToKICAgICAgV3JpdGVsbign0J/Rg9GB0YLQsNGPINGB0YLRgNC+0LrQsCcpOwoKICAgIDI6CiAgICAgIFdyaXRlbG4oJ9Cd0LXQutC+0YDRgNC10LrRgtC90YvQtSDRgdC40LzQstC+0LvRiycpOwoKICBlbHNlCiAgICBiZWdpbgogICAgICBTb3J0MihTMik7CiAgICAgIFdyaXRlbG4oJ9Cg0LXQt9GD0LvRjNGC0LDRgjonKTsKICAgICAgV3JpdGVsbignIicsUzIsJyInKTsKICAgIGVuZDsKCiAgZW5kOwoKZW5kLg==