Временная функция

Структура языка паскаль. Составление схемы алгоритма и программы для построения графика временной функции, работающей как в машинном, так и в реальном времени. Методы бисекций, простой итерации, Ньютона, Горнера, Гаусса. Разработка основной программы.

Рубрика Программирование, компьютеры и кибернетика
Вид курсовая работа
Язык русский
Дата добавления 24.03.2018
Размер файла 111,1 K

Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже

Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.

Размещено на http://www.allbest.ru/

Содержание

Введение

1. Постановка задачи

2. Выбор и обоснование методов решения

2.1 Метод бисекций

2.2 Метод хорд

2.3 Метод простой итерации

2.4 Метод Ньютона

2.5 Схема Горнера

2.6 Метод Гаусса

2.7 Метод простой итерации для СЛАУ

2.8 Метод Зейделя

3. Разработка и обоснование основной программы

3.1 Таблица идентификаторов

3.2 Блок-схемы

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

4. Результаты вычислений

Литература

Введение

Несмотря на появление новых технологий Turbo Pascal, во многом задуманный как язык для обучения, и на сегодняшний день остается одним из самых удобных средств для изучения программирования. Это определяет его популярность среди широкой аудитории начинающих программистов: школьников и студентов.

Язык Паскаль позволяет создавать не только несложные программы, но и структурированные программы трудоемких и сложных вычислений предоставляя возможности работы, как с числовой, так и символьной информацией.

Достоинства языка:

он ориентирован на структурное программирование, имеет развитые средства контроля и достаточно прост в изучении;

язык имеет хороший состав типов и структурных данных;

трансляторы с Паскаля есть во всех распространённых ПК;

конкретные реализации языка дают возможность использовать все аппаратные средства ПК;

на основе языка Паскаль разработана Delphi - одна из современных систем современного программирования.

Структура языка паскаль

Алгоритмический язык - это система правил для описания процесса обработки данных. Он включает алфавит, из символов которого формируются слова, выражения, операторы (предложения). Алфавит - это набор допустимых символов языка. Слова (идентификаторы, константы) формируются из символов по определённым правилам. Выражения - это группы слов, имеющих определённый смысл. Операторы - это предложения для описания некоторого действия в процессе обработки данных. Операторов формируются программы.

Алгоритмический язык должен иметь формальные правила определения всех конструкций, допустимых в языке, и правила толкования. Систему правил формирования множества конструкций языка (слов, выражений, операторов) представляет синтаксис языка. Систему правил истолкования смысла конструкций языка человеком и соответствующую им реализацию этих правил транслятором определяет семантика. Семантика может быть задана формально, с помощью металингвистических формул, и неформально, словесным описанием. Семантика определяет назначение конструкции, её особенности, ограничения и т. п.

Структура различных языков программирования однотипна. Они должны иметь средства для:

- определения свойств объектов программы (её данных);

- определения обработки, т. е. получения новых значений объектов;

- организации процесса обработки данных (разветвлений процесса обработки данных и циклической обработки);

- ввода-вывода данных, т. е. обмена данными между ОП и внешними устройствами (магнитными дисками, портами, принтером);

- формирования и использования модулей (программ, процедур, функций) и библиотек модулей (системных и пользовательских, разработанных программистом).

1. Постановка задачи

Составить схему алгоритма и программу для построения графика временной функции, работающую как в машинном, так и в реальном времени. Реальное время в диапазоне (t0-tкон) формируется таймером в виде программного модуля с метками Тк, называемыми временем квантования. При вычислении функции использовать алгоритм Горнера.

Функция: y=¦a*t2+m*t+n+l¦,

Где t0=0 с; tкон=9 с; Тк=0,5 с;

l - корень нелинейного уравнения lnx-x+1,8=0, которое надо решить методом простых итераций с точностью , при начальном значении корня, лежащего в диапазоне [2; 3];

n - наибольший по абсолютному значению корень системы уравнений:

a1v+b1z=d1;

a2v+b2z=d2;

при a1=5; b1=-3; d1=2; a2=-2; b2=1; d2=3.

Коэффициенты:

а=0,3

m=cos150

2. Выбор и обоснование методов решения

Предполагаем, что функция f(x) непрерывна и ограничена в заданном интервале [a; b], также предполагается, что значение функции на концах интервала f(a) и f(b) имеют разные знаки, то есть f(a)*f(b)<0.

2.1 Метод бисекций

Метод бисекций (деления отрезка пополам) используется для решения нелинейных уравнений. Осуществляется метод следующим образом:

проверяем условие f(a)*f(b)<0;

делим отрезок [a,b] пополам: c=(a+b)/2;

вычисляем f(a)*f(c) и если это значение меньше нуля, то рассматриваем промежуток [a; c], иначе - [c;b];

Деление отрезка выполняем до тех пор, пока не выполняется следующее условие:

Размещено на http://www.allbest.ru/

a - b <= е, где е - заданная точность. Любая точка из отрезка [a; b] будет подходить в качестве решения.

2.2 Метод хорд

