home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Crawly Crypt Collection 1
/
crawlyvol1.bin
/
program
/
compiler
/
vici_102
/
examples
/
ggt.e
< prev
next >
Wrap
Text File
|
1992-10-24
|
1KB
|
66 lines
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