Технический форум
Вернуться   Технический форум > Программирование > Форум программистов > Помощь студентам


Ответ
 
Опции темы Опции просмотра
Старый 10.11.2010, 21:01   #1 (permalink)
Veina
Member
 
Регистрация: 10.11.2010
Сообщений: 12
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 10
По умолчанию Методы нахождения корня на паскале

Здравствуйте. Помогите, пожалуйста разобраться с программой. Дано уравнение f(x)=1+sin(x)-1.14*exp(-x). Найти наименьший корень уравнения с точностью е=0.00005, используя методы половинного деления, ньютона и простой итерации. В принципе, я проги написала. Работают. Заминка только в конце: нужно вывести х0, х1, х2,...,хn для каждого метода. То есть вывести эти приближенные корни, которая прога считает в процессе и мне выдает окончательный результат. Как их вывести? подскажите, пожалуйста. Очень сильно нужно.

Метод половинного деления:

Код:
uses Crt;
function f(x:real):real;
begin
   f:=1+sin(x)-1.14*exp(-x);
end;
var x,eps,a,b,c,d:real;
begin
clrScr;
writeln('vvedite a  b');
readln(a,b);
writeLn('vvedite tochnost eps');
readln(eps);
repeat
c:=(a+b)/2;
if(f(a)*f(c))<0 then b:=c
else a:=c;
until (b-a)<=eps;
x:=(a+b)/2;
d:=(b-a)/2;
writeLn('koren x=',x:0:7, ' d=' ,d:0:7);
readln
end.
Метод Ньютона:

Код:
uses crt;
function F(x:real):real;
begin
F:=1+sin(x)-1.14*exp(-x);
end;
function F1(x:real):real;
begin
F1:=cos(x)+1.14*exp(-x);
end;
function Newton(x1,e:real):real;
var x2,b:real;
begin
x2:=x1;
repeat
b:=x2;
x2:=b-F(b)/F1(b);
until abs(x2-b)>e;
Newton:=x2;
end;
var a,eps:real;
begin
clrscr;
write('Введите начальное приближение a=');
readln(a);
write('Введите точность eps=');
readln(eps);
write('X=',Newton(a,eps):0:5);
readln
end.
Метод простой итерации:

Код:
var a,e,fa,fas,xa,xp,l,fx,fxp:real;
    n:integer;
function FunX(b:real):real;
begin
     fx:=1+sin(b)-1.14*exp(-b);
     fxp:=cos(b)+1.14*exp(-b);
     end;
begin
     write ('vvedite tochnost_');
     readln (e);
     write ('vvedite nachalnoe priblizenie x0_');
     readln (xp);
     n:=0;
     repeat
           xa:=xp;
           fx:=1+sin(xa)-1.14*exp(-xa);
           fxp:=cos(xa)+1.14*exp(-xa);
            l:=(-1)/(fxp+1);
           xp:=xa+l*fx;
           n:=n+1;
     until abs(xp-xa)<e;
     writeln ('otvet: x=', xp:9:4);
     writeln ('kol-vo provedennix vichislenii=',n);
     readln;
end.
Veina вне форума   Ответить с цитированием

Старый 10.11.2010, 21:01
Helpmaster
Member
 
Аватар для Helpmaster
 
Регистрация: 08.03.2016
Сообщений: 0

Интересующие вас ответы могут содержаться в этих темах

Методы сортировки
Программа на Паскале

Старый 10.11.2010, 21:17   #2 (permalink)
AlexZir
support
 
Аватар для AlexZir
 
Регистрация: 19.08.2007
Адрес: Зея
Сообщений: 15,794
Записей в дневнике: 71
Сказал(а) спасибо: 166
Поблагодарили 203 раз(а) в 86 сообщениях
Репутация: 75760
По умолчанию

В каждом листинге перед оператором until вставьте оператор вывода вычисленного значения.
__________________
Убить всех человеков!
AlexZir вне форума   Ответить с цитированием
Старый 10.11.2010, 21:22   #3 (permalink)
Veina
Member
 
Регистрация: 10.11.2010
Сообщений: 12
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 10
По умолчанию

т.е. через repeat until? можно пример, пожалуйста)
Veina вне форума   Ответить с цитированием
Старый 10.11.2010, 21:39   #4 (permalink)
AlexZir
support
 
Аватар для AlexZir
 
Регистрация: 19.08.2007
Адрес: Зея
Сообщений: 15,794
Записей в дневнике: 71
Сказал(а) спасибо: 166
Поблагодарили 203 раз(а) в 86 сообщениях
Репутация: 75760
По умолчанию