Вывод рабочей формулы:

Рассмотрим случай, когда f(a)<0, а f(b)>0:

1. Разделим [a , b] в отношении - f(a)/f(b).

2. Из рисунка видно, что 1-ое приближение корня x1=a+h1, h1 находим из подобия треугольников: aAx1 подобен bBx1, тогда h1=-f(a)(b-a)/(f(b)-f(a)), таким образом x1=a-f(a)(b-a)/(f(b)-f(a)), далее определяем на каком из отрезков находится корень ([a , x1] либо [x1 ,b]) и применяем вышеописанный алгоритм.

3. Счет закончен, когда |xn+1 - xn |<= либо | f(xn+1) |<=.

Для сходимости процесса вычислений в методе хорд важное значение имеет график функции на отрезке [a , b]: график должен быть либо выпуклым, либо вогнутым, должен иметь высокую крутизну (вторая производная должна сохранять знак).

Данный метод является более быстрым способом нахождения корня уравнения вида f(x)=0.

2.3 Метод простой итерации

Суть метода состоит в том, что исходное уравнение f(x)=0 заменяется эквивалентным x=ц(x). При использовании метода простой итерации, важным является выбор начального приближения, т.е. того приближения, при котором процесс будет сходящимся. Условие , при котором данный процесс сходится , определяется следующей теоремой: если интервал [a,b] является интервалом изоляции корня уравнения x = ц(x-) , и во всех точках этого интервала производная ц'(x-) удовлетворяет условию : |ц'(xn-)|<q<1,

где q- наименьшее значение |ц'(x-)| на отрезке [a,b],

то итерационный процесс сходиться. При этом скорость сходимости тем выше, чем ниже q.

Таким образом начальное приближение выбирается из соображений |ц'(xо-)|<1,

Преобразование исходного уравнения к виду х= ц(x) можно осуществить многими методами . Например , выделить х из исходного уравнения , а остальное перенести в правую часть .Вычисления заканчиваются когда

| xn+1 - xn | <= е .

Алгоритм нахождения корня:

1) Заменяем уравнения f(x)=0 эквивалентным выражением x=ц(x)

2) Находим х1= ц(xо).

3) Проверяем |x1-xo|<=е, если выполняется условие , х1-корень, если нет ,продолжаем : х2= ц(x1)

x3= ц(x2)

……..

xn+1 = ц(xn-)

Счет заканчивается , когда | xn+1 - xn | <= е либо f(xn+1)<= е .

Плюс:

Скорость сходимости - большая.

Минус:

Необходимо преобразовывать уравнение f(x)=0 к виду x=ц(x), что не всегда возможно

2.4 Метод Ньютона

В данном методе осуществляется экстраполяция с помощью касательной к кривой в данной точке. В основе лежит разложение функции f(x) в ряд Тейлора. Члены, содержащие h во второй и более высоких степенях, отбрасываются, и используется соотношение xn+1=xn+h. Предполагается, что переход от xn к xn+1 приближает значения функции к 0. Тогда f(x1)+hf'(x1)=0 => h= - f(x1)/f'(x1). Таким образом, рабочая формула будет иметь вид:

Xn+1=f(Xn)/f'(Xn)

X1=f(X0)/f'(X0)

X2=f(X1)/f'(X1)

………………..

Xn+1=f(Xn)/f'(Xn)

Счёт заканчивается, когда |xn+1 - xn|<eps или |f(xn+1)|< е.

2.5 Схема Горнера

Существуют различные методы решения полиномов на языке PASCAL. Один из них - разложение полинома по схеме Горнера.

Полином:

y = a0 + a1t + a2t2+ a3t3+ a4t4+ … + antn

по схеме Горнера представляется в виде

y = a0 + t(a1 + t(a2 +t(a3 +… + t(an-1 + t an)…)))

Данное разложение полинома удобно тем, что в нём отсутствует возведение в степень, что значительно ускоряет вычисление полинома.

2.6 Метод Гаусса

За основу метода принята идея последовательного исключения неизвестных и приведение СЛАУ к треугольному виду.

Дана СЛАУ :

a11 x1 + a12 x2 +…+ a1n xn = b1

a21 x1 + a22 x2 +…+ a2n xn = b2

an1 x1 + an2 x2 +…+ ann xn = bn

Алгоритм решения СЛАУ.

Предположим n=3-число уравнений.

a11 x1 + a12 x2 +…+ a13 x3 = b1 (1)

a21 x1 + a22 x2 +…+ a23 x3 = b2 (2)

a31 x1 + a32 x2 +…+ a33 x3 = b3 (3)

1) Если a11 <>0 (т. е. система не является вырожденной) делим первое уравнение на a11.

1) Исключим из уравнения (2) x1. Для этого умножим уравнение (1) на коэффициент a21 и вычтем из уравнения (1) уравнение (2).

2) Исключим из уравнения (3) x1. Для этого умножим уравнение (1) на коэффициент a31 и вычтем из уравнения (1) уравнение (3).Получили СЛАУ:

