تكوين لغة البرمجة ج. أساسيات لغة C: هيكل برنامج C، والأنواع الأساسية وبناء أنواع وعمليات وتعبيرات جديدة

30.03.2019

مما يتكون البرنامج؟

في البداية، يجب أن نفهم أن البرنامج لا يمكن قراءته وكتابته مثل الكتاب: من الغلاف إلى الغلاف، ومن الأعلى إلى الأسفل، ومن سطر إلى سطر. يتكون أي برنامج من كتل منفصلة. تتم الإشارة إلى بداية كتلة التعليمات البرمجية في C/C++ بواسطة قوس متعرج أيسر (، ونهايته بواسطة قوس متعرج أيمن).

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

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

الكلاسيكية من هذا النوع: وامض LED

دعونا الآن نكمل برنامجنا حتى يحدث شيء ما على الأقل. في Arduino، يتم توصيل مؤشر LED بالطرف 13. يمكن السيطرة عليه، وهذا ما سنفعله.

إعداد باطلة () (pinMode (13، OUTPUT) ؛) حلقة باطلة () (كتابة رقمية (13 ، عالية) ؛ تأخير (100) ؛ كتابة رقمية (13 ، منخفض) ؛ تأخير (900 ) ؛)

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

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

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

    بمجرد تشغيل Arduino أو وميضه أو الضغط على زر RESET، تظهر كلمة "شيء ما" يستدعي وظيفةيثبت. أي أنه يجبر العبارات الموجودة فيه على التنفيذ.

    بمجرد اكتمال الإعداد، يقوم "شيء ما" باستدعاء وظيفة الحلقة على الفور.

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

إذا قمنا بترقيم التعبيرات حسب كيفية تنفيذها، نحصل على:

إعداد باطلة () ( pinMode (13 ، OUTPUT) ؛ ❶ ) حلقة باطلة () ( كتابة رقمية (13 ، عالية) ؛ ❷ ❻ ❿ تأخير (100 ) ؛ ❸ ❼ … كتابة رقمية (13 ، LOW) ؛ ❹ ❽ تأخير (900 ) ; ❺ ❾ )

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

حلقة باطلة() ( كتابة رقمية(13 , عالية) ; ❷ ❻ ❿ تأخير(100 ) ; ❸ ❼ … كتابة رقمية(13 , منخفضة) ; ❹ ❽ تأخير(900 ) ; ❺ ❾ ) إعداد باطلة() ( pinMode(13 , OUTPUT ) ; ❶ )

لن تتغير نتيجة ذلك بمقدار ذرة واحدة: بعد التجميع، ستتلقى ملفًا ثنائيًا مكافئًا تمامًا.

ما هي التعبيرات تفعل

الآن دعونا نحاول أن نفهم لماذا يتسبب البرنامج المكتوب في وميض مؤشر LED في النهاية.

كما تعلم، يمكن أن تعمل أطراف Arduino كمخرجات ومدخلات. عندما نريد التحكم في شيء ما، أي إصدار إشارة، نحتاج إلى تحويل طرف التحكم إلى حالة الإخراج. في مثالنا، نحن نتحكم في مؤشر LED الموجود على الطرف الثالث عشر، لذلك يجب إخراج الطرف الثالث عشر قبل الاستخدام.

يتم ذلك عن طريق تعبير في وظيفة الإعداد:

PinMode(13 , الإخراج) ؛

يمكن أن تكون التعبيرات مختلفة: حسابية، وإعلانات، وتعريفات، وشروط، وما إلى ذلك. في هذه الحالة، نقوم بتنفيذ في التعبير استدعاء وظيفة. يتذكر؟ لدينا هُموظائف الإعداد والحلقة، والتي يتم استدعاؤها بواسطة شيء نسميه "شيئًا ما". و الآن نحننحن نسمي الوظائف المكتوبة بالفعل في مكان ما.

على وجه التحديد في الإعداد لدينا نسمي وظيفة تسمى pinMode. يقوم بتعيين الدبوس المحدد برقم على الوضع المحدد: الإدخال أو الإخراج. نشير إلى أي طرف وأي وضع نتحدث عنه بين قوسين، مفصولة بفواصل، مباشرة بعد اسم الوظيفة. في حالتنا، نريد أن يعمل الطرف الثالث عشر كمخرج. OUTPUT يعني الإخراج، INPUT يعني الإدخال.

يتم استدعاء القيم المؤهلة مثل 13 و OUTPUT الحجج الوظيفية. ليس من الضروري على الإطلاق أن تحتوي جميع الوظائف على وسيطتين. يعتمد عدد الوسائط التي تحتوي عليها الوظيفة على جوهر الوظيفة وكيفية كتابتها بواسطة المؤلف. يمكن أن تكون هناك دالات ذات وسيطة واحدة، ثلاثة، عشرين؛ لا يمكن أن تحتوي الوظائف على أي وسائط على الإطلاق. ثم للاتصال بهم، يتم فتح القوس وإغلاقه على الفور:

NoInterrupts();

في الواقع، ربما لاحظت أن وظائف الإعداد والحلقة الخاصة بنا لا تأخذ أي وسيطات أيضًا. و"الشيء" الغامض يستدعيهم بنفس الطريقة مع قوسين فارغين في اللحظة المناسبة.

دعنا نعود إلى الكود الخاص بنا. لذا، نظرًا لأننا نخطط وميض مؤشر LED إلى الأبد، فيجب إخراج دبوس التحكم مرة واحدة ومن ثم لا نريد أن نتذكر ذلك. هذا هو الغرض من وظيفة الإعداد أيديولوجيًا: إعداد اللوحة حسب الحاجة ثم العمل معها.

دعنا ننتقل إلى وظيفة الحلقة:

حلقة باطلة () (كتابة رقمية (13، عالية) ؛ تأخير (100) ؛ كتابة رقمية (13، منخفضة) ؛ تأخير (900) ؛)

كما ذكرنا، يتم استدعاؤه مباشرة بعد الإعداد. ويتم استدعاؤه مرارًا وتكرارًا بمجرد انتهائه. تسمى وظيفة الحلقة بالحلقة الرئيسية للبرنامج وهي مصممة أيديولوجياً لأداء عمل مفيد. في حالتنا، العمل المفيد هو وميض مؤشر LED.

دعونا نذهب من خلال التعبيرات بالترتيب. لذا فإن التعبير الأول هو استدعاء وظيفة الكتابة الرقمية المضمنة. لقد تم تصميمه لتطبيق صفر منطقي (منخفض، 0 فولت) أو صفر منطقي (عالي، 5 فولت) على طرف معين.يتم تمرير وسيطتين إلى وظيفة الكتابة الرقمية: رقم الدبوس والقيمة المنطقية. ونتيجة لذلك، فإن أول شيء نقوم به هو إضاءة مؤشر LED الموجود على الطرف الثالث عشر، وتطبيق 5 فولت عليه.

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

