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

هل يمكننا كتابة كود بدوم استخدام مكتبة !؟

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

طلب منا الأستاذ أن نكتب كود يقوم بتربيع العدد 3 و بدون إظهاره على الشاشة, فكانت محاولتي كالآتي:

int main()
{
    int n=3;
    n=3*3;
    return 0;
}

عندما عرضت هذه المحاولة على الأستاذ .. قال لي بأنها خاطئة !

قلت:مالسبب ؟

قال:لأنك لم تستدعي المكتبة iostream !!

قلت:و لماذا أستدعيها ؟

قال:لأنك استخدمت رمز الضرب !!

قلت: و ما علاقة رمز الضرب بالمكتبة iostream ؟

قال:جميع الرموز و المؤثرات في لغة السي++ موجودة في مكتبة iostream ! و إلا فكيف يتعرف المترجم على الرموز المستخدمة !؟

قلت:لا أدري ! و لكنني قمت بترجمة البرنامج و عمل بدون أخطاء !

...

أرجوا منكم توضيح المسألة :)

1
#2

كلامك صحيح إن كان ما قلته هو الذي حصل دون أن تسيء فهم مدرسك. هل الذي يدرسك ++C درسها أصلاً؟ هذه هي المشكلة الحقيقية عند من يدرسون ++C في الجامعات للأسف.

4
#3
اقتباس
كلامك صحيح إن كان ما قلته هو الذي حصل دون أن تسيء فهم مدرسك. هل الذي يدرسك ++C درسها أصلاً؟ هذه هي المشكلة الحقيقية عند من يدرسون ++C في الجامعات للأسف.

طيب .. كيف يتعرف المترجم على الرموز و المؤثرات ؟

#4
اقتباس
طيب .. كيف يتعرف المترجم على الرموز و المؤثرات ؟

الـ Operators هي من ضمن تعريف اللغة نفسه, و عندما أقول تعريف اللغة نفسه فأنا أقصد ذلك حرفياً من المثال الذي طرحته. ستجد في آخر الـ Cpp Standards حوالي 16 صفحة عبارة عن قواعد ++C بالنسبة للـ Syntax. و ستجد إشارة إلى الـ C Standards حسبما أذكر لكيفة التعامل مع الـ Operators Precedence.

عموماً لو أن الـ Operators المستخدمة ليست لنوع Primitive كـ int لكان من الصحيح القول أنها ليست في تعريف اللغة, و لكن مثالك يستخدم متغير primitive و هو من النوع int.

بعيداً عن الكلام الذي في الأعلى, iostream هو header يقوم بتعريف مكتبات الإدخال و الإخراج في ++C لا أقل و لا أكثر.

تحياتي....

تم تعديل هذه المشاركة بواسطة Khaled.Alshaya في 24 أبريل 2010 في 18:39

#5
اقتباس

الـ Operators هي من ضمن تعريف اللغة نفسه, و عندما أقول تعريف اللغة نفسه فأنا أقصد ذلك حرفياً من المثال الذي طرحته. ستجد في آخر الـ Cpp Standards حوالي 16 صفحة عبارة عن قواعد ++C بالنسبة للـ Syntax. و ستجد إشارة إلى الـ C Standards حسبما أذكر لكيفة التعامل مع الـ Operators Precedence.

عموماً لو أن الـ Operators المستخدمة ليست لنوع Primitive كـ int لكان من الصحيح القول أنها ليست في تعريف اللغة, و لكن مثالك يستخدم متغير primitive و هو من النوع int.

لم أفهم جيدا :blush: أرجو التوضيح.

#6
اقتباس
لم أفهم جيدا :blush: أرجو التوضيح.

الجمع و الطرح و الضرب و القسمه و باقى القسمه لأنواع البيانات الأوليه مثل short و long و long long و float و double هى جزء اساسى من اللغه و لا علاقة له بأى مكتبات خارجيه، بمعنى عند كتابتك للكود التالى:

