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