أثناء نومنا يبقى كل شيء كما هو، أي. يظل مؤشر LED مضاءً. بمجرد انتهاء 100 مللي ثانية، يستيقظ المعالج وينتقل على الفور إلى التعبير التالي. في مثالنا، يعد هذا مرة أخرى بمثابة استدعاء لوظيفة الكتابة الرقمية المألوفة المضمنة. صحيح أننا هذه المرة نمرر القيمة LOW كوسيطة ثانية. أي أننا قمنا بتعيين صفر منطقي على الدبوس الثالث عشر، أي أننا نوفر 0 فولت، أي أننا نقوم بإيقاف تشغيل مؤشر LED.

بعد أن ينطفئ مؤشر LED، ننتقل إلى التعبير التالي. مرة أخرى، هذا استدعاء لوظيفة التأخير. هذه المرة ننام لمدة 900 مللي ثانية.

بمجرد انتهاء النوم، تخرج وظيفة الحلقة. عند الانتهاء، يناديه "شيء ما" على الفور مرة أخرى ويحدث كل شيء مرة أخرى: يضيء مصباح LED، ويضيء، وينطفئ، وينتظر، وما إلى ذلك.

إذا قمت بترجمة ما هو مكتوب إلى اللغة الروسية، فستحصل على الخوارزمية التالية:

    إضاءة الصمام

    النوم لمدة 100 مللي ثانية

    إيقاف تشغيل الصمام

    ننام لمدة 900 مللي ثانية

    دعنا نذهب إلى النقطة 1

وهكذا حصلنا على اردوينو مع إشارة يومض كل 100 + 900 مللي ثانية = 1000 مللي ثانية = ثانية واحدة.

ما يمكن تغييره

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

يمكنك توصيل مؤشر LED خارجي أو أي جهاز آخر يحتاج إلى "الوميض" بدبوس مختلف. على سبيل المثال، في الخامس. كيف يجب أن يتغير البرنامج في هذه الحالة؟ يجب أن نستبدل الرقم بالرقم الخامس أينما وصلنا إلى الدبوس الثالث عشر:

تجميع وتنزيل واختبار.

ما الذي يجب فعله لجعل وميض LED مرتين في الثانية؟ تقليل وقت النوم بحيث يكون الإجمالي 500 مللي ثانية:

إعداد باطلة () (pinMode (5، OUTPUT) ؛) حلقة باطلة () (كتابة رقمية (5 ، عالية) ؛ تأخير (50) ؛ كتابة رقمية (5 ، منخفض) ؛ تأخير (450 ) ؛)

كيف يمكنني جعل مصباح LED يومض مرتين في كل مرة يومض فيها؟ تحتاج إلى إشعاله مرتين مع توقف قصير بين مرات التشغيل:

إعداد باطلة () (pinMode (5 ، OUTPUT) ؛) حلقة باطلة () (كتابة رقمية (5 ، عالية) ؛ تأخير (50) ؛ كتابة رقمية (5 ، منخفض) ؛ تأخير (50) ؛ كتابة رقمية (5 ، عالية) ؛ تأخير (50 ) ؛ الكتابة الرقمية (5 ، منخفض) ؛ تأخير (350 ) ؛)

كيف يمكنني جعل الجهاز يحتوي على مصباحين LED يومضان بالتناوب كل ثانية؟ تحتاج إلى التواصل مع طرفين والعمل في حلقة مع أحدهما أو الآخر:

إعداد الفراغ () (pinMode (5، OUTPUT) ؛ pinMode (6 ، OUTPUT) ؛) حلقة باطلة () (كتابة رقمية (5 ، عالية) ؛ تأخير (100) ؛ كتابة رقمية (5 ، منخفض) ؛ تأخير (900) ؛ كتابة رقمية (6 ، عالي) ؛ تأخير (100 ) ؛ كتابة رقمية (6 ، منخفض) ؛ تأخير (900 ) ؛)

كيف تتأكد من أن الجهاز يحتوي على مصباحين LED يعملان كإشارة مرور للسكك الحديدية: يضيء الأول ثم الآخر؟ ما عليك سوى عدم إيقاف تشغيل مصباح LED المضاء على الفور، ولكن الانتظار حتى لحظة التبديل:

إعداد الفراغ () (pinMode (5، OUTPUT) ؛ pinMode (6 ، OUTPUT) ؛) حلقة باطلة () (digitalWrite (5 ، HIGH) ؛ digitalWrite (6 ، LOW) ؛ تأخير (1000) ؛ digitalWrite (5 ، LOW) ؛ الكتابة الرقمية (6 ، عالية) ؛ تأخير (1000 ) ; )

لا تتردد في التحقق من الأفكار الأخرى بنفسك. كما ترون، الأمر بسيط!

حول المساحة الفارغة والرمز الجميل

في لغة C++، لا تهم المسافات وفواصل الأسطر وأحرف الجدولة كثيرًا بالنسبة للمترجم. حيثما توجد مسافة، قد يكون هناك فاصل أسطر والعكس صحيح. في الواقع، 10 مسافات متتالية وفواصل أسطر و5 مسافات أخرى تعادل مسافة واحدة.

المساحة الفارغة هي أداة مبرمج، يمكنك من خلالها إما جعل البرنامج مفهومًا ومرئيًا، أو تشويهه بشكل لا يمكن التعرف عليه. على سبيل المثال، تذكر برنامج وميض مؤشر LED:

إعداد باطل () (pinMode (5 ، OUTPUT) ؛) حلقة باطلة () (كتابة رقمية (5 ، عالية) ؛ تأخير (100) ؛ كتابة رقمية (5 ، منخفض) ؛ تأخير (900 ) ؛)

يمكننا تغييره مثل هذا:

الإعداد الفارغ () (pinMode (5 ، OUTPUT) ؛) حلقة باطلة () (digitalWrite (5 ، HIGH) ؛ تأخير (100) ؛ digitalWrite (5 ، LOW) ؛ تأخير (900 ) ؛)

كل ما فعلناه هو العمل قليلاً مع المساحة الفارغة. الآن يمكنك أن ترى بوضوح الفرق بين الكود المتناغم والرمز غير القابل للقراءة.

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

1. قم دائمًا بزيادة المسافة البادئة بين ( و ) عند بدء كتلة جديدة. عادة يتم استخدام 2 أو 4 مسافات. اختر إحدى القيم والتزم بها طوال الوقت.

بشكل سيئ:

حلقة باطلة () (كتابة رقمية (5 ، عالية) ؛ تأخير (100) ؛ كتابة رقمية (5 ، منخفضة) ؛ تأخير (900 ) ؛)

بخير:

حلقة باطلة () (كتابة رقمية (5 ، عالية) ؛ تأخير (100) ؛ كتابة رقمية (5 ، منخفضة) ؛ تأخير (900 ) ؛)

2. تمامًا كما هو الحال في اللغة الطبيعية: ضع مسافة بعد الفواصل ولا تضع قبلها.

