Языки программирования Оберон и Оберон-2

Информация - Компьютеры, программирование

Другие материалы по предмету Компьютеры, программирование

velT), и адрес описателя типа (TypeDescrAdrT) известны во время компиляции. Например, уровень расширения Node - 0 (этот тип не имеет базового типа), а уровень расширения CenterNode равен 1.

 

 

 

 

Пример программы

 

(* Print first PRINT digits of e.

*

* Originally written in Pascal by Scott Hemphill

* Rewritten in Oberon-2 and modified by Andrew Cadach

*

*)

 

MODULE exp;

 

IMPORT InOut;

 

CONST

PRINT = 1024;

DIGITS = PRINT + (PRINT+31) DIV 32;

 

TYPE Number = ARRAY DIGITS+1 OF INTEGER;

 

VAR

s, x: POINTER TO Number;

xs, i: INTEGER;

 

PROCEDURE init (VAR x: Number; n: INTEGER);

VAR i: INTEGER;

BEGIN

x[0] := n;

FOR i := 1 TO DIGITS DO x[i] := 0; END

END init;

 

PROCEDURE divide (VAR x: Number; xs, n: INTEGER;

VAR y: Number; VAR ys: INTEGER);

VAR

i, c: INTEGER;

BEGIN

c := 0;

FOR i := xs TO DIGITS DO

c := 10*c + x[i];

y[i] := c DIV n;

c := c MOD n

END;

ys := xs;

WHILE (ys <= DIGITS) & (y[ys] = 0) DO INC (ys) END

END divide;

 

PROCEDURE add (VAR s, x: Number; xs: INTEGER);

VAR

i, c: INTEGER;

BEGIN

c := 0;

FOR i := DIGITS TO xs BY -1 DO

INC (c, s[i] + x[i]);

IF c >= 10 THEN

s[i] := c - 10;

c := 1

ELSE

s[i] := c;

c := 0

END

END;

i := xs;

WHILE c # 0 DO

DEC (i);

INC (c, s[i]);

IF c >= 10 THEN

s[i] := c - 10;

c := 1

ELSE

s[i] := c;

c := 0

END

END

END add;

 

BEGIN

NEW (s);

NEW (x);

init (s^, 0);

init (x^, 1);

xs := 0;

add (s^, x^, xs);

i := 0;

REPEAT

INC (i);

divide (x^, xs, i, x^, xs);

add (s^, x^, xs);

UNTIL xs > DIGITS;

InOut.WriteLn;

InOut.WriteString (" e = ");

InOut.Write (CHR (s^[0]+ORD (0)));

InOut.Write (.);

FOR i := 1 TO PRINT DO

InOut.Write (CHR (s^[i]+ORD (0)));

IF i MOD 64 = 0 THEN

InOut.WriteLn;

InOut.WriteInt (i, 5);

InOut.WriteString (" ")

END;

END;

InOut.WriteLn;

InOut.WriteLn;

END exp.

Литература:

 

1 Руслан Богатырев

Судьба Оберона

МирПК, сентябрь 2005;

2 Сергей Свердлов

Арифметика синтаксиса

PC Week/RE, 1998, №42-43;

3 Руслан Богатырев

Язык Оберон. Краткий путеводитель

МирПК, сентябрь 2005;

4 Ханспетер Мессенбок, Никлаус Вирт

Различия между языками Oberon и Oberon-2

Institute for Computer Systems, ETH, Zurich, Technical Paper, July 1993

Перевод Р. Богатырев, 1995;

5 Х.Мёссенбёк, Н.Вирт

Язык программирования Оберон-2

Институт компьютерных систем, ETH, Цюрих Июль 1996

Перевод с английского С.Свердлова.