Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > [ "Начинающим" ]
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 27.04.2009, 12:08
Ksully Ksully вне форума
Прохожий
 
Регистрация: 17.04.2009
Сообщения: 23
Репутация: 10
По умолчанию Возвести в степень

У меня тут возникла проблемка...
Необходимо возвести число в какую-либо степень....
Я пишу S:=Exp((-0.5)*Ln(sigma1)) , но программа запускаться не хочет, ставит указатель после Ln и пишет [Error] Unit3.pas(121): Missing operator or semicolon. Вроде же все написано правильно, как так....
Подскажите?
Ответить с цитированием
  #2  
Старый 27.04.2009, 12:33
AlexSku AlexSku вне форума
Специалист
 
Регистрация: 07.05.2007
Адрес: Москва
Сообщения: 884
Репутация: 21699
По умолчанию

Всё откомпилировалось. Может, действительно нужна точка с запятой (semicolon)?
Код:
var
  S: Real;
  sigma1: Real = 2.0;
procedure TForm1.FormCreate(Sender: TObject);
begin
  S:=Exp((-0.5)*Ln(sigma1))
end;
Ответить с цитированием
  #3  
Старый 27.04.2009, 13:05
Ksully Ksully вне форума
Прохожий
 
Регистрация: 17.04.2009
Сообщения: 23
Репутация: 10
По умолчанию

Да так все работает..

А в моем коде, нет

Код:
 begin
       Reky:=(w*dtr)/v;
       //расчет для КУ
       //пароперегреватель
       if (sigma1<=sigma2) and (fi>=0.06) and (fi<=1) then
        ksi:=(2*(Exp((-0.5)*Ln(sigma1-1)))*(Exp((-0.2)*Ln(Reky))))*Zparo
     else
       if (sigma1>sigma2) and (fi>1) and (fi<=8) then
        ksi:=(0.38*(Exp((-0.5)*Ln(sigma1-1)))* Exp((-0.59)*Ln(fi-0.94))* Exp((-0.2/(sqr(fi))*Ln(Reky))))*Zparo
     else
       if (sigma1>sigma2) and (fi>8) and (fi<=15) then
         ksi:=(0.118*(Exp((-0.5)*Ln(sigma1-1))))*Zparo;
      end;
     Form3.StringGrid2.Cells[0,0]:='Re';
     Form3.StringGrid2.Cells[0,i]:=FloatToStr(Reky);
     Form3.StringGrid2.Cells[1,0]:='Коэф сопр паропер';
     Form3.StringGrid2.Cells[1,i]:=FloatToStr(ksi);
Ответить с цитированием
  #4  
Старый 27.04.2009, 14:47
lmikle lmikle вне форума
Модератор
 
Регистрация: 17.04.2008
Сообщения: 8,096
Версия Delphi: 7, XE3, 10.2
Репутация: 49089
По умолчанию

1. Есть функция Power. Если по типам параметров подходит, то используй ее.
2. Сделай отдельную фнукцию возведения в степень и в своем коде используй ее - наверняка у тебя скобок или еще чего-нить в этом роде не хватает.
Ответить с цитированием
  #5  
Старый 27.04.2009, 15:27
Nyctos Kasignete Nyctos Kasignete вне форума
Активный
 
Регистрация: 29.03.2009
Сообщения: 300
Репутация: 94
По умолчанию

Цитата:
Сообщение от Ksully
Я пишу S:=Exp((-0.5)*Ln(sigma1))
Зачем? Проще арифметически преобразовать это выражение на бумажке и не мучиться. Потому что Exp((-0.5)*Ln(sigma1)) просто равно 1/Sqrt(sigma1). Проверьте, если желаете! =)
Не надо делать лишних операций, если всё гораздо проще.
Ответить с цитированием
  #6  
Старый 29.04.2009, 17:23
AlexSku AlexSku вне форума
Специалист
 
Регистрация: 07.05.2007
Адрес: Москва
Сообщения: 884
Репутация: 21699
По умолчанию

Цитата:
Сообщение от Ksully
Да так все работает..

А в моем коде, нет

Код:
 begin
       Reky:=(w*dtr)/v;
       //расчет для КУ
       //пароперегреватель
       if (sigma1<=sigma2) and (fi>=0.06) and (fi<=1) then
        ksi:=(2*(Exp((-0.5)*Ln(sigma1-1)))*(Exp((-0.2)*Ln(Reky))))*Zparo
     else
       if (sigma1>sigma2) and (fi>1) and (fi<=8) then
        ksi:=(0.38*(Exp((-0.5)*Ln(sigma1-1)))* Exp((-0.59)*Ln(fi-0.94))* Exp((-0.2/(sqr(fi))*Ln(Reky))))*Zparo
     else
       if (sigma1>sigma2) and (fi>8) and (fi<=15) then
         ksi:=(0.118*(Exp((-0.5)*Ln(sigma1-1))))*Zparo;
-->>      end;
     Form3.StringGrid2.Cells[0,0]:='Re';
     Form3.StringGrid2.Cells[0,i]:=FloatToStr(Reky);
     Form3.StringGrid2.Cells[1,0]:='Коэф сопр паропер';
     Form3.StringGrid2.Cells[1,i]:=FloatToStr(ksi);
Возможно, слово 'end;' не в том месте.
Ответить с цитированием
  #7  
Старый 29.04.2009, 17:24
Аватар для Rokuell
Rokuell Rokuell вне форума
Активный
 
Регистрация: 27.12.2006
Адрес: Псков
Сообщения: 274
Версия Delphi: Delphi 7
Репутация: 497
По умолчанию

Обычно использую эту:
Код:
function Pow(base,exponent:Extended):Extended;
asm
 fld tbyte ptr [exponent]
 fld tbyte ptr [base]
 fyl2x
 fld ST(0)
 frndint
 fxch
 fsub ST(0),ST(1)
 f2xm1
 fld1
 faddp
 fscale
 fstp ST(1)
end;
__________________
Велик и могуч наш Object Pascal !
ICQ: 357-591-887
Ответить с цитированием
Ответ


Delphi Sources

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

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 00:49.


 

Сайт

Форум

FAQ

Соглашения

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2025