Инструменты пользователя

Инструменты сайта


cp:obx-proc-type

Различия

Показаны различия между двумя версиями страницы.

Ссылка на это сравнение

Предыдущая версия справа и слева Предыдущая версия
Следующая версия
Предыдущая версия
cp:obx-proc-type [2024/08/14 21:40]
theathlete [Пример]
cp:obx-proc-type [2024/08/28 10:41] (текущий)
theathlete [Пример]
Строка 13: Строка 13:
  
 TYPE TYPE
-  Calculator = PROCEDURE (a, b: LONGINT): LONGINT+  CalculatorLong = PROCEDURE (VAR acc: LONGINT; cur: INTEGER); 
-  CalculatorBoolean = PROCEDURE (a, b: LONGINT): BOOLEAN;+  CalculatorBool = PROCEDURE (VAR acc: BOOLEAN; a, b: INTEGER);
  
-PROCEDURE Add(a, b: LONGINT)LONGINT+PROCEDURE Add(VAR acc: LONGINT; curINTEGER)
-BEGIN RETURN a END Add;+BEGIN acc := acc cur END Add;
  
-PROCEDURE Sub(a, b: LONGINT)LONGINT+PROCEDURE Sub(VAR acc: LONGINT; curINTEGER)
-BEGIN RETURN a END Sub;+BEGIN acc := acc cur END Sub;
  
-PROCEDURE Mul(a, b: LONGINT)LONGINT+PROCEDURE Mul(VAR acc: LONGINT; curINTEGER)
-BEGIN RETURN a END Mul;+BEGIN acc := acc cur END Mul;
  
-PROCEDURE Div(a, b: LONGINT)LONGINT+PROCEDURE Div(VAR acc: LONGINT; curINTEGER)
-BEGIN RETURN a DIV END Div;+BEGIN acc := acc DIV cur END Div;
  
-PROCEDURE Greater(a, b: LONGINT): BOOLEAN+PROCEDURE Greater(VAR acc: BOOLEAN; a, b: INTEGER); 
-BEGIN RETURN a > b END Greater;+BEGIN acc := acc & (a > bEND Greater;
  
-PROCEDURE Less(a, b: LONGINT): BOOLEAN+PROCEDURE Less(VAR acc: BOOLEAN; a, b: INTEGER); 
-BEGIN RETURN a < b END Less;+BEGIN acc := acc & (a < bEND Less;
  
-PROCEDURE ReduceLongint(nums: ARRAY OF LONGINT; c: Calculator): LONGINT;+PROCEDURE ReduceLong(IN nums: ARRAY OF INTEGER; c: CalculatorLong): LONGINT;
 VAR VAR
-  i, res: LONGINT;+  i: INTEGER; 
 +  acc: LONGINT;
 BEGIN BEGIN
-  res := nums[0]; +  acc := nums[0]; 
-  FOR i := 1 TO LEN(nums) - 1 DO +  FOR i := 1 TO LEN(nums) - 1 DO c(acc, nums[i]) END; 
-    res := c(res, nums[i])+  RETURN acc
-  END; +END ReduceLong;
-  RETURN res+
-END ReduceLongint;+
  
-PROCEDURE ReduceBoolean(nums: ARRAY OF LONGINT; c: CalculatorBoolean): BOOLEAN;+PROCEDURE ReduceBool(IN nums: ARRAY OF INTEGER; c: CalculatorBool): BOOLEAN;
 VAR VAR
-  i: LONGINT+  i: INTEGER
-  res: BOOLEAN;+  acc: BOOLEAN;
 BEGIN BEGIN
-  res := TRUE; +  acc := TRUE; i := 1
-  FOR i := 1 TO LEN(nums) - 1 DO +  REPEAT 
-    res := res & c(nums[i-1], nums[i]);  +    c(acc, nums[i-1], nums[i]); 
-  END+    INC(i); 
-  RETURN res+  UNTIL (i = LEN(nums)) OR ~acc
-END ReduceBoolean;+  RETURN acc
 +END ReduceBool;
  
 PROCEDURE Start*; PROCEDURE Start*;
 VAR VAR
-  sn: ARRAY 5 OF LONGINT; (* sn - some nums *) +  sn: ARRAY 5 OF INTEGER; (* sn - some nums *) 
-  orderedNums: ARRAY 3 OF LONGINT;+  orderedNums: ARRAY 3 OF INTEGER;
   sum, mul: LONGINT;   sum, mul: LONGINT;
   greater, less: BOOLEAN;   greater, less: BOOLEAN;
-   
 BEGIN BEGIN
   sn[0] := 1; sn[1] := 3; sn[2] := 5; sn[3] := 7; sn[4] := 9;   sn[0] := 1; sn[1] := 3; sn[2] := 5; sn[3] := 7; sn[4] := 9;
-  sum := ReduceLongint(sn, Add);+ 
 +  sum := ReduceLong(sn, Add);
   Out.String('sum = '); Out.Int(sum); Out.Ln;   Out.String('sum = '); Out.Int(sum); Out.Ln;
  
-  mul := ReduceLongint(sn, Mul);+  mul := ReduceLong(sn, Mul);
   Out.String('mul = '); Out.Int(mul); Out.Ln;   Out.String('mul = '); Out.Int(mul); Out.Ln;
  
Строка 75: Строка 75:
   orderedNums[1] := 5;   orderedNums[1] := 5;
   orderedNums[2] := 1;   orderedNums[2] := 1;
-  greater := ReduceBoolean(orderedNums, Greater);+ 
 +  greater := ReduceBool(orderedNums, Greater);
   Out.String('greater = '); Out.Bool(greater); Out.Ln;   Out.String('greater = '); Out.Bool(greater); Out.Ln;
  
-  less := ReduceBoolean(orderedNums, Less);+  less := ReduceBool(orderedNums, Less);
   Out.String('less = '); Out.Bool(less); Out.Ln;   Out.String('less = '); Out.Bool(less); Out.Ln;
 END Start; END Start;
cp/obx-proc-type.1723660855.txt.gz · Последнее изменение: 2024/08/14 21:40 — theathlete