Delphi Последовательность Фибоначчи - PullRequest
1 голос
/ 05 августа 2020

У меня есть задание для школы, где мне нужно написать код, чтобы я вводил первые два термина, и каждый раз, когда я нажимаю определенную кнопку, следующий термин печатается в выводе памятки. Но вот изюминка: вы не можете использовать операторы if / else, потому что они нас не учили.

    implementation

{$R *.dfm}

var
  iTerm1, iTerm2: integer;
  sOutput: String;

procedure TfrmFibonacciSequence.btnNextTermClick(Sender: TObject);
  var
    iTerm3: integer;
  begin
    iTerm3 := iTerm1 + iTerm2;
    memOutput.Text := inttostr(iTerm3);
    sOutput :=
  end;

procedure TfrmFibonacciSequence.btnReadClick(Sender: TObject);
  begin
    iTerm1 := strtoint(edtFirst.Text);
    iTerm2 := strtoint(edtSecond.Text);
  end;

end.

это то, что у меня есть для двух кнопок. кнопка чтения просто считывает два входных значения (это то, что хочет книга), а затем кнопка следующего термина печатает следующий термин в последовательности в памятке. Я понятия не имею, как я должен поддерживать его вечно ... особенно без операторов if / else.

пожалуйста, кто-нибудь может мне помочь с этим. спасибо.

1 Ответ

1 голос
/ 05 августа 2020

Вы очень близко.

Когда вы нажимаете кнопку Next, вы правильно вычисляете следующее значение в последовательности: iTerm1 + iTerm2. Вы помещаете это в iTerm3.

И в следующий раз, когда вы нажмете кнопку Next, вы захотите использовать iTerm2 в качестве первого члена и это значение iTerm3 в качестве второго. Поэтому убедитесь, что это произойдет:

// For the next iteration:
iTerm1 := iTerm2;
iTerm2 := iTerm3;

Следовательно,

procedure TfrmFibonacciSequence.btnNextTermClick(Sender: TObject);
var
  iTerm3: Integer;
begin
  iTerm3 := iTerm1 + iTerm2;
  memOutput.Text := IntToStr(iTerm3); // or iTerm3.ToString in modern Delphi
  // For the next iteration:
  iTerm1 := iTerm2;
  iTerm2 := iTerm3;
  // Maybe you also want to put iTerm1 and iTerm2 in the input edit boxes.
end;

Кроме того, я бы рекомендовал вам разрешить вашим переменным быть членами вашего класса формы. Потому что в противном случае, если вы создадите два или более экземпляра этого класса формы, произойдут очень плохо.

Обновление

Дополнительные пояснения:

В настоящее время ваши iTerm1 и iTerm2 являются глобальными переменными, поэтому, если вы создадите два или более экземпляра TfrmFibonacciSequence, они будут совместно использовать эти переменные и, следовательно, не смогут работать независимо. Это будет очень запутанно. Поэтому удалите эти глобальные переменные и вместо этого добавьте iTerm1, iTerm2: Integer в свой класс формы.

type
  TfrmFibonacciSequence = class(TForm)
    edtFirst: TEdit;
    edtSecond: TEdit;
    btnRead: TButton;
    btnNext: TButton;
    memOutput: TMemo;
    procedure btnReadClick(Sender: TObject);
    procedure btnNextClick(Sender: TObject);
  private
    iTerm1, iTerm2: Integer;
  public
  end;

Таким образом, каждый экземпляр класса будет иметь свои собственные переменные.

...