x1 + a12* x2 + a13* x3 = b1* (1)

0 + a22* x2 + a23* x3 = b2* (2)

0 + a32* x2 + a33* x3 = b3* (3)

4)Разделим второе уравнение на a22*.

5) Исключим из уравнения (3) x2. Для этого умножим уравнение (2) на коэффициент a32* и вычтем из уравнения (2) уравнение (3). Получили СЛАУ:

x1 + a12* x2 + a13* x3 = b1*

0 + x2 + a23** x3 = b2**

0 + 0 + a33** x3 = b3**

Таким образом, исходная СЛАУ приведена к эквивалентной системе треугольного вида. Преобразование исходной СЛАУ к треугольному виду называется прямым ходом. Процедура нахождения неизвестных из полученной треугольной СЛАУ осуществляется обратным ходом.

2.7 Метод простой итерации для СЛАУ

При большом числе неизвестных используют приближённо-численные методы.

Дана СЛАУ:

а11*х1+а12*х2+…+х1n*хn=В1

а21*х1+а22*х2+…+х2n*xn=B2

…..

an1*x1+an2*x2+…+ann*xn=Bn

|a11 a12 … a1n| |B1| |x1|

A=| a21 a22 … a2n| B= |B2 x=|x2|

|…. | |….| |…|

|an1 an2 … ann| |Bn| |xn|

Предположим, что аii<>0. Разрешим первое уравнение относительно х1, второе относительно х2 и т.д.

x1=b1+A12*x2 +A13*x2+…+A1n*xn

x2=b2+A21*x1+A23*x3+…+A2n*xn

…..

xn=bn+An1*x1+An2*x2+…+An(n-1)*n(n-1)

Тогда x=b + A*x

Далее решаем методом последовательных приближений. За начальное приближение выбираем столбец свободных членов:

X10=b1

X20=b1

…..

Xn0=b1;

Алгоритм нахождения корней:

X11=b1+A*x10

X21=b2+A*x20

…..

Xn1=bn+A*xn0

Вычисление заканчивается тогда, когда разность между 2-мя ближними итерациями значений корня будет <= е.

2.8 Метод Зейделя

Он представляет собой некоторую модификацию метода итерации. основная идея в том, что при вычислении к+1 приближения неизвестных xi учитываются уже вычисленные к+1 значения переменной x1,x2,x3,…

Метод Зейделя даёт лучшую сходимость, чем метод итерации, но приводит к более громоздким вычислениям. Этот метод может сходиться тогда, когда метод итерации расходится, и наоборот, процесс заканчивается когда разность приближёния корня в соседней итерации <= заданной точности.

3.Разработка и обоснование основной программы

3.1 Таблица идентификаторов

Иден.

Наименование

x0,x1

Корни нелинейного уравнения

i, c

Счётчики

a, t, n, m, l

Коэффициенты временной функции

t

Время

to

Начальное время

tk

Конечное время

a, b

Параметры для решения нелинейного уравнения

e

Точность вычисления корня

3.2 Блок схемы

Метод бисекций

Нет Да

Нет

Да

Метод хорд

Нет Да

Нет Да

Нет

Да

Метод простой итерации

Нет

Да

Нет

Да

Метод Ньютона

Нет

Да

Нет

Да

Схема Горнера

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

Program kursach;

uses crt,graph;

const pm=5;

var

y,a,t,m,n,l,b0,a0,c0,e:real;

c,i:byte;

key:char;

Prexit:boolean;

gd, gm:integer;

menupunkts:array[1..5] of string;

Procedure PS;

begin writeln(' '); end;

Procedure uvert;

var z:integer;

begin

for z:=1 to 2 do begin

sound(587); delay(875); nosound; if z=1 then write(' При выполнении');

sound(587); delay(125); nosound; if z=1 then write(' данной курсовой');

sound(587); delay(500); nosound; if z=1 then writeln(' работы'); ps;

sound(698); delay(500); nosound; if z=1 then write(' не пострадало');

sound(988); delay(125); nosound; if z=1 then write(' не одно живое');

sound(880); delay(125); nosound; if z=1 then writeln(' существо)))'); ps;

sound(784); delay(125); nosound; if z=1 then write(' Все расчеты');

sound(880); delay(125); nosound; if z=1 then write(' велись');

sound(988); delay(500); nosound; if z=1 then write(' на компьютере,');

delay(125); if z=1 then writeln(' тем самым'); ps;

sound(880); delay(500); nosound; if z=1 then write('была сэкономлена');

sound(784); delay(250); nosound; if z=1 then write(' N-ная сумма');

sound(698); delay(125); nosound; if z=1 then writeln(' денег'); ps;

sound(659); delay(125); nosound; if z=1 then write(' и спасено два');

sound(587); delay(125); nosound; if z=1 then writeln(' дерева.'); ps; ps; ps; ps;

sound(659); delay(125); nosound;

sound(698); delay(250); nosound;

sound(698); delay(125); nosound;

if z=1 then write('Спасибо за внимание!');

delay(125);

sound(659); delay(500); nosound;

