25.05.2011, 21:11 | #1 (permalink) |
Новичок
Регистрация: 25.05.2011
Сообщений: 3
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 10
|
Проблемы с написанием программы на языке Турбо Паскаль
program Newton; uses crt; {модуль управления экраном} function f(x:real):real; {Исходная функция} begin f:=3*sqr(x)-4*x-2; end; function f1(x:real):real; {Первая производная функции} begin f1:=6*x-4; end; var a,b,x,e,en:real; i:integer; begin clrscr; {очистить экран} writeln ('Решение нелинейного уравнения методом Ньютона'); writeln ('Уравнение 3x^2-4x-2=0'); write ('Введите левую и правую границы интервала:'); read (a,b); write ('Введите требуемую точность решения:'); read (e); writeln ('Решение:'); writeln ('Номер шага Значение X'); en:=abs(a-b); x:=b; i:=1; while (abs(en)>e) do begin {Пока не достигнута точность} x:=x-f(x)/f1(x); {выполнить шаг метода} writeln (i:10,x:20:14); {вывести значение X с шага} en:=abs(x-b); {Новая точность} b:=x; {Значение границы для следующего шага} i:=i+1; {Номер шага} end; end. помогите как правильно написать |
25.05.2011, 21:11 | |
Helpmaster
Member
Регистрация: 08.03.2016
Сообщений: 0
|
Можете просмотреть аналогичные темы, это в большинстве случаев полезно Расчет производной на языке турбо паскаль Турбо Паскаль Турбо Паскаль. Проблемы с написанием классов на языке С++ Турбо Паскаль или Фри Паскаль. Задание по теме Типизированный файл Турбо паскаль. Стек. Запись |
26.05.2011, 11:51 | #2 (permalink) |
Специалист
Регистрация: 27.08.2008
Адрес: Санкт-Петербург
Сообщений: 27,807
Сказал(а) спасибо: 340
Поблагодарили 583 раз(а) в 208 сообщениях
Репутация: 113184
|
Дима, а что Вас не устраивает? Всё и так правильно. Единственное - перед самым последним закрывающим программу "end." желательно вставить оператор readln; (как есть без параметров), тогда она в конце остановится и покажет экран с результатами. До нажатия "Enter".
|
26.05.2011, 19:26 | #3 (permalink) |
Новичок
Регистрация: 25.05.2011
Сообщений: 3
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 10
|
Меня все устраивает, дело в том что препад сказал, что вот этого не должно быть: write ('Введите левую и правую границы интервала:'); а нужно чтобы выводил: Ввести значения (a,b,c), как он написал где то так: readln(a,b,c) со значением Х0, приближенной (эпсило) и производной f'=2ax+b. А как это вбить и куда я буз понятия. Помогите пожалуйста
|
26.05.2011, 20:35 | #4 (permalink) |
Специалист
Регистрация: 27.08.2008
Адрес: Санкт-Петербург
Сообщений: 27,807
Сказал(а) спасибо: 340
Поблагодарили 583 раз(а) в 208 сообщениях
Репутация: 113184
|
Дима, я, увы, тоже "буз" понятия. Особенно в отношении производной. У Вас всё сделано грамотно, производная оформлена в виде функции - так какого ж еще лешего? А что касается стартовой точки и точности, то как их вводить (вместе либо поврозь) - дело и право каждого программиста. Извините, но тратить время на разгадывание придурей преподов-самодуров я не могу.
Кстати, в программе есть одна... скажем так, шероховатость. Параметр en у Вас дважды ставится под оператор abs - при вычислении и в условии цикла. Это излишне - достаточно первого. А в цикле while en>e. А преподу можете сообщить, что он . |
06.06.2011, 17:48 | #5 (permalink) | ||
Новичок
Регистрация: 25.05.2011
Сообщений: 3
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 10
|
Рушение квадратного уравнения методом ньютона
Помогите пожалуйста с программой. Тема решение квадратных уравнений методом ньютона. вот что у меня получилось:
program Newton; uses crt; {модуль управления экраном} function f(x:real):real; {Исходная функция} begin f:=3*sqr(x)-4*x-2; end; function f1(x:real):real; {Первая производная функции} begin f1:=6*x-4; end; var a,b,c,x₀,e,en:real; i:integer; begin clrscr; {очистить экран} writeln ('Решение нелинейного уравнения методом Ньютона'); readln (a,b,c,x₀, Ɛ); writeln ('Уравнение 3x^2-4x-2=0'); write ('Введите требуемую точность решения:'); read (e); writeln ('Решение:'); writeln ('Номер шага Значение X'); en:=abs(a-b); x₀:=b; i:=1; while (abs(en)>e) do begin {Пока не достигнута точность} x₀:=x₀-f(x₀)/f1(x₀); {выполнить шаг метода} writeln (i:10,x₀:20:14); {вывести значение X с шага} en:=abs(x₀-b); {Новая точность} b:=x₀; {Значение границы для следующего шага} i:=i+1; {Номер шага} end; end. Помогите пожалуйста, скажите что не так, так Нужно как то преобразовать производную (f'=2ax+b) в нужную форму и если не ошибаюсь записать её куда то сюда x₀:=x₀-f(x₀)/f1(x₀); {выполнить шаг метода} writeln (i:10,x₀:20:14); {вывести значение X с шага}
|
||
Ads | |
Member
Регистрация: 31.10.2006
Сообщений: 40200
Записей в дневнике: 0
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 55070
|
|
|