الفريق العربي للبرمجةأرشيف المنتديات · 2000 – 2023
نسخة أرشيفية للقراءة فقط — التسجيل والمشاركة مغلقان، والمحتوى محفوظ كما كان.

الدوال

مغلق
بدأه @ديمه@ في 25 أبريل 2003 · 14 رد · 1,432 مشاهدة · في الأسئلة المجابة
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

ارجو من الاخوه مسااعدتي في فهم functions definitions و function prototypes:

وايش الفرق بيينهم:eek:

ليش نستخدمها ايش الفائده منها:eek:

وشكرااااااااا

#2

كل functiom في ال c لزم يكون لها 3 اشياء:

1-prototype

2-call

3-definiton

مثلا: int ahmed(char a);

هذا هو ال prototype

ويكون دائما في اعلى البرنامج

فوق ال main

اما عن ال call

ahmed('a');

ويكون داخل ال main او اي function اخرى

يعني function تنادي على function

اما ال definition

فهو هيكل ال function يعني هذه ال function ماذا تفعل

ويكون مثلا:

int ahmed(char a){

printf("n %c",a);

}

نجد انه ال prototype موجود هنا

int ahmed(char a)

ولكنه تلاه {

وليس ;

وبعدين الكود ال function

وعلى فكره ممكن نكتب ال definition

قبل ال main

او

بعده

والله اعلم

#3

شكرا لك على الشرح الوافي

لاااكن ايش الفائده منهم في البرامج

#4

يا عزيزتى ال function تسهل علينا كثيرا اذا كانت البرامج كبيره او اذا كان عدد من الاسطر يتكرر كثيرا فنلجا الى ال function

ال prototype

يقوم بالاعلام للبرنامج عن ال function كما لو تعلنى عن متغير معين

فاذا لم تكتبيه فلن يتعرف البرنامج على ال function و سوف يظهر errror

اما ال defintion

فهو الاسطر التى تتكرر اكثر من مره نقوم بوضعها فى ال definition

ثم ننادى عليها من ال main فى سطر واحد يكون اسم ال function

مثال :

سوف نرسل لك برنامج يشرح ما سبق

function.zip

#5

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

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

أما لك أختي الكريمه فأن الفرق الجوهري هو أن الاعلان عن الدالة فقط يعرف أو يعلم المترجم بعدد المدخلات والمخرج واسم الدالة ولا يحجز مكان في الذاكرة.

أما التعريف فيحجز مكان في الذاكرة ....

والدوال مهمة جداً حاولي اتقانها ...

وللأستزاده من هذا الموضوع هناك شرح لي في منتدى المبرمجين العرب تستطيعين الذهاب للموقع ومشاهدته فربما ساعدك ذلك " الفتاك"

اللهم علمنا ما ينفعنا وأنفعنا بما علمتنا أنك أنت العليم الحكيم

سبحان الله وبحمده سبحان الله العظيم

لاحول ولاقوة الا بالله( كنز من كنوز الجنة ).

#6

ملحوظة اخري ان الاعلان عن الـ Function له اسم اخر بالاضافة الي Prototype

وهو Decelration وهذا الاسم شائع الاستخدام في العديد من اللغات مثل C++ و الجافا

تحياتي

#7

السهم الناري ممكن تعطيني اللنك حق الموقع المبرمجين العرب..........

واكون شاكره لك .........ز

#8

السلام عليكم...

الاخت الفاضله هتوفه..اليك الموقع..

[WEB]http://www.arabdevelopers.com[/WEB]

:)

#9

الا خ السهم الناري انا دخلت منتدى المبرمجييين العرب وما وجدت الموضوع اللي تقول عليه:(

وياليت لو احد شرحلي ال

scope ruls

1)file scope

2)blok scope

3)function prototype scope

وشكراااااااااااااااا

#10

موضوعي له فتره ولاا احد رد علي :mad::mad:

#11

بسم الله الرحمن الرحيم

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

يمكن القول ببساطة شديدة الscope هو عبارة عن الحيز الذي يمكن أن تبقى فيه الداله أو المتغير او البلوك داخل

مقطع ما -في التعاريف التاليه سناخذ في الاعتبار وجود المتغير-

فمثلا:

{

int x = 12;

// only x available

  {

    int q = 96;

    // both q & x available

  }

/* only x available

   q out of scope */

}

فبفهم هذا المنطق يمكن التعبير عن اي مصطلح مثل:

object scope

file scope

block scope

function prototype scope

=============================

file scope

جعل المتغير متاح لاي جمله(تصريح - statement) داخل نفس الملف المصدري

(in the same source code file)

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

block scope

/* بنفس الطريقة */

جعل المتغير متاح لاي جمله(تصريح - statement) داخل نفس المجموعة أو البلوك

(in the same Block)

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

function prototype scope

function prototype هي نفس المعنى لfunction Decleration