sound(587); delay(125); nosound;

end;

readln;

end;

Procedure zagr3;

var gm,gd,i,g,j:integer;

begin

gd:=detect;

gm:=1;

initgraph(gd,gm,'D:\Pascal2\Bgi');

cleardevice;

setcolor(13);

for i:=0 to 250 do begin

line(0+2*i,0+2+i,320-2*i,0+2*i); line(320+2*i,0+2*i,640-2*i,0+2*i);

line(320-2*i,0+2*i,320-2*i,480-2*i); line(320+2*i,0+2*i,320+2*i,480-2*i);

line(320-2*i,480-2*i,0+2*i,480-2*i); line(320+2*i,480-2*i,640-2*i-2*i,480);

line(0+2*i,480-2*i,0+2*i,0+2*i); line(640-2*i,480-2*i,640-2*i,0+2*i);

delay(25);

end;

closegraph;

end;

Procedure zagr;

var gm,gd,i,g,j:integer;

begin

gd:=detect;

gm:=1;

initgraph(gd,gm,'D:\Pascal2\Bgi');

cleardevice;

for j:=1 to 5 do begin

for i:=1 to 480 do begin

setcolor(random(14));

line(0+i,0,640,480-i);

setcolor(random(14));

line(0,0+i,640-i,480);

end;

for i:=1 to 480 do begin

setcolor(random(14));

line(0+i,480,640,0+i);

setcolor(random(14));

line(0,480-i,640-i,0);

end;

end;

closegraph;

end;

Procedure zagr2;

var gm,gd,i,g,j:integer;

begin

gd:=detect;

gm:=1;

initgraph(gd,gm,'D:\Pascal2\Bgi');

cleardevice;

for j:=1 to 15 do begin

for i:=1 to 320 do begin

setcolor(random(14));

line(0,240-i,640,240-i);

setcolor(random(14));

line(0,240+i,640,240+i);

end;

for i:=1 to 320 do begin

setcolor(random(14));

line(320+i,0,320+i,480);

setcolor(random(14));

line(320-i,0,320-i,480);

end;

end;

closegraph;

end;

Procedure sneg;

var

gd, gm,i,j,h,k,l,p:integer;

begin

gd:=0;

initgraph(gd,gm,'c:\tp\bgi');

for p:=1 to 75 do begin cleardevice;

for k:=1 to 100 do begin

i:=random(480); j:=random(640);

putpixel(j,i,15); end;

settextstyle(1,0,1); setcolor(15);

outtextxy(620-p*4,80,'Курсовая работа');

outtextxy(p*4,100,'студента группы 106620');

outtextxy(620-p*4,120,'Папко Алексея');

setcolor(4);

outtextxy(250,p*4,'Руководитель:');

outtextxy(250,p*4+20,'Тарасевич Леонид Александрович');

delay(40);

end;

readln;

closegraph;

end;

Procedure smile;

var i,j,k:integer;

begin

clrscr;

randomize;

gotoxy(27,2); textcolor(4);

writeln('ЖДИТЕ ИДЕТ ЗАГРУЗКА');

for j:=1 to 10 do begin

for i:=1 to 20 do begin

textcolor(1); if (i=12) and (j=3) or (i=7) and (j=3)

or (j=3) and (i=12)

or (i=6) and (j=7) or (i=13) and (j=7)

or (j=8) and (i=8) or (j=8) and (i=9) or (j=8) and (i=10)

or (j=8) and (i=11) or (j=8) and (i=12) or (j=8) and (i=7)

then textcolor(15);

write('1010'); delay(7); end;

for i:=1 to 20 do begin

textcolor(1); if (i=7) and (j=2) or (i=7) and (j=3) or (i=12) and (j=3) or

(i=12) and (j=2) or (i=6) and (j=7) or (i=13) and (j=7)

or (j=7) and (i=7) or (j=7) and (i=8) or (j=7) and (i=9)

or (j=7) and (i=10) or (j=7) and (i=11) or (j=7) and (i=12)

or (j=8) and (i=9) or (j=8) and (i=10)

then textcolor(15);

write('0101'); delay(7); end;

end;

gotoxy(30,25); textcolor(14); writeln('Нажмите ENTER');

end;

Procedure Menu_1_1;

Var

key:char;

i,c:byte;

prexit:boolean;

menupunkts:array[1..5] of string;

Procedure Pr1;

Function f(x:real):real;

Var fu:real;

begin

fu:=ln(x)-x+1.8;

f:=fu;

end;

Begin

zagr;

clrscr;

ps;

textcolor(2);

gotoxy(35,2);

writeln('Метод бисекций');

ps;

a0:=2;

b0:=3;

e:=0.001;

Repeat

c0:=(a0+b0)/2;

If f(a0)*f(c0)<0 then b0:=c0 else a0:=c0;

Until abs(a0-b0)<e;

textcolor(5);

gotoxy(30,4); writeln('г================================¬');

gotoxy(30,5); writeln('¦ Искомый коэффициент l= ',a0:5:4,' ¦');

