Построение временной функции
Общие сведения об алгоритмическом языке PASCAL. Схема алгоритма и программы для построения графика временной функции, работающей как в машинном, так и в реальном времени. Применение метода простой итерации, метода решения полинома на языке PASCAL.
Рубрика | Программирование, компьютеры и кибернетика |
Вид | курсовая работа |
Язык | русский |
Дата добавления | 15.03.2012 |
Размер файла | 41,5 K |
Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже
Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.
Размещено на http://www.allbest.ru/
2
Размещено на http://www.allbest.ru/
МИНИСТЕРСТВО ОБРАЗОВАНИЯ РЕСПУБЛИКИ БЕЛАРУСЬ
БЕЛОРУССКИЙ НАЦИОНАЛЬНЫЙ ТЕХНИЧЕСКИЙ УНИВЕРСИТЕТ
Кафедра «ТЭС»
ПОЯСНИТЕЛЬНАЯ ЗАПИСКА
К КУРСОВОЙ РАБОТЕ
ПО ДИСЦИПЛИНЕ Информатика
Тема
Построение временной функции
Минск 2011
Введение
программа временная функция
Алгоритмический язык “Паскаль“ был разработан профессором ВТУ в Цюрихе Н. Виртом. Свой алгоритмический язык он назвал в честь французского ученого Блэза Паскаля.
Язык Паскаль получил широкое распространение во всем мире благодаря простоте и доступности широкому кругу людей, работающих в различных отраслях народного хозяйства.
Успеху языка способствовало и то, что по своей идеологии Паскаль наиболее близок к современной теории и технологии программирования, так как довольно полно отражает идеи структурного программирования. Кроме того, он приспособлен для применения общепризнанной в настоящее время технологии разработки программ методом пошаговой детализации (нисходящего программирования). И, наконец, язык предоставляет гибкие возможности в отношении используемых структур данных.
Язык Паскаль позволяет создавать не только несложные программы, но и структурированные программы трудоемких и сложных вычислений предоставляя возможности работы, как с числовой, так и символьной информацией.
Язык Паскаль постоянно совершенствовался. Для персональных компьютеров появились революционные по своей сущности компиляторы с языка Паскаль для IBM PC (главным образом фирм Microsoft и Borland), представляющие диалоговые системы, называемые интегрированными средами (Turbo Pascal). К настоящему времени существуют ряд версий интегрированных сред языка Turbo Pascal 5.0, 5.5, 6.0, 7.0, 8.0, причем соблюдается принцип их совместимости снизу вверх.
1. Постановка задачи
Составить схему алгоритма и программу для построения графика временной функции, работающую как в машинном, так и в реальном времени. Реальное время в диапазоне (t0-tкон) формируется таймером в виде программного модуля с метками Тк, называемыми временем квантования. При вычислении функции использовать алгоритм Горнера.
Функция: y=
где t0=0 с, tкон=10 с, Тк=0.5 с;
x - корень нелинейного уравнения tgx-1/3(tgx)+1/5(tgx)-1/3=0, которое надо решить методом Ньютона с точностью , при начальном значении корня, лежащего в диапазоне [0;0.8]; m-наименьший по абсолютному значению корень квадратного уравнения
az+bz+c= 0
При a=1,5
b=2
c=-2
Коэффициенты a = 1.5, b = 4.3, d = sin 60.
2.Описание методов решения
2.1 Метод простой итерации
Суть метода простой итерации состоит в том, что уравнение y=f(x) заменяется на выражение x=ц(x). Условие, при котором данный процесс сходится, определяется теоремой: если интервал (a;b) является интервалом изоляции корня уравнения x=ц(x) и во всех точках данного интервала выполняется условие |ц'(x)|<1, то процесс нахождения корня данным методом будет сходящимся.
Алгоритм нахождения корня:
x1= ц(x0);
x2= ц(x1);
xn= ц(xn-1);
Счёт заканчивается, когда |xn+1 - xn|<eps или |f(xn+1)|<eps.
2.2 Схема Горнера
Существуют различные методы решения полиномов на языке PASCAL. Один из них - разложение полинома по схеме Горнера.
Полином:
y = a0 + a1t + a2t2+ a3t3+ a4t4+ … + antn
по схеме Горнера представляется в виде
y = a0 + t(a1 + t(a2 +t(a3 +… + t(an-1 + t an)…)))
Данное разложение полинома удобно тем, что в нём отсутствует возведение в степень, что значительно ускоряет вычисление полинома.
3. Таблица идентификаторов
Идентификаторы |
Наименование |
|
a1, b1,с1 |
Коэффициенты квадратного уравнения |
|
z1,z2 |
Корни квадратного уравнения |
|
m |
Наименьший по абсолютному значению корень квадратного уравнения |
|
е |
Точность вычисления корня |
|
x |
Корень нелинейного уравнения |
|
x0 |
Начальное приближение |
|
t |
Время |
|
y |
Значение временной функции |
4.Схемы алгоритмов
4.1 Схема алгоритма метода простых итераций
начало
нет
да
4.2 Схема Горнера
начало
a,m,l,n
4.3 Схема основной программы
начало
Решение квадратного уравнения
Метод простых
итераций
Схема Горнера
конец
5.Текст программы
{$N+}
program Kursovoj;
uses crt,dos,graph;
const
MAXLEV=5;{ максимально возможный уровень сложности }
CURLEV=3;{ текущий уровень сложности }
K_ENTER=13;
K_ESC=27;
e=1e-3;
k=5; {kol-vo rezhimov}
NameRegime: array [1..k]of string[36] =
('1 - reshenie kvadratnogo yravnenija',
'2 - reshenie nelinejnogo yravnenija',
'3 - metod Gornera',
'4 - Grafik',
'5 - Vyxod');
type
ArOfint=array[1..MAXLEV]of integer;
Var
I,j : byte;
y,d,r,v,x,x0,a,b,a1,b1,c1,z,m:real;
n,t,gd,gm,h:integer;
t0:word;
Procedure zastavka;
const max =50;
xs = [27,28,29,31,32,33,35,36,37,39,40,41,43,44,45,47,48,49,51,52,53];
ys = [22,23,24,25,26];
xy: array[1..55,1..2] of integer =
((27,22),(27,23),(27,24),(27,25),(27,26),(28,22),(29,22),(29,23),(29,24),(29,25),(29,26),
(31,23),(31,24),(31,25),(32,22),(32,26),(33,23),(33,24),(33,25),
(35,22),(35,23),(35,24),(35,25),(35,26),(36,22),(36,24),(36,26),(37,23),(37,25),
(39,22),(40,22),(40,23),(40,24),(40,25),(40,26),(41,22),
(47,23),(47,24),(47,25),(48,22),(48,26),(49,23),(49,24),(49,25),
(51,23),(52,22),(53,23),(53,24),(52,25),(51,26),(52,26),(53,26),
(43,24),(44,24),(45,24));
type matx= record
s: string[255];
x,y,l: integer;
end;
var
sym: array[1..max] of matx;
a,b,n:integer;
c1,c2,c3: byte;
procedure writex(x,y: integer; s: string);
var i,d: integer;k:longint;
begin for k:= 1 to 100000 do;
for i:=0 to length(s)-1 do
if ((i+y)<50)and((i+y)>0) then
begin
gotoxy(x,i+y);
if odd(random(2)) then textcolor(c1)
else textcolor(c2);
{ for d:=1 to 55 do
if (x=xy[d,1])and((y+i)=xy[d,2]) then begin textbackground(c3);
textcolor(c3);end; }
{ delay(2);}
write(s[i+1]);
{ textbackground(black);}
end;
end;
procedure init;
var i,j:integer;
begin
c1:=lightgreen;
c2:=green;
c3:=white;
textmode(c80+font8x8);
highvideo;
clrscr;
randomize;
for i:=1 to max do begin
sym[i].l:=random(20)+200;
for j:=0 to sym[i].l do sym[i].s[j]:=chr(random(143)+32);
sym[i].x:=random(80)+1;
sym[i].y:=-random(100);
end;
end;
begin
init;
for a:=1 to max do
with sym[a] do begin
writex(x,y,' '+s);
end;
{ delay(1); {150}
y:=y+1;
if y>50 then begin
x:=random(80)+1;
y:=-random(100);
end;
delay(65000);
end;
Procedure nelinyr;
{----AAA---}
function f1(a:extended):extended;
var k:real;
begin
k:=sin(a)/cos(a);
f1:=arctan(1/3*(k*k*k)-1/5*(k*k*k*k*k)+1/3)
end;
function f2(a:extended):extended;
var k,g:real;
begin
k:=sin(a)/cos(a);
g:=cos(a)/sin(a);
f2:=-g+k-(k*k*k);
end;
function f(a:extended):extended;
var k:real;
begin
k:=sin(a)/cos(a);
f:=k-1/3*(k*k*k)+1/5*(k*k*k*k*k)-1/3;
end;
{---AAAA---}
begin
{----- reshenie nelinejnogo yravnenija -----}
clrscr;
writeln(' //____ Reshenie nelinejnogo yravnenija ____//');
writeln;
writeln(' Trebuetsa reshit nelinejnoe yravnenie metodom prostoj iteracii ');
writeln(' s zadannoj tochnostju e = ',e:4:3);
writeln(' ----------------------------------------------¬');
writeln('Nelinejnoe yravnenie imeet vid :¦tg(x) - 1/3(tg(x)^3) + 1/5(tg(x)^5) - 1/3 = 0¦');
writeln(' L----------------------------------------------');
writeln('Введите границы отрезка изолирующего корень');
write(' a = ');readln(x0);
write(' b = ');readln(b);
writeln;
if (f(x0)*f(b)<0) and (f2(x0)<1) then begin
repeat
x:=f1(x0); x0:=x;
n:=n+1;
until
abs(f(x))<e;
writeln(' г========¬');
writeln('Koren nelinejnogo yravnenija raven ¦x = ',x:3:2,'¦');
writeln(' L========-');
writeln('Kolichestvo proizvedennyx iteracij n = ',n);
writeln('Znachenie fynkcii v tochke X ravno f(x) = ',f(x):3:6);end
else
writeln('Фиг вам');
writeln;
writeln(' //_________________________________________//');
readkey;
writeln('privet expertint');
readkey;
end;
Procedure kvyravn;
begin
clrscr;
{----- reshenie kvadratnogo yravnenija ------}
writeln(' //____ Reshenie kvadratnogo yravnenija ____//');
writeln;
writeln('vvedite koeficienti a1,b1,c1');
write('a1 = '); readln(a1);
write('b1 = '); readln(b1);
write('c1 = '); readln(c1);
Writeln;
Writeln(' -------------------------¬');
Writeln('Kvadratnoe yravnenie imeet vid : ¦ a1*z^2 + b1*z + c1 = 0 ¦');
Writeln(' L-------------------------');
writeln('Diskreminant raven : - d = b1^2 - 4*a1*c1 - , gde a1,b1,c1 - koeficienti; ' );
writeln(' d - diskreminant.' );
d:=sqr(b1)-4*a1*c1;
Writeln(' - d = ',d:0:0,' -');
if d>=0 then begin
z:=((-b1)+sqrt(d))/(2*a1);
v:=((-b1)-sqrt(d))/(2*a1);
Writeln;
writeln(' Korni kvadratnogo yravnenija :');
writeln(' г============¬');
writeln(' ¦ z1 = ',z:4:3,' ¦');
writeln(' ¦ z2 = ',v:0:0, ' ¦');
m:=z;
writeln(' L============-');
end;
if abs(z)>abs(v) then
m:=v;
Writeln;
writeln(' г---------------¬');
writeln('Naimen6ii po modulu koren kv. yr-ija : - m = z = ',m:4:3,' -');
writeln(' L----------------');
writeln(' //__________________________________________//');
readkey;
end;
Procedure Graffik;
begin
clrscr;
gd:=detect;
initgraph(gd,gm,'');
line(0,240,640,240);
line(320,0,320,480);
t0:=0;
while t0<=20 do begin
y:=abs(1.5*t0*t0*t0+4.3*t0*t0+(sqrt(3)/2)*t0+x+m);
h:=round(y/20);
delay(250);
putpixel(t0*2+320,240-h,15);
t0:=t0+0.001;
end;
writeln('graffik');
end;
Procedure gorner;
begin
clrscr;
r:=0.5;
t:=0;
d:=(sqrt(3))/2;
writeln(' //____________Tablica Gornera____________//');
writeln;
writeln(' г============T============¬');
for t:=0 to 20 do begin
r:=t/2;
y:=abs(a*r*r*r+b*r*r+d*r+x+m);
write(' ¦t = ',r:4:1);
writeln (' ¦ y = ', y:6:2,'¦');
end;
writeln(' L============¦============-');
writeln;
writeln(' //_________________________________________//');
readkey;
end;
{---------------------------}
{---------------------------}
procedure igra;
var
igrok:ArOfint;{ комбинация игрока }
comp:ArOfint;{ комбинация компьютера }
level:integer;{ уровень сложности ¦ число цифр в числе }
nu:integer;{ угадано чисел }
nm:integer;{ из них на своих местах }
KeyCode:integer;{ код клавиши,нажатием которой игрок завершил ввод }
otl:boolean;
i:integer;
{ " получить " строку цифр у компьютера }
procedure GetComp(var a:ArOfInt;n:integer);
var
i:integer;
begin
randomize;
for i:=1 to n do
a[i]:=random(10);
if otl then begin
writeln;
write('Комбинация компьютера: ');
for i:=1 to n do write(a[i]);
writeln;
end;
end;
{ Сколько цифр угадано? }
function ugad(comp,igrok:ArOfInt;n:integer):integer;
var
u:integer;{ угадано цифр }
i,j:integer;
found:boolean;{ TRUE,если igrok[i]=comp[j]}
begin
u:=0;
for i:=1 to n do { проверим каждую цифру игрока }
begin
j:=1;
found:=FALSE;
{ будем igrok[i]последовательно сравнивать с числами
компьютера }
repeat
if igrok[i]=comp[j] then
begin
comp[j]:=-1;{ пометим найденное число }
u:=u+1;
found:=TRUE;
end
else j:=j+1;
until (j>n)or found
end;
ugad:=u;
end;
{ Сколько цифр на своих местах? }
function mesto(comp,igrok:ArOfInt;n:integer):integer;
var
m:integer;
i:integer;
begin
m:=0;
for i:=1 to n do
if comp[i]=igrok[i]
then m:=m+1;
mesto:=m;
end;
{ Процедура вводит с клавиатуры строку цифр заданной длины.}
{ Используя клавишу <BackSpace>,можно исправлять введенные цифры.}
{ Процедура завершает работу,если введено заданное количество цифр }
{ и нажата клавиша <Enter>.}
function GetIgrok(var a:ArOfint;n:integer;mes:string):integer;
var
ch:char;{ символ }
dec:integer;{ десятичный код символа }
x,y:integer;{ положение курсора }
i:integer;
code:integer;
begin
i:=1;
write(mes);
repeat
ch:=readkey;
dec:=ord(ch);
if(ch >='0') and (ch<='9') and (i<=n)
then begin
write(ch);
val(ch,a[i],code);
i:=i+1;
end
else
if(dec=8) and (i > 1)
then begin
i:=i-1;
x:=whereX;
y:=whereY;
gotoXY(x-1,y);
write(' ');
gotoXY(x-1,y);
end;
until((i>n) and (dec=K_ENTER)) or (dec=K_ESC);
getigrok:=dec;
end;{ GeIgrok }
procedure pravila(n:integer);
begin
writeln;
writeln;
writeln('Компьютер задумал число из ',n,' цифр. Вы должны его отгадать.');
writeln('После ввода очередного числа программа сообщает');
writeln('сколько цифр');
writeln('угадано, и сколько из них находятся на своих местах.');
writeln(' Например,');
writeln('если задумано число 4345 и введено 4251,');
writeln(' то угаданы две цифры,');
writeln('и одна цифра находится на своем месте.');
writeln('При вводе можно использовать <Backspace>.');
writeln(' После ввода числа');
writeln('следует нажать клавишу <Enter> или <Esc> -');
writeln(' для прекращения игры.');
writeln;
end;
begin { основная процедура }
level:=CURLEV;
otl:=FALSE;
pravila(level);{ вывести правила игры }
GetComp(comp,level);
repeat
KeyCode:=GetIgrok(igrok,level,'Ваш вариант-> ');
if KeyCode<>K_ESC then begin
nu:=ugad(comp,igrok,level);
nm:=mesto(comp,igrok,level);
writeln('Угадано:',nu,'. На своих местах:',nm);
end;
until ((nu=level) and (nm=level)) or (KeyCode=K_ESC);
if KeyCode<>K_ESC
then writeln('***ВЫ УГАДАЛИ ЧИСЛО!***')
else begin
writeln('Игра завершена по нажатию <Esc>.');
write('Задуманное число:');
for i:=1 to level do write(comp[i]);
writeln;
end;
write('Нажмите <Enter> для завершения.');
readln;
end;
{-----------------------}
{-----------------------}
Begin
clrscr;
GoToXY(200,200);
textcolor(12);
writeln('г===============================¬');
writeln('¦ KURSOVAJA RABOTA ¦');
writeln('¦ vychislenie vremennoj funkcii ¦');
writeln('L===============================-');
readkey;
Zastavka;
While true do
Begin
Clrscr;
GotoXY(24,4);{peresulka kursora v to4ku na4ala zagolovka}
Write('GLAVNOE MENU');
for j:=1 to 5 do begin
GotoXY(25,7+j);
write(nameregime[j]);end;
gotoxy(20,15);
write('Vvedite nomer rezhima i nazhmite <ENTER>');
readln(i);
case i of
1:kvyravn;
2:nelinyr;
3:gorner;
4:graffik;
5:begin clrscr;igra; halt; end;
else
begin
GotoXY(20,17);
write('takogo rezhima nety v menu. POVTORITE!!!');
delay(1000);
end;
end;
end;
END.
6. Результаты расчета
6.1 Исходные величины
Заданная точность: е=10-3
Коэффициенты квадратного уравнения:
а1=1,5; b1=2; с1= -2;
Время (начальное, конечное, квантования):
t0=0 с, tкон=10 с, Тк=0.5 с;
Коэффициенты временной функции:
а= 1,5; b=4,3; d= sin60;
6.2 Вычисленные величины
t |
y |
|
0 |
1 |
|
0,5 |
2.6 |
|
1 |
7.6 |
|
1,5 |
17 |
|
2 |
31 |
|
2,5 |
53.43 |
|
3 |
82.03 |
|
3,5 |
120.9 |
|
4 |
169.2 |
|
4,5 |
228.3 |
|
5 |
300 |
|
5,5 |
385 |
|
6 |
484.9 |
|
6,5 |
600 |
|
7 |
732 |
|
7,5 |
882 |
|
8 |
1051 |
|
8,5 |
1240 |
|
9 |
1450 |
|
9.5 |
1683 |
|
10 |
1939 |
Наименьший по абсолютному значению корень квадратного уравнения m= 0.667
Корень уравнения x=0.33
График временной функции
Список использованной литературы
1.Тарасевич Л.А. Лекционный материал 1 курс 2005-2006гг.
2. Ю.С. Бородич, А.Н. Вальвачёв, А.И.Кузьмич Паскаль для персональных компьютеров» Минск 1991г.
3.В.А. Скляров, И.Р. Булатова «Знакомьтесь : Паскаль!» Минск, 1988г.
Размещено на Allbest
Подобные документы
Построение схемы алгоритма и программы для создания графика временной функции, работающей в машинном и реальном времени. Выбор методов решения и их обоснование. Значение коэффициентов и временной функции. Реализация временных задержек в программе.
курсовая работа [6,2 M], добавлен 09.03.2012Выбор и обоснование методов составления схемы алгоритма и разработки программы для построения графика временной функции, работающей как в машинном, так и в реальном времени. Алгоритм Горнера. Программа на языке Quick BASIC (с распечаткой листинга).
курсовая работа [55,1 K], добавлен 21.11.2012Программирование на алгоритмическом языке Turbo Pascal на примере разработки алгоритма и программы расчета временной функции. Выбор, обоснование методов решения. Схемы алгоритмов основной программы и подпрограмм. Распечатка исходных и вычисленных величин.
реферат [154,8 K], добавлен 15.03.2012Составление схемы алгоритма и программы для построения графика временной функции, работающей как в машинном, так и в реальном времени. Пример вычисления степенного ряда с помощью схемы Горнера. Описание переменных программы, листинг, процедуры и функции.
курсовая работа [67,6 K], добавлен 20.11.2012Создание программ в Borland C++ Builder 6.0. Разработка программы для построения графика временной функции, работающей, как в машинном, так и в реальном времени. Использование алгоритма Горнера для вычисления корня квадратного и нелинейного уравнений.
контрольная работа [925,2 K], добавлен 05.01.2016История создания и развитие языка программирования Pascal, его версии. Особенности и порядок построения графика функции на языке Turbo Pascal с использованием декартовой системы координат. Блок схема алгоритма процедур, листинг и тестирование программы.
курсовая работа [102,7 K], добавлен 23.12.2011Решение трансцендентного уравнения методом Ньютона. Построение графика функции. Блок-схема алгоритма решения задачи и программа решения на языке Pascal. Вычисление значения интеграла методом трапеции, блок-схема алгоритма, погрешности вычисления.
задача [163,4 K], добавлен 16.12.2009Составление схемы алгоритма и программы для построения графика временной функции, работающей как в машинном, так и в реальном времени. Выбор и обоснование методов расчета. Разработка основной программы. Блок-схемы алгоритмов. Распечатка листинга.
курсовая работа [1,5 M], добавлен 21.11.2013Сущность и описание симплекс-метода и улучшенного симплекс-метода (метода обратной матрицы), преимущества и недостатки их применения в линейном прогаммировании. Листинг и блок-схема программы на языке Turbo Pascal для решения математической задачи.
курсовая работа [45,0 K], добавлен 30.03.2009Построение интерполяционного полинома Ньютона по значениям функции в узлах согласно методу Лагранжа. Составление алгоритмов решения задачи, их реализация на программном уровне на языке Turbo Pascal. Представление результатов работы программы Polinom.
курсовая работа [667,9 K], добавлен 01.10.2010