int w = 5
int r = w * 3

سيقوم المترجم بتحويلها إلى الكود التالى (الكود التالى مجازى فقط لتوضيح الصوره)

mov w, 5
mov r, w
mul r, 3

الكود السابق يستخدم التعليمه mul لإتمام عملية ضرب الرقم 3 بالرقم المسجل داخل r ثم يقوم بوضع القيمه النهائيه داخل r و كما ترى التعليمه mul هى خاصه بالبروسسور ولا علاقة لها بمكتبات اللغه، قياسا على ذلك باقى المعاملات المذكوره لباقى الأنواع الرقميه الأساسيه.

و الله ولى التوفيق

2

مدونتي: C++ Tips and Tricks

#7
اقتباس
الكود السابق يستخدم التعليمه mul لإتمام عملية ضرب الرقم 3 بالرقم المسجل داخل r ثم يقوم بوضع القيمه النهائيه داخل r و كما ترى التعليمه mul هى خاصه بالبروسسور ولا علاقة لها بمكتبات اللغه، قياسا على ذلك باقى المعاملات المذكوره لباقى الأنواع الرقميه الأساسيه.

ما هي التعليمة mul ؟ و كيف يتعرف المترجم على أنواع البيانات مثل int,float,char ؟

أشكركم على المساعدة :)

#8
اقتباس
ما هي التعليمة mul ؟ و كيف يتعرف المترجم على أنواع البيانات مثل int,float,char

التعليمة mul هي نفسها عملية الضرب وهي بلغة المعالجات assembly والتي تكافئ * في لغة سي بلس بلس

أما بالنسبة لسؤالك كيف يتعرف المترجم على أنواع البيانات، فهي أصلاً عبارة عن أنواع بيانات موجودة في تعريف اللغة

#9
اقتباس
التعليمة mul هي نفسها عملية الضرب وهي بلغة المعالجات assembly والتي تكافئ * في لغة سي بلس بلس

أما بالنسبة لسؤالك كيف يتعرف المترجم على أنواع البيانات، فهي أصلاً عبارة عن أنواع بيانات موجودة في تعريف اللغة

ماذا تقصد بتعريف اللغة ؟

#10

قد أكون أخطأت في اختيار اللفظة (تعريف اللغة) لكن إليك بعض التوضيح:

كل لغة لديها مجموعة من المعرفات، والقوانين، فلغة السي بلس بلس مثلاً لديها مجموعة من أنواع البيانات يعني تستخدم مثلاً ال int ,float, double, long كما أن أنواع البيانات المسموح بها مثلاً في لغة باسكال هي char, boolean, integer, real,string ولا يوجد مثلاً double or float قد يوجد ماينوب عنهما، فاالذي أقصده أن المترجم يعتمد على قوانين اللغة والمتغيرات الموجودة فيها والثوابت والكلمات المحجوزة، يعني int مخزنة في المترجم الخاص بلغة السي بلس بلس على أساس أنها نوع من أنواع البيانات يحجز 4 بايت من الذاكرة، ويجب أن تسبق المتغير عند كتابته فتكتب مثلاً int x; هذا في السي بلس بلس، يعني باختصار المترجم يفهم لانها مخزنة عنده مسبقاً أن int مثلاً نوع من أنواع البيانات الموجودة في السي بلس بلس، وكذلك كيف يفهم المترجم أن ال x متغير، لأنه من قواعد تسمية المتغيرات أن تستخدم الحروف وأن لا يبدأ بعدد أو لا يبدأ بأحد الرموز المحظورة، إلى آخره من شروط كتابة المتغير، يعني هناك مترجم خاص بكل لغة، فالسي بلس بلس لديها المترجم خاص بها، والجافا لديها مترجم خاص بها، وهكذا..

أرجو أن تكون وضحت الفكرة

اعذروني إن أخطأت فهذا حسب علمي والله أعلم

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