CHISLA.PAS 7.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308
  1. Uses CRT,DOS;
  2. Const
  3. s : array [1..5] of string[27] = (' Простое ',
  4. ' Взаимно простые ',
  5. ' Совершенное ',
  6. ' Дружественные ',
  7. ' Выход ');
  8. text1 : array [1..5] of string[50] = (' Узнать простое ли число ',
  9. ' Узнать взаимно простые ли 2 числа ',
  10. ' Узнать совершенное ли число ',
  11. ' Узнать дружественные ли 2 числа ',
  12. ' Выход из программмы ');
  13. Var
  14. IfExit : boolean;
  15. CurMenu : integer;
  16. {-------------------------------------------}
  17. Procedure SetCursorSize(size:word);
  18. var
  19. reg : registers;
  20. begin
  21. with reg do begin
  22. AH := $01;
  23. CH := hi(size);
  24. CL := lo(size);
  25. Intr($10,reg);
  26. end;
  27. end;
  28. {------------------------------------------}
  29. Function ReadVal(st:string) : longint;
  30. Var
  31. rc : real;
  32. code : integer;
  33. tm : string[35];
  34. ch : char;
  35. x,r : byte;
  36. Begin
  37. TextColor(LightGray);
  38. GotoXY(24,20);
  39. Write(' ');
  40. GotoXY(24,20);
  41. Write(st);
  42. SetCursorSize(12*43);
  43. x := 24;
  44. repeat
  45. tm := '';
  46. GotoXY(24,22);
  47. Write(' ');
  48. GotoXY(24,22);
  49. Code := 0;
  50. x := 24;
  51. r := 1;
  52. ch := readkey;
  53. if ch = #13 then code := 1;
  54. While ch <> #13 do begin
  55. if ch in [#48..#57] then
  56. if x < 59 then
  57. begin
  58. tm := concat(tm,ch);
  59. GotoXY(x,22);
  60. Write(ch);
  61. inc(x);
  62. inc(r)
  63. end;
  64. if ch = #8 then
  65. if r > 0 then
  66. begin
  67. delete(tm,length(tm),1);
  68. dec(x);
  69. dec(r);
  70. GotoXY(x,22);
  71. Write(' ');
  72. GotoXY(x,22);
  73. end;
  74. ch := readkey;
  75. end;
  76. if length(tm) > 10 then code := 1
  77. else
  78. begin
  79. Val(tm,rc,code);
  80. if rc <= 0 then code := 1;
  81. end;
  82. until code = 0;
  83. ReadVal := trunc(rc);
  84. SetCursorSize(16*16);
  85. GotoXY(23,22);
  86. Write(' ');
  87. GotoXY(23,20);
  88. Write(' ')
  89. End{ReadVal};
  90. {---------------------------------------}
  91. Procedure Simple;
  92. Var
  93. v1 : longint;
  94. i : integer;
  95. Begin
  96. v1 := ReadVal('Введите целое число ');
  97. i := 2;
  98. while (v1 mod i <> 0) and (i < v1) do inc(i);
  99. GotoXY(24,20);
  100. Write(' ');
  101. GotoXY(24,20);
  102. if i = v1 then
  103. begin
  104. TextColor(LightGray);
  105. WriteLn('Число ',v1,' простое');
  106. end
  107. else
  108. begin
  109. TextColor(LightGray);
  110. WriteLn('Число ',v1,' имеет делитель ',i);
  111. end;
  112. ReadKey;
  113. GotoXY(23,20);
  114. Write(' ');
  115. End;{Simple}
  116. {---------------------------------}
  117. Procedure SimpleTwice;
  118. Var
  119. v2 : longint;
  120. v1 : longint;
  121. i : integer;
  122. Begin
  123. v1 := ReadVal('Введите первое число ');
  124. v2 := ReadVal('Введите второе число ');
  125. i := 2;
  126. while not ((v1 mod i = 0) and (v2 mod i = 0)) and (i <= v1) do inc(i);
  127. GotoXY(24,20);
  128. Write(' ');
  129. GotoXY(24,20);
  130. if (i = v1+1) and (v2 mod v1 <> 0) then
  131. begin
  132. TextColor(LightGray);
  133. WriteLn('Числа взаимно простые');
  134. end
  135. else
  136. begin
  137. TextColor(LightGray);
  138. WriteLn('Числа имеют общий делитель ',i);
  139. end;
  140. ReadKey;
  141. GotoXY(23,20);
  142. Write(' ');
  143. End;{SimpleTwice}
  144. {-------------------------------}
  145. Procedure Perfect;
  146. Var
  147. v1 : longint;
  148. i : integer;
  149. summa : longint;
  150. Begin
  151. v1 := ReadVal('Введите целое число ');
  152. i := 1;
  153. summa := 0;
  154. for i := 1 to v1-1 do
  155. if v1 mod i = 0 then Inc(summa,i);
  156. GotoXY(24,20);
  157. Write(' ');
  158. GotoXY(24,20);
  159. if summa = v1 then
  160. begin
  161. TextColor(LightGray);
  162. WriteLn('Число ',v1, ' совершенное');
  163. end
  164. else
  165. begin
  166. TextColor(LightGray);
  167. WriteLn('Число ',v1, ' не совершенное ');
  168. end;
  169. ReadKey;
  170. GotoXY(23,20);
  171. Write(' ');
  172. End;{Perfect}
  173. {-------------------------------}
  174. Procedure Friend;
  175. Var
  176. v2 : longint;
  177. v1 : longint;
  178. i : integer;
  179. summa1,summa2 : longint;
  180. Begin
  181. v1 := ReadVal('Введите первое число ');
  182. v2 := ReadVal('Введите второе число ');
  183. i := 2;
  184. summa1 := 0;
  185. summa2 := 0;
  186. for i := 1 to v1-1 do
  187. if v1 mod i = 0 then Inc(summa1,i);
  188. for i := 1 to v2-1 do
  189. if v2 mod i = 0 then Inc(summa2,i);
  190. GotoXY(24,20);
  191. Write(' ');
  192. GotoXY(24,20);
  193. if (summa1 = v2) and (summa2 = v1) then
  194. begin
  195. TextColor(LightGray);
  196. WriteLn('Числа дружественные');
  197. end
  198. else
  199. begin
  200. TextColor(LightGray);
  201. WriteLn('Числа не дружественные');
  202. end;
  203. ReadKey;
  204. GotoXY(23,20);
  205. Write(' ');
  206. End;{Friend}
  207. {-------------------------------}
  208. Procedure ChangeMenu(MoveUP : integer);
  209. Begin
  210. CurMenu := Curmenu + MoveUp;
  211. GotoXY(28,5+(CurMenu*2));
  212. TextColor(Blue);
  213. TextBackGround(Green);
  214. Write(s[CurMenu]);
  215. GotoXY(28,5+((CurMenu-MoveUp)*2));
  216. TextColor(Blue);
  217. TextBackGround(black);
  218. Write(s[CurMenu-Moveup]);
  219. TextColor(lightgray);
  220. GotoXY(23,20);
  221. Write(' ');
  222. GotoXY(23,20);
  223. Write(text1[curmenu]);
  224. End;{ChangeMenu}
  225. {--------------------------------}
  226. Procedure Init;
  227. Var
  228. i : byte;
  229. Begin
  230. ClrScr;
  231. IFExit := false;
  232. SetCursorSize(16*16);
  233. TextColor(Green);
  234. GotoXY(2,2);Write('╔');GotoXY(2,24);Write('╚');GotoXY(79,2);Write('╗');
  235. GotoXY(79,24);Write('╝');GotoXY(1,1);
  236. for i := 3 to 78 do
  237. begin
  238. GotoXY(i,2);
  239. Write('═');
  240. GotoXY(i,24);
  241. Write('═')
  242. end;
  243. For i := 3 to 23 do
  244. begin
  245. GotoXY(2,i);
  246. Write('║');
  247. GotoXY(79,i);
  248. Write('║')
  249. end;
  250. TextColor(Blue);
  251. for i:= 1 to 5 do
  252. begin
  253. GotoXY(28,5+(i*2));
  254. Write(s[i]);
  255. end;
  256. CurMenu := 2;
  257. ChangeMenu(-1);
  258. TextColor(Magenta);
  259. For i := 23 to 59 do
  260. begin
  261. GotoXY(i,19);
  262. Write('═');
  263. GotoXY(i,21);
  264. Write('═');
  265. GotoXY(i,23);
  266. Write('═');
  267. end;
  268. GotoXY(22,19); Write('╔'); GotoXY(22,20); Write('║'); GotoXY(22,23);
  269. Write('╚'); GotoXY(60,19); Write('╗'); GotoXY(60,20); Write('║');
  270. GotoXY(60,22); Write('║'); GotoXY(22,22); Write('║'); GotoXY(60,23);
  271. Write('╝'); GotoXY(22,21); Write('╠'); GotoXY(60,21); Write('╣');
  272. End;{Init}
  273. {--------------------------------}
  274. Procedure Main;
  275. Var
  276. ch : char;
  277. Begin
  278. repeat
  279. if KeyPressed then
  280. begin
  281. ch := readkey;
  282. if ch = #0 then ch := readkey;
  283. case ch of
  284. #27 : IfExit := true;
  285. #72 : if CurMenu <> 1 then ChangeMenu(-1);
  286. #80 : if CurMenu <> 5 then ChangeMenu(1);
  287. #13 : Case CurMenu of
  288. 1 :Simple;
  289. 2 :SimpleTwice;
  290. 3 :Perfect;
  291. 4 :Friend;
  292. 5 :IfExit := true;
  293. end;
  294. end;
  295. end;
  296. until IFExit;
  297. End;{Main}
  298. {--------------------------------}
  299. Begin
  300. init;
  301. Main;
  302. End.