الفريق العربي للبرمجةأرشيف المنتديات · 2000 – 2023
نسخة أرشيفية للقراءة فقط — التسجيل والمشاركة مغلقان، والمحتوى محفوظ كما كان.

مشكلة مع دالة round في مكتبة cmath

مغلقمُجاب
بدأه eng.ahmadshalabi في 7 يناير 2014 · 10 رد · 2,330 مشاهدة · في الأسئلة المجابة
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع
السلام عليكم ورحمة الله وبركاته

واجهتني مشكلة اثناء استخدام دالة round في مكتبة cmath ، الا وهي عدم تعرف الفيجوال استيدو 2010 على هذه الدالة

 

كما هو موضح في هذه الصورة

​

post-280347-0-33053600-1389111092_thumb.

#2 أفضل إجابة

, و عليكم السلام 

ايعاز round هو من بيئة .NET و ليست موجودة في مكتبة math 
في هذا الرابط جميع الايعازات الموجودة ضمن مكتبة math.h  
http://msdn.microsoft.com/en-us/library/7wsh95e5%28VS.80,loband%29.aspx

 

يمكنك بناء الدالة بنفسك بهذه الطريقة 

int round(float a){return a+0.5;}

تم تعديل هذه المشاركة بواسطة ausama0 في 7 يناير 2014 في 20:43

2
#3

لم افهم من ماذا اعمل بالرابط يلي وضعته..

ملاحظة:- الدالة يلي وضعتها تقرب للرقم الاعلى مو لاقرب رقم.

وشكرا
 

تم تعديل هذه المشاركة بواسطة eng.ahmadshalabi في 7 يناير 2014 في 23:03

1
#4

من الرابط يكمنك ان ترى جميع الايعازات الموجودة في مكتبة math و تلاحظ ان انه لا يوجد ايعاز باسم round في المكتبة 

و الكود يقرب لاقرب عدد و ليس لاكبر رقم. جربها  :)

1
#5

أخى العزيز لعلك تقصد الدالة ceil فهى تقوم بتقريب الاعداد العشرية إلى أقرب رقم صحيح للاعلى.

فمثلا إذا كان العدد العشرى 12.1 فسوف تقربة إلى الرقم الصحيح 13, وشكلها كالاتى:

double ceil (double x);

ويوجد أيضا الدالة floor تقوم أيضا بتقريب الاعداد العشرية إلى أقرب رقم صحيح للاسفل.

فمثلا إذا كان لدينا العدد 12.9 فسوف تقربة إلى الرقم الصحيح 12, وشكلها كالاتى:

double floor (double x);

بالتوفيق .........

1

||||||||||||||||||||||||||||||||||||


||||||||||||||||||||||||||||||||||||


egypt_coa.gif


||||||||||||||||||||||||||||||||||||


||||||||||||||||||||||||||||||||||||

#6

الدالة round الموجودة بالمشاركة رقم 2 لابد ان تعيد float و ليس int ليتم إعادة قيمة عشرية مقربة و ليس أقرب عدد صحيح، لتصبح كالتالي:

float round(float value){    return value + 0.5f;}

و الله ولي التوفيق

تم تعديل هذه المشاركة بواسطة C++er في 8 يناير 2014 في 13:07

1

مدونتي: C++ Tips and Tricks

#7

شكرا لكم ، وصل المطلوب

#8
C++er كتب:

الدالة round الموجودة بالمشاركة رقم 2 لابد ان تعيد float و ليس int ليتم إعادة قيمة عشرية مقربة و ليس أقرب عدد صحيح، لتصبح كالتالي:

float round(float value){    return value + 0.5f;}

و الله ولي التوفيق

اخ c++er جربت الكود و ارجع لي القيمة المدخلة نفسها +0.5 ؟؟؟ :mellow:

#9
C++er كتب:

الدالة round الموجودة بالمشاركة رقم 2 لابد ان تعيد float و ليس int ليتم إعادة قيمة عشرية مقربة و ليس أقرب عدد صحيح، لتصبح كالتالي:

float round(float value){    return value + 0.5f;}

و الله ولي التوفيق

 

اخي الدالة هنا تزيد 0.5 

 

 

ausama0 كتب:
int round(float a){return a+0.5;}

 

 

اما هذه الدالة فتفي بالمطلوب وتقرب لاقرب عدد، ولكن الكومبايلر بعطي بعض التحذيرات

فجربت ما يلي 

int round(double a){return static_cast<int>(a+0.5);}

لي طلب اخير 

في ما مضى كان اعتمادي على موقع cplusplus في معرفة كيفية استخدام المكتبات ولكن تبين انه خالط الدوال في بيئة الدوت نت مع ال standard.

 

اريد مجموعة مراجع تبين الدوال الموجودة في مكتبات ال standadrd و شرح استخدامها

تم تعديل هذه المشاركة بواسطة eng.ahmadshalabi في 8 يناير 2014 في 19:00

#10
اقتباس
اخ c++er جربت الكود و ارجع لي القيمة المدخلة نفسها +0.5 ؟؟؟ :mellow:
اقتباس
اخي الدالة هنا تزيد 0.5

نسيت وضع floor، الكود كالتالي:

float round(float value){    return floor(value + 0.5f);}

توجد نسخ عديدة من هذه الدالة فى هذا الموضوع.

 

اقتباس
اما هذه الدالة فتفي بالمطلوب وتقرب لاقرب عدد، ولكن الكومبايلر بعطي بعض التحذيرات

التحويل لـ int يغنى عن إستخدام floor و لكن تظهر مشكلتين أولهم دقة القيمه حيث ان مدى الأرقام الذى يمكن تمثيله بأ float اعلي كثيرا من int و بالتالي ناتج التحويل سيكون صحيح فقط إذا كانت القيمه فى مدى int و المشكلة الثانية فى عملية التحويل من float لـ int ثم لـ float مرة أخرى.

 

اقتباس
اريد مجموعة مراجع تبين الدوال الموجودة في مكتبات ال standadrd و شرح استخدامها

إستخدم cppreference للغتين C++/C بكل إصداراتهم.

 

 

و الله ولي التوفيق.

تم تعديل هذه المشاركة بواسطة C++er في 8 يناير 2014 في 21:21

1

مدونتي: C++ Tips and Tricks

#11

شكرا لكل من  ausama0 و مستر برمجة و C++er.
الرجاء غلق الموضوع

تم تعديل هذه المشاركة بواسطة eng.ahmadshalabi في 8 يناير 2014 في 23:18

هذا الموضوع مغلق.

مواضيع مشابهة