PDA

View Full Version : اضافه کردن عدد بعد از ممیز C++



iran-question
شنبه 08 بهمن 1390, 11:45 صبح
سلام
من می خواهم یک برنامه بنویسم که یک عدد را بگیرد بعد مثلا در سومین کاراکتر بعد از ممیز عدد یک قرار بدهد یعنی مثلا کد من 0 هست حالا این را تبدیل به 0.001 .
همچنین عدد ساخته شده مثلا 0.001 را تبدیل به عدد مبنای 10 بکند.
با تشکر

shahmohammadi
شنبه 08 بهمن 1390, 18:05 عصر
سلام.
عدد رو نگفتید که در چه مبنایی می خواهید بگیرید. 0.001 در همه مبنا ها هست.
من یک مثال در مبنای ده می زنم: یه راه سادش اینه که بیاید با 0.001 جمعش کنید. مثلا اگه 5.28 رو از کار بر گرفتید باید با 0.001 جمع کنید تا حاصل بشه 5.281 .

برنامه زیر عدد اعشاری a رو می گیره بعد عدد صحیح b رو (هر چند رقمی که می خاد باشه) از کاربر می گیره و عدد b رو از رقم n به بعد (ارقام اعشاری) عدد a قرار میده:
#include <conio.h>
#include <stdio.h>
#include <math.h>

int main()
{
float a,b,n,p;

printf("\n Hello\n Pleaz Enter a float number: ");
scanf("%f",&a);
printf(" Enter an integer number: ");
scanf("%f",&b);
printf(" from which floating point number I\nadd the seccons number to number one:");
scanf("%f",&n);

while(b>9)
{
b/=10;
}
p=pow(10,n);
b/=p;

printf("_______________\nHere is the result: %f",b+a);

getch();
return 0;
}حلقه وایل رو به این دلیل نوشتم که ممکنه عدد b چند رقمی باشه (بیشتر از 10). مثلا اگه عدد b=36 باشه و ما بخواهیم از رقم سوم به بعد اضافه کنیم باید a رو با 0.0036 جمع کنیم. پس بی رو به وسیله وایل باید برابر با 3.6 کنیم تا در تقسیم b/=p; حاصل 0.036 نشه.

اگر خواستید مثلا برای عدد مبنای 4 بنویسید باید به جای 10 در عبارت p=pow(10,n); عدد 4 رو بنویسید. و بقیه اعداد رو هم در اون مبنا نشون بدید.

iran-question
شنبه 08 بهمن 1390, 19:31 عصر
سلام
آقا دستتون دردنکنه اما بگذارید بهتر باز کنم:
من برنامه ای می خواهم که کلا الگوریتمش همچین چیزی هست در حالاتی اعداد مبنای 2 را مداما بعد از ممیز بهش با توجه به حالت برنامه مثلا یکبار در اولین بیت بعد از ممیز 1 می گذارید مثلا این 0.1 یا ممکن است یکبار 0.001 بشود یا 0.0101 یا هر چیز دیگر
بعد این عدد مثلا 0.0101 را در مبنای 10 می برد و با یک عددی مقایسه می کند بزرگتر از آن عدد بود آخرین بیت را تبدیل به 0 می کند یعنی عدد بالا می شود 0.0101
با تشکر

shahmohammadi
شنبه 08 بهمن 1390, 21:46 عصر
در این مورد نیازی نیست که از تبدیل مبنا استفاده کنیم. به این دلیل که اعدادی که ما به صورت 10تایی در متغیر ها می ذاریم خودشون به صورت باینری ذخیره می شند. در واقع متغیر ها باینری هستند که ما اونها رو به صورت دسیمال می بینیم.(به طور خلاصه یعنی با بیت هاش کار می کنیم.)
برنامه زیر رو با تغییر برنامه بالا نوشتم. هر وقت که برنامه خواست به ادامه بیت ها عدد اضافه کنه دستورات مشخص شده رو اجرا می کنه. و هر موقع هم که خواستید، می تونید به صورت ده تایی در نظرش بگیرید:(a عدد مورد نظر هست)
#include <conio.h>
#include <stdio.h>
#include <math.h>

int main()
{
float a=0,b,n=0,p;

//...
//در حالتی که بخواهیم رقمی را به عدد اضافه کنیم{
printf("Enter 0 or 1 to the end of binary number: ");
scanf("%f",&b);
n++;
p=pow(2,n);
b/=p;
a+=b;
//}...


printf("_______________\nHere is the result: %f",a);

getch();
return 0;
}