Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: Для новичков > Проблемка с вылетом


Автор: dezolyator 13.12.2011, 19:32
Вообщем, в программе реализуется метод Лобачевского.. Она нормально запускается, но когда вводишь числа в консоли, она вылетает...

Помогите пожалуйста

Код

Program TheBest;
  {$APPTYPE CONSOLE}
Function St(Value,Degree:Real):Real;
Begin
        If Degree > 0 Then
                St:=Exp(Degree*Ln(Value))
        Else
                St:=1/(Exp(Degree*Ln(Value)));
End;
 
Var
        j,s,k,i,n,step,izo:Integer;
        summ,akms,akps,b:Real;
        Aa,A,x:Array[0..1000] Of Real;
Begin
        WriteLn('Vvedite stepen uravneniya');
        ReadLn(step);
        n:=step + 1;
        WriteLn('Vvedite koefficienti pri peremennih');
        For i:=0 To Step Do
                ReadLn(Aa[i]);
        j:=2;
        While j <= 128 Do
                Begin
                        For k:=0 To Step Do
                                Summ:=0;
                        For s:=1 To k Do
                                Begin
                                        If ((k-s)<0) Or ((k-s)>step) Then
                                                akms:=0
                                        Else
                                                akms:=Aa[k-s];
                                        If((k+s)<0) Or ((k+s)>step) Then
                                                akms:=0
                                        Else
                                                akps:=Aa[k+s];
                                        summ:=summ+St(-1,s)*akms*akps;
                                End;
                        j:=j*2;
                End;
        A[k]:=Aa[k]*Aa[k]+2*summ;
For i:=0 To Step Do
        Aa[i]:=A[i];
b:=1.0/128.0;
for i:=0 To step Do
x[i]:=St((Aa[i+1]/Aa[i]),b);
for i:=0 To step Do
Begin
izo:=i+1;
WriteLn('X',izo,'=',x[i]);
End;
WriteLn('Podstavte korni v ishodnoe uravnenie');
End.

Автор: MetalFan 14.12.2011, 01:14
Рекомендую (на будущее) выкладывать исходник (тем более он небольшой), пометив его кнопкой "Код", прям на форуме. Ибо качать и смотреть что там у тебя в архиве не каждый будет.
p.s. отвратительное форматирование кода. боюсь мало желающих найдется в нем разбираться.

Автор: Coder 14.12.2011, 07:30
Ввод данных здесь не вызывает вылет программы. Она вылетает где-то дальше. 

пытаемся в свою функцию st() передать -1 для вычисления Ln!

Код

Function St(Value,Degree:Real):Real;
Begin
        If Degree > 0 Then
                St:=Exp(Degree*Ln(Value))
        Else
                St:=1/(Exp(Degree*Ln(Value)));
End;

....
summ:=summ+St(-1,s)*akms*akps;


еще бы индексацию массива перепроверить и исключить деление ноль.



Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)