fork download
  1. program Lab1_Variant23;
  2.  
  3. {$mode delphi}
  4.  
  5. uses
  6. SysUtils;
  7.  
  8. const
  9. AlphUp =
  10. 'АБВГДЕЁЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯ';
  11.  
  12. AlphLow =
  13. 'абвгдеёжзийклмнопрстуфхцчшщъыьэюя';
  14.  
  15. SymbTable =
  16. 'АБВГДЕЁЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯ' +
  17. '0123456789' +
  18. 'абвгдеёжзийклмнопрстуфхцчшщъыьэюя';
  19.  
  20. const
  21. Digits : set of Char = ['0'..'9'];
  22.  
  23. function IsUpperCyr(C: Char): Boolean;
  24. begin
  25. IsUpperCyr := Pos(C, AlphUp) > 0;
  26. end;
  27.  
  28. function IsLowerCyr(C: Char): Boolean;
  29. begin
  30. IsLowerCyr := Pos(C, AlphLow) > 0;
  31. end;
  32.  
  33. function Prov1(const S: String): Byte;
  34. var
  35. i : Integer;
  36. begin
  37.  
  38. if Length(S)=0 then
  39. begin
  40. Prov1:=1;
  41. Exit;
  42. end;
  43.  
  44. for i:=1 to Length(S) do
  45. if not ((S[i] in Digits) or
  46. IsUpperCyr(S[i]) or
  47. IsLowerCyr(S[i])) then
  48. begin
  49. Prov1:=2;
  50. Exit;
  51. end;
  52.  
  53. Prov1:=0;
  54. end;
  55.  
  56. function Prov2(const S: String): Byte;
  57. var
  58. i : Integer;
  59. begin
  60.  
  61. if Length(S)=0 then
  62. begin
  63. Prov2:=1;
  64. Exit;
  65. end;
  66.  
  67. for i:=1 to Length(S) do
  68. if Pos(S[i], SymbTable)=0 then
  69. begin
  70. Prov2:=2;
  71. Exit;
  72. end;
  73.  
  74. Prov2:=0;
  75. end;
  76.  
  77. procedure Sort1(var S: String);
  78. var
  79. i,z,len : Integer;
  80. flag : Boolean;
  81. ch : Char;
  82. begin
  83.  
  84. len:=Length(S);
  85. z:=1;
  86.  
  87. repeat
  88.  
  89. flag:=True;
  90.  
  91. for i:=1 to len-z do
  92.  
  93. if
  94.  
  95. ((S[i] in Digits) and IsUpperCyr(S[i+1]))
  96.  
  97. or
  98.  
  99. (IsLowerCyr(S[i]) and
  100. (IsUpperCyr(S[i+1]) or
  101. (S[i+1] in Digits)))
  102.  
  103. or
  104.  
  105. (IsUpperCyr(S[i]) and
  106. IsUpperCyr(S[i+1]) and
  107. (Pos(S[i],AlphUp) >
  108. Pos(S[i+1],AlphUp)))
  109.  
  110. then
  111. begin
  112. ch:=S[i];
  113. S[i]:=S[i+1];
  114. S[i+1]:=ch;
  115. flag:=False;
  116. end;
  117.  
  118. Inc(z);
  119.  
  120. until flag or (z=len);
  121.  
  122. end;
  123.  
  124. procedure Sort2(var S: String);
  125. var
  126. i,z,len : Integer;
  127. flag : Boolean;
  128. ch : Char;
  129. p1,p2 : Integer;
  130. begin
  131.  
  132. len:=Length(S);
  133. z:=1;
  134.  
  135. repeat
  136.  
  137. flag:=True;
  138.  
  139. for i:=1 to len-z do
  140. begin
  141.  
  142. p1:=Pos(S[i],SymbTable);
  143. p2:=Pos(S[i+1],SymbTable);
  144.  
  145. if
  146.  
  147. ((p1>33) and (p1<=43) and (p2<=33))
  148.  
  149. or
  150.  
  151. ((p1>=44) and (p2<=43))
  152.  
  153. or
  154.  
  155. (IsUpperCyr(S[i]) and
  156. IsUpperCyr(S[i+1]) and
  157. (Pos(S[i],AlphUp) >
  158. Pos(S[i+1],AlphUp)))
  159.  
  160. then
  161. begin
  162. ch:=S[i];
  163. S[i]:=S[i+1];
  164. S[i+1]:=ch;
  165. flag:=False;
  166. end;
  167.  
  168. end;
  169.  
  170. Inc(z);
  171.  
  172. until flag or (z=len);
  173.  
  174. end;
  175.  
  176. var
  177. S,S1,S2 : String;
  178. Nom : Byte;
  179.  
  180. begin
  181.  
  182. Write('Введите строку: ');
  183. ReadLn(S);
  184.  
  185. S1:=S;
  186. S2:=S;
  187.  
  188. Writeln;
  189. Writeln('Исходная строка');
  190. Writeln('"',S,'"');
  191.  
  192. Writeln;
  193. Writeln('Метод 1');
  194.  
  195. Nom:=Prov1(S1);
  196.  
  197. case Nom of
  198.  
  199. 1:
  200. Writeln('Пустая строка');
  201.  
  202. 2:
  203. Writeln('Некорректные символы');
  204.  
  205. else
  206. begin
  207. Sort1(S1);
  208. Writeln('Результат:');
  209. Writeln('"',S1,'"');
  210. end;
  211.  
  212. end;
  213.  
  214. Writeln;
  215. Writeln('Метод 2');
  216.  
  217. Nom:=Prov2(S2);
  218.  
  219. case Nom of
  220.  
  221. 1:
  222. Writeln('Пустая строка');
  223.  
  224. 2:
  225. Writeln('Некорректные символы');
  226.  
  227. else
  228. begin
  229. Sort2(S2);
  230. Writeln('Результат:');
  231. Writeln('"',S2,'"');
  232. end;
  233.  
  234. end;
  235.  
  236. end.
Success #stdin #stdout 0s 5308KB
stdin
ЁЕА
stdout
Введите строку: 
Исходная строка
"ЁЕА"

Метод 1
Результат:
"�ЕЁ�"

Метод 2
Результат:
"��А��"