اذهب إلى المحتوى
  • 0

دالة isNaN في c++ ماهي وكيف تنفذ ؟

عبد المالك لعور

السؤال

كيف انفذا هذا الكود بلغة c++

بواسطة الحلقة 

do while

أريد كتابة كود يجبر المستخدم على إدخال رقم إيجابي (أي أكبر من صفر) و من ثم قم بطباعة الرقم الذي أدخله. 

مع التحقق اذا كان المدخل عدد فقط اي لا يقبل الحروف

هل الكود التالي صحيح؟

var n;

do

{

write("Enter a positive number: ");

n = read();

}

while (n<=0 || isNaN(n));

write("Number " + n + " is accepted.");

رابط هذا التعليق
شارك على الشبكات الإجتماعية

Recommended Posts

  • 0

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

في c++ هناك نمط للمتغيرات، و بالتالي من غير الممكن إدخال سلسلة نصية مثلاً إلى رقم.

و بالتالي للقيام بذلك يجب عليك إدخال سلسلة نصية و من ثم اختبار فيما إذا كانت تحوي أرقاماً فقط أم يوجد أحرف.

بعد إدخال هذه السلسلة النصية يمكنك المرور على محارفها و اختبار كل محرف فيما إذا كان أكبر أو يساوي المحرف '0' و أصغر أو يساوي المحرف '9' و بذلك تكون قد اختبرت أن السلسلة تمثل رقم و يمكنك تحويلها إلى عدد صحيح، هذا أيضاً يضمن أنه غير سالب لأن العدد السالب يحوي الرمز - و نحن نختبر أن السلسلة تحوي فقط أرقام.

يمكنك القيام بتحويل سلسلة إلى عدد عن  طريق:

std::stoi( str )

حيث str تمثل السلسلة المراد تحويلها.

حاول القيام بهذه الخطوات و شاركنا محاولاتك في حال لم ينجح الأمر.

أما من أجل السؤال ما هي isNaN في c++ فلا يوجد هكذا دالة، و هكذا اختبار يمكننا القيام به كما سبق و أخبرتك.

تحياتي.

رابط هذا التعليق
شارك على الشبكات الإجتماعية

  • 0

عليك أن تنتبه إلى  أن الدالة isNaN() غير موجودة في C++، والدالة isNaN() هي دالة في JavaScript، وليس في C++.

ولتحديد ما إذا كان الرقم الذي أدخله المستخدم هو قيمة غير صالحة في C++، فعليك بالإعتماد على مكتبات iostream و limits التي تحتوي على وظائف الإدخال والإخراج وتعريفات مثل numeric_limits للتحقق من الخصائص العددية.

ثم كتابة دالة main() التي تعد نقطة البداية في البرنامج. تقوم بتعريف متغير "n" من النوع double لتخزين العدد الذي سيدخله المستخدم.

ويُطلب من المستخدم إدخال عدد من خلال استخدام std::cout و std::cin. std::cout يُستخدم لإخراج رسالة للمستخدم ليدخل العدد المطلوب.

ثم نستخدم الحلقة while(true) لتكرار المطالبة بإدخال العدد حتى يُدخل المستخدم عددًا صحيحًا إيجابيًا.

داخل الحلقة، استخدم std::cin للتحقق من الإدخال الصحيح، وذلك بوضع std::cin في شرط if للتحقق من نجاح القراءة، وإذا نجحت القراءة، نتحقق مما إذا كان العدد المُدخل (n) أكبر من الصفر، وفي حال إذا كذلك، فإننا نخرج من الحلقة باستخدام break ويكون الإدخال صحيحًا وإيجابيًا.

وإذا كان لدينا إدخال غير صحيح (مثل إدخال حرف) أو كان العدد أقل من أو يساوي الصفر، يُطلب من المستخدم إعادة المحاولة من خلال طباعة رسالة "Invalid input. Please enter a positive number: ".

ثم معالجة الخطأ بوضع std::cin في حالة خطأ باستخدام std::cin.clear() ومسح المحتوى السابق المدخل بواسطة std::cin.ignore().

وعندما يُدخل المستخدم عددًا صحيحًا إيجابيًا، سنخرج من الحلقة ونطبع الرقم المدخل بواسطة std::cout.

وفي النهاية يُعيد البرنامج 0 كرمز للخروج من البرنامج بنجاح.

وإليك مثال:

#include <iostream>
#include <limits>

