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

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

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль

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

Ответ
 
Опции темы Поиск в этой теме
Старый 28.05.2010, 07:57   #1
AndrewPl
Пользователь
 
Регистрация: 23.04.2010
Сообщений: 52
Восклицание деление на 0, что изменить?..

вот программа,строка выделенная где ошибка:
uses crt;
Type mas=array[1..19,1..19] of real;
Type mas1=array[1..10] of real;
var F:mas;
X1,X2,minY,Z:mas1;
t1,z2,z1,t,dt,tk,tp,xp1,xp2,xk1,xk2 ,dx1,dx2,minF,minF1,mx,my,minX1,min X2:real;
i,n,j,u,grDriver,grMode,y,yy,x,xx,p x,py,px1,py1:integer;
grPath,l,s:string;

{подпрограмма формирования одномерных массивов}
procedure form(xn:mas1;xp,xk:real);
var dx,x:real;
k:integer;
begin
k:=10;
x:=xp;
dx:=(xk-xp)/(k-1);
for i:=1 to 10 do
begin
xn[i]:=x;
x:=x+dx;
end;
end;
{-----------------------------------------------------}
{подпрограмма-функция сопративления}
function a(h:real):real;
begin
a:=0.273*(sin(3*h+3)/h)/(cos(3*h+3)/h);
end;
{передаточная ф-я}
function b(a,b,te:real):real;
begin
b:=exp(4*ln(a))-0.9*b+sqr(a)+2*a+ exp(6*ln(a))*b/3; { - вот тут "*Ошибка: вещественное деление на 0 (Program4.pas, строка 34)"}
end;
{Подпрограмма формирования двумерного массива}
procedure miF(x:mas;k1,k2:mas1;var miF:real;var miX1,miX2:real);
begin
miF:=F[1,1];
miX1:=k1[1];
miX2:=k2[1];
for u:=1 to n do
begin
for j:=1 to n do
begin
{Модуль1:поиск минимального элемента F(n,n)}
if F[u,j]<miF then
begin
miF:=F[u,j];
miX1:=k1[u];miX2:=k2[j];
end;
end;
end;
end;

{ПРОГРАММА}
begin
clrscr;
xp1:=1.2;
xp2:=-1.8;
xk1:=2.3;
xk2:=0.1;
tp:=-5;
tk:=4;
dt:=0.5;
t:=tp;
{---------формирование массивов х1 и х2-----------}
form(x1,xp1,xk1);
form(x2,xp2,xk2);
{-------------------------------------------------}
writeln;
writeln(' Начало таблицы');
Writeln(' |-----|---------|--------|--------|------------|----------|');
Writeln(' | i | T | Z | minF | X1min | X2min |');
Write(' |-----|---------|--------|--------|------------|----------|') ;
{цикл по времени }
for i:=1 to 19 do begin
{обращение к подпрограмме-функции а(t)}
Z[i]:=a(t);writeln;
for u:=1 to 10 do
begin
for j:=1 to 10 do
begin
F[u,j]:=b(x1[u],z[i],x2[j]);
end;
end;
{определение минимума двумерного массива F(10,10) и соответствующих значений x1 и x2}
miF(F,X1,X2,minF,minX1,minX2);
minY[i]:=minF;
if i=10 then begin
readln;
writeln(' Конец таблицы');
end;
if ((i>=1)and(i<9)) then
begin
writeln(' | ',i:2,' | ',T:2:2,' |',z[i]:6:3,' |',minF:1:1,' |' ,minX1:2:0,' | ',minX2:4:2,' |');
write(' |-----|---------|--------|--------|------------|----------|');
end;
if i=9 then
begin
writeln(' | ',i:2,' | ',T:2:2,' |',z[i]:6:3,' |',minF:1:1,' |',minX1:2:2,' | ',minX2:4:2,' |');
write(' |-----|---------|--------|--------|------------|----------|');
end;
if i=10 then
begin
writeln(' |-----|---------|--------|--------|------------|----------|');
writeln(' | ',i:2,' | ',T:2:2,' |',z[i]:6:4,' | ',minF:1:1,' |',minX1:2:2,' | ',minX2:4:2,' |');
write(' |-----|---------|--------|--------|------------|----------|');
end;
if ((i>=11)and(i<20)) then
begin
writeln(' | ',i:2,' | ',T:2:2,' |',z[i]:6:2,' | ',minF:8:3,' |',minX1:4:2,' | ',minX2:4:2,' |');
write(' |----|-------|----------|----------|-------|--------|');
end;
if i=19 then
begin
writeln(' | ',i:2,' | ',T:2:2,' |',z[i]:6:2,' | ',minF:8:3,' |',minX1:4:2,' | ',minX2:4:2,' |');
write(' |----|--------|-----------|----------|-----|--------------|');
end;
t:=t+dt;
end;
Writeln;Writeln;Writeln;Writeln;Wri teln;
readln;end.
AndrewPl вне форума Ответить с цитированием
Старый 28.05.2010, 08:19   #2
Utkin
Старожил
 
Аватар для Utkin
 
Регистрация: 04.02.2009
Сообщений: 17,351
По умолчанию

