Einzelnen Beitrag anzeigen

axelf98

Registriert seit: 27. Aug 2003
Ort: Ennepetal
440 Beiträge
 
Delphi 2005 Personal
 
#8

Re: Un/gerade - Indirekte Rekursion

  Alt 1. Nov 2003, 19:10
Der Stacküberlauf hängt mit dem pred(x) zusammen:
Immer, wenn die Zahl nicht gerade ist, wird geprüft ob sie ungerade ist. Aber sie wird zuvor durch pred(x) wieder gerade gemacht, und deshalb hat man immer genau die falsche Zahl in der Abfrage und die Gehschichte geht ins unendliche...

So wies unten ist, funktionierts:

Delphi-Quellcode:
unit fUnGerade;

interface

uses
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls;

type
  TForm1 = class(TForm)
    btStart: TButton;
    mmAus: TMemo;
    edZahl: TEdit;
    procedure btStartClick(Sender: TObject);
    function odd(x: integer): boolean;
    function even(x: integer): boolean;
  private
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

function TForm1.odd(x: integer): boolean;
begin
  if (x mod 2 <> 0) then
    begin
      result:= false;
      mmAus.Lines.Add('Die Zahl ' + IntToStr(x) + ' ist Ungerade');
      mmAus.Lines.Add('Die Ausgabe befindet sich in der Funktion Odd');
    end
  else
    result:= even((x));

end;

function TForm1.even(x: integer): boolean;
begin
  if (x mod 2 = 0) then
    begin
      result:= true;
      mmAus.Lines.Add('Die Zahl ' + IntToStr(x) + ' ist Gerade');
      mmAus.Lines.Add('Die Ausgabe befindet sich in der Funktion Even');
    end
  else
    result:= odd((x));
end;


procedure TForm1.btStartClick(Sender: TObject);
var
  x: integer;
begin
  x:= StrToInt(edZahl.Text);
  even(pred(x));
end;
end.
  Mit Zitat antworten Zitat