بلال قدور نشر 7 مارس أرسل تقرير نشر 7 مارس #include <iostream> using namespace std; int main() { float Seconds; float remender; cout << "Enter Number Seconds: \n"; cin >> Seconds; int secperD = 24 * 60 * 60; int secperH = 60 * 6; int secperM = 60; int NumOfD = floor(Seconds / secperD); remender = Seconds % secperD; int NumOfH = floor(remender / secperH); remender = Seconds % secperH; int NumOfM = floor(remender / secperM); remender = Seconds % secperM; int NumOfS = remender; } ما الخطأ هنا في عملية (%) لأنه يظهر خطأ في البرنامج فيها 3 اقتباس
0 ياسر مسكين نشر 7 مارس أرسل تقرير نشر 7 مارس الخطأ في عملية القسمة بالباقي (%) يكمن في الطريقة التي تقوم فيها بتحديث الباقي (remainder) في كل مرة، لهذا يجب استخدام الباقي من العملية السابقة بدلا من قيمة الثواني الأصلية (Seconds). ففي هذا الكود يجب تحديث الباقي بناء على القيمة المحسوبة في الخطوة السابقة، وليس القيمة الأصلية للثواني بهذا الشكل: #include <iostream> #include <cmath> // لاستخدام floor using namespace std; int main() { float Seconds; float remender; cout << "Enter Number Seconds: \n"; cin >> Seconds; int secperD = 24 * 60 * 60; int secperH = 60 * 60; int secperM = 60; int NumOfD = floor(Seconds / secperD); remender = fmod(Seconds, secperD); int NumOfH = floor(remender / secperH); remender = fmod(remender, secperH); int NumOfM = floor(remender / secperM); remender = fmod(remender, secperM); int NumOfS = remender; cout << "Days: " << NumOfD << endl; cout << "Hours: " << NumOfH << endl; cout << "Minutes: " << NumOfM << endl; cout << "Seconds: " << NumOfS << endl; return 0; } هنا قمت باستخدام دالة `fmod` بدلاً من عامل `%` للقسمة بالباقي، إن لم تتضح يمكنني التفصيل أكثر في شرح المثال. اقتباس
0 محمد عاطف17 نشر 7 مارس أرسل تقرير نشر 7 مارس ان ال remainder او باقى القسمة لا يمكن ان يتم على متغير من نوع float او double بل يجب ان يكون المتغيران من نوع int لانه يسمى باقى القسمة فليس له اى معنى لقسمة متغيرات من نوع float او double. وايضا يجب جعل المتغير Seconds من نوع int حيث لا توجد ثوانى بكسور اى لا يمكن مثلا ان يدخل المستخدم 60.5 . فيمكنك تغير نوع المتغير او عمل TYPECASTING للمتغير هكذا #include <iostream> #include <cmath> using namespace std; int main() { float Seconds; float remender; cout << "Enter Number Seconds: \n"; cin >> Seconds; int secperD = 24 * 60 * 60; int secperH = 60 * 6; int secperM = 60; int NumOfD = floor(Seconds / secperD); remender = (int) Seconds % secperD; int NumOfH = floor(remender / secperH); remender = (int) Seconds % secperH; int NumOfM = floor(remender / secperM); remender = (int) Seconds % secperM; int NumOfS = remender; } وايضا يوجد خطأ لديك حيث لم تقم بعمل include لمكتبة cmath وهى ضرورية لاستخدام الدالة floor اقتباس
0 Mustafa Suleiman نشر 7 مارس أرسل تقرير نشر 7 مارس أولاً الدالة floor غير موجودة في مكتبة C++ الأساسية وعليك تعريفها بواسطة <cmath>. أيضًا أنت تستخدم عامل modulo (%) مع نوع float على الجانب الأيسر وأنواع int على الجانب الأيمن، وذلك غير صحيح لأن عامل modulo يتطلب أن يكون كلا الجانبين من نوع integer، أي تحويل المتغير Seconds إلى int قبل العملية. ويوجد قوس مغلق (}) ناقص في نهاية دالة main. لذا الكود الصحيح هو: #include <iostream> #include <cmath> using namespace std; int main() { float Seconds; float remender; cout << "Enter Number Seconds: \n"; cin >> Seconds; int secperD = 24 * 60 * 60; int secperH = 60 * 60; int secperM = 60; int NumOfD = floor(Seconds / secperD); remender = static_cast<int>(Seconds) % secperD; int NumOfH = floor(static_cast<int>(remender) / secperH); remender = static_cast<int>(remender) % secperH; int NumOfM = floor(static_cast<int>(remender) / secperM); remender = static_cast<int>(remender) % secperM; int NumOfS = remender; cout << "Number of Days: " << NumOfD << endl; cout << "Number of Hours: " << NumOfH << endl; cout << "Number of Minutes: " << NumOfM << endl; cout << "Number of Seconds: " << NumOfS << endl; return 0; } اقتباس
السؤال
بلال قدور
ما الخطأ هنا في عملية (%) لأنه يظهر خطأ في البرنامج فيها
3 أجوبة على هذا السؤال
Recommended Posts
انضم إلى النقاش
يمكنك أن تنشر الآن وتسجل لاحقًا. إذا كان لديك حساب، فسجل الدخول الآن لتنشر باسم حسابك.