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

السؤال

نشر

  

#include <iostream>
using namespace std;
int minpositive(int nums[], int size){
    int check = 50;
    for(int i = 0; i < size; i++){
        if(nums[i] > 0 && check > nums[i]){
            check = nums[i];
    }
}
//return check;
}
int main(){
  int numbers[] = { -10, -20, 15, 100, 10, 5, -50, 0 }; // 5
  int numssize = sizeof(numbers) / sizeof(numbers[0]);
  cout << minpositive(numbers, numssize) << "\n";
  return 0;
}

لما بعمل كومنت لل  return بيطلع رقم 8 اللي هو عدد العناصر في ال array ممكن اعرف العملية دي تمت ازاي؟ 

ولو نفس ال function بس انا مش عارف الارقام ازاي اجيب اصغر واحد بطريقة dynamic؟

Recommended Posts

  • 1
نشر

اولا اذا قمت بعمل comment لسطر ال return فى الدالة minpositive فان الكود لن يعمل وسيظهر لك خطأ لانك قد قمت بتعريف الدالة minpositive انها تقوم بارجاع رقم int و فى داخل الدالة لا تقوم بارجاع اى قيمة لذا سيظهر لك خطأ .

ثانيا لتقوم بارجاع القيمة بطريقة dynamic لتقم باستخدام هذا الكود 

int minpositive(int nums[], int size) {
    int check = nums[0];
    for (int i = 0; i < size; i++) {
        if (nums[i] > 0 && abs(check) >  nums[i]) {
            check = nums[i];
        }
    }
    if (check < 0) return 0;
    return check;
}
  • اولا نقم بتعريف المتغير check باول قيمة فى المصفوفة (array) لانك اذا لم تقم بذلك سيحدث خطأ لنفترض انك قمت بتعريف check لياخذ قيمة 1 و ان ال array لا تحتوى على عنصر رقم 1 وان اصغر قيمة هى مثلا 5 كما فى المثال الخاص بكم ستجد ان القيمة التى سيتم ارجاعها من هذه الدالة هى 1 وهذا خطأ لذلك قمنا باخذ اول قيمة فى المصفوفة
  • ثانيا ستجد انى قمت باضافة abs(check) بدلا من check لان اول قيمة فى المصفوفة من الممكن ان تكون سالبة لذلك ستكون اصغر من اى قيمة موجبة اخرى ولن يتحقق الشرط لذلك قمنا باضافة ذلك.
  • اخيرا ستجدنى قمت باضافة هذا السطر if (check < 0) return 0; لانه فى حالة ان المصفوفة كانت جميعها ارقام سالبة فيجب ان يقوم بارجاع 0
  • 0
نشر

في الكود الخاص بك، تحتاج إلى إعادة تعليق return لأنه تم تعليقه حاليًا. دون عبارة return، فإن الدالة minpositive لا تقوم بإرجاع أي قيمة، وبالتالي فإن القيمة التي يتم طباعتها في main() لن تكون محددة، وستعرض قيمة عشوائية من الذاكرة.

لحل هذه المشكلة والحصول على أصغر عنصر موجب في المصفوفة، يمكنك استخدام قيمة افتراضية تمثل أصغر عدد ممكن، ثم تحديث هذه القيمة أثناء المرور عبر المصفوفة. في حالة عدم وجود عناصر موجبة في المصفوفة، يمكنك إعادة هذه القيمة الافتراضية كنتيجة.

الكود الخاص بك بعد التعديل 
 

#include <iostream>
using namespace std;

int minpositive(int nums[], int size) {
    int check = 1; // قيمة افتراضية تمثل أصغر عدد ممكن
    for (int i = 0; i < size; i++) {
        if (nums[i] > 0 && check > nums[i]) {
            check = nums[i];
        }
    }
    return check;
}

int main() {
    int numbers[] = { -10, -20, 15, 100, 10, 5, -50, 0 }; // 5
    int numssize = sizeof(numbers) / sizeof(numbers[0]);
    cout << minpositive(numbers, numssize) << "\n";
    return 0;
}

 

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

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

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

×   لقد أضفت محتوى بخط أو تنسيق مختلف.   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.

  • إعلانات

  • تابعنا على



×
×
  • أضف...