
Вот такое вот у меня было лицо

Нужен алгоритм для решения програмным путём
Входные данные - 12 X|Y и 4 точки x1 x2 x3 x4.
1. Заголовок темы должен быть информативным. В противном случае тема удаляется ...
2. Все тексты программ должны помещаться в теги [code=pas] ... [/code], либо быть опубликованы на нашем PasteBin в режиме вечного хранения.
3. Прежде чем задавать вопрос, см. "FAQ", если там не нашли ответа, воспользуйтесь ПОИСКОМ, возможно такую задачу уже решали!
4. Не предлагайте свои решения на других языках, кроме Паскаля (исключение - только с согласия модератора).
5. НЕ используйте форум для личного общения, все что не относится к обсуждению темы - на PM!
6. Одна тема - один вопрос (задача)
7. Проверяйте программы перед тем, как разместить их на форуме!!!
8. Спрашивайте и отвечайте четко и по существу!!!
![]() ![]() |
![]() |
Dark_san |
![]()
Сообщение
#1
|
![]() Новичок ![]() Группа: Пользователи Сообщений: 22 Пол: Мужской Реальное имя: Леся Репутация: ![]() ![]() ![]() |
![]() Вот такое вот у меня было лицо ![]() Нужен алгоритм для решения програмным путём Входные данные - 12 X|Y и 4 точки x1 x2 x3 x4. -------------------- adobe photoshop master.
|
Lapp |
![]()
Сообщение
#2
|
![]() Уникум ![]() ![]() ![]() ![]() ![]() ![]() ![]() Группа: Пользователи Сообщений: 6 823 Пол: Мужской Реальное имя: Лопáрь (Андрей) Репутация: ![]() ![]() ![]() |
Входные данные - 12 X|Y и 4 точки x1 x2 x3 x4. Гм. А по-русски?.. ![]() -------------------- я - ветер, я северный холодный ветер
я час расставанья, я год возвращенья домой |
Dark_san |
![]()
Сообщение
#3
|
![]() Новичок ![]() Группа: Пользователи Сообщений: 22 Пол: Мужской Реальное имя: Леся Репутация: ![]() ![]() ![]() |
х у
0,01 0,991824 0,06 0,951935 0,11 0,913650 0,16 0,876905 0,21 0,841638 0,26 0,807789 0,31 0,775301 0,36 0,744120 0,41 0,714193 0,46 0,685470 0,51 0,657902 0,56 0,631442 x1 x2 x3 x4 0,1243 0,492 0,0094 0,66 Воть... ![]() -------------------- adobe photoshop master.
|
Lapp |
![]()
Сообщение
#4
|
![]() Уникум ![]() ![]() ![]() ![]() ![]() ![]() ![]() Группа: Пользователи Сообщений: 6 823 Пол: Мужской Реальное имя: Лопáрь (Андрей) Репутация: ![]() ![]() ![]() |
Воть... То есть тебе нужно построить полином по этой таблице, а потом вывести значения в этих четырех точках. Так?Ньютон - это вроде как частный случай Лагранжа.. )) Лагранжа ты вроде как сделала. В чем затруднение? -------------------- я - ветер, я северный холодный ветер
я час расставанья, я год возвращенья домой |
Dark_san |
![]()
Сообщение
#5
|
![]() Новичок ![]() Группа: Пользователи Сообщений: 22 Пол: Мужской Реальное имя: Леся Репутация: ![]() ![]() ![]() |
В том, что я обсалютно не понимаю этот метод.
И нужна конечная общая формула, чему равно значение в этих точках ![]() Хотя бы, что бы пока забить через мат кад , а уж потом программку -------------------- adobe photoshop master.
|
Dark_san |
![]()
Сообщение
#6
|
![]() Новичок ![]() Группа: Пользователи Сообщений: 22 Пол: Мужской Реальное имя: Леся Репутация: ![]() ![]() ![]() |
Нужна помощь, скрипя зубами, пытаюсь написать процедуру для Ньютона, но нужен хелп вот в ожном кусочке кода.
var
s, s1, p, p1, xx, H, J1, a: real;
k, i, n, j, ii, e1, f1, n1: integer;
x, y, z, z1: array [1..50] of real;
begin
repeat
clrscr;
write('Vvedite kolichestvo tochek: ');
readln(n);
if n<=0 then
begin
writeln;
write('Vvodit nado polozhitelnoe chislo! Nazhmite Enter');
readln;
end;
until n>0;
writeln;
for i:=1 to n do
begin
Write('vvedite x',i,': '); Readln(x[i]);
Write('vvedite y',i,': '); Readln(y[i]);
writeln;
end;
write(' Vvedite x*:'); Readln(xx);
s:=y[1];
for i:=2 to n do
begin
p:=1; s1:=0;
for j:=1 to i do
begin
if j=i then
goto l;
p:=p*(xx-x[j]);
l:
p1:=1;
for k:=1 to i do
begin
if j<>k then
p1:=p1*(x[j]-x[k]);
end;
p1:=y[j]/p1; s1:=s1+p1;
end;
p:=p*s1; s:=s+p;
____________________________________________ if j=i then
goto l;
p:=p*(xx-x[j]);
l:
Вот кусочек когда, можно как то это оформить без goto? Меня препод съест ![]() Сообщение отредактировано: Lapp - -------------------- adobe photoshop master.
|
Lapp |
![]()
Сообщение
#7
|
![]() Уникум ![]() ![]() ![]() ![]() ![]() ![]() ![]() Группа: Пользователи Сообщений: 6 823 Пол: Мужской Реальное имя: Лопáрь (Андрей) Репутация: ![]() ![]() ![]() |
if j=i then
goto l;
p:=p*(xx-x[j]);
l:
Вот кусочек когда, можно как то это оформить без goto? ![]() if j<>i then p:=p*(xx-x[j]);
Цитата Меня препод съест И правильно сделает, приятного ему аппетита.. ![]() ![]() -------------------- я - ветер, я северный холодный ветер
я час расставанья, я год возвращенья домой |
Гость |
![]()
Сообщение
#8
|
Гость ![]() |
|
Dark_san |
![]()
Сообщение
#9
|
![]() Новичок ![]() Группа: Пользователи Сообщений: 22 Пол: Мужской Реальное имя: Леся Репутация: ![]() ![]() ![]() |
Гм?.. ![]() if j<>i then p:=p*(xx-x[j]);
И правильно сделает, приятного ему аппетита.. ![]() Т.е if j=i then
goto l;
p:=p*(xx-x[j]);
l:
p1:=1;
можно заменить на if j<>i then p:=p*(xx-x[j]) else
p1:=1;
-------------------- adobe photoshop master.
|
Lapp |
![]()
Сообщение
#10
|
![]() Уникум ![]() ![]() ![]() ![]() ![]() ![]() ![]() Группа: Пользователи Сообщений: 6 823 Пол: Мужской Реальное имя: Лопáрь (Андрей) Репутация: ![]() ![]() ![]() |
Т.е if j=i then
goto l;
p:=p*(xx-x[j]);
l:
p1:=1;
можно заменить на if j<>i then p:=p*(xx-x[j]) else
p1:=1;
Ни в коем разе!! Ты не передергивай - я "else" не писал! В твоем посте был фрагмент с обходом оператора p:=p*(xx-x[j]) в случае, когда i=j. Все. Никаких других условий не было. То, что стоит за меткой l, будет выполняться всегда. Значит, никаких else. Ты уж определись, что именно тебе нужно, дорогая негритяночка.. ![]() Я посмотрю попозже твою прогу сегодня. И, может, напишу ченть. Мне нравится, что ты хоть что-то делаешь. Скажи препу - пусть оставит мне кусочек от обеда )). А вообще - ужасные у вас порядки.. ![]() -------------------- я - ветер, я северный холодный ветер
я час расставанья, я год возвращенья домой |
Dark_san |
![]()
Сообщение
#11
|
![]() Новичок ![]() Группа: Пользователи Сообщений: 22 Пол: Мужской Реальное имя: Леся Репутация: ![]() ![]() ![]() |
![]() ![]() -------------------- adobe photoshop master.
|
Lapp |
![]()
Сообщение
#12
|
![]() Уникум ![]() ![]() ![]() ![]() ![]() ![]() ![]() Группа: Пользователи Сообщений: 6 823 Пол: Мужской Реальное имя: Лопáрь (Андрей) Репутация: ![]() ![]() ![]() |
Как и обещал, в конце трудового дня и перед положением тела в кресла у ТВ пишу своей далекой африканской (или австралийской?) корреспондентке - темной, но образованной труженице компьютера и всякого прочего интеграла..
Вот тебе предмет твоих ночных мечт, о гордая и независимая дочь прерий (или джунглей?) И после того, как ты покажешь ЭТО своему Высокочтимому шаману.. тьфу, пропасть! преподу - он тебя так возлюбит, что уж ТОЧНО СЪЕСТ!! как это у вас там принято.. (брр.. даже не зови в гости - не приеду!..))
const
n=11;
const
x0: double= 0.01;
h: double= 0.05;
y: array[0..n]of double = (
0.99,
0.95,
0.91,
0.87,
0.84,
0.80,
0.77,
0.74,
0.71,
0.68,
0.65,
0.63
);
function Prod(t: double; k: integer): double; // t(t-1)...(t-k)
begin
if k=0 then Prod:=t else Prod:=t*Prod(t-1,k-1)
end;
function FinDif(k,i: integer): double; // finite difference
begin
if k=0 then FinDif:=y[i] else FinDif:=FinDif(k-1,i+1)-FinDif(k-1,i)
end;
function NewtonPol(x: double): double;
var
k: integer;
p,t,f: double;
begin
p:=y[0];
t:=(x-x0)/h;
f:=1;
for k:=1 to n do begin
f:=f*k;
p:=p+Prod(t,k-1)*FinDif(k,0)/f
end;
NewtonPol:=p
end;
begin
WriteLn(NewtonPol(0.492):8:5)
end.
![]() ![]() ![]() -------------------- я - ветер, я северный холодный ветер
я час расставанья, я год возвращенья домой |
Dark_san |
![]()
Сообщение
#13
|
![]() Новичок ![]() Группа: Пользователи Сообщений: 22 Пол: Мужской Реальное имя: Леся Репутация: ![]() ![]() ![]() |
Спасибо но..
Во первых выдает Eror 207 Invalid Floating point operation. Во вторых или я не выспалась, или я не вижу где используется массив с Y. И чуть чуть не поняла твоих констант... Добавлено через 10 мин. Program Nyuton;
uses crt;
var
str: string;
s, s1, p, p1, xx, a: real;
k, i, n, j, ii, e1, f1, n1: integer;
x, y, z : array [1..50] of real;
begin
repeat
clrscr;
write('Vvedite kolichestvo tochek: ');
readln(n);
if n<=0 then
begin
writeln;
write('Vvodit nado polozhitelnoe chislo! Nazhmite Enter');
readln;
end;
until n>0;
writeln;
for i:=1 to n do
begin
Write('vvedite x',i,': '); Readln(x[i]);
Write('vvedite y',i,': '); Readln(y[i]);
writeln;
end;
write(' Vvedite x*:'); Readln(xx);
s:=y[1];
for i:=2 to n do
begin
p:=1; s1:=0;
for j:=1 to i do
begin
if j<>i then p:=p*(xx-x[j]);
p1:=1;
for k:=1 to i do
begin
if j<>k then
p1:=p1*(x[j]-x[k]);
end;
p1:=y[j]/p1; s1:=s1+p1;
end;
p:=p*s1; s:=s+p;
end;
writeln;
for i:=1 to n do
begin
writeln('X[',i,']',x[i]
4,' Y[',i,']',y[i]
4);
end;
write(' Otvet f(x*)=');
textcolor(18);
writeln(s:5:3);
writeln;
textcolor(15);
write(' Nazhmite Enter');
readln;
end
Воооооооо ^_^ все оки теперь. Спасиб ))) скоро прийду с схемой ейткина))) -------------------- adobe photoshop master.
|
Lapp |
![]()
Сообщение
#14
|
![]() Уникум ![]() ![]() ![]() ![]() ![]() ![]() ![]() Группа: Пользователи Сообщений: 6 823 Пол: Мужской Реальное имя: Лопáрь (Андрей) Репутация: ![]() ![]() ![]() |
Во первых выдает Eror 207 Invalid Floating point operation. Используется? В конечных разностях, ессно, по формуле. То бишь в функции FinDif. А задается он константой (я не стал вводить точно, только два знака). Это для простоты, поскольку не имеет отношения к главному. Если тебе нужно вводить вручную или из файла - сделай, как надо. Во вторых или я не выспалась, или я не вижу где используется массив с Y. И чуть чуть не поняла твоих констант... Теперь скажи: в какой строке ошибка? У меня нет Турбо, я использую только FreePascal. В нем все проходит, вроде.. Сейчас еще раз проверю.. Да, все идет и на этом компе. Вот ответ (с приведенными данными): 0.65459 Откомпилируй с информацией о строках и скажи, в какой строке сбой. Добавлено через 6 мин. Воооооооо ^_^ все оки теперь. Фиии! "Nyuton"... кашмар..Цитата Спасиб ))) скоро прийду с схемой ейткина))) ну, это уже не ко мне.. мою прекрасную программу забраковала - успехов тебе..-------------------- я - ветер, я северный холодный ветер
я час расставанья, я год возвращенья домой |
Dark_san |
![]()
Сообщение
#15
|
![]() Новичок ![]() Группа: Пользователи Сообщений: 22 Пол: Мужской Реальное имя: Леся Репутация: ![]() ![]() ![]() |
0.65459 Откомпилируй с информацией о строках и скажи, в какой строке сбой. Натупил..кхм... это как ? ![]() ![]() Добавлено через 2 мин. Вобщем вот тут, на n-ой итерации p:=p+Prod(t,k-1)*FinDif(k,0)/f выбивает, Eror 207 Invalid Floating point operation. т.е переполнение... вот) -------------------- adobe photoshop master.
|
Dark_san |
![]()
Сообщение
#16
|
![]() Новичок ![]() Группа: Пользователи Сообщений: 22 Пол: Мужской Реальное имя: Леся Репутация: ![]() ![]() ![]() |
Не забраковала, а потерялась
![]() Где там игрики? куда икс вводить нашла ![]() а вот с игриками- проблема ![]() -------------------- adobe photoshop master.
|
Lapp |
![]()
Сообщение
#17
|
![]() Уникум ![]() ![]() ![]() ![]() ![]() ![]() ![]() Группа: Пользователи Сообщений: 6 823 Пол: Мужской Реальное имя: Лопáрь (Андрей) Репутация: ![]() ![]() ![]() |
Не забраковала, а потерялась Гм..![]() Цитата Где там игрики? Странно. Ты видишь вот это:куда икс вводить нашла ![]() а вот с игриками- проблема ![]() y: array[0..n]of double = (
0.99,
0.95,
0.91,
0.87,
0.84,
0.80,
0.77,
0.74,
0.71,
0.68,
0.65,
0.63
);
- ? Это твои "игрики". Я при наборе отрезал два знака в конце. Понимаешь? Добавь. Вот и все. В чем проблема? Ты меня начинаешь разочаровывать, бушмэночка..Проверил на Турбо - да, есть проблема. Решается небольшой коррекцией функции FinDif. В ней нужно ввести дополнительные переменные, чтобы разбить вычисление выражения. Вот так: function FinDif(k,i: integer): double;
var
a,b: double;
begin
if k=0 then FinDif:=y[i] else begin
a:=FinDif(k-1,i+1);
b:=FinDif(k-1,i);
FinDif:=a-b
end
end;
Как ты понимаешь (надеюсь), в математику или алгоритм это не вносит никаких изменений. Но Турбо, видимо, плохо работает со стеком сопроцессора и переполняет его. Этот workaround спасает ситуацию (не знаю, насколько). Но лучше все-таки взять пергаментный свиток побольше, аккуратно переписать на него весь пакет ТурбоПаскаль, отнести его к самому большому баобабу в округе, дождаться новолуния и закопать его со всеми почестями, станцевав потом на этом месте sarabanda с бубном (или что там у вас полагается по погребальному обряду), а потом скачать FreePascal с http://FreePascal.org и зажить счастливо. Кстати, извиняюсь, Турбо, кажется, не умеет определять строку сбоя, FP умеет, забыл я уже все..Да, и еще - на всякий случай - измени внутренность цикла в функции NewtonPol, вот так: f:=f/k;
p:=p+f*Prod(t,k-1)*FinDif(k,0)
Это тоже не влияет на математику, но к компьютерным вычислениям относится более щадяще..Пиши, что получается. Задавай вопросы, что есть что и зачем. Не стесняйся. Мне гораздо больше нравится, когда спрашивают, а не когда спишут, сдадут и забудут.. -------------------- я - ветер, я северный холодный ветер
я час расставанья, я год возвращенья домой |
Dark_san |
![]()
Сообщение
#18
|
![]() Новичок ![]() Группа: Пользователи Сообщений: 22 Пол: Мужской Реальное имя: Леся Репутация: ![]() ![]() ![]() |
Поняла.
А где же массив с моими иксами ?) Добавлено через 1 мин. п.с онли BP ![]() ![]() Сообщение отредактировано: Dark_san - -------------------- adobe photoshop master.
|
Lapp |
![]()
Сообщение
#19
|
![]() Уникум ![]() ![]() ![]() ![]() ![]() ![]() ![]() Группа: Пользователи Сообщений: 6 823 Пол: Мужской Реальное имя: Лопáрь (Андрей) Репутация: ![]() ![]() ![]() |
А где же массив с моими иксами ?) Ну, на зачема он нужен, скажи плз? По определению, полином сэра Исаака работает исключительно с равноотстоящими точками по x. Ты приглядись (очки надень)) - все иксы идут ровно через 0.05. Ну, и зачем тогда массив?? Достаточно начала (x0=0.01) и промежутка (h=0.05). Все. Ясно?Цитата онли BP НЕ ВЕРЮ.![]() Спроси препа. Конкретно, про Free Pascal (FPC). Добавлено через 7 мин. очень теряюсь в коде Ты не в коде теряешься, а в чем-то еще (не знаю, в чем). Дай себе труд посмотреть внимательно (больше 5 мин) - и уж "игрики" ты бы разглядела - они занимают треть кода!.. ![]() Смотри, разленишься - не буду тебе помогать. И даже есть тебя не стану... ![]() -------------------- я - ветер, я северный холодный ветер
я час расставанья, я год возвращенья домой |
Dark_san |
![]()
Сообщение
#20
|
![]() Новичок ![]() Группа: Пользователи Сообщений: 22 Пол: Мужской Реальное имя: Леся Репутация: ![]() ![]() ![]() |
Ну, на зачема он нужен, скажи плз? По определению, полином сэра Исаака работает исключительно с равноотстоящими точками по x. Ты приглядись (очки надень)) - все иксы идут ровно через 0.05. Ну, и зачем тогда массив?? Достаточно начала (x0=0.01) и промежутка (h=0.05). Все. Ясно? НЕ ВЕРЮ. Спроси препа. Конкретно, про Free Pascal (FPC). Добавлено через 7 мин. Ты не в коде теряешься, а в чем-то еще (не знаю, в чем). Дай себе труд посмотреть внимательно (больше 5 мин) - и уж "игрики" ты бы разглядела - они занимают треть кода!.. Смотри, разленишься - не буду тебе помогать. И даже есть тебя не стану... ![]() Теперь поняла , с иксами ( п.с игрики видела, но почему то подумала, что то иксы ) xD -------------------- adobe photoshop master.
|
![]() ![]() |
![]() |
Текстовая версия | 9.04.2025 3:25 |