Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Паскаль, Turbo Pascal, PascalABC.NET
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 06.07.2011, 15:48   #1
Seriy9292
Новичок
Джуниор
 
Регистрация: 06.07.2011
Сообщений: 5
По умолчанию Программа зациклилась

Пишу программу интерполяции кубическим сплайном, столкнулся с такой проблемой: программа зацикливается на следующем моменте:
r[d]:=3*((F[d]-F[d-1])/h[d]-(F[d-1]-F[d-2])/h[d-1]);
Я пытаюсь посчитать этот коэффициент, а на нём происходит полный вис программы всю голову сломал, не пойму что не так. Для пояснения:
F-это значение функции cos(x) в точках Xi, которые я задал ранее,h-это шаг между Xi.Походу компилятор не может посчитать значение функции F[d] или F[d-1] или же F[d-2], поэтому зацикливается. Помогите советом, что можно сделать, уже голова пухнет. Вот полный код, зацикливание в конце.
Код:
Uses Crt; 
var Xi,Fi,F,ai,bi,ci,di,h,k,l,r,s:array[1..100] of real; 
var x:real; 
var T,n,m,p,o,b,g,j,v,d:byte; 
begin 

Clrscr; 
writeln('vvedite kolichestvo elementov'); 
read(T); 
writeln; 
for n:=0 to T-1 do 
 begin 
write('vvedite X[',n,']): '); 
readln(Xi[n]); 
 end; 
 writeln; 
 For o:=1 to T-1 do 
 begin 
h[o]:=Xi[o]-Xi[o-1]; 
writeln('h[',o,']= ',h[o]:4:2); 
 end; 

writeln; 
writeln('vi vveli sleduushie znacheniya Xi: '); 

For m:=0 to T-1 do 
 begin 
writeln(Xi[m]:3:2); 
writeln; 
 end; 
writeln; 
For b:=0 to T-1 do 

 begin 
 writeln; 

 F:=cos(Xi); 
 writeln('F[',b,']= ',F:4:2); 
 ai[j]:=F[b-1]; 
 write('ai[',b,']= ',ai[j]:4:2); 

 end; 

writeln; 
For v:=1 to T do 
begin 
s[v]:=2*(h[v]+h[v-1]); 
writeln('s[',v,']= ',s[v]:4:2); 
end; 
writeln; 

For d:=1 to T do 
begin 
r[d]:=3*((F[d]-F[d-1])/h[d]-(F[d-1]-F[d-2])/h[d-1]); 
writeln('r[',d,']= ',r[d]:4:2); 
end; 
k[1]:=0;l[1]:=0; 
end.
Помогите пожалуйста




___________
Код нужно оформлять по правилам:
тегом [CODE]..[/СODE] (это кнопочка с решёточкой #)
Не забывайте об этом!
Модератор.

Последний раз редактировалось Serge_Bliznykov; 06.07.2011 в 16:01.
Seriy9292 вне форума Ответить с цитированием
Старый 06.07.2011, 16:02   #2
Seriy9292
Новичок
Джуниор
 
Регистрация: 06.07.2011
Сообщений: 5
По умолчанию

Извиняюсь, модератор, я новичек, не знал
Seriy9292 вне форума Ответить с цитированием
Старый 06.07.2011, 16:10   #3
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

сразу не ходя далеко
Код:
var Xi,Fi,F,ai,bi,ci,di,h,k,l,r,s:array[1..100] of real; 
......
for n:=0 to T-1 do 
 begin 
write('vvedite X[',n,']): '); 
readln(Xi[n]); 
 end;
что это Вы в нулевой элемент пишете, если нумерация массива у вас от единицы...
Serge_Bliznykov вне форума Ответить с цитированием
Старый 06.07.2011, 16:16   #4
Seriy9292
Новичок
Джуниор
 
Регистрация: 06.07.2011
Сообщений: 5
По умолчанию

Дружище, спасибо большое, сразу зацикливаться перестало, но появилась ошибка в том же самом вычислении r[d] (Деление на нуль). Где я оплошался?
Seriy9292 вне форума Ответить с цитированием
Старый 11.07.2011, 13:19   #5
Vanta11a
Lawful Evil
Участник клуба
 
Аватар для Vanta11a
 
Регистрация: 13.05.2008
Сообщений: 1,208
По умолчанию

Сделайте отладку.
Самый простой способ при каждой итерации открываем файл, записываем в него коэффициенты и номер итерации, закрываем.
В результате имеем конечную итерацию и значения коэффициентов перед ошибкой, что позволяет найти косяк.
Алгоритм - бесплатен. Поиск багов - бесплатен. Реализация алгоритма - за отдельную плату.
На форуме помогают советами и объясняют, а не пишут на халяву программы, лабы, курсачи и т.д. (c)
Vanta11a вне форума Ответить с цитированием
Старый 11.07.2011, 13:38   #6
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

Цитата:
Самый простой способ при каждой итерации открываем файл, записываем в него коэффициенты и номер итерации, закрываем.
О, Господи...
в паскале есть отладчик, просто идем построчно и смотрим значения переменных/выражений.
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 12.07.2011, 11:37   #7
Vanta11a
Lawful Evil
Участник клуба
 
Аватар для Vanta11a
 
Регистрация: 13.05.2008
Сообщений: 1,208
По умолчанию

Да, отладчик хороший. При числе итераций до 100. А если программа валится на тысячной итерации или дальше?
Алгоритм - бесплатен. Поиск багов - бесплатен. Реализация алгоритма - за отдельную плату.
На форуме помогают советами и объясняют, а не пишут на халяву программы, лабы, курсачи и т.д. (c)
Vanta11a вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Программа с применением записей и программа с применение множеств smert99 Помощь студентам 0 16.06.2011 23:14
Программа открыается если есть другая программа. bookkc Паскаль, Turbo Pascal, PascalABC.NET 12 14.10.2009 20:09
[PASCAL]Программа создания файла, программа обработки файла Виколяшка Фриланс 7 23.09.2009 17:38
Рекурсия зациклилась Андрюха из ПХТТ Помощь студентам 1 12.05.2009 19:07