- •Белорусский национальный технический
- •Курсовая работа
- •Содержание
- •Вариант №23
- •Введение
- •1. Выбор и обоснование методов решения.
- •1.1 Метод Ньютона.
- •1.2 Схема Горнера.
- •2. Разработка схем алгоритмов основной программы и
- •2.1 Таблица имён переменных.
- •2.2 Схемы алгоритмов подпрограмм Функция решения системы уравнений:
- •Решение нелинейного уравнения Заданная функция производная функция
- •2.3 Схема алгоритма основной программы.
- •Компоновка программы пользователя и распечатка листинга программы. {программу подготовил студент группы 106411} {Рогач с.В.}
- •X0,eps:real; для нелинейного уравнения
- •I,j : byte; Счётчики
- •3. Результат расчета.
- •3.1 Распечатка исходных величин.
- •3.2 Распечатка вычисленных величин.
- •3.3 График временной функции.
- •4.Список используемых источников.
- •Л.А. Тарасевич - Конспект.
2.2 Схемы алгоритмов подпрограмм Функция решения системы уравнений:
да нет
Решение нелинейного уравнения Заданная функция производная функция
Само решение нелинейного уравнения
Да нет нет
Временная функция
2.3 Схема алгоритма основной программы.
Да нет
Нет да
Нет да
Компоновка программы пользователя и распечатка листинга программы. {программу подготовил студент группы 106411} {Рогач с.В.}
Program var_10;
uses crt;
var
c : real; для cистемы уравнений
d : real; для нелинейного уравнения
a , b :real; для функции
t0, tkon, tkv :real; для функции
X0,eps:real; для нелинейного уравнения
----------------- Решение системы ------------------- ----------------- определяет b ---------------------- procedure sistema;
type massiv = array[1..3,1..2] of real;
var
I,j : byte; Счётчики
syst : massiv;
r1, r2 : real; решения системы
begin
clrscr;
Writeln('Решаем систему уравнений a1z + b1p = d1 ');
Writeln(' a2z + b2p = d2 ');
Writeln('Введите коэффициенты a1, b1, d1, a2, ... ');
for j:= 1 to 2 do
begin
for i:= 1 to 3 do
begin
gotoXY (25 + i*6, 4 + j);
read(syst[i,j]);
end;
end;
for j:= 1 to 2 do
for i:= 3 downto 1 do
syst[i,j]:= syst[i,j]/syst[1,j];
for i:= 1 to 3 do syst[i,2]:= syst[i,1]-syst[i,2];
r2:= syst[3,2]/syst[2,2];
r1:= (syst[3,1]- r2*syst[2,1]);
if r1 > r2 then c:= r1 else c:= r2;
Writeln('Наибольшее решение системы c= ',c:4:2);
Writeln('Для продолжения любую клавишу'); readkey;
end;
--------------- решение нелинейного уравнения ------------------- procedure nuton;
var d, x, xpred :real;
function f(w:real):real; Заданная функция
begin
f:=0.25*x*x*x + x - 1.2502; ;
end;
function fpr(v:real):real; Её производная
begin
fpr:=0.75*x*x + 1;
end;
begin
clrscr;
Writeln('Решаем нелинейное уравнение 0.25*x^3 + x - 1.2502 = 0'); Writeln('методом Ньютона ');
Write('Введите диапазон начального значения корня : X0= ');readln(x0); Write('Вводим точность расчёта : E = '); readln(eps);
x:= x0;
repeat
begin
xpred:=x;
x:= xpred - f(xpred)/fpr(xpred);
end;
until (f(x)<eps) and (abs(x-xpred)< eps);
d:= x;
Writeln('Корень уравнения 0.25*x^3 + x - 1.2502 = 0; x= ',d:0:4); Write('Для продолжения нажмите любую клавишу'); readkey;
end;
*************************************************************
procedure koeficientu;
begin
clrscr;
Writeln('Сейчас происходит подготовка к выводу значений '); Writeln('временной функции f(t) = |at^2 + bt + c + d| ,где ');
Writeln(' d - корень уранения 0.25x^3 + x - 1.2502 ');
Writeln(' c - наибольший корень системы.');
Writeln('Ввод недостающих коэффициентов:');
Write('Введите a; a = '); readln(a); b:=abs(d - a);
Write('b =|d - a| = ',b:5:3); Writeln('');
Writeln('Ввод параметров функции:');
Write('Введите начальное время t0; t0 = '); readln(t0);
Write('Введите конечное время tkon; tkon = '); readln(tkon);
Write('Введите время квантования tkv; tkv = '); readln(tkv);
Writeln('');
end;
procedure tablica;
var
t : real;
i : byte;
vyb : byte;
функция
схема Горнера
function funt(af, bf, cf, df, tf :real):real;
begin
funt:=abs(cf + df + tf*(bf + af*tf));
end;
begin
clrscr;
Writeln('В каком времени рассчитывать функцию?');
Writeln(' 1 - если в машинном ');
Writeln(' 2 - если в реальном ');
readln(vyb);
Write('Для вывода результатов нажмите любую клавишу.'); readkey;
clrscr;
t:= t0; i:=1;
Writeln(' | Значение t | Значение f(t) | ');
Writeln(' ------------------------------- ');
while t <= tkon do
begin
gotoXY (20+1, i+2); write('|');
gotoXY (20+14, i+2); write('|');
gotoXY (20+31, i+2); write('|');
gotoXY (20+4, i+2);
writeln(t:5:3);
gotoXY (20+18, i+2);
writeln(funt(a,b,c,d,t):6:4);
if vyb = 2 then delay(trunc(tkv*58000));
t:= t + tkv; i:= i + 1;
end;
Writeln(' ------------------------------- ');
Writeln('Программу разработал Рогач Сергей Николаевич.'); readkey;
end;
BEGIN
sistema; считаем c
nuton; считаем d
koeficientu; ввод коэффициентов
tablica; вывод таблицы
END.