gotoxy(30,6); writeln('¦ Точность вычисления Е=0.001 ¦ ');

gotoxy(30,7); writeln('L================================-');

l:=a0;

readkey;

end;

Procedure Pr2;

Var x0,x1,k:real;

Label m;

Function f(x:real):real;

var fu:real;

begin

fu:=ln(x)-x+1.8;

f:=fu;

end;

Begin

zagr;

m: clrscr;

ps;

textcolor(2);

gotoxy(35,2);

writeln('Метод хорд');

k:=0;

a0:=2;

b0:=3;

e:=0.001;

If f(a0)<0 then x0:=a0 else x0:=b0;

Repeat

If k=1 then x0:=x1;

If f(a0)<0 then x1:=x0-f(x0)*(b0-x0)/(f(b0)-f(x0))

else x1:=x0-f(x0)*(x0-a0)/(f(x0)-f(a0));

k:=1;

Until abs(x0-x1)<e;

textcolor(5);

gotoxy(30,4); writeln('г================================¬');

gotoxy(30,5); writeln('¦ Искомые коэффициент l=',x0:5:4,' ¦');

gotoxy(30,6); writeln('¦ Точность вычисления Е=0.001 ¦');

gotoxy(30,7); writeln('L================================-');

l:=x0;

readkey;

end;

Procedure Pr3;

var f,x0,x1,l:real;

label m,m1;

Function x(x0:real):real;

var xl:real;

begin

xl:=ln(x0)+1.8;

x:=xl;

end;

begin

zagr;

ps;

textcolor(2);

gotoxy(35,2);

writeln('Метод простой итерации');

a0:=2;

b0:=3;

e:=0.001;

x0:=2.3;

If abs(1/x0)<1 then m: x1:=x(x0);

If abs(x1-x0)<e then begin f:=abs(ln(x1)-x1+1.8); textcolor(5); ps;ps;

gotoxy(30,4); writeln('г=============================¬');

gotoxy(30,5); writeln('¦ Искомый коэффициент l=',x1:5:4,'¦');

gotoxy(30,6); writeln('¦ Точность вычисления Е=0.001 ¦');

gotoxy(30,7); writeln('L=============================-');

end

else begin x0:=x1; goto m; end;

l:=x1;

readkey; end;

Procedure Pr4;

var

xn,r,x:real;

label p;

Function f(x:real):real;

Var fu:real;

begin

fu:=ln(x)-x+1.8;

f:=fu;

end;

begin

zagr;

gotoxy(35,2);textcolor(2);

writeln('Метод Ньютона');

p: a0:=2;

b0:=3;

e:=0.001;

r:=0;

if f(b0)/(-b0*b0)>0 then

begin

repeat

if r=1 then b0:=xn;

xn:=b0-f(b0)*(1/b0-b0);

r:=1;

until abs(xn-b0)<e;

textcolor(5);

gotoxy(30,4); writeln('г=============================¬');

gotoxy(30,5); writeln('¦ Искомый коэффициент l=', xn:5:4,'¦');

gotoxy(30,6); writeln('¦ Точность вычисления Е=0.001 ¦');

gotoxy(30,7); writeln('L=============================-');

l:=xn;

readkey; end;

end;

Begin

menupunkts[1]:=' Метод бисекций ';

menupunkts[2]:=' Метод хорд';

menupunkts[3]:=' Метод простой итерации';

menupunkts[4]:=' Метод Ньютона';

menupunkts[5]:=' Назад в главное меню';

c:=1; prexit:=false;

Repeat clrscr;

gotoxy(30,10);

for i:=1 to 5 do begin textcolor(15); ps;

if i=c then begin sound(988); delay(100); nosound;

textcolor(3); gotoxy(25,10+2*i); write('=>');

gotoxy(60,10+2*i); write('<=');

end

else textcolor(15); gotoxy(30,10+2*i);

writeln(menupunkts[i]); end;

key:=readkey;

case ORD(key) of

13:begin clrscr;

case c of

1:Pr1;

2:Pr2;

3:Pr3;

4:Pr4;

5:prexit:=not prexit; end; end;

72:dec(c);

80:Inc(c); end;

If c<1 then c:=5;

If c>5 then c:=1;

Until prexit;end;

Procedure Menu_1_2;

Var

key:char;

o,v:byte;

prexit:boolean;

menupunkts:array[1..4] of string;

Procedure Pr5; {metod Gaussa}

label 1;

var

a:array[1..2,1..2] of real;

x,b:array[1..3] of real;

ak,aik:real;

j,k1,k,l,n1,n0:integer;

BEGIN

zagr2;

clrscr;

n0:=2;

a[1,1]:=5; a[1,2]:=-3;

a[2,1]:=-2; a[2,2]:=1;

writeln;

b[1]:=2;

b[2]:=3;

writeln;

clrscr;

writeln;

writeln;

n1:=n0-1;

for k:=1 to n1 do begin ak:=a[k,k];

for j:=k to n0 do a[k,j]:=a[k,j]/ak;