к примеру, в первом листинге вставьте перед строкой с until следующую команду:
Код:
writeln(c);
__________________
Убить всех человеков!
AlexZir вне форума   Ответить с цитированием
Старый 10.11.2010, 21:45   #5 (permalink)
Veina
Member
 
Регистрация: 10.11.2010
Сообщений: 12
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 10
По умолчанию

а как результат проги скопировать в блокнот допустим?
Veina вне форума   Ответить с цитированием
Ads

Яндекс

Member
 
Регистрация: 31.10.2006
Сообщений: 40200
Записей в дневнике: 0
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 55070
Старый 10.11.2010, 21:53   #6 (permalink)
AlexZir
support
 
Аватар для AlexZir
 
Регистрация: 19.08.2007
Адрес: Зея
Сообщений: 15,794
Записей в дневнике: 71
Сказал(а) спасибо: 166
Поблагодарили 203 раз(а) в 86 сообщениях
Репутация: 75760
По умолчанию

Сделайте вывод в текстовый файл и потом его распечатайте. Также можно реализовать вывод непосредственно на печатающее устройство прямо из программы, указав в операторе Writeln в качестве параметра устройство печати.
__________________
Убить всех человеков!
AlexZir вне форума   Ответить с цитированием
Старый 10.11.2010, 21:54   #7 (permalink)
AlexZir
support
 
Аватар для AlexZir
 
Регистрация: 19.08.2007
Адрес: Зея
Сообщений: 15,794
Записей в дневнике: 71
Сказал(а) спасибо: 166
Поблагодарили 203 раз(а) в 86 сообщениях
Репутация: 75760
По умолчанию

Способы подробно описаны в справочной системе среды разработки
__________________
Убить всех человеков!
AlexZir вне форума   Ответить с цитированием
Старый 10.11.2010, 21:56   #8 (permalink)
Veina
Member
 
Регистрация: 10.11.2010
Сообщений: 12
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 10
По умолчанию

еще вопрос, в первой проге он выдает числа в конце с Е, а можно их как-то в привычном виде выдать, как-нибудь примерно до 7 знака

Последний раз редактировалось Veina; 10.11.2010 в 22:01
Veina вне форума   Ответить с цитированием
Старый 10.11.2010, 22:04   #9 (permalink)
AlexZir
support
 
Аватар для AlexZir
 
Регистрация: 19.08.2007
Адрес: Зея
Сообщений: 15,794
Записей в дневнике: 71
Сказал(а) спасибо: 166
Поблагодарили 203 раз(а) в 86 сообщениях
Репутация: 75760
По умолчанию

Организация вывода в файл:

в разделе переменных определяем файловую переменную
var ....
F: Text;
....

В начале исполнимого модуля связываем файловую переменную с текстовым файлом, указывая полный путь к файлу и открываем его для перезаписи (или создания, при первом обращении к файлу):
begin
...
assign(F,'путь');
rewrite(F);
...

В операторах вывода результатов вычислений в качестве параметра устройства вывода указываем наш файл:

Writeln(F,'text');
Writeln(F,c);

В конце программы (перед конечным оператором end.) закрываем файл командой close(F);

Форматированный вывод значений можно организовать, используя параметры вывода значений. К примеру, форма записи C:4:8 определяет формат вывода числа с по крайней мере 4-мя знакоместами под целую часть и 8 значащими разрядами дробной части. Это используется для организации вывода значений в несколько выравненных по левому краю столбцов и, естественно, для избавления от экспоненциальной формы числа .

Writeln(F,c:6:7); как пример к вашему вопросу
__________________
Убить всех человеков!
AlexZir вне форума   Ответить с цитированием
Старый 10.11.2010, 22:13   #10 (permalink)
Veina
Member
 
Регистрация: 10.11.2010
Сообщений: 12
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 10
По умолчанию

еще вопрос, в первой проге он выдает числа в конце с Е, а можно их как-то в привычном виде выдать, как-нибудь примерно до 7 знака
Veina вне форума   Ответить с цитированием
Ads

Яндекс

Member
 
Регистрация: 31.10.2006
Сообщений: 40200
Записей в дневнике: 0
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 55070
Ответ

Опции темы
Опции просмотра

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Выкл.
HTML код Выкл.
Trackbacks are Вкл.
Pingbacks are Вкл.
Refbacks are Выкл.




Часовой пояс GMT +4, время: 16:19.

Powered by vBulletin® Version 6.2.5.
Copyright ©2000 - 2014, Jelsoft Enterprises Ltd.