home *** CD-ROM | disk | FTP | other *** search
/ Turbo Toolbox / Turbo_Toolbox.iso / 1991 / 04 / grdlagen / memo_fun.txt < prev    next >
Encoding:
Text File  |  1991-03-08  |  3.5 KB  |  90 lines

  1.      1    COMMENT Simula-67 Demonstrationsprogramm.
  2.      2            Compiler: PC SIMULA 108.3.3
  3.      3    ;
  4.      4    BEGIN
  5.      5        COMMENT Klasse "memofun": Mnemo-Funktionen.
  6.      6                Initialisierung: 
  7.      7                    NEW memofun(n) : Legt Tabelle für 
  8.      8                        n Funktionswerte an.
  9.      9                Methoden:
  10.     10                    CALC(f,x) : Berechnet f(x), wobei
  11.     11                        zur Beschleunigung die letzten
  12.     12                        n Werte gemerkt werden.
  13.     13        ;
  14.     14        CLASS memofun(n);
  15.     15            SHORT INTEGER n;
  16.     16        BEGIN
  17.     17            CLASS wertepaar;
  18.     18            COMMENT Paar Argument/Funktionswert;
  19.     19            BEGIN
  20.     20                REAL argument;
  21.     21                REAL funktionswert;
  22.     22            END Struktur wertepaar;
  23.     23            COMMENT Intern werden die letzten n Funktionswerte
  24.     24                in der Tabelle MEMLIST gemerkt. Diese Tabelle
  25.     25                wird als zyklische Liste benutzt: Auf MEMLIST(N-1)
  26.     26                folgt wieder das MEMLIST(0). MEMLIST(NEUEST) 
  27.     27                ist das zuletzt berechnete Element, oder NONE,
  28.     28                wenn noch kein Element berechnet wurde.
  29.     29            ;
  30.     30            REF(wertepaar) ARRAY memlist(0:n-1); 
  31.     31            SHORT INTEGER neuest;
  32.     32            REAL PROCEDURE calc(f,x);
  33.     33                VALUE x;
  34.     34                REAL PROCEDURE f;
  35.     35                REAL x;
  36.     36            BEGIN
  37.     37                INTEGER i;
  38.     38                i:=neuest;
  39.     39                COMMENT Argument X in Tabelle MEMLIST suchen. Dabei
  40.     40                    vom neuesten in Richtung ältesten Eintrag suchen
  41.     41                ;
  42.     42                WHILE memlist(i)==NONE OR ELSE memlist(i).argument<>x
  43.     43                DO
  44.     44                    IF memlist(i)==NONE OR i=MOD(neuest+1,n) THEN
  45.     45                    BEGIN
  46.     46                        COMMENT Neues Element berechnen ;
  47.     47                        IF memlist(i)==NONE THEN 
  48.     48                            memlist(i):-NEW wertepaar;
  49.     49                        memlist(i).argument:=x;
  50.     50                        memlist(i).funktionswert:=f(x);
  51.     51                        neuest:=i
  52.     52                    END Neues Element eintragen
  53.     53                    ELSE
  54.     54                    BEGIN
  55.     55                        i:=MOD(i-1,n);
  56.     56                    END Weiterschalten auf das nächste Element;
  57.     57                calc:=memlist(i).funktionswert
  58.     58            END calc;
  59.     59            COMMENT Code für Objektinitialisierung mit NEW ;
  60.     60            BEGIN
  61.     61                SHORT INTEGER i;
  62.     62                neuest:=0;
  63.     63                FOR i:=0 STEP 1 UNTIL n-1 DO memlist(i):-NONE
  64.     64            END Initialisierung;
  65.     65        END Klasse memofun;
  66.     66        
  67.     67        COMMENT Zum Testen von MEMOFUN dient die 
  68.     68            Funktion BEISPIEL
  69.     69        ;
  70.     70        REAL PROCEDURE beispiel(x);
  71.     71            VALUE x;
  72.     72            REAL x;
  73.     73            beispiel:=x*x;
  74.     74    
  75.     75        COMMENT Hauptprogramm, testet MEMOFUN ;
  76.     76    
  77.     77        REF(memofun) mbeisp; COMMENT memofun-Objekt;
  78.     78        INTEGER i;
  79.     79        mbeisp:-NEW memofun(4);
  80.     80        FOR i:=1 STEP 1 UNTIL 3 DO
  81.     81        BEGIN
  82.     82            INTEGER x;
  83.     83            FOR x:=1 STEP 1 UNTIL 5 DO
  84.     84                OUTREAL(mbeisp.calc(beispiel,x),2,-8);
  85.     85            OUTIMAGE
  86.     86        END;
  87.     87        OUTTEXT("Fertig"); OUTIMAGE
  88.     88    END
  89.     89    
  90.