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

ماهو الماكرو وماهي نتجية العملية التاليه

بدأه mocha في 25 أكتوبر 2010 · 9 رد · 706 مشاهدة · في الأسئلة المجابة
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

السلام عليكم

ياليت احد يفيدني عن ايش هو المكارو

وايش نتجية الكود التالي

define sum(a,b) a+b#

5*sum(3+1,2)

ايش راح تكون نتيجة العملية بضبط :mad:

هذا السؤال جاني بالاختبار ولا عرفت احله وحتى بعد الاختبار مو فاهمته ياليت احد يشرحه لي ياجماعة الخير :wacko:

#2

و عليكم السلام ,

الماكرو , إعلان أو تصريح يمكن يحتوي على parameters و يمكن لا .. التعريف يكون فوق الـ main , لإتاحة إستخدامه في جميع أجزاء البرنامج ..

مثال , لا يحتوي على بارامتر ..

#define num 3 
int main()
{
int a = 2;
cout<<a*num ;
return 0 ;
}

عند كتابتنا لهذا الكود , فإن المترجم يقوم بوضع قيمة الـ num بـ 3 .. و تكون النتيجة .. 6

/

بالنسبة لسؤالك :

#define sum(a,b) a+b

5*sum(3+1,2)

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

و نضرب في العدد 5 ,

بالتوفيق :happy: ,

1

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

#4

الله يعطيك الف عافيه على التبسيط بس لازلت مو فاهمه كم بتطلع النتيجه

لو قلنا

(4,2)* 5

5*4=20

وبالنسبه ل2 ايش بيكون الناتج ؟ :unsure:

وشكرا وماقصرت

ومافهت الاخ علق +1 ماني فاهمه هل هو تعليق على السؤال او ايش بضبط :huh:

توضيح لسؤال بطريقة مفصله

لاانها هذا اللي جانا بالاختبار عشان الكل يستفيد

Given the macro definition :#define sum(a,b) a+b ,
What is the value of 5*sum(3+1,2)?
#5

المعذرة , يمكن ف مشاركتي السابقة ما وضحت أكثر ..

الماكرو كالتالي :

#define sum(a,b) a+b

في البرنامج , لو كتبنا

sum(2,4) ;

المترجم راح ينظر إليها , كـ 2+4 .. Ok ?

فـ الكود التالي :

5*sum(3+1,2)

المترجم راح يترجمه بالطريقة التالية ,

5 * 3+1 +2

كيف يكون الناتج وقتها ؟

الأولوية لعملية الضرب .. راح يضرب الـ 5 في 3 و يجمع عليهم الـ 1 بالإضافة إلى 2 ..

الناتج النهائي بيكون : 18

آتمنى يكون واضح .. واي استفسار حاضرين :P

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

#6

الله يعطيك الف عافية وضحت الان وتمام التمام

ودام انك موجود وفاهم بالسي بلس بلس لايمنع اني اسئل سؤال ثاني ماعرف اذا التعبير ايضا ماكروا او لا

مادري هل هذا مايسمى بالاسكي (حروف الاسكي) امريكن ستادندر

السؤال بتحديد

What is the value of the expression 3  ["A123B456"]

مادري المطلوب عباره عن سلسلة اعداد وحروف ومضروبة في 3 مادري كيف :unsure: بيكون الناتج وتسلم اكيد على مشاركتك بالحقيقه انقذتوني بكره مناقشة الاختبار والاسئلة اللي ماقدرنا نحلها لازم نحلها وبحثت باغلب المواقع ولا لها حل

وبالنسبة للقيم هذي ايش ممكن تكون

اخر سؤال وقسما بالله :blush:

هذا البيونتر اللي مجنني ياربي مدري وشلون افهمه :mad:

Char**a,*b,c ;
a=&b;
*a=&c;
**a='z';

انا طبقتها بالكمبيوتر على برنامج السي بلس بلس طلع لي قيمة a= عنوان بس مادري عنوان مين وال b= z وال c طلعت لي بعد z

بس ماني واثقه من حلي

:excl:

والله اني شاكره للاجابه من اعماق قلبي :blush:

#7
اقتباس
السؤال بتحديد

What is the value of the expression 3  ["A123B456"]

لا أعرف إجابة هذا السؤال لأنني لم أفهم السؤال أصلا !

كنت أظن أنه يريد تحويل العبارة إلى النظام العشري (باعتبار أنها مكتوبة في الـ hex) و لكن لا أعتقد أن هذا هو التفسير الصحيح !

اقتباس
هذا البيونتر اللي مجنني ياربي مدري وشلون افهمه :mad:

Char**a,*b,c ;
a=&b;
*a=&c;
**a='z';

سبق و أن فعلها هذا النوع من البوينتر للكثير من المبرمجين .. أصابهم بالجنون البرمجي و هو إحدى الظواهر البرمجية الشهيرة ! :lol: , احمد الله أنك غير مجنون و بدون حالات هستريية :happy:

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

في الحقيقة فإن هذا النوع من المؤشرات هو "مؤشر لمؤشر", يعني مؤشر من الدرجة الثانية و عادة ما يُستخدم في إنشاء مصفوفات ديناميكية ثنائية البعد :)

قبل أن أبدأ في الشرح, تذكر هذه القاعدة:

"ما دام المؤشر يحتوي على عنوان متغير فإن مؤشر لمؤشر سيحتوي على عنوان العنوان"

____________________

في هذه الخطوة :

Char**a,*b,c ;

قمنا بالإعلان عن مؤشر لمؤشر اسمه a و مؤشر اسمه b و متغير حرفي اسمه c

في هذه الخطوة :

a=&b;

أسندنا عنوان المؤشر b إلى المؤشر a,لاحظ أن b مؤشر مما يعني أن عنوانه سيكون عنوان العنوان لذلك يُمكننا إسناده إلى مؤشر لمؤشر لأن الأخير يحتوي على عنوان العنوان.

في هذه الخطوة:

*a=&c;

أسندنا عنوان c إلى *a, لاحظ أن a مؤشر لمؤشر مما يعني أن *a ستكون مؤشر (يحتوي على عنوان المتغير) و **a ستكون القيمة (لا تنسى أن النجمة * تُستخدم لإزالة العنوان)

في هذه الخطوة :

**a='z';

أسندنا الحرف z إلى الخانة التي يشير إليها a,لاحظ أننا كتبنا النجمة مرتين و ذلك لإزالة عنوان العنوان.

أتمنى ان أكون قد أفدتك :)

#8

كاني فهمت شوي ماقصرت

بس بالنتجه نقدر نقول

قيمة a هي عنوان b

وقيمة المتغير b هي عنوان a

وقيمة c=z

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

يعني ابختصر عليك سؤالي النتجيه ايش بتكون :blush:

#9

مرحبا من جديد :)

في هذه الخطوة :

a=&b;

سيحتوي a (و هو مؤشر لمؤشر) على عنوان المؤشر b

في هذه الخطوة :

*a=&c;

سيحتوي *a (و هو مؤشر) على عنوان c

في هذه الخطوة :

**a='z';

ستحتوي خانة "المؤشر لمؤشر" a على الحرف z

تم تعديل هذه المشاركة بواسطة khaled_prg في 25 أكتوبر 2010 في 21:03

#10

اااااااااااااااخير فهمت وقسم بالله من الفرحه قمت انطط في البيت اول مره بحياتي افهم المؤشرات من جد مهيب صعبه بس محد يفهمنا اياها خطوه بخطوه بس يعطونك الريزلت وانت دور وخمن على كيفك وكم مره تصيب تخمنياتي بس الان فهمت الله يجزاك الجنه وماقصرت فعلا :) ماقول الا الحمد لله يازين العربي والشرح بالعربي دوختني كتب الانجلش :wacko:

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

عدد الزوار حالياً

المتواجدون خلال آخر دقيقتين · يتحدّث كل ٣٠ ثانية

—الإجمالي—أعضاء مسجّلون—زوار بدون تسجيل

جارٍ التحقق من المتواجدين…