b[k]:=b[k]/ak;

k1:=k+1;

for i:=k1 to n0 do begin

if (a[i,k]<0) or (a[i,k]>0) then aik:=a[i,k]

else continue;

b[i]:=b[i]-b[k]*aik;

for l:=k to n0 do a[i,l]:=a[i,l]-a[k,l]*aik;

end;end;

k:=n0;

1:x[k]:=b[k]/a[k,k];

for j:=1 to n1 do begin

i:=n0-j;

b[i]:=b[i]-a[i,k]*x[k];end;

k:=k-1;

if (k-1)>= 0 then goto 1; textcolor(2);

gotoxy(35,2); writeln('Метод Гаусса'); textcolor(5);

gotoxy(30,4); writeln('г===========================¬');

gotoxy(30,5); writeln('¦ Результат решения системы ¦');

for i:=1 to 2 do begin

gotoxy(30,5+i); writeln('¦ x',i,'=',x[i]:2:4,' ¦'); end;

if abs(x[1])>abs(x[2]) then n:=abs(x[1]) else n:=abs(x[2]);

gotoxy(30,8); writeln('¦ Искомый коэффициент ¦');

gotoxy(30,9); writeln('¦ n=',n:3:1,' ¦');

gotoxy(30,10); writeln('L===========================-');

readkey;

END;

Procedure Pr6; {zeidel}

label 1;

var

a:array[1..2,1..2] of real;

b,x:array[1..2] of real;

x1,x2,x3,e:real;

i,j,k:integer;

begin

zagr2;

clrscr;

e:=0.0001;

a[1,1]:=5; a[1,2]:=-3; b[1]:=2;

a[2,1]:=1; a[2,2]:=-1; b[2]:=8;

x[1]:=b[1]/a[1,1];

x[2]:=0;

k:=0;

1:k:=k+1;x1:=(b[1]-a[1,2]*x[2])/a[1,1];

x2:=(b[2]-a[2,1]*x1)/a[2,2];

if (abs(x1-x[1])<=e) and (abs(x2-x[2])<=e) then begin

gotoxy(35,2); textcolor(2); writeln('Метод Зейделя');

textcolor(5);

gotoxy(30,4); writeln('г===========================¬');

gotoxy(30,5); writeln('¦ Результат решения системы ¦');

gotoxy(30,6); writeln('¦ x1= ',x1:9:5,' ¦');

gotoxy(30,7); writeln('¦ x2= ',x2:9:5,' ¦');

end

else begin

x[1]:=x1;

x[2]:=x2;

goto 1;end;

gotoxy(30,8); writeln('¦ Искомое значение ¦');

If abs(x1)>abs(x2) then begin n:=abs(x1);

gotoxy(30,8); writeln('¦ n=',n:7:5,' ¦');

end

else begin n:=abs(x2);

gotoxy(30,9); writeln('¦ n=',n:7:5,' ¦');

end;

gotoxy(30,10); writeln('L===========================-');

readln;

end;

Procedure Pr7; {iteraciya}

label 1;

var

a:array[1..2,1..2] of real;

b,x:array[1..2] of real;

x1,x2,e:real;

i,j,k:integer;

begin

zagr2;

clrscr;

e:=0.001;

a[1,1]:=5; a[1,2]:=-3; b[1]:=2;

a[2,1]:=1; a[2,2]:=-1; b[2]:=8;

x[1]:=b[1];

x[2]:=b[2];

k:=0;

1:k:=k+1;x1:=(b[1]-a[1,2]*x[2])/a[1,1];

x2:=(b[2]-a[2,1]*x[1])/a[2,2];

if (abs(x1-x[1])<=e) and (abs(x2-x[2])<=e) then begin

textcolor(2);

gotoxy(35,2); writeln('Метод Зейделя');

textcolor(5);

gotoxy(30,4); writeln('г===========================¬');

gotoxy(30,5); writeln('¦ Результат решения системы ¦');

gotoxy(30,6); writeln('¦ x1= ',x1:9:5,' ¦');

gotoxy(30,7); writeln('¦ x2= ',x2:9:5,' ¦');

end

else begin

x[1]:=x1;

x[2]:=x2;

goto 1;end;

gotoxy(30,8); writeln('¦ Искомое значение ¦');

If abs(x1)>abs(x2) then begin

gotoxy(30,9); writeln('¦ n=',abs(x1):9:5,' ¦');

n:=abs(x1); end

else begin

gotoxy(30,9); writeln('¦ n=',abs(x2):9:5,' ¦');

gotoxy(30,10); writeln('L===========================-');

n:=abs(x2); end;

readln;

end;

Begin

menupunkts[1]:=' Метод Гаусса ';

menupunkts[2]:=' Метод Зейделя';

menupunkts[3]:=' Метод простой итерации ';

menupunkts[4]:=' Назад в главное меню';

c:=1; prexit:=false;

Repeat clrscr;

gotoxy(30,10);

for i:=1 to 4 do begin textcolor(15); ps;

if i=c then begin sound(740); delay(100); nosound;

