Mam pytanie, mianowicie, jak potęgować i pierwiastkować liczby (nawet bardzo duże) za pomocą pętli
for
?
I jeszcze jedno - czy zmienne można oznaczyć jako Real [???]
Mam pytanie, mianowicie, jak potęgować i pierwiastkować liczby (nawet bardzo duże) za pomocą pętli
for
?
I jeszcze jedno - czy zmienne można oznaczyć jako Real [???]
x:Real
zmienna liczbowa, zakres - liczby rzeczywiste ( oczywiście jest limit =) )
for i:=1 to n do
x:=Sqr(x); albo x:=x*x; a raczej a:=a*x;
for i:=1 to n do
x:=Sqrt(x);
pasi ? =D
Edit
łaaaj =D co ja za potęgowanie zrobiłem =D
Potwoor_ ;-( rozbroiłeś mnie
program Pierwiastkowanie ;
{$APPTYPE CONSOLE}
function SqrtIter(X:real; n : integer) : real;
var
a :real;
i:integer;
begin
a:=X;
for i := 0 to n do
a:= (a+(X/a))/2;
result :=a;
end;
begin
writeln(SqrtIter(9,1000):2:10);
readln;
end.
X - liczba pierwiastkowana,
n - liczba kroków iteracji (im wyższa tym dokładniejszy pierwiastek).
Przy okazji:
gdybym chciał użyć typu Extended to jak napisać, tam, gdzie np. dla Real jest:
StrToFloat
albo:
FloatToStr
[???]
buaahh =D ale błąd walnąłem =D wstyyydd... chyba zrobię sobie nowe konto =D
na usprawiedliwienie mam to że przy kompie byłem "przelotem" =]
lepiej jest użyć potęgowania opisanego http://pl.wikipedia.org/wiki/Algorytm_szybkiego_pot%C4%99gowania wtedy zyskujemy na czasie
No, a jeśli ostatecznie nie musi być jednak pętli to:
function Potega(X, Y:Extended):Extended;
begin
result:=exp(ln(X)*Y);
end;
function Pierwiastek(X, Y:Extended):Extended;
begin
result:=exp(ln(X)/Y);
end;
..lub wprost Power. To oczywiście tylko tak wspominam przy okazji.
Przy okazji:
Chcę zrobić tak, żeby program podzielił wszystkie liczby, od 1 do X. Czy da to się zrobić za pomocą pętli for, tak jak dodawanie wszystkich liczb od 0 do X:
procedure Tkalk.Button1Click(Sender: TObject);
var
a1, an, N, Y, X : Extended;
begin
Y := StrToFloat(Edit5.Text);
a1 := 0;
an := Y;
N := Y + 1;
X := (a1 + an) * N / 2;
Label6.Caption := FloatToStr(X);
end;
albo tak jak silnię:
function silnia(n:word):Real;
begin
if (n=0)or(n=1) then silnia:=1 else
silnia:=n*silnia(n-1);
end;
procedure Tkalk.Button3Click(Sender: TObject);
begin
Label10.Caption:=FloatToStr(silnia(StrToInt(Edit8.text)));
end;
Jeżeli macie jakieś pomysły, przedstawcie je (jeżeli możenie to z wyjaśnieniami, bo tego z silnią [mnożenia wszystkich liczb od 1 do X] nie rozumiem).
Z góry dziękuję