Advertisement
gguuppyy

форма13

Feb 20th, 2024 (edited)
27
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 20.12 KB | None | 0 0
  1. Unit Main;
  2.  
  3. Interface
  4.  
  5. Uses
  6. Winapi.Windows,
  7. Winapi.Messages,
  8. System.SysUtils,
  9. System.Variants,
  10. System.Classes,
  11. Vcl.Graphics,
  12. Clipbrd,
  13. Vcl.Controls,
  14. Vcl.Forms,
  15. Vcl.Dialogs,
  16. Vcl.StdCtrls,
  17. Vcl.Menus,
  18. Vcl.ExtCtrls,
  19. Vcl.Imaging.Pngimage;
  20.  
  21. Type
  22. TMainForm = Class(TForm)
  23. Button1: TButton;
  24. EditA: TEdit;
  25. EditB: TEdit;
  26. MainMenu1: TMainMenu;
  27. N1: TMenuItem;
  28. N2: TMenuItem;
  29. N3: TMenuItem;
  30. N4: TMenuItem;
  31. N5: TMenuItem;
  32. Y1: TLabel;
  33. X: TLabel;
  34. BalloonHint1: TBalloonHint;
  35. OpenDialog1: TOpenDialog;
  36. SaveDialog1: TSaveDialog;
  37. Y: TLabel;
  38. Result: TMemo;
  39. LabelTask: TLabel;
  40. ImageTask: TImage;
  41. EditC: TEdit;
  42. EditD: TEdit;
  43. Label1: TLabel;
  44. Label2: TLabel;
  45. Label3: TLabel;
  46. Label4: TLabel;
  47. Procedure Button1Click(Sender: TObject);
  48.  
  49. Procedure N2Click(Sender: TObject);
  50. Procedure N5Click(Sender: TObject);
  51.  
  52. Procedure EditBKeyPress(Sender: TObject; Var Key: Char);
  53. Procedure EditAKeyPress(Sender: TObject; Var Key: Char);
  54. Procedure N3Click(Sender: TObject);
  55. Procedure GetPath(Var Path: String);
  56. Procedure N4Click(Sender: TObject);
  57. Procedure Checker(Var IsCorrect: Boolean);
  58. Procedure N1Click(Sender: TObject);
  59. Procedure EditAChange(Sender: TObject);
  60. Procedure EditBChange(Sender: TObject);
  61. Procedure FormMouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer);
  62. Procedure FormCloseQuery(Sender: TObject; Var CanClose: Boolean);
  63. Procedure EditRadMouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer);
  64. Procedure EditAMouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer);
  65. Procedure EditBMouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer);
  66. Procedure FormMouseEnter(Sender: TObject);
  67. Procedure EditCChange(Sender: TObject);
  68. Procedure EditCKeyPress(Sender: TObject; Var Key: Char);
  69. Procedure EditDKeyPress(Sender: TObject; Var Key: Char);
  70. Procedure EditDChange(Sender: TObject);
  71. Procedure EditCMouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer);
  72. Procedure EditDMouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer);
  73. Private
  74. { Private declarations }
  75. Public
  76. { Public declarations }
  77. End;
  78.  
  79. Const
  80. E: Double = 1.0E-3;
  81. NumSet = ['0', '1', '2', '3', '4', '5', '6', '7', '8', '9', #8, #44, #45, #46];
  82.  
  83. Var
  84. MainForm: TMainForm;
  85.  
  86. Implementation
  87.  
  88. {$R *.dfm}
  89.  
  90. Uses
  91. Instruction,
  92. Information;
  93.  
  94. Procedure TmainForm.Checker(Var IsCorrect: Boolean);
  95.  
  96. Begin
  97. IsCorrect := True;
  98.  
  99. Try
  100. StrtoFloat(EditA.Text);
  101. Except
  102. IsCorrect := False;
  103. End;
  104.  
  105. Try
  106.  
  107. StrtoFloat(EditB.Text);
  108. Except
  109. IsCorrect := False;
  110. End;
  111.  
  112. End;
  113.  
  114. Function NOD(A, B: Integer): Integer;
  115. Var
  116. Temp: Integer;
  117. Begin
  118. While B <> 0 Do
  119. Begin
  120. Temp := B;
  121. B := A Mod B;
  122. A := Temp;
  123. End;
  124. NOD := A;
  125. End;
  126.  
  127. Function CheckNum(A, B: INTEGER): Boolean;
  128.  
  129. begin
  130. Result := Abs(A) < Abs(B);
  131. end;
  132.  
  133. Function ChecSokr(A, B: INTEGER): Boolean;
  134.  
  135. begin
  136. Result := not((NOD(abs(a),abs(b)) <> 1) or ((a<0) and (b<0)));
  137. end;
  138.  
  139. Procedure TMainForm.Button1Click(Sender: TObject);
  140. Var
  141. A, B, C, D, NumEnd, DenomEnd, Temp: Integer;
  142. IsCorrect: Boolean;
  143. Begin
  144. A := StrtoInt(EditA.Text);
  145. B := StrtoInt(EditB.Text);
  146. C := StrtoInt(EditC.Text);
  147. D := StrtoInt(EditD.Text);
  148. Checker(IsCorrect);
  149. if not (checknum(a,b) and checknum(c,d)) Then
  150. ShowMessage('Введите обыкновенные дроби.')
  151. else if not (ChecSokr(A, B) and ChecSokr(c, d)) then
  152. ShowMessage('Введите несократимые дроби.')
  153.  
  154. else if IsCorrect Then
  155. Begin
  156.  
  157.  
  158. DenomEnd := B * D;
  159. NumEnd := A * D + C * B;
  160.  
  161. If (NumEnd > DenomEnd) Then
  162. Temp := DenomEnd
  163. Else
  164. Temp := NumEnd;
  165.  
  166. While (Temp > 0) Do
  167. Begin
  168. If (DenomEnd Mod Temp = 0) And (NumEnd Mod Temp = 0) Then
  169. Begin
  170. DenomEnd := DenomEnd Div Temp;
  171. NumEnd := NumEnd Div Temp;
  172. End;
  173. Dec(Temp);
  174. End;
  175. Temp := NOD(Abs(NumEnd), Abs(DenomEnd));
  176. NumEnd := NumEnd Div Temp;
  177. DenomEnd := DenomEnd Div Temp;
  178.  
  179. If NumEnd Mod DenomEnd = 0 Then
  180. Begin
  181. Result.Lines.Clear;
  182. Result.Lines.Add('Искомая дробь: ' + IntToStr(NumEnd div DenomEnd));
  183. End
  184. Else
  185. Begin
  186. Result.Lines.Clear;
  187. Result.Lines.Add('Искомая дробь: ' + IntToStr(NumEnd) + '/' + IntToStr(DenomEnd));
  188. End;
  189.  
  190.  
  191. End
  192. Else
  193. Begin
  194. ShowMessage('Заполните все поля');
  195. End;
  196.  
  197. End;
  198.  
  199. Procedure TMainForm.EditBChange(Sender: TObject);
  200. Begin
  201. EditB.MaxLength := 6;
  202. If Length(EditB.Text) = 0 Then
  203. Begin
  204. Result.Lines.Clear;
  205. End;
  206. End;
  207.  
  208. Procedure TMainForm.EditBKeyPress(Sender: TObject; Var Key: Char);
  209. Begin
  210. If Key In NumSet Then
  211. Begin
  212. If Key = '0' Then
  213. Begin
  214. If Length(EditB.Text) = 1 Then
  215. Begin
  216. If EditB.Text[1] In ['0'] Then
  217. Begin
  218. Key := #0;
  219. End;
  220. End;
  221. If Length(EditB.Text) = 2 Then
  222. Begin
  223. If (EditB.Text[1] = '-') AND (EditB.Text[2] = '0') Then
  224. Begin
  225. Key := #0;
  226. End;
  227. End;
  228. End;
  229.  
  230. If Key = #45 Then
  231. Begin
  232. If Length(EditB.Text) > 0 Then
  233. Begin
  234. BalloonHint1.Title := 'Недопустимый символ.';
  235. BalloonHint1.Description := 'Здесь можно ввести только число.';
  236. BalloonHint1.ImageIndex := 1;
  237. BalloonHint1.ShowHint(EditB);
  238. Key := #0;
  239. End;
  240. End;
  241.  
  242. if Key = '0' then // Проверяем знак минус
  243. begin
  244. BalloonHint1.Title := 'Недопустимый символ.';
  245. BalloonHint1.Description := 'Здесь можно ввести только число неравное 0.';
  246. BalloonHint1.ImageIndex := 1;
  247. BalloonHint1.ShowHint(EditB);
  248. Key := #0;
  249. end;
  250.  
  251. If Key In [',', '.'] Then
  252. Begin
  253. Key := FormatSettings.DecimalSeparator;
  254. If Pos(Key, EditB.Text) <> 0 Then
  255. Begin
  256. BalloonHint1.Title := 'Недопустимый символ.';
  257. BalloonHint1.Description := 'Здесь можно ввести только число.';
  258. BalloonHint1.ImageIndex := 1;
  259. BalloonHint1.ShowHint(EditB);
  260. Key := #0;
  261. End
  262. Else
  263. If Length(EditB.Text) > 0 Then
  264. Begin
  265. If (EditB.Text[1] = '-') AND (Length(EditB.Text) = 1) Then
  266. Begin
  267. Key := #0;
  268. End
  269. End
  270. Else
  271. If EditB.SelStart = 0 Then
  272. Begin
  273. EditB.Text := '0' + EditB.Text;
  274. EditB.SelStart := 1;
  275. End;
  276. End;
  277. End
  278. Else
  279. Begin
  280. BalloonHint1.Title := 'Недопустимый символ.';
  281. BalloonHint1.Description := 'Здесь можно ввести только число..';
  282. BalloonHint1.ImageIndex := 1;
  283. BalloonHint1.ShowHint(EditB);
  284. Key := #0;
  285. End;
  286. End;
  287.  
  288. Procedure TMainForm.EditBMouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer);
  289. Begin
  290. Clipboard.Clear;
  291. End;
  292.  
  293. Procedure TMainForm.EditCChange(Sender: TObject);
  294. Begin
  295. EditC.MaxLength := 6;
  296. If Length(EditC.Text) = 0 Then
  297. Begin
  298. Result.Lines.Clear;
  299. End;
  300. End;
  301.  
  302. Procedure TMainForm.EditCKeyPress(Sender: TObject; Var Key: Char);
  303. Begin
  304. If Key In NumSet Then
  305. Begin
  306. If Key = '0' Then
  307. Begin
  308. If Length(EditC.Text) = 1 Then
  309. Begin
  310. If EditC.Text[1] In ['0'] Then
  311. Begin
  312. Key := #0;
  313. End;
  314. End;
  315. If Length(EditC.Text) = 2 Then
  316. Begin
  317. If (EditC.Text[1] = '-') AND (EditC.Text[2] = '0') Then
  318. Begin
  319. Key := #0;
  320. End;
  321. End;
  322. End;
  323.  
  324. If Key = #45 Then
  325. Begin
  326. If Length(EditC.Text) > 0 Then
  327. Begin
  328. BalloonHint1.Title := 'Недопустимый символ.';
  329. BalloonHint1.Description := 'Здесь можно ввести только число.';
  330. BalloonHint1.ImageIndex := 1;
  331. BalloonHint1.ShowHint(EditC);
  332. Key := #0;
  333. End;
  334. End;
  335.  
  336. If Key In [',', '.'] Then
  337. Begin
  338. Key := FormatSettings.DecimalSeparator;
  339. If Pos(Key, EditC.Text) <> 0 Then
  340. Begin
  341. BalloonHint1.Title := 'Недопустимый символ.';
  342. BalloonHint1.Description := 'Здесь можно ввести только число.';
  343. BalloonHint1.ImageIndex := 1;
  344. BalloonHint1.ShowHint(EditC);
  345. Key := #0;
  346. End
  347. Else
  348. If Length(EditC.Text) > 0 Then
  349. Begin
  350. If (EditC.Text[1] = '-') AND (Length(EditC.Text) = 1) Then
  351. Begin
  352. Key := #0;
  353. End
  354. End
  355. Else
  356. If EditC.SelStart = 0 Then
  357. Begin
  358. EditC.Text := '0' + EditB.Text;
  359. EditC.SelStart := 1;
  360. End;
  361. End;
  362. End
  363. Else
  364. Begin
  365. BalloonHint1.Title := 'Недопустимый символ.';
  366. BalloonHint1.Description := 'Здесь можно ввести только число..';
  367. BalloonHint1.ImageIndex := 1;
  368. BalloonHint1.ShowHint(EditC);
  369. Key := #0;
  370. End;
  371. End;
  372.  
  373. Procedure TMainForm.EditCMouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer);
  374. Begin
  375. Clipboard.Clear;
  376. End;
  377.  
  378. Procedure TMainForm.EditDChange(Sender: TObject);
  379. Begin
  380. EditD.MaxLength := 6;
  381. If Length(EditD.Text) = 0 Then
  382. Begin
  383. Result.Lines.Clear;
  384. End;
  385. End;
  386.  
  387. Procedure TMainForm.EditDKeyPress(Sender: TObject; Var Key: Char);
  388. Begin
  389. If Key In NumSet Then
  390. Begin
  391. If Key = '0' Then
  392. Begin
  393. If Length(EditD.Text) = 1 Then
  394. Begin
  395. If EditD.Text[1] In ['0'] Then
  396. Begin
  397. Key := #0;
  398. End;
  399. End;
  400. If Length(EditD.Text) = 2 Then
  401. Begin
  402. If (EditD.Text[1] = '-') AND (EditD.Text[2] = '0') Then
  403. Begin
  404. Key := #0;
  405. End;
  406. End;
  407. End;
  408.  
  409. If Key = #45 Then
  410. Begin
  411. If Length(EditD.Text) > 0 Then
  412. Begin
  413. BalloonHint1.Title := 'Недопустимый символ.';
  414. BalloonHint1.Description := 'Здесь можно ввести только число.';
  415. BalloonHint1.ImageIndex := 1;
  416. BalloonHint1.ShowHint(EditD);
  417. Key := #0;
  418. End;
  419. End;
  420.  
  421. if Key = '0' then // Проверяем знак минус
  422. begin
  423. BalloonHint1.Title := 'Недопустимый символ.';
  424. BalloonHint1.Description := 'Здесь можно ввести только число неравное 0.';
  425. BalloonHint1.ImageIndex := 1;
  426. BalloonHint1.ShowHint(EditD);
  427. Key := #0;
  428. end;
  429.  
  430. If Key In [',', '.'] Then
  431. Begin
  432. Key := FormatSettings.DecimalSeparator;
  433. If Pos(Key, EditD.Text) <> 0 Then
  434. Begin
  435. BalloonHint1.Title := 'Недопустимый символ.';
  436. BalloonHint1.Description := 'Здесь можно ввести только число.';
  437. BalloonHint1.ImageIndex := 1;
  438. BalloonHint1.ShowHint(EditD);
  439. Key := #0;
  440. End
  441. Else
  442. If Length(EditD.Text) > 0 Then
  443. Begin
  444. If (EditD.Text[1] = '-') AND (Length(EditD.Text) = 1) Then
  445. Begin
  446. Key := #0;
  447. End
  448. End
  449. Else
  450. If EditD.SelStart = 0 Then
  451. Begin
  452. EditD.Text := '0' + EditD.Text;
  453. EditD.SelStart := 1;
  454. End;
  455. End;
  456. End
  457. Else
  458. Begin
  459. BalloonHint1.Title := 'Недопустимый символ.';
  460. BalloonHint1.Description := 'Здесь можно ввести только число..';
  461. BalloonHint1.ImageIndex := 1;
  462. BalloonHint1.ShowHint(EditD);
  463. Key := #0;
  464. End;
  465. End;
  466.  
  467. Procedure TMainForm.EditDMouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer);
  468. Begin
  469. Clipboard.Clear;
  470. End;
  471.  
  472. Procedure TMainForm.EditRadMouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer);
  473. Begin
  474. Clipboard.Clear;
  475. End;
  476.  
  477. Procedure TMainForm.FormCloseQuery(Sender: TObject; Var CanClose: Boolean);
  478. Var
  479. Confirmation: Integer;
  480. Begin
  481. Confirmation := Application.MessageBox('Вы действительно хотите выйти?', 'Выход', MB_YESNO);
  482. CanClose := Confirmation = IDYES;
  483. End;
  484.  
  485. Procedure TMainForm.FormMouseEnter(Sender: TObject);
  486. Begin
  487. Clipboard.Clear;
  488. End;
  489.  
  490. Procedure TMainForm.FormMouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer);
  491. Begin
  492. If (EditA.Text <> '') And (EditB.Text <> '') Then
  493. Button1.Enabled := True
  494. Else
  495. Button1.Enabled := False;
  496. End;
  497.  
  498. Procedure TMainForm.EditAChange(Sender: TObject);
  499. Begin
  500. EditA.MaxLength := 6;
  501. If Length(EditA.Text) = 0 Then
  502. Begin
  503. Result.Lines.Clear;
  504. End;
  505. End;
  506.  
  507. Procedure TMainForm.EditAKeyPress(Sender: TObject; Var Key: Char);
  508. Begin
  509.  
  510. If Key In NumSet Then
  511. Begin
  512. If Key = '0' Then
  513. Begin
  514. If Length(EditA.Text) = 1 Then
  515. Begin
  516. If EditA.Text[1] In ['0'] Then
  517. Begin
  518. Key := #0;
  519. End;
  520. End;
  521. If Length(EditA.Text) = 2 Then
  522. Begin
  523. If (EditA.Text[1] = '-') AND (EditA.Text[2] = '0') Then
  524. Begin
  525. Key := #0;
  526. End;
  527. End;
  528. End;
  529.  
  530. If Key = #45 Then
  531. Begin
  532. If Length(EditA.Text) > 0 Then
  533. Begin
  534. BalloonHint1.Title := 'Недопустимый символ.';
  535. BalloonHint1.Description := 'Здесь можно ввести только число.';
  536. BalloonHint1.ImageIndex := 1;
  537. BalloonHint1.ShowHint(EditA);
  538. Key := #0;
  539. End;
  540. End;
  541.  
  542. If Key In [',', '.'] Then
  543. Begin
  544. Key := FormatSettings.DecimalSeparator;
  545. If Pos(Key, EditA.Text) <> 0 Then
  546. Begin
  547. BalloonHint1.Title := 'Недопустимый символ.';
  548. BalloonHint1.Description := 'Здесь можно ввести только число..';
  549. BalloonHint1.ImageIndex := 1;
  550. BalloonHint1.ShowHint(EditA);
  551. Key := #0;
  552. End
  553. Else
  554. If Length(EditA.Text) > 0 Then
  555. Begin
  556. If (EditA.Text[1] = '-') AND (Length(EditA.Text) = 1) Then
  557. Begin
  558. Key := #0;
  559. End
  560. End
  561. Else
  562. If EditA.SelStart = 0 Then
  563. Begin
  564. EditA.Text := '0' + EditA.Text;
  565. EditA.SelStart := 1;
  566. End;
  567. End;
  568. End
  569. Else
  570. Begin
  571. BalloonHint1.Title := 'Недопустимый символ.';
  572. BalloonHint1.Description := 'Здесь можно ввести только число.';
  573. BalloonHint1.ImageIndex := 1;
  574. BalloonHint1.ShowHint(EditA);
  575. Key := #0;
  576. End;
  577. End;
  578.  
  579. Procedure TMainForm.EditAMouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer);
  580. Begin
  581. Clipboard.Clear;
  582. End;
  583.  
  584. Procedure TMainForm.N1Click(Sender: TObject);
  585. Begin
  586. If Result.Lines.Count = 0 Then
  587. Begin
  588. N4.Enabled := False;
  589. End
  590. Else
  591. Begin
  592. N4.Enabled := True;
  593. End;
  594. End;
  595.  
  596. Procedure TMainForm.N2Click(Sender: TObject);
  597. Begin
  598. InstructionForm.ShowModal;
  599. End;
  600.  
  601. Procedure TMainForm.GetPath(Var Path: String);
  602. Begin
  603. If OpenDialog1.Execute Then
  604. Begin
  605. Path := OpenDialog1.FileName;
  606. End
  607. Else
  608. Begin
  609. ShowMessage('Открытие файла отменено!');
  610. End;
  611. End;
  612.  
  613. Procedure TMainForm.N3Click(Sender: TObject);
  614. Var
  615. IsCorrect, Fail: Boolean;
  616. Path, Errors, A, B, C, D, Str: String;
  617. Count: Integer;
  618. FileElem: TextFile;
  619. Begin
  620. GetPath(Path);
  621.  
  622. AssignFile(FileElem, Path);
  623. Fail := False;
  624. IsCorrect := True;
  625. Count := 0;
  626.  
  627. If Not FileExists(Path) Then
  628. Begin
  629. ShowMessage('Файл не найден!');
  630. Exit;
  631. End;
  632.  
  633. Try
  634. Try
  635. Reset(FileElem);
  636. Except
  637. CloseFile(FileElem);
  638. IsCorrect := False;
  639. ShowMessage('Ошибка открытия файла');
  640. End;
  641.  
  642. If IsCorrect Then
  643. Begin
  644. While Not Eof(FileElem) Do
  645. Begin
  646. ReadLn(FileElem, Str);
  647. Inc(Count);
  648. End;
  649.  
  650. CloseFile(FileElem);
  651. If Count <> 4 Then
  652. Fail := True;
  653. End;
  654.  
  655. If IsCorrect Then
  656. Begin
  657. Reset(FileElem);
  658.  
  659. Try
  660. Readln(FileElem, A);
  661. StrToInt(A);
  662. Except
  663. Fail := True;
  664. End;
  665.  
  666. Try
  667. Readln(FileElem, B);
  668. StrToInt(B);
  669. Except
  670. Fail := True;
  671. End;
  672. Try
  673. Readln(FileElem, C);
  674. StrToInt(C);
  675. Except
  676. Fail := True;
  677. End;
  678.  
  679. Try
  680. Readln(FileElem, D);
  681. StrToInt(D);
  682. Except
  683. Fail := True;
  684. End;
  685. End;
  686. Finally
  687. CloseFile(FileElem);
  688. ShowMessage('Обработка завершена');
  689. End;
  690.  
  691. If Fail = False Then
  692. Begin
  693. If ((-99 > StrToFloat(A)) Or (StrToFloat(A) > 999)) Or ((-99 > StrToFloat(B)) Or (StrToFloat(B) > 999)) Then
  694. Fail := True;
  695. End;
  696.  
  697. Errors := 'Проверьте введенные данные и повторите попытку!';
  698. If Fail = True Then
  699. Begin
  700. ShowMessage(Errors);
  701. End
  702. Else
  703. Begin
  704. EditA.Text := A;
  705. EditB.Text := B;
  706. EditC.Text := C;
  707. EditD.Text := D;
  708. End;
  709. End;
  710.  
  711. Procedure TMainForm.N4Click(Sender: TObject);
  712. Begin
  713.  
  714. If SaveDialog1.Execute Then
  715. Begin
  716.  
  717. Result.Lines.SaveToFile(SaveDialog1.FileName);
  718. End
  719. Else
  720.  
  721. Begin
  722. ShowMessage('Сохранение в файл отменено.');
  723. End;
  724.  
  725. End;
  726.  
  727. Procedure TMainForm.N5Click(Sender: TObject);
  728. Begin
  729. InformationForm.ShowModal;
  730. End;
  731.  
  732. End.
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement