roofnrte.pas 2.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113
  1. program roofnrte;
  2. uses
  3. typ,
  4. spe,
  5. roo;
  6. const
  7. num = 3;
  8. nmax = 3;
  9. var
  10. term, i, j, k, l, n: ArbInt;
  11. re, residu: ArbFloat;
  12. x: array[1..nmax] of ArbFloat;
  13. procedure f(var x0, fx: ArbFloat; var deff: boolean);
  14. var
  15. xloc: array[1..nmax] of ArbFloat absolute x0;
  16. f: array[1..nmax] of ArbFloat absolute fx;
  17. x, y, z: ArbFloat;
  18. begin
  19. x := xloc[1];
  20. y := xloc[2];
  21. if n = 3 then
  22. z := xloc[3];
  23. case i of
  24. 1:
  25. begin
  26. if j * 2 <= k then
  27. deff := x >= 0
  28. else
  29. deff := y >= 0;
  30. f[1] := x * x - y * y - 2;
  31. f[2] := x + y - 1;
  32. end;
  33. 2:
  34. begin
  35. f[1] := exp(x) + exp(y) - exp(z);
  36. f[2] := sin(x) + cos(y) - z;
  37. f[3] := x * y - sqr(z);
  38. end;
  39. 3: if (x > 0) and (y > 0) then
  40. begin
  41. f[1] := spepow(x, y) - spepow(y, x);
  42. f[2] := sin(x) - cos(y);
  43. end
  44. else
  45. deff := False
  46. end;
  47. end;
  48. begin
  49. Write(' program results roofnrte');
  50. case sizeof(ArbFloat) of
  51. 4: writeln('(single)');
  52. 6: writeln('(real)');
  53. 8: writeln('(double)');
  54. end;
  55. writeln;
  56. writeln(' number of examples:', num: 3);
  57. for i := 1 to num do
  58. begin
  59. writeln;
  60. writeln('Locating the root of the equations ');
  61. case i of
  62. 1:
  63. begin
  64. n := 2;
  65. writeln('x + y = 1');
  66. writeln('xý + yý = 2');
  67. end;
  68. 2:
  69. begin
  70. n := 3;
  71. writeln('exp(x) + exp(y) = exp(z)');
  72. writeln('sin(x) + cos(y) = z');
  73. writeln('xy = zý');
  74. end;
  75. 3:
  76. begin
  77. n := 2;
  78. writeln('xy = yx');
  79. writeln('sin(x) = cos(y)');
  80. end
  81. end;
  82. Read(k);
  83. for j := 1 to k do
  84. begin
  85. for l := 1 to n do
  86. Read(x[l]);
  87. Read(re);
  88. writeln(' starting values: (n=', n: 1, ')');
  89. for l := 1 to n do
  90. Write(x[l]: numdig, ' ');
  91. writeln(' re =', re: 8);
  92. roofnr(@f, n, x[1], residu, re, term);
  93. writeln;
  94. writeln(' term =', term: 2);
  95. if term < 3 then
  96. begin
  97. writeln(' solution vector');
  98. for l := 1 to n do
  99. Write(x[l]: numdig, ' ');
  100. writeln;
  101. writeln(' residu = ', residu: 8);
  102. end;
  103. writeln('-------------------------------------------------');
  104. end;
  105. writeln('======================================================');
  106. end;
  107. Close(input);
  108. Close(output);
  109. end.