textcolor(3); gotoxy(25,10+2*i); write('=>');

gotoxy(55,10+2*i); write('<=');

end

else textcolor(15); gotoxy(30, 10+2*i);

writeln(menupunkts[i]); end;

key:=readkey;

case ORD(key) of

13:begin clrscr;

case c of

1:Pr5;

2:Pr6;

3:Pr7;

4:prexit:=not prexit; end; end;

72:dec(c);

80:Inc(c); end;

If c<1 then c:=4;

If c>4 then c:=1;

Until prexit;end;

Procedure Pr8; {shema gornera}

Var y1,y2:real;

i:integer;

const a=0.3;

begin

zagr3;

gotoxy(10,4); writeln('y=¦a*t^2+m*t+l¦, где');

gotoxy(10,5); writeln('a=0.3');

gotoxy(10,6); writeln('m=cos15');

gotoxy(10,7); writeln('l=',l:4:3);

gotoxy(10,8); writeln('n=',n:5:3);

gotoxy(33,2); textcolor(2); writeln('Результат вычисления функции');

m:=cos(15*pi/180);

textcolor(5);

For i:=0 to 18 do begin

t:=0.5*i;

y1:=a*t+m;

y2:=y1*t+n+l;

gotoxy(33,4+i); writeln('¦ ¦');

gotoxy(35,4+i);writeln('y(',i/2:2:1,')=',y2:6:4);

end;

gotoxy(33,3); writeln('г================¬');

gotoxy(33,23); writeln('L================-');

readln;

end;

Procedure Graf;

Var

key:char;

q,p:byte;

prexit:boolean;

menupunktss:array[1..3] of string;

Procedure setka;

{Uses graph;}

var gm,gd,i,g:integer;

begin

gd:=detect;

gm:=1;

initgraph(gd,gm,'D:\Pascal2\Bgi');

cleardevice;

setcolor(13);

setlinestyle(0,0,3);

line(40,20,40,425); line(40,20,43,28); line(40,20,37,28);

line(35,420,490,420); line(490,420,482,423); line(490,420,482,417);

setcolor(1);

outtextxy(505,420,'T,c');

outtextxy(40,5,'Y');

setcolor(4);

outtextxy(40,435,'0');

outtextxy(90,435,'1');

outtextxy(140,435,'2');

outtextxy(190,435,'3');

outtextxy(240,435,'4');

outtextxy(290,435,'5');

outtextxy(340,435,'6');

outtextxy(390,435,'7');

outtextxy(440,435,'8');

outtextxy(490,435,'9');

outtextxy(15,420,'20');

outtextxy(15,320,'30');

outtextxy(15,220,'40');

outtextxy(15,120,'50');

outtextxy(15,20,'60');

setcolor(2);

setlinestyle(1,0,1);

line(40,20,490,20);

line(40,120,490,120);

line(40,220,490,220);

line(40,320,490,320);

line(490,420,490,20);

line(440,420,440,20);

line(390,420,390,20);

line(340,420,340,20);

line(290,420,290,20);

line(240,420,240,20);

line(190,420,190,20);

line(140,420,140,20);

line(90,420,90,20);

end;

Procedure tablica;

Var y1,y2,j:real;

i:integer;

rezy,rezt:string;

y3:array[0..18] of string;

const a=0.3;

begin

m:=cos(15*pi/180);

j:=0;

For i:=0 to 18 do begin

t:=0.5*i; str(t:2:1,rezt);

outtextxy(510,120+10*i,rezt);

y1:=a*t+m;

y2:=y1*t+n+l;

str(y2:5:3,rezy); outtextxy(550,120+10*i,rezy);

writeln('y',i,'=',y2:6:4);

j:=j+1;

end;

setcolor(3);

setlinestyle(0,0,1);

rectangle(505,95,545,115);

rectangle(505,115,545,310);

rectangle(545,95,600,115);

rectangle(545,115,600,310);

setcolor(11);

outtextxy(517,102,'t');

outtextxy(565,102,'y');

end;

Procedure Mash_t;

Var y,t:real;

i:integer;

const a=0.3;

begin

setka;

tablica;

m:=cos(15*pi/180);

For i:=0 to 450 do begin

t:=0.02*i;

y:=a*t+m;

y:=y*t+n+l;

putpixel(trunc(40+t*50),trunc(620-y*10),15);

end;

readkey;

closegraph;

end;

Procedure Real_t;

Var y,t:real;

i:integer;

const a=0.3;

begin

m:=cos(15*pi/180);

setka;

tablica;

For i:=0 to 450 do begin

t:=0.02*i;

y:=a*t+m;

y:=y*t+n+l;

putpixel(trunc(40+t*50),trunc(620-y*10),15);

delay(20);

end;

readkey;

closegraph;

end;

Begin

паскаль программа алгоритм бисекция

menupunktss[1]:='В машинном времени';

menupunktss[2]:='В реальном времени';

menupunktss[3]:='Назад в главное меню';

q:=1; prexit:=false;

Repeat clrscr;