int main() {
  double n;
  std::cout << "Enter a positive number: ";

  while (true) {
    if (std::cin >> n) {
      if (n > 0) {
        break; // المدخل صحيح وإيجابي، نخرج من الحلقة
      } else {
        std::cout << "Invalid input. Please enter a positive number: ";
      }
    } else {
      std::cout << "Invalid input. Please enter a number: ";
      std::cin.clear();
      std::cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n');
    }
  }

  std::cout << "The number is: " << n << std::endl;

  return 0;
}
رابط هذا التعليق
شارك على الشبكات الإجتماعية

  • 0

دالة isnan ( وليس isNaN ) في لغة السي بلس بلس هي دالة تستخدم لفحص ما إذا كان القيمة الممررة إليها هي عدد أو لا. وتعيد الدالة قيمة منطقية (true أو false) تشير إلى ما إذا كانت القيمة عددًا أو لا.

لتنفيذ دالة isNaN، يمكن استخدام الدالة std::isnan التي تأتي مع مكتبة cmath في لغة السي بلس بلس. ويمكن استخدام هذه الدالة للتحقق مما إذا كانت القيمة الممررة إليها هي عدد أو لا.

وهنا مثال على استخدام دالة isNaN في لغة السي بلس بلس:

#include <iostream>
#include <cmath>

int main()
{
    double x = 5.0;
    double y = std::sqrt(-1.0);

    if (std::isnan(x)) {
        std::cout << "x is not a number" << std::endl;
    } else {
        std::cout << "x is a number" << std::endl;
    }

    if (std::isnan(y)) {
        std::cout << "y is not a number" << std::endl;
    } else {
        std::cout << "y is a number" << std::endl;
    }

    return 0;
}

هذا المثال يستخدم دالة std::isnan للتحقق مما إذا كانت قيمتي x و y هما عدد أم لا. تم تعيين x إلى 5.0 و y إلى جذر سالب واحد. تُطبع النتيجة لكل قيمة باستخدام std::cout.

في هذا المثال، ستخرج النتيجة "x is a number" لأن x هو عدد. وستخرج النتيجة "y is not a number" لأن y ليست عددًا (جذر سالب واحد).

رابط هذا التعليق
شارك على الشبكات الإجتماعية

  • 0

الكود الذي قدمته هو كود لغة برمجة جافاسكريبت، ولكن السؤال يطلب كيفية تنفيذ نفس الفكرة باستخدام اللغة C++ مع الحلقة do while.

إليك كيفية تنفيذ هذا الكود بلغة C++ باستخدام الحلقة do while:

#include <iostream>
#include <string>
#include <sstream>

int main() {
    int n;
    std::string input;

    do {
        std::cout << "Enter a positive number: ";
        std::getline(std::cin, input);
        std::stringstream ss(input);
        
        if (ss >> n && n > 0) {
            break; // الخروج من الحلقة إذا تم إدخال عدد إيجابي صحيح
        }
        std::cout << "Invalid input. Please enter a positive number." << std::endl;
    } while (true);

    std::cout << "Number " << n << " is accepted." << std::endl;

    return 0;
}
  1. #include <iostream> و #include <string> و #include <sstream> تستخدم لتضمين المكتبات اللازمة لاستخدام الإدخال والإخراج ومعالجة السلاسل.
  2. int n; تعرف متغيرًا صحيحًا لتخزين الرقم المدخل.
  3. std::string input; تعرف سلسلة لتخزين المدخل الذي يتم قراءته كنص.
  4. يتم استخدام الحلقة do while لإجبار المستخدم على إدخال رقم إيجابي.
  5. يتم استخدام std::getline(std::cin, input) لقراءة المدخل كسلسلة.
  6. يتم استخدام std::stringstream للتحقق مما إذا كان المدخل يمثل رقمًا صحيحًا أم لا.
  7. إذا كان المدخل صحيحًا وإيجابيًا، يتم الخروج من الحلقة وطباعة الرقم الذي تم إدخاله. إذا كان المدخل غير صحيح، يتم طباعة رسالة خطأ ويتم تكرار الحلقة لإعادة إدخال القيمة.

 

رابط هذا التعليق
شارك على الشبكات الإجتماعية

انضم إلى النقاش

يمكنك أن تنشر الآن وتسجل لاحقًا. إذا كان لديك حساب، فسجل الدخول الآن لتنشر باسم حسابك.

زائر
أجب على هذا السؤال...

×   لقد أضفت محتوى بخط أو تنسيق مختلف.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   جرى استعادة المحتوى السابق..   امسح المحرر

×   You cannot paste images directly. Upload or insert images from URL.

  • إعلانات

  • تابعنا على



×
×
  • أضف...