بشكل سيئ:

الكتابة الرقمية (5، عالية)؛ الكتابة الرقمية (5، عالية)؛ الكتابة الرقمية (5، عالية)؛

بخير:

الكتابة الرقمية (5، عالية)؛

3. ضع حرف بداية الكتلة (على سطر جديد عند مستوى المسافة البادئة الحالية أو في نهاية السطر السابق. وحرف نهاية الكتلة) على سطر منفصل عند مستوى المسافة البادئة الحالية:

بشكل سيئ:

إعداد باطل () (pinMode (5، OUTPUT)؛) إعداد باطل () (pinMode (5، OUTPUT)؛) إعداد باطل () (pinMode (5، OUTPUT)؛)

بخير:

إعداد باطل () (pinMode (5، OUTPUT)؛) إعداد باطل () (pinMode (5، OUTPUT)؛)

4. استخدم الأسطر الفارغة للفصل بين كتل المعنى:

بخير:

أحسن:

حلقة باطلة () (كتابة رقمية (5 ، عالية) ؛ تأخير (100) ؛ كتابة رقمية (5 ، منخفض) ؛ تأخير (900) ؛ كتابة رقمية (6 ، عالية) ؛ تأخير (100) ؛ كتابة رقمية (6 ، منخفض) ؛ تأخير ( 900 ) ;)

حول الفواصل المنقوطة

قد تتساءل: لماذا توجد فاصلة منقوطة في نهاية كل عبارة؟ هذه هي قواعد لغة C++. تسمى هذه القواعد بناء جملة اللغة. بالرمز؛ يفهم المترجم أين ينتهي التعبير.

كما سبق أن ذكرنا، فواصل الأسطر هي عبارة فارغة بالنسبة له، لذلك يركز على علامة الترقيم هذه. يتيح لك ذلك كتابة تعبيرات متعددة في سطر واحد:

حلقة باطلة () (كتابة رقمية (5 ، عالية) ؛ تأخير (100) ؛ كتابة رقمية (5 ، منخفضة) ؛ تأخير (900 ) ؛)

البرنامج صحيح ويعادل ما رأيناه من قبل. ومع ذلك، فإن الكتابة بهذه الطريقة سيئة. الكود أكثر صعوبة في القراءة. لذا، ما لم يكن لديك سبب وجيه بنسبة 100% لكتابة تعبيرات متعددة في نفس السطر، فلا تفعل ذلك.

حول التعليقات

من قواعد البرمجة الجيدة: “اكتب الكود بحيث يكون واضحا بحيث لا يحتاج إلى شرح”. وهذا ممكن، ولكن ليس دائما. لكي تشرح بعض النقاط غير الواضحة في الكود لقرائها: زملائك أو نفسك في شهر، هناك ما يسمى بالتعليقات.

هذه هي بنيات في كود البرنامج يتم تجاهلها بالكامل من قبل المترجم ولها معنى للقارئ فقط. يمكن أن تكون التعليقات متعددة الأسطر أو سطرًا واحدًا:

/* يتم استدعاء وظيفة الإعداد أولاً عند توصيل الطاقة إلى Arduino، وهذا تعليق متعدد الأسطر */الإعداد باطل() ( // اضبط الدبوس 13 على وضع الإخراج pinMode(13 , الإخراج) ; ) حلقة باطلة () (digitalWrite (13، HIGH) ؛ تأخير (100) ؛ // سكون لمدة 100 مللي ثانية digitalWrite (13، LOW) ؛ تأخير (900 ) ؛)

كما ترون، يمكنك كتابة أي عدد تريده من أسطر التعليق بين الرمزين /* و*/. وبعد التسلسل // كل ما يلي حتى نهاية السطر يعتبر تعليقا.

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

الشكل 1: هيكل البرنامج في لغة C.

الهيكل الداخلي للبرنامج

يتكون برنامج C القابل للتنفيذ من 4 أجزاء: منطقة الأوامر ومنطقة البيانات الثابتة ومنطقة البيانات الديناميكية ومنطقة المكدس. انظر الشكل 2.

1. تحتوي منطقة الأوامر على أوامر الآلة؛ التعليمات التي يجب على المعالج الدقيق تنفيذها.

2. منطقة بيانات ثابتة لتخزين المتغيرات التي يعمل بها البرنامج.

3. منطقة البيانات الديناميكية لتخزين البيانات الإضافية التي تظهر أثناء تشغيل البرنامج (على سبيل المثال، المتغيرات المؤقتة).

4. يتم استخدام المكدس لتخزين البيانات مؤقتًا وإرجاع العناوين من الوظائف.


الجسم الوظيفي/*جسم الوظيفة*/

printf("مرحبا بالعالم!");

السطر الأول - توجيه يتضمن ملف رأس الإدخال/الإخراج القياسي. هناك عدد قليل من العوامل في لغة C، ولكن هناك مكتبة من الوظائف. لاستخدامها، تحتاج إلى توصيلها، وهو ما يفعله التوجيه - السطر الأول من البرنامج. يشير الحرف # إلى أنه يجب معالجة السلسلة بواسطة المعالج المسبق للغة C.



السطر الثاني - اسم الوظيفة الرئيسية رئيسي()، هذه الوظيفة لا تُرجع أي معلمات (سأتحدث عن هذا لاحقًا). يحتوي برنامج C دائمًا على وظيفة رئيسي().يبدأ تنفيذ البرنامج به.

السطر الثالث – بداية الجسم الوظيفي . () تحديد نص الدالة (في لغة باسكال، هذه هي البداية والنهاية)

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

السطر الخامس - وظيفة المكتبة - اطبع على الشاشة، والتعبير الموجود بين قوسين على هذا السطر هو معلمة دالة، ويتم اقتباسه دائمًا.

; - هذه إشارة للعامل C، فهو جزء من العامل، وليس عامل فاصل، كما في باسكال.

نصائح حول كيفية جعل البرنامج قابلاً للقراءة:

1) اختيار أسماء ذات معنى

2) استخدم التعليقات

3) استخدم الأسطر الفارغة لفصل جزء من دالة عن جزء آخر

4) ضع كل عبارة على سطر مختلف.

العناصر الأساسية للغة C

دعونا نفكر في العناصر المطلوبة التي يجب أن يتم تصميم برنامج C بها:

1. تعليقات - يستخدم لتوثيق البرنامج. يجب أن يحتوي أي برنامج على تعليقات: ما هي الخوارزمية المستخدمة، وماذا يفعل البرنامج...

Ø 1 الطريق: /* النص */ - في أي مكان في البرنامج.

بمجرد أن يواجه المترجم /**/، فإنه يتخطاها. يتجاهل المترجم /* */ لأنه لا يستطيع ترجمة لغة أخرى غير لغة C. بمعنى، إذا كنت تريد استبعاد بعض الأسطر من الترجمة، فقم بإحاطتها في /**/.