gotoxy(30,10);

for p:=1 to 3 do begin textcolor(15); ps;

if p=q then begin sound(880); delay(100); nosound;

textcolor(3); gotoxy(25,10+2*p); write('=>');

gotoxy(55,10+2*p); write('<=');

end

else textcolor(15); gotoxy(30,10+2*p);

writeln(menupunktss[p]); end;

key:=readkey;

case ORD(key) of

13:begin clrscr;

case q of

1:Mash_t;

2:Real_t;

3:prexit:=not prexit; end; end;

72:dec(q);

80:Inc(q); end;

If q<1 then q:=3;

If q>3 then q:=1;

Until prexit;end;

BEGIN

clrscr;

smile; readln;

sneg;

menupunkts[1]:='Решение нелинейного уравнения';

menupunkts[2]:='Решение системы уравнений';

menupunkts[3]:='Схема Горнера';

menupunkts[4]:='Графики';

menupunkts[5]:='Выход';

c:=1; prexit:=false;

Repeat clrscr;

gotoxy(30,10);

for i:=1 to pm do begin textcolor(15); ps;

if i=c then begin sound(554); delay(100); nosound;

textcolor(3); gotoxy(25,10+2*i); write('=>');

gotoxy(60,10+2*i); write('<=');

end

else textcolor(15); gotoxy(30, 10+2*i);

writeln(menupunkts[i]); end;

key:=readkey;

case ORD(key) of

13:begin clrscr;

case c of

1:Menu_1_1;

2:Menu_1_2;

3:Pr8;

4:Graf;

5:begin uvert; prexit:=not prexit; end; end; end;

72:dec(c);

80:Inc(c); end;

If c<1 then c:=pm;

If c>pm then c:=1;

Until prexit;end.

4. Результаты Вычислений

Таблица результатов

t,c

y

0

21.8457

0.5

22.4037

1.0

23.1116

1.5

23.9696

2.0

24.9778

2.5

26.1355

3.0

27.4435

3.5

28.9014

4.0

30.5094

4.5

32.2674

5.0

34.1753

5.5

36.2333

6.0

38.4413

6.5

40.7992

7.0

43.3072

7.5

45.9651

8.0

48.7731

8.5

51.7311

9.0

54.8390

График функции

Литература

1. Конспект лекций Тарасевич Л. А.

2. Турбо-Паскаль 7.0 самоучитель Лукин С. Н.

Размещено на Allbest.ru


Подобные документы

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

    курсовая работа [1,5 M], добавлен 21.11.2013

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

    курсовая работа [67,6 K], добавлен 20.11.2012

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

    курсовая работа [41,5 K], добавлен 15.03.2012

  • Выбор и обоснование методов составления схемы алгоритма и разработки программы для построения графика временной функции, работающей как в машинном, так и в реальном времени. Алгоритм Горнера. Программа на языке Quick BASIC (с распечаткой листинга).

    курсовая работа [55,1 K], добавлен 21.11.2012

  • Построение схемы алгоритма и программы для создания графика временной функции, работающей в машинном и реальном времени. Выбор методов решения и их обоснование. Значение коэффициентов и временной функции. Реализация временных задержек в программе.

    курсовая работа [6,2 M], добавлен 09.03.2012

  • Создание программ в Borland C++ Builder 6.0. Разработка программы для построения графика временной функции, работающей, как в машинном, так и в реальном времени. Использование алгоритма Горнера для вычисления корня квадратного и нелинейного уравнений.

    контрольная работа [925,2 K], добавлен 05.01.2016

  • Понятие машинного и реального времени, дискретизация времени. Реализация временных задержек в программе. Вычисление значения многочлена методом Горнера. Разработка схем алгоритмов, основной программы и подпрограмм. Построение графика временной функции.

    курсовая работа [40,7 K], добавлен 18.04.2012

  • Структура языка Паскаль, встроенные процедуры и функции. Составление алгоритма решения уравнения, описывающего работу кривошипно-шатунного механизма, с помошью метода итерации, метода Гаусса и метода Зейделя. Блок-схемы алгоритмов и текст программы.

    курсовая работа [64,6 K], добавлен 07.05.2011

  • Анализ функции и разработка алгоритма по ее вычислению. Программирование отдельных блоков и структур алгоритма. Структура Паскаль-программы. Раздел описаний, подпрограммы, тело программы. Полная Паскаль-программа в соответствии с разработанным алгоритмом.

    курсовая работа [241,8 K], добавлен 30.01.2016

  • Программирование на алгоритмическом языке Turbo Pascal на примере разработки алгоритма и программы расчета временной функции. Выбор, обоснование методов решения. Схемы алгоритмов основной программы и подпрограмм. Распечатка исходных и вычисленных величин.

    реферат [154,8 K], добавлен 15.03.2012

Работы в архивах красиво оформлены согласно требованиям ВУЗов и содержат рисунки, диаграммы, формулы и т.д.
PPT, PPTX и PDF-файлы представлены только в архивах.
Рекомендуем скачать работу.