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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 16.10.2009, 19:42   #1
ILNARM
 
Регистрация: 16.10.2009
Сообщений: 9
Печаль возведение в степень

ребят, помогите. завтра сдавать задачку, если не сдам то с учебы выкидывают((
задача такова, возвести в степень z=y^x
Дело в том, что в паскале возвести в степень можно только так: exp(x*ln(y)). Вот, но есть нюанс. Если просто взять бумагу, высчитать -2^2 мозгов много не надо, а вот когда паскаль начинает считать, то логарифм из 0 и отрицательного числа не высчитывается.
Но надо решить задачу, без использования процедур и функций.
например так, но задача не сдалан до конца, не знаю как быть
Код:
Program turbo;
uses crt;
var a,b,c,y,z:real;
    x:integer;
Begin
   clrscr;
   write('y= '); readln(y);
   write('x= '); readln(x);
   if (y<0) then
   begin
   y:=y*(-1);
   end;
      a:=exp(x*ln(y));
      z:=a;
      writeln('z= ',z:1:3);
    end;
     readkey;
     end.
ILNARM вне форума Ответить с цитированием
Старый 16.10.2009, 19:50   #2
Arigato
Высокая репутация
СуперМодератор
 
Аватар для Arigato
 
Регистрация: 27.07.2008
Сообщений: 15,551
По умолчанию

Функция Power из Делфи:
Код:
function Power(const Base, Exponent: Extended): Extended;
begin
  if Exponent = 0.0 then
    Result := 1.0               { n**0 = 1 }
  else if (Base = 0.0) and (Exponent > 0.0) then
    Result := 0.0               { 0**n = 0, n > 0 }
  else if (Frac(Exponent) = 0.0) and (Abs(Exponent) <= MaxInt) then
    Result := IntPower(Base, Integer(Trunc(Exponent)))
  else
    Result := Exp(Exponent * Ln(Base))
end;
Функция IntPower возводит в степень целые числа. В Делфи она на Ассемблере, но можно и самому написать.
Arigato на форуме Ответить с цитированием
Старый 16.10.2009, 19:55   #3
redeezko
Пользователь
 
Аватар для redeezko
 
Регистрация: 16.10.2009
Сообщений: 16
По умолчанию

можно вот так:
Код:
program turbo;
uses crt;
var y,z,x:real;
      i:integer;
Begin
    writeln('vvedite x');
    readln(x);
    writeln('vvedite y');
    readln(y);
    i:=1;
    z:=1;
    while i<=x do
            begin
                z:=z*y;
                i:=i+1
            end;
    writeln('z=',z:1:3);
    readkey;
End.
redeezko вне форума Ответить с цитированием
Старый 16.10.2009, 20:07   #4
Greblin
Меркантильный кю
Участник клуба
 
Аватар для Greblin
 
Регистрация: 02.02.2008
Сообщений: 1,001
По умолчанию

redeezko Ну и посмотрите, что выдаст Ваша программа, например, для корня из 2
ILNARM Если надо без функций, то копайте во сторону ряда Маклорена-Тейлора. В Вашем случает лучше всего использовать ряд для (1+x)^m. Дальше ищете по форуму, как такой ряд реализовать с заданной точностью. Такие задания появляются каждую неделю
Росли вроде умными, выросли дурнями... (c)А.Васильев
Greblin вне форума Ответить с цитированием
Старый 16.10.2009, 20:11   #5
redeezko
Пользователь
 
Аватар для redeezko
 
Регистрация: 16.10.2009
Сообщений: 16
По умолчанию

Greblin не пойму о чем вы? Приведите пример когда данная программа не работает? Вроде пару занятий назад по информатике в универе препод нам написал именно такой код.
redeezko вне форума Ответить с цитированием
Старый 16.10.2009, 20:14   #6
ILNARM
 
Регистрация: 16.10.2009
Сообщений: 9
По умолчанию

redeezko, спасибо за помощь, но при некоторых кобинация программа не правильно работает, например, 2^(-2)
Arigato, препод мне точно не поверит, что я сам делал, и доказать не смогу)
ILNARM вне форума Ответить с цитированием
Старый 16.10.2009, 20:25   #7
redeezko
Пользователь
 
Аватар для redeezko
 
Регистрация: 16.10.2009
Сообщений: 16
По умолчанию

Прошу прощения, сейчас исправлю
redeezko вне форума Ответить с цитированием
Старый 16.10.2009, 20:55   #8
redeezko
Пользователь
 
Аватар для redeezko
 
Регистрация: 16.10.2009
Сообщений: 16
По умолчанию

Вот. Может и не рационально зато верно считает.
Код:
program Project1;
 {$APPTYPE CONSOLE}
 uses
  SysUtils;
var x,y,z:real;
    i:integer;
begin
  writeln('vvedite x');
  readln(x);
  writeln('vvedite y');
  readln(y);
  z:=1;
  i:=1;
  if x>0 then
      begin
  while i<=x do
              begin
                z:=z*y;
                i:=i+1;
              end
      end;
  if x<0 then
      begin
         while i<=abs(x) do
              begin
                z:=z*y;
                i:=i+1;
              end;
        z:=1/z;
      end;
  if ((y=0) and (x=0)) then z:=0;
  writeln('z:=',z);
  readln;
end.
redeezko вне форума Ответить с цитированием
Старый 16.10.2009, 21:00   #9
Arigato
Высокая репутация
СуперМодератор
 
Аватар для Arigato
 
Регистрация: 27.07.2008
Сообщений: 15,551
По умолчанию

redeezko
А если X = 2; Y = 0.5

Да и не ясно, у вас X^Y или Y^X? Кажется, ТС надо X^Y.
Arigato на форуме Ответить с цитированием
Старый 16.10.2009, 21:05   #10
redeezko
Пользователь
 
Аватар для redeezko
 
Регистрация: 16.10.2009
Сообщений: 16
По умолчанию

Arigato да вроде у него y^x
redeezko вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
pascal возведение в степень world12_tk Помощь студентам 1 09.06.2009 17:40
возведение в степень Lissisa Помощь студентам 1 21.03.2009 22:34
Возведение числа в степень Gross Общие вопросы Delphi 8 25.12.2008 19:37
Возведение в степень Stanislav Общие вопросы Delphi 10 05.12.2007 23:34
Возведение в степень... Sota Общие вопросы C/C++ 7 18.07.2007 17:05