Advertisement
ridjis

jan20013

Jun 13th, 2014
542
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. MODULE Januar2003;
  2. FROM InOut IMPORT ReadInt, WriteInt, WriteString, WriteLn;
  3. FROM Stek IMPORT StekTip, MakeNull, Empty, Push, Top, Pop;
  4. FROM Info IMPORT InfoTip;
  5.  
  6. PROCEDURE f (x,y,z:CARDINAL):CARDINAL;
  7. BEGIN
  8.   IF z = 0 THEN
  9.     RETURN x
  10.   ELSIF y = 0 THEN
  11.     RETURN 1
  12.   ELSIF x = 0 THEN
  13.     RETURN f(z-1, f(z-1, z, y), y)
  14.   ELSE
  15.     RETURN f(f(x, y, z-1), y-1, z)
  16.   END
  17. END f;
  18.  
  19. PROCEDURE Sf (x,y,z:CARDINAL):CARDINAL;
  20. VAR
  21.     s:StekTip;
  22.     ok,jos:BOOLEAN;
  23.     el:InfoTip;
  24.     rez,pom:INTEGER;
  25. BEGIN
  26.     MakeNull(s);
  27.     REPEAT
  28.         WHILE (z<>0) AND (y<>0) DO
  29.             el.x:=x;
  30.             el.y:=y;
  31.             el.z:=z;
  32.             IF x=0 THEN
  33.                 el.adr:=1;
  34.                 Push(s,el,ok);
  35.                 x:=z-1;
  36.                 pom:=y;
  37.                 y:=z;
  38.                 z:=pom
  39.             ELSE
  40.                 el.adr:=3;
  41.                 Push(s,el,ok);
  42.                 z:=z-1
  43.             END
  44.         END;
  45.         IF z=0 THEN
  46.             rez:=x
  47.         ELSIF y=0 THEN
  48.             rez:=1
  49.         END;
  50.         jos:=TRUE;
  51.         WHILE jos AND NOT Empty(s) DO
  52.             Top(s,el,ok);
  53.             Pop(s,ok);
  54.             x:=el.x;
  55.             y:=el.y;
  56.             z:=el.z;
  57.             IF el.adr=1 THEN
  58.                 el.adr:=2;
  59.                 Push(s,el,ok);
  60.                 x:=z-1;
  61.                 z:=y;
  62.                 y:=rez;
  63.                 jos:=FALSE
  64.             ELSIF el.adr=3 THEN
  65.                 el.adr:=4;
  66.                 Push(s,el,ok);
  67.                 x:=rez;
  68.                 y:=y-1;
  69.                 jos:=FALSE
  70.             END
  71.         END
  72.     UNTIL Empty(s);
  73.     RETURN rez
  74. END Sf;
  75.  
  76. VAR
  77.     x,y,z:INTEGER;
  78. BEGIN
  79.     WriteString('x= ');
  80.     ReadInt(x);
  81.     WriteString('y= ');
  82.     ReadInt(y);
  83.     WriteString('z= ');
  84.     ReadInt(z);
  85.     WriteLn;
  86.     WriteString('-----f-----');
  87.     WriteLn;
  88.     WriteString('f = ');
  89.     WriteInt(f(x,y,z),1);
  90.     WriteLn;
  91.     WriteString('-----Sf-----');
  92.     WriteLn;
  93.     WriteString('Sf = ');
  94.     WriteInt(Sf(x,y,z),1);
  95.     WriteLn
  96. END Januar2003.
  97.  InfoTip = RECORD
  98.  x,y,z:INTEGER;
  99.  adr:CARDINAL
  100.  END;
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement