на тему рефераты Информационно-образоательный портал
Рефераты, курсовые, дипломы, научные работы,
на тему рефераты
на тему рефераты
МЕНЮ|
на тему рефераты
поиск
Разработка приложений на С, Pascal, Delphi
p align="left">Требуется найти уравнение прямой y=ax+b (2), наилучшим образом согласующейся с опытными точками. Пусть мы нашли такую прямую. Обозначим через расстояние опытной точки от этой прямой (измеренное параллельно оси y). Из уравнения (2) следует, что (3) Чем меньше числа , тем лучше подобрана прямая. Характеристикой точности подбора может служить сумма квадратов этих расстояний .(4). Покажем, как можно подобрать прямую (2) так, чтобы сумма квадратов S была минимальной. Из уравнений (3) и (4) получаем: S= (5)

Условия минимума:

=0 (6)

(7)

Уравнения (6) и (7) можно записать в виде (8) и (9):

(8)

+n (9)

Из уравнений (8) и (9) легко найти a и b по опытным значениям и . Прямая (2), определяемая уравнениями (8) и (9), называется прямой, полученной по методу наименьших квадратов (этим названием подчеркивается то, что сумма квадратов S имеет минимум). Уравнения (8) и (9), из которых определяется прямая (2), называются нормальными уравнениями.

Можно указать простой и общий способ составления нормальных уравнений. Используя опытные точки (1) и уравнение (2), можно записать систему уравнений для a и b:

(10)

Умножим левую и правую части каждого из этих уравнений на коэффициент при первой неизвестной a (т.е. на , … , ) и сложим полученные уравнения, в результате получится первое нормальное уравнение (8). Умножим левую и правую части каждого из этих уравнений на коэффициент при второй неизвестной b, т.е. на 1, и сложим полученные уравнения, в результате получится второе нормальное уравнение (9). Решая его, получим коэффициенты искомой прямой a, b.

Блок-схема 28 Функция fa0 Блок-схема 29 Функция fb

2.2 Алгоритм программы обработки данных

Блок-схема 31 Процедура TForm1.Help1Click

Блок-схема 32 Процедура TForm1.Exit1Click

Блок-схема 33 Процедура TForm1.Button1Click

Блок-схема34 Процедура TForm1.Print1Click

Блок-схема 35 Процедура TForm1.PrintSetup1Click

Блок-схема 36 Процедура TForm1.Button2Click

Блок-схема 37 Процедура TForm1.Button3Click

2.3 Тестирование программы

Блок-схема 38 Процедура TForm1.Save1Click

При запуске программы на экране появляется форма:

Рисунок 5 Форма запуска

При нажатии на кнопку Menu, пользователь получает доступ к главному меню программы:

Назначение его пунктов и общие принципы пользования программой описаны в окне, выпадающем при нажатии кнопки Help.

Рисунок 6 Главное меню

Рисунок 7 Окно Help

Если пользователь выберет количество результатов для обработки и способ их введения, то на экране появится таблица измерений. Для проведения расчетов следует нажать кнопку Рассчитать. Для получения наглядного представления данных следует нажать одну из кнопок y=f(x) или Yp=f1(x). Построенные графики были проверены в программе Microsoft Excel 2007.

Рисунок 8 Таблица измерений

Рисунок 9 Сравнение графиков у=f(x)

Рисунок 10 Сравнение графиков Yp=f1(x)

После завершения расчетов программа позволяет сохранить результаты в файл, используя соответствующую кнопку главного меню.

Листинги программ

Вычисление интегралов С

(главная функция main)

void main ()

{/*opisanie peremennyh*/

float x,a,b,h,y,integral,eps;

int n;

char vop,vop1;

LevPr lp;

PravPr pp;

SrPr sp;

Trapeciy tr;

FILE *in;

FILE *out;

int i,j,menu,menu1,w;

vop='n';

in=fopen("in.txt","rt");

out=fopen("out.txt","w");

do

{clrscr();

/*zapros, schitat' li dannye iz faila*/

printf("\n vyberite sposob vvoda dannyh: 1 - ruchnoi, 2 - iz faila ");

scanf("%d", &w);

switch(w)

{case 1:

{/*vvod dannyh v ruchuju*/

printf("\n Vvedite nijniy predel a= ");

scanf("%f", &a);

printf("\n Vvedite verhniy predel b= ");

scanf("%f", &b);

printf("\n Vvedite tocnost ");

scanf("%f", &eps);

printf("\n Vvedite kolichestvo otrezkov n= ");

scanf("%d", &n);

break;}

case 2:

{/*schityvanie dannyh iz faila*/

fscanf(in, "%f",&a);

printf("\n Nijniy predel a=%f", a);

fscanf(in, "%f",&b);

printf("\n Verhniy predel b=%f", b);

fscanf(in, "%f",&eps);

printf("\n Tochnost eps= %f", eps);

fscanf(in, "%d",&n);

printf("\n kolichestvo otrezkov n=%d", n);

break;}

}

/*zapros u polzovatelia metoda vychislenija*/

printf("\n Viberite deystvie:\n1 - Sposob Levyh pryamougolnikov\n2 - Sposob pravyh pryamougolnifov\n3 - Sposob sredhih pryamougolnikov\n4 - Sposob trapeciy\n");

scanf("%d", &menu);

switch(menu)

{case 1:

{/*zapros, kakuju funkciju obrabotat'*/

printf("\n Viberite deystvie:\n1 - Integral(x*x)\n2 - Integral(sqr(x)*sin(x)/(exp(1./3.*ln(cos(x)))))\n");

scanf("%d", &menu1);

switch(menu1)

{case 1:

{integral=lp.lp1(a,b,eps,n);

break;}

case 2:

{integral=lp.lp2(a,b,eps,n);

break;}

}

break;}

case 2:

{

printf("\n Viberite deystvie:\n1 - Integral(x*x)\n2 - Integral(sqr(x)*sin(x)/(exp(1./3.*ln(cos(x)))))\n");

scanf("%d", &menu1);

switch(menu1)

{

case 1:

{

integral=pp.pp1(a,b,eps,n);

break;

}

case 2:

{

integral=pp.pp2(a,b,eps,n);

break;

}

}

break;}

case 3:

{printf("\n Viberite deystvie:\n1 - Integral(x*x)\n2 - Integral(sqr(x)*sin(x)/(exp(1./3.*ln(cos(x)))))\n");

scanf("%d", &menu1);

switch(menu1)

{

case 1:

{

integral=sp.sp1(a,b,eps,n);

break;

}

case 2:

{

integral=sp.sp2(a,b,eps,n);

break;

}

}

break;}

case 4:

{

printf("\n Viberite deystvie:\n1 - Integral(x*x)\n2 - Integral(sqr(x)*sin(x)/(exp(1./3.*ln(cos(x)))))\n");

scanf("%d", &menu1);

switch(menu1)

{

case 1:

{

integral=tr.tr1(a,b,eps,n);

break;

}

case 2:

{

integral=tr.tr2(a,b,eps,n);

break;

}

}

break;

}

}

/*zapros na sohranenie resultatov v fail*/

printf("\n Hotite zapisat' resultaty v fail? y/n");

vop1=getch();

if (vop1=='y')

{

/*zapis' v fail*/

fputs( "\n Nijniy predel ", out );

fprintf(out, " %f", a);

fputs( "\n Verhniy predel ", out );

fprintf(out, "%f", b);

fputs( "\n Tochnost' ", out );

fprintf(out, "%f", eps);

fputs( "\n kolichestvo otrezkov ", out );

fprintf(out, "%d", n);

fputs( "\n Integral", out );

fprintf(out, " %f", integral);

fclose(out);

fclose(in);

}

/*vyvod resultatov na ekran*/

printf("\n Znachenie integrala = %f", integral);

/*zapros polzovatelu, zavershit' li rabotu programmy*/

printf("\n Hotite zavershit' zadachy?");

vop=getch();

} while (vop!='y');

printf("vypolnila studentka 895 gruppy Araztaganova Alina");

}

Вычисление интегралов Pascal

(примеры описания объекта)

type LevPr = object {opredelenie klassa, kotoriy realizuet metod levyh pryamougolnikov}

Public

function f1(x:real):real;

function f2(x:real):real;

function integralf1(a:real; b: real; h:real):real;

function integralf2(a:real; b: real; h:real):real;

function levprf1(a:real; b:real; eps: real; n:integer):real;

function levprf2(a:real; b:real; eps: real; n:integer):real;

end;

type PravPr = object {opredelenie klassa, kotoriy realizuet metod pravyh pryamougolnikov}

Public

function f1(x:real):real;

function f2(x:real):real;

function integralf1(a:real; b: real; h:real):real;

function integralf2(a:real; b: real; h:real):real;

function Pravprf1(a:real; b:real; eps: real; n:integer):real;

function Pravprf2(a:real; b:real; eps: real; n:integer):real;

end;

type SRPr = object {opredelenie klassa, kotoriy realizuet metod srednih pryamougolnikov}

Public

function f1(x:real):real;

function f2(x:real):real;

function integralf1(a:real; b: real; h:real):real;

function integralf2(a:real; b: real; h:real):real;

function Srprf1(a:real; b:real; eps: real; n:integer):real;

function Srprf2(a:real; b:real; eps: real; n:integer):real;

end;

type Trap = object {opredelenie klassa, kotoriy realizuet metod trapeciy}

Public

function f1(x:real):real;

function f2(x:real):real;

function integralf1(a:real; b: real; h:real):real;

function integralf2(a:real; b: real; h:real):real;

function Trapf1(a:real; b:real; eps: real; n:integer):real;

function Trapf2(a:real; b:real; eps: real; n:integer):real;

end;

{opisaniya motodov klassov}

function LevPr.f1(x: real):real;

begin

f1:=sqr(x);

end;

function LevPr.f2(x: real):real;

begin

f2:=sqr(x)*sin(x)/(exp(0.3*ln(abs(cos(x)))));

end;

function LevPr.integralf1(a:real; b: real; h:real):real;

var s, x: real;

begin

x:=a;

s:=0;

while x<b do begin

s:=s+LevPr.f1(x)*h;

x:= x+h;

end;

integralf1:=s;

end;

function LevPr.integralf2(a:real; b: real; h:real):real;

var s, x: real;

begin

x:=a;

s:=0;

while x<b do begin

s:=s+LevPr.f2(x)*h;

x:= x+h;

end;

integralf2:=s;

end;

function LevPr.levprf1(a:real; b:real;eps: real; n:integer):real;

label l1;

var

i: integer;

x, y, h, y1:real;

begin

h:=(b-a)/n;

y1:=LevPr.integralf1(a, b, h);

l1: n:=n*2;

h:=(b-a)/n;

y:=LevPr.integralf1(a, b, h);

if (abs(y-y1)>eps) then begin y1:=y; goto l1; end;

levprf1:=y1;

end;

function LevPr.levprf2(a:real; b:real; eps: real; n:integer):real;

label l1;

var

i: integer;

x, y, h, y1:real;

begin

h:=(b-a)/n;

y1:=LevPr.integralf2(a, b, h);

l1: n:=n*2;

h:=(b-a)/n;

y:=LevPr.integralf2(a, b, h);

if (abs(y-y1)>eps) then begin y1:=y; goto l1; end;

levprf2:=y1;

end;

Обработка измерений

(процедура, подсчитывающая коэффициенты)

begin

label1.visible:=true;

label4.visible:=true;

n:=strtoint(edit1.Text);

k:=0; l:=0; m:=0;

v:=0; w:=0; r:=0;

