home *** CD-ROM | disk | FTP | other *** search
- class ggt
- feature
- a,b:integer;
- create is
- do
- -- Init:
- a:=22;
- b:=26;
- io.readint; a:=io.lastint;
- io.readint; b:=io.lastint;
-
- io.putstring("ggt(");
- io.putint(a); io.putchar(','); io.putint(b); io.putstring(") = ");
- io.new_line;
-
- io.putstring("Iterativ: ");
- io.putint( ggtI(a,b) );
- io.new_line;
-
- io.putstring("Rekursiv: ");
- io.putint( ggtR(a,b) );
- io.new_line;
- end;
-
- ggtI(a,b: integer): integer is
- -- Iterative ggt-Funktion
- require a>0; b>0
- local m,n: integer
- do
- from m:=a; n:=b
- invariant -- ggtR(a,b) = ggtR(m,n)
- ;-- b mod n = 0; a mod m = 0
- variant m+n
- until m = n
- loop
- from
- invariant -- n = old n
- variant m
- until m<=n
- loop m:=m-n
- end;
- from
- invariant -- m = old m
- variant n
- until n<=m
- loop n:=n-m
- end
- end;
- result:=m;
- ensure -- Result = ggtR(a,b)
- end;
-
- ggtR(a,b: integer): integer is
- -- Rekursive ggt-Funktion
- require a>0; b>0
- do
- if a>b then result:=ggtR(b,a-b)
- elsif a<b then result:=ggtR(b-a,a)
- else result:=a
- end
- ensure -- Result = ggt(a,b)
- end;
-
- end
-
-