Posted By

ozkriff on 10/07/09


Tagged


Versions (?)

cat


 / Published in: Pascal
 

  1. {
  2. Нахождение коэффициентов линейной модели методом наименьших квадтратов.
  3.  
  4. а) найти значение функции в соотв. с линейной моделью в заданной точке;
  5. таблицы эмпирических значений вводятся из файла спциального формата.
  6. Вывод результатов по желанию пользователя на экран, принтер или в файл.
  7. }
  8.  
  9. program linear_model; {Название программы}
  10.  
  11. uses crt; {Подключить модуль для рисования псевдографики}
  12.  
  13. const {секция обьявления констант}
  14. TO_SCREEN = 1;
  15. TO_PRINTER = 2;
  16. TO_FILE = 3;
  17.  
  18. var {секция обьявления переменных}
  19. x, y, Ex, Ey, Ex2, Exy, a, b :real; {для рассчетов}
  20. input_file :TEXT; {указатель на входной файл}
  21. output_file :TEXT; {указатель на выходной файл}
  22. n :integer; {счетчик узлов}
  23. output_mode :integer; {режим вывода}
  24.  
  25. begin {начало секции обьявления переменных}
  26. writeln('Where to display output_modes?'); {куда вывести результаты?}
  27. writeln(' 1-screen;');
  28. writeln(' 2-printer;');
  29. writeln(' 3-file;');
  30. read(output_mode); {считать ввод пользователя}
  31.  
  32. if output_mode = TO_FILE then {если в файл то}
  33. begin
  34. assign(output_file, 'out.txt'); {прикрепить указатель к файлу}
  35. rewrite(output_file); {перейти на начало}
  36. end;
  37.  
  38. {обнулить переменные}
  39. Ex := 0;
  40. Ey := 0;
  41. Ex2 := 0;
  42. Exy := 0;
  43.  
  44. if output_mode = TO_SCREEN then {если на экран то}
  45. writeln('x y') {вывести шапку}
  46. else if output_mode = TO_FILE then {если в файл}
  47. writeln(output_file, 'x y'); {вывести шапку в файл}
  48.  
  49. n := 0;
  50. assign(input_file, 'dict.txt'); {прикрепить указатель к файлу}
  51. reset(input_file); {перейти на начало}
  52. while not EOF(input_file) do {до конца файла}
  53. begin
  54. readln(input_file, x, y); {прочитать строку из файла в x и y}
  55.  
  56. {прибавить значения по формулам}
  57. Ex := Ex + x;
  58. Ey := Ey + y;
  59. Ex2 := Ex2 + x*x;
  60. Exy := Exy + x*y;
  61. n := n + 1; {+1 к значению счетчика узлов}
  62.  
  63. if output_mode = TO_SCREEN then {если вывод на экран то}
  64. writeln(x:4:4, ' ', y:4:4)
  65. else if output_mode = TO_FILE then {если вывод в файл}
  66. writeln(output_file, x:4:4, ' ', y:4:4);
  67. end;
  68. a := (n * Exy - Ex*Ey)/(n*Ex2 - Ex*Ex); {посчитать коэфф. а}
  69. b := (Ex2*Ey - Exy*Ex)/(n*Ex2 - Ex*Ex); {посчитать коэфф. б}
  70.  
  71. if output_mode = TO_SCREEN then {если вывод на экран то}
  72. begin
  73. {вывести результаты}
  74. writeln(); {пустая строка}
  75. writeln('Ex = ', Ex:4:4); {4 знака до и после запятой}
  76. writeln('Ey = ', Ey:4:4);
  77. writeln('Exy = ', Exy:4:4);
  78. writeln('Ex2 = ', Ex2:4:4);
  79. writeln('a = ', a:4:4);
  80. writeln('b = ', b:4:4);
  81. end
  82. else
  83. if output_mode = TO_FILE then {иначе если вывод в файл то}
  84. begin
  85. {вывести результаты}
  86. writeln(output_file); {пустая строка}
  87. writeln(output_file, 'Ex = ', Ex:4:4); {4 знака до и после запятой}
  88. writeln(output_file, 'Ey = ', Ey:4:4);
  89. writeln(output_file, 'Exy = ', Exy:4:4);
  90. writeln(output_file, 'Ex2 = ', Ex2:4:4);
  91. writeln(output_file, 'a = ', a:4:4);
  92. writeln(output_file, 'b = ', b:4:4);
  93. end;
  94.  
  95.  
  96. write('Enter x: ');
  97. readln(x); {прочитать ввод пользователя}
  98. if output_mode = TO_SCREEN then {если вывод на экран то}
  99. writeln('y = ', a*x+b:4:4)
  100. else if output_mode = TO_FILE then {иначе если вывод в файл то}
  101. writeln(output_file, 'y = ', a*x+b:4:4);
  102.  
  103. if output_mode = TO_FILE then {если вывод в файл то}
  104. close(output_file); {закрыть файл}
  105. end. {конец тела программы}
  106.  
  107.  
  108.  
  109.  
  110. {
  111. пример работы:
  112.  
  113. C:\downloads\CURSE\a\CAT>more dict.txt
  114. 17.28 537
  115. 17.05 534
  116. 18.3 550
  117. 18.8 555
  118. 19.2 560
  119. 18.5 552
  120.  
  121. C:\downloads\CURSE\a\CAT>c.bat
  122.  
  123. C:\downloads\CURSE\a\CAT>..\..\b\fpc\bin\i386-win32\fpc.exe -g MAIN.PAS
  124. Free Pascal Compiler version 2.2.4 [2009/04/10] for i386
  125. Copyright (c) 1993-2008 by Florian Klaempfl
  126. Target OS: Win32 for i386
  127. Compiling MAIN.PAS
  128. Linking MAIN.exe
  129. 105 lines compiled, 2.0 sec , 37920 bytes code, 1784 bytes data
  130.  
  131. C:\downloads\CURSE\a\CAT>MAIN.exe
  132. Where to display output_modes?
  133.  1-screen;
  134.  2-printer;
  135.  3-file;
  136. 1
  137. x y
  138. 17.2800 537.0000
  139. 17.0500 534.0000
  140. 18.3000 550.0000
  141. 18.8000 555.0000
  142. 19.2000 560.0000
  143. 18.5000 552.0000
  144.  
  145. Ex = 109.1300
  146. Ey = 3288.0000
  147. Exy = 59847.0600
  148. Ex2 = 1988.5209
  149. a = 12.0780
  150. b = 328.3213
  151. Enter x: 17
  152. y = 533.6473
  153. }

Report this snippet  

You need to login to post a comment.