Ø الطريقة 2: إذا كان التعليق كبيرًا، فاستخدم هذا النوع

/* السطر 1 - للتعليق بأي طول

السطر 3*/

Ø 3 طريقة: // - النص إلى نهاية السطر.

2. المعرف هو الاسم الذي تم تعيينه لكائن (متغير). يتم استخدام الأحرف الكبيرة والصغيرة والأرقام والشرطات السفلية. تختلف الأحرف الصغيرة والأحرف الكبيرة. (لا يختلفون في BASIC). إذا قمت باستدعاء اسم متغير أو Name أو NAME، فستكون هذه متغيرات مختلفة.

تبدأ المعرفات بحرف أو شرطة سفلية. على سبيل المثال _الاسم. ولكن لا يوصى بالبدء بـ _، حيث يتم استخدام هذا الحرف للأسماء العامة في لغة C.

في البرمجة الحديثة، غالبًا ما يتم استخدام التدوين المجري لإنشاء معرفات، حيث يتم استخدام رموز معينة لوصف المعرف، على سبيل المثال:

ب - بايت؛ ch - حرف أحادي البايت؛

ث - كلمة؛ و - العلم؛

ل - كلمة طويلة؛ الجبهة الوطنية - وظيفة؛

ش - غير موقعة؛ ع - المؤشر؛

ص – عداد; د - فرق بين اثنين قبل x

تشيكوسلوفاكيا - سلسلة؛ إلخ.

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

البيانات في برنامج SI

يعمل كل برنامج مع بيانات. وهي موجودة في البرنامج على شكل متغيرات وثوابت.

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

البيانات التي تم ضبطها على قيم محددة وتحتفظ بقيمها طوال تشغيل البرنامج، تسمى الثوابت.

الثوابت

الثوابت هي قيم ثابتة. القيمة، بمجرد تعيينها، لا تتغير بعد الآن. الثوابت تأتي في أنواع مختلفة. تختلف الأنواع في مبدأ وضعها في ذاكرة الكمبيوتر، وبالنسبة للشخص في نوع التسجيل. هناك 7 كلمات رئيسية في لغة C تستخدم للإشارة إلى أنواع مختلفة من البيانات: int، long، short، unsigned، char، float، double.

أنواع الثوابت :

أ) الأعداد الصحيحة والأعداد الصحيحة الطويلة . وهي مكتوبة بأنظمة الأرقام العشرية والثمانية والست عشرية. يمكن أن تكون موقعة أو غير موقعة.

النظام العشري: ثوابت عدد صحيح تشغل 16 بت الذاكرة، واتخاذ مجموعة من القيم: -32768 إلى +32767 (2 15) . إذا كان الثابت غير موقع، فسيتم مضاعفة النطاق: 0 إلى 65535(نظرًا لأن الرقم الخامس عشر - الموقع - يستخدم للرقم). يتم استخدام اللاحقة للإشارة إلى رقم غير موقع ش (غير موقعة)، على سبيل المثال 123ش.

إذا كان الرقم أكبر من 40000، فسيقوم المترجم تلقائيًا بتحويله إلى رقم سالب، وبالتالي فإن اللاحقة شالمطلوب: 40000 ش. في المثال 123u، لا يهتم المترجم بوجود لاحقة أم لا، لأن هذا الرقم يقع في النطاق 32767.

عدد صحيح طويل يأخذ 32 بت ، مدى القيمة

± 2147483648 (وقعت طويلة - طويلة). إذا قمت بوضع اللاحقة ل، إذن، على الرغم من العدد، سيتم احتلال 32 بت. على سبيل المثال: -5326 ل

0 – 4294967295 غير موقعة طويلة- (طويل غير موقع). يتم زيادة النطاق بمقدار 31 بت. اللواحق المستخدمة مايعلى سبيل المثال 32659ul.

النظام الثماني:

إذا كان الرقم يبدأ بالرقم 0، فسيتم تفسيره على أنه رقم ثماني

16 بت 0 ¸ 077777

0100000¸ 0177777ش

32 بت 0200000 ¸ 01777777777ل

020000000000 ¸ 037777777777ul

نظام سداسي عشري:

إذا كان الرقم يبدأ بالحرف 0x، فسيتم تفسيره على أنه رقم سداسي عشري

16 بت 0x0000 ¸ 0x7FFF

0x8000 ¸ 0xEFFFu

32 بت 0x10000 ¸ 0x7FFFFFFl

0x80000000 ¸ 0xFFFFFFFFul

ب) ثوابت حقيقية. هذه هي أرقام الفاصلة العائمة. القيمة لها جزء كسري. بشكل افتراضي، تكون كافة الثوابت الحقيقية من النوع المزدوج الدقة مزدوج . تحتل الذاكرة 8 بايت (حتى لو 0.0). مدى من القيم ±1*10 ±307 , ويمكن أيضًا كتابتها بشكل علمي، على سبيل المثال: 0.5e+15 أو

1.2e-3=1.2*10 -8 =0.0012.

يمكنك فرض التنسيق ليكون بدقة واحدة يطفو . سوف يستغرق الرقم 4 بايت ، يتم استخدام اللاحقة F(5.7 و). وبناء على ذلك، يضيق النطاق ±1*10 ±37

وأيضا دقة موسعة مزدوج طويل - 10 بايت . (3.14 لتر)

يمكن حذف علامة +. يُسمح بحذف العلامة العشرية أو الجزء الأسي، ولكن ليس كليهما (.2؛ 4e16). يمكنك حذف الجزء الكسري أو الكامل، ولكن ليس في نفس الوقت (100.; .8e-5)

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

مقسمة إلى مجموعتين: المطبوعة وغير المطبوعة(رموز التحكم). يتضمن ثابت الحرف حرفًا واحدًا فقط، والذي يجب أن يكون محاطًا بفواصل عليا ويشغل 1 بايت ذاكرة.

أي حرف له تمثيل مزدوج خاص به في جدول ASCII. في البرنامج، يتم إدخال ثوابت الأحرف بين علامات اقتباس مفردة، وأثناء التجميع، يتم استبدال القيمة الرقمية للحرف من ASCII في البرنامج. حرف واحد يأخذ 1 بايت.

الحرف "أ" "أ" " ""\n"

رمزها هو 65 97 32 10

كنوع بيانات صحيح "A"=0101 8، 01000001 2، 41 16، 65 10. ليست هناك حاجة لتذكر الرموز.

تبدأ رموز التحكم بحرف \ وتكون أيضًا محاطة بفواصل عليا. رموز التحكم الأكثر شيوعًا هي:

\n – انتقل إلى السطر الجديد

\t – علامة التبويب (إزاحة المؤشر ببعض القيمة الثابتة)

\b - التراجع (إزاحة موضع واحد للخلف)

\r - حرف العودة (العودة إلى بداية السطر)

\f – تغذية النموذج (تغذية الورق في صفحة واحدة)