Разбей формулу на несколько и по бреакпоинтам отследи ошибку.
Маньяк-самоучка
Utkin появился в результате деления на нуль.
Осторожно! Альтернативная логика
Utkin вне форума Ответить с цитированием
Старый 28.05.2010, 08:34   #3
AndrewPl
Пользователь
 
Регистрация: 23.04.2010
Сообщений: 52
По умолчанию

это как?там просто ,наверное одна подпрограмма при переборе элементов принимает значение 0,а в следующей подпрограмме этот 0 вылазит боком((
AndrewPl вне форума Ответить с цитированием
Старый 28.05.2010, 09:02   #4
Utkin
Старожил
 
Аватар для Utkin
 
Регистрация: 04.02.2009
Сообщений: 17,351
По умолчанию

Это просто. У тебя большая формула. Разбей ее на несколько простых. Бреакпоинтами пользовался когда-нибудь? И еще: у тебя функция называется b и ее входящий параметр b:
Код:
function b(a,b,te:real):real;
А это не есть гуд. Скажу даже больше это плохо, в том плане, что функция и параметры должны иметь осмысленные имена. Вот сам подумай, что у тебя в формуле используется входящий параметр или результат функции? И второе - комментарии практически отсутствуют. А это одна из существенных ошибок, на которую обычно все не обращают внимания (и которая обычно выходит боком при отладке программы).
Маньяк-самоучка
Utkin появился в результате деления на нуль.
Осторожно! Альтернативная логика

Последний раз редактировалось Utkin; 28.05.2010 в 09:09.
Utkin вне форума Ответить с цитированием
Старый 28.05.2010, 09:17   #5
AndrewPl
Пользователь
 
Регистрация: 23.04.2010
Сообщений: 52
По умолчанию

Цитата:
Сообщение от Utkin Посмотреть сообщение
Это просто. У тебя большая формула. Разбей ее на несколько простых. Бреакпоинтами пользовался когда-нибудь? И еще: у тебя функция называется b и ее входящий параметр b:
Код:
function b(a,b,te:real):real;
А это не есть гуд. Скажу даже больше это плохо, в том плане, что функция и параметры должны иметь осмысленные имена. Вот сам подумай, что у тебя в формуле используется входящий параметр или результат функции? И второе - комментарии практически отсутствуют. А это одна из существенных ошибок, на которую обычно все не обращают внимания (и которая обычно выходит боком при отладке программы).
спасибо тебе!! Бреакпоинтами не пользовался((((
AndrewPl вне форума Ответить с цитированием
Старый 28.05.2010, 09:53   #6
Utkin
Старожил
 
Аватар для Utkin
 
Регистрация: 04.02.2009
Сообщений: 17,351
По умолчанию

Ну так воспользуйся .
Маньяк-самоучка
Utkin появился в результате деления на нуль.
Осторожно! Альтернативная логика
Utkin вне форума Ответить с цитированием
Старый 28.05.2010, 10:12   #7
AndrewPl
Пользователь
 
Регистрация: 23.04.2010
Сообщений: 52
По умолчанию

Цитата:
Сообщение от Utkin Посмотреть сообщение
Ну так воспользуйся .
ладно, сегодня уже никак...спасибо за помощь
AndrewPl вне форума Ответить с цитированием
Старый 28.05.2010, 16:31   #8
AndrewPl
Пользователь
 
Регистрация: 23.04.2010
Сообщений: 52
По умолчанию

на паскале abc пишет диление на 0,а в 7-м ошибка 207- Invalid floating point operation (Недопустимая операция с плавающей запятой) .
AndrewPl вне форума Ответить с цитированием
Старый 28.05.2010, 16:46   #9
Virtson
Владимир М.
Участник клуба
 
Аватар для Virtson
 
Регистрация: 30.10.2006
Сообщений: 1,289
По умолчанию

1) Причина в ln(a) - нельзя вычислить при a близком к 0 .
2) Также следует проверять sqrt(a) .. только ошибка другая будет, наверное.
Берегите друг друга!

Последний раз редактировалось Virtson; 28.05.2010 в 16:49.
Virtson вне форума Ответить с цитированием
Старый 28.05.2010, 17:09   #10
AndrewPl
Пользователь
 
Регистрация: 23.04.2010
Сообщений: 52
По умолчанию

Цитата:
Сообщение от Virtson Посмотреть сообщение
1) Причина в ln(a) - нельзя вычислить при a близком к 0 .
2) Также следует проверять sqrt(a) .. только ошибка другая будет, наверное.
нет,я через экспоненту и ln задал 4-й степень это так,но ошибка не в этом.я пробывал задать exp(4*ln(a)) как sqr(sqr(a)) и это проблему не устранило((((
AndrewPl вне форума Ответить с цитированием
Ответ


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

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
как нужно изменить код, что бы отображение картинок было корректным? Garret13 Помощь студентам 0 10.05.2010 19:05
Программа с классом и объектами (Что в программе нужно изменить?) wepoTWR Помощь студентам 0 17.11.2009 19:26
Что изменить в коде? lider24816 Помощь студентам 1 30.05.2009 09:58
что тут нужно изменить? asd48 Общие вопросы C/C++ 2 08.04.2009 21:47
Что нужно изменить, чтоб запрос заработал? Paul Hindenburg PHP 1 08.10.2008 09:45