PDA

View Full Version : مبتدی: به توان رساندن اعداد



sm_mojtaba
شنبه 31 اردیبهشت 1390, 20:55 عصر
سلام من تازه برنامه نویسی رو با زبان C آغاز کردم یک سئوال داشتم. ممنون میشم اگه جواب بدید.
1.برنامه میخوام که دو عدد صحیح a , b رو گرفته و a را به توان b برساند؟

Arcsinos
شنبه 31 اردیبهشت 1390, 22:30 عصر
خب شما اول باید اول اگوریتم توان رو بدونید . و این رو هم بدونید که توان برای اعداد مثبت همیشه بزرگتر مساوی 1 هست پس اولش توان یا همون pow را برابر 1 قرار میدیم .

بعد یه حلقه مینویسیم که به تعداد b بیاد pow*=a کنه و در آخر هم pow رو چاپ کنه . من توضیح دادم چون قرار دادن کد خلاف قوانین سایت هست . خودت پیاده سازی کن .

یوسف زالی
شنبه 31 اردیبهشت 1390, 22:35 عصر
سلام. این رو تست کن:

c = exp(b*ln(a)) // a be tavane b

shahmohammadi
یک شنبه 01 خرداد 1390, 09:10 صبح
الگوريتمتون درسته ولي در زبان سي لگاريتم بر پايه نپر به صورت log نوشته مي شه نه ln.
با تشكر.

mahak006
دوشنبه 02 خرداد 1390, 20:53 عصر
این کد برنامه ای هست کهArcsinos (http://barnamenevis.org/member.php?137710-Arcsinos) در مورد الگوریتمش براتون نوشتند .

#include<iostream.h>
int main()
{
int a,b,pow;
cin>>a>>b;
pow=1;
for ( int i=1 ; i<=b ; i++ )
pow *= a;
cout<<pow;
return 0;
}

as-soft
دوشنبه 09 خرداد 1390, 16:20 عصر
این کد برنامه ای هست کهArcsinos (http://barnamenevis.org/member.php?137710-Arcsinos) در مورد الگوریتمش براتون نوشتند .

#include<iostream.h>
int main()
{
int a,b,pow;
cin>>a>>b;
pow=1;
for ( int i=1 ; i<=b ; i++ )
pow *= a;
cout<<pow;
return 0;
}

دوست عزیز میشه بگی به وسیله توابع این کار رو باید کرد؟

Arcsinos
دوشنبه 09 خرداد 1390, 16:33 عصر
بله میتونید . مثلا تابع power رو از نوع int تعریف کنید اینطوری (int power(int a,int b بعد بیایید کد بالا رو توش بریزید اینطوری
{
pow=1;
for ( int i=1 ; i<=b ; i++ )
pow *= a
return pow
}

حالا تو int main بعد از اینکه a,b رو گرفتید بنویسید (cout<<power(a,b موفق باشید .

یوسف زالی
دوشنبه 09 خرداد 1390, 17:07 عصر
با کدی که شما نوشتید توانهای صحیح قابل محاسبه هست.
اما یا EXP توانهای اعشاری هم محاسبه میشه.مثل 2.4^3.2

irpersian20
دوشنبه 09 خرداد 1390, 17:51 عصر
با کدی که شما نوشتید توانهای صحیح قابل محاسبه هست.
اما یا EXP توانهای اعشاری هم محاسبه میشه.مثل 2.4^3.2
#include <iostream.h>

double power(float,float);

int main ()

{

float a,b;

cin>>a>>b;

cout<<power(a,b);

}

double power (float a,float b)

{

double p=1;

for (int i=1;i<=b;i++)

p*=a;

return p;

}

یوسف زالی
سه شنبه 10 خرداد 1390, 08:48 صبح
irpersian20 جان منظور من float کردن عدد ها نیست.
شما با اون کد نمی تونی به توان نیم رو حساب کنی.

quiet_programmer
سه شنبه 10 خرداد 1390, 14:40 عصر
با سلام.

برای به توان رساندن یه عدد به عدد دیگه میتونین از تابع تعریف شده در Math.h هم استفاده کنید:

#include <iostream.h>
#include <math.h>

void main()
{
int a,b;
a=3;
b=2;
cout<<pow(a,b);
}

همچنین میتونین خودتون بصورت دستی و با استفاده تابع بازگشتی پیاده سازی کنید:

#include <iostream.h>
#include <math.h>

int Power(int a,int b)
{
if(b==0)
return 1;
else
return a*Power(a,b-1);
}

void main()
{
int a,b;
a=3;
b=2;
cout<<Power(a,b);
}

همچنین دوستان هم روشهایی رو که گفته بودن همگی درست هستن.

اگه اینا کارت رو را نمیندازه بگو در اصل چی میخوای تا همونو بدیم بهت
موفق باشی

shahmohammadi
پنج شنبه 10 شهریور 1390, 00:03 صبح
اینهم یه الگوریتم سرسعتر برای توان(البته برای توان های صحیح):

long square(long n){return n*n;}

long fastexp(long base, long power)
{
if(power==0)
return 1;
else if (power%2==0)
return square(fastexp(base,power/2));
else
return base*fastexp(base,power-1);
}