\' - فاصلة عليا

\" - يقتبس

يمكن أن تعمل الأحرف الثلاثة الأخيرة كثوابت للأحرف ويمكن استخدامها أيضًا في الدالة printf()، لذا فإن استخدامها كأحرف قد يؤدي إلى حدوث خطأ. على سبيل المثال، إذا أردنا إخراج السلسلة "الحرف \ يسمى شرطة مائلة"، فيجب أن يبدو عامل التشغيل كما يلي:

printf("الحرف \\ يسمى شرطة مائلة");

أ) ثوابت السلسلة - تحتوي على تسلسل مكون من حرف واحد أو أكثر داخل " ". يتم إنفاق بايت واحد لأي حرف + بايت واحد لما يسمى بالحرف الصفري - علامة نهاية السطر. الحرف الصفري ليس الرقم صفر، فهذا يعني أن عدد الأحرف في السطر (N) يجب أن يكون 1 بايت أكثر (N+1) للإشارة إلى نهاية السطر (يضيفه المترجم تلقائيًا). على سبيل المثال: "سطر النص" يستهلك (13+1) بايت؛

"عالم" -

يرجى تعليق AdBlock على هذا الموقع.

أتمنى أن تكون قد قمت بالفعل بتثبيت بعض IDE على جهاز الكمبيوتر الخاص بك وتعلمت كيفية تجميع البرامج فيه. إذا لم يكن ثم

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

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

الشكل 1 خريطة "هيكل البرامج في لغة C." مستوى اول.

سنعود طوال الدورة إلى هذه الخريطة ونوضحها ونكملها بعناصر وكتل جديدة.

الآن الاهتمام. لا تخف! يوجد أدناه الكود المصدري لثلاثة برامج بسيطة. مهمتك هي النظر إليها بعناية ومحاولة العثور على نوع من النمط في التعليمات البرمجية الخاصة بها (وهو شيء شائع لدى كل برنامج).

القائمة 1. البرنامج 1. يطبع عبارة "Hello, World!"

#يشمل

القائمة 2. البرنامج 2

int main(void) ( int a, b, c; a = 5; b = 10; c = a+b; return 0; )

القائمة 3. البرنامج 3

#يشمل int main(void) ( FILE *fp; fp = fopen("input.txt", "w"); fprintf(fp, "This is Sparta!"); f Close(fp); return 0; )

خذ وقتك لمشاهدة متابعة الدرس والإجابة الصحيحة على هذه المشكلة. أولا، حاول الإجابة على نفسك. بعد ذلك، انقر على زر "متابعة المشاهدة!".

إذن الجواب: في جميع البرامج المذكورة أعلاه يوجد البناء التالي:

القائمة 4. الوظيفة الرئيسية لأي برنامج C هي الوظيفة الرئيسية.

إنت الرئيسي (باطل) (العودة 0؛)

أي نوع من التصميم هذا؟ هذا هو إعلان الوظيفة الرئيسية. توجد مثل هذه الوظيفة في كل برنامج مكتوب بلغة C. برنامج كبير أو صغير، لعبة كمبيوتر أو برنامج "Hello, World!"، تكتبه أنت أو بيل جيتس - إذا كان البرنامج مكتوبًا بلغة C. لغة C - لها وظيفة رئيسية. هذه، إذا جاز التعبير، هي الوظيفة الرئيسية لبرنامجنا. عندما نقوم بتشغيل برنامج ما، يمكننا أن نفكر فيه على أنه تشغيل الوظيفة الرئيسية للبرنامج.

دعونا نتوقف لثانية واحدة. يبدو أننا اكتشفنا بالفعل شيئًا ما حول بنية برامج C. يجب أن يحتوي أي برنامج C على وظيفة رئيسية. دعونا نعرض هذه الحقيقة على خريطتنا المعرفية "بنية البرامج في لغة C".

الشكل 2 خريطة "هيكل البرامج في لغة C." الوظيفة الرئيسية.

والآن لا تزعجنا الخريطة بفراغها الهائل. دعونا نواصل بحثنا.

دعني أخبرك قليلاً عن الوظيفة الرئيسية وعن الوظائف بشكل عام.

اسم الدالة يسبقه int، وهو اختصار لكلمة integer، والتي تُترجم من الإنجليزية إلى "whole". هذا الترميز يعني أنه عندما تكمل الوظيفة الرئيسية عملها، يجب أن تعيد بعض الأعداد الصحيحة إلى البرنامج المستدعي (في حالتنا، نظام التشغيل). عادة، بالنسبة للوظيفة الرئيسية، هذا هو الرقم صفر، الذي يُعلم نظام التشغيل: "كل شيء على ما يرام. لم تقع أي حوادث."

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

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

يوجد داخل الأقواس المتعرجة وصف للوظيفة الرئيسية، أي. بالضبط ما يفترض أن تفعله هذه الوظيفة.

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

قد تسأل، لماذا بالضبط الصفر؟ والشيطان يعلم! هذه هي الطريقة التي يفعلون بها عادة. يمكنك، من حيث المبدأ، إرجاع بعض الأعداد الصحيحة الأخرى، على سبيل المثال 100، أو -236. ولو كان عددا صحيحا. تذكر حول كثافة العمليات؟ ولذلك كله.

لذلك اكتشفنا الوظيفة الرئيسية. شيء اخر. ما يُكتب بالأقواس المتعرجة يسمى عادةً "جسم الوظيفة" (أو وصف الوظيفة)، والجزء الأول، الذي يسبق الأقواس المتعرجة، يُسمى رأس الوظيفة.

دعونا الآن نعود إلى برنامجنا الأول "Hello, World" ونرى ما هو.

القائمة 5. مرحبًا أيها البرنامج العالمي

#يشمل int main(void) ( printf("Hello, World!\n"); return 0; )

نحن الآن نفهم شيئًا ما في هذا البرنامج. لا يزال هناك سطرين فقط غير واضحين، فلنبدأ بالترتيب.

القائمة 6. التوجيه المتضمن

#يشمل

هذا السطر هو رسالة إلى المترجم. تسمى هذه الرسائل، التي تبدأ بالرمز #، بتوجيهات المترجم. حرفيًا: "قم بتوصيل الملف stdio.h." أثناء الترجمة، سيتم إدراج محتويات الملف stdio.h بدلاً من هذا السطر. الآن دعونا نتحدث قليلا عن هذا الملف. stdio.h (من الإنجليزية STanDart Input Output) هو ملف رأس يصف الوظائف القياسية المختلفة المتعلقة بالإدخال والإخراج.

يطرح سؤال معقول: "لماذا نحتاج إلى كتابة هذا السطر؟ لماذا نحتاج حتى إلى إدراج هذا الملف هنا؟" يعد ذلك ضروريًا حتى نتمكن في برنامجنا من استخدام وظيفة عرض الشاشة القياسية printf().

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

