• 0
! عبدالله !

ما الفرق بين التعريف Int والتعريف Void للدالة Main ....؟

سؤال

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

كيف احلكم اخواني ... اولاً احب ان ابشركم انه بفضل من الله ثم بردودكم ومساعداتكم وجهودكم في هذا المنتدى ... تجاوزت اصعب مرحلة بالنسبة لي وهي فهم المؤشرات ...

يعني صرت افهم فيها شوي الحين :wacko: وان شاء الله مع الأيام كل شيء يسهـل .. مع كثرة التمارين ...

سؤالي اليوم اللي ما فهمت ايضاً شرح الكتاب اللي ادرس منه ولا شرح بعض المواضيع وهو ...

لماذا بعض امرات يتم استخدام التعريف int وهذا معناتها ( حسب فهمي ) انه يرجع قيمة صحيحة ...

وبعض المرات يستخدم التعريف void .....؟

ما فائدة هذا التعريف ومتى يتم استخدامه ولماذا ... مع ذكر بعض الأمثلة اللي تفيد او تبين اهميته للاستخدام ...

وجزاكم الله خير الجزاء ...

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه

21 إجابة على هذا السؤال .

  • 0

void تكون لدالة لا ترجع شئ يعنى تكون عبارة عن procedure or subroutine يعنى بعض الاجراءات فقط

مثلا الدالة swap التى وضعتها لك فى موضوع المؤشرات هذه void لأنها لا ترجع شئ

لكن انظر للمثال التالى

انسخ الكود
  1.  
  2. double add(double x, double y)
  3. {
  4. double sum ;
  5. sum = x + y;
  6. return sum;
  7. }
  8.  

هذه ليست void لأنها ترجع قيمة

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
  • 0

طيب في الدوال دائماً تكون هنالك قيمة وحدة معادة فقط ....

هل يمكن ان اعيد اكثر من قيمة من اكثر من متغير في دالة واحدة ....؟

وبعض الأمثلة تكون هنالك دالة نوعها void ( غير الـ main ) ...

طيب بما ان الدالة من نوع void لا ترجع شيء لماذا يتم استخدامهـا ؟؟؟

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
  • 0
طيب بما ان الدالة من نوع void لا ترجع شيء لماذا يتم استخدامهـا ؟؟؟

ممكن تكون الدالة مش حسابية ... زى swap . تساوى فى بقية اللغات subroutine او procedure

ممكن تعيد اكتر من متغير لو مثلا استخدمت if او switch ... يعنى فى كل حالة يرجع حاجة مختلفة

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
  • 0

الأخ يسأل عن معنى int و void في الدالة main و ليس غيرها على حسب عنوانه .

الدالة main من دون سبقها بشيء تكون int (الحالة الإفتراضية)و في الأخير نكتب return 0 حيث 0 يدل على إنتهاء البرنامج بنجاح غير ذلك يوجد خطأ في البرنامج و 0 يرجع للنظام حتى تعرف حالة إنتهاء البرنامج أما لو سبقنا الدالة main ب void فإن النظام لن يعرف حالة إنتهاء البرنامج .

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
  • 0

الأخ يسأل عن معنى int و void في الدالة main و ليس غيرها على حسب عنوانه .
الدالة main من دون سبقها بشيء تكون int (الحالة الإفتراضية)و في الأخير نكتب return 0 حيث 0 يدل على إنتهاء البرنامج بنجاح غير ذلك يوجد خطأ في البرنامج و 0 يرجع للنظام حتى تعرف حالة إنتهاء البرنامج أما لو سبقنا الدالة main ب void فإن النظام لن يعرف حالة إنتهاء البرنامج .

هذا ما كنت اريده .. جزاك الله خير الجزاء انت واخونا العزيز عمر ، والآن وضحت الفكرة والفرق بينهم بكل وضوح ...

لكـــــــــــــــــن

ما الهدف من عدم معرفة النظام بانتهــاء البرنامج ......؟

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
  • 0
ما الهدف من عدم معرفة النظام بانتهــاء البرنامج ......؟

أولا هذا السؤال خارج نطاق لغة ++C بحد ذاته !

--------------

ثانياً القيمة المرجعة من main يتم وضعها في باراميتر الـExitStatus الخاص بروتين اغلاق الـProcess ...

في أنظمة NT يحدد الـExitStatus بعض الاشياء (كأن يكون البرنامج تحت التنقيح debuggee) .

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
  • 0

بما انه خارج نطاق اللغة .. يعني لا عيب في عدم معرفته ^^ .. خاصة ان كنت ادرس السي++ ..

وجزاك الله خير اخوي على التوضيح ..

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
  • 0
هل يمكن ان اعيد اكثر من قيمة من اكثر من متغير في دالة واحدة ....؟

بالطبع يمكن بأستخدام ال & .

وبعض الأمثلة تكون هنالك دالة نوعها void ( غير الـ main ) ...

طيب بما ان الدالة من نوع void لا ترجع شيء لماذا يتم استخدامهـا ؟؟؟

هذا مثال بسيط

#include<iostream.h>
#include<conio.h>

void Func(int arr[10],int &evev, int &odd)
{
for(int i=0;i<10;i++)
if(arr[i]%2==0)
evev++;
else
odd++;

}

