View Full Version : سوال: در موردسری1+(1/2)+(1/3)+(1/x)
behroz1992
دوشنبه 18 مرداد 1389, 14:47 عصر
سلام به همه دوستان عزیز من میخواستم این سری رو انجام بدم ولی فقط آخرین رو +1 میکنه مشکل از کجاست ممنون
1+(1/2)+(1/x)
#include<iostream.h>
#include<conio.h>
int main()
{
float x,i,y;
cin>>x;
for(i=2;i<=x;i++)
{
y=1+(1/i);
}
cout<<y;
getch();
return 0;
}
tdkhakpur
دوشنبه 18 مرداد 1389, 14:58 عصر
int main()
{
float x,i,y=0; /// اینجا
cin>>x;
for(i=2;i<=x;i++)
{
y+=1+(1/i); // اینجا
}
cout<<y;
getch();
return 0;
}
behroz1992
دوشنبه 18 مرداد 1389, 15:29 عصر
ممنون دوست عزیز
مشکل اصلی اینجا هست که من وقتی با ماشین حساب ویندوز حساب میکنم عدد 4 رو میشه ::
2.0833333333333...
ولی وقتی با برنامه میزنم میشه::4.08333
به نظر شما مشکل از چی هست؟
tdkhakpur
دوشنبه 18 مرداد 1389, 15:45 عصر
به نظر شما مشکل از چی هست؟
مشکلی ندارد فقط بازه موردنظر برای cout این مقداری هست که میبینید میتوانید به شکل زیر هم استفاده کنید.
printf("%4.8f",y);
در فوق دو رقم برای قشمت صحصح و 8 رقم برای اعشار قید میشود.
Salar Ashgi
دوشنبه 18 مرداد 1389, 16:27 عصر
مشکل از اینجاست که دوست عزیز tdkhakpur (http://www.barnamenevis.org/forum/member.php?u=99732) در کدشون عدد 1 موجود در سری رو هر بار لحاظ کردن ،
در صورتیکه تو سری یه بار اومده ؛
کد مورد نظر :
#include <iostream>
#include <conio>
int main(){
int n;
double sum=1;
cout<<"Enter n :\n";
cin>>n;
for(int i=2;i<=n;i++)
sum+=(1.0/i);
cout<<"Sum : "<<sum<<endl;
getch();
}
در ضمن دوست عزیز behroz1992 (http://www.barnamenevis.org/forum/member.php?u=116933) ، اشکال کد شما در اینجاست که متغیری که قراره مجموع سری تو خودش
نگه داره رو مقدار دهی اولیه نکردین ؛ فراموش نکنین متغیرهای نگه دارنده مجموع و حاصلضرب همیشه
باید ابتدا مقدار دهی بشن و گرنه یه مقدار پیش فرض نامعلوم از حافظه داخل متغیر ذخیره میشه و این مقدار با مجموع یا حالا هر عملیاتی که روی متغیر انجام میدین ، ترکیب و ادغام میشه و این باعث میشه نتیجه
غلط بدست بیاد .
موفق باشید ./
behroz1992
دوشنبه 18 مرداد 1389, 16:50 عصر
واقعا ممنونم مدیر عزیز:قلب:
فقط یه سوالی من این یه قسمت رو متوجه نشدم
sum+=(1.0/i);
sum+= رو متوجه شدم چی هست ولی این یه قسمت رو 1.0/i رو نه !؟
الان مقدار اولیه sum =1 هست برای همین 1+(1.0/i) نکردید؟
ببخشید دیگه من تازه کارم
tdkhakpur
دوشنبه 18 مرداد 1389, 17:05 عصر
sum+= رو متوجه شدم چی هست ولی این یه قسمت رو 1.0/i رو نه !؟
خب سری شما در هر مرحله محاسبه اش متفاوت هست به همین دلیل i برای اعمال این تغییرات در محاسبه قرار داده میشود .
1/2+1/3+1/3+1/4+...
artificial_intelligence
دوشنبه 18 مرداد 1389, 17:17 عصر
ممنون دوست عزیز
مشکل اصلی اینجا هست که من وقتی با ماشین حساب ویندوز حساب میکنم عدد 4 رو میشه ::
2.0833333333333...
ولی وقتی با برنامه میزنم میشه::4.08333
به نظر شما مشکل از چی هست؟
پاسخ:
مشکل از اینجاست که دوست عزیز tdkhakpur (http://www.barnamenevis.org/forum/member.php?u=99732) در کدشون عدد 1 موجود در سری رو هر بار لحاظ کردن ،
در صورتیکه تو سری یه بار اومده ؛
کد مورد نظر :
#include <iostream>
#include <conio>
int main(){
int n;
double sum=1; // مقدار یک
cout<<"Enter n :\n";
cin>>n;
for(int i=2;i<=n;i++)
sum+=(1.0/i);
cout<<"Sum : "<<sum<<endl;
getch();
}
در ضمن دوست عزیز behroz1992 (http://www.barnamenevis.org/forum/member.php?u=116933) ، اشکال کد شما در اینجاست که متغیری که قراره مجموع سری تو خودش
نگه داره رو مقدار دهی اولیه نکردین ؛ فراموش نکنین متغیرهای نگه دارنده مجموع و حاصلضرب همیشه
باید ابتدا مقدار دهی بشن و گرنه یه مقدار پیش فرض نامعلوم از حافظه داخل متغیر ذخیره میشه و این مقدار با مجموع یا حالا هر عملیاتی که روی متغیر انجام میدین ، ترکیب و ادغام میشه و این باعث میشه نتیجه
غلط بدست بیاد .
موفق باشید ./
واقعا ممنونم مدیر عزیز:قلب:
فقط یه سوالی من این یه قسمت رو متوجه نشدم
sum+=(1.0/i);
sum+= رو متوجه شدم چی هست ولی این یه قسمت رو 1.0/i رو نه !؟
الان مقدار اولیه sum =1 هست برای همین 1+(1.0/i) نکردید؟
ببخشید دیگه من تازه کارم
قسمت قرمز شده ، قبلا مقدار یک گرفته.
behroz1992
دوشنبه 18 مرداد 1389, 19:03 عصر
ممنونم دوستان عزیز
من این 1.0 اینو میگم چی هست؟
#include <iostream>
#include <conio>
int main(){
int n;
double sum=1;
cout<<"Enter n :\n";
cin>>n;
for(int i=2;i<=n;i++)
sum+=(1.0/i);
cout<<"Sum : "<<sum<<endl;
getch();
}
tdkhakpur
دوشنبه 18 مرداد 1389, 19:58 عصر
من این 1.0 اینو میگم چی هست؟
1.0 همان عدد 1 هست با این تفاوت که باعث میشه عدد حاصل از تقسیم اعشار باشه نه صحیح
(1.0/i) == حاصل عدد اعشار;
البته به شکل زیر هم میتوان نوشت
sum += (double)1/i;
Salar Ashgi
دوشنبه 18 مرداد 1389, 21:08 عصر
دوست عزیز behroz1992 (http://www.barnamenevis.org/forum/member.php?u=116933) ، همانطور که tdkhakpur (http://www.barnamenevis.org/forum/member.php?u=99732) عزیز بیان کردن ؛ چون به هنگام تقسیم عدد صحیح بر
صحیح همیشه قسمت اعشار حذف میشه ، ولی چون ما میخوایم نتیجه بشکل اعشاری باشه ، باید اینکارو
خودمون انجام بدیم :
روش اول) عملگر دات که همون ممیزه ، بنابراین وقتی مینویسم 1.0 بجای 1 ، کامپایلر اینو بعنوان یه عدد
اعشاری تفسیر میکنه و نتیجه میشه اعشاری .
روش دوم) Type Casting نام داره ؛ اگه بخوایم خودمون تبدیل نوع دستی رو انجام بدیم ، نوع مقصد رو داخل
پارانتز مینویسم ، مثل : (double) !
روشهای دیگه ای هم هست ، ولی این دوتا معمول ترین هستن .
اگه باز سوالی بود ، حتما بپرسین .
موفق و پیروز باشید ./
behroz1992
سه شنبه 19 مرداد 1389, 00:56 صبح
واقعا ممنونم
ممنون از مدیر عزیز و همچنین دوست عزیزtdkhakpur (http://www.barnamenevis.org/forum/member.php?u=99732):قلب:
vBulletin® v4.2.5, Copyright ©2000-1403, Jelsoft Enterprises Ltd.