for i:=1 to n do begin

x[i]:=strtofloat(t1.cells[0,i]);

y[i]:=strtofloat(t1.cells[1,i]);

k:=k+ln(x[i]);

l:=l+ln(y[i]);

m:=m+ln(x[i])*ln(y[i]);

v:=v+sqr(ln(x[i]));

w:=w+ln(sqr(x[i]));

a:=fa0(i,k,l,m,v,w);

b:=fb(i,k,l);

yp[i]:=b*exp(ln(x[i])*a);

r:=r+yp[i];

t1.cells[2,i]:=floattostr(a);

t1.cells[3,i]:=floattostr(b);

t1.cells[4,i]:=floattostr(yp[i]);

end;

min:=yp[1];

max:=yp[1];

for i:=1 to n do begin

d:=abs((r/n-yp[i])/yp[i]);

t1.cells[5,i]:=floattostr(d);

if d<min then min:=d;

if d>max then max:=d;

end;

label1.Caption:= label1.Caption+' '+floattostr(min);

label4.Caption:= label4.Caption+' '+floattostr(max);

button3.enabled:=true;

button4.enabled:=true;

end;

Выводы

Компьютеры стали неотъемлемой частью нашей жизни. Но без хороших программ компьютер - это просто груда железа. Поэтому так важно осваивать языки программирования, чтобы не оказаться за бортом жизни и цивилизации.

Данная курсовая работа является завершающим этапом работы по предмету «Программирование на языках высокого уровня». Она является прекрасной возможностью закрепить свои практические знания по предмету, а также получить новые, которые не входили в программу курса.

Данная работа состоит из двух частей. В первой было необходимо разработать приложения на языках Pascal и С++ для вычисления численного значения определённого интеграла с заданной степенью точности. Выполнение задачи получилось не сразу, но после некоторого времени, потраченного на работу с программными кодами и их исправление, программы стали работать.

Вторая часть требовала составить программу обработки полученных прямых измерений, основанную на методе наименьших квадратов. Следует отметить практическую пользу такой обработки. Она позволяет не только найти аппроксимированную прямую, наиболее близко подходящую к результатам, но и увидеть ее графическое исполнение.

Таким образом, после выполнения поставленных задач я завершаю свою работу.

Список литературы

1. Калитки Н.Н. Численные методы: Учеб. пособие для вузов. - М. : Наука., 1978 г. - 512 с.

2. Котлинская Г.П., Галиновский О.И. Программирование на языке Си : Справочное пособие. - Минск. : Высшая школа., 1991. - 156 с.

3. Пахомов Б.И. C/C++ и MS Visual C++ 2005 для начинающих: Пособие для начинающих. - СПб. : БХВ - Петербург, 2007. - 464 с.

4. Программирование Учебник Turbo Pascal [электронный ресурс] Оператор case...of...end <http://www.cyberguru.ru/programming/pascal/pascal-introduction-page8.html> 22.05.2010

5. Самарский А. А., Гулин А. В. Численные методы : Учеб. пособие для вузов. -- М.: Наука. Гл. ред. физ-мат. лит., 1989. -- 432 с.

Приложения

Иллюстрации методов интегрирования

Рисунок 10 Метод левых прямоугольников

Рисунок 11 Метод правых прямоугольников

Рисунок 12 Метод средних Рисунок 13 Метод трапеций

прямоугольников

Страницы: 1, 2



© 2003-2013
Рефераты бесплатно, курсовые, рефераты биология, большая бибилиотека рефератов, дипломы, научные работы, рефераты право, рефераты, рефераты скачать, рефераты литература, курсовые работы, реферат, доклады, рефераты медицина, рефераты на тему, сочинения, реферат бесплатно, рефераты авиация, рефераты психология, рефераты математика, рефераты кулинария, рефераты логистика, рефераты анатомия, рефераты маркетинг, рефераты релиния, рефераты социология, рефераты менеджемент.