• 0

ما الفرق بين int main و void main في اللغة البرمجة c

سلام عليكم ورحمة الله وبركاته ...

ارجوكم ساعدوني في تحديد فرق ....بحت في عديد من مواضيع ولكن بدون جدوى

استادي دائم يوبخني بسبب عدم قدرتي على معرفة متى نكتب int او void :(

1 شخص أعجب بهذا

انشر على الشّبكات الاجتماعية


رابط هذه المساهمة
  • 4

اولا يجب ان نفهم اهمية جملة return بعدها سنوضح متى يمكن ان نستخدمها ضمن الدالة main

بشكل عام جملة return تعني بأن الدالة (دالة main او اي دالة اخرى) ستقوم بإرجاع متغير من نوع int (يمكن طبعا إرجاع اي نوع اخر من البيانات مثل bool, double وغيره)

- كمثال، لو كان لدينا دالة تقوم بجمع عددين، بالتالي فإن السلوك المتوقع من هذه الدالة هو ان تقوم بحساب ناتج عملية الجمع. هذا الناتج يمكن طباعته للمستخدم مباشرة

void add(int x, int b)
{
	int sum = x + b;
	count<<sum;
}

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

int add(int x, int b)
{
	int sum = x + b;
	return sum;
}

 الآن اصبح لدي كود متكامل استطيع استخدامه في اي برنامج اقوم بتطبيقه، كل ما علي هو ان استدعي الدالة واعطيها المتغيريين x ، y. ثم ستقوم هي بالعمليات الحسابية نيابية عني.

void main()
{
	int number1;
	int number2;
	cout<<"Enter first number:";
	cin>>number1;
	
	cout<<"Enter second number:";
	cin>>number2;

	int sum = add(number1, number2);

	cout<<"Sum = "<<sum;
}

الأن اصبح مفهوم return واضحا، اي بمعنى نقوم بإرجاع قيمة (int, double float, bool) عندما نحتاج فعليا لهذه القيمة.

السؤال الآن: متى نستخدم return مع الدالة main؟

الجواب: عندما نحتاج فعليا لهذه القيمة.

السؤال الآخر: متى نحتاج لهذه القيمة؟

الجواب: عندما نريد توصيف اكثر عن سلوك هذه الدالة، بمعنى عند حدوث شرط معين يمكن لهذه الدالة ان ترجع القيمة 0، وعند حدوث شرط اخر يمكن ان ترجع القيمة 1 وهكذا.

// This program will divide two number
// if the first number or second number is less than 0, then do not complete the method.
// if the second number is 0, do not complete the method
int main()
{
	int number1;
	int number2;
	cout<<"Enter first number:";
	cin>>number1;
	cout<<"Enter second number:";
	cin>>number2;
	
	if ( number1 < 0 )
         return -1; // do not complete the method and return -1 to the user, so he know number1 < 0
  
    if ( number2 < 0)
      	 return -2; // do not complete the method and return -2 to the user, so he know number2 < 0
  
  	if ( number2 == 0)
     	 return -3; // do not complete the method and return -3 to the user, so he know number2 == 0
  
  	return number1/number2; // data is correct, we can return the result

}

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

عندما يقوم شخص اخر باستخدام هذا الكود لاحقا، سوف يعرف بأنه اذا تم ارجاع القيمة -1 بالتالي فان العدد الاول سالب وهكذا.

 

 

عند استخدامنا للغة سي او سي بلس بلس، سنقوم غالبا في التحقق من قيمة عملية معينة (مثل فتح ملف) اذا كانت تساوي 0، فإن العملية ناجحة بدون اخطاء، لكن اذا كانت -1 مثلا فتعني ان الملف مفتوح مسبقا او غير موجود الى ما هنالك من الاحتمالات. مما يمكننا من كتابة البرامج بالشكل السليم، ضمن تحقق جميع الشروط اللازمة لذلك.

اخيراً: ستتضح جميع هذه المفاهيم مع كثرة الممارسة، لانه ضمن الامثلة البسيطة غالبا ستكون هذه المفاهيم عبىء علينا، لكن مع تقدمنا واستخدمنا لمفاهيم اعمق في البرمجة سنجد الحل في هذه المفاهيم التي كانت مزعجة يوماً ما.

 

بالتوفيق،،،

 

3 اشخاص أعجبوا بهذا

انشر على الشّبكات الاجتماعية


رابط هذه المساهمة
  • 1

عندما نكتب

int main()

فيجب كتابة 

return 0;

في البرنامج للدلالة على أن كل شيء تم على مايرام. كتابة اي قيمة غير 0 تدل على أن هناك خطأ ما.

بينما عند كتابة

void main()

فلا يجب كتابة

return 0; 

وعموما، ليس هناك فرق (كبير جدا). يفضل غالبا استخدام 

int main()
{
/* أكواد البرنامج*/
return 0;
}

 

1 شخص أعجب بهذا

انشر على الشّبكات الاجتماعية


رابط هذه المساهمة
  • 0

بالاضافة لما قاله الأخ جهاد

الدوال في لغات البرمجة بشكل عام فيما يتعلق بهذه النقطة نوعان

دالة تعيد قيمة

ودالة لا تعيد قيمة

قبل فهم الفرق بينهما يجب عليك معرفة تكوين الدالة نفسها.. كيف تكتب الدالة من الاساس

public void AddNumbers(int FirstNumber , int SecondNumber)
{

}

هذا يسمى method Signature وهو مكون من خمس اقسام رئيسية:

  1. محدد الوصول للدالة (عام او خاص)  ويكون اما publicاو private او protected او لا نكتب محدد وصول..الرائج للطلبة في بداية تعلمهم public والفرق بين الانواع السابقة يحتاج الى شرح مستقل
  2. نوع الدالة وهنا محور سؤالك تعيد قيمة او لا تعيد قيمة.. في حال كانت لا تعيد قيمة نستخدم الكلمة المحجوزة void وفي هذه الحالة لا نستخدم الكلمة المحجوزة return من الممكن استبدالها مثلا بجملةطباعة عادية كما في لغة جافا
    public void AddNumbers(int FirstNumber , int SecondNumber)
    {
    System.out.print(FirstNumber + SecondNumber)
    
    }
    إما اذا كانت تعيد قيمة.. نستخدم نفس نوع البيانات التي تعيدها الدالة،بمعنى اذا كانت الدالة تجمع رقمين، بالتالي نتيجة تنفيذ الدالة هو رقم (حاصل الجمع) ، وبالتالي نوع الدالة سيكون احد الانواع المستخدمة للتعبير عن الارقام (int , float m double ) على حسب .. وفي هذه الحالة يجب عليك مع الدوال التي تعيد قيمة ان نستخدم الكلمة المحجوزة return مرفق بعدها القيمة التي تمت اعادتها
    public int AddNumbers(int FirstNumber , int SecondNumber)
    {
      return (FirstNumber + SecondNumber);
    
    }

     

  3. الجزء الثالث هو اسم الدالة، وهو اسم اختياري غير اجباري، الشائع ان يكون اسم الدالة له علاقة بمضمون الدالة نفسها، بمعنى اذا الدالة تجمع رقمين، الافضل تسميتها AddNumbers واذا ترح رقمين SubNumbers وهكذا...
  4. الجزء الرابع الباراميترز وهي القيم الممررة للدالة ونضعها بين أقواس()
  5. الجزء الخامس جسم الدالة نفسه ونضعه بين قوسي بداية ونهاية {}

أتمنى أن أكون  وفقت في شرح الفرق والتوضيح

1 شخص أعجب بهذا

انشر على الشّبكات الاجتماعية


رابط هذه المساهمة

يجب أن تكون عضوًا لدينا لتتمكّن من التعليق

انشاء حساب جديد

يستغرق التسجيل بضع ثوان فقط


سجّل حسابًا جديدًا

تسجيل الدخول

تملك حسابا مسجّلا بالفعل؟


سجّل دخولك الآن