وكذلك يفعل المترجم. عندما يواجه دالة، فإنه يبحث عن وصفها (أي ما يجب أن تفعله وماذا تعني) في بداية البرنامج (من البداية حتى لحظة استخدامها في البرنامج). لذا، تم وصف الدالة printf() في الملف stdio.h. لهذا السبب قمنا بتوصيله. ولكن عندما نقوم بتوصيله، سيتمكن المترجم من العثور على وظيفة printf()، وإلا فسوف يلقي خطأ.

بالمناسبة، حان الوقت لاستكمال خريطة المعرفة لدينا. قبل الوظيفة الرئيسية، سنضيف كتلة أخرى، وهي كتلة لتوصيل ملفات الرأس.

الشكل 3 خريطة "هيكل البرامج في لغة C." حظر لتوصيل ملفات الرأس.

دعونا نواصل برنامجنا.

القائمة 7. وظيفة printf()

printf("مرحبا بالعالم!\n");

في هذا السطر نسمي الدالة printf()‎ القياسية. في هذه الحالة البسيطة، نمررها معلمة واحدة، وهي سلسلة مكتوبة بين علامتي اقتباس يجب عرضها على الشاشة، وفي حالتنا هي Hello, World! \ن. لكن مهلا، ما هذا\n؟ لم يكن هناك \n على الشاشة عند بدء تشغيل البرنامج. فلماذا كتبنا هذا هنا؟ هذا التسلسل عبارة عن حرف خاص، وهو أمر للانتقال إلى السطر التالي. إنه مثل الضغط على مفتاح Enter في برنامج MS Word. هناك العديد من هذه الأحرف الخاصة، وجميعها مكتوبة باستخدام الحرف "\" - شرطة مائلة عكسية. تسمى هذه الأحرف الخاصة أحرف التحكم. ثم سأعرضهم لك مرة أخرى. وإلا فإن ما كتبته بين علامات الاقتباس المزدوجة سيظهر على الشاشة.

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

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

بالمناسبة، نصيحة مفيدة. نظرًا لأن كل برنامج يجب أن يكون له وظيفة رئيسية، وسنحتاج حرفيًا في كل برنامج إلى عرض شيء ما على الشاشة، فإنني أوصي بإنشاء ملف على الفور باستخدام القالب التالي، حتى لا تكتب نفس الشيء في كل مرة.

القائمة 8. القالب القياسي للبرامج بلغة C.

#يشمل إنت الرئيسي (باطل) (العودة 0؛)

حسنا، يبدو أن هذا هو كل شيء. وبهذا يمكن اعتبار الدرس الأول مكتملاً. على الرغم من عدم وجود نقطة أخرى.

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


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

يتكون البرنامج المكتوب بلغة C# من الكتل التالية:

  • إعلان مساحة الاسم (نوع من الحاوية)؛
  • إعلان الفصل (الجوهر الرئيسي للبرنامج)؛
  • أساليب الطبقة (الروتينات الفرعية)، على الأقل طريقة رئيسي;
  • العوامل والتعبيرات؛
  • تعليقات.

مثال على برنامج بسيط

دعونا نلقي نظرة على برنامج بسيط مكتوب بلغة C#. سيكون هذا تطبيقًا لوحدة التحكم يطبع السلسلة "Hello World" (نوع كلاسيكي للبرنامج الأول في ممارسة المبرمج). ويرد أدناه رمز لمثل هذا البرنامج، دعونا نلقي نظرة عليه:

// توصيل نظام مساحة الاسم باستخدام System; // إعلان مساحة الاسم ProgramStructure ( // إعلان فئة البرنامج ( // الطريقة الرئيسية للبرنامج static void Main(string args) ( // إخراج السطر Console.WriteLine("Hello World!"); / / المشغل المساعد Console.ReadKey (; ) ) )

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

السطر الثاني من البرنامج ( باستخدام النظام؛) هو عامل يتضمن مساحة الاسم القياسية نظام. بشكل أساسي، يمكننا الوصول إلى مجموعة من الفئات المتوفرة في "الحاوية" نظام. وكما ترى فإن هذا السطر يتكون من كلمتين الأولى (keyword استخدام) يعني أننا نريد تضمين مساحة الاسم والثانية نظام- اسم مساحة الاسم المطلوبة.

وفي نهاية السطر الثاني يوجد رمز "؛" الذي يشير إلى نهاية العبارة. يجب أن ينتهي كل بيان برنامج بهذا الرمز.

السطر الرابع من البرنامج هو مرة أخرى تعليق، تمامًا مثل الأسطر 7، 10، 13، 15. تبدأ التعليقات في C# بالأحرف "//" (شرطتان مائلتان للأمام، وشرتتان مائلتان)، وتكون صالحة فقط حتى نهاية الخط.

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

في السطر الخامس ( هيكل برنامج مساحة الاسم) يعلن عن مساحة الاسم الخاصة به، ويسمى "ProgramStructure". مساحة الاسم هي نوع من الحاوية، ويتم تحديدها بواسطة الأقواس المتعرجة (تفتح في السطر 6 وتغلق في السطر 19) التي تلي اسمها. وبالتالي، كل ما بين السطرين 6 و 19 ينتمي إلى مساحة الاسم هيكل البرنامج.

يُعلن السطر الثامن عن فئة تسمى "Program"، وهي الفئة الرئيسية والوحيدة لبرنامجنا. كما ترون، يتم استخدام الكلمة الأساسية للإعلان عن فئة فصلمتبوعًا باسم الفصل. قد لا يحتوي البرنامج على فئة واحدة، بل عدة فئات. عادةً، تتكون الفئة من مجموعة من الأساليب التي تحدد ما يسمى بسلوك الفئة (الوظيفة، إذا صح التعبير). تتم الإشارة إلى حدود الفئة، بالإضافة إلى مساحات الأسماء، بواسطة الأقواس المتعرجة (السطران 9 و18). في حالتنا، لدى الفصل طريقة واحدة فقط، هذه هي الطريقة رئيسي.

السطر 11 يعلن فقط عن الطريقة رئيسي. هذه الطريقة هي الطريقة الرئيسية في برنامجنا، ما يسمى بنقطة الدخول إلى البرنامج. هذا يعني أنه عند بدء تشغيل البرنامج، سيتم تنفيذ الطريقة أولاً رئيسي. ولكل طريقة أيضًا حدود، والتي يُشار إليها أيضًا بالأقواس المتعرجة (السطران 12 و17).

طريقة رئيسييحتوي برنامجنا على بيانين فقط. تظهر هذه العبارات في السطرين 14 و16. أول عبارة تطبع الرسالة "Hello World!" والثاني مساعد، فهو يجبر البرنامج على انتظار الضغط على مفتاح على لوحة المفاتيح، ولا يسمح له بإكمال تنفيذه حتى تلك اللحظة (لولا هذا العامل لكان البرنامج قد طبع الخط وأغلق بسرعة ، بحيث لم يكن لدينا حتى الوقت لقراءة ما يخرج).

