PDA

View Full Version : نشان دادن 2 عدد و تبدیل آن به کسر



forogh68
جمعه 19 تیر 1394, 12:41 عصر
سلام دوستان.
می خوام برنامه ای بنویسم که 2 عدد صحیح رو بگیره و نسبت آنها رو به اعشاری بنویسه! این نسبت هم همیشه بزرگتر یا مساوی یک باشه.
منظورش اینه که 2 عدد رو بگیره و اون رو بصورت کسری نشون بده به طوری که عدد بزرگتر توی صورت کسر قرار بگیره!

من تا اینجا کار کردم روش! ولی a و b رو نشون میده! دقیقا نمی دونم چی رو به چی باید نسبت بدم! برای نشون دادن کسر در سی چیکار باید کنیم؟

int a,b;
cout << "insert number";
cin >> a >> b;

if (a>b)
cout << "a/b";
else if (a<b)
cout<< "b/a";

amirtork
جمعه 19 تیر 1394, 15:39 عصر
سلام.
مشکلی که در برنامه ی شما هست، این هست که شما a و b رو هم در "" قرار دادید! بنابراین std::cout هم 'a' و 'b' رو چاپ خواهد کرد و نه مقدار ذخیره شده در متغیر های a و b.
برای اینکه مقدار یک متغیر رو در C++‎‎ به وسیله ی cout چاپ کنید باید اون رو در خارج از "" قرار بدید. مثلا:

int myAge = 17;
cout<<"My age is"<<myAge;


در کد بالا، مقدار دخیره شده در متغیر myAge برابر 17 است. و خروجی برنامه برابر با : My age is 17 هست.

ehsan_faal
جمعه 19 تیر 1394, 15:45 عصر
شرطتون هم کامل نیست.در صورت تساوی دو عدد هم باید یکی از اون دو تا کسر چاپ بشن.

forogh68
جمعه 19 تیر 1394, 23:46 عصر
سلام.
مشکلی که در برنامه ی شما هست، این هست که شما a و b رو هم در "" قرار دادید! بنابراین std::cout هم 'a' و 'b' رو چاپ خواهد کرد و نه مقدار ذخیره شده در متغیر های a و b.
برای اینکه مقدار یک متغیر رو در C++‎‎‎ به وسیله ی cout چاپ کنید باید اون رو در خارج از "" قرار بدید. مثلا:

int myAge = 17;
cout<<"My age is"<<myAge;


در کد بالا، مقدار دخیره شده در متغیر myAge برابر 17 است. و خروجی برنامه برابر با : My age is 17 هست.

عذر خواهی می کنم سی++ این علامت رو "/" تقسیم حساب می کنه و کسری برام نشون نمی ده و میاد دو عدد رو تقسیم می کنه!


شرطتون هم کامل نیست.در صورت تساوی دو عدد هم باید یکی از اون دو تا کسر چاپ بشن.

بله. درسته ولی فعلا مشکل بالا ایجاد شده!

ehsan_faal
جمعه 19 تیر 1394, 23:59 عصر
برای نمایش اعشاری باید بدونید که تقسیمی که دو تا عملوندش int باشن یه int بر میگردونه.
اگه مقدار عددیش رو میخواید اینجوری بنویسید:

if(a>b)
cout<<a<<"/"<<b<<"="<<static_cast<double>(a)/b<<endl;
else if(b>a)
cout<<b<<"/"<<a<<"="<<static_cast<double>(b)/a<<endl;

amirtork
شنبه 20 تیر 1394, 00:04 صبح
عذر خواهی می کنم سی++ این علامت رو "/" تقسیم حساب می کنه و کسری برام نشون نمی ده و میاد دو عدد رو تقسیم می کنه!



بله. درسته ولی فعلا مشکل بالا ایجاد شده!
بله :-) سی پلاس پلاس به طور پیشفرض / رو به عنوان عملگر تقسیم میشناسه، اما همونطور هم که در بالا اشاره کردم، مشکل شما این هست که 'a' و 'b' رو هم در "" قرار دادید، / باید در "" قرار میگرفت، کاری به اون نداشتم.
کدی هم که جناب آقای ehsan_faal قرار دادن خیلی کامله، اما یه تیکه کوچیک در حد یک کاراکتر رو فراموش کردن قرار بدن که اون هم = هست، برای یکی از شرط های if در بالا در کنار > یا < یک = قرار بدید تا در صورت برابری دو متغیر هم، کسر رو نمایش بده.

ehsan_faal
شنبه 20 تیر 1394, 00:09 صبح
آخه خودشون گفتن توی این کد مساوی مشکلی ایجاد نمیکنه ،گفتم شاید میخوان حالت تساوی رو ignore کنن.
Thanks bro:تشویق:

forogh68
شنبه 20 تیر 1394, 00:25 صبح
برای نمایش اعشاری باید بدونید که تقسیمی که دو تا عملوندش int باشن یه int بر میگردونه.
اگه مقدار عددیش رو میخواید اینجوری بنویسید:

if(a>b)
cout<<a<<"/"<<b<<"="<<static_cast<double>(a)/b<<endl;
else if(b>a)
cout<<b<<"/"<<a<<"="<<static_cast<double>(b)/a<<endl;

بله سپاسگذارم از زحمت شما و اون دوست محترم دیگرمون.
عذر می خوام میشه در خصوص این تیکه <<static_cast<double> کمی توضیح بفرمایید؟

ehsan_faal
شنبه 20 تیر 1394, 00:34 صبح
متن کتاب دایتل:

static_cast<double>(a)
عملگر قالب ریزی ای است که نسخه ای موقتی از عملوند خود (a) را ایجاد میکند.
مقداری که در a ذخیره شده هنوزم هم یک int است اما نسخه double آن در این تقسیم استفاده میشود.