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

  1. class ggt
  2. feature
  3. a,b:integer;
  4. create is
  5. do
  6.     -- Init:
  7.     a:=22;
  8.     b:=26;
  9.     io.readint; a:=io.lastint;
  10.     io.readint; b:=io.lastint;
  11.     
  12.     io.putstring("ggt(");
  13.     io.putint(a); io.putchar(','); io.putint(b); io.putstring(") = ");
  14.     io.new_line;
  15.     
  16.     io.putstring("Iterativ: ");
  17.     io.putint( ggtI(a,b) );
  18.     io.new_line;
  19.     
  20.     io.putstring("Rekursiv: ");
  21.     io.putint( ggtR(a,b) );
  22.     io.new_line;
  23. end;
  24.  
  25. ggtI(a,b: integer): integer is
  26. -- Iterative ggt-Funktion
  27. require a>0; b>0
  28. local m,n: integer
  29. do
  30.     from m:=a; n:=b
  31.     invariant -- ggtR(a,b) = ggtR(m,n)
  32.     ;-- b mod n = 0; a mod m = 0
  33.     variant m+n
  34.     until m = n
  35.     loop
  36.         from
  37.         invariant -- n = old n
  38.         variant m
  39.         until m<=n
  40.         loop m:=m-n
  41.         end;
  42.         from
  43.         invariant -- m = old m
  44.         variant n
  45.         until n<=m
  46.         loop n:=n-m
  47.         end
  48.     end;
  49.     result:=m;
  50. ensure -- Result = ggtR(a,b)
  51. end;
  52.  
  53. ggtR(a,b: integer): integer is
  54. -- Rekursive ggt-Funktion
  55. require a>0; b>0
  56. do
  57.     if a>b then result:=ggtR(b,a-b)
  58.     elsif a<b then result:=ggtR(b-a,a)
  59.     else result:=a
  60.     end
  61. ensure -- Result = ggt(a,b)
  62. end;
  63.  
  64. end
  65.  
  66.