حاول الآن إنشاء هذا البرنامج وتشغيله في Visual Studio. للقيام بذلك تحتاج:

  • إطلاق فيجوال ستوديو؛
  • إنشاء مشروع تطبيق وحدة تحكم جديد؛
  • انسخ الأسطر 13-16 من المثال أعلاه؛
  • أدخل هذه السطور في الطريقة رئيسيالمشروع الذي تم إنشاؤه في Visual Studio؛
  • اضغط على المفتاح F5.

تحدثت بالتفصيل عن كيفية إنشاء مشروع تطبيق وحدة تحكم في Visual Studion، أنصحك بقراءته.

محاضرة رقم 1

الموضوع: مقدمة إلى لغة C++ عوامل التشغيل وأنواع البيانات

يخطط

3. المتغيرات وأنواعها

4. العوامل والوظائف الرياضية

5. مشغلي الإدخال/الإخراج في C++

6. برنامج مثال في C++

1. تاريخ تطور لغة البرمجة C++

أصبحت لغة C++، التي تجمع بين خصائص لغة C والبرمجة الشيئية، إحدى لغات البرمجة الرئيسية في التسعينيات وتستمر في البقاء كذلك بقوة في بداية القرن الحادي والعشرين. لغة C++ الموروثة من لغة C صفات مثل الكفاءة والاكتناز وسرعة التنفيذ وقابلية نقل البرامج. من البرمجة الشيئية، تلقت لغة C++ منهجية برمجة جديدة تسمح لها بالتعامل مع التعقيد المتزايد لمشاكل البرمجة الحديثة. وتقدم ميزات اللغة مثل القوالب المحسنة منهجية برمجة جديدة أخرى لـ C++: البرمجة العامة. يعد هذا الإرث الثلاثي نعمة ونقمة للغة C++. إنها تجعل اللغة قوية للغاية، ولكنها في نفس الوقت معقدة؛ وهو ما يعني أن المبرمجين يجب أن يتعلموا المزيد.

على مدى العقود القليلة الماضية، تطورت تكنولوجيا الكمبيوتر بوتيرة مذهلة. شهدت لغات البرمجة أيضًا تطورًا كبيرًا. في السبعينيات، ساعدت لغات البرمجة مثل C وPascal على الدخول في عصر البرمجة المهيكلة، مما أدى إلى جلب النظام إلى منطقة كانت في أمس الحاجة إليه. زودت لغة C المبرمج بالأدوات اللازمة للبرمجة المهيكلة، بالإضافة إلى إنشاء برامج مدمجة وسريعة التشغيل والقدرة على معالجة الأجهزة، مثل القدرة على التحكم في منافذ الاتصال ومحركات الأقراص المغناطيسية. ساعدت هذه الصفات لغة C في أن تصبح لغة البرمجة المهيمنة في الثمانينيات. وفي الوقت نفسه، ظهر نموذج برمجي جديد خلال هذه السنوات: البرمجة كائنية التوجه، أو OOP، متجسدة في لغات مثل SmallTalk وC++.

لغة سي

قام كين طومسون، موظف مختبرات بيل، بتطوير لغة B (ثنائية) في عام 1969 لإنشاء أنظمة برمجية أخرى. ومع ذلك، تم تفسير هذه اللغة، والتي لم تسمح بإنشاء ملفات قابلة للتنفيذ مستقلة فيها. ومع ذلك، كانت هذه اللغة هي السابقة للغة S.

في أوائل السبعينيات، كان دينيس ريتشي من مختبرات بيل يعمل على تطوير نظام التشغيل UNIX. وللقيام بهذه المهمة، احتاج ريتشي إلى لغة برمجة موجزة ويمكنها أيضًا التعامل مع الأجهزة بكفاءة وإنشاء برامج مدمجة وسريعة التشغيل. تقليديًا، تم تلبية هذه الاحتياجات للمبرمجين من خلال لغة التجميع، والتي ترتبط ارتباطًا وثيقًا بلغة الآلة الداخلية للكمبيوتر. ومع ذلك، لغة التجميع هي لغة منخفضة المستوى، أي. فهو مرتبط بنوع معين من المعالج (أو الكمبيوتر). لذلك، إذا كان هناك حاجة إلى نقل برنامج لغة التجميع إلى نوع مختلف من الكمبيوتر، فيجب إعادة كتابته مرة أخرى بلغة تجميع أخرى.

تم تصميم نظام التشغيل UNIX ليعمل على مجموعة متنوعة من أنواع أجهزة الكمبيوتر (أو الأنظمة الأساسية). وهذا ينطوي على استخدام لغة عالية المستوى. تركز اللغة عالية المستوى على حل المشكلات، وليس على أجهزة معينة. تقوم برامج خاصة، تسمى المترجمين، بترجمة برنامج بلغة عالية المستوى إلى برنامج باللغة الداخلية لجهاز كمبيوتر معين. وبالتالي، باستخدام مترجم منفصل لكل منصة، يمكن تنفيذ نفس برنامج اللغة عالية المستوى على منصات مختلفة. احتاج ريتشي إلى لغة تجمع بين الكفاءة والوصول إلى الأجهزة للغة منخفضة المستوى مع الطبيعة الأكثر عمومية وقابلية النقل للغة عالية المستوى. لذلك، بناءً على لغة البرمجة B الموجودة، طور ريتشي لغة C. ومن المقبول عمومًا أن مؤلفي اللغة هما ريتشي وطومسون.

لغة C، مثل معظم لغات البرمجة الرئيسية في عصرنا، هي لغة إجرائية.

لغة سي++

مع تطور التكنولوجيا الموجهة للكائنات، لم تعد قدرات لغة C القياسية كافية. وكانت النتيجة لغة C++.

لغة C++، مثل لغة C، هي من بنات أفكار مختبرات Bell. قام المؤلف بيارني ستروستروب بتطوير هذه اللغة في أوائل الثمانينات. وبكلماته الخاصة، "تم تصميم لغة C++ في المقام الأول حتى لا أضطر أنا وأصدقائي إلى البرمجة باستخدام لغة التجميع أو لغة C أو العديد من اللغات الحديثة عالية المستوى. وكان هدفه الرئيسي هو: جعل الأمر أسهل وأكثر متعة للمبرمجين الفرديين لكتابة برامج جيدة."

أنشأ ستروستروب لغة C++ من لغة C لأن لغة C كانت مختصرة، ومناسبة تمامًا لبرمجة الأنظمة، ومتاحة على نطاق واسع، وترتبط ارتباطًا وثيقًا بنظام التشغيل UNIX. تأثر الجزء الموجه للكائنات من لغة C++ بلغة النمذجة Simula67. أضاف ستروستروب عناصر OOP إلى لغة C دون تغيير لغة C نفسها بشكل ملحوظ.