أي النموذج الاصلي للداله أو التصريح عن الداله والغرض منها ابلاغ المترجم Compiler بوجود داله

معينة ولتكن ()starline سنقوم باستخدامها كما في المثال:

//using VC++6 or VC++.NET

#include<iostream>

using namespace std;

#include<conio.h>



starline(); //functon decleration(prototype)



void main()

{

starline();  //call to function

cout<< "welcome to ArabTeam2000 Forum";

starline();  //call to function

getch();     

}



//function definition

void starline()

{ 

for(int i=0; i<60; i++)

  cout<<"*";

cout<<endl;

}

والتالي function prototype scope

عبارة عن جعل المتغير متاح لاي جمله(تصريح - statement) داخل نفس النموذج الاصلي

===========================================

آمل ان تكون الاجابة صحيحة ومقنعة بالشكل الكافي

#12

شكرا لك اخوي على هذا التوضيح

:)

#13

شكرا لك اخوي على هالتوضيح لا كن ياليت توضح اكثر

؟؟؟؟؟؟؟؟؟؟

#14

بسم الله الرحمن الرحيم

اختي الموضوع ابسط بكثير مما تتصوريه بمجرد ما حتفهمين المنطق Logic لمفهوم السكوب حتلاقي الموضوع بسيط ان شاء الله.

لذلك حوالي ان تبسطي الموضوع كالتالي:

انا قلت ان السكوب بشكل عام عبارة عن منطق. تمام

أي انه مفهوم من الممكن التعبير عنه في الحياة العملية. كيف؟

انا عندما دخلت على هذا المنتدى وبافتراض اني ابحث عن الموضوع اللي انتي كتبتيه - الدوال مثلا - فطبيعيا اني سادخل على منتديات البرمجة ثم منتدى مبرمجي السي ثم

سابحث عن الموضوع اياه.

لماذا لم ابحث عن الموضوع في منتدى الجافا أو الاوراكل مثلا مع انهم جميعا في منتدى واحد .

الاجابة بكل بساطة ان الموضوع غير موجود بمنتدى الجافا.

لماذا؟

لانه لا يمكن البحث عن سؤال في السي بمنتدى الجافا لان الموضوع تم تعريفه - اللي كتبتيه - داخل نطاق منتدى السي فقط ولم يكتب في منتدى الجافا.

كذلك في function scope مثلا

فموضوعك -الدوال- يمثل المتغير وليكن var

ومنتدى لغة السي يمثل الدالة ولتكن ( )varFunc المعرف فيها المتغير var -اللي هو موضوعك الدوال-

ومنتدى الجافا يمثل الدالة ( )newFunc

ومنتدى الفريق العربي باكمله عباره عن السورس كود (cpp file)

وبالتالي لكتابة برنامج يصف المشكلة يصبح الكود:

#include<iostream.h>



void varFunc();

void newFunc();



void main()

{

varFunc();

newFunc();

}

// الدالة التي تمثل منتدى السي

void varFunc()

{



 int var = 2  //يمثل هذا المتغير الموضوع

 cout << " In varFunc var = " 

      << var;

}

//  الدالة الاخرى والتي تمثل منتدى الجافا

void newFunc()

{ 

  //  المترجم لن يتعرف على هذا المتغير

  cout << var; // بالتأكيد سيعطي خطأ لان المتغير خارج نطاق الدالة 

}

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

والاغراض من هذا المفهوم متعددة مثل :

معرفة حياة المتغير مثلا هل المتغير سيبقى منذ ان يبدأ الماين الى ان ينتهي البرنامج او بمجرد انتهاء الدالة سينتهي.

هل بالامكان تغيير قيمة المتغير من دالة اخرى أم لا

متى ستبدا حياة المتغير هل من الماين او من عند استدعاء الدالة او من ملف اخر غير الموجود حاليا

التقليل من استخدام الذاكرة قدر الامكان حيث لا نعرف جميع المتغيرات بشكل جلوبال او عام.

واغراض اخرى ممكن لكي ان تتصوريها لان الموضوع كما ذكرت لكي انه منطق.

بالمناسبة هذا الموضوع يشبه موضوع Object Oriented فعندما تقومين بتعريف كلاس لا تذكرين اي معلومة للمترجم بان هذه الكلاس هي من مفهوم

البرمجة الشيئية Object Oriented ونفس الطريقة في الـScoping .

آمل ان تكون الفكرة وصلت بالشكل المطلوب لان هذا الموضوع يكون برايي أكثر اهمية في التعامل مع لغات مثل java أو #C

لان هاتين اللغتين Pure Object Oriented اي لغات برمجة شيئية بصورة بحتة خالصة.

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

والمعذرة على الاطالــــة ...

#15

شكرا اخوي ماقصرت:)الله يزيدك

هذا الموضوع مغلق.

مواضيع مشابهة