/ Published in: Pascal
Expand |
Embed | Plain Text
{ Нахождение коэффициентов линейной модели методом наименьших квадтратов. а) найти значение функции в соотв. с линейной моделью в заданной точке; таблицы эмпирических значений вводятся из файла спциального формата. Вывод результатов по желанию пользователя на экран, принтер или в файл. } program linear_model; {Название программы} uses crt; {Подключить модуль для рисования псевдографики} const {секция обьявления констант} TO_SCREEN = 1; TO_PRINTER = 2; TO_FILE = 3; var {секция обьявления переменных} x, y, Ex, Ey, Ex2, Exy, a, b :real; {для рассчетов} input_file :TEXT; {указатель на входной файл} output_file :TEXT; {указатель на выходной файл} n :integer; {счетчик узлов} output_mode :integer; {режим вывода} begin {начало секции обьявления переменных} writeln('Where to display output_modes?'); {куда вывести результаты?} writeln(' 1-screen;'); writeln(' 2-printer;'); writeln(' 3-file;'); read(output_mode); {считать ввод пользователя} if output_mode = TO_FILE then {если в файл то} begin assign(output_file, 'out.txt'); {прикрепить указатель к файлу} rewrite(output_file); {перейти на начало} end; {обнулить переменные} Ex := 0; Ey := 0; Ex2 := 0; Exy := 0; if output_mode = TO_SCREEN then {если на экран то} writeln('x y') {вывести шапку} else if output_mode = TO_FILE then {если в файл} writeln(output_file, 'x y'); {вывести шапку в файл} n := 0; assign(input_file, 'dict.txt'); {прикрепить указатель к файлу} reset(input_file); {перейти на начало} while not EOF(input_file) do {до конца файла} begin readln(input_file, x, y); {прочитать строку из файла в x и y} {прибавить значения по формулам} Ex := Ex + x; Ey := Ey + y; Ex2 := Ex2 + x*x; Exy := Exy + x*y; n := n + 1; {+1 к значению счетчика узлов} if output_mode = TO_SCREEN then {если вывод на экран то} writeln(x:4:4, ' ', y:4:4) else if output_mode = TO_FILE then {если вывод в файл} writeln(output_file, x:4:4, ' ', y:4:4); end; a := (n * Exy - Ex*Ey)/(n*Ex2 - Ex*Ex); {посчитать коэфф. а} b := (Ex2*Ey - Exy*Ex)/(n*Ex2 - Ex*Ex); {посчитать коэфф. б} if output_mode = TO_SCREEN then {если вывод на экран то} begin {вывести результаты} writeln(); {пустая строка} writeln('Ex = ', Ex:4:4); {4 знака до и после запятой} writeln('Ey = ', Ey:4:4); writeln('Exy = ', Exy:4:4); writeln('Ex2 = ', Ex2:4:4); writeln('a = ', a:4:4); writeln('b = ', b:4:4); end else if output_mode = TO_FILE then {иначе если вывод в файл то} begin {вывести результаты} writeln(output_file); {пустая строка} writeln(output_file, 'Ex = ', Ex:4:4); {4 знака до и после запятой} writeln(output_file, 'Ey = ', Ey:4:4); writeln(output_file, 'Exy = ', Exy:4:4); writeln(output_file, 'Ex2 = ', Ex2:4:4); writeln(output_file, 'a = ', a:4:4); writeln(output_file, 'b = ', b:4:4); end; write('Enter x: '); readln(x); {прочитать ввод пользователя} if output_mode = TO_SCREEN then {если вывод на экран то} writeln('y = ', a*x+b:4:4) else if output_mode = TO_FILE then {иначе если вывод в файл то} writeln(output_file, 'y = ', a*x+b:4:4); if output_mode = TO_FILE then {если вывод в файл то} close(output_file); {закрыть файл} end. {конец тела программы} { пример работы: C:\downloads\CURSE\a\CAT>more dict.txt 17.28 537 17.05 534 18.3 550 18.8 555 19.2 560 18.5 552 C:\downloads\CURSE\a\CAT>c.bat C:\downloads\CURSE\a\CAT>..\..\b\fpc\bin\i386-win32\fpc.exe -g MAIN.PAS Free Pascal Compiler version 2.2.4 [2009/04/10] for i386 Copyright (c) 1993-2008 by Florian Klaempfl Target OS: Win32 for i386 Compiling MAIN.PAS Linking MAIN.exe 105 lines compiled, 2.0 sec , 37920 bytes code, 1784 bytes data C:\downloads\CURSE\a\CAT>MAIN.exe Where to display output_modes? 1-screen; 2-printer; 3-file; 1 x y 17.2800 537.0000 17.0500 534.0000 18.3000 550.0000 18.8000 555.0000 19.2000 560.0000 18.5000 552.0000 Ex = 109.1300 Ey = 3288.0000 Exy = 59847.0600 Ex2 = 1988.5209 a = 12.0780 b = 328.3213 Enter x: 17 y = 533.6473 }
You need to login to post a comment.