void main()
{
clrscr();
int arr[10];
cout<<" enter numbers: ";
for (int i=0;i<10;i++)
cin>>arr[i];

cout<<endl;
int even=0,odd=0;
Func(arr,even,odd);
cout<<"even = "<<even<<" odd= "<<odd;
getch();

}

تم تعديل بواسطه الاخير زمانه
0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
  • 0

يعطيني خطأ المثال ؟؟؟

ولا يحدد مكانه ... حتى عطلت كلمة void من ال main ووضعت بدالها int ورجعت قيمة صفر في النهاية حتى اشتغل ...؟

لكن ما فهمت حاجة ؟؟؟

ممكن مثال ثاني !!؟؟؟

ثم عندي سؤال .. اللي اراه ان المثال هذا والمثال الذي ادرس منه بالكتاب متقاربين ؟؟؟

هل من جديد حتى نستوعب ، وجزاك الله كل خير اخوي ..

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
  • 0

بالنسبة للسؤال الجميل الذي تفضلت به .

هل يمكن ان اعيد اكثر من قيمة من اكثر من متغير في دالة واحدة ....؟

نعم يمكن لك ان تتحايل على الدوال ,هناك من يستخدم الاعادة عن طريق الParameters باستخدام reference او pointer (فاكر الغثة ) :blush:

مثال سأقوم بتصميم دالة تعيد لي مربع رقم ومكعبه.

reference

void Power_R(int num,int &out2,int &out3)
{
out2=num*num;
out3=num*num*num;
}

pointer

void Power_P(int num,int *out2,int *out3)
{
*out2=num*num;
*out3=num*num*num;
}

او ان تعيد القيم على شكل مصفوفة , وهذا المفضل لدي

مثال :

int* Power_A(int num)
{
int *re=new int[2];

re[0]=num*num;
re[1]=num*num*num;
return re;


}


main()
{
int *x=Power_A(3);

cout<<"2^2="<<x[0]<<endl<<"2^3="<<x[1]<<endl;
return 0;
}

راجع رسائلك الخاصة . :blush:

تحياتي . . . :blush:

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
  • 0

اخي الأخير زمانه ... كنت اقصد آخر رد لك .. لكن الآن تم توضيح كل اللبس اللي حصل لي من الموضوع ...

بالنسبة لهدف الموضوع فقمت فهمته ولله الحمد والفضل لله ثم لجهودكم ... (( الرسالة واضحة 100% )) ...

اما عن اعادة اكثر من قيمة فالحمد لله ايضاً فهمتها وعرفت كيف ارجع اكثر من قيمة ...

واعتقد ان اسهل هذه الطرق هي الطريقة الأولى اللي تعتمد على المرجع ... لاني اعتقد انها اسهل الطرق ...

أما اصعبها فهي المصفوفة ^^ ... لا تقول ليش ... يمكن مع الأيام استوعبها اكثر ^^ ...

على العموم جزاكم الله خير على التوضيح ... وبارك الله فيكم ..

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
  • 0

شكرا للإخوة على المعلومات

تم تعديل بواسطه Delphawi
0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
  • 0
يعطيني خطأ المثال ؟؟؟

ولا يحدد مكانه ... حتى عطلت كلمة void من ال main ووضعت بدالها int ورجعت قيمة صفر في النهاية حتى اشتغل ...؟

لأن بعض المترجمات الحديثة أصبحت تشترط وضع قيمة مرجوعة من طرف الدالة main .

تم تعديل بواسطه SIFE
0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
  • 0

تعرف main يجب ان يكون int

تعريف main بvoid خطا ولايغرك عدم شكوى الcompiler

لماذا ؟

دائما عند الالتباس في شيئ نرجع للاصل

اول مثال Hello World في أول كتاب للغة منKernighan & Ritchie هو

#include <stdio.h>

int main(void)
{
printf("hello, world\n");
return 0;
}

حسب C99 دالة main تكون من الشكل

int main ( void )
int main ( int argc, char *argv[] )

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
  • 0
تعرف main يجب ان يكون int

تعريف main بvoid خطا ولايغرك عدم شكوى الcompiler

:hmm:

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
  • 0
:hmm:

ماذا اخي زيد ؟

شيئ اخر لم يتطرق له السؤال: ظرورة وجود return 0;

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
  • 0

هممممممممم ...

يا اخي والله اني شاكر لكم على المجهود الرائع ... وجزاكم الله خير ....

اهم شيء اني عرفت ان ال main ما يصير اضعهـا void في برنامجي ^^ ...

اما الباقي فـ مسموح .... <<<<<<< قاعد يتدرب على الأمثلة <<<<<< وراه مشوار طويـل ....

الله يعيني واياكم ..

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
  • 0
ماذا اخي زيد ؟

لم اكن اعرف المعلومة التي ذكرت ،

ان تعريف ال void main هو خطأ رغم ان الكومبايلر لا يعترض ،

و الجميل انا لا أستخدم int main ،، جميعه void main . :lol:

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
  • 0

كلام الاخ محمد عبد العزيز لا غبار عليه ,, راجع تعريفات الـISO

3.6.1 Main function


int main() { /* ... */ }
and
int main(int argc, char* argv[]) { /* ... */ }
All implementations shall allow both of the following definitions of main:

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
  • 0

اعتقد نسخة المترجم من مايكروسوفت هو الوحيد الذي يقبل السطر void main ؟

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه

  • يستعرض القسم حالياً   0 members

    لا يوجد أعضاء مسجلين يشاهدون هذه الصفحة .