unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;
type
TForm1 = class(TForm)
Button1: TButton;
Edit1: TEdit;
Edit2: TEdit;
Edit3: TEdit;
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
procedure TForm1.Button1Click(Sender: TObject);
var
i, n, DGToStep: integer;
res: longint;
begin
n:=strtoint(edit2.Text);
dgtostep:=strtoint(edit1.text);
res:=1;
if n=0 then
edit3.Text:='1'
else
begin
for i:=0 to n-1 do
res:=res*dgtostep;
edit3.Text:=inttostr(res);
end;
end;
end.
Степень числа
Есть некоторе коплексное число (A + B*i). Нужно чтобы прога возводила это число в Nекоторую степень (даётся с клавы). подскажите пару моментов, а то мыслей нет...:(
учите матчасть - число в тригон форму переделать и дальше по формуле Муавра (вроде так называется)
1. Дать цикл столько раз сколько и введенное число и перемножать число которое нужно ввести в степень само на себя,
var s,a,b,i,j,n:integer;
s:=1;
readln(n);
for j:=1 to n do
s:=s*(a+b*i);
в переменной s будет ответ....
2.
Есть такая формула через экспоненту:
(a+b*i) d степени n=
exp(ln(n*(a+b*i)) или наоборот точно не помню
exp(ln((a+b*i)*n) скорее всего первый вариант
матчасть.. Да. Возможно ты (Вы) прав. Я пытаюсь понять азы программирования, при этом ненавидя математику. Многие преподы меня не понимают... Что ж, пойду откопаю свой учебник по вышке и буду соображать...
Цитата: sherry
Я пытаюсь понять азы программирования, при этом ненавидя математику. Многие преподы меня не понимают..
Это зря. Программирование придумали математики, и она встречается в программировании часто - например - алгоритмы, 3д графика.
Цитата: Death Knight
есть 2 варианта:
1. Дать цикл столько раз сколько и введенное число и перемножать число которое нужно ввести в степень само на себя,
var s,a,b,i,j,n:integer;
s:=1;
readln(n);
for j:=1 to n do
s:=s*(a+b*i);
в переменной s будет ответ....
2.
Есть такая формула через экспоненту:
(a+b*i) d степени n=
exp(ln(n*(a+b*i)) или наоборот точно не помню
exp(ln((a+b*i)*n) скорее всего первый вариант
1. Дать цикл столько раз сколько и введенное число и перемножать число которое нужно ввести в степень само на себя,
var s,a,b,i,j,n:integer;
s:=1;
readln(n);
for j:=1 to n do
s:=s*(a+b*i);
в переменной s будет ответ....
2.
Есть такая формула через экспоненту:
(a+b*i) d степени n=
exp(ln(n*(a+b*i)) или наоборот точно не помню
exp(ln((a+b*i)*n) скорее всего первый вариант
вы полную чушь (извините) написали
число комплексное
z=r(cos(fi)+i*sin(fi))
z в n степени = r^n(cos(n*fi)+i*sin(n*fi))
z - компл ч
r - его модуль
fi - его аргумент
Да я и не заметил что число комплексное... бывает...:)))
ну здесь вы меня совсем запутали...
Цитата: sherry
ну здесь вы меня совсем запутали...
Чем именно? Указанием на формулу Муавра?
тока модуль тоже возводится в степень...
z^n = r^n (cos(n*fi) + i*sin(n*fi))
а с точки зрения программной реализации, легче не использовать формулу Муавра, а возводить в виде:
z^n = (r^n) * e^(n*i*fi)
fi в радианах...
Цитата: Mr.Hacker
z^n = (r^n) * e^(n*i*fi)
fi в радианах...
хм а откуда такая формула
и откуда уверенность что exp лучше для реализации чем sin и cos
мне лично не очень она нравится на вид с математической точки зрения
- ирр число возводите в чисто мнимую степень... но в общем
может докажите :)
Код:
Вот, с графикой, но надеюсь разберётесь. :) А "(A + B*i)" нужно задать в DGToStep.
формула-то из высшей математики, она правильная, только в программировании всё равно)) из A и B получаем модуль и аргумент, а потом без разницы по какой формуле делать, всё равно возводить модуль в действительную степень и умножать аргумент на действительное число)) ну и потом если надо вернуть всё к виду A + Bi
короче так:
Код:
void mult(double a, double b, double n)
{
double r, fi;
r = sqr(a*a+b*b);
fi = arctg(b/a);
r = exp(n*log(r)); // r = pow(r, n); log в си это ln
fi *= n;
}
{
double r, fi;
r = sqr(a*a+b*b);
fi = arctg(b/a);
r = exp(n*log(r)); // r = pow(r, n); log в си это ln
fi *= n;
}
после всех этих действий получается новое комплексное число... в какой форме его вернуть из функции это уже пускай автор сам делает... я бы преобразовал обратно к виду A+Bi и вернул бы структуру... ну и передавать в функцию тогда тоже можно структуру...
дальше вопрос что функция должна возвращать..
complex.h
и функция pow для типа complex тоже перегружена в ней же... так что можно использовать готовые функции...
Код:
complex z = complex(A,B); // A и B могут иметь любой вещественный тип
pow(z, n); // степень
double mag = sqrt(norm(z)); // модуль числа, вот таким вот образом вычисляется
double ang = arg(z); // аргумент числа
pow(z, n); // степень
double mag = sqrt(norm(z)); // модуль числа, вот таким вот образом вычисляется
double ang = arg(z); // аргумент числа