يأتي اسم C++ من عامل الزيادة ++ في لغة C، والذي يضيف واحدًا إلى قيمة المتغير. يشير الاسم C++ إلى أن اللغة هي نسخة محسنة (++) من لغة C.

البرمجة المعممة

البرمجة العامة هي نموذج برمجة آخر تدعمه لغة C++. له هدف مشترك مع OOP - لتبسيط إعادة استخدام رموز البرنامج. ومع ذلك، بينما تركز البرمجة OOP على البيانات، تركز البرمجة العامة على الخوارزميات. ولها مجال آخر للتطبيق. OOP هي أداة لتطوير المشاريع الكبيرة، بينما توفر البرمجة العامة أدوات لأداء المهام العامة مثل فرز البيانات. المصطلح عام يعني إنشاء كود برنامج مستقل عن نوع البيانات. تحتوي لغة C++ على بيانات من أنواع مختلفة - الأعداد الصحيحة، والأرقام ذات الجزء الكسري، والأحرف، وسلاسل الأحرف، والهياكل المعقدة المعرفة من قبل المستخدم والتي تتكون من بيانات من عدة أنواع. على سبيل المثال، إذا كنت بحاجة إلى فرز أنواع مختلفة من البيانات، فعادةً ما تقوم بإنشاء وظيفة فرز منفصلة لكل نوع. تعمل البرمجة العامة على توسيع اللغة بحيث يمكنك كتابة دالة مرة واحدة لنوع بيانات عام (أي غير محدد) ثم استخدامها لمجموعة متنوعة من أنواع البيانات الواقعية. يتم تحقيق ذلك باستخدام قوالب لغة C++. (يبدأ)

2. هيكل البرنامج في C++

يتم بناء برنامج C++ من كتل فردية تسمى الوظائف. عادة، يتم تقسيم البرنامج إلى عدد من المهام الكبيرة، ومن ثم يتم تطوير وظائف فردية لأداء هذه المهام.

تبدو معظم برامج C++ كما يلي:

قسم لتضمين ملفات الرأس

رأس البرنامج (الوظيفة).

الجسم الوظيفي

عنوان البرنامج

يتكون برنامج C++ من وحدة واحدة أو أكثر تسمى الوظائف. يبدأ تنفيذ البرنامج بوظيفة تسمى main()، لذا يجب أن يحتوي البرنامج على دالة بهذا الاسم. إذا لم يكن لدى البرنامج مثل هذه الوظيفة، فلا يوجد برنامج كامل؛ يشير المترجم في هذه الحالة إلى أن الوظيفة الرئيسية () لم يتم تعريفها.

يتم تنفيذ وصف هذه الوظيفة في قسم رأس البرنامج ويتم كتابته بالشكل:

من المهم مراعاة حقيقة أن مترجم C++ حساس لحالة الأحرف. لذلك، سيتم التعرف على اسم الوظيفة المكتوبة في حالة مختلفة (على سبيل المثال: Main() أو MAIN()) على أنه غير صحيح.

قسم اتصال ملف الرأس

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

يحتوي كل برنامج C++ أولاً على توجيه من النموذج:

#يشمل

يؤدي هذا التوجيه إلى قيام المعالج المسبق بإضافة محتويات ملف iostream إلى البرنامج. يعد هذا إجراءً نموذجيًا للمعالج المسبق: إضافة نص أو تغييره في الكود المصدري قبل التجميع.

يؤدي التوجيه #include إلى تمرير محتويات ملف iostream إلى المترجم مع محتويات الملف المصدر. في الأساس، تحل محتويات ملف iostream محل سطر #include في البرنامج . لم يتم تعديل الملف المصدر، وتتم معالجة الملف المدمج الذي تم إنشاؤه من الملف المصدر وملف iostream في خطوة التحويل البرمجي التالية.

تسمى الملفات مثل iostream ملفات التضمين (لأنها مضمنة في ملفات أخرى) أو ملفات الرأس (لأنها مضمنة في بداية الملف). تأتي مترجمات C++ مع العديد من ملفات الرأس، كل منها يدعم مجموعة مختلفة من الأدوات. عادةً ما تحتوي ملفات الرأس في لغة C على الامتداد h، وهذه هي أبسط طريقة لتحديد نوع الملف من خلال اسمه. على سبيل المثال، يدعم ملف الرأس math.h الوظائف الرياضية المتنوعة للغة C++.

توجد ملفات الرأس في المجلد Include الخاص ببيئة تطوير Turbo C++. إذا تلقيت خطأ عند بدء تشغيل البرنامج يشير إلى أن ملف الرأس المضمن مفقود، فأنت بحاجة إلى تكوينه في بيئة Turbo C++. للقيام بذلك، قم بتشغيل الأمر Options – Directorys، وأدخل ..\INCLUDE في حقل Include Directorys، وأدخل ..\LIB في حقل Library Directory.

هيئة الوظيفة

يحتوي نص الوظيفة على تعليمات للكمبيوتر، أي. يحدد ما تفعله الوظيفة فعليًا.

يبدو جسم الدالة كما يلي:

وصف المتغيرات.

العاملين؛

كما ترون، فإن نص الدالة محاط بأقواس متعرجة. سيتم مناقشة وصف المتغيرات في القسم التالي من المحاضرة.

عبارة تمثل تعليمات لجهاز الكمبيوتر. لفهم الكود المصدري، يجب أن يعرف المترجم متى تنتهي عبارة واحدة وتبدأ أخرى. تستخدم بعض لغات البرمجة فواصل البيانات. في باسكال، يتم فصل عبارة واحدة عن التي تليها بفاصلة منقوطة. في بعض الحالات، يمكن حذف الفاصلة المنقوطة في لغة باسكال، على سبيل المثال بعد عبارة قبل الكلمة END، عندما لا يتم فصل العبارتين فعليًا. ولكن في لغة C++، وكذلك في لغة C، يتم استخدام الفاصل (المؤشر) بدلاً من الفاصل. الفاصل هو فاصلة منقوطة تشير إلى نهاية العبارة؛ إنه جزء من عبارة وليس فاصلاً بين البيانات. والنتيجة العملية هي أنه في لغة C++، يجب ألا تحذف الفاصلة المنقوطة أبدًا.

تحدد تعليمات RETURN 0 أن الوظيفة تخرج وتعود إلى برنامج الاستدعاء. قد لا يتم تحديد هذه التعليمات في الوظيفة الرئيسية ().

يمكن استخدام التعليقات في نص البرنامج. في لغة C++، يُشار إلى التعليقات بشرطة مائلة مزدوجة (//). يمكن لبرامج C++ استخدام التعليقات من لغة C، والموجودة بين الرمزين /* و*/.

نظرًا لأن تعليق C لا ينتهي بحرف نهاية السطر، بل بحرف */، فيمكن استمراره على عدة أسطر. يمكن للبرامج استخدام أحد هذين النوعين من التعليقات، أو كليهما معًا. (يبدأ)