Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- unit laba_4_2_f1;
- interface
- uses
- Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
- Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.Menus, Vcl.StdCtrls, System.RegularExpressions;
- type
- TArrStr = Array of String;
- TFormMain = class(TForm)
- MainMenu1: TMainMenu;
- N1: TMenuItem;
- N3: TMenuItem;
- EditN: TEdit;
- ButtonOk: TButton;
- N4: TMenuItem;
- LabelAnswer: TLabel;
- BalloonHint1: TBalloonHint;
- procedure N3Click(Sender: TObject);
- procedure N4Click(Sender: TObject);
- procedure ButtonOkClick(Sender: TObject);
- function BruteForce(N, CellIsNowOn: ShortInt) : Integer;
- procedure EditNChange(Sender: TObject);
- private
- public
- { Public declarations }
- end;
- var
- FormMain: TFormMain;
- implementation
- {$R *.dfm}
- function FindRegEx(SInput, StrRegEx: String; StrIfNothingFound: String = '') : TArrStr; forward;
- procedure TFormMain.ButtonOkClick(Sender: TObject);
- var
- Answer, N: Integer;
- Point: TPoint;
- begin
- with EditN do
- begin
- Text := FindRegEx(Text, '^[0]*([1-2]\d|[3]\d?|[4][0]?|[5-9])$')[0];
- if Text = '' then
- begin
- BalloonHint1.Title := 'Ошибка';
- BalloonHint1.Description := 'Введите целое число от 3 до 40.';
- Point.X := Width;
- Point.Y := Height;
- Balloonhint1.ShowHint(ClientToScreen(Point));
- LabelAnswer.Caption := 'Ответ: ';
- end
- else
- begin
- N := StrToInt(Text);
- Answer := BruteForce(N, 1);
- LabelAnswer.Caption := 'Ответ: ' + IntToStr(Answer);
- end;
- end;
- end;
- procedure TFormMain.EditNChange(Sender: TObject);
- var
- SelTemp: Integer;
- begin
- with EditN do
- begin
- SelTemp := SelStart;
- Text := FindRegEx(Text, '[1-9]\d?')[0];
- SelStart := SelTemp;
- end;
- end;
- function TFormMain.BruteForce(N, CellIsNowOn: ShortInt) : Integer;
- var
- Answer: Integer;
- begin
- Answer := 0;
- if CellIsNowOn < N then
- begin
- Answer := Answer + BruteForce(N, CellIsNowOn + 1);
- if (CellIsNowOn < N - 1) then
- Answer := Answer + BruteForce(N, CellIsNowOn + 2);
- end
- else
- Answer := 1;
- Result := Answer;
- end;
- procedure TFormMain.N3Click(Sender: TObject);
- begin
- ShowMessage('Панев Александр, гр. 051007' + #10#13 + 'Минск, 2021');
- end;
- procedure TFormMain.N4Click(Sender: TObject);
- begin
- ShowMessage('Имеется полоска клетчатой бумаги шириной в одну клетку и ' +
- 'длиной в n клеток. На первой клетке установлена шашка. Одним ходом ' +
- 'шашку можно передвигать на одну или две клетки. Разработать ' +
- 'рекурсивную функцию, определяющую количество способов продвижения ' +
- 'шашки на n-ю клетку.');
- end;
- function FindRegEx(SInput, StrRegEx: String; StrIfNothingFound: String = '') : TArrStr;
- var
- ArrStr: TArrStr;
- RegEx: TRegEx;
- MatchCollection: TMatchCollection;
- i: Integer;
- begin
- RegEx := TRegEx.Create(StrRegEx);
- MatchCollection := RegEx.Matches(SInput);
- SetLength(ArrStr, MatchCollection.Count);
- for i := 0 to MatchCollection.Count - 1 do
- ArrStr[i] := MatchCollection.Item[i].Value;
- if (Length(ArrStr) < 1) then
- ArrStr := [StrIfNothingFound];
- Result := ArrStr;
- end;
- end.
Advertisement
Add Comment
Please, Sign In to add comment