Download as pdf or txt
Download as pdf or txt
You are on page 1of 218

Step By step to Learn C or C++ By:Hussien Ahmmed Taleb 1

‫اھدي ھذا الكتاب إلى أمي ومن غير أمي يستحق ھذا اإلھداء فلك يا أمي اھدي ھذا الكتاب‬
‫يا أطيب من رأت عيناي في الدنيا فجزأك & عني وأخوتي خير الجزاء أطال & لنا بعمرك‬ ‫ا‬

‫حسين احمد طالب الربيعي‬


‫العراق‪ /‬جامعة ديالى‬
‫ھندسة الحاسبات والبرمجيات‬
‫المرحلة الرابعة‬
‫‪2011/9/1‬‬
‫المدونة‬
‫‪http://hussienahmmed.blogspot.com/‬‬

‫البريد االلكتروني‬
‫‪hussien89aa@yahoo.com‬‬

‫‪Step By step to Learn C or C++‬‬ ‫‪By:Hussien Ahmmed Taleb‬‬ ‫‪2‬‬


‫يتناول ھذا الكتاب لغة )‪ (c,c++‬بأسلوب تدريسي وبشكل تفصيلي جدا حيث يستطيع منه‬
‫المبتدأ جدا البدء بتعلم ھذه اللغة وكتابة البرامج والمطور يطور قدراته أكثر وتجد انه عند‬
‫كتابة أي برنامج سيوضح لك الخطوات البرمجية وكيف حدثت‬

‫ھناك مرفقات مع الكتابة لكي تكتمل الطريقة التعليمية بشكل صحيح وھي‬
‫• مجموعة كبيرة من األمثلة المحلولة بكتاب مرفق‬

‫• برنامج تعليمي مصمم )‪ (vb.net2008‬يقوم باختبار قدراتك في لغة البرمجة ) ‪(c ,c++‬‬

‫‪Stephttp://www.4shared.com/account/dir/z01ovuue/_online.html?rnd=80#dir=83250388‬‬
‫‪By step to Learn C or C++‬‬ ‫‪By:Hussien Ahmmed Taleb‬‬ ‫‪3‬المرفقات بھذا الرابط‬
‫كثيرا منا من يجد صعوبة في كتابة البرامج أو انه يعرف كل شيء وفاھم لكل مكونات تلكم‬
‫اللغة ولكن ال يعرف كيف يربط بين تلكم المحتويات كتلك التي تعرف مكونات كل أكلة وكيفية‬
‫تكوينھا لكنھا ال تجيد الطبخ اعلم أن الكثير منمن سيقرأ ھذه األسطر يجد أنھا تطبق عليه‬
‫وال عجب فانا كنت كذالك يوما ما إذن فأين الحل ‪..‬؟‬
‫مادمنا قريبين من الطبخ كانت أمي إذا أرادت أن تحضر أكلة )الدولمة( كانت تحضر أوال مكونات‬
‫ھذه الطبخة وھي البصل وورق العنب والرز وما إلى ذالك وبعد أن تنتھي من تحضير‬
‫كل تلكم األدوات تبدأ بتكوين ھذه األكلة فطابت يديك يا أماه‬
‫فالبرمجة مشابھة تماما لصناعة أكلة ما فعندما ُنسال سؤال بداية نحلل السؤال ونحضر متطلباته‬
‫تم نقوم بربط ھذه المتطلبات مع بعضھا ونكون برنامجا أي شيء شبيه بالخوارزمية لكل حل فعلى‬
‫سبيل المثال لو جاءنا سؤال يطلب فيه جمع عددين يدخلھما المستخدم فبداية التحليل من السؤال نفھم‬
‫يدخل عددين لذالك نحتاج إلى متغيرين كل متغير يمثل عدد معين من الذي سوف ندخله وبما انه‬
‫قال يدخلھما المستخدم يجب أن نعمل دالة إدخال من شاشة التنفيذ إلى ھذان المتغيران تم يأتي‬
‫بعدھما من متطلبات السؤال جمع أي البد من وجود وتعريف متغير ثالث نخزن فيه نتيجة الجمع‬
‫التي سوف نقوم بھا ثم نطبع ھذه النتيجة‪ .‬أالن بعد تحليل المتطلبات نسلسل الخطوات على ورقة‬
‫بشكل مشابه لكتابة البرنامج بشكل التالي‬
‫‪.١‬تعريف متغيرات )‪.٢ (a,b,c‬ندخل )‪ (a,b‬من شاشة التنفيذ ‪.٣‬نجمعھم )‪.٤ (c=a+b‬نطبعھم‬

‫>‪#include<iostream.h‬‬
‫أالن نحول ھذه المتطلبات إلى برنامج‬
‫)(‪mian‬‬
‫{‬
‫;‪1.int a,b,c‬‬
‫;‪2.cin>>a>>b‬‬
‫;‪3.c=a+b‬‬
‫};‪4.cout<<c‬‬ ‫كما الحظت كيف كونا البرنامج وصحيح ‪100%‬‬
‫‪Step By step to Learn C or C++‬‬ ‫‪By:Hussien Ahmmed Taleb‬‬ ‫‪4‬‬
‫الفصل األول ‪ :‬التعرف على أساسيات اللغة وطريقة كتابة أول برنامج لك‬

‫الفصل الثاني‪ :‬الجمل الشرطية والعبارات الشرطية)‪(if ,Switch‬‬

‫الفصل الثالث‪ :‬عبارات أو جمل التكرار)‪(For , While , Do—While‬‬

‫الفصل الرابع‪ :‬المصفوفات وأنواعھا )‪(Array‬‬

‫الفصل الخامس‪ :‬الدوال ) ‪(Function‬‬

‫الفصل السادس‪ :‬المؤشرات ) ‪(pointer‬‬

‫الفصل السابع‪ :‬التراكيب )‪(Structures‬‬

‫الفصل الثامن‪:‬الملفات )‪(File‬‬

‫‪Step By step to Learn C or C++‬‬ ‫‪By:Hussien Ahmmed Taleb‬‬ ‫‪5‬‬


‫ 
        ‬

‫المستوى المطلوب‬
‫ٔ‬
‫مبتدئ جدا ال يعرف اي شيء عن هذه اللغة فما فوق ذالك‬

‫ٔ‬
‫االهداف‪:‬‬
‫ٔ‬ ‫ٔ‬
‫عندما يكـتمل الفصل تكون بإذن ﷲ قد اتممت التعرف علﻰ اﺴاﺴيات هذه اللغة ومبادئها وطرق تسلسل‬
‫خطوات البرنامج‬

‫ٔ‬
‫مستوى االداء المطلوب بعد إنهاء الفصل‬
‫إتقان هذه الفصل إتقان كامل الن بقية الفصول جميعها تعتمد بشكل مباشر علﻰ هذا الفصل‬

‫ٔ‬
‫االدوات المطلوبة‪:‬ﺣاﺴوب شخصي لتجربة البرامج وقلم ودفتر لتسجيل المالﺣظات‬

‫ٔ‬
‫الوقت المطلوب ‪ :‬اربعة ﺴاعات‬

‫‪Step By step to Learn C or C++‬‬ ‫‪By:Hussien Ahmmed Taleb‬‬ ‫‪6‬‬


‫الھيكلية العامة للبرنامج ‪:‬‬
‫للبرنامج في لغة ) ‪ (c , c++‬شكل عام عند كتابته وھو ثابت تقريبا في أجزائه الرئيسية في كل البرامج وتكون‬
‫طريقة كتابته بشكل التالي‬

‫‪C++‬‬ ‫الكود بلغة‬


‫منطقة التعريفات العامة واستدعاء مكاتب للبرنامج‬
‫>‪# include<iostream.h‬‬
‫الدالة التي تكتب بداخلھا اكواد البرنامج‬
‫)(‪Main‬‬
‫{‬
‫ساحة االكواد أو منطقة كتابة اكواد البرنامج والقراءة والطباعة‬
‫}‬

‫‪C‬‬ ‫الكود بلغة‬


‫منطقة التعريفات العامة واستدعاء مكاتب للبرنامج‬
‫>‪# include<stdio.h‬‬
‫الدالة التي تكتب بداخلھا اكواد البرنامج‬
‫)(‪Main‬‬
‫{‬
‫ساحة االكواد أو منطقة كتابة اكواد البرنامج والقراءة والطباعة‬
‫}‬

‫• منطقة التعريفات العامة واستدعاء مكاتب للبرنامج‪ :‬في ھذا المكان يتم كتابة جميع المكاتب التي سنحتاج‬
‫إليھا داخل البرنامج وكذالك المتغيرات التي تعرف بشكل عام لكل البرنامج والسجالت والدوال على سبيل‬
‫المثال دالة القراءة والطباعة )‪ (scanf ,printf‬في لغة ‪ C‬تقع ضمن المكتبة >‪ <stdio.h‬لذالك يجب‬
‫استدعاء ھذه المكتبة لكي تعمل ھذه الدوال ودالة )‪ (cout , cin‬تقع ضمن مكتبة >‪.<iostream.h‬‬

‫• دالة )‪:(main‬ھذه الدالة يسلم نظام التشغيل العمل لھا وعندما ننتھي وظيفتھا ترجع له قيمة‬

‫• ساحة كتبة األكواد‪ :‬ھي المنطقة التي يتم بداخلھا كتابة األكواد البرمجية وتعريفات وغيرھا‬

‫يجب وضع فارزة منقوطة في نھاية أي تعبير مبرمج من قبل المستخدم للداللة على أن التعبير انتھى ‪.‬‬ ‫•‬

‫‪Step By step to Learn C or C++‬‬ ‫‪By:Hussien Ahmmed Taleb‬‬ ‫‪7‬‬


‫المتغيرات ‪:‬‬
‫ھي مواقع في الذاكرة تخزن فيھا قيم معينة قد تتغير أثناء البرنامج أو قد تبقى ثابتة‪ .‬وأسماء المتغيرات تكون مفتوحة‬
‫حسب الرأي الشخصي المبرمج ممكن أن يسميھا إي اسم لكن يجب أن ال يكون االسم من األسماء المحجوزة مثل‬
‫)‪ ( if,for,while‬أو أي أسم أخر محجوز من قبل المترجم ورغم أن تسمية المتغيرات مفتوحة لكن يفضل أن تكون‬
‫تسمية المتغير دالة عليه مثال لو كان المتغير يدل على الوقت فيفضل تسميته )‪ (time‬حتى تكون اكوادك واضحة‬
‫وحتى ال يكون برنامجك متشابك كمعكرونة االسبكتي ال يعرف القارئ بدايته من نھايته‪.‬‬

‫ المتغير الذي يتم تعريفه داخل البرنامج يجب تحديد نوعه‪.‬‬


‫ فمثال لو كان المتغير ) ‪ ( x‬يحوي قيمة متغير رقمي بدون فارزة بعد الصفر فيجب تعريفه تحت الدالة‬
‫)(‪ main‬بأنه متغير من نوع )‪ (integer‬ھكذا‬

‫‪c++‬‬ ‫البرمجة بلغة‬ ‫‪c‬‬ ‫البرمجة بلغة‬


‫>‪# include<iostream.h‬‬ ‫>‪# include<stdio.h‬‬
‫)(‪Main‬‬ ‫)(‪Main‬‬
‫{‬ ‫{‬
‫ھنا تعرف المتغيرات‪//‬‬ ‫ھنا تعرف المتغيرات‪//‬‬
‫;‪int x‬‬ ‫;‪int x‬‬
‫}‬ ‫}‬
‫ويخزن المتغير )‪ (x‬في الذاكرة بشكل التالي‬
‫الذاكرة‬

‫موقع تخزين المتغير في‬


‫الذاكرة‬

‫‪x‬‬

‫• كل موقع في الذاكرة يكون مرقم برقم معين يختلف عن غيره من المواقع‬

‫ ھناك عدة أنواع من المتغيرات يمكن تعريف المتغيرات بھا وھي‬

‫استخدامه‬ ‫تعريف المتغير‬


‫يستخدم لتعريف المتغير من نوع ‪ integer‬أي رقمي مثال )‪(int x=5‬‬ ‫;‪Int var‬‬
‫يستخدم لتعريف المتغير من نوع كسري مثال );‪(Float var=5.4‬‬ ‫;‪Float var‬‬
‫يستخدم لتعريف المتغير من نوع حرفي مثال );"‪(Char var="a‬‬ ‫;‪Char var‬‬
‫يستخدم لتعريف المتغير من نوع ‪ Double‬أي حقيقي‬ ‫;‪Double var‬‬
‫يستخدم لتعريف المتغير من نوع ‪ Void‬أي ال يرجع أي قيمة‬ ‫;‪Void var‬‬

‫‪Step By step to Learn C or C++‬‬ ‫‪By:Hussien Ahmmed Taleb‬‬ ‫‪8‬‬


‫ يمكن تعريف أكثر من متغير في سطر واحد بوضع فارزة بينھم‬

‫الكو د‬
‫;‪char x,y,z‬‬

‫ المتغيرات )‪ (x,y,z‬ھي متغيرات تستطيع أن تخزن في داخلھا حرف‬

‫ يمكن أن يسند المتغير بقيمة مباشرة إثناء وقت التعريف ھكذا‬

‫الكو د‬
‫;‪int x=5‬‬

‫‪X=5‬‬

‫ قد يسند المتغير بقيمة معينة بعد التعريف في أي مكان في البرنامج ‪.‬‬

‫الكو د‬
‫;‪char symbol‬‬
‫;'‪symbol ='a‬‬

‫'‪symbol ='a‬‬

‫ المتغير )‪ (symbol‬تم تخزين في داخله الحرف )‪. (a‬‬


‫• الحروف عندما تخزن تضع بين عالمة تنصيصية واحد‬

‫ قد نسند قيمة متغير إلى متغير أخر‬


‫الكو د‬
‫;‪int first ,second‬‬
‫;‪first =51‬‬
‫; ‪second= first‬‬
‫ أصبح المتغير ‪ second‬يحوي نفس قيمة المتغير ‪ first‬في الخطوة رقم )‪(٣‬‬

‫ أو قد يسند التغير بقيمة في وقت اإلدخال من لوحة المفاتيح )سنتطرق عليه الحقا(‬

‫‪Step By step to Learn C or C++‬‬ ‫‪By:Hussien Ahmmed Taleb‬‬ ‫‪9‬‬


‫إسناد قيم للمتغيرات‪ :‬تكون طريقة إسناد إي قيمة أو تعبير رياضي إلى متغير بشكل التالي‬

‫متغير أو تعبير رياضي=اسم المتغير‬

‫• في الطرف األيمن من المساواة يوجد فقط اسم المتغير الذي نريد إسناد قيم إليه‬
‫• في الطرف األيسر من المساواة نستطيع كتابة إي تعبير رياضي أو متغير أو قيمة معينة‬

‫مثال ‪ :‬إسناد قيمة تعبير رياضي إلى متغير )بطريقة صحيحة(‬


‫الكو د‬
‫;‪1.int y, x=5‬‬
‫;‪2.y=x+3‬‬

‫• في الخطوة رقم )‪ (٢‬أسندنا القيمة الناتجة من تعبير رياضي وھو )‪ (x+3‬إلى المتغير )‪(y‬‬

‫‪+‬‬

‫• لو تالحظ أن الطرف األيمن مكون من متغير فقط والطرف األيسر مكون من تعبير رياضي‬

‫مثال ‪ :‬إسناد قيمة تعبير رياضي إلى متغير )بطريقة خاطئة(‬


‫الكو د‬
‫;‪1.int y, x=5‬‬
‫;‪2.y+2=x+3‬‬

‫• في الخطوة رقم )‪ (٢‬أسندنا القيمة الناتجة من تعبير رياضي وھو )‪ (x+3‬إلى تعبير رياضي أخر‬
‫وھذه الشيء خاطئ وال يقبله المترجم‬

‫‪+‬‬

‫‪Step By step to Learn C or C++‬‬ ‫‪By:Hussien Ahmmed Taleb‬‬ ‫‪10‬‬


‫المتغيرات الثابتة‪ :‬ھي متغيرات تبقى قيمتھا ثابتة إثناء تنفيذ البرنامج وال تتغير أبدا وتعرف بوضع كلمة )‪(const‬‬
‫قبل تعريف نوع المتغير‪ .‬وفائدتھا نستخدمھا للمتغيرات التي ال نريد أن تتغير قيمتھا إثناء عمل البرنامج أبدا‪ .‬مثال‬
‫قيمة ) ‪ (pi=3.14‬ھذه قيمة رياضية وال تتغير ابد مھما حدث ودائما نحتاجھا في البرامج الرياضية لذالك نعرفھا‬
‫)‪ (const‬ونعطيھا قيمة )‪ (3.14‬سنضمن ألنفسنا أنھا ال تتغير مھما حدث وأينما نحتاجھا نكتب فقط ) ‪(pi‬‬

‫الكو د‬
‫;‪const float pi=3.14‬‬

‫مھم‬

‫احد أكثر األسئلة أھمية وھي كيفية تنفيذ البرنامج في لغات البرمجة ؟‬
‫ھذا السؤال قاتل كسيف إذا لم تفھمه لن تفھم شيء من الحقيه‪ .‬ويبدءا تنفيذ البرنامج من الدالة )(‪ main‬ينفذ‬
‫البرنامج سطر ثم ينتقل إلى السطر الذي يليه )الحظ تسلسل الترقيم في المثال( ويستمر ھكذا حتى يصل إلى نھاية‬
‫البرنامج وأي مكتبة يحتاجھا أو أي دالة يحتاجھا يتجه ليبحث عنھا خرج ھذه الدالة‬
‫كيفية تسلسل تنفيذ خطوات البرنامج‬
‫‪# include<iostream.h> //or #include <stdio.h> for user of C language‬‬
‫)(‪Change_position‬‬
‫{‬
‫‪6.‬‬
‫‪7.‬‬
‫‪8.‬‬
‫عندما انتھى من تنفيذ ما موجود في الدالة يعود إلى البرنامج الرئيسي جاعال خطوة التنفيذ التالية‬
‫بعد ھي )‪ (٨‬وھي )‪ (٩‬ويستمر البرنامج‬
‫}‬
‫من ھنا يبدأ تنفيذ البرنامج خطوة بخطوة )ھذه أول خطوة(‬
‫)(‪Main‬‬
‫{‬
‫الخطوات الموجودة ضمن ھذه الدالة ينفذھا تباعا)ھذه األرقام ھي اسطر برمجية (‬ ‫مھم‬
‫‪1.‬‬
‫‪2.‬‬
‫‪3.‬‬
‫‪4.‬‬
‫الحظ في السطر الخامس احتاج دالة تقع خارج ‪ Main‬نقل تنفيذ البرنامج لھا أصبح الخطوة)‪(٦‬‬
‫عندھا‬
‫)(‪5.Change_posi7on‬‬
‫‪9.‬‬
‫‪10‬‬
‫‪11.‬‬
‫}‬

‫‪Step By step to Learn C or C++‬‬ ‫‪By:Hussien Ahmmed Taleb‬‬ ‫‪11‬‬


‫مھم‬
‫ماذا يحدث لو ساوينا متغير من نوع ‪ integer‬بأخر من نوع ‪ float‬كل الذي يحصل‬
‫ھو أن المتغير ‪ integer‬سوف يأخذ الرقم فقط القبل الصفر وبھمل الذي بعده‬

‫مثال‪ :‬برنامج لتحميل قيمة متغير من نوع ‪ integer‬إلى متغير من نوع ‪float‬‬

‫‪c++‬‬ ‫البرمجة بلغة‬ ‫‪c‬‬ ‫البرمجة بلغة‬


‫>‪#include<iostream.h‬‬ ‫>‪#include<stdio.h‬‬
‫)(‪main‬‬ ‫)(‪main‬‬
‫{‬ ‫{‬
‫;‪int fixOnly‬‬ ‫;‪int fixOnly‬‬
‫;‪float fixAndPint=3.5‬‬ ‫;‪float fixAndPint=3.5‬‬
‫;‪fixOnly =fixAndPint‬‬ ‫;‪fixOnly =fixAndPint‬‬
‫;‪cout<<fixOnly‬‬ ‫;)‪printf("%d",fixOnly‬‬
‫}‬ ‫}‬
‫توضيح الخطوات ‪:‬‬

‫‪.١‬في السطر األول استدعينا مكتبة التعاريف التي تخص اللغة‬

‫‪.٢‬في السطر الثاني دالة ‪ Main‬التي وصفناھا سابقا وفي السطر الثالث فتحنا قوس بداية البرنامج‬

‫‪.٣‬في السطر الرابع عرفنا متغير ‪ fixOnly‬من نوع ‪integer‬‬

‫‪.٤‬في السطر الخامس عرفنا متغير ‪ float fixAndPint‬من نوع ‪ float‬وأسندنا له قيمة ‪٣.٥‬‬

‫‪.٥‬في السطر السادس ساوينا المتغير ‪ fixOnly‬من نوع ‪ integer‬بالمتغير ‪ float fixAndPint‬من نوع ‪float‬‬
‫فأصبح المتغير ‪ fixOnly‬من نوع ‪ integer‬يحمل فقط قيمة الجزء الصحيح للمتغير ‪ float fixAndPint‬من نوع‬
‫‪float‬‬

‫والسطر الثامن أغلقنا البرنامج‬ ‫‪.٦‬في السطر السابع طبعنا قيمة المتغير‪fixOnly‬‬

‫ نالحظ إن المتغير ‪ fixOnly‬سوف تصبح قيمته )‪ (٣‬فقط رغم الذي ساويناه فيه ھوا )‪ (٣.٥‬والذي سيظھر‬
‫في شاشة التنفيذ ھوا )‪(٣‬‬
‫ نالحظ وجود )‪ (cout,printf‬ھذه الدوال تستخدم لعرض الناتج على شاشة التنفيذ للمستخدم وتسمى دوال‬
‫اإلخراج وھذه ما سنتناوله أالن‪.‬‬

‫ في دالة الطباعة في لغة ‪ C‬استخدمنا الرمز "‪"%d‬الن ما سنطبعه ھو متغير من نوع ‪ integer‬وھذه ما‬
‫ستفھمه من الجدول رقم ‪.١‬‬

‫‪Step By step to Learn C or C++‬‬ ‫‪By:Hussien Ahmmed Taleb‬‬ ‫‪12‬‬


‫دوال اإلخراج‪:‬‬
‫ھي دوال تستخدم لعرض نواتج العمليات أمام المستخدم في شاشة التنفيذ والدوال ھي‪.‬‬

‫‪C++‬‬ ‫الدالة المستخدمة في لغة‬


‫;‪cout>>var‬‬

‫‪C‬‬ ‫الدالة المستخدمة في لغة‬


‫;)‪printf("%symbleToVar",var‬‬

‫• أي لكل لغة لھا دوال خاصة في اإلدخال وھو االختالف األكثر شيوعا بين ھاتين اللغتين ھي ودوال اإلدخال‬
‫أما بقية الدوال فتتشابه كثيرا جدا في ما بينھا‪.‬‬
‫• )‪ (var‬ھو اسم المتغير الذي سوف نقوم بطباعة قيمته‬
‫• )‪ (symbleToVar‬ھي رموز تستخدم للداللة على نوع المتغير المراد طباعته وھذا جدول بالرموز‬

‫جدول )‪(١‬‬ ‫)ھذا الجدول فقط موجود بلغة ‪(C‬‬ ‫وصفه‬ ‫الرمز‬
‫المتغير ‪ var‬عبارة عن متغير رقمي‬ ‫;)‪printf ("%d",&var‬‬
‫المتغير ‪ var‬عبارة عن متغير كسري‬ ‫;)‪printf ("%f",&var‬‬
‫المتغير ‪ var‬عبارة عن حرف‬ ‫;)‪printf ("%c",&var‬‬
‫المتغير ‪ var‬عبارة عن ﺳلسلة‬ ‫;)‪printf ("%s",&var‬‬
‫ لتنفيذ البرنامج نضغط )‪ (ctrl+f9‬بعد كتابة الكود‪ .‬لنرى النتائج‬

‫مثال‪ :‬لو أردنا طباعة قيمة المتغير )‪ (data3‬وھو من نوع ‪integer‬‬

‫‪c++‬‬ ‫البرمجة بلغة‬


‫;‪cout<< data3‬‬

‫‪c‬‬ ‫البرمجة بلغة‬


‫;)‪Printf("%d", data3‬‬
‫ استخدمنا الرمز )"‪ (" %d‬في لغة )‪ (C‬الن المتغير الذي سنطبع قيمته من نوع ‪integer‬‬

‫كتابة برنامجك األول‪:‬‬


‫مثال ‪ :‬لو أردنا طباعة )‪ (hi hussien ahammed taleb‬أمام المستخدم فيكون الكود كالتالي‬

‫‪c++‬‬ ‫البرمجة بلغة‬ ‫‪c‬‬ ‫البرمجة بلغة‬


‫>‪#include<iostream.h‬‬ ‫>‪#include<stdio.h‬‬
‫)(‪main‬‬ ‫)(‪main‬‬
‫{‬ ‫{‬
‫;"‪cout<<" hi hussien ahammed taleb‬‬ ‫;)"‪printf(" hi hussien ahammed taleb‬‬
‫}‬ ‫}‬

‫‪Step By step to Learn C or C++‬‬ ‫‪By:Hussien Ahmmed Taleb‬‬ ‫‪13‬‬


‫أالن لننفذ البرنامج بالضغط على )‪ (ctrl+f9‬أو )‪ (run‬من القائمة ﺳيظھر الشكل التالي في شاشة التنفيذ‬

‫مھم‬

‫نالحظ ‪:‬أي جملة نصية يجب وضعھا بين عالمتي تنصيص عند طباعتھا في دوال الطباعة‪.‬‬
‫• لو أردنا وضع كل كلمة في ﺳطر فقط نستخدم القالب "‪ "\n‬بين كل كلمة حيث يقوم ھذه القالب بإنزال المؤشر‬
‫في شاشة التنفيذ إلى السطر التالي ولذالك ما يتم طباعته بعده يطبع في السطر التالي الذي عليه المؤشر‬
‫‪c++‬‬ ‫البرمجة بلغة‬ ‫‪c‬‬ ‫البرمجة بلغة‬
‫>‪#include<iostream.h‬‬ ‫>‪#include<stdio.h‬‬
‫)(‪main‬‬ ‫)(‪main‬‬
‫{‬ ‫{‬
‫;"‪cout<<" hi\nhussien\nahammed\ntaleb‬‬ ‫;)"‪Printf(" hi\nhussien\nahammed\ntaleb‬‬
‫}‬ ‫}‬

‫أالن لننفذ البرنامج ﺳيطبع الشكل التالي في شاشة التنفيذ‬

‫لو تالحظ كل )"‪ ("\n‬يقوم بإنزال مؤشر الطباعة إلى ﺳطر جديد ليطبع‬
‫ما بعده في السطر الجديد‬

‫ ھناك بعض الرموز التي تستخدم في دوال الطباعة لترتيب شاشة الطباعة أمام المستخدم بطرق مختلفة فمنھا‬
‫من يضيف فراغات ومنھا من يرتب عمودي وغيرھا وھذا جدول بتلك الرموز‬

‫بعض العالمات المھمة في الطباعة وترتيب الشاشة أمام المستخدم )ھذه العالمات مھمة في الطباعة(‬

‫وظيفته‬ ‫الرمز‬
‫ترتيب عمودي‬ ‫‪\v‬‬
‫ترتيب أفقي‬ ‫‪\h‬‬
‫أنزال المؤشر إلى ﺳطر جديد‬ ‫‪\n‬‬
‫وضع أربع فراغات خلف العنصر التي تمت طباعته حاليا‬ ‫‪\t‬‬

‫في نفس المثال السابق لو أردنا أن يطبع بين كل كلمة وأخرى أربع فراغات فقط نبدل "‪ "\n‬ب "‪ "\t‬في دالة الطباعة‬

‫‪c++‬‬ ‫البرمجة بلغة‬ ‫‪c‬‬ ‫البرمجة بلغة‬


‫;"‪cout<<" hi\t hussien\t ahammed\t taleb‬‬ ‫;)"‪Printf(" hi\t hussien\t ahammed\t taleb‬‬

‫‪Step By step to Learn C or C++‬‬ ‫‪By:Hussien Ahmmed Taleb‬‬ ‫‪14‬‬


‫مثال‪:‬إذا أردنا طباعة قيمة متغير تم إﺳناد قيمة إليه وقت تعريفه ‪.‬‬

‫‪c++‬‬ ‫البرمجة بلغة‬ ‫‪c‬‬ ‫البرمجة بلغة‬


‫>‪#include<iostream.h‬‬ ‫>‪#include<stdio.h‬‬
‫)(‪Main‬‬ ‫)(‪Main‬‬
‫{‬ ‫{‬
‫;‪float fixAndPint=3.5‬‬ ‫;‪float fixAndPint=3.5‬‬
‫; ‪cout<< fixAndPint‬‬ ‫; )‪printf("%f", fixAndPint‬‬
‫}‬ ‫}‬

‫‪.١‬بما أن المتغير من نوع )‪ (float‬الحظنا وجود "‪ "%f‬في لغة )‪ (C‬داللة على أن المغير كسري الذي ﺳوف يتم‬
‫طباعته‬

‫‪.٢‬الناتج في شاشة التنفيذ لھذا البرنامج يكون فقط )‪ (3.5‬الشيء أخر‬

‫لو أردنا أن يعرض في شاشة التنفيذ ھكذا‬ ‫•‬

‫‪Number_is=3.5 $‬‬
‫في لغة ‪ C++‬الموضوع ﺳھل فقط نطبع )=‪ (Number_is‬بشكل ﺳلسلة قبل المتغير) ‪(fixAndPint‬‬
‫ونطبع) ‪ ($‬بعد المتغير أيضا بشكل سلسلة وبھذا يصبح الكود ھكذا‬

‫‪C++‬‬ ‫الكود بلغة‬


‫>‪#include<iostream.h‬‬
‫)(‪Main‬‬
‫;‪{float fixAndPint=3.5‬‬ ‫مھم‬
‫}; "‪cout<<" Number_is="<< fixAndPint<<"$‬‬

‫إما في لغة )‪ (C‬فأن إي ﺳلسلة قبل )"‪("%symbleToVar‬الخاص بالمتغير يطبع قبل المتغير في شاشة التنفيذ وأي‬
‫ﺳلسلة بعده تطبع بعد المتغير‬

‫‪C‬‬ ‫الدالة المستخدمة في لغة‬


‫;)‪printf("%symbleToVar",var‬‬

‫ونعلم انه كل متغير عند طباعته له )‪ (symbleToVar‬خاص به حسب نوعه‪) .‬وبھذه يصبح الكود بلغة )‪ (C‬ھكذا(‬

‫‪C‬‬ ‫الكود بلغة‬


‫>‪#include<stdio.h‬‬
‫)(‪Main‬‬
‫;‪{float fixAndPint=3.5‬‬
‫}; )‪printf(" Number_is=%f$", fixAndPint‬‬

‫‪Step By step to Learn C or C++‬‬ ‫‪By:Hussien Ahmmed Taleb‬‬ ‫‪15‬‬


‫دوال اإلدخال ‪:‬‬
‫تستخدم دوال اإلدخال إلدخال معلومات من قبل المستخدم من شاشة التنفيذ وإسناد قيم إلى المتغيرات المعرفة داخل‬
‫البرنامج من خالل إدخال المستخدم لقيمھا لغرض معالجتھا القيام بالعمليات المطلوبة‪.‬‬

‫‪C++‬‬ ‫الكود بلغة‬


‫;‪Cin>>var‬‬

‫‪C‬‬ ‫الكود بلغة‬


‫;)‪scanf("%symbleToVar",&var‬‬

‫• )‪ (var‬ھو قيمة المتغير الذي سوف يقوم المستخدم بادخاله‪.‬‬


‫• )‪ (symbleToVar‬ھي رموز تستخدم للداللة على نوع المتغير المدخل وھذا جدول بالرموز‪.‬‬

‫جدول )‪(٢‬‬ ‫)ھذا الجدول فقط موجود بلغة ‪(C‬‬ ‫وصفه‬ ‫الرمز‬
‫المتغير ‪ var‬عبارة عن متغير رقمي‬ ‫;)‪scanf("%d",&var‬‬
‫المتغير ‪ var‬عبارة عن متغير كسري‬ ‫;)‪scanf("%f",&var‬‬
‫المتغير ‪ var‬عبارة عن حرف‬ ‫;)‪scanf("%c",&var‬‬
‫المتغير ‪ var‬عبارة عن ﺳلسلة‬ ‫;)‪scanf("%s",&var‬‬

‫نستطيع إدخال أكثر من متغير في دالة إدخال واحدة‬

‫‪C++‬‬ ‫الكود بلغة‬


‫;‪cin>>var1>>var2‬‬

‫‪C‬‬ ‫الكود بلغة‬


‫;)‪scanf("%symbleToVar %symbleToVar ",&var1,&var2‬‬

‫• كما مبين بالرسم المؤشر باألسھم كل متغير وله )‪ (%symbleToVar‬خاص به‬


‫مھم‬

‫مثال‪ :‬إذا كان لدينا المتغير )‪ (x‬من نوع )‪ (float‬وأردنا إدخال قيمه له من شاشة التنفيذ سيكون الكود بشكل التالي‬

‫‪C++‬‬ ‫الكود بلغة‬


‫;‪cin>> x‬‬

‫‪C++‬‬ ‫الكود بلغة‬


‫;)‪scanf("%f",& x‬‬
‫ استخدمنا الرمز )"‪ (" %f‬في لغة )‪ (C‬الن المتغير الذي سنطبع قيمته من نوع )‪(float‬‬

‫‪Step By step to Learn C or C++‬‬ ‫‪By:Hussien Ahmmed Taleb‬‬ ‫‪16‬‬


‫مثال‪ :‬لو أردنا أن يقوم المستخدم بإدخال حرف ويطبع الحرف أمامه بين قوسين إي لو ادخل ‪ a‬سوف يطبع في‬
‫شاشة التنفيذ )‪(a‬‬

‫‪c++‬‬ ‫البرمجة بلغة‬ ‫‪c‬‬ ‫البرمجة بلغة‬


‫>‪#include<iostream.h‬‬ ‫>‪#include<stdio.h‬‬
‫)(‪main‬‬ ‫)(‪main‬‬
‫{‬ ‫{‬
‫;‪1.char enterchar‬‬ ‫;‪1.char enterchar‬‬
‫;‪2.cin>> enterchar‬‬ ‫;) ‪2.scanf("%c",& enterchar‬‬
‫; ")"<< ‪3.cout<<" ("<< enterchar‬‬ ‫; )‪3.prinC(" (%c)", enterchar‬‬
‫}‬ ‫}‬

‫توضيح الخطوات‪:‬‬

‫‪.١‬خطوة رقم )‪ (١‬عرفنا متغير من نوع حرفي‬

‫‪ .٢‬خطوة رقم )‪ (٢‬قمنا بإدخال قيمة للمتغير من شاشة التنفيذ ويدخل فقط حرف واحد ‪.‬بما انه المتغير من نوع‬
‫‪ character‬في لغة )‪ (C‬يقرئ ويطبع بداللة "‪"%C‬‬

‫‪.٣‬خطوة رقم )‪ (٣‬قمنا بطباعة قيمة المتغير التي أدخلت في خطوة رقم )‪ (٢‬بين قوسين‬
‫ما سيظھر في شاشة التنفيذ ھوا‬

‫مھم‬

‫أبدال بين قيم متغيرين‪ :‬إلبدال بين قيمة متغيرين نحتاج إلى متغير ثالث من نفس نوع المتغيرين حتى نخزن ب ِه نتيجة‬
‫احد المتغيرين ثم نبدل الن في حال عدم وجود متغير ثالث ال نستطيع اإلبدال ستضيع احد القيمتين‬

‫مثال ‪ :‬أبدال بين قيمة المتغير )‪ (a‬والمتغير )‪(b‬‬

‫كود اإلبدال بين قيمة المتغير )‪ (a‬والمتغير )‪(b‬‬


‫;‪int a=12,b=30,c‬‬ ‫‪//a=12 , b=30‬‬
‫;‪c=a‬‬ ‫نخزن قيمة المتغير ‪ a‬في متغير ثالث )‪// (c‬‬
‫;‪a=b‬‬ ‫نضع قيمة المتغير ‪ b‬في المتغير ‪//a=30, a‬‬
‫;‪b=c‬‬ ‫نضع القيمة المخزنة في المتغير الثالث وھي قيمة ‪ a‬في المتغير ‪// b=12, b‬‬

‫‪Step By step to Learn C or C++‬‬ ‫‪By:Hussien Ahmmed Taleb‬‬ ‫‪17‬‬


‫العمليات الحسابية وطرق تمثيلھا وأولوياتھا )األسبقية(‪:‬‬
‫العمليات الرياضية‪-:‬‬
‫األسبقية‬ ‫الوظيفة‬ ‫الرمز‬
‫‪١‬‬ ‫الزيادة والنقصان‬ ‫‪ ++‬أو‪--‬‬
‫‪٢‬‬ ‫اإلشارة السالبة‬ ‫‪-‬‬
‫‪٣‬‬ ‫الضرب والقسمة وباقيھا‬ ‫*أو ‪ /‬أو ‪%‬‬
‫‪٤‬‬ ‫الجمع أو الطرح‬ ‫‪ +‬أو ‪-‬‬
‫‪٥‬‬ ‫التساوي‬ ‫=‬
‫‪٦‬‬ ‫زيادة أو نقصان للعدد‬ ‫‪ ++‬أو – المتأخرة بعد الرمز‬

‫األدوات ‪-:Bowties‬‬
‫األسبقية‬ ‫الوظيفة‬ ‫الرمز‬
‫‪١‬‬ ‫إشارة النفي‬ ‫~‬
‫‪٢‬‬ ‫إزاحة للعدد يمين أو يسار‬ ‫<< أو >>‬
‫‪٣‬‬ ‫عملية )‪(and‬‬ ‫&‬
‫‪٤‬‬ ‫الرفع لقوى‬ ‫^‬
‫‪٥‬‬ ‫عملية )‪(or‬‬ ‫|‬

‫األدوات المنطقية) تستخدم في العبارات الشرطية(‬


‫األسبقية‬ ‫الوظيفة‬ ‫الرمز‬
‫‪١‬‬ ‫النفي‬ ‫!‬
‫‪٢‬‬ ‫عملية منطقية )‪(and‬‬ ‫&&‬
‫‪٣‬‬ ‫عملية منطقية )‪(or‬‬ ‫||‬
‫ تكون نواتج األدوات المنطقية ومقارناتھا إما )‪ (True‬أو )‪ (False‬أي أما واحد أو صفر ‪.‬إذا كان احد‬
‫طرفي المقارنة رقم غير الصفر مثال سبعة فأي رقم غير الصفر يعتبره واحد‬
‫وأدوات )‪(Bowties‬‬ ‫ تستخدم األدوات المنطقية كشروط مقارنه في العبارات الشرطية ھي‬
‫ في األسبقيات الرقم األقل أعلى أسبقية مثال أسبقية الضرب أعلى من أسبقية الجمع ألن رقم الضرب في‬
‫جدول األسبقية ھو )‪ (٣‬و رقم الجمع ھو )‪(٤‬‬

‫‪Step By step to Learn C or C++‬‬ ‫‪By:Hussien Ahmmed Taleb‬‬ ‫‪18‬‬


‫تمثيل العمليات الرياضية‪:‬‬
‫تمثل العمليات الرياضية برمجيا بطريقة مشابه لطريقة تمثيلھا رياضيا مع تغير طفيف بالرموز الرياضية لما يكافئھا‬
‫من الرموز البرمجية والحظ ھذا الجدول التوضيحي للعمليات وتمثيلھا رياضيا وبرمجيا‬

‫المثال على أساس عندنا متغيران ھما )‪ (a,b‬وناتج العملية الرياضية يخزن في )‪(c‬‬

‫تمثيله برمجيا‬ ‫تمثيله رياضيا‬ ‫الرمز و الوظيفة‬


‫;‪C=a+b‬‬ ‫‪C=a+b‬‬ ‫الجمع)‪(+‬‬
‫;‪C=a-b‬‬ ‫‪C=a-b‬‬ ‫الطرح)‪(-‬‬
‫;‪C=a/b‬‬ ‫القسمة)‪(/‬‬
‫;‪C=a*b‬‬ ‫‪C=a*b‬‬ ‫الضرب)*(‬
‫;‪C=a%b‬‬ ‫‪C=a mod b‬‬ ‫باقي القسمة)‪(%‬‬

‫ الحظ أن التمثيل البرمجي مشابه تقريبا للتمثيل الرياضي مع أبدال بعض الرموز بما يكافئھا‬
‫ووضع فارزة منقوطة في نھاية التعبير ‪.‬‬

‫مثال‪:‬لو كان لدينا متغيرين من نوع )‪ (integer‬وكالھما يحمل قيمة معينة يدخل قيمھم المستخدم من‬
‫شاشة التنفيذ قم بعملية جمع لھما‪.‬‬

‫‪c++‬‬ ‫البرمجة بلغة‬ ‫‪c‬‬ ‫البرمجة بلغة‬


‫>‪1.#include<iostream.h‬‬ ‫>‪1.#include<stdio.h‬‬
‫)(‪2.main‬‬ ‫)(‪2.main‬‬
‫;‪3.{ int first, seconds, sum‬‬ ‫;‪3.{ int first, seconds, sum‬‬
‫;‪4.cin>> first‬‬ ‫;)‪4.scanf("%d", &first‬‬
‫;"‪5. cout<<"+\n‬‬ ‫;)"‪5. prinC("+\n‬‬
‫;‪6. cin>> seconds‬‬ ‫;)‪6. scanf("%d", & seconds‬‬
‫;‪7.sum= first+ seconds‬‬ ‫;‪7.sum= first+ seconds‬‬
‫; ‪8.cout<<"---------\nsum="<< sum‬‬ ‫; ) ‪8.prinC("---------\nsum=%d", sum‬‬
‫} ‪9.‬‬ ‫} ‪9.‬‬
‫توضيح الخطوات‪:‬‬

‫‪.١‬خطوة رقم )‪ (١‬ھي تعريف للمكتبة الخاصة بدوال اإلدخال واإلخراج‪.‬خطوة رقم )‪ (٢‬ھي دالة )(‪main‬‬

‫‪.٢‬خطوة رقم )‪ (٣‬فتحنا قوس بداية البرنامج‪ .‬عرفنا المتغير األول ‪.‬و عرفنا المتغير الثاني وعرفنا متغير الجمع‬

‫‪Step By step to Learn C or C++‬‬ ‫‪By:Hussien Ahmmed Taleb‬‬ ‫‪19‬‬


‫‪.٣‬خطوة رقم )‪ (٤‬قرئنا قيمة المتغير األول من شاشة التنفيذ‪.‬وخطوة رقم )‪ (٥‬طبعنا عالمة الجمع على شاشة التنفيذ‬
‫لزيادة جمالية البرنامج‪. .‬خطوة رقم )‪ (٦‬قرئنا قيمة المتغير الثاني من شاشة التنفيذ‬

‫‪ .٤‬خطوة رقم )‪ (٧‬قمنا بجمع المتغير) ‪ ( first‬والمتغير) ‪ (seconds‬بداخل متغير أخر اسمه )‪ (Sum‬وطبعنا قيمة‬
‫ھذه المتغير في خطوة رقم )‪ (٨‬وعرفنا المتغير )‪ (Sum‬من نوع )‪ (integer‬وھو على أساس جمع عددين من‬
‫نوع )‪ (integer‬يكون الناتج من نوع )‪ (integer‬ولو كان احد العددان غير )‪ (integer‬لكان يجب تعريف ‪Sum‬‬
‫بطريقة بالئم كي يحمل نتيجة جمع ھذان العددان إي لو كان احدھما كسري لكان يجب تعريفه من نوع )‪(float‬‬

‫‪.٥‬خطوة رقم )‪ (٩‬قمنا بإغالق قوس البرنامج‬

‫ما سيظھر في شاشة التنفيذ ھو‪.‬‬

‫ ونستطيع إجراء بقية العمليات الرياضية على المتغيرين بنفس الطريقة فقط نبدل إشارة الجمع في الخطوة رقم‬
‫)‪ (٧‬إلى إشارة ضرب أو طرح أو قسمة ؟إي ان‬
‫ لو أردنا أجراء عملية طرح للرقمين المدخلين فقط نغير خطوة رقم )‪ (٧‬إلى‬
‫كود‬
‫;‪7.sum= first- seconds‬‬

‫مع تغير رمز الجمع في خطوة رقم )‪ (٥‬إلى رمز الطرح‬

‫ لو أردنا أجراء عملية ضرب للرقمين المدخلين فقط نغير خطوة رقم )‪ (٧‬إلى‬
‫كود‬
‫;‪7.sum= first* seconds‬‬

‫مع تغير رمز الجمع في خطوة رقم )‪ (٥‬إلى رمز الضرب‬

‫ لو أردنا أجراء عملية قسمة للرقمين المدخلين فقط نغير خطوة رقم )‪ (٧‬إلى‬
‫كود‬
‫;‪7.sum= first/ seconds‬‬

‫مع تغير رمز الجمع في خطوة رقم )‪ (٥‬إلى رمز القسمة‬

‫ في عملية القسمة يتم تعريف المتغير )‪ (div‬بدل المتغير )‪ (sum‬على انه متغير كسري الن‬
‫عملية قسمة إي عددين قد ينتج عنھا رقم بعد الفارزة‬

‫كما الحظنا أن العمليات الرياضية برمجيا تمثل نفسھا في الطريقة االعتيادية لكن برموز أخرى دالة عن‬
‫نوع العملية في بعض الحاالت‬

‫‪Step By step to Learn C or C++‬‬ ‫‪By:Hussien Ahmmed Taleb‬‬ ‫‪20‬‬


‫أيجاد باقي القسمة‪ :‬باقي القسمة ھو ما تبقى من قسمة عدديين على سبيل المثال باقي قسمة اإلعداد‬
‫)يستخدم الرمز ‪ %‬للداللة على باقي القسمة( ‪.‬‬

‫باقي قسمة اإلعداد التالية‬


‫‪3%2=1‬‬
‫‪6%2=0‬‬
‫‪9%3=0‬‬ ‫مھم‬

‫‪10%8=2‬‬
‫الحظ أن إذا كان الرقم األول اقل من الثاني فال يتقسم عليه أصال كله يبقى كباقي قسمة‬

‫‪9%12=9‬‬
‫‪7%8=7‬‬

‫ لو أردنا أيجاد باقي قسمة للرقمين المدخلين في المثال السابق فقط نغير خطوة رقم )‪ (٧‬إلى‬
‫كود‬
‫;‪7.sum= first % seconds‬‬

‫العالئقية‪ :‬ھي رموز تستخدم لمعرفة العالقة بين الرقمين إي ھل يساويه أو أكبر منه أو ال يساوي أو‬ ‫الرموز‬
‫اصغر منه وھذا جدول بھذه الرموز وتكون نتيجة المقارنة إما )‪ (True‬او )‪(False‬‬

‫مثال‬ ‫الوظيفة‬ ‫الرمز‬


‫)‪(a>b‬‬ ‫عالمة اكبر‬ ‫>‬
‫)‪(a>=b‬‬ ‫عالمة اكبر أو يساوي‬ ‫=>‬
‫)‪(a<b‬‬ ‫عالمة أصغر‬ ‫<‬
‫)‪(a<=b‬‬ ‫عالمة أصغر أو يساوي‬ ‫=<‬
‫)‪(a==b‬‬ ‫عالمة اليساوي‬ ‫==‬
‫)‪(a!=b‬‬ ‫عالمة ال يساوي‬ ‫=!‬

‫‪Step By step to Learn C or C++‬‬ ‫‪By:Hussien Ahmmed Taleb‬‬ ‫‪21‬‬


‫مھم‬

‫األسبقيات وطرق معاملتھا‪:‬‬


‫في جداول الرموز وضعنا أمام كل رمز األسبقية الخاصة ؟على سبيل المثال إذا جاءت عملية ضرب‬
‫وجمع في تعبير واحد فيكون للضرب أسبقية على الجمع )ألن أسبقيته الضرب ھي )‪ (٣‬وأسبقية الجمع‬
‫ھي )‪ (٤‬إي الضرب أعلى أسبقية‪ .‬الرقم األقل أعلى أسبقية( وينفذ قبله وھذا ھو من أصول عمل‬
‫المترجم لذالك يجب فھم األسبقيات حتى ال تخطئ في طريقة تحليل التعبير الرياضي ألي مسئلة ‪.‬‬
‫شاھد تغلب األسبقيات في المثال التالي ھو )‪.(a-b/d‬؟‬

‫مثال‬
‫يبدأ المترجم تنفيذ العمليات من اليسار إلى اليمين‬

‫‪Reslt=a – c / d‬‬

‫يبدءا بمقارنة كل عمليتين رياضيتين معا وأيھما له أسبقية أعلى تنفذ اوأل‬

‫إذا كان )‪ (a=5,c=10,d=2‬فيكون تسلسل تنفيذ الخطوات‬

‫‪1.‬‬ ‫‪Reslt=5 – 10 / 2‬‬

‫عند مقارنة عملية القسمة و الطرح فوجد انه القسمة له أسبقية أعلى من الطرح لذالك ستنفذ القسمة أوال‬
‫فيقسم )‪(10/2=5‬‬

‫‪2.‬‬ ‫‪Reslt=5 – 5‬‬

‫تنفذ عملية الطرح بشكل اعتيادي ألنھا أخر عملية رياضية متبقية قبل المساواة ويكون الناتج ھوا صفر‬
‫وأخر عملية ستنفذ ھي المساواة فتصبح قيمة‬
‫(‬ ‫)‪Reslt=0‬‬
‫لو الحظنا كيف تغلبت عملية القسمة على عملية الطرح في المثال وربما نحن كنا نريد أن تنفذ عملية الطرح‬
‫أوال لكن المترجم نفذ حسب االسبقية لذالك يجب مراعاة التعبير واالسبقيات‪.‬‬

‫مالحظة مھمة‪ :‬عند مقارنة عمليتان ويجد أن االسبقيتان متساويتان سنفذ من اليسار إلى اليمين أول‬
‫عملية تقع في اليسار تنفذ أوال‬

‫‪Step By step to Learn C or C++‬‬ ‫‪By:Hussien Ahmmed Taleb‬‬ ‫‪22‬‬


‫مثال‬
‫‪Reslt=a * c +d‬‬
‫في ھذا المثال نحن نقصد في تعبيرنا أن )‪ (c,d‬يجمعون أوال تم تضرب النتيجة في ) ‪(a‬‬
‫لكن الواقع غير ذالك حسب األسبقيات أن الضرب له أسبقية على الجمع لذالك سوف يضرب )‪ (a,c‬وتجمع‬
‫النتيجة مع ) ‪ (d‬ويكون الناتج غير صائب‪!...........‬الحظ تسلسل العمليات الناتجة عن ھذا التعبير‬

‫يبدأ تنفيذ العمليات من اليسار إلى اليمين‬

‫‪Reslt=a * c + d‬‬

‫يبدءا بمقارنة كل عمليتين رياضيتين معا وأيھما له أسبقية أعلى تنفذ اوأل‬

‫إذا كان )‪ (a=5,c=10,d=5‬فيكون تسلسل تنفيذ الخطوات‬

‫‪1.‬‬ ‫‪Reslt=5 * 10 +5‬‬

‫عند مقارنة عملية الجمع والضرب فوجد انه الضرب له أسبقية أعلى من الجمع لذالك ستنفذ الضرب أوال فيضرب‬
‫)‪(5*10=50‬‬

‫‪2.‬‬ ‫‪Reslt=50 + 5‬‬

‫تنفذ عملية الجمع بشكل اعتيادي ألنھا أخر عملية رياضية متبقية قبل المساواة ويكون الناتج ھوا)‪ (55‬وأخر‬
‫عملية ستنفذ ھي المساواة فتصبح قيمة‬
‫(‬ ‫)‪Reslt=55‬‬

‫مھم‬

‫رياضيا لحل ھذه المشكلة نضع أقواس حول العمليات التي لھا أسبقية اقل ونريدھا أن تنفذ أوال وھو بالضبط‬
‫ما نعمله برمجيا أيضا نستخدم أقواس )الن األقواس لھا أسبقية على جميع باقي العمليات( لذالك سوف ينفذ‬
‫ما في داخلھا تم يتعامل مع الخارج القوس وتكون النتيجة صائبة؟‬
‫ويصبح شكل المثال السابق‬
‫)‪Reslt=a *( c +d‬‬

‫‪Step By step to Learn C or C++‬‬ ‫‪By:Hussien Ahmmed Taleb‬‬ ‫‪23‬‬


‫ويكتب برمجيا ھكذا‬
‫;)‪Reslt=a *( c +d‬‬
‫الحظ تسلسل العمليات الرياضية أالن‬

‫يبدأ تنفيذ العمليات من اليسار إلى اليمين‬

‫)‪Reslt=a * ( c + d‬‬

‫يبدءا بمقارنة كل عمليتين رياضيتين معا وأيھما له أسبقية أعلى تنفذ اوأل‬

‫إذا كان )‪ (a=5,c=10,d=5‬فيكون تسلسل تنفيذ الخطوات‬

‫‪1.‬‬ ‫)‪Reslt=5 * (10 + 5‬‬

‫عند مقارنة عملية الضرب واألقواس فوجد انه األقواس له أسبقية أعلى من الضرب لذالك ستنفذ مابين األقواس‬
‫أوال فيجمع )‪(10*2=12‬‬

‫‪2.‬‬ ‫‪Reslt=5 * 15‬‬

‫تنفذ عملية الضرب بشكل اعتيادي ألنھا أخر عملية رياضية متبقية قبل المساواة ويكون الناتج ھوا)‪ (75‬وأخر‬
‫عملية ستنفذ ھي المساواة فتصبح قيمة‬
‫‪Reslt=75‬‬
‫ھل الحظت كم ھناك اختالف بين النتيجتين‪........‬؟‬

‫مالحظة‪:‬إذا كان مابين األقواس أكثر من عملية رياضية ايظا داخل األقواس تعمل األسبقيات فأيھما له اسبقي أعلى‬
‫ينفذ أوال على سبيل المثال لو كان المثال‬
‫)‪Reslt=a * ( c + d/f‬‬
‫تسلسل تنفيذ العمليات ھي‬
‫‪.١‬يقسم )‪(d/f‬‬
‫‪.٢‬ويجمع ناتج القسمة مع )‪(c‬‬
‫‪.٣‬ويضرب ناتج مع )‪(a‬‬
‫‪.٤‬يساوي النتيجة ب ‪reslt‬‬

‫‪Step By step to Learn C or C++‬‬ ‫‪By:Hussien Ahmmed Taleb‬‬ ‫‪24‬‬


‫مثال‬
‫࡭ ‪૞ା‬‬ ‫࡮‬
‫=࢟‬ ‫‪−‬‬
‫ࡰ‬ ‫࡯‬
‫ونحن نريد أن نقصد في تعبيرنا أن )‪ (5,A‬يجمعون أوال تم تقسم النتيجة في ) ‪(d‬‬
‫لكن الواقع غير حسب األسبقيات أن القسمة لھا أسبقية على الجمع لذالك سوف القسمة إي يقسم )‪(5/D‬‬
‫وتجمع النتيجة مع ) ‪ (A‬ويكون الناتج غير صائب‪!...........‬‬
‫الحظ تسلسل العمليات بدون أقواس وحسب التعبير) ‪( Y= 5+A /D - B/C‬‬
‫‪y=5+A/d-b/c‬‬

‫يبدءا بمقارنة كل عمليتين رياضيتين معا وأيھما له أسبقية أعلى تنفذ اوأل‬

‫إذا كان ) ‪ (c=2,A=4,b=4,d=4‬فيكون تسلسل تنفيذ الخطوات‬

‫‪1.‬‬ ‫‪y=5 + 4 / 4 – 4 / 2‬‬

‫عند مقارنة عملية الجمع والقسمة فوجد انه القسمة له أسبقية أعلى من الجمع لذالك سنقسم أوال فيقسم‬
‫)‪(4/4=1‬‬

‫‪2.‬‬ ‫‪y=5 + 1 – 4 / 2‬‬

‫عند مقارنة عملية الجمع مع الطرح وجد أن االسبقيتان متساويتان لذالك سنفذ من اليسار إلى اليمين ومن اليسار‬
‫أول عملية تقع ھي الجمع لذالك سينفذ الجمع أوال)‪(5+1=6‬‬

‫‪3.‬‬ ‫‪y=6 – 4 / 2‬‬

‫عند مقارنة عملية القسمة مع الطرح وجد أن األسبقية القسمة أعلى لذالك سنفذ القسمة أوال)‪(4/2=2‬‬

‫‪Step By step to Learn C or C++‬‬ ‫‪By:Hussien Ahmmed Taleb‬‬ ‫‪25‬‬


‫‪4.‬‬ ‫‪y=6 – 2‬‬

‫تنفذ عملية الطرح بشكل اعتيادي ألنھا أخر عملية رياضية متبقية قبل المساواة ويكون الناتج ھوا )‪ (4‬وأخر‬
‫عملية ستنفذ ھي المساواة فتصبح قيمة‬

‫‪y=4‬‬

‫رياضيا لحل ھذه المشكلة نضع أقواس حول العمليات التي لھا أسبقية اقل ونريدھا أن تنفذ أوال وھو بالضبط‬
‫ما نعمله برمجيا أيضا نستخدم أقواس حول عملية الجمع لذالك سوف ينفذ الجمع تم يقسم النتيجة على)‪(D‬‬
‫وبما أم الناتج مطروح من عملية قسمة سوف ينفذ القسمة ‪B‬على ‪C‬ويطرح النتيجتين وتكون النتيجة‬
‫صائبة؟‬

‫ويكتب برمجيا ھكذا‬


‫; ‪Y= (5+A)/D - B/C‬‬

‫الحظ تسلسل العمليات بوجود أقواس وحسب التعبير‬

‫‪y=(5+A)/d-b/c‬‬

‫يبدأ بمقارنة كل عمليتين رياضيتين معا وأيھما له أسبقية أعلى تنفذ اوأل‬

‫إذا كان ) ‪ (c=2,A=4,b=4,d=4‬فيكون تسلسل تنفيذ الخطوات‬

‫‪1.‬‬ ‫‪y=(5 + 4) / 4 – 4 / 2‬‬

‫عند مقارنة األقواس والقسمة فوجد انه األقواس له أسبقية أعلى من الجمع لذالك سينفذ مابين األقواس أوال‬
‫أوال فيجمع )‪(5+4=9‬‬

‫‪Step By step to Learn C or C++‬‬ ‫‪By:Hussien Ahmmed Taleb‬‬ ‫‪26‬‬


‫‪2.‬‬ ‫‪y=9/4 – 4 / 2‬‬

‫عند مقارنة عملية القسمة مع الطرح وجد أن القسمة أعلى فستنفذ أوال )‪(9/4=2.25‬‬

‫‪3.‬‬ ‫‪y=2.25 – 4 / 2‬‬

‫عند مقارنة عملية القسمة مع الطرح وجد أن األسبقية القسمة أعلى لذالك سنفذ القسمة أوال)‪(4/2=2‬‬

‫‪4.‬‬ ‫‪y=2.25 – 2‬‬

‫أالن تنفذ عملية الطرح بشكل اعتيادي والنتيجة تصبح‬

‫‪y= 25‬‬

‫أالن األسبقيات أصبحت واضحة ولمعلوماتك‪..‬؟‬


‫‪.١‬يبدأ تنفيذ العمليات من اليسار إلى اليمين‬ ‫‬
‫‪.٢‬يقارن كل عمليتين معا العملية التي لھا أسبقية أعلى تنفذ أوال‬ ‫‬
‫‪.٣‬إذا تساوت اسبقيتان يبدأ بالتنفيذ من اليسار إلى اليمين‬ ‫‬
‫‪.١‬مابين األقواس ينفذ أوال ألنه أعلى أسبقية من غيره )وما في داخل مابين األقواس إي إذا كان‬ ‫‬
‫أكثر من عملية بين األقواس تعامل حسب األسبقية الذي أسبقيته أعلى ينفذ أوال(‬

‫‪Step By step to Learn C or C++‬‬ ‫‪By:Hussien Ahmmed Taleb‬‬ ‫‪27‬‬


‫ مالحظة‪ :‬األسبقيات بالنسبة لألدوات ‪ Bowties‬واألدوات المنطقية ھي نفس طريقة في‬
‫العمليات الرياضية أيضا الذي له أسبقية أعلى ينفذ أوال‬

‫مثال‬
‫‪True && False || True‬‬
‫جد النتيجة‪..............................‬؟‬

‫‪True && False || True‬‬

‫‪1.‬‬

‫نعلم انه ‪ and‬له أسبقية أعلى من ‪ or‬لذالك سينفذه أوال)‪(True And False=False‬‬

‫‪False || True‬‬

‫‪2.‬‬
‫أالن عملية ‪ or‬بشكل اعتيادي )‪( False or True=True‬‬
‫فالناتج يكون )‪(True‬‬

‫نفس الطريقة بالنسبة لباقي األدوات تنفذ حسب األسبقية‬

‫جدول الحقيقة ل)‪(AND,OR,NOT‬‬


‫‪A‬‬ ‫|‬ ‫‪B‬‬ ‫‪AND‬‬ ‫‪OR‬‬ ‫‪ NOT‬فقط ل )‪(A‬‬
‫‪False‬‬ ‫‪False‬‬ ‫‪False‬‬ ‫‪False‬‬ ‫‪True‬‬
‫‪False‬‬ ‫‪True‬‬ ‫‪False‬‬ ‫‪True‬‬ ‫‪True‬‬
‫‪True‬‬ ‫‪False‬‬ ‫‪False‬‬ ‫‪True‬‬ ‫‪False‬‬
‫‪True‬‬ ‫‪True‬‬ ‫‪True‬‬ ‫‪True‬‬ ‫‪False‬‬

‫مھم‬

‫ في عمليات المقارنة إي رقم غير الصفر يعتبره واحد سوا كان موجب او سالب اذان تكون المقارنة‬

‫‪Step By step to Learn C or C++‬‬ ‫‪By:Hussien Ahmmed Taleb‬‬ ‫‪28‬‬


‫مھم جدا‬ ‫مثال‬
‫)‪(3+2) && (4*2) || (4%2‬‬
‫جد النتيجة‪..............................‬؟‬

‫)‪(3+2) && (4*2) || (4%2‬‬

‫‪1.‬‬
‫بما انه موجود تعابير رياضية وعمليات منطقية سينفذ العمليات الرياضية التي بين األقواس أوال‬
‫أول عملية سينفذھا ھي الضرب الن أسبقيتھا أعلى من الجمع وباقي القسمة ھي )‪ (4*2‬وتساوي‬
‫ثمانية‬

‫)‪(3+2) && 8 || (4%2‬‬

‫‪2.‬‬
‫سينفذ باقي القسمة ألن أسبقيته أعلى من الجمع وباقي قسمة)‪ (4%2‬ھو صفر‬

‫‪(3+2) && 8 || 0‬‬

‫‪3.‬‬
‫سينفذ عملية الجمع )‪ (2+3‬يساوي خمسة‬

‫‪5 && 8 || 0‬‬ ‫مھم‬

‫‪4.‬‬
‫اآلن يقارن عملية )‪ (and‬وعملية )‪ (or‬نعلم انه ‪ and‬له أسبقية أعلى من ‪ or‬لذالك سينفذه أوال‬
‫في عمليات المقارنة إي رقم غير الصفر يعتبره واحد سوا كان موجب أو سالب إذن تكون المقارنة‬
‫بشكل التالي‬
‫)‪(5 && 8‬‬
‫)‪(1 && 1=1‬‬
‫النتيجة ھي واحد‬

‫‪1 || 0‬‬

‫‪5.‬‬
‫أخر عملية مقارنة ھي )‪ (or‬بين الواحد والصفر والنتيجة ھي واحد‬
‫‪(1||0)=1‬‬

‫‪Step By step to Learn C or C++‬‬ ‫‪By:Hussien Ahmmed Taleb‬‬ ‫‪29‬‬


‫ما الفرق بين && و & أو || و |‬
‫الفرق يقع بين && و & ‪ :‬انه )&&( يمثل عملية منطقية بين موقعين في الذاكرة إذا صح التعبير أو‬
‫متغيرين بشكل كامل وليس بشكل جزئي أو تعبيرين نتائجھما )‪ True‬أو ‪ (False‬وتكون نتائج إي عملية‬
‫فيھا )&& أو ||( إما ‪ True‬أو ‪ . False‬أي ان المقارنة تكون بين )‪ True‬أو ‪ (False‬بطرفي )&&(‪.‬‬
‫مثال‪:‬‬
‫;‪Int a=5‬‬
‫;‪Int b=7‬‬
‫)‪(A >0) &&(b>0‬‬
‫‪(True) && (True) True‬‬
‫يكون الناتج ھوا ‪ True‬الن المتغيران كالھما أعلى من صفر ‪.‬اي عندما قارن )‪ (A>0‬كانت النتيجة نعم‬
‫اكبر من الصفر إي)‪ (True‬وعندما قارن )‪ (b>0‬كانت النتيجة أيضا )‪ (True‬وعندما عمل )‪ (and‬بين‬
‫النتيجتين كانت النتيجة )‪ (True‬إي واحد‬
‫ * فلو كتبنا الكود التالي )‪ (a && b‬فسيقارن )‪ (1 && 1 =1‬تكون النتيجة واحد‬

‫إما )&( فيمثل عملية منطقية بين كل بت مع البت الذي يقابله في المتغير المقابل وليس مع المتغير كامال‬
‫لذالك تسمى ‪. Bowties‬وناتج العملية ممكن أن يكون إي رقم‬
‫لنعد نفس المثال‪-:‬‬
‫;‪Int a=5‬‬
‫;‪Int b=7‬‬
‫)‪(A & b‬‬
‫ماذا سيحصل؟ سوف يحول )‪ ٥‬و ‪ (٧‬إلى ما يقابلھما ب ‪ Binary‬ثم يعمل بينھم عملية ‪and‬‬
‫‪0111  7‬‬
‫‪0101  5‬‬
‫‪0101 5‬‬
‫نالحظ أن ناتج ھذه العملية ھوا ) ‪ ( 5‬وليس )‪ True‬أو ‪ (False‬إي ممكن أن يكون الناتج إي رقم‬
‫وكذالك بالنسبة ل )|| و |(‬

‫التعليقات مھمة جدا بجانب األسطر البرمجية حتى في ما بعد إذا أردنا فھم البرنامج‬ ‫إضافة تعليقات‪:‬‬
‫الذي كتبناه في وقت مضى مجرد نقرا التعليقات بجانب األسطر نفھم ما يعني الكود‬
‫‪ * /‬تعليق * ‪/‬‬ ‫في لغة )‪ ( C‬نضع التعليق بين‬
‫تعليق ‪//‬‬ ‫وفي لغة )‪ (C++‬نضع التعليق بعد‬

‫‪C++‬‬ ‫لكود بلغة‬


‫‪#include<iostream.h> // declaration of Lab we will use it‬‬

‫‪C‬‬ ‫لكود بلغة‬


‫‪#include<stdio.h> /* declaration of Lab we will use it*/‬‬

‫‪Step By step to Learn C or C++‬‬ ‫‪By:Hussien Ahmmed Taleb‬‬ ‫‪30‬‬


‫مھم جدا‬ ‫على الفرق بين && و & أو || و |‬ ‫مثال‬
‫)‪(3|2) && (4&2) || (4<2‬‬
‫جد النتيجة‪..............................‬؟‬

‫)‪(3|2) && (4&2) || (4<2‬‬

‫‪1.‬‬
‫بما انه موجود تعابير وعمليات منطقية سينفذ العمليات التي بين األقواس أوال‬
‫أول عملية سينفذھا ھي )&( )‪ (4&2‬يحولھا الى الباينري ويعمل بين البتات )‪(and‬‬
‫)‪(0100)&(0010)=(0000‬‬
‫النتيجة ھي صفر‬

‫)‪(3|2) && 0 || (4<2‬‬

‫‪2.‬‬
‫سينفذ عملية األصغر وان االثنان ليس اصغر من أربعة فتكون النتيجة ‪ False‬اي صفر‬

‫‪(3|2) && 0 || 0‬‬

‫‪3.‬‬
‫سينفذ عملية ‪ or‬بين ثالثة واثنان يحولھا إلى الباينري ويعمل بين البتات ‪or‬‬
‫)‪(0011)|(0010)=(0011‬‬
‫النتيجة ھي ثالثة‬

‫‪3 && 0 || 0‬‬ ‫مھم‬

‫‪4.‬‬
‫اآلن يقارن عملية )‪ (and‬وعملية )‪ (or‬نعلم انه ‪ and‬له أسبقية أعلى من ‪ or‬لذالك سينفذه أوال‬
‫في عمليات المقارنة إي رقم غير الصفر يعتبره واحد سوا كان موجب أو سالب إذن تكون المقارنة‬
‫بشكل التالي‬
‫)‪(1 && 0‬‬
‫)‪(1 && 0=0‬‬
‫النتيجة ھي واحد‬

‫‪0 || 0‬‬

‫‪5.‬‬
‫أخر عملية مقارنة ھي )‪ (or‬بين الصفر والصفر والنتيجة ھي صفر‬
‫‪(0||0)=0‬‬

‫‪Step By step to Learn C or C++‬‬ ‫‪By:Hussien Ahmmed Taleb‬‬ ‫‪31‬‬


‫ھي متغيرات تعرف داخل البرنامج بقيمة معينة تم نغير‬ ‫مؤثرات الزيادة والنقصان‪:‬‬
‫قيمتھا أثناء تنفيذ البرنامج كأن نجعلھا تزداد بمقدار واحد او اي إي مقدار معين وھي على نوعيين‪..‬؟‬
‫مؤثرات الزيادة‪:‬ھي متغيرات من اسمھا تزداد بمقدار معيين وشكلھا‬

‫توضيح‬
‫;‪a =a+1‬‬
‫معناه المتغير ) ‪ (a‬ازداد بمقدار واحد )إي جمع قيمته السابقة مع )‪ ( ١‬ا ي لو كان قيمته مثال ‪٢‬‬
‫يصبح ‪( ٣‬‬
‫‪-------------------------------------‬مثال توضيحي‪----------------------------------‬‬
‫‪Int a=0‬‬
‫عرفنا المتغير وأعطينا قيمته ‪a=0‬‬
‫;‪a =a+1‬‬
‫جمعت قيمته السابقة وھي صفر مع الواحد وأصبحت قيمته ‪a=1‬‬
‫;‪a =a+1‬‬
‫جمعت قيمته السابقة وھي واحد مع الواحد و أصبحت قيمته ‪a=2‬‬
‫;‪a=a+5‬‬
‫جمعت قيمته السابقة وھي اثنان مع خمسة و أصبحت قيمته ‪a=7‬‬
‫‪--------------------------------------------------------------------------------‬‬
‫الحظت كيف تغيرت قيمة المتغير ‪ a‬من الصفر إلى الواحد ثم إلى االثنان بمجرد كتابه ھذا التعبير‬
‫ھناك طريقة أخرى لتمثيل مؤثرات الزيادة وھي‬

‫بدال أن نكتب );‪(a=a+1‬‬ ‫نكتب ‪a++‬‬


‫أو ‪a+=1‬‬
‫‪++ a‬‬
‫وتدل الرموز السابقة اى أن المتغير ‪ a‬قد ازداد بمقدار واحد‪.‬‬
‫لو أردنا أن يزداد المتغير قيمة غير الواحد قد يكون ‪ ٥‬أو إي رقم أخر ف‬

‫بدال أن نكتب );‪(a=a+5‬‬ ‫نكتب ‪a+=5‬‬

‫‪ -------------------------‬يصبح المثال توضيحي بالرموز البرمجية‪----------------------‬‬


‫‪Int a=0‬‬
‫عرفنا المتغير وأعطينا قيمته ‪a=0‬‬
‫;‪a ++‬‬
‫أصبحت قيمته ‪a=1‬‬
‫;‪a +=1‬‬
‫أصبحت قيمته ‪a=2‬‬
‫;‪a+= 5‬‬
‫أصبحت قيمته ‪a=7‬‬
‫‪--------------------------------------------------------------------------------‬‬

‫‪Step By step to Learn C or C++‬‬ ‫‪By:Hussien Ahmmed Taleb‬‬ ‫‪32‬‬


‫مھم‬

‫ما الفرق بين )‪.. (a++ ,++a‬؟‬


‫االختالف ھوا انه )‪ (a++‬معناه نفذ الخطوة الحالية على قيمتك السابقة تم غير قيمتك بعد أن‬
‫تنفذ الخطوة الحالية )على سبيل المثال قد تكون قيمة الزيادة ھي واحد وقيمته في الخطوة السابقة‬
‫)‪ (٢‬ينفذ الخطوة التي ھوا بھا على انه )‪ (٢‬وعندما ينتقل إلى الخطوة أالحقة تصبح قيمته )‪. (٣‬‬

‫المتغير بقيمة ‪ ٢‬قبل الزيادة ;‪1.a=2‬‬


‫يبقى قيمة المتغير في ھذه الخطوة ‪ ٢‬ويصبح ثالثة على الخطوة القادمة ;‪2.a++‬‬
‫أصبح قيمة المتغير ثالثة ‪3.‬‬

‫ كأننا نقول أن إشارتي الجمع بعد المتغير مثال )‪ (a++‬ال تؤثر بزيادتھا على الخطوة الموجود‬
‫بھا )كما في ھذه المثال خطوة رقم ‪ (٢‬أنما تؤثر على الخطوة أالحقة‬
‫إما )‪ (++a‬معناه غير قيمتك السابقة أوال تم نفذ الخطوة التي أنت بھا لذالك نراه في جدول‬
‫األسبقيات مقدم على باقي العمليات في أسبقيته ‪.‬لو أعدنا المثال السابق‬

‫المتغير بقيمة ‪ ٢‬قبل الزيادة ;‪1.a=2‬‬


‫يصبح قيمته ثالثة في ھذه الخطوة ;‪2.a++‬‬

‫مثال‪:‬يبين كيفية تأثر بمقدار التغير في الخطوة الموجود فيھا والخطوة التي تليھا ‪.‬؟‬

‫‪c++‬‬ ‫البرمجة بلغة‬ ‫‪c‬‬ ‫البرمجة بلغة‬


‫>‪1.#include<iostream.h‬‬ ‫>‪1.#include<stdio.h‬‬
‫)(‪2.main‬‬ ‫)(‪2.main‬‬
‫{‪3.‬‬ ‫{‪3.‬‬
‫;‪4.int a=2‬‬ ‫;‪4.int a=2‬‬
‫;‪5.int item‬‬ ‫;‪5.int item‬‬
‫;‪6.item=3+a++‬‬ ‫;‪6.item=3+a++‬‬
‫; ‪7.cout<<"FirstTry="<< item‬‬ ‫;)‪7.prinC("FirstTry=%d", item‬‬
‫;‪8.item=3+ a‬‬ ‫‪8.item=3+ a‬‬
‫; ‪9.cout<<"\nSecondTry="<< item‬‬ ‫; )‪9.prinC("\nSecondTry=%d", item‬‬
‫}‪10.‬‬ ‫}‪10.‬‬

‫توضيح‪....‬؟‬
‫‪.١‬في السطر الربع عرفنا متغير )‪ (a‬وأعطيناه قيمة بدائية وھي ‪ ٢‬وفي السطر الخامس عرفنا متغير‬
‫‪ item‬ولم نعطه إي قيمة‬

‫‪Step By step to Learn C or C++‬‬ ‫‪By:Hussien Ahmmed Taleb‬‬ ‫‪33‬‬


‫‪.٢‬في السطر السادس حدثت عملية رياضية جمعت بين )‪ (٣‬وقيمة المتغير )‪( a‬متأثرا بزيادة لكن كما‬
‫بينا سابقا أن ھذه الزيادة الجديدة ال تؤثر على نتائج الخطوة الموجود فيھا إنما تؤثر على نتائج الخطوة‬
‫التي تليه ‪ .‬لذالك يبقى المتغير ) ‪ (a‬محتفظا بقيمته في ھذه الخطوة السادسة على قيمته البدائية)أو مقدار‬
‫قيمته قبل الخطوة السادسة وھي ‪( ٢‬لذالك ناتج جمع )‪ (٣+٢‬ھو خمسة وھو ما ظھر‬
‫تمثيل رياضي‬
‫;‪6.item=3+ a++‬‬
‫‪Item=3+2‬‬
‫‪Item=5‬‬

‫ وأصبح قيمة المتغير) ‪ (a=3‬بعد أن نفذ الخطوة رقم )‪ (٦‬ألنه ازداد بمقدار واحد‬

‫لو كانت الخطوة السادسة ھي‬


‫الكود‬
‫;‪6.item=3+ ++a‬‬

‫ لكان المتغير )‪ (a‬تغيرت قيمته إلى ‪ ٣‬قبل تنفيذ الخطوة رقم )‪ (٦‬مؤثرا بقيمته الجديدة على‬
‫الخطوة التي ھو بھا وتصبح النتيجة قيمة المتغير ‪ (٣+٣) item‬وھي ‪٦‬‬
‫ لو نالحظ في كال الحالتين أصبح قيمة المتغير )‪ (a=3‬لكن اختلفا في تأثيرھما في التي ھما بھا‬
‫مھم‬ ‫‪.٣‬السطر السابع طبعنا قيمة المتغير ‪ item‬وھي كما تظھر في شاشة التنفيذ ‪٥‬‬

‫‪.٤‬السطر الثامن قمنا بعملية رياضية جديدة جمعت بين ‪ ٣‬وقيمة المتغير ‪ a‬بدون إي تغير في مقدار‬
‫قيمة ھذه المتغير لكن رغم ذالك كانت النتيجة ‪ ٦‬وذالك ال المتغير ‪ a‬تغيرت قيمته في السطر السادس‬
‫إلى ثالثة لكنه بقا محتفظا بقيمته لم يؤثر في الخطوة التي ھوا بھا إنما اثر في الخطوة التي تليه‬
‫فأصبحت النتيجة ‪ ٦‬وليس ‪٥‬‬

‫تمثيل رياضي‬
‫‪8.item=3+ a‬‬
‫‪Item=3+3‬‬
‫‪Item=6‬‬

‫ناتج تنفيذ البرنامج‬

‫‪Step By step to Learn C or C++‬‬ ‫‪By:Hussien Ahmmed Taleb‬‬ ‫‪34‬‬


‫مثال تتبعي يبين أنواع تغير مقدار قيم المتغيرات بعمليات الزيادة والنقصان )مھم جدا(‬
‫)(‪main‬‬
‫{‬
‫;‪1. int a=2‬‬
‫;‪2.int b=0‬‬
‫;‪3.int item=0‬‬
‫قيم المتغيرات في بعد الخطوة السابقة ھي)‪(a=2,b=0,item=0‬‬
‫;‪4. item=1+a++‬‬
‫‪//‬قيم المتغيرات في بعد الخطوة السابقة ھي)‪ (a=3,b=0,item=3‬وذالك الن قيمة المتغير ‪ a‬تبقى ثابتة في‬
‫الخطوة السابقة على قيمھا في )الخطوة ‪ (١‬وتتغير بعد )الخطوة ‪ (٤‬إلى ‪٣‬‬
‫;‪5.++a‬‬
‫‪//‬قيم المتغيرات في بعد الخطوة السابقة ھي)‪ (a=4,b=0,item=3‬الن جميع المتغيرات ال تتئثر في‬
‫)الخطوة‪ (٥‬فقط المتغير ‪ a‬يتأثر ليصبح ‪)٤‬المتغيرات التي ال تتأثر بالخطوة تبقى محتفظة بقيمھا السابقة(‬
‫‪6.Item=item + ++b‬‬
‫‪//‬قيم المتغيرات في بعد الخطوة السابقة ھي)‪ (a=4,b=1,item=4‬الن المتغير ‪ b‬يتغير ال ‪ ١‬مؤثرا في‬
‫الخطوة التي ھو فيھا وقيمة المتغير ‪ item‬تجمع مع قيمتھا السابقة مع قيمة المتغير ‪b‬‬
‫;‪7.a++‬‬
‫‪//‬قيم المتغيرات في بعد الخطوة السابقة ھي)‪ (a=5,b=1,item=4‬الن جميع المتغيرات ال تتأثر في‬
‫)الخطوة‪ (٧‬فقط المتغير ‪ a‬يتأثر بتغير مقداره واحد ليصبح ‪)٥‬المتغيرات التي ال تتأثر بالخطوة تبقى محتفظة بقيمھا‬
‫السابقة(‬
‫;‪8.++b‬‬
‫‪//‬قيم المتغيرات في بعد الخطوة السابقة ھي)‪ (a=5,b=2,item=4‬الن جميع المتغيرات ال تتأثر في‬
‫)الخطوة‪(٨‬‬
‫فقط المتغير ‪ b‬يتأثر بتغير مقداره واحد ليصبح ‪) 2‬المتغيرات التي ال تتأثر بالخطوة تبقى محتفظة بقيمھا السابقة(‬
‫;‪9.item=item + a++ - b++‬‬
‫‪//‬قيم المتغيرات في بعد الخطوة السابقة ھي)‪ (a=6,b=3,item=7‬المتغيران )‪ (a,b‬يتغيران ويزدادان بمقدار‬
‫واحد لكن ال يؤثران على الخطوة التي ھما بھا والمتغير ‪ item‬يجمع قيمته ‪ a‬السابقة ويطرح من ‪ b‬السابقة‬
‫;‪10.item=item + a++ - ++b‬‬
‫‪//‬قيم المتغيرات في بعد الخطوة السابقة ھي)‪(a=7,b=4,item=9‬المتغير ‪b‬يزادا ويؤثر في الخطوة التي ھوا‬
‫بھا إما ‪ a‬يزداد لكن ال يؤثر بالخطوة التي ھوا بھا والمتغير ‪ item‬يجمع قيمته السابقة مع ‪ a‬ويطرحھا من ‪b‬‬
‫;‪11.item=++b‬‬
‫‪//‬قيم المتغيرات في بعد الخطوة السابقة ھي)‪ (a=7,b=5,item=5‬المتغير ‪a‬يبقى ثابت المتغير ‪b‬يزداد بمقدار‬
‫واحد ويؤثر في الخطوة التي ھوا بھا والمتغير ‪item‬يأخذ قيمة ال ‪b‬الجديدة‬
‫;‪12.item+=5‬‬
‫‪//‬قيم المتغيرات في بعد الخطوة السابقة ھي)‪ (a=7,b=5,item=10‬فقط قيمة المتغير ‪item‬تتغير لتجمع‬
‫قيمتھا السابقة مع الرقم ‪٥‬‬
‫;‪13.b=b+5‬‬
‫‪ //‬قيم المتغيرات في بعد الخطوة السابقة ھي)‪ (a=7,b=10,item=10‬فقط قيمة المتغير ‪ b‬تتغير لتجمع‬
‫قيمتھا السابقة مع الرقم ‪٥‬‬
‫}‬

‫‪Step By step to Learn C or C++‬‬ ‫‪By:Hussien Ahmmed Taleb‬‬ ‫‪35‬‬


‫مؤثرات النقصان‪ :‬ھو نقصان من قيمة المتغير بمقدار واحد أو أكثر‬

‫توضيح‬
‫;‪a =a-1‬‬
‫معناه المتغير ) ‪ (a‬نقص بمقدار واحد )إي طرح من قيمته السابقة بمقدار )‪( ١‬‬
‫ا ي لو كان قيمته مثال ‪ ٢‬يصبح ‪( ١‬‬
‫‪-------------------------------------‬مثال توضيحي‪----------------------------------‬‬
‫‪Int a=2‬‬
‫عرفنا المتغير وأعطينا قيمته ‪a=0‬‬
‫;‪a =a-1‬‬
‫طرحت من قيمته السابقة وھي اثنان مقدار الواحد وأصبحت قيمته ‪a=1‬‬
‫;‪a =a-1‬‬
‫طرحت من قيمته السابقة وھي واحد مقدار الواحد و أصبحت قيمته ‪a=0‬‬
‫;‪a=a-5‬‬
‫طرحت من قيمته السابقة وھي صفر مقدار خمسة و أصبحت قيمته ‪a=-5‬‬
‫‪--------------------------------------------------------------------------------‬‬
‫الحظت كيف تغيرت قيمة المتغير ‪ a‬من االثنان إلى الواحد إلى الصفر إلى سالب خمسة بمجرد كتابه‬
‫ھذا التعبير ‪.‬ھناك طريقة أخرى لتمثيل مؤثرات النقصان وھي‬

‫بدال أن نكتب );‪(a=a-1‬‬ ‫نكتب ‪a--‬‬


‫أو ‪a - =1‬‬
‫‪--a‬‬
‫وتدل الرموز السابقة على أن المتغير ‪ a‬قد نقص بمقدار واحد‪.‬‬
‫لو أردنا أن ينقص المتغير قيمة غير الواحد قد يكون ‪ ٥‬أو إي رقم أخر فنكتب‬

‫بدال أن نكتب );‪(a=a-5‬‬ ‫نكتب ‪a-=5‬‬

‫‪ -------------------------‬يصبح المثال توضيحي بالرموز البرمجية‪----------------------‬‬


‫‪Int a=2‬‬
‫عرفنا المتغير وأعطينا قيمته ‪a=0‬‬
‫;‪a --‬‬
‫أصبحت قيمته ‪a=1‬‬
‫;‪a -=0‬‬
‫أصبحت قيمته ‪a=2‬‬
‫;‪a-= 5‬‬
‫أصبحت قيمته ‪a=-5‬‬
‫‪--------------------------------------------------------------------------------‬‬

‫‪Step By step to Learn C or C++‬‬ ‫‪By:Hussien Ahmmed Taleb‬‬ ‫‪36‬‬


‫ما الفرق بين )‪.. (a-- ,--a‬؟‬
‫االختالف ھوا انه )‪ (a--‬معناه نفذ الخطوة التي أنت بھا على قيمتك السابقة ثم غير قيمتك )كأن‬
‫يكون قيمة النقصان ھي واحد وقيمته في الخطوة السابقة ‪ ٢‬ينفذ الخطوة التي ھوا بھا على انه ‪٢‬‬
‫وعندما ينتقل إلى الخطوة أالحقة تصبح قيمته ‪(١‬‬

‫المتغير بقيمة ‪ ٢‬قبل النقصان ;‪1.a=2‬‬


‫يبقى قيمة المتغير في ھذه الخطوة ‪ ٢‬ويصبح واحد على الخطوة القادمة ;‪2.a--‬‬
‫أصبح قيمة المتغير واحد ‪3.‬‬

‫إما )‪ (--a‬معناه غير قيمتك السابقة أوال تم نفذ الخطوة التي أنت بھا لذالك نراه في جدول األسبقيات‬
‫مقدم على باقي العمليات في أسبقيته ‪ .‬لنعد المثال السابق‬

‫المتغير بقيمة ‪ ٢‬قبل النقصان ;‪1.a=2‬‬


‫يصبح قيمته واحد في ھذه الخطوة ;‪2.a++‬‬

‫مثال‪:‬يبين كيفية تأثر بمقدار التغير في الخطوة الموجود فيھا والخطوة التي تليھا ‪..‬؟‬

‫‪c++‬‬ ‫البرمجة بلغة‬ ‫‪c‬‬ ‫البرمجة بلغة‬


‫>‪1.#include<iostream.h‬‬ ‫>‪1.#include<stdio.h‬‬
‫)(‪2.main‬‬ ‫)(‪2.main‬‬
‫{‪3.‬‬ ‫{‪3.‬‬
‫;‪4.int a=2‬‬ ‫;‪4.int a=2‬‬
‫;‪5.int item‬‬ ‫;‪5.int item‬‬
‫;‪6.item=3+a--‬‬ ‫;‪6.item=3+a--‬‬
‫; ‪7.cout<<"FirstTry="<< item‬‬ ‫; )‪7.printf("FirstTry=%d", item‬‬
‫;‪8.item=3+ a‬‬ ‫;‪8.item=3+ a‬‬
‫; ‪9.cout<<"\nSecondTry="<< item‬‬ ‫; )‪9.prinC("\nSecondTry=%d", item‬‬
‫}‪10.‬‬ ‫}‪10.‬‬

‫توضيح‪....‬؟‬
‫‪.١‬في السطر الربع عرفنا متغير )‪ (a‬وأعطيناه قيمة بدائية وھي ‪ ٢‬وفي السطر الخامس عرفنا متغير‬
‫‪ item‬ولم نعطه إي قيمة‬

‫‪Step By step to Learn C or C++‬‬ ‫‪By:Hussien Ahmmed Taleb‬‬ ‫‪37‬‬


‫‪.٢‬في السطر السادس حدثت عملية رياضية جمعت بين )‪ (٣‬وقيمة المتغير )‪ ( a‬متأثرا بنقصان لكن‬
‫كما بينا سابقا أن ھذه النقصان الجديد ال تؤثر على نتائج الخطوة الموجود فيھا إنما تؤثر على نتائج‬
‫الخطوة التي تليه ‪ .‬لذالك يبقى المتغير ) ‪ (a‬محتفظا بقيمته في ھذه الخطوة السادسة على قيمته‬
‫البدائية)أو مقدار قيمته قبل الخطوة السادسة وھي ‪( ٢‬لذالك ناتج جمع )‪ (٣+٢‬ھو خمسة وھو ما ظھر‬
‫تمثيل رياضي‬
‫;‪6.item=3+ a--‬‬
‫‪Item=3+2‬‬
‫‪Item=5‬‬

‫ وأصبح قيمة المتغير) ‪ (a=1‬بعد أن نفذ الخطوة رقم )‪ (٦‬ألنه تناقص بمقدار واحد‬

‫لو كانت الخطوة السادسة ھي‬


‫الكود‬
‫;‪6.item=3+ --a‬‬

‫ لكان المتغير )‪ (a‬تغيرت قيمته إلى واحد قبل تنفيذ الخطوة رقم )‪ (٦‬مؤثرا بقيمته الجديدة على‬
‫الخطوة التي ھو بھا وتصبح النتيجة قيمة المتغير ‪ (٣+١) item‬وھي ‪٤‬‬
‫ لو نالحظ في كال الحالتين أصبح قيمة المتغير )‪ (a=1‬لكن اختلفا في تأثيرھما في التي ھما بھا‬
‫مھم‬ ‫‪.٣‬السطر السابع طبعنا قيمة المتغير ‪ item‬وھي كما تظھر في شاشة التنفيذ ‪٥‬‬

‫‪.٤‬السطر الثامن قمنا بعملية رياضية جديدة جمعت بين ‪ ٣‬وقيمة المتغير ‪ a‬بدون إي تغير في مقدار‬
‫قيمة ھذه المتغير لكن رغم ذالك كانت النتيجة )‪ (4‬وذالك ال المتغير ‪ a‬تغيرت قيمته في السطر‬
‫السادس إلى واحد لكنه بقا محتفظا بقيمته لم يؤثر في الخطوة التي ھوا بھا إنما اثر في الخطوة التي تليه‬
‫فأصبحت النتيجة ‪ ٤‬وليس ‪٥‬‬

‫تمثيل رياضي‬
‫‪8.item=3+ a‬‬
‫‪Item=3+1‬‬
‫‪Item=4‬‬

‫‪FirstTry=5‬‬ ‫ناتج تنفيذ البرنامج‬


‫‪SecondTry=4‬‬

‫‪Step By step to Learn C or C++‬‬ ‫‪By:Hussien Ahmmed Taleb‬‬ ‫‪38‬‬


‫بعض دوال اإلدخال واإلخراج في لغة )‪ (C‬في مكتبة >‪<stdio.h‬‬
‫‪ (getchar).1‬تأخذ ھذه الدالة حرف واحد يدخله المستخدم من شاشة التنفيذ ويظھر ھذا الحرف أمام المستخدم‪.‬‬
‫نضغط مفتاح )‪ (enter‬بعد إدخال الحرف لكي ينفذ الخطوة‪.‬‬

‫‪ (putchar).2‬يطبع حرف واحد فقط في شاشة التنفيذ )ھذا مثال على كيفية استخدام ھاتان الدالتان(‪.‬‬

‫‪C‬‬ ‫الكود بلغة‬


‫>‪1.#include<stdio.h‬‬
‫{)(‪2.main‬‬
‫;‪4.char symbol‬‬
‫;‪5. symbol=getchar‬‬
‫;)‪6. Putchar( symbol‬‬
‫}‬

‫بعض دوال اإلدخال في مكتبة >‪<conio.h‬‬


‫‪ (getch).1‬تقرء ھذه الدالة حرف واحد يدخله المستخدم من شاشة التنفيذ وال يظھر ھذا الحرف أمام المستخدم )كما‬
‫كان يظھر في دوال اإلدخال األخرى(‪ .‬وال نضغط مفتاح )‪ (enter‬بعد إدخال الحرف فقط نكتب الحرف وھو ينفذ‪.‬‬

‫ھذا مثال على كيفية استخدام ھذه الدالة )يجب تضمين المكتبة ‪ conio‬في الحل ألننا نستخدم دوالھا(‬

‫‪c++‬‬ ‫البرمجة بلغة‬ ‫‪c‬‬ ‫البرمجة بلغة‬


‫>‪#include<iostream.h‬‬ ‫>‪#include<stdio.h‬‬
‫>‪#include<conio.h‬‬ ‫>‪#include<conio.h‬‬
‫{)(‪main‬‬ ‫{)(‪main‬‬
‫;‪char symbol‬‬ ‫;‪char symbol‬‬
‫;)(‪symbol=getch‬‬ ‫;)(‪symbol=getch‬‬
‫;‪cout<<"The symbol your enter is=" << symbol‬‬ ‫;)‪Printf("The symbol your enter is=%c", symbol‬‬
‫}‬ ‫}‬

‫الحظ ما سيظھر في شاشة التنفيذ عند الضغط على حرف )‪ (w‬من لوحة المفاتيح بدون ضغط مفتاح )‪.(enter‬لم‬
‫يظھر الحرف الذي أدخلته إنما فقط نفذ وظھرت الرسالة‬

‫‪Step By step to Learn C or C++‬‬ ‫‪By:Hussien Ahmmed Taleb‬‬ ‫‪39‬‬


‫‪ (getche).2‬تقرء ھذه الدالة حرف واحد يدخله المستخدم من شاشة التنفيذ و يظھر ھذا الحرف أمام المستخدم ‪.‬وال‬
‫نضغط مفتاح )‪ (enter‬بعد إدخال الحرف فقط نكتب الحرف وھو ينفذ‪.‬‬

‫ھذا مثال على كيفية استخدام ھذه الدالة‬

‫‪c++‬‬ ‫البرمجة بلغة‬ ‫‪c‬‬ ‫البرمجة بلغة‬


‫>‪#include<iostream.h‬‬ ‫>‪#include<stdio.h‬‬
‫>‪#include<conio.h‬‬ ‫>‪#include<conio.h‬‬
‫{)(‪main‬‬ ‫{)(‪main‬‬
‫;‪char symbol‬‬ ‫;‪char symbol‬‬
‫;)(‪symbol=getche‬‬ ‫;)(‪symbol=getche‬‬
‫;‪cout<<"\nThe symbol your enter is=" << symbol‬‬ ‫;)‪Printf("\nThe symbol your enter is=%c", symbol‬‬
‫}‬ ‫}‬

‫الحظ ما سيظھر في شاشة التنفيذ عند الضغط على حرف )‪ (w‬من لوحة المفاتيح بدون ضغط مفتاح )‪(enter‬‬

‫دوال الرياضية في مكتبة >‪<math.h‬‬

‫تستخدم دوال ھذه المكتبة في حل العمليات الرياضية كإيجاد جيب أو جيب تمام أو قيمة مطلقة وغيرھا وھذا شرح‬
‫لعض دوالھا‬

‫‪ (sin).1‬تستخدم ھذه الدالة إليجاد جيب الزاوية بالنظام ال )‪ (rad‬لذالك إليجاد جيب الزاوية بالنظام )‪ (deg‬فقط‬
‫نضرب قيمة الزاوية ب ‪pi/180‬‬

‫الكود )إيجاد جيب الزاوية ‪( ٩٠‬‬


‫;‪Float sin x‬‬
‫;) )‪X=sin(90*(3.14/180‬‬

‫‪Step By step to Learn C or C++‬‬ ‫‪By:Hussien Ahmmed Taleb‬‬ ‫‪40‬‬


‫‪ (cos).2‬تستخدم ھذه الدالة إليجاد جيب تمام الزاوية بالنظام ال )‪ (rad‬لذالك إليجاد جيب الزاوية بالنظام )‪(deg‬‬
‫فقط نضرب قيمة الزاوية ب ‪pi/180‬‬

‫الكود )إيجاد جيب تمام الزاوية ‪( ٩٠‬‬


‫;‪Float x‬‬
‫;))‪X=cos(90*(3.14/180‬‬

‫إليجاد بقية الدوال المثلثية جميعھا تكون مشتقة من جيب وجيب تمام ‪.‬إي إننا نحول إي دالة مثلثيه إلى جيب أو جيب‬
‫تمام حسب تحويلھا بالدوال المثلثية ‪.‬‬
‫مثال إليجاد الضل الزاوية فقط نقسم جيب على جيب تمام الزاوية‬

‫عملية رياضية إليجاد ضل ‪٩٠‬‬


‫;‪Float Tanx‬‬
‫;))‪Tanx =sin (90*(3.14/180) ) / cos(90*(3.14/180‬‬

‫وكذالك بقية الدوال المثلثية بنفس الطريقة‬

‫‪ (pow).3‬تستخدم ھذه الدالة إليجاد قيمة رقم مرفوع إلى أس )مثال ‪. (3^2=9‬طريقة تمثيل ھذه الدالة‬
‫;)‪X=pow(number,hispower‬‬
‫حيث أن ‪ number‬ھوا الرقم و ‪ hispower‬ھو األس المرفوع له‬
‫مثال‪ :‬لو كان لدينا )‪(3^9‬إي ثالثة مرفوع ألس تسعة فيكتب برمجيا باستخدام ھذه الدالة ھكذا‬

‫الكود‬
‫;)‪X=pow(3,9‬‬

‫‪ (abs).4‬ھي القيمة المطلقة للرقم‬

‫الكود‬
‫‪X=abs(-3); // x=3‬‬

‫‪ (sqrt).5‬ھي دالة تستخدم إليجاد جذر الرقم‬

‫الكود‬
‫‪X=sqrt(25); // x=5‬‬

‫‪Step By step to Learn C or C++‬‬ ‫‪By:Hussien Ahmmed Taleb‬‬ ‫‪41‬‬


‫دوال أخرى ‪!.........‬‬
‫‪ (size of).1‬تجد ھذه الدالة الحجم الذي يشغله المتغير في الذاكرة ‪.‬عدد البايتات التي يحجزھا له‪.‬‬

‫الكود‬
‫‪X=sizeof(int); // 2 byte is the size of integer‬‬

‫‪ (int).2‬تحول ھذه الدالة المتغيرات من أنواع أخرى إلى متغير من نوع ‪ .integer‬وأيضا تجد قيمة )‪ (ASCii‬للحرف‪.‬‬
‫االسكي كود‪ :‬كل حرف من األحرف االنكليزية له أسكي كود خاص به يختلف عن غيره من األحرف مثال أسكي‬
‫كود الحرف )‪ (a‬صغيرة ھو )‪ (٩٧‬ويختلف عن أسكي كود )‪ (A‬كبيرة الذي ھوا )‪ .(٦٥‬وترتيب أسكي كود األحرف‬
‫بالتسلسل إي أن أسكي كود )‪ (b‬ھو )‪ (٩٨‬ويزداد بالتتالي)‪(c=99,d=100,e=101-----‬‬

‫الكود )تحويل متغير كسري إلى متغير من نوع ‪( integer‬‬


‫;‪Int x‬‬
‫‪x=int(3.5); // x=3‬‬

‫الكود )الحصول على أسكي كود الحرف(‬


‫;‪Int x‬‬
‫‪x=int('a'); // x=97‬‬

‫‪ (char).3‬تحول ھذه الدالة الرقم إلى قيمة األس كي كود الخاصة به‪.‬‬

‫الكود )الحصول على الحرف من أسكي كود(‬


‫;‪char x‬‬
‫‪x=int(97); // x=a‬‬
‫مثال ‪ :‬برنامج ندخل حرف أو رمز ويعطيك االسكي كود له ‪..‬؟‬
‫‪c++‬‬ ‫البرمجة بلغة‬ ‫‪c‬‬ ‫البرمجة بلغة‬
‫>‪#include<iostream.h‬‬ ‫>‪#include<stdio.h‬‬
‫>‪#include<conio.h‬‬ ‫>‪#include<conio.h‬‬
‫{)(‪main‬‬ ‫{)(‪main‬‬
‫;‪1.char symbol‬‬ ‫;‪1.char symbol‬‬
‫;)(‪2.symbol=getche‬‬ ‫;)(‪2.symbol=getche‬‬
‫};)‪3.cout<<"\n ASCii=" << int(symbol‬‬ ‫};)‪3.prinC("\nASCii=%d", symbol‬‬
‫توضيح المثال‪ :‬في الحل بلغة )‪ (c‬فقط في خطوة رقم )‪ (٣‬وضعنا رمز الطباعة )‪ (%d‬حتى يطبع اسكي كود الحرف‬
‫وليس الحرف نفسه‪.‬‬
‫يختلف الحرف الكبير عن الحرف الصغير ب )‪ (٣٢‬رقم إي أسكي كود )‪ (a‬صغيرة ھو )‪ (٩٧‬و )‪ (A‬كبيرة ھو‬
‫)‪ (٦٥‬للتحويل من كبير إلى صغير نزيد ‪ ٣٢‬والعكس نطرح ‪٣٢‬‬

‫الكود )تحويل حرف صغير إلى حرف كبير مثال )‪ (a‬أصبح )‪(A‬‬
‫;'‪char x='a‬‬
‫‪x=char(int('a')-32) // x=A‬‬

‫‪Step By step to Learn C or C++‬‬ ‫‪By:Hussien Ahmmed Taleb‬‬ ‫‪42‬‬


‫أن لغة ) ‪ (C‬ولغة )‪ (C++‬تتشابھان في اغلب تعابيرھما الرياضية وأكثر االختالفات بينھما ھي‬
‫المكتبات ودوال اإلدخال ودوال اإلخراج أي لو أبدلت فقط )اسم المكتبة ودوال اإلدخال ودوال اإلخراج‬
‫تستطيع تحويل البرنامج من لغة ) ‪ (C‬إلى لغة )‪ (C++‬والعكس صحيح‬

‫ودوال اإلخالف ھي‬


‫ولغة )‪(C++‬‬ ‫لغة ) ‪(C‬‬ ‫االختالفات‬
‫>‪#include<iostream.h‬‬ ‫>‪#include<stdio.h‬‬ ‫المكتبة‬
‫‪cin‬‬ ‫‪scanf‬‬ ‫دوال اإلدخال‬
‫‪Cout‬‬ ‫‪printf‬‬ ‫دوال اإلخراج‬

‫وفي بعض األمثلة سوف ال اكتبھا بالغتين على حدة اكتب بلغة واحدة وأنت تستطيع التحويل‬
‫وإذا كان ھناك أكثر من ھذه االختالفات الثالث أنا سوف اكتب البرنامج بلغتين‬

‫‪Step By step to Learn C or C++‬‬ ‫‪By:Hussien Ahmmed Taleb‬‬ ‫‪43‬‬


‫  
  )‪(Control Structures‬‬

‫المستوى المطلوب‬
‫ٔ‬
‫ٔان يكون القارئ ملما بما هو في الفصل االول وفاهما كل شيء‬

‫ٔ‬
‫االهداف‪:‬‬
‫عندما يكـتمل الفصل تكون بإذن ﷲ قد ٔاتممت التعرف علﻰ الجمل الشرطية وطريقة اﺴتخدام‬
‫العبارات الشرطية ومواقعها ٔوانواعها‬

‫ٔ‬
‫مستوى االداء المطلوب بعد إنهاء الفصل‬
‫إتقان هذه الفصل ‪100%‬‬

‫ٔ‬
‫االدوات المطلوبة‪:‬ﺣاﺴوب شخصي لتجربة البرامج وقلم ودفتر لتسجيل المالﺣظات‬

‫الوقت المطلوب ‪ :‬ثالث ﺴاعات‬

‫‪Step By step to Learn C or C++‬‬ ‫‪By:Hussien Ahmmed Taleb‬‬ ‫‪44‬‬


‫‪.١‬عبارة )‪ (if‬الشرطية االعتيادية‪:‬‬
‫ھي عبارة أو جملة ال ينفذ ما في داخلھا ) إي ‪ statement‬الموجود بين قوسين العبارة الشرطية( إال بتحقق الشرط‬
‫الموجود بعد عبارة ‪ if‬وھو )‪ (condition‬أي يجب أن تكون نتيجة مقارنة شروط ھي ) ‪ ( True‬حتى ينفذ‬
‫مابين قوسي العبارة الشرطية‪.‬‬
‫شكل عبارة ‪ if‬الشرطية بطريقة اعتيادية‬
‫) ‪If ( condition‬‬
‫{‬
‫‪statement‬‬

‫}‬

‫أي أن حسب مخطط الفصل األول الخاص بتسلسل تنفيذ خطوات البرنامج بالتتابع ‪.‬في العبارة الشرطية )‪(if‬‬

‫• إذا لم يحقق الشرط )‪ (condition‬أي كانت نتيجة المقارنة ھي )‪ (False‬سوف يعبر جميع الخطوات‬
‫الموجودة بين قوسي العبارة الشرطية )‪ (if‬وال ينفذھا ) وعرفنا في الفصل األول كيف تكون مقارنة الشروط(‬
‫• وإذا تحقق الشرط )‪ ( condition‬أي كانت نتيجة المقارنة ھي ) ‪ ( True‬ينفذ الخطوات الموجودة بين‬
‫قوسي العبارة الشرطية )‪ (if‬بشكل اعتيادي الحظ المخطط التوضيحي لسير البرنامج‬

‫مھم‬

‫ إذا لم نضع أقوس خلف العبارة الشرطية معناه يتبعھا فقط السطر الذي يليھا أما إذا وضعنا أقواس خلفھا فكل‬
‫الذي بين القوسين يكون تابع للعبارة الشرطية تنفذ إذا تحقق الشرط وال تنفذ إذا لم يتحقق الشرط‬

‫ برنامج يدخل المستخدم من شاشة التنفيذ وإذا كان الرقم اكبر من خمسة يعطيه رسالة انه اكبر من خمسة‬

‫‪C++‬‬ ‫الكود بلغة‬


‫>‪#include<iostream.h‬‬
‫من ھنا يبدأ تنفيذ البرنامج خطوة بخطوة )ھذه أول خطوة(‬
‫)(‪Main‬‬
‫{‬
‫الخطوات الموجودة ضمن ھذه الدالة ينفذھا تباعا‬
‫;‪1.int a‬‬
‫;‪2.cin>>a‬‬
‫) ‪If ( a>5‬‬
‫;"‪{3.cout<<"is greter than 5‬‬
‫}‬
‫;‪4. a=a+2‬‬
‫; ‪5.cout<<"a="<<a‬‬
‫}‬

‫‪Step By step to Learn C or C++‬‬ ‫‪By:Hussien Ahmmed Taleb‬‬ ‫‪45‬‬


‫‪C‬‬ ‫الكود بلغة‬
‫>‪#include<stdio.h‬‬
‫من ھنا يبدأ تنفيذ البرنامج خطوة بخطوة )ھذه أول خطوة(‬
‫)(‪main‬‬
‫{‬
‫الخطوات الموجودة ضمن ھذه الدالة ينفذھا تباعا‬
‫;‪1.int a‬‬
‫;)‪2.scanf("%d",&a‬‬
‫) ‪If ( a>5‬‬
‫‪{3.printf("is‬‬
‫;)"‪"is greter than 5‬‬
‫"‪5‬‬
‫}‬
‫;‪4. a=a+2‬‬
‫;)‪5.printf("a=%d",a‬‬
‫مھم‬
‫}‬
‫توضيح الخطوات‪:‬‬
‫‪.١‬يبدأ البرنامج بتنفيذ خطوة رقم )‪ (١‬بتعريف متغير )‪ (a‬من نوع ‪integer‬‬
‫‪.٢‬ثم ينفذ خطوة رقم ) ‪ ( ٢‬ويطلب فيھا من المستخدم إدخال قيمة للمتغير )‪ (a‬من شاشة التنفيذ‬
‫‪.٣‬تم يتحقق من الخطوة رقم )‪(٣‬‬
‫ إذا كان الرقم الذي ادخله المستخدم يحقق الشرط بين قوسي العبارة الشرطية )‪) (if‬إي الرقم اكبر من‬
‫خمسة إي انه سوف تكون نتيجة المقارنة )‪ (condition‬ھي )‪( (True‬ومثال‬
‫ لنفرض انه أدخل الرقم ‪ ٦‬فتكون المقارنة ھكذا‪.‬‬
‫)‪(6>5‬‬
‫)‪(a>5‬‬ ‫‪True‬‬
‫سوف ينفذ ما موجود في قوسي العبارة الشرطية )‪ (if‬إي سينفذ الخطوة رقم ) ‪ ( ٣‬ثم ينفذ خطوة رقم ) ‪( ٤‬‬
‫وثم ) ‪ ( ٥‬فتكون تسلسل تنفيذ خطوات البرنامج‬
‫‪1 2‬‬ ‫‪3‬‬ ‫‪4‬‬ ‫‪5‬‬

‫ وإذا كان الرقم ال يحقق الشرط بين قوسي العبارة الشرطية )‪) (if‬إي الرقم اصغر أو يساوي خمسة إي انه‬
‫سوف تكون نتيجة المقارنة )‪ (condition‬ھي )‪ ( (False‬ومثال‬
‫ لنفرض انه أدخل الرقم ‪ 2‬فتكون المقارنة ھكذا‪.‬‬
‫)‪(a>5‬‬‫)‪(2>5‬‬ ‫‪False‬‬

‫سوف ال ينفذ ما موجود في قوسي العبارة الشرطية )‪ (if‬إي ال ينفذ الخطوة رقم )‪ ( ٣‬إنما ينتقل إلى ما بعد القوس‬
‫العبارة الشرطية لينفذه أي سينفذ بعد الخطوة ) ‪ ( ٢‬مباشرة الخطوة رقم ) ‪ ( ٤‬وثم ) ‪ (٥‬فتسلسل تنفيذ خطوات‬
‫‪1‬‬ ‫‪2‬‬ ‫‪4‬‬ ‫‪5‬‬

‫‪Step By step to Learn C or C++‬‬ ‫‪By:Hussien Ahmmed Taleb‬‬ ‫‪46‬‬


‫العالقات التي تستخدم كشروط )‪ (condition‬في العبارة الشرطية )‪ (if‬ھي‬
‫طريقة تمثيله في ‪ if‬الشرطية‬ ‫الوظيفة‬ ‫الرمز‬
‫)‪ if(a>b‬مقارنة بين متغيرين )‪ (a,b‬ينفذ الجملة التابعة لعبارة ‪ if‬إذا كان ‪a‬‬ ‫عالمة األكبر‬ ‫>‬
‫اكبر من ‪b‬‬
‫)‪ if(a<b‬ينفذ الجملة التابعة لعبارة ‪ if‬إذا كان ‪ a‬اصغر من ‪b‬‬ ‫عالمة األصغر‬ ‫<‬
‫)‪ if(a>=b‬ينفذ الجملة التابعة لعبارة ‪ if‬إذا كان ‪ a‬اكبر أو يساوي ‪b‬‬ ‫عالمة اكبر أو يساوي‬ ‫=>‬
‫)‪ if(a<=b‬ينفذ الجملة التابعة لعبارة ‪ if‬إذا كان ‪ a‬اصغر أو يساوي من ‪b‬‬ ‫عالمة اصغر أو يساوي‬ ‫=<‬
‫)‪ if(a==b‬ينفذ الجملة التابعة لعبارة ‪ if‬إذا كان ‪ a‬يساوي من ‪b‬‬ ‫عالمة التساوي‬ ‫==‬
‫)‪ if(a!=b‬ينفذ الجملة التابعة لعبارة ‪ if‬إذا كان ‪ a‬ال يساوي من ‪b‬‬ ‫عالمة ال يساوي‬ ‫=!‬
‫))‪ If((a>b)&&(a>c‬ينفذ الجملة التابعة لعبارة ‪ if‬إذا كان ‪ a‬اكبر من ‪b‬‬ ‫جمع شرطين ب ‪and‬‬ ‫&&‬
‫وأيضا يكون ‪ a‬اكبر من ‪ C‬إي يجب أن يتحقق الشرطان حتى تنفذ الجملة‬
‫)‪ If((a>b)||(a>c‬ينفذ الجملة التابعة لعبارة ‪ if‬إذا كان ‪ a‬اكبر من ‪ b‬أو يكون‬ ‫جمع شرطين ب ‪OR‬‬ ‫||‬
‫‪ a‬اكبر من ‪ C‬إي إذا تحقق واحد من ھذان الشرطان تنفذ الجملة‬

‫ حيث أن )=!‪ (>,<,>=,<=,==,‬تستخدم كعالقة بين متغيرين أو قيمتين أو متغير وتعبير رياضي‬
‫ شكل تمثيل الشروط في العبارة الشرطية )‪(if‬‬

‫متغير أو قيمة وتعبير رياضي )‪If(a/2==0‬‬ ‫)‪If(a==0‬‬ ‫متغير وقيمة أو متغير وأخر‬

‫ التعبير الرياضي ممكن أن يكون إي عمليات رياضية ونتيجة التعبير تدخل في المقارنة‬
‫ )||‪ (&&,‬تستخدم عالقة بين مجموعتين كل متغيرين على حدة ) وان ‪ And‬له أسبقية على ‪( OR‬‬

‫ ما ھي نتائج مقارنة العمليات التالية‬


‫‪(3>2) True‬‬
‫‪True‬‬
‫)‪(5!=7‬‬
‫‪(23>=120) False‬‬
‫‪(21 <11) False‬‬
‫‪False‬‬
‫)‪( 4==2‬‬
‫‪(43<=76) True‬‬
‫)‪((3+2)>4) (5>4‬‬
‫‪True‬‬

‫وأن الشروط داخل العبارة الشرطية ھي أيضا تنفذ حسب األسبقيات أي أن أي شرط أسبقيته أعلى ينفذ أوال وھذا ما‬
‫شرح عنه مفصال في الفصل األول في األمثلة على األسبقيات ‪.‬‬

‫‪Step By step to Learn C or C++‬‬ ‫‪By:Hussien Ahmmed Taleb‬‬ ‫‪47‬‬


‫بعض األمثلة التوضيحية على طريقة استخدام العبارة الشرطية )‪:(if‬‬
‫مثال‪ :١‬لو كان عندنا متغيران )‪ ( a , b‬يدخل المستخدم قيمھما من شاشة التنفيذ وكان المطلوب طبع رسائل تبين متى‬
‫كان ) ‪ a‬اكبر من ‪ a ،، b‬اكبر أو يساوي ‪ a ,, b‬اصغر من ‪a ,, b‬اصغر أو يساوي ‪ a ,, b‬يساوي ‪ a ,, b‬ال يساوي ‪. (b‬؟‬

‫تحليل السؤال‪ :‬يوجد متغيران يجب تعريفھما في بداية البرنامج وقراءتھما من شاشة التنفيذ وبعدھا التحقق من الشروط‬
‫الموجود في السؤال على ھذان المتغيران وطبع رسائل لكل شرط‬

‫‪c++‬‬ ‫البرمجة بلغة‬ ‫‪c‬‬ ‫البرمجة بلغة‬


‫>‪#include<iostream.h‬‬ ‫>‪#include<stdio.h‬‬
‫)(‪main‬‬ ‫)(‪main‬‬
‫{‬ ‫{‬
‫;‪1.int a,b‬‬ ‫;‪1.int a,b‬‬
‫;‪2.cin>>a>>b‬‬ ‫;)‪2.scanf("%d%d",&a,&b‬‬
‫) ‪if ( a>b‬‬ ‫) ‪if ( a>b‬‬
‫;"‪3.cout<<"a is large than b‬‬ ‫;)"‪3.prinC("a is large than b‬‬
‫) ‪if ( a>=b‬‬ ‫) ‪if ( a>=b‬‬
‫;"‪4.cout<<"\na is large than or equal b‬‬ ‫;)"‪4. prinC("\na is large than or equal b‬‬
‫) ‪if ( a<b‬‬ ‫) ‪if ( a<b‬‬
‫;"‪5.cout<<"\na is less than b‬‬ ‫;)"‪5. prinC("\na is less than b‬‬
‫) ‪if ( a<=b‬‬ ‫) ‪if ( a<=b‬‬
‫;"‪6.cout<<"\na is less than or equal b‬‬ ‫;)"‪6. prinC("\na is less than or equal b‬‬
‫) ‪If ( a==b‬‬ ‫) ‪if ( a==b‬‬
‫;"‪7.cout<<"\na is equal than b‬‬ ‫;)"‪7. prinC("\na is equal than b‬‬
‫) ‪if ( a!=b‬‬ ‫) ‪if ( a!=b‬‬
‫;"‪8.cout<<"\na is not equal than b‬‬ ‫;)"‪8. prinC("\na is not equal than b‬‬
‫}‬ ‫}‬
‫توضيح الخطوات ‪:‬‬
‫‪.١‬تنفذ أوال خطوة رقم )‪ (١‬ھي تعريف للمتغيرات )‪(a,b‬‬
‫‪.٢‬ثم تنفذ خطوة رقم )‪(٢‬ھي قراءة للمتغيرات التي ستدخل قيمھا من قبل المستخدم‬
‫أالن لنختبر أن ندخل قيم من شاشة التنفيذ ونرى النتائج‬
‫ لو أدخلنا )‪ (a=3,b=2‬كما الحظت قد تنفذه الخطوات رقم )‪ (3,4,8‬ألن شروطھا تحققت‬
‫وذالك ألنه‬
‫‪.١‬الشرط التابع للخطوة رقم ) ‪ ( ٣‬ھوا أن يكون قيمة ‪ a‬اكبر من قيمة ‪ b‬وفعال أن قيمة ‪ a‬التي أدخلناھا‬
‫كانت ‪ ٣‬وقيمة ‪ b=2‬لذالك نفذ الخطوة الثالثة الحظ التحقق من الشرط‬
‫)‪(a>b‬‬‫)‪(3>2‬‬ ‫‪True‬‬

‫‪Step By step to Learn C or C++‬‬ ‫‪By:Hussien Ahmmed Taleb‬‬ ‫‪48‬‬


‫‪.٢‬الشرط التابع للخطوة رقم )‪ (٤‬ھو أن يكون قيمة ‪ a‬اكبر أو يساوي قيمة ‪ b‬وفعال أن قيمة ‪ a‬التي‬
‫مھم‬
‫أدخلناھا كانت ‪ ٣‬أي كانت اكبر ‪ b=2‬لذالك نفذ الخطوة )‪(٤‬‬
‫* وشرط)=>( يتحقق إذا كان الرقم اكبر منه أو يساويه ينفذ عبارة التابعة للشرط‬
‫)‪(a>=b‬‬ ‫)‪(3>2‬‬ ‫‪True‬‬

‫‪.٣‬الشرط التابع للخطوة رقم )‪ (٨‬ھوا أن يكون قيمة ‪ a‬ال يساوي قيمة ‪ b‬وفعال أن قيمة ‪ a‬التي أدخلناھا‬
‫مھم‬
‫كانت ‪ ٣‬وقيمة ‪ b=2‬أي كانت ال تساوي لذالك نفذ الخطوة رقم )‪(٨‬‬

‫*** وبقية الخطوات لم تنفذ ألنھا لم تتحقق شروطھا‬

‫على سبيل المثال لماذا لم تنفذ الخطوة رقم )‪. (٥‬؟‬


‫ألن شرطھا أن يكون ‪ a‬اصغر من قيمة ‪ b‬وان ھذا الشرط ال يتحقق ألن قيمة ‪ a‬اكبر من قيمة ‪b‬‬
‫)‪(a<b‬‬‫)‪(3<2‬‬ ‫‪False‬‬
‫نتيجة المقارنة ھي )‪ (false‬لذالك سوف ال ينفذ الخطوة التي تتبعه الن الشرط لم يتحقق‬

‫ لو أدخلنا )‪ (a=3,b=6‬كما الحظت قد تحققت الخطوات رقم )‪ (5,6,8‬ألن شروطھا تحققت‬


‫وذالك ألنه‬
‫‪.١‬الشرط التابع للخطوة ‪ ٥‬ھوا أن يكون قيمة ‪ a‬اصغر من قيمة ‪b‬‬
‫وفعال أن قيمة ‪ a‬التي أدخلناھا كانت ‪ ٣‬وقيمة ‪ b=6‬لذالك نفذ الخطوة‬
‫رقم )‪(٥‬‬
‫)‪(a<b‬‬‫)‪(3<6‬‬ ‫‪True‬‬
‫‪.٢‬الشرط التابع للخطوة ‪ 6‬ھوا أن يكون قيمة ‪ a‬اصغر أو يساوي قيمة ‪ b‬وفعال أن قيمة ‪ a‬التي أدخلناھا‬
‫مھم‬
‫كانت ‪ ٣‬أي كانت اصغر ‪ b=6‬لذالك نفذ الخطوة ‪6‬‬
‫* وشرط)=<( يتحقق إذا كان الرقم اصغر منه أو يساويه ينفذ عبارة التابعة للشرط‬
‫)‪(a<=b‬‬ ‫)‪(3<=6‬‬ ‫‪True‬‬
‫‪.٣‬الشرط التابع للخطوة ‪ ٨‬ھوا أن يكون قيمة ‪ a‬ال يساوي قيمة ‪ b‬وفعال أن قيمة ‪ a‬التي أدخلناھا كانت ‪٣‬‬
‫وقيمة ‪b=6‬أي كانت ال تساوي لذالك نفذ الخطوة ‪٨‬‬ ‫مھم‬
‫)‪(a!=b‬‬‫)‪(3!=6‬‬ ‫‪True‬‬
‫*** وبقية الخطوات لم تنفذ ألنھا لم تتحقق شروطھا‬

‫ لو أدخلنا )‪ (a=3,b=3‬كما الحظت قد تحققت الخطوات رقم )‪(4,6,7‬‬


‫وذالك ألنه‬
‫‪.١‬الشرط التابع للخطوة ‪ ٤‬ھوا أن يكون قيمة ‪ a‬اكبر أو يساوي‬
‫قيمة ‪ b‬وفعال أن قيمة ‪ a‬التي أدخلناھا كانت ‪ ٣‬وقيمة وكانتا‬
‫متساويتان ‪ b=3‬لذالك نفذ الخطوة ‪٤‬‬
‫)‪(a>=b‬‬‫)‪(3>=3‬‬ ‫‪True‬‬

‫‪Step By step to Learn C or C++‬‬ ‫‪By:Hussien Ahmmed Taleb‬‬ ‫‪49‬‬


‫‪.٢‬الشرط التابع للخطوة ‪ 6‬ھوا أن يكون قيمة ‪ a‬اصغر أو يساوي قيمة ‪ b‬وفعال أن قيمة ‪ a‬التي أدخلناھا‬ ‫مھم‬
‫كانت ‪ ٣‬أي كانت تساوي ‪ b=3‬لذالك نفذ الخطوة ‪6‬‬
‫* وشرط)=<( يتحقق إذا كان الرقم اصغر منه أو يساويه ينفذ عبارة التابعة للشرط‬
‫)‪(a<=b‬‬ ‫)‪(3<=3‬‬ ‫‪True‬‬

‫‪.٢‬الشرط التابع للخطوة ‪ ٧‬ھوا أن يكون قيمة ‪ a‬تساوي قيمة ‪ b‬وفعال أن قيمة ‪ a‬التي أدخلناھا كانت ‪ ٣‬أي‬
‫كانت تساوي ‪ b=3‬لذالك نفذ الخطوة ‪٧‬‬
‫)‪(a==b‬‬‫)‪(3==3‬‬ ‫‪True‬‬
‫*** وبقية الخطوات لم تنفذ ألنھا لم تتحقق شروطھا‬ ‫مھم‬

‫كما الحظت في المثال لم نضع أقواس لألسطر البرمجية التي تتبع كل عبارة ‪ if‬الن كل عبارة‬
‫لم يتبعھا أكثر من سطر برمجي واحد وكما قلنا سابقا إذا كانت عبارة الشرط يتبعھا سطر‬
‫برمجي واحد ال حاجة لوضع أقواس وإذا أكثر من سطر نضع أقواس‬

‫مثال‪ :٢‬برنامج ندخل رقم ويطبع رسالة إذا كان الرقم بين) ‪ ( ١٠٠—٥‬إذا كان الرقم ضمن ھذه الفترة وإذا خارج‬
‫الفترة ال نطبع أي شيء ‪.‬؟‬

‫تحليل‪:‬‬

‫‪.١‬لدينا رقم ندخله من شاشة التنفيذ لذالك نحن بحاجة تعريف متغير يخص الرقم ودالة إلدخاله من شاشة التنفيذ وليكن‬
‫اسم المتغير ھو )‪(a‬‬

‫‪.٢‬لدينا شرط أن يقع ضمن فترة)‪ (١٠٠—٥‬في مثل ھذه األسئلة نحن بحاجة إلى دمج أكثر من شرط في عبارة‬
‫شرطية واحد كأن نقول له في الشرط أن يكون الرقم خمسة و واصغر من مئة‬

‫شرط اكبر من خمسة بسيط وھو‬

‫الكود‬
‫) ‪If ( a > 5‬‬
‫وشرط اصغر من مئة أيضا بسيط وھو‬

‫الكود‬
‫) ‪If ( a < 100‬‬

‫‪Step By step to Learn C or C++‬‬ ‫‪By:Hussien Ahmmed Taleb‬‬ ‫‪50‬‬


‫لكن في السؤال يقول ضمن الفترة وليس اكبر من خمسة على حدة واصغر من مئة على حدة إذن كيف ندمج ھذان‬
‫الشرطان‪.‬؟ بما انه قال اكبر من خمسة واصغر من مئة واستخدم عبارة )و( معنا توجد عملية )‪ (and‬بين ھذان‬
‫الشرطان أي ال تنفذ ھذه الجملة الشرطية إال بتحقق ھذان الشرطان ھكذا‬

‫الكود‬
‫) )‪If ( ( a>5 )&&(a<100‬‬ ‫مھم‬
‫*وراجع جدول )‪ (and‬لفھم الفكرة أكثر ألنه لو قلنا عملية ‪ OR‬بين الشرطيين لكان ھناك اختالف كبير في الحل أي‬
‫لو تحقق احد الشرطان في جملة ‪ OR‬تنفذ عبارة ‪ if‬إما ‪ and‬الجملة ال تنفذ إال بتحقق الشرطيين‪ .‬ليصبح الحل ھكذا‬

‫‪c++‬‬ ‫البرمجة بلغة‬ ‫‪c‬‬ ‫البرمجة بلغة‬


‫>‪#include<iostream.h‬‬ ‫>‪#include<stdio.h‬‬
‫)(‪main‬‬ ‫)(‪main‬‬
‫;‪1.{int a‬‬ ‫;‪1.{int a‬‬
‫;‪2.cin>>a‬‬ ‫;)‪2.scanf("%d",&a‬‬
‫) )‪3.if ( ( a>5 )&&(a<100‬‬ ‫) )‪3.if ( ( a>1 )&&(a<100‬‬
‫;"‪4.cout<<"the number in this range‬‬ ‫;)"‪4.printf("the number in this range‬‬
‫}‬ ‫}‬

‫توضيح الخطوات ‪:‬‬

‫خطوة رقم )‪ (١‬عرفنا متغير من نوع ‪ integer‬لكي نحمله بالقيمة المدخلة‬ ‫‪.١‬‬
‫خطوة رقم )‪ (٢‬ھي إدخال قيمة للمتغير من قبل المستخدم‬ ‫‪.٢‬‬
‫خطوة رقم )‪ (٣‬ھو عملية التحقق من الشرط‬ ‫‪.٣‬‬
‫فلو ادخل المستخدم الرقم )‪ (٤٠‬فتكون المقارنة بشكل التالي‬ ‫‬

‫‪a=50‬‬ ‫توضيح تنفيذ الشرط داخل العبارة الشرطية إذا كان‬


‫)‪( a>5 )&&(a<100‬‬

‫إذا كان قيمة المتغير )‪ (a=50‬فيكون الشرط بالشكل التالي‬


‫)‪( 50>5 )&&(50<100‬‬

‫أوال سينفذ العمليات مابين األقواس أو عملية ھل ‪ ٥٠‬اكبر‬


‫من ‪ ٥‬نعم نتيجة المقارنة تكون واحد )‪(١‬‬
‫‪1.‬‬
‫)‪1 &&(50<100‬‬

‫ثم ينفذ عملية األصغر ھل أن ‪ ٥٠‬اصغر من ‪١٠٠‬‬


‫نعم لذالك النتيجة المقارنة ھي واحد‬
‫‪2.‬‬
‫‪1 && 1=1‬‬
‫عملية ‪ and‬بين واحد وواحد النتيجة واحد إي )‪ (True‬إي يتحقق الشرط‬

‫‪Step By step to Learn C or C++‬‬ ‫‪By:Hussien Ahmmed Taleb‬‬ ‫‪51‬‬


‫ فلو ادخل المستخدم الرقم )‪ (١٥٠‬فتكون المقارنة بشكل التالي‬

‫‪a=50‬‬ ‫توضيح تنفيذ الشرط داخل العبارة الشرطية إذا كان‬


‫)‪( a>5 )&&(a<100‬‬

‫إذا كان قيمة المتغير )‪ (a=150‬فيكون الشرط بالشكل التالي‬


‫)‪( 150>5 )&&(150<100‬‬

‫أوال سينفذ العمليات مابين األقواس أو عملية ھل ‪ ١٥٠‬اكبر‬


‫من ‪ ٥‬نعم نتيجة المقارنة تكون واحد )‪(١‬‬
‫‪1.‬‬
‫)‪1 &&(150<100‬‬

‫ثم ينفذ عملية األصغر ھل أن ‪ ١٥٠‬اصغر من ‪١٠٠‬‬


‫كال لذالك النتيجة المقارنة ھي صفر‬
‫‪2.‬‬
‫‪1 && 0=0‬‬
‫عملية ‪ and‬بين واحد وصفر النتيجة صفر إي )‪ (False‬إي ال يتحقق الشرط‬

‫مثال‪:٣‬الشرط المطلوب ھوا أن قيمة المتغير )‪ (c‬يجب أن تقبل القسمة على ثالثة وعلى ستة أو تقبل القسمة على‬
‫تسعة ليحقق الشرط ‪.‬؟‬

‫التحليل‪.‬الشرطان األوالن أن يقبل القسمة على)‪ ٣‬و ‪ (٦‬إي ناتج باقي قسمتھما ھو صفر والى جانب ھذان الشرطان أن‬
‫يقبل القسمة على تسعة إي إما يقبل القسمة على )‪ ٣‬و‪ (٦‬أو يقبل القسمة على ‪ ٩‬إي يوجد بين شرطا تحقق قبول‬
‫القسمة على )‪ ٣‬و‪ (٦‬عملية ‪ and‬ألنه واجب تحققھما معا وناجتھما داخل على عملية ‪ OR‬مع شرط قبول القسمة‬
‫على ‪٩‬‬

‫الكود‬
‫) )‪If ( ( ( c%3==0 )&&(c%6==0) ) || (c% 9==0‬‬
‫مھم‬

‫*إذا لم نضع أقواس حول العمليات المطلوب تحققھما معا قد ال يحقق المطلوب ألنه تحكمه األسبقية الشرط الذي‬
‫له أسبقية أعلى ينفذ أوال‬

‫لو عدنا إلى نفس الشرط السابق وفرضنا أن بين شرط قبول القسمة على )‪ ٣‬و‪ ( ٦‬يوجد عملية ‪ OR‬وليس‬
‫عملية ‪ AND‬وواجب تحقق احدھما والناتج لھما يدخل على ‪ AND‬مع شرط تحقق القبول القسمة على ‪٩‬‬
‫وليس ‪) OR‬ولم نضع أقواس حول شرطيين تحقق قبول القسمة على ‪ ٣‬أو ‪( ٦‬‬

‫‪Step By step to Learn C or C++‬‬ ‫‪By:Hussien Ahmmed Taleb‬‬ ‫‪52‬‬


‫انظر ماذا سينتج‬

‫الكود‬
‫( ‪If‬‬ ‫‪( c%3==0 )||(c%6==0‬‬
‫) )‪(c%6==0 ) && (c% 9==0‬‬

‫فالذي ينتج سوف تحدث عملية ‪ AND‬قبل عملية ‪ OR‬الن أسبقيتھا أعلى منه ويصبح السؤال كأننا نقول يجب‬
‫أن يتحقق قبول القسمة على ‪ ٩‬مع قبول القسمة على ‪ ٦‬معا وناجتھما داخل على عملية ‪ OR‬مع شرط قبول‬
‫القسمة على ‪ ٣‬ويقلب حل السؤال ويكون الجواب خاطئا لذالك تجنب لمثل ھذه المشاكل ضع أقواس حول‬
‫الشروط التي يجب تحققھا معا لتجنب مشاكل األسبقيات كما في الشكل التالي‬

‫الكود‬
‫‪If ( ( ( c%3==0 )||(c%6==0‬‬
‫) )‪(c%6==0 ) ) && (c% 9==0‬‬

‫مھم‬

‫لماذا نستخدم بين أكثر من شرط ‪ and‬أو ‪ OR‬لماذا ال نجمع أكثر من شرط معا؟‬
‫اإلجابة ‪ :‬شاھد المثال التالي الذي نستخدم فيه أكثر من شرط بدون ) ‪ and‬أو ‪( OR‬‬

‫الكود‬
‫;‪int a=6‬‬
‫)‪if ( a>5>3‬‬

‫فالذي سوف يحدث كما تشاھد في المخطط انه سيقارن قيمة )‪ ( a‬مع )‪ (٥‬ووجد انه قيمته اكبر )‪ (a>5=True‬ثم‬
‫سيقارن نتيجة مقارنة وھي )‪ (True‬مع قيمة ) ‪ ( ٣‬وبرمجيا قيمة )‪ (True=1,False=0‬إي سيقارن قيمة ) ‪(١‬‬
‫مع ) ‪ (٣‬ووجد انه قيمة واحد اقل )‪ (1>3=False‬وأصبحت النتيجة خاطئة وليست صائبة‬

‫ورغم أنة قيمة المتغير )‪ (a‬ھو اكبر من ) ‪ (٣‬واكبر من )‪ ( ٥‬لكن في البرمجة عند مقارنة متغيرين أو قيمتين‬
‫يعطيك نتيجة مقارنة ونتائج المقارنة إما تكون )‪ True‬أو ‪ ( False‬وعند مقارنة نتيجة مقارنة مع عدد تكون نتائج‬
‫غير صحيحة‬

‫وھذا توضيح لما سيجري من عمليات مع ھذا الشرط‬

‫‪Step By step to Learn C or C++‬‬ ‫‪By:Hussien Ahmmed Taleb‬‬ ‫‪53‬‬


‫توضيح تنفيذ الشرط‬
‫‪a> 5 > 3‬‬

‫إذا كان قيمة المتغير )‪ (a=6‬فيكون الشرط بالشكل التالي‬


‫‪6> 5 > 3‬‬

‫بما أن األسبقيات متساوية سيبدأ بتنفيذ العمليات من اليسار إلى اليمين‬


‫فيقارن ھل ‪ ٦‬اكبر من ‪ ٥‬نعم نتيجة المقارنة ھي)‪ (True‬أي واحد‬
‫‪1.‬‬
‫‪1 >3‬‬

‫سيتحقق من الشرط التالي ھل الواحد اكبر من ثالثة كال فتكون نتيجة ھي )‪ (false‬إي صفر‬
‫‪2.‬‬ ‫‪1>3=0‬‬

‫لذالك فالحل الصحيح بما إننا نريد تحقق الشرطان معا نستخدم بينھم عملية ‪ and‬كأن نقول يجب أن تكون قيمة ) ‪(a‬‬
‫اكبر من ) ‪ (٣‬واكبر من )‪.( ٥‬‬

‫الكود‬
‫;‪int a=6‬‬
‫) )‪if ( ( a>5) && (a>3‬‬

‫لو رسمنا المخطط التوضيحي للمثال بعد التعديل يكون بشكل التالي‬

‫توضيح تنفيذ الشرط‬


‫)‪( a>5) && (a>3‬‬
‫إذا كان قيمة المتغير )‪ (a=6‬فيكون الشرط بالشكل التالي‬
‫)‪( 6>5) && (6>3‬‬

‫سيبدأ أوال بتنفيذ ما بين األقواس بما أن األسبقيات متساوية سيبدأ‬


‫بتنفيذ العمليات من اليسار إلى اليمين فيقارن ھل ‪ ٦‬اكبر من ‪ ٥‬نعم‬
‫نتيجة المقارنة ھي)‪ (True‬أي واحد‬
‫‪1.‬‬
‫)‪1 && (6>3‬‬

‫سيتحقق من الشرط التالي ھل الستة اكبر من ثالثة كال فتكون نتيجة‬


‫ھي)‪ (True‬أي واحد‬
‫‪2.‬‬ ‫‪1 && 1=1‬‬
‫عملية )‪ (and‬بين واحد و واحد ھي واحد فالنتيجة ھي )‪(True‬‬

‫‪Step By step to Learn C or C++‬‬ ‫‪By:Hussien Ahmmed Taleb‬‬ ‫‪54‬‬


‫مثال‪:٤‬بين بعد تتبع ھذا البرنامج ما ھي قيم )‪ ( a ,b‬التي ستطبع على شاشة التنفيذ ‪.‬؟‬

‫‪c++‬‬ ‫البرمجة بلغة‬ ‫‪c‬‬ ‫البرمجة بلغة‬


‫>‪#include<iostream.h‬‬ ‫>‪#include<stdio.h‬‬
‫)(‪main‬‬ ‫)(‪main‬‬
‫{‬ ‫{‬
‫;‪1.int a=5‬‬ ‫;‪1.int a=5‬‬
‫;‪2.int b=7‬‬ ‫;‪2.int b=7‬‬
‫) ‪If ( b %2==1‬‬ ‫) ‪If ( b %2==1‬‬
‫{‬ ‫{‬
‫;‪3.a=a+6‬‬ ‫;‪3.a=a+6‬‬
‫‪4.b=b+4‬‬ ‫‪4.b=b+4‬‬
‫}‬ ‫}‬
‫;‪5.a=a+3‬‬ ‫;‪5.a=a+3‬‬
‫‪6.b=b+2‬‬ ‫‪6.b=b+2‬‬
‫};‪7.cout<<"a="<<a<<"\t b="<<b‬‬ ‫};)‪7.prinC("a=%d \t b=%d",a, b‬‬

‫تتبع خطوات البرنامج‪:‬‬

‫‪ .١‬خطوة رقم )‪ (١‬أصبح قيمة )‪(a=5‬‬


‫‪ .٢‬خطوة رقم )‪ (٢‬أصبح قيمة )‪ (b=7‬وقيمة )‪ (a‬بقت ثابتة لم تتغير محتفظة بقيمتھا في الخطوة السابقة )‪(a=5‬‬

‫‪ .٣‬قبل خطوة رقم )‪ (٣‬يوجد شرط لتنفيذ مابين قوسي العبارة الشرطية وھو أن يكون باقي قسمة قيمة المتغير ‪b‬‬
‫على )‪ (٢‬تساوي واحد أن يكون رقم فردي وفعال باقي قسمته )‪ (٧‬على )‪ (٢‬ھو واحد لذالك سينفذ الخطوة‬
‫رقم )‪٣‬و‪ (٤‬وتكون المقارنة بشكل التالي‬
‫‪(b%2==1)(7%2==1) (1==1)True‬‬

‫• في الخطوة رقم )‪ (٣‬أصبح قيمة )‪ (a‬ھي )‪ ( a=5+6=11‬وقيمة )‪ (b‬بقت ثابتة لم تتغير )‪(b=7‬‬
‫• خطوة رقم )‪ (٤‬أصبح قيمة )‪ (b‬ھي )‪ ( b=7+4=11‬وقيمة )‪ (a‬بقت ثابتة لم تتغير )‪(a=11‬‬
‫‪ .٤‬خطوة رقم )‪ (٥‬أصبح قيمة )‪ (a‬ھي )‪ ( a=11+3=14‬وقيمة )‪ (b‬بقت ثابتة لم تتغير )‪(b=11‬‬
‫‪ .٥‬خطوة رقم )‪ (٦‬أصبح قيمة )‪ (b‬ھي )‪ ( b=11+2=13‬وقيمة )‪ (a‬بقت ثابتة لم تتغير )‪(a=14‬‬

‫والنتيجة على شاشة التنفيذ ھي‬


‫‪a=14‬‬ ‫‪b=13‬‬

‫‪Step By step to Learn C or C++‬‬ ‫‪By:Hussien Ahmmed Taleb‬‬ ‫‪55‬‬


‫مثال‪:٥‬نفس المثال السابق فقط غير قيمة ) ‪ ( b‬في الخطوة )‪ (٢‬إلى رقم )‪ (٤‬إي )‪ (b=4‬ولنتتبع البرنامج الجديد ؟‬

‫‪c++‬‬ ‫البرمجة بلغة‬ ‫‪c‬‬ ‫البرمجة بلغة‬


‫>‪#include<iostream.h‬‬ ‫>‪#include<stdio.h‬‬
‫)(‪main‬‬ ‫)(‪main‬‬
‫{‬ ‫{‬
‫;‪1.int a=5‬‬ ‫;‪1.int a=5‬‬
‫;‪2.int b=4‬‬ ‫;‪2.int b=4‬‬
‫) ‪If ( b %2==1‬‬ ‫) ‪If ( b %2==1‬‬
‫{‬ ‫{‬
‫;‪3.a=a+6‬‬ ‫;‪3.a=a+6‬‬
‫‪4.b=b+4‬‬ ‫‪4.b=b+4‬‬
‫}‬ ‫}‬
‫;‪5.a=a+3‬‬ ‫;‪5.a=a+3‬‬
‫‪6.b=b+2‬‬ ‫‪6.b=b+2‬‬
‫};‪7.cout<<"a="<<a<<"\t b="<<b‬‬ ‫};)‪7.prinC("a=%d \t b=%d",a, b‬‬

‫‪ .١‬خطوة رقم )‪ (١‬أصبح قيمة )‪(a=5‬‬


‫‪ .٢‬خطوة رقم )‪ (٢‬أصبح قيمة )‪ (b=4‬وقيمة )‪ (a‬بقت ثابتة لم تتغير محتفظة بقيمتھا في الخطوة السابقة‬ ‫مھم‬
‫)‪(a=5‬‬
‫‪ .٣‬قبل الخطوة رقم )‪ (٣‬يوجد شرط لتنفيذ مابين قوسي العبارة الشرطية وھو أن يكون باقي قسمة قيمة المتغير‬
‫‪ b‬على )‪ (٢‬تساوي واحد أن يكون رقم فردي وان باقي قسمته على )‪ (٢‬ھو صفر لذالك سوف ال ينفذ الخطوة‬
‫رقم )‪٣‬و‪ (٤‬وينتقل إلى خطوة رقم )‪ (٥‬وتكون المقارنة بشكل التالي‬
‫‪False‬‬
‫)‪(b%2==1)(4%2==1) (0==1‬‬

‫‪ .٤‬خطوة رقم )‪ (٥‬أصبح قيمة )‪ (a‬ھي )‪ ( a=5+3=8‬وقيمة )‪ (b‬بقت ثابتة لم تتغير )‪(b=4‬‬
‫‪ .٥‬خطوة رقم )‪ (٦‬أصبح قيمة )‪ (b‬ھي )‪ ( b=4+2=6‬وقيمة )‪ (a‬بقت ثابتة لم تتغير )‪(a=8‬‬

‫والنتيجة على شاشة التنفيذ ھي‬


‫‪a=8‬‬ ‫‪b=6‬‬ ‫مھم‬

‫في لغة )‪ (C++‬تمكنك من تعريف متغيرات أينما تشاء في البرنامج فلو عرفنا متغير بين قوسي العبارة الشرطية‬
‫يكون غير معرف بالنسبة لمن ھم خارج قوسي العبارة الشرطية فقط معرف بالداخل‬

‫الكود‬
‫)‪If ( True>3‬‬
‫};‪{int x=5‬‬
‫‪x=3; //‬‬ ‫سوف يعترض المترجم على ھذا السطر ويعتبر )‪ (x‬غير معرف‬
‫إي أن المتغير ننتھي حياته عند الخروج من العبارة الشرطية‬

‫‪Step By step to Learn C or C++‬‬ ‫‪By:Hussien Ahmmed Taleb‬‬ ‫‪56‬‬


‫‪.٢‬عبارة )‪ (if--else‬الشرطية‪:‬‬
‫ھي عبارة شرطية مكونة من جزئيين من االكواد البرمجية الذي نريده أن ينفذ بتحقق شرط )‪ (condition‬نضعه‬
‫داخل قوسي )‪ (if‬والذي نريده أن ينفذ في حالة عدم تحقق الشرط نضعه بين قوسي )‪(else‬‬
‫شكل عبارة ‪ if --else‬الشرطية‬
‫) ‪If ( condition‬‬
‫{‬
‫‪Statement1‬‬
‫}‬
‫‪else‬‬
‫{‬
‫‪Statement2‬‬
‫}‬

‫وذا لم يتحقق الشرط سينفذ تلقائيا‬


‫ إي بتوضيح أكثر إذا تحقق )‪ (condition‬ينفذ ‪، Statement1‬‬
‫‪Statement2‬‬
‫ إي إما ينفذ األسطر البرمجية بين قوسي )‪ (If‬أو ينفذ األسطر البرمجية بين قوسي )‪(else‬‬

‫للتوضيح إذا كان الشرط ھو‬


‫شكل عبارة ‪ if --else‬الشرطية‬
‫) ‪If ( input_Numner%2==0‬‬
‫{‬
‫‪Statement1‬‬
‫}‬
‫‪else‬‬
‫{‬
‫‪Statement2‬‬
‫}‬

‫ومن الشرط الموجود )) ‪ (If ( input_Numner%2==0‬إي متى ما كان )‪ (input_Numner‬باقي قسمته على )‪(٢‬‬
‫ھو صفر سوف ينفذ ‪Statement1‬‬

‫وخالفه إي إذا لم يتحقق الشرط إي إذا كان )‪ (input_Numner‬باقي قسمته على )‪ (٢‬ال يساوي صفر سوف‬
‫ينفذ ‪Statement2‬‬

‫ ) ‪ (Statement2 ،Statement1‬قد تكون سطر برمجي واحد أو أكثر من سطر فتوضع بين قوسين‬

‫‪Step By step to Learn C or C++‬‬ ‫‪By:Hussien Ahmmed Taleb‬‬ ‫‪57‬‬


‫مثال توضيحي عن خطوات سير البرنامج في وجود عبارة شرطية )‪. (if—else‬وھو برنامج تدخل رقم من شاشة‬
‫التنفيذ ويبين لك ھل الرقم موجب أم سالب )إي ھل ھوا اكبر من الصفر أو اصغر منه(‬

‫‪c++‬‬ ‫البرمجة بلغة‬ ‫‪c‬‬ ‫البرمجة بلغة‬


‫>‪#include<iostream.h‬‬ ‫>‪#include<stdio.h‬‬
‫)(‪main‬‬ ‫)(‪main‬‬
‫;‪{1.int a‬‬ ‫;‪{1.int a‬‬
‫; ‪2cin>>a‬‬ ‫;)‪2.scanf("%d",&a‬‬
‫) ‪If ( a>0‬‬ ‫) ‪If ( a>0‬‬
‫;)"‪3. prinC("is greater than 1 is posi7ve‬‬ ‫;)" ‪3. prinC(" is greater than 1 is posi7ve‬‬
‫‪else‬‬ ‫‪else‬‬
‫;)"‪4. prinC("is less than 1 is negative‬‬ ‫;)" ‪4. prinC(" is less than 1 is nega7ve‬‬
‫;‪5. a=a+6‬‬ ‫;‪5. a=a+6‬‬
‫}‪6.‬‬ ‫}‪6.‬‬

‫تتبع خطوات البرنامج‪-:‬‬

‫‪.١‬خطوة رقم )‪ (١‬تم تعريف متغير )‪ (a‬من نوع ‪integer‬‬

‫‪.٢‬خطوة رقم )‪ (٢‬يطلب من المستخدم إدخال قيمة للمتغير )‪ (a‬من شاشة التنفيذ‬
‫مھم‬
‫‪.٣‬أالن نأتي إلى شرط التحقق‬

‫ إذا ادخل المستخدم إي رقم اكبر من صفر سوف يحقق شرط )‪ (if‬و ينفذ السطر )‪ (٣‬ويطبع ھذه الرسالة‬

‫‪isisgreater‬‬
‫‪greaterthan‬‬
‫‪than11isisposi7ve‬‬
‫‪posi7ve‬‬
‫ويطفر السطر )‪) (٤‬ألنه يتحقق إذا لم ينفذ الشرط( تم ينفذ السطر )‪ (٥‬تم السطر )‪ (٦‬إي يكون تسلسل تنفيذ‬
‫خطوات البرنامج الكلية‬

‫‪1‬‬ ‫‪2‬‬ ‫‪3‬‬ ‫‪5‬‬ ‫‪6‬‬


‫ إذا ادخل المستخدم إي رقم اصغر من صفر سوف ال يحقق شرط )‪ (if‬ولذالك ينتقل إلى )‪ (else‬و ينفذ‬
‫السطر )‪ (٤‬ويطبع ھذه الرسالة في شاشة التنفيذ‬

‫‪isisless‬‬
‫‪lessthan‬‬
‫‪than11isisnega7ve‬‬
‫‪nega7ve‬‬

‫تم ينفذ السطر )‪ (٥‬تم السطر )‪ (٦‬إي يكون تسلسل تنفيذ خطوات البرنامج الكلية‬

‫‪1‬‬ ‫‪2‬‬ ‫‪4‬‬ ‫‪5‬‬ ‫‪6‬‬

‫‪Step By step to Learn C or C++‬‬ ‫‪By:Hussien Ahmmed Taleb‬‬ ‫‪58‬‬


‫مھم‬

‫العبارات الشرطية المتداخلة‪-:‬‬


‫بعد أن تعرفنا عن )‪ (if –else‬وعبارة ) ‪ (if‬الشرطية ‪.‬في بعض البرامج قد نحتاج إلى النوعان معا بشكل‬
‫متداخل أو منفصل حسب الحاجة ويبقى لكل عبارة طريقتھا نفسھا في المعالجة ولكنھا تدخل ضمن عبارة أخرى‬
‫)إي ال تنفذ إال بتنفيذ العبارة إالم(كھذا المثال حيث وقعت عبارة )‪ (if –else‬ضمن عبارة ) ‪ (if‬ووضعناھا بين‬
‫أقواس لكي تبين أنھا تابعة إلى ) ‪ ( if‬إالم‪.‬‬

‫الكود‬
‫)‪if (input_Try > 0‬‬
‫{‬
‫)‪if (input_Try > 5‬‬
‫;"‪1.cout<<"the number is greater than 5‬‬
‫‪else‬‬
‫;"‪2.out<<" the number is less than 5‬‬
‫}‬
‫‪3.‬‬

‫ وان عبارة )‪ (if –else‬ال تنفذ مطلقا وال يمر عليھا المترجم إال بتحقق شرط العبارة الشرطية إالم وھي‬
‫)‪ if (input_Try > 0‬إي أن يكون الرقم المدخل )‪ (input_Try‬اكبر من صفر‬
‫ إذا كان الرقم المدخل فعال اكبر من صفر سوف يمر على عبارة )‪ (if –else‬الداخلية وإما ينفذ الخطوة رقم‬
‫)‪ (١‬أو الخطوة رقم )‪(٢‬‬
‫ وإذا لم يكن اكبر من صفر ال يمر أصال على عبارة )‪ (if –else‬الداخلية ويتجه نحو الخطوة )‪ (٣‬لينفذھا‬
‫الن عبارة )‪ (if –else‬الداخلية واقعة ضمن عبارة الشرطية )‪ if (input_Try > 0‬وبما أن شرطھا لم يتحقق‬
‫لذالك سوف ال ينفذ ما ھو موجود داخل قوسيھا‬

‫مھم‬

‫• إذا جاء لدينا أكثر من )‪ (if‬وأكثر من ) ‪ ( else‬فكيف نعرف أن ھذه ) ‪ ( if –else‬تنفي العبارة‬
‫الشرطية )‪ (if‬األولى أم الثانية أم غيرھما‪..‬؟‬

‫بكل سھولة كل )‪ (else‬تنفي اقرب عبارة )‪ (if‬الشرطية عليھا‪.‬‬

‫‪Step By step to Learn C or C++‬‬ ‫‪By:Hussien Ahmmed Taleb‬‬ ‫‪59‬‬


‫مثال‪ :‬مقارنة بين مثاليين احدھما يستخدم العبارة المتداخلة وأخر البوابات لتحقق شرط أن يكون الرقم يقبل القسمة‬
‫على ثالثة وال يقبل القسمة على تسعة وشرط أخر أن يقبل القسمة على ثالثة ويقبل القسمة على تسعة ‪.‬؟‬

‫بدون العبارات الشرطية المتداخلة‬ ‫‪c++‬‬ ‫الكود بلغة‬ ‫باستخدام العبارات الشرطية المتداخلة‬ ‫‪c++‬‬ ‫الكود بلغة‬
‫>‪#include<iostream.h‬‬ ‫>‪#include<iostream.h‬‬
‫)(‪main‬‬ ‫)(‪main‬‬
‫{‬ ‫{‬
‫;‪int Number=80‬‬ ‫;‪int Number=80‬‬
‫))‪If (( Number % 3==0)&&( Number % 9 !=0‬‬ ‫)‪If (( Number % 3==0‬‬
‫;"‪cout<<"the number is donot aceept mod to 9‬‬ ‫{‬
‫))‪If (( Number % 3==0)&&( Number % 9 ==0‬‬ ‫))‪if( Number % 9 !=0‬‬
‫;"‪cout<<" the number is aceept mod to 9‬‬ ‫;"‪cout<<"the number is donot aceept mod to 9‬‬
‫}‬ ‫‪else‬‬
‫;"‪cout<<" the number is aceept mod to 9‬‬
‫}‬
‫}‬

‫بدون العبارات الشرطية المتداخلة‬ ‫‪c‬‬ ‫الكود بلغة‬ ‫باستخدام العبارات الشرطية المتداخلة‬ ‫‪c‬‬ ‫الكود بلغة‬
‫>‪#include<stdio.h‬‬ ‫>‪#include<stdio.h‬‬
‫)(‪main‬‬ ‫)(‪main‬‬
‫{‬ ‫{‬
‫;‪int Number=80‬‬ ‫;‪int Number=80‬‬
‫))‪If (( Number % 3==0)&&( Number % 9 !=0‬‬ ‫)‪If (( Number % 3==0‬‬
‫;)"‪printf("the number is donot aceept mod to 9‬‬ ‫{‬
‫))‪If (( Number % 3==0)&&( Number % 9 ==0‬‬ ‫))‪if( Number % 9 !=0‬‬
‫;)"‪printf(" the number is aceept mod to 9‬‬ ‫;)"‪prinC("the number is donot aceept mod to 9‬‬
‫}‬ ‫‪else‬‬
‫;)"‪prinC(" the number is aceept mod to 9‬‬
‫}‬
‫}‬

‫لو تالحظ أن المثاالن يعطيان نفس النتيجة لكن باستخدام العبارات المتداخلة تكون االكواد البرمجية أكثر سھولة‬
‫ووضوح للمبرمج ‪.‬وفي بعض األحيان مع بعض األسئلة ال نستطيع استخدام الطريقة األولى ألنك تجد نفسك محكوما‬
‫باستخدام الطريقة الثانية الن بھا مرونة أكثر‬

‫مھم‬

‫وإذا وقع عبارتي )‪ (if‬متتاليتين ويليھما عبارتي ل )‪ (else‬متتاليتين فستنفي ال )‪ (else‬األولى اقرب عبارة‬
‫)‪ (if‬عليھا إي عبارة )‪ (if‬الثانية وستنفي ال )‪ (else‬الثانية اقرب عبارة )‪ (if‬عليھا وبما أن عبارة)‪ (if‬الثانية‬
‫نفتھا )‪ (else‬األولى فسيكون عبارة )‪ (if‬األولى ھي تخص ال )‪ (else‬الثانية شاھد المثال لفھم الشرح‪.‬‬

‫‪Step By step to Learn C or C++‬‬ ‫‪By:Hussien Ahmmed Taleb‬‬ ‫‪60‬‬


input_Try=7 , input_Try=4) ‫ تتبع خطوات الحل في البرنامج التالي إذا كان الرقم المدخل من شاشة التنفيذ‬:‫مثال‬
‫( وطلب المثال ھو طباعة ھل األعداد فردية أو زوجية لكن فقط األرقام الموجبة‬input_Try= -3

C++ ‫الكود بلغة‬


#include<iostream.h>
Main()
{
1.int input_Try;
2.cin>> input_Try;
if (input_Try > 0) ‫( األولى‬if) ‫ ( األخيرة تكون مخالفة لل‬else) ‫نالحظ أن‬
if (input_Try %2==0)
3.cout<<"the number is positive even";
else
4.cout<<" the number is positive Odd";
else
5.cout<<"the number is less than zero";
}

C ‫الكود بلغة‬
#include<stdio.h>
Main()
{
1.int input_Try;
2.scanf("%d", input_Try);
if (input_Try>0) ‫( األولى‬if) ‫ ( األخيرة تكون مخالفة لل‬else) ‫نالحظ أن‬
if (input_Try %2==0)
3.printf(" the number is positive even ");
else
4. printf(" the number is positive Odd ");
else
5. printf("the number is less than zero")
}
:‫توضيح الخطوات‬

input_Try ‫( تم تعريف متغير اسمه‬١) ‫ خطوة رقم‬.١


‫( تم طلب إدخال قيمة للمتغير من شاشة التنفيذ ثم يتحقق من الشروط التالية‬٢) ‫ خطوة رقم‬.٢
input_Try= -3 ‫ إذا كان الرقم المدخل من شاشة التنفيذ‬

‫( أي اقل من صفر أي لم‬-3) ‫ ھي‬input_Try ‫ وان قيمة المتغير‬if (input_Try>0) ‫سيتم التحقق من الشرط‬
‫( ويطبع في شاشة التنفيذ‬٥) ‫( الثانية وينفذ الخطوة رقم‬else) ‫يحقق الشرط لذالك سيتجه إلى عبارة‬
the number is less than zero

Step By step to Learn C or C++ By:Hussien Ahmmed Taleb 61


‫مھم‬

‫لماذا لم ينفذ خطوة رقم )‪ (٣‬وخطوة رقم )‪.. (٤‬؟‬

‫كما قلنا سابقا كل عبارة شرطية )‪ (if‬يتبعھا سطر واحد إذا لم نضع أقواس وإذا أكثر من سطر يتبع العبارة الشرطية‬
‫التي نضع أقواس حول الذي يتبعھا وبما انه ھنا ال يوجد أقواس معناه الذي سيتبع العبارة الشرطية )‪if (input_Try>0‬‬
‫ھوا فقط السطر الذي يليه وھو )‪ if (input_Try %2==0‬وھذا السطر أيضا يتبعه سطر واحد ويوجد عبارة‬
‫‪ else‬له إي )كأننا نقول إذا تحقق الشرط األول وكان الرقم اكبر من صفر توجد عبارة شرطية تتحقق منه إذا كان‬
‫الرقم فردي أم زوجي لكن الموجب فقط يمر على عبارة )‪ (if—else‬ألنھا قيدت بالشرط الذي قبلھا(‬

‫ إذا كان الرقم المدخل من شاشة التنفيذ ‪input_Try=7‬‬

‫سيتم التحقق من الشرط )‪ if (input_Try>0‬وان قيمة المتغير ‪ input_Try‬ھو )‪ (٧‬إي اكبر من صفر إي‬
‫حقق الشرط لذالك سيتجه إلى عبارة )‪ if (input_Try %2==0‬التي تلي شرط التحقق‬
‫وھذه العبارة تتحقق في ما إذا كان الرقم ‪.‬زوجي وفعال الرقم ‪ ٧‬ھو زوجي لذالك وينفذ الخطوة رقم )‪(٣‬‬
‫ويطبع في شاشة التنفيذ‬
‫‪the number is positive even‬‬

‫وال ينفذ الخطوة )‪ (٤‬الن الشرط )‪ if (input_Try %2==0‬تحقق وأيضا ال ينفذ الخطوة رقم )‪ (٥‬الن شرط‬

‫)‪ if (input_Try>0‬تحقق‬

‫ إذا كان الرقم المدخل من شاشة التنفيذ ‪input_Try=4‬‬

‫سيتم التحقق من الشرط )‪ if (input_Try>0‬وان قيمة المتغير ‪ input_Try‬ھي )‪ (٤‬أي اكبر من صفر أي‬
‫حقق الشرط لذالك سيتجه إلى عبارة )‪ if (input_Try %2==0‬التي تلي شرط التحقق‬
‫وھذه العبارة تتحقق في ما إذا كان الرقم زوجي وان الرقم ‪ ٤‬ھو رقم فردي لذالك ال يتحقق الشرط وينفذ عبارة‬
‫‪ else‬وينفذ الخطوة رقم )‪ (٤‬ويطبع في شاشة التنفيذ‬

‫‪the number is positive Odd‬‬

‫ال ينفذ الخطوة رقم )‪ (٥‬الن شرط )‪ if (input_Try>0‬تحقق‬

‫‪Step By step to Learn C or C++‬‬ ‫‪By:Hussien Ahmmed Taleb‬‬ ‫‪62‬‬


‫‪.٢‬عبارة )‪ (if—else if‬الشرطية‪:‬‬
‫ھي مجموعة عبارات شرطية متخالفة في شروطھا ‪ .‬أي تكون واحدة مخالفة إلى األخرى في شرطھا ‪ .‬ويتم التحقق‬
‫من الشروط وقت التنفيذ إذا لم يتحقق الشرط األول ينتقل إلى )‪ (else if‬الثانية وإذا لم تتحقق ينتقل إلى الثالثة حتى‬
‫أخيرا يصل إلى الشرط الذي يتحقق وإذا تحقق واحد من )‪ (if‬سوف ينفذ ما في داخلھا وبھمل البقية ‪.‬‬

‫الشكل العام‬
‫شكل عبارة ‪ if –else if‬الشرطية‬
‫) ‪If ( condi7on1‬‬
‫{‬
‫‪Statement1‬‬
‫}‬
‫‪ else if‬يكون غير محدد يحددھا المستخدم حسب حاجته ‪else if( condi7on2‬‬ ‫عدد‬
‫‪)//‬‬
‫{‬
‫‪Statement2‬‬
‫}‬
‫) ‪Else if( condi7on3‬‬
‫{‬
‫‪Statement3‬‬
‫}‬
‫نستطيع أن نضع ‪ else‬أو نحذفھا إذا لم نحتاج إليھا ‪else //‬‬
‫{‬
‫‪Statement4‬‬
‫}‬ ‫مھم‬
‫خطوات برمجية أخرى ‪ //‬خطوة جديدة‬

‫إذا تحقق ‪ condition1‬سوف ينفذ ‪ Statement1‬وينتقل بعدھا إلى "خطوة جديدة"‬ ‫‬
‫إذا لم يتحقق ‪ condition1‬سوف ينتقل إلى ‪ condition2‬وإذا تحقق الشرط سوف ينفذ ‪Statement2‬‬ ‫‬
‫بعدھا إلى "خطوة جديدة"‬
‫إذا لم يتحقق ‪ condition1‬سوف ينتقل إلى ‪ condition2‬وإذا تحقق الشرط سوف ينفذ ‪Statement2‬‬ ‫‬
‫بعدھا إلى "خطوة جديدة"‬
‫إذا لم يتحقق ‪ condition1‬سوف ينتقل إلى ‪ condition2‬وإذا لم يتحقق ‪ condition2‬سوف ينتقل‬ ‫‬
‫إلى ‪ condition3‬وإذا تحقق الشرط سينفذ ‪ Statement3‬بعدھا إلى "خطوة جديدة"‬

‫ وإذا لم يتحقق إي من ‪ conditions‬سوف ينفذ ما موجود في ‪ else‬وبعدھا ينتقل إلى" خطوة جديدة"‬

‫‪Step By step to Learn C or C++‬‬ ‫‪By:Hussien Ahmmed Taleb‬‬ ‫‪63‬‬


‫مثال‪:‬برنامج تدخل رقم ويبين لكل ھل الرقم)يقبل القسمة على ‪ ٣‬أم على ‪ ٥‬أم على ‪ ٧‬أم غير ذالك ويطبع رسالة في‬
‫كل حالة( في حال إذا قبل القسمة على ‪ ٧‬يجمع مع الرقم المدخل قيمة ‪ ٢‬ويطبعه‬

‫‪c++‬‬ ‫البرمجة بلغة‬ ‫‪c‬‬ ‫البرمجة بلغة‬


‫>‪#include<iostream.h‬‬ ‫>‪#include<stdio.h‬‬
‫)(‪main‬‬ ‫)(‪main‬‬
‫{‬ ‫{‬
‫;‪1.int number_enter‬‬ ‫;‪1.int number_enter‬‬
‫;‪2.cin>> number_enter‬‬ ‫;) ‪2.scanf("%d",& number_enter‬‬
‫)‪if ( number_enter % 3==0‬‬ ‫)‪if ( number_enter % 3==0‬‬
‫; "‪3.cout<<"Acept Devide to 3‬‬ ‫;)"‪3.prinC("Acept Devide to 3‬‬
‫)‪else if (number_enter % 5==0‬‬ ‫)‪else if (number_enter % 5==0‬‬
‫; "‪4. cout<<" Acept Devide to 5‬‬ ‫;)"‪4.prinC(" Acept Devide to 5‬‬
‫)‪else if (number_enter % 7==0‬‬ ‫)‪else if (number_enter % 7==0‬‬
‫{‬ ‫{‬
‫;‪5.number_enter= number_enter+2‬‬ ‫;‪5.number_enter= number_enter+2‬‬
‫;‪6. cout<<" Acept Devide to 7=" << number_enter‬‬ ‫;)‪6.prinC(" Acept Devide to 7=%d", number_enter‬‬
‫}‬ ‫}‬
‫‪else‬‬ ‫‪else‬‬
‫; "‪7. cout<<"Donot True any of condi7ons‬‬ ‫;)"‪7.prinC("Donot True any of condi7ons‬‬
‫}‬ ‫}‬
‫تتبع خطوات البرنامج مع التوضيح‪:‬‬

‫‪.١‬خطوة رقم )‪ (١‬تنفذ بشكل اعتيادي‬

‫‪.٢‬خطوة رقم )‪ (٢‬تنفذ بشكل اعتيادي ويطلب من المستخدم إدخال قيمة للمتغير )‪ ( number_enter‬من شاشة‬
‫التنفيذ لنفرض إننا أدخلنا )‪ (number_enter‬مرة )‪ ٦‬و‪١٤‬و‪١٥‬و‪ ٢٠‬و ‪(١٩‬‬

‫لنتتبع القيم المدخلة‬

‫ إذا كان ‪number_enter=6‬‬

‫سوف ينفذ الخطوة رقم )‪ (٣‬وينتھي البرنامج )حسب شرح عن الدالة)‪ (if—else if‬إذا تحقق احد الشروط في احد‬
‫العبارات تنفذ ما في داخله وتتجه إلى ما بعد ‪ else‬النھائية لتنفذه وبما انه ال يوجد شي بعد ‪ else‬يوجد فقط قوس‬
‫نھاية البرنامج لذالك ستنھي البرنامج( طابعا للرسالة التالية تم وينتھي البرنامج‬

‫‪Acept Devide to 3‬‬

‫ إذا كان ‪number_enter=14‬‬

‫طابعا للرسالة التالية تم وينتھي البرنامج‬ ‫سوف ينفذ الخطوة رقم )‪ (5‬وخطوة رقم )‪(6‬‬

‫‪Acept Devide to 7=9‬‬

‫‪Step By step to Learn C or C++‬‬ ‫‪By:Hussien Ahmmed Taleb‬‬ ‫‪64‬‬


‫مھم‬

‫إذا كان ‪number_enter=15‬‬ ‫‬

‫سوف ينفذ الخطوة رقم )‪ (3‬وال ينفذ وخطوة رقم )‪ (٤‬رغم قبوله القسمة على ) ‪ ( ٥‬ألنه برمجيا عندما يبدأ‬
‫البرنامج بالتحقق من الشروط يبدأ بالتحقق بالتسلسل خطوة بخطوة حسب الترتيب ونحن واضعين شرط قبول القسمة‬
‫على ثالثة قبل شرط قبول القسمة على خمسة وعندما يمر البرنامج على الشرط األول وحققه ال يمر على الشرط‬
‫الثاني بل يتجه إلى ما بعد )‪ .(else‬لو كنا واضعين شرط قبول القسمة على خمسة قبل شرط قبول القسمة على ثالثة‬
‫لتنفذ خطوة رقم )‪ .(٤‬لذالك سيطبع البرنامج أالن ھذه الرسالة‬

‫‪Acept Devide to 3‬‬

‫ إذا كان ‪number_enter=20‬‬

‫سوف ينفذ الخطوة رقم )‪ (٤‬طابعا للرسالة التالية تم وينتھي البرنامج‬

‫‪Acept Devide to 5‬‬

‫ إذا كان ‪number_enter=19‬‬

‫سوف لن يحقق إي من الشروط السابقة لذالك سيتجه إلى )‪ (else‬ينفذ الخطوة رقم )‪ (٧‬طابعا للرسالة التالية تم‬
‫وينتھي البرنامج‬

‫‪Donot True any of conditions‬‬

‫ خطوة رقم )‪ ٥‬و‪ (٦‬وضعت بين قوسين للداللة على أنھما تابعتان لعبارة )‪(else‬‬

‫‪Step By step to Learn C or C++‬‬ ‫‪By:Hussien Ahmmed Taleb‬‬ ‫‪65‬‬


‫ ( يظھر يوم األحد في شاشة التنفيذ والبقية بالتسلسل إلى‬١ )‫ برنامج يقوم بطباعة أيام األﺳبوع بحيث إذا ضغطنا‬:‫مثال‬
‫؟‬. ‫( يمثل السبت‬٧ )

‫بما انه يوجد لدينا سبعة أيام فوضع كل يوم على حدة بعبارة شرطية يعقد البرنامج شيئ ما لذال‬:‫تحليل المتطلبات‬
‫( لتسھيل األمر قليال شاھد المثال بسيط جدا‬if—else if) ‫سنستخدم العبارة الشرطية‬

C ++ ‫الكود بلغة‬
#include<iostream.h>
main()
{int Day_Number;
cin>> Day_Number ;
if ( Day_Number==1)
cout<<"sunday" ;
else if ( Day_Number==2)
cout<<"monday" ;
else if ( Day_Number==3)
cout<<"Tuerday" ;
else if ( Day_Number==4)
cout<<"wednesday" ;
else if ( Day_Number==5)
cout<<"thursday" ;
else if ( Day_Number==6)
cout<<"fridaay" ;
else if ( Day_Number==7)
cout<<"saturday" ;
else
cout<<"error" ; }

C ‫الكود بلغة‬
#include<stdio.h>
main()
{int Day_Number;
scanf("%d",& Day_Number );
if ( Day_Number==1)
printf("sunday");
else if ( Day_Number==2)
printf("monday");
else if ( Day_Number==3)
printf("Tuerday");
else if ( Day_Number==4)
printf("wednesday");
else if ( Day_Number==5)
printf("thursday");
else if ( Day_Number==6)
printf("fridaay");
else if ( Day_Number==7)
printf("saturday");
else
printf("error"); }

‫( ظھر اليوم‬٥) ‫شاھد شاشة التنفيذ عندما أدخلنا الرقم‬

(Thursday) ‫المقابل له وھو‬

Step By step to Learn C or C++ By:Hussien Ahmmed Taleb 66


‫عبارة )‪ (Switch—Case‬الشرطية‪:‬‬
‫ھي مجموعة عبارات شرطية )‪ (Case‬ويقارن القيمة عند كل )‪ (Case‬مع المتغير في )‪ . (switch‬ويتم التحقق‬
‫من الشروط وقت التنفيذ فإذا لم يتحقق الشرط األول ينتقل إلى )‪ (Case‬الثانية فإذا لم يتحقق الشرط الثاني ينتقل إلى‬
‫)‪ (Case‬الثالثة حتى أخيرا يصل إلى الشرط الذي يتحقق وإذا تحقق واحد من )‪ (Case‬سوف ينفذ ما في داخلھا‬
‫وبھمل البقية وإذا لم ينفذ إي واحد منھن سوف يتجه لينفذ ما في داخل )‪ .(default‬وتكون مشابه كثيرا جدا )‪(if else if‬‬

‫الشكل العام‬
‫شكل عبارة ‪ if --elseif‬الشرطية‬
‫) ‪Switch(Truth of Case‬‬
‫عدد ال ‪ Case‬يكون غير محدد يحددھا المستخدم حسب حاحته‪{ Case condi7on1: //‬‬
‫{‬
‫‪Statement1‬‬
‫;‪} Break‬‬
‫‪Case condi7on2‬‬
‫{‬
‫‪Statement2‬‬
‫;‪} Break‬‬
‫‪Case condi7on3:‬‬
‫{‬
‫‪Statement3‬‬
‫;‪} Break‬‬
‫نستطيع أن نضع ‪ default‬أو نحذفھا إذا لم نحتاجھا ‪default: //‬‬
‫‪{ Statement4‬‬ ‫}‬ ‫}‬ ‫مھم‬
‫خطوات برمجية أخرى ‪ //‬خطوة جديدة‬

‫)‪:(Truth of Case‬ھو المتغير أو عملية رياضية الذي ينتج عنھا قيمة معينه تتم مقارنه ھذه القيمة مع كل‬
‫‪ condition‬موجودة في كل ‪ Case‬وأيھا يحقق الشرط ينفذ البرنامج )‪ (Statement‬الخاص به‪.‬‬
‫شاھد ھذا التوضيح في المثال لتوضيح الصورة إذا كان لدينا متغير اسمه ‪ Number‬وتريد لينفذ احد الشروط أن‬
‫يكون قيمته )‪ (٥١‬تكتب ھكذا في جمل شرطية‬
‫الكود‬
‫)‪if ( Day_Number==51‬‬
‫‪//do some thing‬‬

‫في حالة ‪ Switch--Case‬نكتبھا ھكذا‬

‫الكود‬
‫)‪Switch(Day_Number‬‬
‫‪Case 51: //do some thing‬‬
‫;‪Break‬‬

‫‪Step By step to Learn C or C++‬‬ ‫‪By:Hussien Ahmmed Taleb‬‬ ‫‪67‬‬


‫( كحال الجمل الشرطية إي إذا كنا نقارن مع حرف نضعه ھكذا‬Switch—Case) ‫ حال‬

‫الكود‬
Switch(Capatat_symbol)
Case 'a': //do some thing
Break;

‫( ھي أي عدد من االكواد البرمجية يمكن كتابتھا وحسب الحاجة وتذكر إذا أردنا أن‬do some thing) ‫حيث أن‬
.(Break) ‫( يجب أن نضعھا داخل قوسين وبعدھا نكتب‬Case) ‫نكتب أكثر من سطر برمجي داخل‬

"‫ وينتقل بعدھا إلى "خطوة جديدة‬Statement1 ‫ سوف ينفذ‬condiHon1 ‫إي أن إذا تحقق‬ •
Statement2 ‫ وإذا تحقق الشرط سوف ينفذ‬condiHon2 ‫ سوف ينتقل إلى‬condiHon1 ‫إذا لم يتحقق‬ •
"‫بعدھا إلى "خطوة جديدة‬
"‫ وبعدھا ينتقل إلى" خطوة جديدة‬default ‫ سوف ينفذ ما موجود في‬conditions ‫وإذا لم يتحقق إي من‬ •
‫( ھذا شيء ثابت في ھيكلية ھذه الدالة لكي يخرج من‬case) ‫( في نھاية كل‬Break) ‫نالحظ وجود‬ •
‫( بعد تحقق احد الشروط‬switch)

‫ لدينا المعومات التالية عن ھؤالء األشخاص نريد مجرد كتابة أول حرف من اسم الشخص يعطيك المعلومات‬:‫مثال‬
‫الكاملة عنه‬

1.Ali: his names Ali kammel,20 Year old, third stage


1.Salem: his names Salem kammel,18 Year old, third stage
1.Hussien: his names Hussien Ahmmed Taleb,21 Year old, third stage eng.Computer

C ++ ‫الكود بلغة‬
#include<iostream.h>
main()
{1.char index_of_Name;
2.Cout<<"Enter First Chat of Student name: ";
3.Cin>> index_of_Name ;
4.switch( index_of_Name ) {
5.case 'A':
6.Cout<<" his names Ali kammel,20 Year old, third stage " ;
7.break;
8.case 'S':
9.Cout<<" his names Salem kammel,18 Year old, third stage " ;
10.break;
11.case 'H':
12.Cout<<" his names Hussien Ahmmed Taleb,21 Year old, third stage eng.Computer " ;
13.break;
14.default:
15.Cout<<"You Not have saved names in this index" ; }}

Step By step to Learn C or C++ By:Hussien Ahmmed Taleb 68


‫‪C‬‬ ‫الكود بلغة‬
‫>‪#include<stdio.h‬‬
‫)(‪main‬‬
‫;‪{1.char index_of_Name‬‬
‫;)" ‪2.printf("Enter First Chat of Student name:‬‬
‫; )‪3.scanf("%c", index_of_Name‬‬
‫{ ) ‪4.switch( index_of_Name‬‬
‫‪5.case 'A':‬‬
‫; )" ‪6. printf(" his names Ali kammel,20 Year old, third stage‬‬
‫;‪7.break‬‬
‫‪8.case 'S':‬‬
‫; )" ‪9. printf(" his names Salem kammel,18 Year old, third stage‬‬
‫;‪10.break‬‬
‫‪11.case 'H':‬‬
‫; )" ‪12. printf(" his names Hussien Ahmmed Taleb,21 Year old, third stage eng.Computer‬‬
‫;‪13.break‬‬
‫‪14.default:‬‬
‫}} ; )"‪15. printf("You Not have saved names in this index‬‬

‫‪.١‬خطوة رقم )‪ (١‬عرفنا متغير اسمه )‪ (index_of_Name‬من نوع حرفي‬

‫‪.٢‬خطوة رقم )‪ (٢‬طبع رسالة للمستخدم تطلب منه إدخال أول حرف من اسم الشخص ھذه الرسائل مھمة جدا لواجه‬
‫برنامجك حتى يعلم المستخدم كيف يتعامل مع برنامجك ما ھو المطلوب منه وماذا يدخل فدائما حاول أن يكون‬
‫برنامجك واضح للمستخدم بھذه الرسائل‬
‫‪.٣‬خطوة رقم)‪ (٣‬قمنا بقراءة حرف من شاشة التنفيذ ‪ ،‬خطوة )‪ (٤‬أدخلنا الحرف الذي ادخله المستخدم في قائمة‬
‫الخيارات وھي )‪(switch‬‬

‫‪.٤‬خطوة رقم )‪ (٥‬تحوي حالة شرطية ألول حرف من اسم الشخص )‪ (Ail‬وتالحظ األحرف في المقارنة توضع بين‬
‫عالمة تنصيصية واحدة من الجانبين ھكذا )'‪('A‬‬

‫‪.٥‬خطوة رقم )‪ (٦‬تطبع سجل ھذا الشخص إذا كان ھوا المطلوب ‪ ،‬وخطوة رقم )‪ (٧‬توقف ال ‪ case‬لھذه الحالة‬

‫وبقية الخطوات نفس الشيء‬

‫الحظ عندما أدخلنا حرف ) ‪(H‬ماذا ظھر في شاشة التنفيذ‬

‫‪Step By step to Learn C or C++‬‬ ‫‪By:Hussien Ahmmed Taleb‬‬ ‫‪69‬‬


‫( الخاص بطباعة أيام األسبوع حسب الرقم نحله باستخدام‬if –else if) ‫ نفس المثال السابق في موضوع‬:‫مثال‬
‫( قارنه بالمثال السابق وشاھد الفرق‬switch—case)

C ++ ‫الكود بلغة‬
#include<iostream.h>
main()
{int Day_Number ;
Cin>> Day_Number ;
switch( Day_Number ) {
case 1:cout<<"sunday" ;
break;
case 2: cout<<"monday" ;
break;
case 3: cout<<"Tuerday" ;
break;
case 4: cout<<"wednesday" ;
break;
case 5: cout<<"thursday" ;
break;
case 6: cout<<"fridaay" ;
break;
case 7: cout<<"saturday" ;
break;
default: cout<<"error" ; }
}

C ‫الكود بلغة‬
#include<stdio.h>
main()
{int Day_Number ;
scanf("%d",& Day_Number );
switch( Day_Number ) {
case 1: printf("sunday");
break;
case 2:printf("monday");
break;
case 3:printf("Tuerday");
break;
case 4:printf("wednesday");
break;
case 5:printf("thursday");
break;
case 6:printf("fridaay");
break;
case 7:printf("saturday");
break;
default: printf("error"); }
}

(Thursday)‫( ظھر اليوم المقابل له وھو‬٥) ‫شاھد شاشة التنفيذ عندما أدخلنا الرقم‬

Step By step to Learn C or C++ By:Hussien Ahmmed Taleb 70


‫مھم‬

!.. Switch ‫وضع عبارات شرطية داخل جمل‬

‫ حالھا كحال إي كود برمجي أخر‬case ‫( الشرطية بمختلف أنواعھا داخل كل‬if ) ‫يمكن وضع عبارات‬
‫ برنامج تدخل رقم من شاشة التنفيذ ثم يطلب من المستخدم إدخال رقم العملية التي يريد أن يؤديھا‬:‫على سبيل المثال‬
‫على ھذه الرقم إذا ادخل المستخدم رقم واحد سوف يبين له ھل الرقم فردي أم زوجي وإذا ادخل رقم اثنان يبين له ھل‬
‫الرقم اكبر من صفر أو اصغر منه‬
C++ ‫البرمجة بلغة‬
#include<iostream.h>
main()
{int Number,Chose_check ;
Cout<<"enter your number: ";
Cin>> Number ;
Cout<<"enter Your Selected check (1) or 2:" ;
Cin>> Chose_check ;
switch( Chose_check ) {
case 1:{
if ( Number % 2== 0)
cout<<"the number is even";
else
cout<<"the number is odd";}
break;
case 2:{
if ( Number >0)
cout<<"the number is more than zero";
else
cout<<"the number is less than zero";}
break;
default: cout<<"Error Choice";}}

C ‫البرمجة بلغة‬
#include<stdio.h>
main()
{int Number,Chose_check ;
Printf("enter your number: ");
Scanf("%d",&Number) ;
Printf("enter Your Selected check (1) or 2:") ;
Scanf("%d", &Chose_check) ;
switch( Chose_check ) {
case 1:{
if ( Number % 2== 0)
Printf("the number is even");
else
Printf("the number is odd");}
break;
case 2:{
if ( Number >0)
Printf("the number is more than zero");
else
Printf("the number is less than zero");}
break;
default: Printf("Error Choice");}}
‫شاھد شاشة التنفيذ‬

Step By step to Learn C or C++ By:Hussien Ahmmed Taleb 71


‫)‪(loop‬‬ ‫
   

‫المستوى المطلوب‬
‫ٔ‬
‫ٔان يكون القارئ ملما بما هو في الفصل االول والثاني وفاهما كل شيء‬

‫ٔ‬
‫االهداف‪:‬‬
‫عندما يكـتمل الفصل تكون بإذن ﷲ قد ٔاتممت التعرف علﻰ دوال التكرار وطريقة اﺴتخدامها‬

‫ٔ‬
‫مستوى االداء المطلوب بعد إنهاء الفصل‬
‫إتقان هذه الفصل ‪100%‬‬

‫ٔ‬
‫االدوات المطلوبة‪:‬ﺣاﺴوب شخصي لتجربة البرامج وقلم ودفتر لتسجيل المالﺣظات‬

‫الوقت المطلوب ‪ٔ :‬اربع ﺴاعات‬

‫‪Step By step to Learn C or C++‬‬ ‫‪By:Hussien Ahmmed Taleb‬‬ ‫‪72‬‬


‫‪.١‬عبارة )‪ ( For--Loop‬التكرارية االعتيادية‪:‬‬
‫في الفصليين السابقين علمنا أن البرنامج يبدأ بالتنفيذ خطوة خطوة دون تكرار إي خطوة إلى أن يصل إلي نھاية‬
‫البرنامج وعملنا في حال وجود جمل )‪ (if‬الشرطية في البرنامج قد يكون بسببھا ھناك استثناء بعض الخطوات من‬
‫التنفيذ إذا لم يتحقق الشرط ‪.‬والسؤال ھنا ماذا لو أردنا تكرار خطوة أو أكثر من خطوة ألكثر من مرة لسبب ما كيف‬
‫نعمل ذالك وھذا ما تؤديه الدوال التكرارية ومنھا عبارة )‪ (For‬ھي عبارة تكرارية تستخدم لتكرار خطوة في حالة لم‬
‫نضع أقواس أو مجموعة خطوات في حال حصرھا بين قوسي لعدد معين من المرات يحددھا المبرمج ‪.‬وشكلھا العام‬

‫ھيكلية ‪For--Loop‬‬
‫)‪for (Initializing; Boolean_Expression; Update‬‬
‫{‬
‫‪statement‬‬
‫}‬
‫• )‪ :(Initializing‬ھي القيمة البداية المعطاة للمتغير التي منھا سيبدأ العد‪) .‬مثال ‪(i=0‬‬
‫• )‪ :(Boolean_Expression‬ھو شرط التوقف الذي عندما تصبح قيمة المتغير غير محققة لشرط التوقف‬
‫سوف يخرج من عبارة )‪ (for‬بمعنى أخر مادام نتيجة اختباره ال )‪ (Boolean_Expression‬ھي‬
‫)‪ (True‬العبارة التكرارية تستمر بالتكرار ومتى أصبح )‪ (False‬يخرج من العبارة التكرارية‪.‬‬
‫مثال ) ‪ ( i<5‬ھوا شرط التوقف ويبدأ العد من الواحد سيتوقف إذا أصبح )‪ (i=5‬ألنه نتيجة المقارنة )‪(False‬‬
‫• )‪:(Update‬ھي مقدار الزيادة أو النقصان في قيمة المتغير في كل دورة )‪ .(loop‬مثال )‪ ( i++‬أو )‪ (i--‬وال‬
‫يختلف إذا كان الشرط )‪ (i++ or ++i , --i or i--‬ألنه في كل الحاالت ال تزداد قيمة العداد إال بعد تنفيذ‬
‫الجمل بين قوسي العبارة التكرارية مؤثرا على شرط التكرار في الدورة الجديدة التي تليه‬

‫• )‪ :(statement‬ھي الخطوات البرمجية التي ستنفذ عدد من المرات ‪.‬إذا كانت عبارة عن خطوة برمجية‬
‫واحدة فليس بحاجة لوضعھا داخل أقواس وإذا كانت أكثر من خطوة يجب وضعھا داخل أقواس‪.‬‬
‫مھم‬

‫كيف تعمل عبارة )‪ (For‬التكرارية‪........‬؟‬

‫أن المتغير يبدأ بقيمة بدائية )‪ (Initializing‬ويستمر بالزيادة أو النقصان حسب )‪ (Update‬إي قد يزداد أو ينقص‬
‫بمقدار واحد أو أكثر من واحد ومتى ما أصبح قيمة المتغير غير محققة للشرط )‪ (Boolean_Expression‬يخرج‬
‫من العبارة التكرارية إلى الخطوات البرمجية التي تليه‪ .‬وإذا كانت محققة للشرط ينفذ الخطوات البرمجية التي داخل‬
‫العبارة التكرارية‬

‫ إلدخال )‪ (for‬في دوارة النھائية نكتب );;(‪ for‬فقط ‪.‬‬

‫‪Step By step to Learn C or C++‬‬ ‫‪By:Hussien Ahmmed Taleb‬‬ ‫‪73‬‬


‫مثال‪ :‬لو أردنا عداد يعد من )‪ (0‬إلى )‪ (4‬إي يطبع على شاشة التنفيذ من )‪ 0‬إلى ‪. (4‬؟‬
‫‪c++‬‬ ‫البرمجة بلغة‬ ‫‪c‬‬ ‫البرمجة بلغة‬
‫>‪#include<iostream.h‬‬ ‫>‪#Include<stdio.h‬‬
‫)(‪main‬‬ ‫)(‪main‬‬
‫;‪{1.int i‬‬ ‫;‪{1.int i‬‬
‫)‪2.for (i=0; i<5; i++‬‬ ‫)‪2.for (i=0; i<5; i++‬‬
‫;"‪3.cout<<i<<"\t‬‬ ‫;)‪3.prinC("%d\t",i‬‬
‫}‬ ‫}‬
‫توضيح الخطوات ‪:‬‬

‫‪.١‬خطوة رقم )‪ (١‬عرفنا متغير )‪ (i‬من نوع ‪integer‬‬


‫‪.٢‬خطوة رقم )‪(٢‬ھي عبارة تكرارية بما إننا نريد العد من الصفر فأعطينا القيم البدائية صفر ‪.‬والعد يصل إلى ‪٤‬‬
‫معناه شرط التوقف أن يكون اقل من خمسة بما إننا نريد أن يعد خمس عدات بين صفر واألربعة لذالك يجب أن‬
‫يكون مقدار الزيادة واحد ليعد )‪. (0 ,1,2,3,4‬الن لو جعلنا مقدار الزيادة ‪ ٢‬مثال فسيعد العداد ثالث مرات وبشكل‬
‫التالي)‪ (0,2,4‬لذالك يجب التركيز في ھذه المواضيع جيدا‬
‫القيمة البدائية‬ ‫مھم‬
‫للعداد )‪(i=0‬‬

‫شرط التحقق)‪(i<5‬‬

‫طباعة القيمة‬

‫زيادة قيمة العداد‬


‫)‪ (i++‬بعد تنفيذ ما‬
‫بين قوسي العبارة‬
‫التكرارية‬

‫خروج من جملة‬
‫التكرار‬

‫لو تالحظ المخطط الخاص بالبرنامج عندما يحقق الشرط يتجه لخطوة الطباعة وإذا لم يحقق يخرج من جملة تكرار‬

‫‪.٣‬خطوة رقم )‪ (٣‬ھي طباعة قيمة المتغير عند كل ) ‪ ( loop‬وبما أن الذي يتبع العبارة التكرارية سطر واحد فليس‬
‫بحاجة لوضعه بين قوسين تضمين) }{( ‪.‬‬

‫سيطبع في شاشة التنفيذ‬

‫عدد مرات تنفيذ الخطوات‪ :‬تنفذ خطوة رقم )‪ (١‬مرة واحدة فقط‪.‬وتنفذ خطوة رقم)‪ (٢‬وخطوة رقم )‪ (٣‬خمس‬
‫مرات بقدر عدات العداد‬

‫‪Step By step to Learn C or C++‬‬ ‫‪By:Hussien Ahmmed Taleb‬‬ ‫‪74‬‬


‫مثال‪ :‬لو أردنا عداد يعد من )‪ (4‬إلى )‪ (0‬إي يطبع على شاشة التنفيذ )‪. ( 4 3 2 1 0‬؟‬

‫تحليل‪:‬حلھا نفس حل السؤال السابق فقط نقلب العداد إي نجعل قيمته البدائية ھي ‪ ٤‬وشرط التوقف اكبر أو يساوي‬
‫صفر ويتناقص بمقدار واحد كل عدة‬

‫‪C++‬‬ ‫البرمجة بلغة‬


‫>‪#include<iostream.h‬‬
‫)(‪main‬‬
‫;‪{1.int i‬‬
‫)‪2.for (i=4; i>=0; i--‬‬
‫;"‪3.cout<<i<<"\t‬‬
‫}‬

‫‪C‬‬ ‫البرمجة بلغة‬


‫>‪#Include<stdio.h‬‬
‫)(‪main‬‬
‫;‪{1.int i‬‬
‫)‪2. for (i=4; i>=0; i--‬‬
‫;)‪3.printf("%d\t",i‬‬
‫}‬

‫توضيح الخطوات ‪:‬‬

‫‪.١‬خطوة رقم )‪ (١‬عرفنا متغير )‪ (i‬من نوع ‪integer‬‬

‫‪.٢‬خطوة رقم )‪(٢‬ھي عبارة تكرارية بما إننا نريد العد من األربعة فأعطينا القيم البدائية أربعة ‪.‬والعد يصل إلى‬
‫الصفر معناه شرط التوقف أن يكون اكبر أو يساوي صفر بما إننا نريد أن يعد خمس عدات بين صفر واألربعة لذالك‬
‫يجب أن يكون مقدار نقصان واحد ليعد )‪. (4,3,2,1,0‬الن لو جعلنا مقدار النقصان ‪ ٢‬مثال فسيعد العداد ثالث مرات‬
‫مرة)‪ (4,2,0‬لذالك يجب التركيز في ھذه المواضيع جيدا‬

‫سيطبع في شاشة التنفيذ‬

‫عدد مرات تنفيذ الخطوات‪:‬‬

‫تنفذ خطوة رقم )‪ (١‬مرة واحدة فقط‪.‬وتنفذ خطوة رقم)‪ (٢‬وخطوة رقم )‪ (٣‬خمس مرات بقدر عدات العداد‬

‫‪Step By step to Learn C or C++‬‬ ‫‪By:Hussien Ahmmed Taleb‬‬ ‫‪75‬‬


‫مثال‪ :‬برنامج لجمع اإلعداد الفردية بين ) ‪(0—100‬‬

‫تحليل‪ :‬نرى انه يريد اإلعداد الفردية فقط لذالك يجب أن نتجاوز اإلعداد الزوجية ‪.‬نكون عداد يعد من الواحد وشرط‬
‫التوقف عند المائة ومقدار الزيادة في )‪ (٢‬حتى نجمع فقط اإلعداد الفردية ) العداد أوال يعد الرقم واحد وإذا أضفنا إليه‬
‫)‪ (٢‬يعد الرقم ثالثة وإذا أضفنا )‪ (٢‬يعد خمسة وإذا أضفنا )‪ (٢‬يعد الرقم سبعة ويستمر إلى )‪( (٩٩‬‬

‫‪C++‬‬ ‫البرمجة بلغة‬


‫>‪#include<iostream.h‬‬
‫)(‪main‬‬
‫;‪{1.int n‬‬
‫;‪2.int sum=0‬‬
‫)‪3.for (n=1; n<100; n=n+2‬‬
‫; ‪4. sum += n‬‬
‫;‪5.Cout<<"sum="<<sum‬‬
‫}‬

‫‪C‬‬ ‫البرمجة بلغة‬


‫>‪#include<stdio.h‬‬
‫)(‪main‬‬
‫;‪{1.int n‬‬
‫;‪2.int sum=0‬‬
‫)‪3.for (n=1; n<100; n=n+2‬‬
‫; ‪4. sum += n‬‬ ‫مھم‬
‫;)‪5.printf("sum=%d",sum‬‬
‫}‬
‫توضيح الخطوات‪:‬‬
‫‪ .١‬خطوة رقم )‪ (١‬عرفنا متغير ) ‪ (n‬من نوع )‪ (integer‬ليكون عداد للعبارة التكرارية‬
‫‪ .٢‬خطوة رقم )‪ (٢‬عرفنا متغير )‪ (sum‬من نوع )‪ (integer‬وأعطيناه قيمة بدائية وھي صفر ألننا سنجمع والنضير‬
‫الجمعي ھو صفر حتى عندما نجمعه مع أول قيمة وھي واحد سيجمع واحد مع الصفر‬
‫التباس‪:‬قد يسأل سائل لما ال نجمعه مباشر إي ال نصفر قيمة )‪ (sum‬ھذا شيء خاطئ ألنه كما نعلم أن المتغيرات‬
‫عند تعريفھا تحجز مكان في الذاكرة لكن ال يخزن في ذالك المكان قيمة يبقى فارغ لذالك لو جمعناه بدون تصفير‬
‫لجمع قيمة أول عدد فردي مع عنوان الموقع وليس قيمة المخزنة في الموقع الن الموقع ليس فيه إي قيمة لذالك‬
‫يجب وضع قيمة في الموقع وھي صفر‬
‫‪ .٣‬خطوة رقم )‪ (٣‬كونا عداد يعد من الواحد إلى ‪)٩٩‬الن عندما يصبح ‪ ١٠١‬يكون أعلى من ‪ ١٠٠‬فال ينفذه(‬
‫‪ .٤‬خطوة رقم )‪ (٤‬جمعنا قيمة المتغير )‪ (sum‬مع قيمة العداد عند كل عدة‪ .‬إي عندما يكون ) ‪ (n=1‬سيجمع‬
‫)‪ (sum=0+1‬وعندما يصبح ) ‪ (n=3‬سيجمع قيمة )‪ (sum‬السابقة وھي أصبحت واحد مع ثالثة )‪(sum=1+3‬‬
‫وعندما يصبح ) ‪ (n=5‬سيجمع قيمة )‪ (sum‬السابقة وھي أصبحت أربعة مع ثالثة )‪ (sum=4+5‬ويستمر‪ .‬ونالحظ‬
‫إننا لم نحيط خطوة رابعة بين قوسي الن عبارة التكرار تتبعھا خطوة واحد فليس بالحاجة لوضع أقواس‬
‫‪ .٥‬خطوة رقم )‪ (٥‬طباعة الناتج الجمع في شاشة التنفيذ‬
‫‪Sum=2500‬‬
‫عدد مرات تنفيذ الخطوات‪:‬تنفذ خطوة رقم )‪١‬و‪ (٢‬مرة واحدة فقط‪.‬وتنفذ خطوة رقم)‪ (٣‬وخطوة رقم )‪ (٤‬خمسين‬
‫مرة الن اإلعداد الفردية بين)‪ (0—100‬ھي خمسين رقم وتنفذ خطوة رقم)‪ (٥‬مرة واحدة‬

‫‪Step By step to Learn C or C++‬‬ ‫‪By:Hussien Ahmmed Taleb‬‬ ‫‪76‬‬


‫مثال‪ :‬برنامج يدخل المستخدم درجات ‪ ١٠‬مواد وتقوم بحساب المعدل له‬

‫تحليل‪ :‬بما انه يريد حساب المعدل من عشر درجات فيجب جمع ھذه الدرجات وقسمتھا على عشرة للحصول على‬
‫المعدل وبما أن يدخلھا المستخدم وبما إنھن عشر درجات فيصعب إدخالھا كل واحد على حدة لذالك نستخدم عبارة‬
‫) ‪ (For‬التكرارية تتكرر عشر مرات ونضع تحتھا جملة القراءة )حيث عند كل عدة للعبارة التكرارية يطلب منك‬
‫إدخال درجة ويجمع الدرجات المدخلة عند كل إدخال وناتج الجمع يقسم بعد اإلدخال على عشرة‬

‫‪C++‬‬ ‫البرمجة بلغة‬


‫>‪#include<iostream.h‬‬
‫)(‪main‬‬
‫;‪{1.int n,aveg,input_number‬‬
‫;‪2.int sum=0‬‬
‫{ )‪3.for (n=0; n<10; n++‬‬
‫;‪4. cin>> input_number‬‬
‫}; ‪5. sum += input_number‬‬
‫;‪6. aveg=sum/10‬‬
‫; ‪7.Cout<<" aveg ="<< aveg‬‬
‫}‬

‫‪C‬‬ ‫البرمجة بلغة‬


‫>‪#include<stdio.h‬‬
‫)(‪main‬‬
‫;‪{1.int n,aveg,input_number‬‬
‫;‪2.int sum=0‬‬
‫{ )‪3.for (n=0; n<10; n++‬‬
‫;)‪4. scanf("%d", &input_number‬‬
‫}; ‪5. sum += input_number‬‬
‫;‪6. aveg=sum/10‬‬
‫;) ‪7. printf(" aveg =%d", aveg‬‬
‫}‬
‫تحليل‪:‬‬

‫‪.١‬خطوة رقم )‪ (١‬عرفنا متغير ) ‪ (n‬ليكون عداد للعبارة التكرارية ومتغير حساب المعدل ومتغير إدخال الدرجات‬
‫‪.٢‬خطوة رقم )‪ (٢‬عرفنا متغير )‪ (sum‬من نوع )‪ (integer‬وأعطيناه قيمة بدائية وھي صفر ألننا سنجمع والنضير‬
‫الجمعي ھو صفر‬
‫‪ .٣‬خطوة رقم )‪ (٣‬ھي جملة تكرارية مطلوب منھا تكرر الخطوة رقم )‪ (٤‬وخطوة رقم )‪ (٥‬عشر مرات وبما انه‬
‫مطلوب أن يكرر أكثر من سطر برمجي يجب وضعھما بين قوسي العبارة التكرارية‬
‫‪.٤‬خطوة رقم )‪ (٤‬ھي دالة إدخال عند كل عدة للجملة التكرارية يطلب من المستخدم إدخال درجة جديدة‬
‫‪ .٥‬خطوة رقم )‪ (٥‬يقوم بجمع الدرجات المدخلة عند كل إدخال يجمع الدرجة الجديدة مع ناتج جمع الدرجات السابقة‬
‫‪.٦‬خطوة رقم )‪ (٦‬يقوم بحساب المعدل حيث يقسم ناتج جمع الدرجات المدخلة على عشرة‬
‫‪.٧‬خطوة رقم )‪ (٧‬يقوم بطباعة المعدل‬

‫عدد مرات تنفيذ الخطوات‪:‬تنفذ خطوة رقم )‪١‬و‪ (٢‬مرة واحدة فقط‪.‬وتنفذ خطوة رقم)‪٣‬و ‪٤‬و‪ (٥‬عشر مرات وتنفذ‬
‫خطوة رقم)‪ ٦‬و‪ (٧‬مرة واحدة‬

‫‪Step By step to Learn C or C++‬‬ ‫‪By:Hussien Ahmmed Taleb‬‬ ‫‪77‬‬


‫مثال‪ :‬لمعرفة ھل العدد الذي أدخلته عدد أولي أم ال‬

‫تحليل‪ :‬العدد األولي ھو العدد الذي يقبل القسمة على نفسه وعلى واحد فقط )إذا قبل الرقم القسمة على غير ھذان‬
‫الرقمان فھو عدد غير أولي( ‪.‬ولحل ھذا السؤال نكون عداد يعد من االثنان إلى اقل من الرقم المدخل بواحد )مثال‬
‫إذا كان الرقم المدخل ‪ ٢١‬نكون عدد يعد من ‪ ٢‬إلى ‪ (٢٠‬وإذا قبل الرقم المدخل القسمة على إي من أرقام العداد التي‬
‫سيعدھا وھي المحصورة بين اثنان واقل من الرقم بواحد فيكون عدد غير أولي وإذا لم يقبل القسمة على إي من ھذه‬
‫اإلعداد فھو عدد أولي ‪.‬‬
‫‪C++‬‬ ‫البرمجة بلغة‬
‫>‪#include<iostream.h‬‬
‫)(‪main‬‬
‫;‪{1.int i,input_number‬‬
‫;‪2.int booleanx=0‬‬
‫;‪3.cin>> input_number‬‬
‫)‪4.for(i=2;i< input_number ;i++‬‬
‫)‪5.if( input_number%i==0‬‬
‫;‪6.booleanx=1‬‬
‫)‪7.if (booleanx==1‬‬
‫; "‪8.cout<<"The Number is no prime‬‬
‫‪9.else‬‬
‫} ; "‪10.cout<<" The Number is prime‬‬

‫‪C‬‬ ‫البرمجة بلغة‬


‫>‪#include<stdio.h‬‬
‫)(‪main‬‬
‫;‪{1.int i,input_number‬‬
‫;‪2.int booleanx=0‬‬
‫;)‪3.scanf("%d",& input_number‬‬
‫)‪4.for(i=2;i< input_number ;i++‬‬
‫)‪5.if( input_number%i==0‬‬
‫;‪6.booleanx=1‬‬
‫)‪7.if (booleanx==1‬‬
‫; )"‪8.printf("The Number is no prime‬‬
‫‪9.else‬‬
‫} ;) "‪10.printf(" The Number is prime‬‬

‫توضيح الخطوات‪:‬‬
‫‪.١‬خطوة رقم )‪ (١‬تم تعريف متغير للعداد وأخر للرقم المدخل‬
‫‪.٢‬خطوة رقم )‪ (٢‬تم تعريف متغير واعتبر كمتغير منطقي وأعطية قيمة صفر إذا كان الرقم المدخل أولي يبقى صفر‬
‫حتى نھاية البرنامج وإذا كان غير أولي يتغير في خطوة رقم )‪ (٦‬إلى واحد للداللة على أن الرقم الذي تم إدخاله رقم‬
‫غير أولي حتى في نھاية البرنامج وبالتحديد في خطوة رقم )‪ (٧‬نتأكد من قيمة ھذا المتغير إذا بقى صفر فكان الرقم‬
‫المدخل أولي وإذا تغير إلى واحد كان الرقم المدخل غير أولي‬
‫‪.٣‬خطوة رقم )‪(٣‬يطلب من المستخدم إدخال الرقم من شاشة التنفيذ للتحقق منه‬
‫‪.٤‬خطوة رقم )‪ (٤‬عداد يعد من االثنان إلى اقل من الرقم المدخل بواحد ويزداد بمقدار واحد‬

‫‪Step By step to Learn C or C++‬‬ ‫‪By:Hussien Ahmmed Taleb‬‬ ‫‪78‬‬


‫‪.٥‬خطوة رقم )‪ (٥‬نتحقق ھل يقبل الرقم المدخل القسمة على أي رقم من األرقام التي سيعدھا العداد إذا قبل القسمة‬
‫نغير قيمة للمتغير المنطقي إلى واحد في خطوة رقم )‪(٦‬‬
‫‪.٦‬خطوة رقم )‪ (٧‬بعد أن ينتھي العداد من العد سيتجه البرنامج إلى ھذه الخطوة ونتأكد من قيمة المتغير المنطقي إذا‬
‫تغيرت إلى واحد نطبع رسالة أن عدد غير أولي‬
‫وإذا بقيت صفر نطبع رسالة أن الرقم الذي تم إدخاله ھو عدد أولي‬
‫بعد أن نفذنا البرنامج وأدخلنا الرقم ‪ ١٣‬انظر ماذا ظھر في شاشة التنفيذ‬

‫عدد مرات تنفيذ الخطوات‪:‬تنفذ خطوة رقم )‪١‬و‪ ٢‬و‪ (٣‬مرة واحدة فقط‪.‬‬
‫فإذا كان الرقم المدخل مثال ‪ ٧‬ستنفذ خطوة رقم)‪ (٤‬ثالث مرات ألنھا ستعد )‪ (2 , 3 ,4‬وسوف ال تنفذ خطوة رقم‬
‫)‪ ٥‬و‪ (٦‬الن إذا كان الرقم المدخل ‪ ٧‬فھو ال يقبل القسمة على)‪ ٢‬أو ‪ ٣‬أو ‪ (٤‬وبما انه لم يقبل القسمة على إي من‬
‫ھذه األرقام ستبقى قيمة )‪ (booleanx=0‬ثابتة على قيمتھا األولية لذالك خطوة رقم )‪ ٧‬و ‪ (٨‬ال تنفذ الن شرطھا لم‬
‫يتحقق لذالك ستنفذ خطوة رقم )‪ ٩‬و‪(١٠‬‬

‫مثال‪ :‬برنامج إليجاد مفكوك اإلعداد‪.‬؟‬


‫تحليل ‪:‬المفكوك ھو عملية ضرب العدد باإلعداد التي ھي اقل منه وصوال إلى الواحد )مثال مفكوك ‪٦‬‬
‫ھو)‪ . ((6!=6*5*4*3*2*1‬إي أن ))‪ (n!=n*(n-1‬وبرمجيا لحل ھذا السؤال نكون عدد يبدأ من الواحد وينتھي‬
‫بالرقم المدخل ونضرب قيم العداد واحدة باألخرى إلى النھاية نحصل على المفكوك‬

‫‪C++‬‬ ‫البرمجة بلغة‬


‫>‪#include<iostream.h‬‬
‫)(‪main‬‬
‫;‪{1.int i,number‬‬
‫;‪2.int fact=1‬‬
‫; ‪3.cin>> number‬‬
‫)‪4.for(i=1;i<= number ;i++‬‬
‫;‪5.fact = fact *i‬‬
‫}; ‪6.cout<<"factoral= "<< fact‬‬

‫‪C‬‬ ‫البرمجة بلغة‬


‫>‪#include<stdio.h‬‬
‫)(‪main‬‬
‫;‪{1.int i,number‬‬
‫;‪2.int fact=1‬‬
‫;) ‪3.scanf("%d",& number‬‬
‫)‪4.for(i=1;i<= number ;i++‬‬
‫;‪5.fact = fact *i‬‬
‫};) ‪6.printf("factoral=%d", fact‬‬

‫‪Step By step to Learn C or C++‬‬ ‫‪By:Hussien Ahmmed Taleb‬‬ ‫‪79‬‬


‫توضيح خطوات ‪:‬‬

‫‪.١‬خطوة رقم )‪ (١‬تم تعريف متغير )‪ (i‬كعداد لعبارة التكرار ومتغير أخر يحمل قيمة الرقم المراد إيجاد مفكوكة‬

‫‪.٢‬خطوة رقم )‪ (٢‬تم تعريف متغير)‪ (fact‬كنضير ضربي يضرب في أجزاء الرقم المراد إيجاد مفكوكة‬

‫‪.٣‬خطوة رقم )‪ (٣‬يطلب من المستخدم إدخال الرقم المراد إيجاد مفكوكة‬

‫‪.٤‬خطوة رقم )‪ (٤‬عداد يعد من الواحد وحتى الرقم الذي تم إدخاله كان يكون إننا أدخلنا رقم ‪ ٥‬سيعد )‪(1 ,2,3,4,5‬‬

‫‪.٥‬خطوة رقم )‪(٥‬ھنا نضرب كل قيمة جديدة يعدھا العداد بالقيم السابقة كان مثال إننا أدخلنا رقم ‪ ٣‬نريد إيجاد‬
‫مفكوكه سيضرب أوال واحد في قيمة )‪ (fact‬لتصبح قيمته )‪ (fact=1*1=1‬ثم سيضرب ‪ ٢‬في قيمة )‪ (fact‬السابقة‬
‫لتصبح قيمته )‪ (fact=1*2=2‬ثم سيضرب ‪ ٣‬في قيمة )‪ (fact‬السابقة لتصبح قيمته )‪(fact=2*3=6‬‬

‫توضيح خطوات المفكوك الخطوة )‪ ٤‬و‪ (٥‬إذا كان الرقم المدخل ‪٣‬‬
‫‪i=1‬‬
‫‪Fact=1*i‬‬
‫‪Fact=1*1=1‬‬
‫‪i=2‬‬
‫‪Fact=1*i‬‬
‫‪Fact=1*2=2‬‬
‫‪i=3‬‬
‫‪Fact=2*i‬‬
‫‪Fact=2*3=6‬‬

‫‪.٥‬خطوة رقم )‪ (٦‬سيطبع المفكوك في شاشة التنفيذ‬

‫شاشة التنفيذ إذا أدخلنا الرقم ‪٦‬‬

‫عدد مرات تنفيذ الخطوات‪:‬تنفذ خطوة رقم )‪١‬و‪ ٢‬و ‪ (٣‬مرة واحدة فقط‪.‬‬

‫إذا كان الرقم المراد إيجاد مفكوكة على سبيل المثال ھو ‪ ٣‬ستنفذ خطوة رقم )‪٤‬و‪ (٥‬ثالث مرات وتنفذ خطوة‬
‫رقم)‪ (٦‬مرة واحدة‬

‫‪Step By step to Learn C or C++‬‬ ‫‪By:Hussien Ahmmed Taleb‬‬ ‫‪80‬‬


‫مثال‪ :‬برنامج لطباعة المتسلسلة التالية )‪(1234567654321‬‬

‫تحليل‪:‬نرى من السلسلة أنھا تصل إلى ) ‪ (٧‬وتعود بالتناقص فلحل ھذا المثال نكون عداد يعد من الواحد إلى الستة‬
‫وإذا تجاوز الستة يخرج من الجملة التكرارية ونأخذ قيمته الجديدة ونسندھا لعداد أخر يبدأ منھا وينتھي بالواحد‬

‫‪C++‬‬ ‫البرمجة بلغة‬


‫>‪#include <iostream.h‬‬
‫)(‪main‬‬
‫;‪{1.int i,j‬‬
‫)‪2.for(i=1;i<7;i++‬‬
‫;‪3.cout<<i‬‬
‫)‪4.for(j=i;j>0;j--‬‬
‫} ;‪5.cout<<j‬‬

‫‪C‬‬ ‫البرمجة بلغة‬


‫>‪#include <stdio.h‬‬
‫)(‪main‬‬
‫;‪{1.int i,j‬‬
‫)‪2.for(i=1;i<7;i++‬‬
‫;)‪3.printf("%d",i‬‬
‫)‪4.for(j=i;j>0;j--‬‬
‫};)‪5.printf("%d",j‬‬

‫تحليل الخطوات‪:‬‬

‫‪.١‬خطوة رقم )‪ (١‬عرفنا متغيرين لنستخدمھا كعدادات‬

‫‪.٢‬خطوة رقم)‪ (٢‬عبارة تكرارية تعد من )‪ (١‬إلى )‪ (٦‬وتطبع قيم العداد في خطوة رقم )‪ (٣‬التي تكون تابعة للعبارة‬
‫التكرارية‬

‫‪.٣‬خطوة رقم )‪ (٤‬عداد جديد يعد من أخر قيمة وصل إليھا العداد األول ونحن نعلم أن شرط العداد األول باالستمرار‬
‫أن يكون قيمة )‪ (i‬اقل من سبعة وعندما أصبح قيمته سبعة خرج من الجملة التكرارية إي أن قيمة )‪ (i=7‬في الخطوة‬
‫رقم )‪ (٤‬لذالك سيعد ھذا العداد من السبعة ويتناقص إلى الواحد الن شرط توقف أن يكون اكبر من صفر)إي عندما‬
‫تصبح قيمته صفر يخرج من الجملة التكرارية( ‪.‬ويطبع قيم العداد في خطوة رقم )‪ (٥‬ألنھا تابعة للخطوة رقم )‪(٤‬‬

‫عدد مرات تنفيذ الخطوات‪:‬تنفذ خطوة رقم )‪ (١‬مرة واحدة فقط‪ .‬ستنفذ خطوة رقم )‪٢‬و‪ (٣‬ست مرات وتنفذ‬
‫خطوة رقم)‪٤‬و ‪ (٥‬سبع مرات‪.‬‬

‫‪Step By step to Learn C or C++‬‬ ‫‪By:Hussien Ahmmed Taleb‬‬ ‫‪81‬‬


‫‪.٢‬عبارة )‪ ( For--Loop‬التكرارية المتداخلة‪:‬‬
‫شرحنا سابقا على العبارة التكرارية االعتيادية التي نحتاجھا لتكرار سطر برمجي واحد أو عدة اسطر لغرض ما إما‬
‫ھذه العبارة التكرار سوف ال تكرر فقط اسطر برمجية إنما تكرر عبارات )‪ (for‬تكرارية أخرى )أو عبارات‬
‫تكرارية أخرى ك ‪ (while ,do—while‬توجد في داخلھا إي في كل عدة لل )‪ (for‬إالم ستعد )‪ (for‬الداخلية‬
‫جميع عداتھا‪.‬حالھا كحال إي خطوة برمجية داخل عبارة تكرارية وبما أن العبارة التكرارية الداخلية يمر عليھا عند‬
‫كل عدة للعبارة التكرارية إالم لذالك في كل عدة لالم تعد العبارة التكرارية الداخلية جميع عداتھا الممكنة حسب‬
‫شرطھا ‪.‬‬

‫ھيكلية ‪For--Loop‬‬
‫)‪for (Initializing1; Boolean_Expression1; Update1‬‬
‫{‬
‫)‪for (Initializing2; Boolean_Expression2; Update2‬‬
‫{‬
‫‪statement‬‬
‫}‬
‫}‬

‫على سبيل المثال لو كان لدينا ھذا التداخل‬

‫مثال‬
‫)‪1.for (i=0; i<5; i++‬‬
‫{‬
‫)‪2.for (j=0; j<5; j++‬‬
‫{‬
‫‪3.Statement2‬‬ ‫مھم‬
‫}‬
‫‪4.Statement1‬‬
‫}‪5.‬‬
‫ففي كل عدة بالنسبة )‪ (for‬في خطوة رقم )‪ (١‬تعد )‪ (for‬في خطوة رقم )‪ (٢‬من الصفر إلى األربعة وتنفذ‬
‫)‪ (Statement2‬خمس مرات وبعدھا ينفذ )‪ (Statement1‬مرة واحدة لكل عدة ‪.‬‬
‫ألن عندما يبدأ العداد الخارجي بالعد )‪ (i=0‬سينفذ ما موجود داخل قوسيه بالتسلسل خطوة خطوة وھي الخطوات‬
‫رقم)‪٢‬و‪٣‬و‪ .(٤‬أوال سينفذ خطوة رقم )‪ (٢‬وبما أن خطوة رقم )‪ (٢‬أيضا عداد سيبدأ ھذا العداد الداخلي بالعد من‬
‫الصفر إلى خمسة وكل عدة ينفذ خطوة رقم )‪ (٣‬وھي )‪ (Statement2‬ألنھا واقعة ضمن قوسين خطوة رقم )‪(٢‬‬
‫وعندما ينتھي العداد الداخلي من عداته سينتقل لينفذ ما بعد قوسي العداد في خطوة )‪ (٢‬وھي الخطوة رقم)‪ (٤‬سينفذ‬
‫)‪ (Statement1‬مرة واحدة تم يصل في خطوة رقم )‪ (٥‬إلى نھاية قوس)قوس اإلغالق( العبارة التكرارية‬
‫الخارجية في خطوة رقم )‪ (١‬وبما انه وصل إلى نھاية قوس العبارة التكرارية الخارجية سيعود الى الخطوة‬

‫‪Step By step to Learn C or C++‬‬ ‫‪By:Hussien Ahmmed Taleb‬‬ ‫‪82‬‬


‫رقم )‪ (١‬ويزيد قيمة العداد )‪ (i‬بمقدار واحد لينفذ ما ھو موجود بين قوسي ھذه العبارة التكرارية من جديد ما دام‬
‫شرط توقفھا لم يتحقق بعد‬
‫ إي أن إذا كان )‪ (i=0‬سيعد )‪( j‬قيمه وھي )‪(0,1,2,3,4‬‬
‫ إذا أصبح )‪ (i=1‬سيعد )‪ ( j‬قيمه وھي )‪(0,1,2,3,4‬‬
‫ إذا أصبح )‪ (i=2‬سيعد )‪ ( j‬قيمه وھي )‪(0,1,2,3,4‬‬
‫ إذا أصبح )‪ (i=3‬سيعد )‪ ( j‬قيمه وھي )‪(0,1,2,3,4‬‬
‫ إذا أصبح )‪ (i=4‬سيعد )‪ ( j‬قيمه وھي )‪(0,1,2,3,4‬‬

‫التنفيذ الداخلي للخطوة رقم ‪ ٢‬والسطر الذي يتبعه‬

‫خطوة رقم ‪٤‬‬

‫مخطط سير العمليات المثال‬

‫**تبقى المبادئ ثابتة كل عبارة تكرارية يتبعھا سطر برمجي واحد إذا لم نستخدم أقواس وإذا وضعنا أقواس كل الذي‬
‫داخل األقواس ھو تابع للعبارة التكرارية‪.‬‬

‫‪Step By step to Learn C or C++‬‬ ‫‪By:Hussien Ahmmed Taleb‬‬ ‫‪83‬‬


‫مثال‪ :‬برنامج جدول ضرب من )‪ (١‬إلى )‪. (١٠‬؟‬

‫تحليل ‪ :‬لو نركز في السؤال نراه يريد جدول ضرب وجدول الضرب مكون من ضرب رقميين فعلى سبيل المثال‬
‫جدول ضرب ‪ ١‬يضرب رقم واحد باألرقام من واحد إلى العشرة وجدول ضرب ‪ ٢‬يضرب االثنان باألرقام من واحد‬
‫إلى عشرة ويستمر‪ !.....‬أي إننا سنحتاج إلى عبارتين تكراريتين عبارة خارجية تخص جدول ضرب الرقم وأرقام‬
‫داخلية تضرب ھذه الرقم باألرقام من واحد إلى عشرة‪.‬‬

‫‪C++‬‬ ‫البرمجة بلغة‬


‫>‪#include<iostream.h‬‬
‫)(‪main‬‬
‫;‪{1.int i,j‬‬
‫)‪2.for (i=1; i<=10; i++‬‬
‫;"‪{3.cout<<"Multiply tabel for("<<i<<").\n-------------------------------\n‬‬
‫)‪4.for (j=1; j<=10; j++‬‬
‫;"‪5.Cout<< j<<" * " <<i<<"="<<i*j<<"\n‬‬
‫};"‪6.Cout<<"\n‬‬
‫}‬

‫‪C‬‬ ‫البرمجة بلغة‬


‫>‪#include<stdio.h‬‬
‫)(‪main‬‬
‫;‪{1.int i,j‬‬
‫)‪2.for (i=1; i<=10; i++‬‬
‫;)‪{3.prinC("Multiply tabel for(%d).\n-------------------------------\n", i‬‬
‫)‪4.for (j=1; j<=10; j++‬‬
‫;)‪5.prinC("%d * %d=%d\n",i, j, i*j‬‬
‫};)"‪6. printf("\n‬‬
‫}‬

‫توضيح الخطوات‪:‬‬

‫‪.١‬خطوة رقم )‪ (١‬تم تعريف متغيرين المتغير )‪ (i‬ھو جدول ضرب الرقم )كان يكون جدول ضرب ثالثة مثال(‬
‫والمتغير )‪ (j‬ھوا يضرب بالمتغير األول األرقام من واحد إلى العشرة‬

‫‪.٢‬خطوة رقم )‪ (٢‬ھي عبارة تكرارية تعد من )‪ (١‬إلى )‪ (١٠‬وفي كل عدة لھا تتكرر الخطوات رقم)‪ ٣‬و‪٤‬و‪٥‬و‪(٦‬‬
‫والحظ وضعنا ھذه الخطوات بين قوسين ألنھا أكثر من خطوة ونريد أن نتبعھا لھذه العبارة التكرارية لذالك يجب‬
‫وضعھا بين قوسين‬

‫‪.٣‬خطوة رقم )‪ (٣‬ھي رسالة تظھر بداية كل جدول تبين للمستخدم انه ھذا الجدول ھو للرقم المعين وھي بضبط‬
‫الرسالة الموجودة في شاشة التنفيذ في األسفل ومؤشر عليھا ب )" جملة الطباعة الخطوة )‪ ("(٣‬وكما تالحظ أن في‬
‫كل عدة للعبارة التكرارية الخطوة رقم )‪ (٢‬تتكرر الخطوة رقم )‪ (٣‬مرة واحدة لتظھر بداية كل جدول‬

‫‪Step By step to Learn C or C++‬‬ ‫‪By:Hussien Ahmmed Taleb‬‬ ‫‪84‬‬


‫‪.٤‬خطوة رقم )‪ (٤‬ھي عبارة تكرارية داخلية وفي كل عدة للعبارة التكرارية في الخطوة رقم )‪ (٢‬تعمل ھذه العبارة‬
‫بالعد من )‪ (١‬إلى )‪ (١٠‬لكي نضرب كل رقم من األرقام التي تعدھا الخطوة رقم )‪ (٢‬باألرقام من )‪ (١‬إلى )‪(١٠‬‬
‫وھذه العبارة التكرارية يتبعھا سطر واحد فقط لعدم وجود أقواس‬

‫‪ .٥‬خطوة رقم )‪ (٥‬ھي عملية طباعة كل قيمة من التي تعدھا العبارة التكرارية في الخطوة رقم )‪ (٢‬باألرقام من )‪(١‬‬
‫إلى )‪ (١٠‬التي تعدھا العبارة التكرارية في خطوة رقم )‪ (٤‬وھذه جملة الطباعة ھي تابعة لھذه العبارة التكرارية وما‬
‫تنتجه ھذه جملة الطباعة شاھده بالرسالة الموجودة في شاشة التنفيذ في األسفل ومؤشر عليھا ب )" جملة الطباعة‬
‫الخطوة )‪("(٥‬‬

‫‪ .٦‬خطوة رقم )‪ (٦‬ھي عملية طباعة سطر جديد بعد كل جدول ضرب والحظھا ھي تابعة للعبارة التكرارية في‬
‫خطوة رقم)‪ (٢‬وما تنتجه ھذه جملة الطباعة شاھده بالرسالة الموجودة في شاشة التنفيذ في األسفل ومؤشر عليھا ب‬
‫)" جملة الطباعة الخطوة )‪("(٦‬‬

‫جملة الطباعة الخطوة )‪(٣‬‬

‫جملة الطباعة الخطوة )‪(٥‬‬

‫جملة الطباعة الخطوة )‪(٦‬‬

‫مھم‬

‫كيف نعرف أن الخطوة رقم )‪ (٦‬ھي تابعه للخطوة رقم )‪ (٢‬وليس للخطوة رقم )‪..(٤‬؟‬

‫كما تالحظ أن خطوة رقم )‪ (٢‬تحصر بين قوسيھا خطوات رقم)‪٣‬و‪٤‬و‪٥‬و‪ (٦‬ونالحظ أن العبارة التكرارية في الخطوة‬
‫رقم )‪ (٤‬تتبعھا فقط سطر واحد ألننا لم نضع أقواس خلفھا أي إننا نقصد فقط السطر الذي يليھا ھو تابع لھا فتبقى‬
‫الخطوة رقم )‪ (٦‬وبما أنھا داخل قوسين الخطوة رقم )‪ (٢‬فھي تابعة لھا‪.‬‬

‫‪Step By step to Learn C or C++‬‬ ‫‪By:Hussien Ahmmed Taleb‬‬ ‫‪85‬‬


‫مثال‪ :‬برنامج يطبع الشكل التالي في شاشة التنفيذ ‪.‬؟‬

‫تحليل‪ :‬من شاشة التنفيذ نر انه يعد )‪ (١‬ثم )‪ (١٢‬ثم )‪ (١٢٣‬ويستمر نرى أن تكوين رسم بھذا الشكل يستحيل دون‬
‫استخدام عبارات التكرار المتداخلة‪.‬فما نحتاجه ھنا ھو عبارة تكرارية خارجية تعد من ‪ ٢‬إلى ‪) ٦‬أي تعد خمس عدات‬
‫بقدر عدد األسطر تعد)‪ ( (2,3,4,5,6‬وعبارة تكرارية داخلية تبدأ بالعد من الواحد وشرط توقفھا اقل من قيمة العداد‬
‫الخارجي لكل عدة مثال في العدة األولى تكون قيمة المتغير )‪ (i=2‬في العداد الخارجي سيعد العداد الداخلي من واحد‬
‫إلى اقل من )‪ (٢‬أي سيعد ) ‪ (1‬وفي العدة الثانية تكون قيمة المتغير )‪ (i=3‬في العداد الخارجي سيعد العداد الداخلي‬
‫من واحد إلى اقل من )‪ (٣‬أي سيعد ) ‪ (12‬ويستمر إلى نھاية ‪.‬‬

‫‪C ++‬‬ ‫البرمجة بلغة‬


‫>‪#include<iostream.h‬‬
‫)(‪main‬‬
‫;‪{1.int i,j‬‬
‫)‪2.for (i=2; i<7; i++‬‬
‫)‪{3.for (j=1; j<i; j++‬‬
‫; ‪4.cout<<j‬‬
‫}; "‪5.cout<<"\n‬‬
‫}‬

‫‪C‬‬ ‫البرمجة بلغة‬


‫>‪#include<stdio.h‬‬
‫)(‪main‬‬
‫;‪{1.int i,j‬‬
‫)‪2.for (i=2; i<7; i++‬‬
‫)‪{3.for (j=1; j<i; j++‬‬
‫;)‪4.printf("%d",j‬‬
‫};)"‪5. printf("\n‬‬
‫}‬
‫توضيح الخطوات‪:‬‬

‫‪.١‬خطوة رقم )‪ (١‬تم تعريف متغيرين للعدادات ‪.‬وفي خطوة رقم )‪ (٢‬عداد خارجي يعد من ‪ ٢‬إلى ‪ ٦‬وتتبعه الخطوات‬
‫البرمجية رقم) ‪ ٣‬و‪٤‬و‪ (٥‬ألنھا داخل قوسيه ففي كل عدة له تحدث ھذه الخطوات‬

‫‪.٢‬خطوة رقم )‪ (٣‬ھي عبارة تكرارية داخلية تبدأ بالعد من الواحد إلى اقل من قيمة العداد الخارجي أي إذا عد العداد‬
‫الخارجي ‪ ٢‬تعد ھذه العبارة التكرارية )‪ (1‬وإذا عد العداد الخارجي ‪ ٣‬تعد ھذه العبارة التكرارية )‪ (12‬وإذا عد العداد‬
‫الخارجي ‪ ٤‬تعد ھذه العبارة التكرارية )‪ (123‬وإذا عد العداد الخارجي ‪ ٥‬تعد ھذه العبارة التكرارية) ‪ (1234‬ويستمر‬

‫‪.٣‬خطوة رقم )‪ (٤‬تابعة للخطوة رقم )‪ (٣‬حتى تطبع قيم العداد وخطوة رقم )‪ (٥‬تابعة للخطوة رقم )‪ (٢‬حتى بعد كل‬
‫طباعة ينزل المؤشر إلى سطر جديد لكي يطبع العبارة الجديدة على سطر أخر‪ .‬جرب احذفھا وشاھد ماذا سيحدث‬

‫‪Step By step to Learn C or C++‬‬ ‫‪By:Hussien Ahmmed Taleb‬‬ ‫‪86‬‬


‫مثال‪ :‬برنامج يطبع الشكل التالي في شاشة التنفيذ ‪.‬؟‬

‫تحليل‪:‬ھذا المثال سھل لو ركزت فيه انه يطبع نجمة وينزل سطر ثم يطبع فراغ ونجمة ثم ينزل سطر ثم فراغان‬
‫ونجمة وينزل سطر ثم ثالث فراغات ونجمة وينزل سطر ويستمر بزيادة عدد الفراغات‪ .‬مقدما انه يحتاج إلى عدادان‬
‫حتى يكونا الشكل المطلوب العداد األول يعد من الواحد إلى الخمسة )ألنھا خمس نجمات( وأخر داخلي يعد من واحد‬
‫إلى اقل من العداد الخارجي ليوضع فراغات قبل النجمات‬

‫‪C ++‬‬ ‫البرمجة بلغة‬


‫>‪#include<iostream.h‬‬
‫)(‪main‬‬
‫; ‪{1.int star , empty‬‬
‫)‪2.for(star=1; star <=5; star ++‬‬
‫)‪{3.for( empty =1; empty < star ; empty ++‬‬
‫; " "<<‪4.cout‬‬
‫}; "‪5.cout<<"*\n‬‬
‫}‬

‫‪C‬‬ ‫البرمجة بلغة‬


‫>‪#include<stdio.h‬‬
‫)(‪main‬‬
‫;‪{1.int star ,empty‬‬
‫)‪2.for(star=1; star <=5; star ++‬‬
‫)‪{3.for(empty =1; empty < star ; empty ++‬‬
‫;) " "(‪4.printf‬‬
‫}; )"‪5.prinC("*\n‬‬
‫}‬
‫توضيح الخطوات‪:‬‬

‫‪.١‬خطوة رقم )‪ (١‬تم تعريف متغيرين للعدادات األول اسم )‪ (star‬للنجمات وأخر اسمه )‪ (empty‬لطباعة الفراغات‬
‫وفي خطوة رقم )‪ (٢‬عداد خارجي يعد من ‪ ١‬إلى ‪ ٥‬وتتبعه الخطوات البرمجية رقم ) ‪ ٣‬و‪٤‬و‪ (٥‬ألنھا داخل قوسيه‬
‫ففي كل عدة له تحدث ھذه الخطوات‬

‫‪.٢‬خطوة رقم )‪ (٣‬ھي عبارة تكرارية داخلية تبدأ بالعد من الواحد إلى اقل من قيمة العداد الخارجي أي إذا عد العداد‬
‫الخارجي )‪ (١‬ال تعد ھذه العبارة التكرارية ألنھا ال يتحقق شرطھا وال تنفذ وخطوة رقم )‪ (٤‬التابعة لھا ال تنفذ أيضا‬
‫تنفذ الخطوة رقم )‪ (٥‬فقط ليطبع نجمة وينزل سطر‪ .‬وإذا عد العداد الخارجي ‪ ٢‬تعد ھذه العبارة التكرارية )‪ (1‬وتنفذ‬
‫خطوة رقم)‪ (٤‬مرة واحدة طابعة فراغ واحد ثم تنفذ خطوة رقم )‪ (٥‬طابعة نجمة وتنزل سطر‪ .‬وإذا عد العداد‬
‫الخارجي ‪ ٢‬تعد ھذه العبارة التكرارية )‪ (1,2‬وتنفذ خطوة رقم )‪ (٤‬مرتان طابعة فراغان ثم تنفذ خطوة رقم )‪(٥‬‬
‫طابعة نجمة وتنزل سطر ‪ .‬وإذا عد العداد الخارجي ‪ ٣‬تعد ھذه العبارة التكرارية ) ‪ (1,2,3‬وتنفذ خطوة رقم)‪(٤‬‬
‫ثالث مرات طابعة ثالث فراغات ثم تنفذ خطوة رقم )‪ (٥‬طابعة نجمة وتنزل سطر ويستمر إلى النھاية‪.‬‬

‫‪Step By step to Learn C or C++‬‬ ‫‪By:Hussien Ahmmed Taleb‬‬ ‫‪87‬‬


‫مثال‪ :‬برنامج يكون شكل نقاط كما في الرسم )ھذه النقاط ھي مواقع عناصر ا لمصفوفة ذات بعدين ‪(٥ *٥‬‬

‫‪C++‬‬ ‫البرمجة بلغة‬


‫>‪#include<iostream.h‬‬
‫)(‪main‬‬
‫;‪{ int i,j‬‬
‫)‪for (i=0; i<5; i++‬‬
‫{‬
‫)‪for (j=0; j<5; j++‬‬
‫;" )" << ‪cout<<"("<< i<<" , " <<j‬‬
‫};"‪Cout<<"\n‬‬
‫}‬

‫‪C‬‬ ‫البرمجة بلغة‬


‫>‪#include<stdio.h‬‬
‫)(‪main‬‬
‫;‪{ int i,j‬‬
‫)‪for (i=0; i<5; i++‬‬
‫{‬
‫)‪for (j=0; j<5; j++‬‬
‫;)‪printf("( %d , %d ) ",i,j‬‬
‫};)"‪printf("\n‬‬
‫}‬

‫المثال واضح فليس بحاجة إلى توضيح ووضعنا ھذه الشكل المطلوب في الرسم كمقدمة‬
‫للمصفوفات وطريقة تمثيلھا حيث ھذه النقاط مواقع في الذاكرة حيث أول موقع ھو )‪(0,0‬‬
‫ويستمر‪. .......‬‬

‫‪Step By step to Learn C or C++‬‬ ‫‪By:Hussien Ahmmed Taleb‬‬ ‫‪88‬‬


‫عبارة )‪: ( Break‬‬
‫تستخدم ھذه الدالة للتوقف عن العبارات التكرارية عند شرط معين واالنتقال إلى ما بعد العبارة التكرارية )الحظ‬
‫شكل السھم إلى أين ينتقل(‪.‬أي انه فقط يخرج من عبارة التكرار الموجود ھو فيھا وينتقل لينفذ الخطوات البرمجية التي‬
‫تليه‬

‫موقع عبارة )‪ (Break‬في البرنامج‬


‫)‪for (Initializing1; Boolean_Expression1; Update1‬‬
‫{‬
‫)‪If (condition‬‬
‫;‪Break‬‬
‫;‪Statement‬‬
‫}‬

‫مثال‪ :‬لو كان لدينا عبارة تكرارية تعد من )‪ (1—200‬ونريدھا عندما يصل العداد إلى)‪ (75‬يخرج البرنامج من‬
‫العبارة التكرارية إليك ھذا المثال‪.‬‬

‫‪C ++‬‬ ‫البرمجة بلغة‬


‫>‪#include<iostream.h‬‬
‫)(‪main‬‬
‫;‪{1.int i‬‬
‫)‪2.for (i=1; i<200; i++‬‬
‫)‪{3.If (i==75‬‬
‫;‪4.break‬‬
‫}; "‪5.cout<<i<<"\t‬‬
‫;"‪6.cout<<"\nis finished print to 75‬‬
‫}‬

‫‪C‬‬ ‫البرمجة بلغة‬


‫>‪#include<stdio.h‬‬
‫)(‪main‬‬
‫;‪{1.int i‬‬
‫)‪2.for (i=1; i<200; i++‬‬
‫)‪{3.If (i==75‬‬
‫;‪4.break‬‬
‫};)‪5.printf("%d\t",i‬‬
‫;)"‪6.printf ("\nis finished print to 75‬‬
‫}‬
‫توضيح الخطوات‪:‬‬

‫‪.١‬خطوة رقم )‪ (١‬تم تعريف متغير ليكون عداد‬

‫‪Step By step to Learn C or C++‬‬ ‫‪By:Hussien Ahmmed Taleb‬‬ ‫‪89‬‬


‫‪.٢‬خطوة رقم )‪ (٢‬عداد يعد من )‪ (١‬إلى )‪ (٢٠٠‬ويكرر في داخله الخطوات رقم )‪ ٣‬و‪ ٤‬و ‪(٥‬‬

‫‪.٣‬خطوة رقم )‪ (٣‬ھو شرط للتوقف أي عندما تصبح قيمة العداد ھي )‪ (٧٥‬ينفذ الخطوة رقم )‪ (٤‬والتي تسبب‬
‫بالخروج من العبارة التكرارية واالنتقال إلى ما بعدھا وھي خطوة رقم )‪ (٦‬كما تالحظ في الرسم باألسھم‪.‬‬
‫مھم‬

‫‪.٤‬خطوة رقم )‪ (٥‬تتم طباعة قيمة العداد عند كل دورة وتالحظ أن العداد سوف ال يصل في عده إلى )‪ (٢٠٠‬إنما‬
‫يصل إلى )‪ (٧٤‬في الطباعة وينقطع ألنه خطوة رقم )‪ (٤‬تقطع تنفيذ الجمل البرمجية التي تليھا داخل العبارة‬
‫التكرارية عندما يصل العداد إلى )‪ (٧٥‬وشاھد شاشة التنفيذ‪.‬‬

‫‪.٥‬خطوة رقم )‪ (٦‬تطبع رسالة بعد الخروج من الجملة التكرارية وشاھدھا في شاشة التنفيذ باألسفل‬

‫تالحظ قطعت طباعة العداد عند ‪ ٧٤‬وطبع‬


‫بعدھا رسالة الخطوة البرمجية رقم )‪(٦‬‬

‫استخدام ) ‪ (Break‬داخل العبارات التكرارية المتداخلة‪..‬؟‬

‫موقع عبارة )‪ (Break‬في البرنامج‬


‫)‪for (Initializing1; Boolean_Expression1; Update1‬‬
‫{‬
‫)‪for (Initializing2; Boolean_Expression2; Update2‬‬
‫{‬
‫)‪If (condition‬‬
‫;‪Break‬‬
‫;‪Statement2‬‬
‫}‬
‫;‪Statement1‬‬
‫}‬
‫الحظ كلما يتحقق الشرط داخل العبارة التكرارية الداخلية ينتقل لينفذ ال )‪ (Statement1‬الموجود داخل العبارة‬
‫التكرارية الخارجية‪ .‬أي يخرج من العبارة التكرارية الداخلية ‪.‬‬

‫‪Step By step to Learn C or C++‬‬ ‫‪By:Hussien Ahmmed Taleb‬‬ ‫‪90‬‬


‫• تطرقنا في ما مضى على مالحظة تقول ) إلدخال )‪ (for‬في دوارة النھائية نكتب );;(‪ for‬فقط ( لكن لم‬
‫نبين ما ھي وكيف تستخدم ‪.‬العدادات التي استخدمناھا حتى أالن ھي محدودة تعد إلى رقم معين وتتوقف ماذا‬
‫لو أردنا أن ال يتوقف العداد أبدا أو أردنا ال يتوقف إال بشرط معين مثال برنامج رقم سري سيضل يطلب من‬
‫المستخدم إدخال الرقم السري إلى أن يدخل الرقم صحيح بعدھا يخرج من العبارة التكرارية وھذا ابسط‬
‫مثال على عبارة تكرارية النھائية‬

‫مثال‪:‬برنامج إدخال الرقم السري ويستمر بطلب الرقم من المستخدم إلى أن يدخل الرقم الصحيح‬

‫‪C ++‬‬ ‫البرمجة بلغة‬


‫>‪#include<iostream.h‬‬
‫)(‪main‬‬
‫;‪{ int password‬‬
‫);;( ‪for‬‬
‫;"‪{ cout<<"enter password\n‬‬
‫;‪Cin>> password‬‬
‫)‪if (password==1234‬‬
‫;"‪{cout<<"password is correct‬‬
‫};‪break‬‬
‫‪else‬‬
‫}};"‪cout<<"password is error try agin\n‬‬

‫‪C ++‬‬ ‫البرمجة بلغة‬


‫>‪#include<iostream.h‬‬
‫)(‪main‬‬
‫;‪{ int password‬‬
‫);;( ‪for‬‬
‫;)"‪{ printf("enter password\n‬‬
‫;)‪Scanf("%d",&password‬‬
‫)‪if (password==1234‬‬
‫;)"‪{ printf("password is correct‬‬
‫};‪break‬‬
‫‪else‬‬
‫}};)"…‪printf("password is error try agin\n‬‬

‫شاشة التنفيذ‬

‫‪Step By step to Learn C or C++‬‬ ‫‪By:Hussien Ahmmed Taleb‬‬ ‫‪91‬‬


‫عبارة )‪: ( continue‬‬
‫تستخدم ھذه الدالة إلھمال الخطوات البرمجية التي تليھا واالنتقال إلى عبارة التكرار وعد عدة جديدة حسب شرط‬
‫عبارة التكرار إذا كانت تقبل عدة جديدة )الحظ شكل السھم إلى أين ينتقل(‪.‬أي انه فقط بھمل ال ) ‪(Statement‬‬
‫وينتقل إلى عبارة التكرار لبيداء عدة جديدة اعتيادية‬

‫موقع عبارة )‪ (continue‬في البرنامج‬


‫)‪for (Initializing1; Boolean_Expression1; Update1‬‬
‫{‬
‫)‪If (condition‬‬
‫;‪continue‬‬
‫;‪Statement‬‬
‫}‬

‫مثال‪ :‬لو كان لدينا عبارة تكرارية تعد من )‪ (1—200‬ونريدھا عندما يصل العداد إلى )‪ (75‬بھمل الخطوات البرمجية‬
‫التي تليه داخل عبارة التكرار أي ال يطبع رقم )‪.(٧٥‬‬

‫‪C ++‬‬ ‫البرمجة بلغة‬


‫>‪#include<iostream.h‬‬
‫)(‪main‬‬
‫;‪{1.int i‬‬
‫)‪2.for (i=1; i<200; i++‬‬
‫)‪{3.If (i==75‬‬
‫;‪4.continue‬‬
‫}; "‪5.cout<<i<<"\t‬‬
‫;"‪6.cout<<"\nis finished print to200 execpt 75 is not print‬‬
‫}‬

‫‪C‬‬ ‫البرمجة بلغة‬


‫>‪#include<stdio.h‬‬
‫)(‪main‬‬
‫;‪{1.int i‬‬
‫)‪2.for (i=1; i<200; i++‬‬
‫)‪{3.If (i==75‬‬
‫;‪4.con7nue‬‬
‫}; )‪5.printf("%d\t",i‬‬
‫;)"‪6. printf("\nis finished print to200 execpt 75 is not print‬‬
‫}‬

‫‪Step By step to Learn C or C++‬‬ ‫‪By:Hussien Ahmmed Taleb‬‬ ‫‪92‬‬


‫توضيح الخطوات‪:‬‬

‫‪.١‬خطوة رقم )‪ (١‬تم تعريف متغير ليكون عداد‬

‫‪.٢‬خطوة رقم )‪ (٢‬عداد يعد من )‪ (١‬إلى )‪ (٢٠٠‬ويكرر في داخله الخطوات رقم )‪ ٣‬و‪ ٤‬و ‪(٥‬‬

‫‪.٣‬خطوة رقم )‪ (٣‬ھوا تحقق من شرط متى أصبح رقم العداد )‪ (٧٥‬سينفذ خطوة رقم )‪ (٤‬و سيھمل الخطوات‬
‫البرمجية التي تليه سيھمل خطوة رقم )‪ (٥‬أي سوف ال يطبع رقم العداد عند ھذه العدة‬

‫‪.٤‬خطوة رقم )‪ (٥‬نطبع قيمة العداد عند كل عدة عدا عندما تكون قيمته )‪ (٧٥‬ألنه سيھمل ھذه الخطوة‬

‫‪.٥‬خطوة رقم )‪ (٦‬طباعة رسالة بعد االنتھاء من العبارة التكرارية ‪.‬‬

‫شاھد شاشة التنفيذ‬

‫لم يتم طباعة رقم ‪ ٧٥‬طبع رقم ‪ ٧٤‬وبعدھا طبع رقم ‪٧٦‬‬
‫ألنه عندما أصبح قيمة العداد ‪ ٧٥‬تحقق شرط خطوة )‪(٣‬‬
‫وھمل الخطوات التي تليه بما فيه خطوة الطباعة ھملت فلم‬
‫يطبع الرقم‬

‫‪Step By step to Learn C or C++‬‬ ‫‪By:Hussien Ahmmed Taleb‬‬ ‫‪93‬‬


: (go to) ‫عبارة‬
‫ ( وھيكلية ھذه‬:) ‫تؤدي ھذه العبارة إلى انتقال تنفيذ البرنامج إلى سطر معين فقط نعنون السطر بأي اسم ونضع بعده‬
.‫الدالة ھي‬

‫ ( في البرنامج‬go to) ‫ھيكلية‬


Main()
{Statement1;
If (condition)
goto npoint;
Statement2;
Statement3;
Statement4;
Npoint:
Statement5;}

‫نالحظ من الھيكلية انه إذا تحقق شرط معين )وحتى نستطيع أن نضعھا بدون شرط لتنفذ( سوف ينتقل التنفيذ البرنامج‬
(Statement2 Statement3‫ و‬Statement4) ‫( ھامأل أو تاركا ال‬Statement5) ‫لينفذ ال‬

(go to) ‫( وباستخدام تكرار الجمل البرمجية أي باستخدام إيعاز‬0—14) ‫ برنامج عداد يعد من‬:‫مثال‬

C ++ ‫البرمجة بلغة‬
#include<iostream.h>
main()
{1. int count1=0;
2.mpointn:
3.cout<< count1<<"\t";
4.count1=count1+1;
5.if (count1!=15)
6.goto mpointn;
}

C ‫البرمجة بلغة‬
#include<iostream.h>
main()
{1. int count1=0;
2.mpointn:
3.prinC("%d\t", count1);
4.count1=count1+1;
5.if (count1!=15)
6.goto mpointn;}

Step By step to Learn C or C++ By:Hussien Ahmmed Taleb 94


‫توضيح الخطوات‪:‬‬

‫‪.١‬خطوة رقم )‪ (١‬تم تعريف متغير للعداد التي سيتم طباعة قيمته عند كل عدة‬

‫‪ .٢‬خطوة رقم )‪(٢‬ھي نقطة تعرفھا جملة )‪ (goto‬نكتبھا ھكذا حتى عندما نريد الرجوع لھا فقط نكتب )‪ (goto‬إلى‬
‫النقطة التي نود الرجوع إليھا‪.‬وتسمية النقطة ممكن يكون أي اسم‬

‫‪.٣‬خطوة رقم )‪ (٣‬تطبع قيمة العداد‬

‫‪.٤‬خطوة رقم )‪ (٤‬زيادة قيمة العداد بمقدار واحد‬

‫‪.٥‬خطوة رقم )‪ (٥‬شرط التحقق يتحقق مادام قيمة العداد لم تصل إلى )‪ (١٥‬يرجع إلى النقطة التي في الخطوة رقم‬
‫)‪ (٢‬وينفذ الخطوات بشكل متتالي‬

‫شاشة التنفيذ للبرنامج‪.‬‬

‫ليس فقط نستطيع إھمال الخطوات بل نستطيع تكرار الخطوات أيضا‬

‫ھيكلية )‪ ( go to‬في البرنامج‬


‫)(‪Main‬‬
‫;‪{Statement1‬‬
‫‪Npoint:‬‬
‫;‪Statement2‬‬
‫;‪Statement3‬‬
‫;‪Statement4‬‬
‫)‪If (condition‬‬
‫;‪goto npoint‬‬
‫};‪Statement5‬‬

‫سوف يتم تكرار )‪ Statement4‬و‪(Statement2 Statement3‬‬

‫‪Step By step to Learn C or C++‬‬ ‫‪By:Hussien Ahmmed Taleb‬‬ ‫‪95‬‬


‫عبارة )‪ ( While‬التكرارية ‪:‬‬
‫ھي عبارة تكرارية تستخدم لتكرار خطوات برمجية المحصورة بين قوسيھا لعدد من المرات تكون مشابه تماما لعبارة‬
‫التكرار )‪.(For‬وتستطيع المقارنة بين ھيكلية ھاتان العبارتان التكراريتان وسوف تجد التشابه بينھما‬

‫ھيكلية ‪while--Loop‬‬
‫‪Initializing‬‬
‫)‪while ( Boolean_Expression‬‬
‫{‬
‫;‪Statement‬‬
‫‪Update‬‬
‫}‬

‫)‪ :(Initializing‬ھي القيمة البداية المعطاة للمتغير التي منھا سيبدأ العد‪) .‬مثال ‪(i=0‬‬ ‫•‬
‫)‪ :(Boolean_Expression‬ھو شرط التوقف الذي عندما تصبح قيمة المتغير غير محققة لشرط التوقف‬ ‫•‬
‫سوف يخرج من عبارة )‪ (while‬بمعنى أخر مادام نتيجة اختباره ال )‪ (Boolean_Expression‬ھي‬
‫)‪ (True‬العبارة التكرارية تستمر بتنفيذ مابين قوسيھا ومتى ما أصبح )‪ (False‬يخرج من العبارة التكرارية‪.‬‬
‫مثال ) ‪ ((i<5‬ھوا شرط التوقف ويبدأ العد من الواحد‬
‫)‪ :(Update‬ھي مقدار الزيادة أو النقصان في قيمة المتغير في كل دورة )‪ .(loop‬مثال )‪ ( i++‬أو )‪(i--‬‬ ‫•‬
‫)‪ :(statement‬ھي الخطوات البرمجية التي ستنفذ عدد من المرات ‪.‬إذا كانت عبارة عن خطوة برمجية‬ ‫•‬
‫مھم‬
‫واحدة فليس بحاجة لوضعھا داخل أقواس وإذا كانت أكثر من خطوة يجب وضعھا داخل أقواس‪.‬‬

‫كيف تعمل عبارة ال )‪ (while‬التكرارية‪........‬؟‬

‫أن المتغير يبدأ بقيمة بدائية )‪ (Initializing‬ويستمر بالزيادة أو النقصان حسب )‪ (Update‬أي قد يزداد أو ينقص‬
‫بمقدار واحد أو أكثر من واحد ومتى ما أصبح قيمة المتغير غير محققة للشرط )‪ (Boolean_Expression‬يخرج‬
‫من العبارة التكرارية إلى الخطوات البرمجية التي تليه وإذا كانت محققة للشرط ينفذ الخطوات البرمجية التي داخل‬
‫العبارة التكرارية ‪.‬‬
‫• إلدخال )‪ (while‬في دوارة النھائية نكتب )‪ while(1‬فقط ‪.‬‬
‫مثال‪ :‬لو أردنا عداد يعد من )‪ (0‬إلى )‪ (4‬أي يطبع على شاشة التنفيذ من )‪ 0‬إلى ‪(4‬‬
‫‪C++‬‬ ‫البرمجة بلغة‬
‫>‪#include<iostream.h‬‬
‫)(‪main‬‬
‫;‪{1.int i=0‬‬
‫)‪2.while( i<5‬‬
‫;"‪{3.cout<<i<<"\t‬‬
‫};‪4.i++‬‬
‫}‬

‫‪Step By step to Learn C or C++‬‬ ‫‪By:Hussien Ahmmed Taleb‬‬ ‫‪96‬‬


‫‪C‬‬ ‫البرمجة بلغة‬
‫>‪#Include<stdio.h‬‬
‫)(‪main‬‬
‫;‪{1.int i=0‬‬
‫)‪2. while( i<5‬‬
‫;)‪{3.printf("%d\t",i‬‬
‫};‪4.i++‬‬
‫}‬
‫توضيح الخطوات ‪:‬‬

‫‪.١‬خطوة رقم )‪ (١‬عرفنا متغير )‪ (i‬من نوع ‪ .integer‬بما إننا نريد العد من الصفر فأعطينا القيم البدائية صفر‬
‫‪.٢‬خطوة رقم )‪(٢‬ھي عبارة تكرارية بما أن العد يصل إلى ‪ ٤‬معناه شرط التوقف أن يكون اقل من خمسة بما إننا‬
‫نريد أن يعد خمس عدات بين صفر واألربعة لذالك يجب أن يكون مقدار الزيادة واحد ليعد )‪. (0 ,1,2,3,4‬الن لو‬
‫جعلنا مقدار الزيادة ‪ ٢‬مثال فسيعد العداد ثالث مرات مرة )‪ (0,2,4‬لذالك يجب التركيز في ھذه المواضيع جيدا‪.‬‬
‫القيمة البدائية‬
‫مھم‬
‫للعداد )‪(i=0‬‬

‫شرط‬
‫التحقق)‪(i<5‬‬

‫طباعة القيمة‬

‫زيادة قيمة‬
‫العداد )‪(i++‬‬

‫خروج من‬
‫جملة التكرار‬
‫لو تالحظ المخطط الخاص بالبرنامج عندما يحقق الشرط يتجه لخطوة الطباعة وإذا لم يحقق يخرج من جملة تكرار‬

‫‪.٣‬خطوة رقم )‪ (٣‬ھي طباعة قيمة المتغير عند كل ) ‪. ( loop‬‬


‫‪ .٤‬خطوة رقم )‪ (٤‬ھو عداد يزداد بمقدار واحد عند كل عدة وال يفرق إذا كتبنا ) ‪ i++‬أو ‪ (++i‬الن الرجوع للخطوة‬
‫)‪ (٢‬وتنفيذھا يعتبر خطوة منفصلة عن خطوة الزيادة لذا على حدة ففي كال الحالتين يزداد قيمة العداد قبل تنفيذ‬
‫خطوة تحقق من الشرط ) إذا كان اقل من خمسة(‪.‬‬

‫*قارن ھذا المثال بالمثال المشابه له ب)‪ (For‬وشاھد الفرق‬


‫عدد مرات تنفيذ الخطوات‪:‬تنفذ خطوة رقم )‪ (١‬مرة واحدة فقط‪.‬وتنفذ خطوة رقم)‪ (٣‬وخطوة رقم )‪ (٤‬خمس مرات‬

‫‪Step By step to Learn C or C++‬‬ ‫‪By:Hussien Ahmmed Taleb‬‬ ‫‪97‬‬


‫مثال‪ :‬لو أردنا عداد يعد من )‪ (4‬إلى )‪ (0‬أي يطبع على شاشة التنفيذ )‪( 4 3 2 1 0‬‬

‫تحليل‪:‬حلھا نفس حل السؤال السابق فقط نقلب العداد أي نجعل قيمته البدائية ھي ‪ ٤‬وشرط التوقف اكبر أو يساوي‬
‫صفر ويتناقص بمقدار واحد كل عدة‬

‫‪C++‬‬ ‫البرمجة بلغة‬


‫>‪#include<iostream.h‬‬
‫)(‪main‬‬
‫;‪{1.int i=4‬‬
‫)‪2.while( i>=0‬‬
‫;"‪{3.cout<<i<<"\t‬‬
‫};‪4.i--‬‬
‫}‬

‫‪C‬‬ ‫البرمجة بلغة‬


‫>‪#include<stdio.h‬‬
‫)(‪main‬‬
‫;‪{1.int i=4‬‬
‫)‪2. while( i>=0‬‬
‫;)‪{3.printf("%d\t",i‬‬
‫};‪4.i--‬‬
‫}‬

‫توضيح الخطوات ‪:‬‬

‫‪.١‬خطوة رقم )‪ (١‬عرفنا متغير )‪ (i‬من نوع ‪ integer‬فأعطيناه القيم البدائية أربعة‬

‫‪.٢‬خطوة رقم )‪(٢‬ھي عبارة تكرارية بما إننا نريد العد من األربعة فأعطينا القيم البدائية أربعة ‪.‬والعد يصل إلى‬
‫الصفر معناه شرط التوقف أن يكون اكبر أو يساوي صفر ) )‪ ( while(i>=0‬بما إننا نريد أن يعد خمس عدات بين‬
‫صفر واألربعة لذالك يجب أن يكون مقدار نقصان واحد ليعد )‪. (4,3,2,1,0‬الن لو جعلنا مقدار النقصان ‪ ٢‬مثال‬
‫فسيعد العداد ثالث مرات مرة )‪ (4,2,0‬لذالك يجب التركيز في ھذه المواضيع جيدا‬
‫‪.٣‬خطوة رقم )‪ (٣‬طباعة قيمة عداد ‪.‬وخطوة رقم )‪ (٤‬عداد النقصان يتناقص بمقدار واحد عند كل عدة‬

‫سيطبع في شاشة التنفيذ‬

‫عدد مرات تنفيذ الخطوات‪:‬‬

‫تنفذ خطوة رقم )‪ (١‬مرة واحدة فقط‪.‬وتنفذ خطوة رقم)‪ (٣‬وخطوة رقم )‪ (٤‬خمس مرات بقدر عدات العداد‬

‫‪Step By step to Learn C or C++‬‬ ‫‪By:Hussien Ahmmed Taleb‬‬ ‫‪98‬‬


‫مثال‪ :‬برنامج لجمع اإلعداد الفردية بين ) ‪(0—100‬‬

‫تحليل‪ :‬نرى انه يريد اإلعداد الفردية فقط لذالك يجب أن نطفر اإلعداد الزوجية ‪.‬نكون عداد يعد من الواحد وشرط‬
‫التوقف عند المائة ومقدار الزيادة في )‪ (٢‬حتى نجمع فقط اإلعداد الفردية‬

‫‪C++‬‬ ‫البرمجة بلغة‬


‫>‪#include<iostream.h‬‬
‫)(‪main‬‬
‫;‪{1.int n=1‬‬
‫;‪2.int sum=0‬‬
‫)‪3.while( n<100‬‬
‫; ‪{4. sum += n‬‬
‫};‪5. n=n+2‬‬
‫};‪6.Cout<<"sum="<<sum‬‬

‫‪C‬‬ ‫البرمجة بلغة‬


‫>‪#include<stdio.h‬‬
‫)(‪main‬‬
‫;‪{1.int n=1‬‬
‫;‪2.int sum=0‬‬
‫)‪3.while( n<100‬‬
‫; ‪{4. sum += n‬‬ ‫مھم‬
‫};‪5. n=n+2‬‬
‫};)‪6.printf("sum=%d",sum‬‬
‫توضيح الخطوات‪:‬‬
‫‪.١‬خطوة رقم )‪ (١‬عرفنا متغير ) ‪ (n‬من نوع )‪ (integer‬ليكون عداد للعبارة التكرارية وقيمته االبتدائية ھي واحد‬

‫‪.٢‬خطوة رقم )‪ (٢‬عرفنا متغير )‪ (sum‬من نوع )‪ (integer‬وأعطيناه قيمة بدائية وھي صفر ألننا سنجمع والنضير‬
‫الجمعي ھو صفر حتى عندما نجمعه مع أول قيمة وھي واحد سيجمع واحد مع الصفر‬

‫‪.٣‬خطوة رقم )‪ (٣‬كونا عداد يتوقف عند ‪ (while(n<100) ٩٩‬ويبدأ العد من الواحد ألنه أول عدد فردي‬

‫‪.٤‬خطوة رقم )‪ (٤‬جمعنا قيمة المتغير )‪ (sum‬مع قيمة العداد عند كل عدة‪ .‬أي عندما يكون ) ‪ (n=1‬سيجمع‬
‫)‪ (sum=0+1‬وعندما يصبح ) ‪ (n=3‬سيجمع قيمة )‪ (sum‬السابقة وھي أصبحت واحد مع ثالثة )‪(sum=1+3‬‬
‫وعندما يصبح ) ‪ (n=5‬سيجمع قيمة )‪ (sum‬السابقة وھي أصبحت أربعة مع ثالثة )‪ (sum=4+5‬ويستمر‪.‬‬

‫‪.٥‬خطوة رقم )‪ (٥‬ھو زيادة للعداد بمقدار اثنان حتى فقط نجمع اإلعداد الفردية‬
‫‪.٦‬خطوة رقم )‪ (٦‬طباعة الناتج الجمع في شاشة التنفيذ‬
‫‪Sum=2500‬‬
‫عدد مرات تنفيذ الخطوات‪:‬تنفذ خطوة رقم )‪١‬و‪ (٢‬مرة واحدة فقط‪.‬وتنفذ خطوة رقم)‪ (٤‬وخطوة رقم )‪ (٥‬خمسين‬
‫مرة الن اإلعداد الفردية بين)‪ (0—100‬ھي خمسين رقم وتنفذ خطوة رقم)‪ (٦‬مرة واحدة‬

‫‪Step By step to Learn C or C++‬‬ ‫‪By:Hussien Ahmmed Taleb‬‬ ‫‪99‬‬


‫مثال‪ :‬برنامج يدخل المستخدم درجات ‪ ١٠‬مواد وتقوم بحساب المعدل له‬

‫تحليل‪ :‬بما انه يريد حساب المعدل من عشر درجات فيجب جمع ھذه الدرجات وقسمتھا على عشرة للحصول على‬
‫المعدل وبما انه يقول يدخلھا المستخدم وبما إنھن عشر درجات فيصعب إدخالھا كل واحد على حدة لذالك نستخدم‬
‫عبارة ) ‪ (while‬التكرارية تتكرر عشر مرات ونضع تحتھا جملة القراءة )حيث عند كل عدة للعبارة التكرارية يطلب‬
‫منك إدخال درجة ويجمع الدرجات المدخلة عند كل إدخال وناتج الجمع يقسم بعد اإلدخال على عشرة‬

‫‪C++‬‬ ‫البرمجة بلغة‬


‫>‪#include<iostream.h‬‬
‫)(‪main‬‬
‫;‪{1.int aveg,input_number‬‬
‫;‪2.int sum=0,n=0‬‬
‫{ )‪3.while(n<10‬‬
‫;‪4. cin>> input_number‬‬
‫; ‪5. sum += input_number‬‬
‫};‪6.n++‬‬
‫;‪7. aveg=sum/10‬‬
‫; ‪8.Cout<<" aveg ="<< aveg‬‬
‫}‬

‫‪C‬‬ ‫البرمجة بلغة‬


‫>‪#include<stdio.h‬‬
‫)(‪main‬‬
‫;‪{1.int aveg,input_number‬‬
‫;‪2.int sum=0,n=0‬‬
‫{ )‪3.while(n<10‬‬
‫;)‪4. scanf("%d", &input_number‬‬
‫; ‪5. sum += input_number‬‬
‫};‪6.n++‬‬
‫;‪7. aveg=sum/10‬‬
‫;) ‪8. printf(" aveg =%d", aveg‬‬
‫}‬
‫تحليل‪:‬‬

‫‪.١‬خطوة رقم )‪ (١‬عرفنا متغير متغير حساب المعدل ومتغير إدخال الدرجات‬
‫‪.٢‬خطوة رقم )‪ (٢‬عرفنا متغير )‪ (sum‬من نوع )‪ (integer‬وأعطيناه قيمة بدائية وھي صفر ألننا سنجمع والنضير‬
‫الجمعي ھو صفر وعرفنا المتغير ) ‪ (n‬ليكون عداد للعبارة التكرارية وأعطينا قيمته االبتدائية صفر‬
‫‪ .٣‬خطوة رقم )‪ (٣‬ھي جملة تكرارية مطلوب منھا تكرر الخطوة رقم )‪٤‬و ‪ ٥‬و ‪ (٦‬عشر مرات‬
‫‪.٤‬خطوة رقم )‪ (٤‬ھي دالة إدخال عند كل عدة للجملة التكرارية يطلب من المستخدم إدخال درجة جديدة‬
‫‪ .٥‬خطوة رقم )‪ (٥‬يقوم بجمع الدرجات المدخلة عند كل إدخال يجمع الدرجة الجديدة مع ناتج جمع الدرجات السابقة‬
‫‪.٦‬خطوة رقم )‪ (٦‬ھو عداد الجملة التكرارية يزداد بمقدار واحد عند كل عدة‪.‬‬
‫‪.٧‬خطوة رقم )‪ (٧‬يقوم بحساب المعدل حيث يقسم ناتج جمع الدرجات المدخلة على عشرة‬
‫‪.٨‬خطوة رقم )‪ (٨٧‬يقوم بطباعة المعدل‬

‫‪Step By step to Learn C or C++‬‬ ‫‪By:Hussien Ahmmed Taleb‬‬ ‫‪100‬‬


‫‪.٢‬عبارة )‪ ( While‬التكرارية المتداخلة‪:‬‬
‫وتكون مشابه تماما لعبارات )‪ (for‬التكرارية‪ .‬ھذه العبارة التكرار سوف ال تكرر فقط اسطر برمجية إنما تكرر‬
‫عبارات )‪ (while‬تكرارية أخرى )أو عبارات تكرارية أخرى ك ‪ (for,do—while‬توجد في داخلھا أي في كل‬
‫عدة لل )‪ (while‬إالم ستعد )‪ (while‬الداخلية جميع عداتھا‪.‬حالھا كحال أي خطوة برمجية داخل عبارة تكرارية‬
‫وبما أن العبارة التكرارية الداخلية يمر عليھا عند كل عدة للعبارة التكرارية إالم لذالك في كل عدة لالم تعد العبارة‬
‫التكرارية الداخلية جميع عداتھا الممكنة حسب شرطھا ‪.‬‬

‫ھيكلية ‪while--Loop‬‬
‫;‪Initializing1‬‬
‫)‪While(Boolean_Expression1‬‬
‫;‪{ Ini7alizing2‬‬
‫)‪While(Boolean_Expression2‬‬
‫{‬
‫;‪Statement‬‬
‫;‪Update2‬‬
‫}‬
‫} ;‪Update1‬‬

‫على سبيل المثال لو كان لدينا ھذا التداخل‬

‫مثال‬
‫;‪i=0‬‬
‫)‪while( i<5‬‬
‫;‪{ j=0‬‬
‫)‪While(j<5‬‬
‫{‬
‫‪statement‬‬
‫};‪j++‬‬
‫};‪i++‬‬ ‫مھم‬

‫ففي كل عدة بالنسبة لل )‪ (While‬الخارجية تعد ال )‪ (While‬الداخلية خمس مرات وتنفذ )‪ ( statement‬خمس‬
‫مرات أي أن إذا كان )‪ (i=0‬سيعد ال )‪( j‬قيمه وھي )‪ (0,1,2,3,4‬و إذا أصبح )‪ (i=1‬سيعد ال )‪ ( j‬قيمه وھي‬
‫)‪ (0,1,2,3,4‬و إذا أصبح )‪ (i=2‬سيعد ال )‪ ( j‬قيمه وھي )‪ (0,1,2,3,4‬و إذا أصبح )‪ (i=3‬سيعد ال )‪ ( j‬قيمه وھي‬
‫)‪ (0,1,2,3,4‬و إذا أصبح )‪ (i=4‬سيعد ال )‪ ( j‬قيمه وھي )‪(0,1,2,3,4‬‬

‫**تبقى المبادئ ثابتة كل عبارة تكرارية يتبعھا سطر برمجي واحد إذا لم نستخدم أقواس وإذا وضعنا أقواس كل الذي‬
‫داخل األقواس ھو تابع للعبارة التكرارية‪.‬‬

‫‪Step By step to Learn C or C++‬‬ ‫‪By:Hussien Ahmmed Taleb‬‬ ‫‪101‬‬


‫مثال‪ :‬برنامج جدول ضرب من )‪ (١‬إلى )‪. (١٠‬؟‬

‫تحليل ‪):‬المثال نفسه موجود في عبارة )‪ (for‬التكرارية المتداخلة ستجد تحليل بشكل مفصل‪(.‬‬

‫‪C++‬‬ ‫البرمجة بلغة‬


‫>‪#include<iostream.h‬‬
‫)(‪main‬‬
‫;‪{1.int i=1,j‬‬
‫{ )‪2.while( i<=10‬‬
‫;"‪3.cout<<"Multiply tabel for("<<i<<").\n-------------------------------\n‬‬
‫;‪4. j=1‬‬
‫{ )‪5.while( j<=10‬‬
‫;"‪6.cout<< j<<" * " <<i<<"="<<i*j<<"\n‬‬
‫};‪7.j++‬‬
‫;"‪8.cout<<"\n‬‬
‫};‪9.i++‬‬
‫}‬

‫‪C‬‬ ‫البرمجة بلغة‬


‫>‪#include<stdio.h‬‬
‫)(‪main‬‬
‫;‪{1.int i=1,j‬‬
‫{ )‪2.while( i<=10‬‬
‫;)‪3.prinC("Mul7ply tabel for(%d).\n-------------------------------\n", i‬‬
‫;‪4. j=1‬‬
‫{ )‪5.while( j<=10‬‬
‫;)‪6.printf("%d * %d=%d\n",i, j, i*j‬‬
‫};‪7.j++‬‬
‫;)"‪8.prinC("\n‬‬
‫};‪9.i++‬‬
‫}‬
‫توضيح الخطوات‪:‬‬

‫‪.١‬خطوة رقم )‪ (١‬تم تعريف متغيرين المتغير )‪ (i‬ھو جدول ضرب الرقم )كان يكون جدول ضرب ثالثة مثال(‬
‫والمتغير )‪ (j‬ھوا يضرب بالمتغير األول األرقام من واحد إلى العشرة‬

‫‪.٢‬خطوة رقم )‪ (٢‬ھي عبارة تكرارية تعد من )‪ (١‬إلى )‪ (١٠‬وفي كل عدة لھا تتكرر الخطوات رقم )‪ ٣‬إلى ‪(٩‬‬

‫‪.٣‬خطوة رقم )‪ (٣‬ھي رسالة تظھر بداية كل جدول تبين للمستخدم انه ھذا الجدول ھو للرقم المعين وھي بضبط‬
‫الرسالة الموجودة في شاشة التنفيذ في األسفل ومؤشر عليھا ب )" جملة الطباعة الخطوة )‪ ("(٣‬وكما تالحظ أن في‬
‫كل عدة للعبارة التكرارية الخطوة رقم )‪ (٢‬تتكرر الخطوة رقم )‪ (٣‬مرة واحدة لتظھر بداية كل جدول‬

‫‪.٤‬خطوة رقم )‪ (٤‬ھي عملية وضع قيمة ابتدائية لل )‪ (while‬الداخلية عند كل عدة لل )‪ (while‬في خطوة رقم )‪(٢‬‬

‫‪Step By step to Learn C or C++‬‬ ‫‪By:Hussien Ahmmed Taleb‬‬ ‫‪102‬‬


‫‪.٥‬خطوة رقم )‪ (٥‬ھي عبارة تكرارية داخلية وفي كل عدة للعبارة التكرارية في الخطوة رقم )‪ (٢‬تعمل ھذه العبارة‬
‫بالعد من )‪ (١‬إلى )‪ (١٠‬لكي نضرب كل رقم من األرقام التي تعدھا الخطوة رقم )‪ (٢‬باألرقام من )‪ (١‬إلى )‪(١٠‬‬
‫وھذه العبارة التكرارية يتبعھا خطوات رقم )‪ ٦‬و ‪(٧‬‬

‫‪ .٦‬خطوة رقم )‪ (٦‬ھي عملية طباعة كل قيمة من التي تعدھا العبارة التكرارية في الخطوة رقم )‪ (٢‬باألرقام من )‪(١‬‬
‫إلى )‪ (١٠‬التي تعدھا العبارة التكرارية في خطوة رقم )‪ (٥‬وھذه جملة الطباعة ھي تابعة لھذه العبارة التكرارية وما‬
‫تنتجه ھذه جملة الطباعة شاھده بالرسالة الموجودة في شاشة التنفيذ في األسفل ومؤشر عليھا ب )" جملة الطباعة‬
‫الخطوة )‪("(٥‬‬

‫‪.٧‬ھو عداد خاص بالعبارة التكرارية الداخلية يعد من )‪ (١‬إلى )‪(١٠‬‬

‫‪ .٨‬خطوة رقم )‪ (٨‬ھي عملية طباعة سطر جديد بعد كل جدول ضرب والحظھا ھي تابعة للعبارة التكرارية في‬
‫خطوة رقم)‪ (٢‬وما تنتجه ھذه جملة الطباعة شاھده بالرسالة الموجودة في شاشة التنفيذ في األسفل ومؤشر عليھا ب‬
‫)" جملة الطباعة الخطوة )‪("(٦‬‬

‫‪ .٩‬ھو عداد خاص بالعبارة التكرارية الخارجية يعد من )‪ (١‬إلى )‪(١٠‬‬

‫جملة الطباعة الخطوة )‪(٣‬‬

‫جملة الطباعة الخطوة )‪(٥‬‬

‫جملة الطباعة الخطوة )‪(٦‬‬

‫مھم‬

‫كيف نعرف أن الخطوة رقم )‪ (٨‬ھي تابعه للخطوة رقم )‪ (٢‬وليس للخطوة رقم )‪..(٥‬؟‬

‫كما تالحظ أن خطوة رقم )‪ (٢‬تحصر بين قوسيھا خطوات رقم)‪ ٣‬إلى ‪ (٩‬ونالحظ أن العبارة التكرارية في الخطوة‬
‫رقم )‪ (٥‬تتبعھا فقط خطوة رقم )‪ ٦‬و‪ (٧‬فتبقى الخطوة رقم )‪ (٦‬خارج قوس العبارة التكرارية الداخلية وبما أنھا‬
‫داخل قوسين الخطوة رقم )‪ (٢‬فھي تابعة لھا‪.‬‬

‫‪Step By step to Learn C or C++‬‬ ‫‪By:Hussien Ahmmed Taleb‬‬ ‫‪103‬‬


‫عبارة )‪ (Do-- While‬التكرارية ‪:‬‬
‫ھي عبارة تكرارية تستخدم لتكرار خطوات برمجية المحصورة بين قوسيھا لعدد من المرات تكون مشابه كثيرا لعبارة‬
‫التكرار )‪ (For‬و)‪ . (while‬فقط االختالف بينھا وبينھم أن عبارة )‪ (Do—While‬التكرارية تنفذ مابين قوسيھا ثم‬
‫يتحقق من الشرط أما )‪ (For‬و )‪ (while‬يتحقق من الشرط ثم تنفذ مابين قوسيھا‪.‬‬

‫ھيكلية ‪Do-- while—Loop‬‬


‫‪Initializing‬‬
‫{ ‪do‬‬
‫;‪Statement‬‬
‫‪Update‬‬
‫;)‪} while ( Boolean_Expression‬‬

‫)‪ :(Initializing‬ھي القيمة البداية المعطاة للمتغير التي منھا سيبدأ العد‪) .‬مثال ‪(i=0‬‬ ‫•‬
‫)‪ :(Boolean_Expression‬ھو شرط التوقف الذي عندما تصبح قيمة المتغير غير محققة لشرط التوقف‬ ‫•‬
‫سوف يخرج من عبارة )‪ (while‬بمعنى أخر مادام نتيجة اختباره ال )‪ (Boolean_Expression‬ھي‬
‫)‪ (True‬العبارة التكرارية تستمر بتنفيذ مابين قوسيھا ومتى ما أصبح )‪ (False‬يخرج من العبارة التكرارية‪.‬‬
‫مثال ) ‪ ((i<5‬ھوا شرط التوقف ويبدأ العد من الواحد‬
‫)‪ :(Update‬ھي مقدار الزيادة أو النقصان في قيمة المتغير في كل دورة )‪ .(loop‬مثال )‪ ( i++‬أو )‪(i--‬‬ ‫•‬
‫)‪ :(statement‬ھي الخطوات البرمجية التي ستنفذ عدد من المرات ‪.‬إذا كانت عبارة عن خطوة برمجية‬ ‫•‬
‫مھم‬
‫واحدة فليس بحاجة لوضعھا داخل أقواس وإذا كانت أكثر من خطوة يجب وضعھا داخل أقواس‪.‬‬

‫كيف تعمل عبارة ال )‪ ( do --while‬التكرارية‪........‬؟‬

‫أن المتغير يبدأ بقيمة بدائية )‪ (Initializing‬ويستمر بالزيادة أو النقصان حسب )‪ (Update‬أي قد يزداد أو ينقص‬
‫بمقدار واحد أو أكثر من واحد ومتى ما أصبح قيمة المتغير غير محققة للشرط )‪ (Boolean_Expression‬يخرج‬
‫من العبارة التكرارية إلى الخطوات البرمجية التي تليه وإذا كانت محققة للشرط ينفذ الخطوات البرمجية التي داخل‬
‫العبارة التكرارية من جديد‪.‬‬
‫• إلدخال )‪ (do--while‬في دوارة النھائية نكتب )‪ do -- while(1‬فقط ‪.‬‬
‫مثال‪ :‬لو أردنا عداد يعد من )‪ (0‬إلى )‪ (4‬أي يطبع على شاشة التنفيذ من )‪ 0‬إلى ‪(4‬‬
‫‪C++‬‬ ‫البرمجة بلغة‬
‫>‪#include<iostream.h‬‬
‫)(‪main‬‬
‫;‪{1.int i=0‬‬
‫{ ‪2.do‬‬
‫;"‪3.cout<<i<<"\t‬‬
‫};‪4. i++‬‬
‫;)‪5. while( i<5‬‬
‫}‬

‫‪Step By step to Learn C or C++‬‬ ‫‪By:Hussien Ahmmed Taleb‬‬ ‫‪104‬‬


‫‪C‬‬ ‫البرمجة بلغة‬
‫>‪#include<stdio.h‬‬
‫)(‪main‬‬
‫;‪{1.int i=0‬‬
‫{ ‪2.do‬‬
‫;)‪3.printf("%d\t",i‬‬
‫};‪4. i++‬‬
‫;)‪5. while( i<5‬‬
‫}‬
‫توضيح الخطوات ‪:‬‬

‫‪.١‬خطوة رقم )‪ (١‬عرفنا متغير )‪ (i‬من نوع ‪ .integer‬بما إننا نريد العد من الصفر فأعطينا القيم البدائية صفر‬
‫‪.٢‬خطوة رقم )‪ (٢‬تمتد إلى خطوة رقم )‪ (٥‬ھي عبارة تكرارية بما أن العد يصل إلى ‪ ٤‬معناه شرط التوقف أن‬
‫يكون اقل من خمسة بما إننا نريد أن يعد خمس عدات بين صفر واألربعة لذالك يجب أن يكون مقدار الزيادة واحد‬
‫ليعد )‪. (0 ,1,2,3,4‬الن لو جعلنا مقدار الزيادة ‪ ٢‬مثال فسيعد العداد ثالث مرات مرة )‪ (0,2,4‬لذالك يجب التركيز‬
‫في ھذه المواضيع جيدا‪.‬‬
‫القيمة البدائية‬
‫مھم‬
‫للعداد )‪(i=0‬‬

‫طباعة القيمة‬

‫زيادة قيمة‬
‫العداد )‪(i++‬‬

‫شرط‬
‫التحقق)‪(i<5‬‬

‫خروج من‬
‫جملة التكرار‬
‫لو تالحظ المخطط الخاص بالبرنامج عندما يحقق الشرط يتجه لخطوة الطباعة وإذا لم يحقق يخرج من جملة تكرار‬

‫‪.٣‬خطوة رقم )‪ (٣‬ھي طباعة قيمة المتغير عند كل عدة ‪.‬خطوة رقم )‪ (٤‬ھو عداد يزداد بمقدار واحد عند كل عدة‬
‫* قارن ھذا المثال بالمثال المشابه له ب)‪ ( while , For‬وشاھد الفرق ‪.‬‬

‫عدد مرات تنفيذ الخطوات‪:‬تنفذ خطوة رقم )‪ (١‬مرة واحدة فقط‪.‬وتنفذ خطوة رقم)‪ (٣‬وخطوة رقم )‪ (٤‬خمس مرات‬

‫‪Step By step to Learn C or C++‬‬ ‫‪By:Hussien Ahmmed Taleb‬‬ ‫‪105‬‬


‫مثال‪ :‬لو أردنا عداد يعد من )‪ (4‬إلى )‪ (0‬أي يطبع على شاشة التنفيذ )‪( 4 3 2 1 0‬‬

‫تحليل‪:‬حلھا نفس حل السؤال السابق فقط نقلب العداد أي نجعل قيمته البدائية ھي ‪ ٤‬وشرط التوقف اكبر أو يساوي‬
‫صفر ويتناقص بمقدار واحد كل عدة‬

‫‪C++‬‬ ‫البرمجة بلغة‬


‫>‪#include<iostream.h‬‬
‫)(‪main‬‬
‫;‪{1.int i=4‬‬
‫‪2.do‬‬
‫;"‪{3.cout<<i<<"\t‬‬
‫};‪4.i--‬‬
‫;)‪5. while( i>=0‬‬
‫}‬

‫‪C‬‬ ‫البرمجة بلغة‬


‫>‪#include<stdio.h‬‬
‫)(‪main‬‬
‫;‪{1.int i=4‬‬
‫‪2.do‬‬
‫;)‪3.printf("%d\t",i‬‬
‫};‪4.i--‬‬
‫;)‪5.while( i>=0‬‬
‫}‬

‫توضيح الخطوات ‪:‬‬

‫‪.١‬خطوة رقم )‪ (١‬عرفنا متغير )‪ (i‬من نوع ‪ integer‬فأعطيناه القيم البدائية أربعة‬

‫‪.٢‬خطوة رقم )‪(٢‬ھي عبارة تكرارية بما إننا نريد العد من األربعة فأعطينا القيم البدائية أربعة ‪.‬والعد يصل إلى‬
‫الصفر معناه شرط التوقف أن يكون اكبر أو يساوي صفر ) )‪ ( while(i>=0‬بما إننا نريد أن يعد خمس عدات بين‬
‫صفر واألربعة لذالك يجب أن يكون مقدار نقصان واحد ليعد )‪. (4,3,2,1,0‬الن لو جعلنا مقدار النقصان ‪ ٢‬مثال‬
‫فسيعد العداد ثالث مرات مرة )‪ (4,2,0‬لذالك يجب التركيز في ھذه المواضيع جيدا‬
‫‪.٣‬خطوة رقم )‪ (٣‬ھي طباعة قيمة المتغير عند كل عدة ‪.‬خطوة رقم )‪ (٤‬ھو عداد ينقص بمقدار واحد عند كل عدة‬

‫سيطبع في شاشة التنفيذ‬

‫عدد مرات تنفيذ الخطوات‪:‬‬

‫تنفذ خطوة رقم )‪ (١‬مرة واحدة فقط‪.‬وتنفذ خطوة رقم)‪ (٣‬وخطوة رقم )‪ (٤‬خمس مرات بقدر عدات العداد‬

‫‪Step By step to Learn C or C++‬‬ ‫‪By:Hussien Ahmmed Taleb‬‬ ‫‪106‬‬


‫مثال‪ :‬برنامج لجمع اإلعداد الفردية بين ) ‪(0—100‬‬

‫تحليل‪ :‬نرى انه يريد اإلعداد الفردية فقط لذالك يجب أن نطفر اإلعداد الزوجية ‪.‬نكون عداد يعد من الواحد وشرط‬
‫التوقف عند المائة ومقدار الزيادة في )‪ (٢‬حتى نجمع فقط اإلعداد الفردية‬

‫‪C++‬‬ ‫البرمجة بلغة‬


‫>‪#include<iostream.h‬‬
‫)(‪main‬‬
‫;‪{1.int n=1‬‬
‫;‪2.int sum=0‬‬
‫‪3.do‬‬
‫; ‪{4. sum += n‬‬
‫;)‪5. n=n+2;} while( n<100‬‬
‫};‪6.Cout<<"sum="<<sum‬‬

‫‪C‬‬ ‫البرمجة بلغة‬


‫>‪#include<stdio.h‬‬
‫)(‪main‬‬
‫;‪{1.int n=1‬‬
‫;‪2.int sum=0‬‬
‫‪3.do‬‬
‫; ‪{4. sum += n‬‬ ‫مھم‬
‫;)‪5. n=n+2;} while( n<100‬‬
‫};)‪6.printf("sum=%d",sum‬‬
‫توضيح الخطوات‪:‬‬
‫‪.١‬خطوة رقم )‪ (١‬عرفنا متغير ) ‪ (n‬من نوع )‪ (integer‬ليكون عداد للعبارة التكرارية وقيمته االبتدائية ھي واحد‬

‫‪.٢‬خطوة رقم )‪ (٢‬عرفنا متغير )‪ (sum‬من نوع )‪ (integer‬وأعطيناه قيمة بدائية وھي صفر ألننا سنجمع والنضير‬
‫الجمعي ھو صفر حتى عندما نجمعه مع أول قيمة وھي واحد سيجمع واحد مع الصفر‬

‫‪.٣‬خطوة رقم )‪ (٣‬جملة تكرارية ) )‪ (do-- while(n<100‬ويبدأ العد من الواحد ألنه أول عدد فردي إلى ‪٩٩‬‬

‫‪.٤‬خطوة رقم )‪ (٤‬جمعنا قيمة المتغير )‪ (sum‬مع قيمة العداد عند كل عدة‪ .‬أي عندما يكون ) ‪ (n=1‬سيجمع‬
‫)‪ (sum=0+1‬وعندما يصبح ) ‪ (n=3‬سيجمع قيمة )‪ (sum‬السابقة وھي أصبحت واحد مع ثالثة )‪(sum=1+3‬‬
‫وعندما يصبح ) ‪ (n=5‬سيجمع قيمة )‪ (sum‬السابقة وھي أصبحت أربعة مع ثالثة )‪ (sum=4+5‬ويستمر‪.‬‬

‫‪.٥‬خطوة رقم )‪ (٥‬ھو زيادة للعداد بمقدار اثنان حتى فقط نجمع اإلعداد الفردية وإذا تجاوز الشرط يخرج من تكرار‬
‫‪.٦‬خطوة رقم )‪ (٦‬طباعة الناتج الجمع في شاشة التنفيذ‬
‫‪Sum=2500‬‬
‫عدد مرات تنفيذ الخطوات‪:‬تنفذ خطوة رقم )‪١‬و‪ (٢‬مرة واحدة فقط‪.‬وتنفذ خطوة رقم)‪ (٤‬وخطوة رقم )‪ (٥‬خمسين‬
‫مرة الن اإلعداد الفردية بين)‪ (0—100‬ھي خمسين رقم وتنفذ خطوة رقم)‪ (٦‬مرة واحدة‬

‫‪Step By step to Learn C or C++‬‬ ‫‪By:Hussien Ahmmed Taleb‬‬ ‫‪107‬‬


‫‪.٢‬عبارة )‪ (do-- While‬التكرارية المتداخلة‪:‬‬
‫وتكون مشابه لعبارات ) ‪ while‬و ‪ (for‬التكرارية تقريبا‪ .‬ھذه العبارة التكرار سوف ال تكرر فقط اسطر برمجية‬
‫إنما تكرر عبارات تكرارية أخرى توجد في داخلھا )‪ . ( while , for , do—while‬أي في كل عدة لل‬
‫)‪ (do-while‬إالم ستعد )‪ (do-while‬الداخلية جميع عداتھا‪.‬حالھا كحال أي خطوة برمجية داخل عبارة تكرارية‬
‫وبما أن العبارة التكرارية الداخلية يمر عليھا عند كل عدة للعبارة التكرارية إالم لذالك في كل عدة لالم تعد العبارة‬
‫التكرارية الداخلية جميع عداتھا الممكنة حسب شرطھا ‪.‬‬

‫ھيكلية ‪do--while‬‬
‫;‪Initializing1‬‬
‫‪do‬‬
‫;‪{ Initializing2‬‬
‫‪do‬‬
‫{‬
‫;‪Statement‬‬
‫;‪Update2‬‬
‫; )‪} While(Boolean_Expression2‬‬
‫;‪Update1‬‬
‫;)‪} While(Boolean_Expression1‬‬

‫على سبيل المثال لو كان لدينا ھذا التداخل‬

‫مثال‬
‫;‪i=0‬‬
‫‪do‬‬
‫;‪{ j=0‬‬
‫‪do‬‬
‫{‬
‫‪statement‬‬ ‫مھم‬
‫)‪j++;} While(j<5‬‬
‫;)‪i++;} while( i<5‬‬
‫ففي كل عدة بالنسبة لل )‪ (do--While‬الخارجية تعد ال )‪ ( do-while-‬الداخلية خمس مرات وتنفذ‬
‫)‪ ( statement‬خمس مرات أي أن إذا كان )‪ (i=0‬سيعد ال )‪( j‬قيمه وھي )‪ (0,1,2,3,4‬و إذا أصبح )‪ (i=1‬سيعد‬
‫ال )‪ ( j‬قيمه وھي )‪ (0,1,2,3,4‬و إذا أصبح )‪ (i=2‬سيعد ال )‪ ( j‬قيمه وھي )‪ (0,1,2,3,4‬و إذا أصبح )‪ (i=3‬سيعد‬
‫ال )‪ ( j‬قيمه وھي )‪ (0,1,2,3,4‬و إذا أصبح )‪ (i=4‬سيعد ال )‪ ( j‬قيمه وھي )‪(0,1,2,3,4‬‬

‫**تبقى المبادئ ثابتة كل عبارة تكرارية يتبعھا سطر برمجي واحد إذا لم نستخدم أقواس وإذا وضعنا أقواس كل الذي‬
‫داخل األقواس ھو تابع للعبارة التكرارية‪.‬‬

‫‪Step By step to Learn C or C++‬‬ ‫‪By:Hussien Ahmmed Taleb‬‬ ‫‪108‬‬


‫مثال‪ :‬برنامج جدول ضرب من )‪ (١‬إلى )‪. (١٠‬؟‬

‫تحليل ‪):‬المثال نفسه موجود في عبارة )‪ (for‬التكرارية المتداخلة ستجد تحليل بشكل مفصل‪(.‬‬

‫‪C++‬‬ ‫البرمجة بلغة‬


‫>‪#include<iostream.h‬‬
‫)(‪main‬‬
‫;‪{1.int i=1,j‬‬
‫{ ‪2.do‬‬
‫;"‪3.cout<<"Multiply tabel for("<<i<<").\n-------------------------------\n‬‬
‫;‪4. j=1‬‬
‫{ ‪5.do‬‬
‫;"‪6.cout<< j<<" * " <<i<<"="<<i*j<<"\n‬‬
‫;)‪7.j++;} while( j<=10‬‬
‫;"‪8.cout<<"\n‬‬
‫;)‪9.i++;} while( i<=10‬‬
‫}‬

‫‪C‬‬ ‫البرمجة بلغة‬


‫>‪#include<stdio.h‬‬
‫)(‪main‬‬
‫;‪{1.int i=1,j‬‬
‫{ ‪2.do‬‬
‫;)‪3.prinC("Mul7ply tabel for(%d).\n-------------------------------\n", i‬‬
‫;‪4. j=1‬‬
‫{ ‪5.do‬‬
‫;)‪6.prinC("%d * %d=%d\n",i, j, i*j‬‬
‫;)‪7.j++;} while( j<=10‬‬
‫;)"‪8.prinC("\n‬‬
‫;)‪9.i++;} while( i<=10‬‬
‫}‬
‫توضيح الخطوات‪:‬‬

‫‪.١‬خطوة رقم )‪ (١‬تم تعريف متغيرين المتغير )‪ (i‬ھو جدول ضرب الرقم )كان يكون جدول ضرب ثالثة مثال(‬
‫والمتغير )‪ (j‬ھوا يضرب بالمتغير األول األرقام من واحد إلى العشرة‬

‫‪.٢‬خطوة رقم )‪ (٢‬ھي عبارة تكرارية تعد من )‪ (١‬إلى )‪ (١٠‬وفي كل عدة لھا تتكرر الخطوات رقم )‪ ٣‬إلى ‪(٩‬‬

‫‪.٣‬خطوة رقم )‪ (٣‬ھي رسالة تظھر بداية كل جدول تبين للمستخدم انه ھذا الجدول ھو للرقم المعين وھي بضبط‬
‫الرسالة الموجودة في شاشة التنفيذ في األسفل ومؤشر عليھا ب )" جملة الطباعة الخطوة )‪ ("(٣‬وكما تالحظ أن في‬
‫كل عدة للعبارة التكرارية الخطوة رقم )‪ (٢‬تتكرر الخطوة رقم )‪ (٣‬مرة واحدة لتظھر بداية كل جدول‬

‫‪.٤‬خطوة رقم )‪ (٤‬ھي عملية وضع قيمة ابتدائية لل )‪ (do--while‬الداخلية عند كل عدة لل )‪ (do-- while‬في‬
‫خطوة رقم )‪(٢‬‬

‫‪Step By step to Learn C or C++‬‬ ‫‪By:Hussien Ahmmed Taleb‬‬ ‫‪109‬‬


‫‪.٥‬خطوة رقم )‪ (٥‬ھي عبارة تكرارية داخلية وفي كل عدة للعبارة التكرارية في الخطوة رقم )‪ (٢‬تعمل ھذه العبارة‬
‫بالعد من )‪ (١‬إلى )‪ (١٠‬لكي نضرب كل رقم من األرقام التي تعدھا الخطوة رقم )‪ (٢‬باألرقام من )‪ (١‬إلى )‪(١٠‬‬
‫وھذه العبارة التكرارية يتبعھا خطوات رقم )‪ ٦‬و ‪(٧‬‬

‫‪ .٦‬خطوة رقم )‪ (٦‬ھي عملية طباعة كل قيمة من التي تعدھا العبارة التكرارية في الخطوة رقم )‪ (٢‬باألرقام من )‪(١‬‬
‫إلى )‪ (١٠‬التي تعدھا العبارة التكرارية في خطوة رقم )‪ (٥‬وھذه جملة الطباعة ھي تابعة لھذه العبارة التكرارية وما‬
‫تنتجه ھذه جملة الطباعة شاھده بالرسالة الموجودة في شاشة التنفيذ في األسفل ومؤشر عليھا ب )" جملة الطباعة‬
‫الخطوة )‪("(٥‬‬

‫‪.٧‬ھو عداد خاص بالعبارة التكرارية الداخلية يعد من )‪ (١‬إلى )‪(١٠‬‬

‫‪ .٨‬خطوة رقم )‪ (٨‬ھي عملية طباعة سطر جديد بعد كل جدول ضرب والحظھا ھي تابعة للعبارة التكرارية في‬
‫خطوة رقم)‪ (٢‬وما تنتجه ھذه جملة الطباعة شاھده بالرسالة الموجودة في شاشة التنفيذ في األسفل ومؤشر عليھا ب‬
‫)" جملة الطباعة الخطوة )‪("(٦‬‬

‫‪ .٩‬ھو عداد خاص بالعبارة التكرارية الخارجية يعد من )‪ (١‬إلى )‪(١٠‬‬

‫جملة الطباعة الخطوة )‪(٣‬‬

‫جملة الطباعة الخطوة )‪(٥‬‬

‫جملة الطباعة الخطوة )‪(٦‬‬

‫مھم‬

‫كيف نعرف أن الخطوة رقم )‪ (٨‬ھي تابعه للخطوة رقم )‪ (٢‬وليس للخطوة رقم )‪..(٥‬؟‬

‫كما تالحظ أن خطوة رقم )‪ (٢‬تحصر بين قوسيھا خطوات رقم)‪ ٣‬إلى ‪ (٩‬ونالحظ أن العبارة التكرارية في الخطوة‬
‫رقم )‪ (٥‬تتبعھا فقط خطوة رقم )‪ ٦‬و‪ (٧‬فتبقى الخطوة رقم )‪ (٦‬خارج قوس العبارة التكرارية الداخلية وبما أنھا‬
‫داخل قوسين الخطوة رقم )‪ (٢‬فھي تابعة لھا‪.‬‬

‫‪Step By step to Learn C or C++‬‬ ‫‪By:Hussien Ahmmed Taleb‬‬ ‫‪110‬‬


‫مھم‬

‫ما الفرق إذن بين دوال التكرار )‪..(for,while,do—while‬؟‬

‫كما قلنا أن االختالف بينھا وبينھم أن دالة )‪ (Do—While‬التكرارية تنفذ مابين قوسيھا ثم يتحقق من الشرط فإذا‬
‫كان ناتج الشرط )‪ ( True‬تعيد تنفيذ مابين قوسيھا من جديد وإذا كان )‪ (False‬فتنتقل للخطوة التي تليه‪ .‬أما‬
‫)‪ (For‬و )‪ (while‬يتحقق من الشرط ثم تنفذ مابين قوسيھا كان ناتج الشرط )‪ ( True‬تنفذ مابين قوسيھا وإذا‬
‫كان )‪ (False‬فتنتقل للخطوة التي تليه‪.‬‬
‫لتوضيح الفكرة بھذا المثال‪.‬‬
‫مثال‪:‬برنامج يطلب منك أن تدخل رقم ويقدر الرقم يطبع عبارة )!‪ (Hello‬أي لو أدخلت )‪ (٥‬سيطبع ھذه العبارة‬
‫خمسة مرات وإذا أدخلت واحد يطبعھا مرة واحدة‪.‬‬

‫تحليل ‪:‬مادام عدد مرات الطباعة مرتبط بإدخال المستخدم فالحل يكون عبارة تكرارية تبدأ من الواحد إلى الرقم الذي‬
‫ادخله المستخدم وتحته جملة طباعة )أي إذا ادخل ‪ ٢‬سيعد العداد )‪ (1,2‬أي عدتان ويطبع الجملة مرتان(‪.‬‬

‫الحل باستخدام دالة )‪ (For‬التكرارية‪.‬‬

‫‪C++‬‬ ‫البرمجة بلغة‬


‫>‪#include<iostream.h‬‬
‫)(‪main‬‬
‫{‬
‫;‪1.int i,input_numbe‬‬
‫; ‪2.cin>> input_numbe‬‬
‫)‪3.for (i=1 ;i<= input_numbe ;i++‬‬
‫;"‪4.cout<<"Hello!\n‬‬
‫}‬

‫‪C‬‬ ‫البرمجة بلغة‬


‫>‪#include<stdio.h‬‬
‫)(‪main‬‬
‫{‬
‫;‪1.int i,input_numbe‬‬
‫; )‪2.scanf("%d",& input_numbe‬‬
‫)‪3.for (i=1 ;i<= input_numbe ;i++‬‬
‫;)"‪4.prinC("Hello!\n‬‬
‫}‬

‫‪Step By step to Learn C or C++‬‬ ‫‪By:Hussien Ahmmed Taleb‬‬ ‫‪111‬‬


.‫( التكرارية‬While) ‫الحل باستخدام دالة‬

C++ ‫البرمجة بلغة‬


#include<iostream.h>
main()
{1.int i=1,input_numbe;
2.cin>> input_numbe ;
3.while(i<= input_numbe )
{ 4.cout<<"Hello!\n";
5.i++; }
}

C ‫البرمجة بلغة‬
#include<stdio.h>
main()
{1.int i=1,input_numbe;
2.scanf("%d",& input_numbe) ;
3.while(i<= input_numbe )
{4.prinC("Hello!\n");
5.i++; }
}

.‫( التكرارية‬Do--While) ‫الحل باستخدام دالة‬

C++ ‫البرمجة بلغة‬


#include<iostream.h>
main()
{1.int i=1,input_numbe;
2.cin>> input_numbe ;
3.do
{ 4.cout<<"Hello!\n";
5.i++; } while(i<= input_numbe ) ;
}

C ‫البرمجة بلغة‬
#include<stdio.h>
main()
{1.int i=1,input_numbe;
2.scanf("%d",& input_numbe) ;
3.do
{4.prinC("Hello!\n");
5.i++; } while(i<= input_numbe ) ;
}

Step By step to Learn C or C++ By:Hussien Ahmmed Taleb 112


‫أالن لنقارن نتائج األمثلة الثالثة‬

‫‪.١‬إذا أدخلنا الرقم )‪ (٥‬من شاشة التنفيذ‬

‫سوف يطبع )‪ (for,while‬الجملة خمس مرات ألنه عداد يعد من )‪ (١‬إلى )‪ (٥‬وإذا تجاوز الرقم )‪ (٥‬ال يسمح له‬
‫بطباعة الجملة من جديد ويخرج من العبارة التكرارية‬

‫سوف يطبع )‪ (do--while‬الجملة خمس مرات ألنه عداد يعد من )‪ (١‬إلى )‪ (٥‬وإذا تجاوز الرقم )‪ (٥‬ال يسمح له‬
‫بطباعة الجملة من جديد ويخرج من العبارة التكرارية‬

‫وتكون شاشة التنفيذ بالنسبة للجميع ھكذا‬

‫وأي رقم من واحد فما فوق تعطي الجميع نفس النتائج‬


‫مھم‬

‫‪.١‬إذا أدخلنا الرقم )‪ (0‬من شاشة التنفيذ‬

‫سوف ال يطبع )‪ (for,while‬جملة الطباعة وال مرة ألنه عندما يتحقق من الشرط في خطوة رقم )‪(٣‬‬
‫وھو )‪ (i<= input_numbe‬وھو ھكذا)‪ (1<=0=false‬سوف ال يحقق الشرط العبارة الشرطية لذالك سوف ال ينفذ‬
‫الجملة التابعة لعبارة التكرار ‪.‬وال يطبع جملة الطباعة التابعة لھا‬

‫وتكون شاشة التنفيذ ھكذا‬

‫سوف يطبع )‪ (do--while‬الجملة مرة واحدة ألنه أوال ينفذ الخطوات)‪٣‬و‪٤‬و‪ (٥‬بعد خطوة خامسة يتحقق من الشرط‬
‫ويجد انه الشرط ال يتحقق وال يعيد عبارة التكرار‪.‬وألكنه طبع الجملة في خطوة )‪ (٤‬قبل التحقق من الشرط‬

‫وتكون شاشة التنفيذ ھكذا‬

‫وھذا معنى قولنا )تنفذ )‪ (do-while‬مابين قوسيھا ثم تتحقق من الشرط(‬

‫‪Step By step to Learn C or C++‬‬ ‫‪By:Hussien Ahmmed Taleb‬‬ ‫‪113‬‬


‫  ‬

‫المستوى المطلوب‬
‫ٔان يكون القارئ ملما بما هو في الفصول السابقة وفاهما كل شيء‬

‫ٔ‬
‫االهداف‪:‬‬
‫عندما يكـتمل الفصل تكون بإذن ﷲ قد ٔاتممت التعرف علﻰ المصفوفات وطرق تمثيلها‬

‫ٔ‬
‫مستوى االداء المطلوب بعد إنهاء الفصل‬
‫إتقان هذه الفصل ‪100%‬‬

‫ٔ‬
‫االدوات المطلوبة‪:‬ﺣاﺴوب شخصي لتجربة البرامج وقلم ودفتر لتسجيل المالﺣظات‬

‫الوقت المطلوب ‪ ١٢:‬ﺴاعة‬

‫‪Step By step to Learn C or C++‬‬ ‫‪By:Hussien Ahmmed Taleb‬‬ ‫‪114‬‬


‫المصفوفات األحادية األبعاد‪:‬‬
‫قبل أن نتحدث عن المصفوفات علمنا أن المتغيرات تحجز مكان في الذاكرة تخزن فيه قيمة المتغير ‪.‬‬
‫لو أخذنا ھذا الجزء من الذاكرة وافترضنا انه المتغير )‪ (x=15‬مخزون في موقع )‪.(18126‬‬
‫مواقع خاليا الذاكرة‬
‫الموقع‬ ‫محتواه‬
‫‪18125‬‬ ‫‪data‬‬
‫ھذا ھو موقع المتغير ‪x‬‬ ‫مھم‬
‫‪18126‬‬ ‫‪15‬‬
‫‪18127‬‬ ‫‪data‬‬
‫كما تالحظ من الرسم أن المتغير )‪ (x‬حاجز مكان في الذاكرة وخازن قيمته بداخلة‪.‬‬
‫فما ھي المصفوفات‪ .‬ھي مجموعة خاليا متتالية في الذاكرة تحجز لغرض خزن معلومات معينة في داخلھا كأن نخزن‬
‫في داخلھا أرقام أو أحرف وتبقى ھذه القيم مخزنة داخل المصفوفة حتى نغلق البرنامج إذا لم نغيرھا داخل البرنامج‬
‫المصفوفات يجب اإلعالن عن عدد المواقع التي نحتاجھا في العمل في بداية البرنامج حتى يحجزھا المترجم‬
‫للمصفوفة وال يخزن قيم أخرى داخل في داخلھا و تبقى محجوزة فقط لعناصر المصفوفة‪ .‬ويكون اإلعالن عليھا ھكذا‬
‫ھيكلية‬
‫]‪Type arrrayname[size of array‬‬

‫• )‪ (arrrayname‬ھو اسم المصفوفة الذي سنتعامل معه في البرنامج أي اسم ممكن أن نسمي المصفوفة‬
‫• )‪ (size of array‬ھوا حجم الذي ستشغله المصفوفة في الذاكرة وقد يكون أي رقم حسب احتياجك‬
‫• )‪ (Type‬ھو نوع المصفوفة التي سوف نعرفھا قد تكون حرفية أو رقمية ‪.‬لو عرفنا مصفوفة من نوع‬
‫)‪ (integer‬جميع عناصرھا تكون )‪ (integer‬وال يجوز تخزين أحرف في داخلھا‬

‫مثال‪:‬تعريف مصفوفة من نوع )‪ (integer‬حجمھا خمسة واسمھا )‪.(first_array‬‬

‫ھيكلية‬
‫‪int‬‬ ‫;]‪first_array [5‬‬

‫لنفرض أن تخزين أول عنصر في المصفوفة بدء بموقع )‪ (18126‬ويكون شكل مواقع الذاكرة ھكذا‬

‫مواقع خاليا الذاكرة‬


‫مواقع عناصر المصفوفة‬ ‫الموقع‬ ‫محتواه‬
‫‪18125‬‬ ‫‪data‬‬
‫]‪first_array [0‬‬ ‫‪18126‬‬
‫]‪first_array [1‬‬ ‫‪18127‬‬
‫]‪first_array [2‬‬ ‫‪18128‬‬
‫ھذه المواقع محجوزة‬
‫]‪first_array [3‬‬ ‫‪18129‬‬
‫للمصفوفة‬
‫]‪first_array [4‬‬ ‫‪18130‬‬
‫‪first_array‬‬
‫‪18131‬‬ ‫‪data‬‬

‫‪Step By step to Learn C or C++‬‬ ‫‪By:Hussien Ahmmed Taleb‬‬ ‫‪115‬‬


‫مھم‬

‫لو تالحظ أن أول عنصر للمصفوفة وھو )]‪ (first_array [0‬يحجز الموقع )‪ (18126‬وتخزن فيه قيمة أول عنصر‬
‫ويليه بقية العناصر بالتتالي أي )]‪ (first_array [1‬يحجز الموقع )‪ (18127‬وبالتتالي‪....‬؟‬
‫** عنونة عناصر المصفوفة تبدأ من الصفر كما تالحظ أول موقع بالمصفوفة ھو )]‪(first_array [0‬‬

‫ھيكلية‬
‫]‪first_array [index‬‬
‫)‪ (index‬ھو عنوان الموقع الذي نريد أن نصل إلى محتوياته في داخل المصفوفة لنعدل عليھا أو نطبعھا‪.‬‬

‫• مثال أردنا وضع )‪ (79‬بثالث موقع في المصفوفة نكتب ھكذا‬

‫كود‬
‫;‪first_array [2]=79‬‬
‫لو تالحظ أن )‪ (index=2‬وليس )‪ (٣‬ألنه كما قلنا تسلسل عناصر المصفوفة يبدأ من الصفر وليس من الواحد أي‬
‫لو كان لدينا مصفوفة حجمھا خمسة عناصر فتسلسل )‪ (index‬يكون من الصفر إلى األربعة‪ .‬لذالك بعد أن وضعنا‬
‫رقم )‪ (79‬بالموقع الثالث يصبح شكل المصفوفة في مواقع الذاكرة ھكذا‬

‫مواقع خاليا الذاكرة‬


‫مواقع عناصر المصفوفة‬ ‫الموقع‬ ‫محتواه‬ ‫محتويات‬
‫‪18125‬‬ ‫‪data‬‬ ‫الموقع‬
‫]‪first_array [0‬‬ ‫الثالث‬
‫‪18126‬‬
‫ھذه المواقع محجوزة‬ ‫]‪first_array [1‬‬ ‫‪18127‬‬
‫للمصفوفة‬ ‫]‪first_array [2‬‬ ‫‪18128‬‬ ‫‪79‬‬
‫‪first_array‬‬ ‫]‪first_array [3‬‬ ‫‪18129‬‬
‫]‪first_array [4‬‬ ‫‪18130‬‬
‫‪18131‬‬ ‫‪data‬‬

‫• لو أردنا إدخال قيمة )‪ (٩٠‬في الموقع الرابع في المصفوفة فيكون الكود‬

‫كود‬
‫;‪first_array [3]=90‬‬
‫• لو أردنا طباعة محتويات الموقع الثالث‬
‫‪C++‬‬ ‫الكود بلغة‬ ‫‪C‬‬ ‫الكود بلغة‬
‫;]‪cout<< first_array [2‬‬ ‫;)]‪Printf("%d", first_array [2‬‬
‫لو أردنا تعريف مصفوفة من نوع ‪ float‬نفس طريقة مصفوفة السابقة وكذالك بقية األنواع تعرف بنفس الطريقة‬

‫ھيكلية‬
‫‪float‬‬ ‫;]‪first_array [5‬‬

‫‪Step By step to Learn C or C++‬‬ ‫‪By:Hussien Ahmmed Taleb‬‬ ‫‪116‬‬


‫نستطيع أعطاء عناصر المصفوفة قيم معينة كقيم أولية وقت التعريف عن المصفوفة ھكذا‬

‫كود‬
‫‪int‬‬ ‫;}‪first_array [5]={34,26,43,23,54‬‬
‫فيكون شكل المصفوفة في مقطع الذاكرة وھي مخزن فيھا العناصر ھكذا‬

‫مواقع خاليا الذاكرة‬


‫مواقع عناصر المصفوفة‬ ‫الموقع‬ ‫محتواه‬
‫‪18125‬‬ ‫‪data‬‬
‫]‪first_array [0‬‬ ‫‪18126‬‬ ‫‪34‬‬
‫ھذه المواقع محجوزة‬ ‫]‪first_array [1‬‬ ‫‪18127‬‬ ‫‪26‬‬
‫للمصفوفة ‪first_array‬‬ ‫]‪first_array [2‬‬ ‫‪18128‬‬ ‫‪43‬‬
‫ومحتوياتھا‬ ‫]‪first_array [3‬‬ ‫‪18129‬‬ ‫‪23‬‬
‫]‪first_array [4‬‬ ‫‪18130‬‬ ‫‪54‬‬
‫‪18131‬‬ ‫‪data‬‬

‫إي أن العنصر األول في المصفوفة تكون قيمته )‪ (first_array [0]=34‬وبقية المواقع بالتسلسل كما في الشكل ‪.‬‬

‫مثال‪ :‬برنامج ندخل مصفوفة أحادية األبعاد مكونة من ستة عناصر من شاشة التنفيذ ونطبعھا‪.‬؟‬

‫‪c++‬‬ ‫البرمجة بلغة‬ ‫‪c‬‬ ‫البرمجة بلغة‬


‫>‪#include<iostream.h‬‬ ‫>‪#include<stdio.h‬‬
‫)(‪main‬‬ ‫)(‪main‬‬
‫;]‪{ 1.int i,first_arry[6‬‬ ‫;]‪{1. int i,first_arry[6‬‬
‫)‪2.for (i=0;i<6;i++‬‬ ‫)‪2.for (i=0;i<6;i++‬‬
‫; ]‪3.cin>> first_arry[i‬‬ ‫; )]‪3.scanf("%d",& first_arry[i‬‬
‫;"‪4.cout<<"the Content of array is .\n‬‬ ‫;)"‪4.prinC("the Content of array is .\n‬‬
‫)‪5.for (i=0;i<6;i++‬‬ ‫)‪5.for (i=0;i<6;i++‬‬
‫};"‪6.cout<< first_arry[i]<<"\t‬‬ ‫};)]‪6.prinC("%d\t", first_arry[i‬‬
‫توضيح الخطوات‪:‬‬

‫‪.١‬خطوة رقم )‪ (١‬تم تعريف متغير للعداد وتم تعريف مصفوفة أرقام حجمھا ستة‬

‫‪.٢‬خطوة رقم )‪ (٢‬ھوا عداد يعد من صفر إلى خمسة وكل عدة يتم طلب في خطوة )‪ (٣‬إدخال عنصر جديد من‬
‫المصفوفة كما ھوا مبين في الشكل ‪ ،‬عندما يكون )‪ (i=0‬فان )]‪ (first_arry[i‬معناه )]‪ (first_arry[0‬أي يطلب من‬
‫المستخدم إدخال العنصر األول ويستمر بطلب اإلدخال إلى أخر عنصر وھو )‪) (i=5‬كما ھو بالشكل باألسفل(‬

‫‪Step By step to Learn C or C++‬‬ ‫‪By:Hussien Ahmmed Taleb‬‬ ‫‪117‬‬


‫‪.٣‬خطوة رقم )‪ (٣‬ھناك طريقتين للقراءة أم ضغط مفتاح )‪ (enter‬وإدخال عنصر جديد من عناصر المصفوفة أو‬
‫ضغط المسطرة وإدخال عنصر جديد ‪ .‬خطوة رقم )‪ (٤‬ھي رسالة تقول انه سوف يتم طباعة محتويات المصفوفة‬

‫‪.٥‬خطوة رقم )‪ (٦‬عداد يعد من صفر إلى الخمسة ليطبع جميع عناصر المصفوفة في الخطوة رقم )‪ .(٦‬أي عندما‬
‫يعد العداد رقم صفر ستنفذ خطوة رقم )‪ (٦‬طابعة )]‪ (first_arry[0‬تم عندما يعد العداد رقم واحد ستنفذ خطوة رقم‬
‫)‪ (٦‬طابعة )]‪ (first_arry[1‬تم عندما يعد العداد رقم اثنان ستنفذ خطوة رقم )‪ (٦‬طابعة )]‪ (first_arry[2‬ويستمر‬
‫بطباعة جميع عناصر المصفوفة من محتويات أول موقع إلى محتويات أخر موقع ‪.‬‬

‫وتكون شاشة التنفيذ ھكذا‬

‫مھم‬

‫لو غيرنا عداد خطوة رقم)‪ (٥‬وجعلناه يتناقص من خمسة إلى الصفر سوف يطبع أوال )]‪ (first_arry[5‬ثم‬
‫)]‪ (first_arry[4‬ويستمر إلى الصفر طابعا المصفوفة بالمقلوب )من أخر عنصر إلى أول عنصر(‬

‫أي يصبح عداد خطوة رقم )‪ (٥‬ھكذا‬

‫كود‬
‫)‪5.for (i=5;i>=0;i--‬‬

‫ستكون شاشة التنفيذ بعد اإلدخال ھكذا‬

‫مھم‬

‫أبدال بين قيم موقعين‪ :‬إلبدال بين قيمة موقعين في المصفوفة نحتاج إلى متغير ثالث من نفس نوع المصفوفة حتى‬
‫نخزن ب ِه نتيجة احد الموقعين ثم نبدل الن في حال عدم وجود متغير ثالث ال نستطيع اإلبدال وستضيع احد القيمتين‬

‫كود اإلبدال بين قيمة المتغير )]‪ ( first_arry[5‬والمتغير )]‪( first_arry[2‬‬


‫ھوا المتغير المؤقت الذي سنخزن به احد قيم الموقعين‪int item; //‬‬
‫;]‪Item= first_arry[5‬‬
‫;]‪first_arry[5]= first_arry[2‬‬
‫;‪first_arry[2]=item‬‬

‫‪Step By step to Learn C or C++‬‬ ‫‪By:Hussien Ahmmed Taleb‬‬ ‫‪118‬‬


‫مثال‪:‬برنامج ندخل مصفوفة أحادية األبعاد مكونة من خمسة عناصر ونجمعھا ‪.‬؟‬

‫تحليل ‪:‬خطوات اإلدخال ھي اعتيادية وتقريبا ثابتة في المصفوفات فمصفوفة حجمھا خمسة نحتاج عداد يعد من‬
‫الصفر إلى األربعة ثم بعد اإلدخال نجمع جميع عناصر المصفوفة مع بعضھا‬

‫‪c++‬‬ ‫البرمجة بلغة‬ ‫‪c‬‬ ‫البرمجة بلغة‬


‫>‪#include<iostream.h‬‬ ‫>‪#include<stdio.h‬‬
‫)(‪main‬‬ ‫)(‪main‬‬
‫;‪{ 1.int i,array1[5],sum=0‬‬ ‫;‪{ 1.int i,array1[5],sum=0‬‬
‫)‪2.for (i=0;i<5;i++‬‬ ‫)‪2.for (i=0;i<5;i++‬‬
‫; ]‪3.cin>> array1[i‬‬ ‫;) ]‪3.scanf("%d",& array1[i‬‬
‫)‪4.for (i=0;i<5;i++‬‬ ‫)‪4.for (i=0;i<5;i++‬‬
‫;]‪5.sum=sum+array1[i‬‬ ‫;]‪5.sum=sum+array1[i‬‬
‫};‪6.cout<< "sum of array item="<<sum‬‬ ‫};)‪6.prinC( "sum of array item=%d",sum‬‬

‫توضيح الخطوات‪:‬‬

‫‪.١‬خطوة رقم )‪ (١‬تم تعريف متغير للعداد وتم تعريف مصفوفة أرقام حجمھا خمسة ومتغير للجمع وأعطيناه صفر‬
‫كقيمة ابتدائية كما قلنا سابقا يجب تصفير المتغير الجمع قبل الجمع‬
‫‪.٢‬خطوة رقم)‪ ٢‬و‪ (٣‬إدخال المصفوفة كما تالحظ العداد يعد من الصفر إلى األربعة الن حجم المصفوفة خمسة‬
‫‪.٣‬خطوة رقم )‪ (٤‬عداد يمر على عناصر المصفوفة عنصر عنصر لكي يجمعھا مع بعضھا أي عندما يكون قيمة‬
‫العداد ھي )‪ (i=0‬سيجمع )]‪ (sum=sum+array1[0‬ويستمر بالجمع مع القيم السابقة كما ھي ھذا الشكل‬
‫ھذا الشكل ھو تتبع للعمليات التي تحدث في خطوة رقم )‪ (٤‬وخطوة رقم )‪(٥‬‬
‫توضيح عملية جمع في المصفوفة إذا فرضنا عناصر المدخلة ھي )‪ (11,43,23,56,45‬كما في شاشة التنفيذ‬
‫‪When i=0‬‬
‫;]‪sum=sum+array1[0‬‬ ‫‪ sum=0+11 sum=11‬‬
‫‪When i=1‬‬
‫;]‪sum=sum+array1[1‬‬ ‫‪ sum=11+43 sum=54‬‬
‫‪When i=2‬‬
‫;]‪sum=sum+array1[2‬‬ ‫‪ sum=54+23 sum=77‬‬
‫‪When i=3‬‬
‫;]‪sum=sum+array1[3‬‬ ‫‪ sum=77+56 sum=133‬‬
‫‪When i=4‬‬
‫;]‪sum=sum+array1[4‬‬ ‫‪ sum=133+45 sum= 178‬‬

‫لو تالحظ كيف يجمع نتائج الجمع السابقة مع العناصر الجديدة‪!.....‬‬


‫‪.٤‬خطوة رقم )‪ (٦‬يطبع نتيجة الجمع‬

‫‪Step By step to Learn C or C++‬‬ ‫‪By:Hussien Ahmmed Taleb‬‬ ‫‪119‬‬


‫مثال‪:‬برنامج ندخل مصفوفة أحادية األبعاد مكونة من سبعة عناصر جد اكبر رقم‪.‬؟‬

‫تحليل ‪:‬خطوات اإلدخال ھي اعتيادية وتقريبا ثابتة في المصفوفات فمصفوفة حجمھا سبعة نحتاج عداد يعد من الصفر‬
‫إلى ستة‪ .‬ثم بعد اإلدخال نجد اكبر رقم بين عناصر المصفوفة كيف‪.‬؟ نسند قيمة أول عنصر في المصفوفة لمتغير‬
‫وثم نقارن قيمة ھذا المتغير مع بقية العناصر أي عنصر في المصفوفة نجد أن قيمته اكبر من قيمة متغيرنا نبدل قيمة‬
‫متغيرنا بقيمة عنصر المصفوفة ونستمر حتى النھاية وكل ما وجد متغيرنا قيمة أعلى منه أخذھا وإذا اقل منه التھمه‬
‫ويستمر إلى النھاية ويكون في التالي حامال أعلى قيمة‪.‬‬

‫‪c++‬‬ ‫البرمجة بلغة‬ ‫‪c‬‬ ‫البرمجة بلغة‬


‫>‪#include<iostream.h‬‬ ‫>‪#include<stdio.h‬‬
‫)(‪main‬‬ ‫)(‪main‬‬
‫;‪{ 1.int i,array1[7],max‬‬ ‫;‪{ 1.int i,array1[7],max‬‬
‫)‪2.for (i=0;i<7;i++‬‬ ‫)‪2.for (i=0;i<7;i++‬‬
‫; ]‪3.cin>> array1[i‬‬ ‫; )]‪3.scanf("%d",& array1[i‬‬
‫;]‪4.max=array1[0‬‬ ‫;]‪4.max=array1[0‬‬
‫)‪5.for (i=0;i<7;i++‬‬ ‫)‪5.for (i=0;i<7;i++‬‬
‫) ‪6.if (array1[i] > max‬‬ ‫) ‪6.if (array1[i] > max‬‬
‫;]‪7.max=array1[i‬‬ ‫;]‪7.max=array1[i‬‬
‫};‪8.cout<< "max number in array1 is="<<max‬‬ ‫};)‪8.prinC( "max number in array1 is=%d",max‬‬
‫وھذا توضيح لما سيحصل في خطوات رقم )‪ ٥‬و‪٦‬و‪(٧‬‬

‫جعلت الخطوات التي تنفذ ذو لون عميق والتي ال تنفذ ذات لون رفيع‬

‫توضيح ) ‪ ٥‬و‪٦‬و‪ (٧‬إذا فرضنا العناصر المدخلة ھي )‪ (11,32,22,32,43,31,23‬كما في شاشة التنفيذ‬


‫‪4. max=array1[0];  max=11‬‬
‫‪5.When i=0‬‬
‫ھذه الخطوة ال تحقق الشرط الن قيمة المتغير )‪ ( max=11‬ليست اصغر من ) ‪6. ( array1[0]=11‬‬
‫ال تنفذ ھذه الخطوة إذا لم يتحقق الشرط في خطوة )‪7. (٦‬‬
‫‪5.When i=1‬‬
‫ھذه الخطوة تحقق الشرط الن قيمة المتغير )‪ ( max=11‬اصغر من ) ‪6. ( array1[1]=32‬‬
‫اخذ المتغير قيمة جديدة اكبر منه لتصبح قيمته ‪7.max =array1[1]  max=32 //٣٢‬‬
‫‪5.When i=2‬‬
‫ھذه الخطوة ال تحقق الشرط الن قيمة المتغير )‪ ( max=32‬ليست اصغر من ) ‪6. ( array1[2]=22‬‬
‫ال تنفذ ھذه الخطوة إذا لم يتحقق الشرط في خطوة )‪7. (٦‬‬
‫‪5.When i=3‬‬
‫ھذه الخطوة ال تحقق الشرط الن قيمة المتغير )‪ ( max=32‬ليست اصغر من ) ‪6. ( array1[3]=32‬‬
‫ال تنفذ ھذه الخطوة إذا لم يتحقق الشرط في خطوة )‪7. (٦‬‬
‫‪5.When i=4‬‬
‫ھذه الخطوة تحقق الشرط الن قيمة المتغير )‪ ( max=32‬اصغر من )‪6. ( array1[4]=43‬‬
‫اخذ المتغير قيمة جديدة اكبر منه لتصبح قيمته ‪7.max =array1[4]  max=43 //٤٣‬‬
‫‪5.When i=5‬‬
‫ھذه الخطوة ال تحقق الشرط الن قيمة المتغير )‪ ( max=43‬ليست اصغر من ) ‪6. ( array1[5]=31‬‬
‫ال تنفذ ھذه الخطوة إذا لم يتحقق الشرط في خطوة )‪7. (٦‬‬
‫‪5.When i=6‬‬
‫ھذه الخطوة ال تحقق الشرط الن قيمة المتغير )‪ ( max=43‬ليست اصغر من ) ‪6. ( array1[6]=23‬‬
‫ال تنفذ ھذه الخطوة إذا لم يتحقق الشرط في خطوة )‪7. (٦‬‬

‫‪Step By step to Learn C or C++‬‬ ‫‪By:Hussien Ahmmed Taleb‬‬ ‫‪120‬‬


‫توضيح الخطوات‪:‬‬

‫‪.١‬خطوة رقم )‪ (١‬تم تعريف متغير للعداد وتم تعريف مصفوفة أرقام حجمھا سبعة ومتغير لخزن اكبر رقم وخطوة‬
‫رقم )‪ ٢‬و‪ ( ٣‬ھي إدخال للمصفوفة‬

‫‪.٢‬خطوة رقم )‪ (٤‬سندنا قيمة أول موقع إلى متغير )‪ (max‬حتى نقارنه مع بقية المواقع حتى أي قيمة تكون اكبر منه‬
‫في المقارنة نبدلھا بقيمة )‪ (max‬حتى نحصل على اكبر قيمة‪.‬‬

‫‪.٣‬خطوة رقم )‪(٥‬عداد يمر على جميع عناصر المصفوفة لكي نقارن في خطوة رقم )‪ (٦‬عناصر المصفوفة بقيمة‬
‫المتغير ومتى ما كان احد عناصر المصفوفة قيمته اكبر نبدل قيمة )‪ (max‬في خطوة رقم )‪ (٧‬بالقيمة األكبر منه‬

‫لو تالحظ أن قيمة الموقع الخامس ھي اكبر قيمة من بين القيم )شاھد التوضيح وكيفية تغير قيمة )‪(max‬‬

‫]‪Array1[0] Array1[1] Array1[2] Array1[3] Array1[4] Array1[5] Array1[6‬‬ ‫تغير قيمة‬


‫المتغير‬
‫‪11‬‬ ‫‪32‬‬ ‫‪22‬‬ ‫‪32‬‬ ‫‪43‬‬ ‫‪31‬‬ ‫‪23‬‬ ‫)‪ (max‬عند‬
‫مقارنته‬
‫‪Max=11‬‬ ‫‪Max=32‬‬ ‫‪Max=32‬‬ ‫‪Max=32‬‬ ‫‪Max=43‬‬ ‫‪Max=43‬‬ ‫‪Max=43‬‬
‫*‬

‫‪.٤‬خطوة رقم )‪ (٨‬يطبع اكبر رقم‬

‫مھم‬

‫لو أردنا إيجاد اصغر رقم في المصفوفة فقط نبدل الشرط في الخطوة رقم )‪ (٦‬إلى اصغر ھكذا‬

‫كود‬
‫) ‪6.if (array1[i] < max‬‬
‫وطريقة التتبع ھنا كلما يجد رقم في المصفوفة اصغر من قيمة المتغير يسند المتغير للقيمة األصغر‬

‫مھم‬

‫لو أردنا ضرب كل عنصر من عناصر المصفوفة في )‪(٢‬‬

‫كود‬
‫;]‪array1[i]=2* array1[i‬‬
‫كأنما نقول قيمة العنصر الجديد تساوي قيمته القديمة مضروبة في )‪(٢‬‬

‫‪Step By step to Learn C or C++‬‬ ‫‪By:Hussien Ahmmed Taleb‬‬ ‫‪121‬‬


‫وكذالك بقية العمليات الرياضية تعامل نفس الطريقة كالقسمة‪ .‬مثال نقسم كل عنصر على ‪٤‬‬

‫كود‬
‫;‪array1[i]= array1[i] /4‬‬
‫وال توضع فقط ھذه الجملة وحدھا يجب وضع قبلھا عداد يمر على جميع عناصر المصفوفة لكي يقسم جميع العناصر‬
‫عنصر عنصر لو تالحظ خطوة رقم )‪ (٢‬وخطوة رقم )‪ (٣‬في المثال التالي‪.‬‬

‫مثال‪ :‬مصفوفة من خمسة عناصر إضافة قيمة خمسة لكل عنصر في المصفوفة‬

‫‪c++‬‬ ‫البرمجة بلغة‬ ‫‪c‬‬ ‫البرمجة بلغة‬


‫>‪#include<iostream.h‬‬ ‫>‪#include<stdio.h‬‬
‫)(‪main‬‬ ‫)(‪main‬‬
‫;}‪{ 1.int i,array1[5]={10,15,30,32,21‬‬ ‫;}‪{ 1.int i,array1[5]={10,15,30,32,21‬‬
‫)‪2.for (i=0;i<5;i++‬‬ ‫)‪2.for (i=0;i<5;i++‬‬
‫;‪{3. array1[i]= array1[i]+5‬‬ ‫;‪{3. array1[i]= array1[i]+5‬‬
‫};"‪4.cout<< array1[i]<<"\t‬‬ ‫};) ]‪4.prinC("%d\t", array1[i‬‬
‫}‬ ‫}‬

‫توضيح الخطوات‪:‬‬

‫‪.١‬خطوة رقم )‪ (٣‬نضيف فيھا قيمة خمسة لكل عنصر من عناصر المصفوفة‬

‫لو كان قيمة العداد ھي )‪ (i=3‬فيكون تنفيذ الخطوة رقم )‪ (٣‬ھكذا‬


‫‪array1[3]= array1[3]+5;  array1[3]=32+5  array1[3]=37‬‬

‫‪.٢‬وضعنا خطوة رقم )‪ (٤‬داخل قوس العبارة التكرارية حتى يطبع مباشرة قيمة كل موقع بعد اإلضافة ‪.‬‬

‫‪Step By step to Learn C or C++‬‬ ‫‪By:Hussien Ahmmed Taleb‬‬ ‫‪122‬‬


‫ترتيب عناصر المصفوفات‪:‬‬
‫ترتيب األرقام أو األحرف تصاعديا أو تنازليا يكون بمقارنة كل عنصر من عناصر المصفوفة مع العناصر الذي تليه‬
‫في المصفوفة فعلى سبيل المثال إذا أردنا ترتيب العناصر تصاعديا فنقارن كل عنصر في المصفوفة بالعناصر الذي‬
‫تليه فإذا وجدنا رقم اقل من قيمة العنصر نبدل بين العنصريين )مثال إذا كان ‪ (array[0]=50,array[3]=2‬فعند‬
‫البدء المقارنة نجد القيمة في الموقع الرابع من المصفوفة ھو )‪ (٢‬وفي الموقع األول ھو )‪ (٥٠‬وقيمة الموقع الرابع‬
‫اقل لذالك سنبدل قيمة الموقع الرابع بقيمة الموقع األول ونقارن بقية المواقع بقيمة الموقع األول الجديدة وھو أصبح‬
‫)‪ (٥٠‬ونستمر باإلبدال إلى أن نصل في المقارنة إلى أخر رقم بالمصفوفة ثم نأخذ ثاني عنصر بالمصفوفة ونقارنه‬
‫ببقية العناصر ثم الثالث إلى إن نصل إلى أخر عنصر نجد المصفوفة مرتبة وشاھد ھذه خطوات تفصيلية للترتيب‬

‫لنفرض أن لدينا مصفوفة من خمسة عناصر ونريد ترتيبھا تصاعديا وكانت القيم المخزنة بالمصفوفة كما في الشكل‬
‫]‪array[0‬‬ ‫]‪array[1‬‬ ‫]‪array[2‬‬ ‫]‪array[3‬‬ ‫]‪array[4‬‬ ‫مھم‬
‫‪45‬‬ ‫‪42‬‬ ‫‪85‬‬ ‫‪6‬‬ ‫‪64‬‬
‫عند الترتيب التصاعدي نضع الرقم االقل الى االمام واالعلى الى الخلف في المقارنة والتنازلي بالعكس‬

‫للترتيب كما قلنا نقارن كل موقع بجميع المواقع التي تليه ھكذا‪..‬؟‬

‫‪.١‬مقارنة الموقع األول ببقية المواقع التي تليه‪:‬‬

‫‪.١‬مقارنة من الموقع األول مع الموقع الثاني‬


‫]‪array[0‬‬ ‫]‪array[1‬‬ ‫]‪array[2‬‬ ‫]‪array[3‬‬ ‫]‪array[4‬‬
‫‪45‬‬ ‫‪42‬‬ ‫‪85‬‬ ‫‪6‬‬ ‫‪64‬‬
‫وجدنا إن قيمة الموقع الثاني اقل من قيمة الموقع األول لذالك سنبدل بينھما‬

‫‪.٢‬مقارنة الموقع األول بالموقع الثالث‬


‫]‪array[0‬‬ ‫]‪array[1‬‬ ‫]‪array[2‬‬ ‫]‪array[3‬‬ ‫]‪array[4‬‬
‫‪42‬‬ ‫‪45‬‬ ‫‪85‬‬ ‫‪6‬‬ ‫‪64‬‬
‫وجدنا إن قيمة الموقع الثالث أعلى من قيمة الموقع األول لذالك ال نبدل بينھا‬

‫‪.٣‬مقارنة الموقع األول بالموقع الرابع‬


‫]‪array[0‬‬ ‫]‪array[1‬‬ ‫]‪array[2‬‬ ‫]‪array[3‬‬ ‫]‪array[4‬‬
‫‪42‬‬ ‫‪45‬‬ ‫‪85‬‬ ‫‪6‬‬ ‫‪64‬‬
‫وجدنا أن قيمة الموقع الرابع اقل من قيمة الموقع األول لذالك سنبدل بينھما‬

‫‪.٤‬مقارنة الموقع األول بالموقع الخامس‬


‫]‪array[0‬‬ ‫]‪array[1‬‬ ‫]‪array[2‬‬ ‫]‪array[3‬‬ ‫]‪array[4‬‬
‫‪6‬‬ ‫‪45‬‬ ‫‪85‬‬ ‫‪42‬‬ ‫‪64‬‬
‫وجدنا أن قيمة الموقع الخامس أعلى من قيمة الموقع األول لذالك ال نبدل بينھما‬

‫‪Step By step to Learn C or C++‬‬ ‫‪By:Hussien Ahmmed Taleb‬‬ ‫‪123‬‬


‫‪.٢‬مقارنة الموقع الثاني ببقية المواقع التي تليه‪:‬‬

‫‪.١‬مقارنة بين الموقع الثاني مع الموقع الثالث‬


‫]‪array[0‬‬ ‫]‪array[1‬‬ ‫]‪array[2‬‬ ‫]‪array[3‬‬ ‫]‪array[4‬‬
‫‪6‬‬ ‫‪45‬‬ ‫‪85‬‬ ‫‪42‬‬ ‫‪64‬‬
‫وجدنا أن قيمة الموقع الثالث أعلى من الثاني لذالك سوف ال يبدل بينھما‪.‬‬

‫‪.٢‬مقارنة الموقع الثاني مع الموقع الرابع‬


‫]‪array[0‬‬ ‫]‪array[1‬‬ ‫]‪array[2‬‬ ‫]‪array[3‬‬ ‫]‪array[4‬‬
‫‪6‬‬ ‫‪45‬‬ ‫‪85‬‬ ‫‪42‬‬ ‫‪64‬‬
‫وجدنا أن قيمة الموقع الرابع اقل من الموقع الثاني لذالك سنبدل بينھا‬

‫‪.٣‬مقارنة الموقع الثاني بالموقع الخامس‬


‫]‪array[0‬‬ ‫]‪array[1‬‬ ‫]‪array[2‬‬ ‫]‪array[3‬‬ ‫]‪array[4‬‬
‫‪6‬‬ ‫‪42‬‬ ‫‪85‬‬ ‫‪45‬‬ ‫‪64‬‬
‫وجدنا أن قيمة الموقع الخامس أعلى من قيمة الموقع الثاني لذالك سوف ال يبدل بينھما‬

‫‪.٣‬مقارنة الموقع الثالث ببقية المواقع التي تليه‪:‬‬

‫‪.١‬مقارنة الموقع الثالث بالموقع الرابع‬


‫]‪array[0‬‬ ‫]‪array[1‬‬ ‫]‪array[2‬‬ ‫]‪array[3‬‬ ‫]‪array[4‬‬
‫‪6‬‬ ‫‪42‬‬ ‫‪85‬‬ ‫‪45‬‬ ‫‪64‬‬
‫وجدنا قيمة الموقع الرابع اقل من قيمة الموقع الثالث لذالك سنبدل بينھما‬

‫‪.٢‬مقارنة الموقع الثالث بالموقع الخامس‬


‫]‪array[0‬‬ ‫]‪array[1‬‬ ‫]‪array[2‬‬ ‫]‪array[3‬‬ ‫]‪array[4‬‬
‫‪6‬‬ ‫‪42‬‬ ‫‪45‬‬ ‫‪85‬‬ ‫‪64‬‬
‫لذالك سنبدل بينھما‬ ‫وجنا قيمة الموقع الخامس اقل من قيمة الموقع الرابع‬

‫‪.٣‬مقارنة الموقع الرابع ببقية المواقع التي تليه‪ :‬يقارن فقط بالموقع الخامس ألنه أخر موقع وسنجد أن قيمة‬
‫الموقع الخامس اقل من قيمة الموقع الرابع لذالك سنبدل بينھما‬
‫]‪array[0‬‬ ‫]‪array[1‬‬ ‫]‪array[2‬‬ ‫]‪array[3‬‬ ‫]‪array[4‬‬
‫‪6‬‬ ‫‪42‬‬ ‫‪45‬‬ ‫‪85‬‬ ‫‪64‬‬
‫قيمة الموقع الخامس اقل من قيمة الموقع الرابع لذال سنبدل بينھما وستصبح المصفوفة مرتبة بشكل التالي‬
‫]‪array[0‬‬ ‫]‪array[1‬‬ ‫]‪array[2‬‬ ‫]‪array[3‬‬ ‫]‪array[4‬‬
‫‪6‬‬ ‫‪42‬‬ ‫‪45‬‬ ‫‪64‬‬ ‫‪85‬‬

‫‪Step By step to Learn C or C++‬‬ ‫‪By:Hussien Ahmmed Taleb‬‬ ‫‪124‬‬


‫أالن لنحول الكالم الذي كتباه والمخططات إلى مثال‬

‫مثال‪ :‬برنامج لترتيب عناصر المصفوفة يدخلھا المستخدم تصاعديا‪..‬؟‬

‫تحليل‪:‬كيف نرتب برمجيا؟علمنا انه بالترتيب نقارن كل موقع بجميع المواقع التي تليه لذالك سنحتاج إلى عدادان‬
‫األول خاص بالمرور على كل موقع مرة واحدة وعداد داخلي يقارن كل عنصر مرة عليه العداد الخارجي بجميع‬
‫العناصر التي تليه في المصفوفة وأينما وجد رقم اقل منه يبدل بينھما‪.‬‬

‫‪c++‬‬ ‫البرمجة بلغة‬ ‫‪c‬‬ ‫البرمجة بلغة‬


‫>‪#include<iostream.h‬‬ ‫>‪#include<stdio.h‬‬
‫)(‪int main‬‬ ‫)(‪int main‬‬
‫;‪{1.int array[5],i,j‬‬ ‫;‪{1.int array[5],i,j‬‬
‫;‪2. int item=0‬‬ ‫;‪2. int item=0‬‬
‫;"‪3.cout<<"Here is the Array befor sorted enter it\n‬‬ ‫; )"‪3.prinC("Here is the Array befor sorted enter it\n‬‬
‫)‪4. for (i=0;i<5;i++‬‬ ‫)‪4. for (i=0;i<5;i++‬‬
‫; ]‪5.cin>>array[i‬‬ ‫; )]‪5.scanf("%d",&array[i‬‬
‫)‪6. for ( i=0;i<5-1;i++‬‬ ‫)‪6. for ( i=0;i<5-1;i++‬‬
‫)‪7.for ( j=i; j<5;j++‬‬ ‫)‪7.for ( j=i; j<5;j++‬‬
‫{)]‪8.if (array[j] <array[i‬‬ ‫{)]‪8.if (array[j] <array[i‬‬
‫;]‪9.item =array[j‬‬ ‫;]‪9.item =array[j‬‬
‫;]‪10.array[j]=array[i‬‬ ‫;]‪10.array[j]=array[i‬‬
‫}; ‪11. array[i]= item‬‬ ‫}; ‪11. array[i]= item‬‬
‫;"‪12.cout<<"Here is the Array a^er sorted\n‬‬ ‫;)"‪12. prinC("Here is the Array a^er sorted\n‬‬
‫)‪13.for (i=0;i<5;i++‬‬ ‫)‪13.for (i=0;i<5;i++‬‬
‫};"‪14.cout<<array[i]<<"\n‬‬ ‫};)]‪14.prinC("%d\n",array[i‬‬

‫توضيح الخطوات‪:‬‬

‫‪.١‬خطوة رقم )‪ (١‬عرفنا مصفوفة حجمھا خمسة ومتغير للعداد الخارجي )‪ (i‬ومتغير أخر للعداد الداخلي )‪(j‬‬

‫‪.٢‬خطوة رقم )‪ (٢‬عرفنا متغير لتخزين قيمة احد المتغيرين عند اإلبدال لكي ال تضيع قيمة احدھما‬

‫‪.٣‬خطوة رقم )‪ (٣‬ھي رسالة طباعيه تطلب من المستخدم إدخال المصفوفة وخطوة رقم )‪ ٤‬و ‪(٥‬قراءة المصفوفة‬

‫‪.٤‬خطوة رقم )‪ (٦‬ھوا عداد خارجي يبدأ بالعد من الصفر إلى الموقع القبل األخير لكي يرتبھم وال يعد الموقع األخير‬
‫الن الموقع األخير مرتب أصال من قبل الخطوة التي تسبقه لذالك نرى شرط التوقف في العداد ھو)‪.(i<5-1‬‬
‫أي في كل عدة لھذا العداد تتكرر الخطوات رقم )‪ ٧‬و‪٨‬و‪٩‬و‪١٠‬و‪(١١‬‬

‫‪.٥‬خطوة رقم )‪ (٧‬ھوا عداد يبدأ بالعد من قيمة العداد الخارجي إلى أربعة أي إذا عد العداد الخارجي صفر سيعد‬
‫العداد الداخلي من صفر إلى أربعة لكي يقارن الموقع األول بجميع المواقع التي تليه‪ .‬وإذا عد العداد الخارجي واحد‬
‫سيعد العداد الداخلي من واحد إلى أربعة لكي يقارن المواقع الثاني بجميع المواقع التي تليه ويستمر إلى موقع الرابع‬

‫‪.٦‬خطوة رقم )‪ (٨‬ھوا شرط أذا كان قيمة العنصر اقل من قيمة احد المواقع التي تليه يبدل بينھم في خطوة‬
‫رقم )‪ ٩‬و‪١٠‬و‪(١١‬‬

‫‪Step By step to Learn C or C++‬‬ ‫‪By:Hussien Ahmmed Taleb‬‬ ‫‪125‬‬


‫‪.٧‬خطوات رقم )‪١٢‬و‪١٣‬و‪ (١٤‬ھوا عملية طباعة للمصفوفة بعد الترتيب ھكذا‬

‫القيمة الوسطية بعد الترتيب تقع منتصف عناصر‬


‫المصفوفة وبما إن حجم مصفوفتنا خمسة فالقيمة‬
‫الوسطية ھي الموقع الثالث أي )]‪(array[2‬‬

‫مھم‬

‫لو أردنا ترتيب المصفوفة تنازليا نفس الطريقة فقط نبدل الشرط في خطوة رقم )‪ (٨‬إلى‬

‫كود‬
‫)]‪8.if (array[j] >array[i‬‬

‫مھم‬

‫لو أردنا ترتيب فقط المواقع الثالث األولى والتھمنا البقية فقط نغير شرط التوقف في خطوة رقم )‪ ٦‬و‪ (٧‬نبدل رقم‬
‫خمسة ب ثالثة ھكذا )وضعنا ثالثة عند شرط التوقف لكي يرتب فقط الموقع الثالثة األولى(‬

‫كود‬
‫)‪6. for ( i=0;i<3-1;i++‬‬
‫)‪7.for ( j=i; j<3;j++‬‬

‫مھم‬

‫لو أردنا ترتيب المواقع الزوجية في المصفوفة ترتيبا تصاعديا فقط نغير ھاتان الخطوتان‬

‫كود‬
‫)‪6. for ( i=0;i<5-1;i=i+2‬‬
‫)‪7.for ( j=i; j<5;j=j+2‬‬

‫‪Step By step to Learn C or C++‬‬ ‫‪By:Hussien Ahmmed Taleb‬‬ ‫‪126‬‬


‫مثال‪ :‬برنامج لمعرفة ھل الرقم متناظر )أي يقرأ من الجھتين( ويكون عدد األرقام خمسة مثال ‪١٢٣٢١‬‬

‫تحليل‪:‬لكي نعرف ھل الرقم متناظر ھنا في مصفوفة خماسية يجب أن يساوي محتويات الموقع األول محتويات الموقع‬
‫الخامس والثاني يساوي الرابع )المثال التالي ليس يتحقق فقط من تناظر األرقام بل الحروف أيضا(‬

‫‪c++‬‬ ‫البرمجة بلغة‬ ‫‪c‬‬ ‫البرمجة بلغة‬


‫>‪#include<iostream.h‬‬ ‫>‪#include<stdio.h‬‬
‫>‪#include<conio.h‬‬ ‫>‪#include<conio.h‬‬
‫)(‪main‬‬ ‫)(‪main‬‬
‫;]‪{1.int i, bol=0, a[5‬‬ ‫;]‪{1.int i, bol=0, a[5‬‬
‫)‪2.for(i=0;i<5;i++‬‬ ‫)‪2.for(i=0;i<5;i++‬‬
‫;)(‪3.a[i]=getche‬‬ ‫;)(‪3.a[i]=getche‬‬
‫)‪4.for(i=0;i<5;i++‬‬ ‫)‪4.for(i=0;i<5;i++‬‬
‫)]‪5.if(a[i]!= a[5-i-1‬‬ ‫)]‪5.if(a[i]!= a[5-i-1‬‬
‫;‪6.bol=1‬‬ ‫;‪6.bol=1‬‬
‫)‪7. if(bol==0‬‬ ‫)‪7. if(bol==0‬‬
‫;"‪8. cout<<"\nthe data is symmetric‬‬ ‫;)"‪8. prinC("\nthe data is symmetric‬‬
‫‪9.else‬‬ ‫‪9.else‬‬
‫};"‪10.cout<<"\nthe data is no symmetric‬‬ ‫};)"‪10.prinC("\nthe data is no symmetric‬‬

‫توضيح الخطوات‪:‬‬

‫‪.١‬خطوة رقم )‪ (٣‬ھي دالة إلدخال حرف وليس رقم ورغم أنھما ستدخل بشكل حرف ومداخالتنا قد تكون أرقام فال‬
‫يھم ففي المقارنة فبدال ما يقارن الرقم )‪ (١‬يقارن االسكي كود له أي )‪ (٥٠‬فال يضر لكن للجمالية استخدمنا ھذه الدالة‬

‫‪.٢‬خطوة رقم )‪ (٥‬يقارن العناصر األول باألخر والثاني بالقبل األخير وھكذا ماداما متساويين يكون المتغير )‪(bol=0‬‬
‫فإذا كانا غير متساويين ويتحقق شرط خطوة رقم )‪ (٥‬وينفذ خطوة )‪ (٦‬ستتحول قيمته إلى واحد‬

‫‪.٣‬خطوة رقم )‪ (٧‬يتحقق من قيمة المتغير )‪ (bol‬إذا بقت ثابتة حسب تعريفھا طبع رسالة إن الرقم متناظر وإذا‬
‫تغيرت إلى واحد يطبع رسالة أن الرقم غير متناظر‬

‫‪Step By step to Learn C or C++‬‬ ‫‪By:Hussien Ahmmed Taleb‬‬ ‫‪127‬‬


‫مثال‪ :‬مصفوفة حجمھا )‪ (٥‬اسمھا )‪ (a‬ضع العناصر الزوجية لھا في مصفوفة )‪ (b‬واألعداد الفردية في )‪(c‬‬

‫تحليل‪ :‬الموضوع بسيط جدا ليدك ثالث مصفوفات نفس الحجم أو باألحرى نفس حجم المصفوفة )‪ (a‬ألنھا قد تكون‬
‫جميع اإلعداد فردية أو زوجية‪.‬وبعد أن ندخل المصفوفة )‪ (a‬نكون شرط إذا كان عددھا فردي نضعه في )‪ (c‬وإذا‬
‫كلن زوجي نضعھا في )‪ (b‬ولكل مصفوفة عداد خاص بھا‪.‬‬

‫‪c++‬‬ ‫البرمجة بلغة‬ ‫‪c‬‬ ‫البرمجة بلغة‬


‫>‪#include<iostream.h‬‬ ‫>‪#include<stdio.h‬‬
‫)(‪main‬‬ ‫)(‪main‬‬
‫;]‪{1.int count_a, count_b=0, count_c=0,a[5],b[5], c[5‬‬ ‫;]‪{1.int count_a, count_b=0, count_c=0,a[5],b[5], c[5‬‬
‫)‪2.for( count_a=0; count_a<5; count_a++‬‬ ‫)‪2.for( count_a=0; count_a<5; count_a++‬‬
‫;]‪3.cin>>a[ count_a‬‬ ‫;)]‪3.scanf("%d",&a[ count_a‬‬
‫)‪4.for( count_a=0; count_a<5; count_a++‬‬ ‫)‪4.for( count_a=0; count_a<5; count_a++‬‬
‫)‪5.if ( a[ count_a] %2==0‬‬ ‫)‪5.if ( a[ count_a] %2==0‬‬
‫;]‪{6.b[ count_b ]=a[count_a‬‬ ‫;]‪{6.b[ count_b ]=a[count_a‬‬
‫};‪7.count_b= count_b+1‬‬ ‫};‪7.count_b= count_b+1‬‬
‫‪8.else‬‬ ‫‪8.else‬‬
‫;]‪{9.c[ count_c ]=a[count_a‬‬ ‫;]‪{9.c[ count_c ]=a[count_a‬‬
‫};‪10.count_c= count_c+1‬‬ ‫};‪10.count_c= count_c+1‬‬
‫;"‪11.cout<<"items in array b is\n‬‬ ‫;)"‪11.prinC("items in array b is\n‬‬
‫)‪12.for( count_a=0; count_a< count_b; count_a++‬‬ ‫)‪12.for( count_a=0; count_a< count_b; count_a++‬‬
‫;"‪13.cout<< b[ count_a ]<<"\t‬‬ ‫;)] ‪13.prinC("%d\t", b[ count_a‬‬
‫;"‪14.cout<<"\nitems in array c is\n‬‬ ‫;)"‪14. prinC("\nitems in array c is\n‬‬
‫)‪15.for( count_a=0; count_a< count_c; count_a++‬‬ ‫)‪15.for( count_a=0; count_a< count_c; count_a++‬‬
‫};"‪16.cout<< c[ count_a ]<<"\t‬‬ ‫};)] ‪16. prinC("%d\t", c[ count_a‬‬

‫توضيح الخطوات‪:‬‬

‫‪.١‬خطوة رقم )‪ (١‬عرفنا عداد للمصفوفة )‪ (a‬وھو )‪ (count_a‬و عداد للمصفوفة )‪ (b‬وھو )‪ (count_b‬و عداد‬
‫للمصفوفة )‪ (c‬وھو )‪ (count_c‬وعرفنا المصفوفات بنفس األحجام‬

‫‪.٢‬خطوة رقم )‪٢‬و‪ (٣‬ھي قراءة للمصفوفة )‪ (a‬من شاشة التنفيذ‬

‫‪.٣‬خطوة رقم )‪ (٤‬ھوا عداد الختبار عناصر المصفوفة )‪ (a‬تتبعه الخطوات رقم )‪ (5—11‬كلھا داخله التكرار‬

‫‪.٤‬خطوة رقم )‪ (٥‬ھوا شرط التحقق إذا كان رقم المصفوفة زوجية سيوضع في مصفوفة )‪ (b‬في خطوة رقم )‪(٦‬‬
‫ونزود عداد ھذه المصفوفة في خطوة رقم )‪) (٧‬لكل مصفوفة عدادھا لكي نميز بينھم باإلضافة حتى تكون اإلضافة‬
‫صحيحة(‬

‫‪ .٥‬خطوة رقم )‪ (٨‬ھوا شرط التحقق إذا لم يكون رقم المصفوفة زوجي سيوضع في مصفوفة )‪ (c‬في خطوة رقم‬
‫)‪ (9‬ونزيد عداد ھذه المصفوفة في خطوة رقم )‪) (10‬لكل مصفوفة عدادھا لكي نميز بينھم باإلضافة حتى تكون‬
‫اإلضافة صحيحة(‬

‫‪Step By step to Learn C or C++‬‬ ‫‪By:Hussien Ahmmed Taleb‬‬ ‫‪128‬‬


‫مھم‬

‫‪.٦‬خطوة رقم )‪ (١٢‬ھو عداد يبدأ بالصفر وينتھي بأقل من عداد المصفوفة )‪ (b‬لكي نطبع فقط المواقع التي تحتوي‬
‫على عناصر في ھذه المصفوفة والنطبع المواقع الفارغة اعتمادا على عدادھا الذي يزداد بعد كل إضافة في خطوة‬
‫رقم )‪(7‬‬

‫‪ .٧‬خطوة رقم )‪ (١٥‬ھو عداد يبدأ بالصفر وينتھي بأقل من عداد المصفوفة )‪ (c‬لكي نطبع فقط المواقع التي تحتوي‬
‫على عناصر في ھذه المصفوفة والنطبع المواقع الفارغة اعتمادا على عدادھا الذي يزداد بعد كل إضافة في خطوة‬
‫رقم )‪(١٠‬‬

‫ھذا ما سيظھر في شاشة التنفيذ‬

‫مھم‬

‫من أالن فصاعدا متى ما قال لك قسم عناصر مصفوفة إلى مصفوفتين استخدم نفس ھذا األسلوب فقط الشرط في‬
‫خطوة رقم خمسة يتغير أو تغير أخر بسيط لكن تبقى الھيكلية تقريبا نفسھا‪!........‬‬

‫‪Step By step to Learn C or C++‬‬ ‫‪By:Hussien Ahmmed Taleb‬‬ ‫‪129‬‬


‫المصفوفات ثنائية األبعاد‪:‬‬
‫ال تختلف المصفوفات الثنائية كثيرا عن المصفوفة أحادية اإلبعاد ‪.‬تختلف فقط في العنونة فبدال من )‪ (index‬واحد‬
‫نستخدم اثنان واحد للصفوف وأخر لألعمدة )مثال مصفوفة )‪ (3*2‬أي مكونة من ثالث صفوف وعموديين(‬
‫شكل مصفوفة )‪(3*2‬‬ ‫عمود ‪0‬‬ ‫عمود ‪1‬‬
‫صف ‪0‬‬ ‫)‪(0,0‬‬ ‫)‪(0,1‬‬
‫صف ‪1‬‬ ‫)‪(1,0‬‬ ‫)‪(1,1‬‬ ‫مھم‬
‫صف ‪2‬‬ ‫)‪(2,0‬‬ ‫)‪(2,1‬‬

‫العنونة تكون )رقم العمود ‪،‬رقم الصف( وان العنونة األعمدة والصفوف تبدأ من الصفر وليس من الواحد أي لو أردنا‬
‫الوصول إلى عنصر في الصف الثاني العمود األول تكون عنونه )‪.(1,0‬‬
‫والمصفوفة الثنائية أيضا مجموعة خاليا متتالية في الذاكرة تحجز لغرض خزن معلومات معينة في داخلھا كأن نخزن‬
‫في داخلھا أرقام أو أحرف وتبقى ھذه القيم مخزنة داخل المصفوفة حتى نغلق البرنامج إذا لم نغيرھا داخل البرنامج‪.‬‬
‫المصفوفات الثنائية‪ :‬يجب اإلعالن عن عدد المواقع التي نحتاجھا في العمل في بداية البرنامج حتى يحجزھا المترجم‬
‫للمصفوفة وال يخزن قيم أخرى داخل ھذه المواقع تبقى محجوزة فقط لعناصر المصفوفة ويكون اإلعالن عليھا ھكذا‬
‫ھيكلية‬
‫]‪Trype of array arrrayname[row,columns‬‬

‫• )‪ (arrrayname‬ھوا اسم المصفوفة التي سنتعامل معه في البرنامج أي اسم ممكن‬


‫• )‪ (row‬ھو عدد صفوف المصفوفة ‪ (columns) ،‬ھو عدد األعمدة ألننا نتعامل مع مصفوفة ثنائية اإلبعاد‬
‫• )‪ (array of Trype‬ھو نوع المصفوفة التي سوف نعرفھا قد تكون حرفية أو رقمية ‪.‬لو عرفنا مصفوفة‬
‫من نوع )‪ (integer‬جميع عناصرھا تكون )‪ (integer‬وال يجوز تخزين أحرف في داخلھا‬

‫مثال‪:‬تعريف مصفوفة من نوع )‪ (integer‬حجمھا )‪ (3*2‬واسمھا )‪.(first_array‬‬

‫ھيكلية‬
‫‪int‬‬ ‫;]‪first_array [3][2‬‬

‫لنرسم المصفوفة ھذه ذات حجم ثالث صفوف وعمودان‬

‫شكل مصفوفة )‪(3*2‬‬ ‫عمود ‪0‬‬ ‫عمود ‪1‬‬


‫صف ‪0‬‬ ‫]‪first_array [0][0‬‬ ‫]‪first_array [0][1‬‬
‫صف ‪1‬‬ ‫]‪first_array [1][0‬‬ ‫]‪first_array [1][1‬‬
‫صف ‪2‬‬ ‫]‪first_array [2][0‬‬ ‫]‪first_array [2][1‬‬
‫مھم‬

‫كما تالحظ في العنونة كيف تكون‪ :‬عمود رقم )‪ (0‬وھو العمود األول وعمود رقم )‪ (1‬وھو العمود الثاني‬
‫وصف رقم )‪ (0‬وھو الصف األول و صف رقم )‪ (1‬وھو الصف الثاني و صف رقم )‪ (2‬وھو الصف الثالث‪.‬‬

‫‪Step By step to Learn C or C++‬‬ ‫‪By:Hussien Ahmmed Taleb‬‬ ‫‪130‬‬


‫وتخزين ھذه العناصر في الذاكرة يكون نفس طريقة تخزين المصفوفة األحادية لكن ھنا يخزن صف وبعده صف أخر‬
‫بالتسلسل إلى أن تنتھي الصفوف‪.‬‬

‫لنفرض أن تخزين أول عنصر في المصفوفة بدء بموقع )‪ (18126‬ويكون شكل مواقع الذاكرة ھكذا‬
‫مواقع خاليا الذاكرة‬
‫مواقع عناصر المصفوفة‬ ‫الموقع‬ ‫محتواه‬
‫‪18125‬‬ ‫‪data‬‬
‫]‪first_array [0][0‬‬ ‫‪18126‬‬
‫]‪first_array [0][1‬‬ ‫‪18127‬‬
‫]‪first_array [1][0‬‬ ‫‪18128‬‬
‫ھذه المواقع محجوزة‬ ‫]‪first_array [1][1‬‬ ‫‪18129‬‬
‫للمصفوفة‬ ‫]‪first_array [2][0‬‬ ‫‪18130‬‬
‫‪first_array‬‬ ‫]‪first_array [2][1‬‬ ‫‪18131‬‬
‫‪18132‬‬ ‫‪data‬‬
‫مھم‬

‫لو تالحظ أن أول عنصر للمصفوفة وھو )]‪ (first_array [0][0‬يحجز الموقع )‪ (18126‬وتخزن فيه قيمة أول عنصر‬
‫ويليه بقية العناصر بالتتالي أي )]‪ (first_array [0][1‬يحجز الموقع )‪ (18127‬وبالتتالي‪....‬؟‬

‫عنونة عناصر المصفوفة تبدأ من الصفر للصف والعمود كما تالحظ أول موقع بالمصفوفة ھو )]‪(first_array [0][0‬‬

‫ھيكلية‬
‫]‪first_array [index_row][index_columns‬‬

‫• )‪ (index_row‬ھو عنوان الصف الذي نريد أن نصل إليه ويمثل دائما بالمتغير )‪.(i‬‬
‫• )‪ (index_columns‬ھو عنوان العمود الذي نريد أن نصل إليه ويمثل دائما بالمتغير )‪.(j‬‬

‫مثال‪:‬لو أردنا وضع )‪ (79‬في المصفوفة في الصف الثاني العمود األول نكتب ھكذا‬

‫ھيكلية‬
‫;‪first_array [1][0]=79‬‬
‫لو تالحظ أن )‪ (index_row=1‬وليس )‪ (2‬ألنه كما قلنا تسلسل صفوف المصفوفة تبدأ من الصفر وليس من الواحد‬
‫أي الصف الثاني في الحقيقة ھوا صف رقم واحد في البرمجة والحظ المخطط في الصفحة السابقة‬

‫لو تالحظ أن )‪ (index_columns=0‬وليس )‪ (1‬ألنه كما قلنا تسلسل صفوف المصفوفة تبدأ من الصفر وليس من‬
‫الواحد أي العمود األول في الحقيقة ھوا عمود رقم صفر في البرمجة والحظ المخطط في الصفحة السابقة‬

‫‪Step By step to Learn C or C++‬‬ ‫‪By:Hussien Ahmmed Taleb‬‬ ‫‪131‬‬


‫لذالك بعد أن وضعنا رقم )‪ (79‬بالموقع الثالث يصبح شكل المصفوفة في مواقع الذاكرة ھكذا‬

‫مواقع خاليا الذاكرة‬


‫مواقع عناصر المصفوفة‬ ‫الموقع‬ ‫محتواه‬
‫‪18125‬‬ ‫‪data‬‬ ‫محتويات‬
‫الموقع بعد‬
‫]‪first_array [0][0‬‬ ‫‪18126‬‬ ‫اإلضافة‬
‫]‪first_array [0][1‬‬ ‫‪18127‬‬
‫]‪first_array [1][0‬‬ ‫‪18128‬‬ ‫‪79‬‬
‫ھذه المواقع محجوزة‬ ‫]‪first_array [1][1‬‬ ‫‪18129‬‬
‫للمصفوفة‬ ‫]‪first_array [2][0‬‬ ‫‪18130‬‬
‫‪first_array‬‬ ‫]‪first_array [2][1‬‬ ‫‪18131‬‬
‫‪18132‬‬ ‫‪data‬‬

‫لو أردنا طباعة محتويات الصف الثالث العمود الثاني‬


‫‪C++‬‬ ‫الكود بلغة‬
‫;]‪Cout<< first_array [2][1‬‬

‫‪C‬‬ ‫الكود بلغة‬


‫;)]‪Printf("%d", first_array [2][1‬‬

‫لو أردنا تعريف مصفوفة من نوع ‪ float‬نفس طريقة مصفوفة السابقة وكذالك بقية األنواع‬

‫ھيكلية‬
‫‪float‬‬ ‫;]‪first_array [5][3‬‬
‫نستطيع أعطاء عناصر المصفوفة قيم وقت التعريف ھكذا‬

‫ھيكلية‬
‫‪int‬‬ ‫;} }‪first_array [2][2]={{34,26},{43,23‬‬
‫فيكون شكل المصفوفة في مقطع الذاكرة وھي مخزن فيھا العناصر ھكذا‬

‫مواقع خاليا الذاكرة‬ ‫إعطاء قيم لعناصر‬


‫مواقع عناصر المصفوفة‬ ‫الموقع‬ ‫محتواه‬ ‫المصفوفة وقت التعريف‬
‫ھذه المواقع‬ ‫‪18125‬‬ ‫‪data‬‬ ‫يكون بوضع عناصر كل‬
‫محجوزة للمصفوفة‬ ‫]‪first_array [0][0‬‬ ‫‪18126‬‬ ‫‪34‬‬ ‫صف بين قوسين ووضع‬
‫‪first_array‬‬ ‫]‪first_array [0][1‬‬ ‫‪18127‬‬ ‫‪26‬‬ ‫فارزة بين كل صفيين‬
‫ومحتوياتھا‬ ‫]‪first_array [1][0‬‬ ‫‪18128‬‬ ‫‪43‬‬
‫]‪first_array [1][1‬‬ ‫‪18129‬‬ ‫‪23‬‬

‫‪Step By step to Learn C or C++‬‬ ‫‪By:Hussien Ahmmed Taleb‬‬ ‫‪132‬‬


‫مھم‬

‫لو أردنا وضع رقم معين في جميع مواقع عناصر المصفوفة وقت التعريف نكتب ھكذا‬
‫مثال إذا أردنا وضع رقم صفر في جميع مواقع مصفوفة حجمھا )‪(٢*٢‬‬
‫ھيكلية‬
‫‪int‬‬ ‫;} ‪first_array [2][2]={0‬‬

‫مھم‬

‫تعريف وإدخال المصفوفة الثنائية‪:‬ھذه الخطوات ثابتة في تعريف وإدخال أي مصفوفة ثنائية ال تتغير ابد‬
‫مثال‪ :‬مصفوفة حجمھا )‪ (4*3‬تعريفھا وإدخالھا‬

‫الكود بالغة ‪C++‬‬ ‫الكود بالغة ‪C‬‬


‫;]‪1.int first_arry[4][3‬‬ ‫;]‪1.int first_arry[4][3‬‬
‫)‪2.for (i=0;i<4;i++‬‬ ‫)‪2.for (i=0;i<4;i++‬‬
‫)‪3.for (j=0;j<3;j++‬‬ ‫)‪3.for (j=0;j<3;j++‬‬
‫; ]‪4.cin>> first_arry[i][j‬‬ ‫; )]‪4.scanf("%d",& first_arry[i][j‬‬

‫الذي يتغير بين سؤال وأخر فقط المكتوب بخط عريض ‪.‬‬
‫‪.١‬في خطوة رقم )‪ (١‬عرفنا نوع المصفوفة ممكن أن يتبدل نوعھا حسب الطلب وحجمھا حسب السؤال قال في‬
‫السؤال )‪ (4*3‬فكونا مصفوفة عدد صفوفھا أربعة وعدد األعمدة ثالثة‬
‫‪.٢‬خطوة رقم )‪ (٢‬فقط شرط عدد الصفوف يتبدل ھنا أربع صفوف كتبنا اصغر من أربعة وإذا خمسة نكتب اصغر‬
‫من خمسة وكذالك بقية األرقام‬
‫‪.٣‬خطوة رقم )‪ (٢‬فقط شرط عدد األعمدة يتبدل ھنا ثالث أعمدة كتبنا اصغر من ثالثة وإذا أربعة نكتب اصغر من‬
‫أربعة وكذالك بقية األرقام‬
‫‪.٤‬خطوة اإلدخال أيضا تبقى ثابتة يدخل صف صف بالتسلسل‬
‫مھم‬

‫لحل أي سؤال يتعلق بالمصفوفات الثنائية نرسمھا أوال قبل الحل فلو جاء على سبيل المثال في السؤال مصفوفة‬
‫حجمھا )‪ (5*5‬نرسم ھذه المصفوفة أوال ھكذا‬
‫القطر الرئيسي‬
‫)‪(0,0‬‬ ‫)‪(0,1‬‬ ‫)‪(0,2‬‬ ‫)‪(0,3‬‬ ‫)‪(0,4‬‬
‫)‪(1,0‬‬ ‫)‪(1,1‬‬ ‫)‪(1,2‬‬ ‫)‪(1,3‬‬ ‫)‪(1,4‬‬
‫)‪(2,0‬‬ ‫)‪(2,1‬‬ ‫)‪(2,2‬‬ ‫)‪(2,3‬‬ ‫)‪(2,4‬‬
‫)‪(3,0‬‬ ‫)‪(3,1‬‬ ‫)‪(3,2‬‬ ‫)‪(3,3‬‬ ‫)‪(3,4‬‬
‫)‪(4,0‬‬ ‫)‪(4,1‬‬ ‫)‪(4,2‬‬ ‫)‪(4,3‬‬ ‫)‪(4,4‬‬

‫أالن نستطيع حل جميع األسئلة عن المصفوفة ھذه فعلى سبيل المثال لو قال جد عناصر القطر الرئيسي وھو الذي‬
‫نحن واضعون خط عليه وھو منصف المصفوفة ما الذي يمكننا من تميزه عن غيره من الصفوف ؟؟‬
‫الذي يميز عناصر القطر الرئيسي عن غيره من العناصر في المصفوفة ھو قيمة الصف تساوي قيمة العمود الحظ‬
‫القيم ) )‪ (0,0),(1,1),(2,2),(3,3) ,(4,4‬فيكون الشرط ھو ثابت في كل مصفوفة نريد إيجاد قطر الرئيسي‪.‬‬

‫‪Step By step to Learn C or C++‬‬ ‫‪By:Hussien Ahmmed Taleb‬‬ ‫‪133‬‬


‫البرمجة‬
‫)‪If(i==j‬‬
‫ھنا نقوم بطباعة العناصر المصفوفة في قطر الرئيسي ‪// print the diagonal‬‬
‫قيمة )‪ (i‬ھي عنوان الصف وقيمة )‪ (j‬ھي عنوان العمود‬

‫** الحصول على عناصر القطر الثانوي‬

‫)‪(0,0‬‬ ‫)‪(0,1‬‬ ‫)‪(0,2‬‬ ‫)‪(0,3‬‬ ‫)‪(0,4‬‬


‫)‪(1,0‬‬ ‫)‪(1,1‬‬ ‫)‪(1,2‬‬ ‫)‪(1,3‬‬ ‫)‪(1,4‬‬
‫)‪(2,0‬‬ ‫)‪(2,1‬‬ ‫)‪(2,2‬‬ ‫)‪(2,3‬‬ ‫)‪(2,4‬‬
‫)‪(3,0‬‬ ‫)‪(3,1‬‬ ‫)‪(3,2‬‬ ‫)‪(3,3‬‬ ‫)‪(3,4‬‬
‫)‪(4,0‬‬ ‫)‪(4,1‬‬ ‫)‪(4,2‬‬ ‫)‪(4,3‬‬ ‫)‪(4,4‬‬
‫القطر الثانوي‬

‫الذي يميز عناصر القطر الثانوي عن غيرھا من العناصر في المصفوفة أن قيمة الصف عند جمعھا بقيمة العمود‬
‫تساوي أربعة الحظ )‪ (4+0=4),(3+1=4),(2+2=3),(1+3=4),(0+4=4‬فعال حاصل جمع رقم الصف مع رقم‬
‫العمود في القطر الثانوي يساوي أربعة لكن يختلف من مصفوفة إلى أخرى ھذه القيمة الجمع حسب إبعاد المصفوفة‬
‫أنت ارسم المصفوفة حسب حجمھا وستجد العالقة كما وجدناھا نحن أالن ‪.‬فيكون الشرط ھكذا وھو غير ثابتة قيمة‬
‫األربعة‬

‫البرمجة‬
‫)‪If(i+j=4‬‬

‫العناصر‬
‫**الحصول على العناصر فوق القطر الرئيسي‬
‫فوق القطر‬
‫الرئيسي‬ ‫)‪(0,0‬‬ ‫)‪(0,1‬‬ ‫)‪(0,2‬‬ ‫)‪(0,3‬‬ ‫)‪(0,4‬‬
‫)‪(1,0‬‬ ‫)‪(1,1‬‬ ‫)‪(1,2‬‬ ‫)‪(1,3‬‬ ‫)‪(1,4‬‬
‫)‪(2,0‬‬ ‫)‪(2,1‬‬ ‫)‪(2,2‬‬ ‫)‪(2,3‬‬ ‫)‪(2,4‬‬
‫)‪(3,0‬‬ ‫)‪(3,1‬‬ ‫)‪(3,2‬‬ ‫)‪(3,3‬‬ ‫)‪(3,4‬‬
‫)‪(4,0‬‬ ‫)‪(4,1‬‬ ‫)‪(4,2‬‬ ‫)‪(4,3‬‬ ‫)‪(4,4‬‬

‫الذي يميز عناصر فوق القطر الرئيسي عن غيرھا من العناصر في المصفوفة أن قيمة العمود اكبر من قيمة الصف‬
‫الحظ التالي ))‪ (0,1),(0,2),(0,3),(0,4),(1,2),(1,3),(1,4),(3,4‬فعال قيم األعمدة جميعھا أعلى من قيم‬
‫المصفوفة في القطر الثانوي فيكون الشرط ھكذا وھو ثابت‬

‫البرمجة‬
‫)‪If(i<j‬‬

‫‪Step By step to Learn C or C++‬‬ ‫‪By:Hussien Ahmmed Taleb‬‬ ‫‪134‬‬


‫العناصر‬
‫**الحصول على العناصر تحت القطر الرئيسي‬
‫تحت القطر‬
‫الرئيسي‬ ‫)‪(0,0‬‬ ‫)‪(0,1‬‬ ‫)‪(0,2‬‬ ‫)‪(0,3‬‬ ‫)‪(0,4‬‬
‫)‪(1,0‬‬ ‫)‪(1,1‬‬ ‫)‪(1,2‬‬ ‫)‪(1,3‬‬ ‫)‪(1,4‬‬
‫)‪(2,0‬‬ ‫)‪(2,1‬‬ ‫)‪(2,2‬‬ ‫)‪(2,3‬‬ ‫)‪(2,4‬‬
‫)‪(3,0‬‬ ‫)‪(3,1‬‬ ‫)‪(3,2‬‬ ‫)‪(3,3‬‬ ‫)‪(3,4‬‬
‫)‪(4,0‬‬ ‫)‪(4,1‬‬ ‫)‪(4,2‬‬ ‫)‪(4,3‬‬ ‫)‪(4,4‬‬

‫الذي يميز عناصر تحت القطر الرئيسي عن غيرھا من العناصر في المصفوفة أن قيمة كل العمود اقل من قيمة كل‬
‫الصف الحظ التالي ))‪ (1,0),(2,0),(3,0),(4,0),(2,1),(3,1),(4,1),(4,3‬فعال قيم األعمدة جميعھا أعلى من قيم‬
‫المصفوفة في القطر الثانوي فيكون الشرط ھكذا وھو ثابت‬

‫البرمجة‬
‫)‪If(i>j‬‬

‫العناصر‬
‫**الحصول على العناصر فوق القطر الثانوي‬
‫فوق القطر‬
‫الثانوي‬ ‫)‪(0,0‬‬ ‫)‪(0,1‬‬ ‫)‪(0,2‬‬ ‫)‪(0,3‬‬ ‫)‪(0,4‬‬
‫)‪(1,0‬‬ ‫)‪(1,1‬‬ ‫)‪(1,2‬‬ ‫)‪(1,3‬‬ ‫)‪(1,4‬‬
‫)‪(2,0‬‬ ‫)‪(2,1‬‬ ‫)‪(2,2‬‬ ‫)‪(2,3‬‬ ‫)‪(2,4‬‬
‫)‪(3,0‬‬ ‫)‪(3,1‬‬ ‫)‪(3,2‬‬ ‫)‪(3,3‬‬ ‫)‪(3,4‬‬
‫)‪(4,0‬‬ ‫)‪(4,1‬‬ ‫)‪(4,2‬‬ ‫)‪(4,3‬‬ ‫)‪(4,4‬‬

‫الذي يميز عناصر فوق القطر الثانوي عن غيرھا من العناصر في المصفوفة أن قيمة العمود عند جمعھا مع قيمة‬
‫الصف ال يتجاوز ناتج الجمع ثالثة بينما بقية العناصر تتجاوز ثالثة الحظ التالي‬
‫))‪ . (0,0),(0,1),(0,2),(0,3),(1,0),(1,1),(1,2),(2,0),(2,1),(3,0‬فيكون الشرط ھكذا وھو غير ثابت من‬
‫مصفوفة إلى أخرى حسب حجمھا‬

‫البرمجة‬
‫)‪If(i+j<4‬‬

‫**الحصول على العناصر تحت القطر الثانوي‬

‫)‪(0,0‬‬ ‫)‪(0,1‬‬ ‫)‪(0,2‬‬ ‫)‪(0,3‬‬ ‫)‪(0,4‬‬


‫)‪(1,0‬‬ ‫)‪(1,1‬‬ ‫)‪(1,2‬‬ ‫)‪(1,3‬‬ ‫)‪(1,4‬‬
‫)‪(2,0‬‬ ‫)‪(2,1‬‬ ‫)‪(2,2‬‬ ‫)‪(2,3‬‬ ‫)‪(2,4‬‬
‫العناصر‬ ‫)‪(3,0‬‬ ‫)‪(3,1‬‬ ‫)‪(3,2‬‬ ‫)‪(3,3‬‬ ‫)‪(3,4‬‬
‫تحت القطر‬ ‫)‪(4,0‬‬ ‫)‪(4,1‬‬ ‫)‪(4,2‬‬ ‫)‪(4,3‬‬ ‫)‪(4,4‬‬
‫الثانوي‬

‫‪Step By step to Learn C or C++‬‬ ‫‪By:Hussien Ahmmed Taleb‬‬ ‫‪135‬‬


‫الذي يميز عناصر تحت القطر الثانوي عن غيرھا من العناصر في المصفوفة أن قيمة العمود عند جمعھا مع قيمة‬
‫الصف يتجاوز ناتج الجمع فوق األربعة بينما بقية العناصر ال تتجاوز األربعة الحظ التالي‬
‫))‪. (4,1),(4,2),(4,3),(4,4),(3,3),(3,3),(3,4),(2,3),(2,4),(1,4‬فيكون الشرط ھكذا وھو غير ثابت من‬
‫مصفوفة إلى أخرى حسب حجمھا‬

‫البرمجة‬
‫)‪If(i+j>4‬‬

‫**الحصول على العناصر العمود األول والرابع‬


‫عناصر‬
‫العمود األول‬
‫)‪(0,0‬‬ ‫)‪(0,1‬‬ ‫)‪(0,2‬‬ ‫)‪(0,3‬‬ ‫)‪(0,4‬‬
‫والرابع‬
‫)‪(1,0‬‬ ‫)‪(1,1‬‬ ‫)‪(1,2‬‬ ‫)‪(1,3‬‬ ‫)‪(1,4‬‬
‫)‪(2,0‬‬ ‫)‪(2,1‬‬ ‫)‪(2,2‬‬ ‫)‪(2,3‬‬ ‫)‪(2,4‬‬
‫)‪(3,0‬‬ ‫)‪(3,1‬‬ ‫)‪(3,2‬‬ ‫)‪(3,3‬‬ ‫)‪(3,4‬‬
‫)‪(4,0‬‬ ‫)‪(4,1‬‬ ‫)‪(4,2‬‬ ‫)‪(4,3‬‬ ‫)‪(4,4‬‬

‫ما يميز عناصر العمود األول عن غيره من األعمدة أن قيمة )‪ (j=0‬ما يميز عناصر العمود الرابع عن غيره من‬
‫األعمدة أن قيمة)‪ (j=3‬فشرط الحصول عليھما وھو ثابت‬

‫البرمجة‬
‫))‪If((j==0)||(j==3‬‬

‫الحصول على عناصر الصف األول و الثالث والرابع‬


‫عناصر‬
‫الصف األول‬ ‫)‪(0,0‬‬ ‫)‪(0,1‬‬ ‫)‪(0,2‬‬ ‫)‪(0,3‬‬ ‫)‪(0,4‬‬
‫والثالث‬ ‫)‪(1,0‬‬ ‫)‪(1,1‬‬ ‫)‪(1,2‬‬ ‫)‪(1,3‬‬ ‫)‪(1,4‬‬
‫والرابع‬ ‫)‪(2,0‬‬ ‫)‪(2,1‬‬ ‫)‪(2,2‬‬ ‫)‪(2,3‬‬ ‫)‪(2,4‬‬
‫)‪(3,0‬‬ ‫)‪(3,1‬‬ ‫)‪(3,2‬‬ ‫)‪(3,3‬‬ ‫)‪(3,4‬‬
‫)‪(4,0‬‬ ‫)‪(4,1‬‬ ‫)‪(4,2‬‬ ‫)‪(4,3‬‬ ‫)‪(4,4‬‬

‫ما يميز عناصر الصف األول عن غيره من الصفوف أن قيمة )‪ (i=0‬وما يميز عناصر الصف الثالث عن غيره من‬
‫الصفوف أن قيمة )‪ (i=2‬و ما يميز عناصر الصف الرابع عن غيره من الصفوف أن قيمة )‪ (i=3‬فشرط الحصول‬
‫عليھما وھو ثابت‬

‫البرمجة‬
‫))‪If((i==0)||(i==2) ||(i==3‬‬

‫‪Step By step to Learn C or C++‬‬ ‫‪By:Hussien Ahmmed Taleb‬‬ ‫‪136‬‬


‫مثال‪ :‬مصفوفة مربعة )‪ (5*5‬أطبع فقط عناصر القطر الرئيسي ؟‬

‫تحليل ‪:‬نعلم أن شرط الحصول على عناصر القطر الرئيسي في أي مصفوفة ھو ثابت وھو )‪ (i==j‬وللكثير من‬
‫المعلومات راجع المخطط السابق عن الحصول على القطر الرئيسي‬

‫‪c++‬‬ ‫البرمجة بلغة‬ ‫‪c‬‬ ‫البرمجة بلغة‬


‫>‪#include<iostream.h‬‬ ‫>‪#include<stdio.h‬‬
‫)(‪main‬‬ ‫)(‪main‬‬
‫;‪{1.int i‬‬ ‫; ‪{1.int i‬‬
‫;‪2.int j‬‬ ‫;‪2.int j‬‬
‫;]‪3.int a[5][5‬‬ ‫;]‪3.int a[5][5‬‬
‫)‪4.for(i=0;i<5;i++‬‬ ‫)‪4.for(i=0;i<5;i++‬‬
‫)‪5.for(j=0;j<5;j++‬‬ ‫)‪5.for(j=0;j<5;j++‬‬
‫;]‪6.cin>>a[i][j‬‬ ‫;)]‪6.scanf("%d",&a[i][j‬‬
‫)‪7.for(i=0;i<5;i++‬‬ ‫)‪7.for(i=0;i<5;i++‬‬
‫)‪8.for(j=0;j<5;j++‬‬ ‫)‪8.for(j=0;j<5;j++‬‬
‫)‪9.if(i==j‬‬ ‫)‪9.if(i==j‬‬
‫};"‪10.cout<<a[i][j]<<"\n‬‬ ‫};)]‪10.prinC("%d \n ",a[i][j‬‬

‫توضيح الخطوات‪:‬‬

‫‪.١‬خطوة رقم )‪ ٣‬و‪٤‬و‪٥‬و‪ (٦‬ھي تعريف وإدخال المصفوفة وھي ثابتة في كل برنامج ندخل فيه مصفوفة حسب حجم‬
‫المصفوفة فقط تتغير قيم توقف العدادان كما قلنا سابقا‬

‫‪.٢‬خطوة رقم)‪ ٧‬و ‪ (٨‬عدادان يمران على جميع عناصر المصفوفة بالتسلسل صف صف لكي نتحقق من الشرط فأي‬
‫رقم يقع في القطر الرئيسي سيكون عندھا قيمة العدادان )‪ (i==j‬لذالك سيحقق الشرط في الخطوة رقم )‪ (٩‬ويطبع‬
‫الرقم في الخطوة رقم )‪(١٠‬‬

‫كما في الشكل‬

‫معلومة‬

‫*جميع األمثلة التي حليناھا في المصفوفات األحادية نستطيع استخدامھا في المصفوفات الثنائية فقط نبدل البعد الواحد‬
‫إلى بعدين والعداد إلى عدادين‬

‫*لو أردنا ضرب جميع عناصر المصفوفة برقم معين مثال )‪ (٢‬نضرب ھكذا‬

‫البرمجة‬
‫;]‪a[i][j]=2*a[i][j‬‬
‫وكذالك بقية العمليات جمع عنصر مع كل عناصر المصفوفة أو ضربه‬

‫ال تنسى أن تضع عداد للصفوف وعداد ألعمدة المصفوفة قبل ھذه الخطوة ليضر عنصر عنصر‬

‫‪Step By step to Learn C or C++‬‬ ‫‪By:Hussien Ahmmed Taleb‬‬ ‫‪137‬‬


‫مثال‪ :‬مصفوفة مربعة )‪ (5*5‬اجمع العناصر فوق القطر الرئيسي وجمع العناصر تحته وجمع العناصر فوق القطر‬
‫الثانوي وتحته كل على حدة‬

‫تحليل‪:‬ارجع إلى خطوات التحليل السابقة وستفھم الشروط المراد إيجادھا وطريقة تحليلھا ورسم المصفوفة ‪.‬‬

‫‪c++‬‬ ‫البرمجة بلغة‬ ‫‪c‬‬ ‫البرمجة بلغة‬


‫>‪#include<iostream.h‬‬ ‫>‪#include<stdio.h‬‬
‫)(‪main‬‬ ‫)(‪main‬‬
‫;‪{1.int i,j,sum,sum1,sum2,sum3‬‬ ‫;‪{i1.int i,j,sum,sum1,sum2,sum3‬‬
‫;‪2.sum=sum1=sum2=sum3=0‬‬ ‫;‪2.sum=sum1=sum2=sum3=0‬‬
‫;]‪3.int a[5][5‬‬ ‫;]‪3.int a[5][5‬‬
‫)‪4.for(i=0;i<5;i++‬‬ ‫)‪4.for(i=0;i<5;i++‬‬
‫)‪5.for(j=0;j<5;j++‬‬ ‫)‪5.for(j=0;j<5;j++‬‬
‫;]‪6.cin>>a[i][j‬‬ ‫;)]‪6.scanf("%d",&a[i][j‬‬
‫)‪7.for(i=0;i<5;i++‬‬ ‫)‪7.for(i=0;i<5;i++‬‬
‫{ )‪8.for(j=0;j<5;j++‬‬ ‫{ )‪8.for(j=0;j<5;j++‬‬
‫)‪9.if(i<j‬‬ ‫)‪9.if(i<j‬‬
‫;]‪10.sum+=a[i][j‬‬ ‫;]‪10.sum+=a[i][j‬‬
‫)‪11.if(i>j‬‬ ‫)‪11.if(i>j‬‬
‫;]‪12.sum1+=a[i][j‬‬ ‫;]‪12.sum1+=a[i][j‬‬
‫)‪13. if((i+j)<4‬‬ ‫)‪13. if((i+j)<4‬‬
‫;]‪14sum2+=a[i][j‬‬ ‫;]‪14sum2+=a[i][j‬‬
‫)‪15if((i+j)>4‬‬ ‫)‪15if((i+j)>4‬‬
‫};]‪16.sum3+=a[i][j‬‬ ‫};]‪16.sum3+=a[i][j‬‬
‫;‪17.cout<<"\n sum above secondary diagonal= "<<sum2‬‬ ‫;)‪17.printf("\n sum above secondary diagonal= %d ",sum2‬‬
‫;‪18.cout<<"\n sum above main diagonal= "<<sum‬‬ ‫;)‪18. printf("\n sum above main diagonal=%d ",sum‬‬
‫;‪19.cout<<"\n sum under main diagonal= "<<sum1‬‬ ‫;)‪19.printf("\n sum under main diagonal= %d ",sum1‬‬
‫};‪20.cout<<"\n sum under secondary diagonal= "<<sum3‬‬ ‫};)‪20.printf("\n sum under secondary diagonal=%d ",sum3‬‬

‫توضيح الخطوات‪:‬‬

‫‪.١‬خطوة رقم )‪ ٣‬و‪٤‬و‪٥‬و‪ (٦‬ھي تعريف وإدخال المصفوفة وھي ثابتة في كل برنامج ندخل فيه مصفوفة حسب الحجم‬

‫‪.٢‬خطوة رقم)‪ ٧‬و‪( ٨‬عدادان يمران على جميع عناصر المصفوفة بالتسلسل صف صف لكي نتحقق من الشروط‬

‫‪.٣‬خطوة رقم )‪ (٩‬ھو شرط لجمع العناصر فوق القطر الرئيسي أي أذا جاء أي عنصر ضمن عناصر فوق القطر‬
‫الرئيسي سينفذ الخطوة رقم )‪ (١٠‬لكي يجمعه ببقية عناصر فوق القطر الرئيسي‬

‫‪.٤‬خطوة رقم )‪ (١١‬ھو شرط لجمع العناصر تحت القطر الرئيسي أي إذا جاء أي عنصر ضمن عناصر تحت القطر‬
‫الرئيسي سينفذ الخطوة رقم )‪ (١٢‬لكي يجمعه ببقية عناصر تحت القطر الرئيسي‬

‫‪.٥‬خطوة رقم )‪ (١٣‬ھو شرط لجمع العناصر فوق القطر الثانوي أي إذا جاء أي عنصر ضمن عناصر فوق القطر‬
‫الثانوي سينفذ الخطوة رقم )‪ (١٤‬لكي يجمعه ببقية عناصر فوق القطر الثانوي‬

‫‪.٦‬خطوة رقم )‪ (١٥‬ھو شرط لجمع العناصر تحت القطر الثانوي أي إذا جاء أي عنصر ضمن عناصر تحت القطر‬
‫الثانوي سينفذ الخطوة رقم )‪ (١٦‬لكي يجمعه ببقية عناصر تحت القطر الثانوي‬

‫‪Step By step to Learn C or C++‬‬ ‫‪By:Hussien Ahmmed Taleb‬‬ ‫‪138‬‬


‫مثال‪ :‬تكوين مصفوفة)‪ (٤*٤‬كما في الشكل‬

‫تحليل‪ :‬كما قلنا سابقا نرسم المصفوفة في البداية‬

‫)‪(0,0‬‬ ‫)‪(0,1‬‬ ‫)‪(0,2‬‬ ‫)‪(0,3‬‬


‫)‪(1,0‬‬ ‫)‪(1,1‬‬ ‫)‪(1,2‬‬ ‫)‪(1,3‬‬
‫)‪(2,0‬‬ ‫)‪(2,1‬‬ ‫)‪(2,2‬‬ ‫)‪(2,3‬‬
‫)‪(3,0‬‬ ‫)‪(3,1‬‬ ‫)‪(3,2‬‬ ‫)‪(3,3‬‬

‫كما نالحظ كن الرسم أننا نريد أن نضع قيمة واحد في الصف األول والصف الرابع والعمود األول والعمود الرابع‬
‫والمواقع خالفھما نضع فيھا صفر‪.‬وان ما يميز الصف األول عن باقي الصفوف أن قيمة )‪ (i=0‬وما يميز الصف الرابع عن بقية‬
‫الصفوف أن قيمة )‪ (i=3‬وان ما يميز العمود األول عن باقي األعمدة أن قيمة )‪ (j=0‬وما يميز العمود الرابع عن بقية األعمدة أن قيمة‬
‫)‪ (j=3‬وسيكون لذالك الشرط يجمع بين ھذه الشروط األربعة كما في البرنامج‬

‫‪c++‬‬ ‫البرمجة بلغة‬ ‫‪c‬‬ ‫البرمجة بلغة‬


‫>‪#include<iostream.h‬‬ ‫>‪#include<stdio.h‬‬
‫)(‪main‬‬ ‫)(‪main‬‬
‫{‬ ‫{‬
‫;‪1.int i,j‬‬ ‫;‪1.int i,j‬‬
‫;}‪2.int a[4][4]={0‬‬ ‫;}‪2.int a[4][4]={0‬‬
‫{)‪3.for(i=0;i<4;i++‬‬ ‫{)‪3.for(i=0;i<4;i++‬‬
‫{)‪4.for(j=0;j<4;j++‬‬ ‫{)‪4.for(j=0;j<4;j++‬‬
‫))‪5.if((j==0)||(i==3)||(j==3)||(i==0‬‬ ‫))‪5.if((j==0)||(i==3)||(j==3)||(i==0‬‬
‫;‪6.a[i][j]=1‬‬ ‫;‪6.a[i][j]=1‬‬
‫};"‪7.cout<< a[i][j]<<"\t‬‬ ‫};) ]‪7.printf("%d\t", a[i][j‬‬
‫};"‪8.cout<<"\n‬‬ ‫};)"‪8. printf("\n‬‬
‫}‬ ‫}‬

‫توضيح الخطوات‪:‬‬

‫خطوة رقم )‪ (٢‬عرفنا مصفوفة حجمھا )‪ (٤*٤‬وخزنا صفر في جميع مواقعھا‬ ‫‪.١‬‬
‫خطوة رقم)‪ ٣‬و‪ (٤‬عداد يمر على جميع عناصر المصفوفة صف صف‬ ‫‪.٢‬‬
‫خطوة رقم)‪ (٥‬ھو شرط اختيار إذا كان الصف األول أو الصف الرابع أو العمود األول أو العمود الرابع‬ ‫‪.٣‬‬
‫سوف ينفذ خطوة رقم )‪ (٦‬ليضع واحد بد الصفر في الموقع‬
‫خطوة رقم )‪ (٧‬طبع محتويات المصفوفة‬ ‫‪.٤‬‬
‫خطوة رقم )‪ (٨‬وھي خطوة النزول إلى سطر جديد بعد طباعة صف كامل حتى يكون شكل المصفوفة‬ ‫‪.٥‬‬
‫المطبوعة بالشكل المطلوب ومطابقة لھيكلية المصفوفات الثنائية ولكي تتأكد من موقعھا قبل أن تغلق قوس‬
‫العبارة التكرارية الخاصة بالعداد )‪ (i‬ضعھا في كل برنامج‬

‫‪Step By step to Learn C or C++‬‬ ‫‪By:Hussien Ahmmed Taleb‬‬ ‫‪139‬‬


‫مثال‪:‬برنامج لجمع مصفوفتين حجمھما )‪(3*3‬‬
‫تحليل‪:‬لجمع مصفوفتين نجمع العنصر األول بالمصفوفة األولى مع العنصر األول في المصفوفة الثانية وكذالك البقية‬

‫مصفوفة ‪a‬‬ ‫مصفوفة ‪b‬‬ ‫مصفوفة ‪c‬‬

‫)‪(0,0‬‬ ‫)‪(0,1‬‬ ‫)‪(0,2‬‬ ‫)‪(0,0‬‬ ‫)‪(0,1‬‬ ‫)‪(0,2‬‬ ‫)‪(0,0‬‬ ‫)‪(0,1‬‬ ‫)‪(0,2‬‬


‫)‪(1,0‬‬ ‫)‪(1,1‬‬ ‫)‪(1,2‬‬ ‫)‪(1,0‬‬ ‫)‪(1,1‬‬ ‫)‪(1,2‬‬ ‫)‪(1,0‬‬ ‫)‪(1,1‬‬ ‫)‪(1,2‬‬
‫)‪(2,0‬‬ ‫)‪(2,1‬‬ ‫)‪(2,2‬‬ ‫)‪(2,0‬‬ ‫)‪(2,1‬‬ ‫)‪(2,2‬‬ ‫)‪(2,0‬‬ ‫)‪(2,1‬‬ ‫)‪(2,2‬‬

‫‪+‬‬

‫ھذا الشكل يمثل جمع الموقع األول والمواقع البقية نفس الشيء الثاني مع الثاني وبالتتابع‬

‫‪c++‬‬ ‫البرمجة بلغة‬ ‫‪c‬‬ ‫البرمجة بلغة‬


‫>‪#include<iostream.h‬‬ ‫>‪#include<stdio.h‬‬
‫)(‪main‬‬ ‫)(‪main‬‬
‫;‪{ 1.int i,j‬‬ ‫;‪{ 1.int i,j‬‬
‫;]‪2.int a[3][3‬‬ ‫;]‪2.int a[3][3‬‬
‫;]‪3.int b[3][3‬‬ ‫;]‪3.int b[3][3‬‬
‫;]‪4. int c[3][3‬‬ ‫;]‪4. int c[3][3‬‬
‫;"‪5.cout<<"enter first matrixs\n‬‬ ‫;)"‪5.printf("enter first matrixs\n‬‬
‫)‪6. for(i=0;i<3;i++‬‬ ‫)‪6. for(i=0;i<3;i++‬‬
‫)‪7.for(j=0;j<3;j++‬‬ ‫)‪7.for(j=0;j<3;j++‬‬
‫;]‪8.cin>>a[i][j‬‬ ‫;)]‪8.scanf("%d",&a[i][j‬‬
‫;"‪9. cout<<"enter second matrixs\n‬‬ ‫;)"‪9. printf("enter second matrixs\n‬‬
‫)‪10.for(i=0;i<3;i++‬‬ ‫)‪10.for(i=0;i<3;i++‬‬
‫)‪11.for(j=0;j<3;j++‬‬ ‫)‪11.for(j=0;j<3;j++‬‬
‫;]‪12. cin>>b[i][j‬‬ ‫;)]‪12. scanf("%d",&b[i][j‬‬
‫{)‪13.for(i=0;i<3;i++‬‬ ‫{)‪13.for(i=0;i<3;i++‬‬
‫{)‪14. for(j=0;j<3;j++‬‬ ‫{)‪14. for(j=0;j<3;j++‬‬
‫;]‪15.c[i][j]=a[i][j]+b[i][j‬‬ ‫;]‪15.c[i][j]=a[i][j]+b[i][j‬‬
‫};"‪16.cout<<c[i][j]<<"\t‬‬ ‫};)]‪16. printf("%d\t",c[i][j‬‬
‫}};"‪17.cout<<"\n‬‬ ‫}};)"‪17. printf("\n‬‬
‫توضيح الخطوات‪:‬‬

‫‪.١‬خطوة رقم )‪ ٦‬و‪ ٧‬و‪ (٨‬ھي عملية إدخال للمصفوفة األولى ‪.‬خطوة رقم)‪ ١٠‬و‪١١‬و‪ (١٢‬إدخال المصفوفة الثانية‬

‫‪.٢‬خطوة خطوة رقم)‪ ١٣‬و‪ (١٤‬ھوا عدادا يمر على جميع عناصر المصفوفة صف صف ليجمع في خطوة رقم)‪(١٥‬‬
‫العنصر األول في المصفوفة األولى مع العنصر األول بالمصفوفة الثانية والثاني بالثاني بالتتابع‬

‫‪.٣‬خطوة رقم )‪ (١٦‬ھو عملية طباعة لعناصر المصفوفة‬

‫عملية طرح مصفوفتين نفس الخطوات السابقة فقط نبدل خطوة )‪ (١٥‬بالتالي‬

‫البرمجة‬
‫;]‪15.c[i][j]=a[i][j]-b[i][j‬‬

‫‪Step By step to Learn C or C++‬‬ ‫‪By:Hussien Ahmmed Taleb‬‬ ‫‪140‬‬


‫مثال‪:‬برنامج لضرب مصفوفتين )‪. (3*2) *(2*4‬؟‬

‫تحليل‪:‬لضرب مصفوفتين )‪ (3*2) *(2*4‬يجب أن يكون الناتج مصفوفة بحجم )‪ (3*4‬حسب قواعد الضرب‬

‫مصفوفة ‪a‬‬ ‫مصفوفة ‪c‬‬


‫مصفوفة ‪b‬‬
‫)‪(0,0‬‬ ‫)‪(0,1‬‬ ‫)‪(0,0‬‬ ‫)‪(0,1‬‬ ‫)‪(0,2‬‬ ‫)‪(0,3‬‬ ‫)‪(0,0‬‬ ‫)‪(0,1‬‬ ‫)‪(0,2‬‬ ‫)‪(0,3‬‬
‫)‪(1,0‬‬ ‫)‪(1,1‬‬ ‫)‪(1,0‬‬ ‫)‪(1,1‬‬ ‫)‪(1,2‬‬ ‫)‪(1,3‬‬ ‫)‪(1,0‬‬ ‫)‪(1,1‬‬ ‫)‪(1,2‬‬ ‫)‪(1,3‬‬
‫)‪(2,0‬‬ ‫)‪(2,1‬‬ ‫)‪(2,0‬‬ ‫)‪(2,1‬‬ ‫)‪(2,2‬‬ ‫)‪(2,3‬‬

‫*‬
‫‪+‬‬
‫بھذا الشكل حصلنا على أول قيمة وكذالك البقية‬
‫*‬
‫‪c++‬‬ ‫البرمجة بلغة‬ ‫‪c‬‬ ‫البرمجة بلغة‬
‫>‪#include<iostream.h‬‬ ‫>‪#include<stdio.h‬‬
‫)(‪main‬‬ ‫)(‪main‬‬
‫;‪{1.int i,j,k‬‬ ‫;‪{1.int i,j,k‬‬
‫;]‪2. int a[3][2‬‬ ‫;]‪2. int a[3][2‬‬
‫;]‪3.int b[2][4‬‬ ‫;]‪3.int b[2][4‬‬
‫‪4. int c[3][4]={0}; //put zero in every location‬‬ ‫‪4. int c[3][4]={0}; //put zero in every location‬‬
‫; "‪5.cout<<"enter first matrixs\n‬‬ ‫; )"‪5. printf("enter first matrixs\n‬‬
‫)‪6. for(i=0;i<3;i++‬‬ ‫)‪6. for(i=0;i<3;i++‬‬
‫)‪7.for(j=0;j<2;j++‬‬ ‫)‪7.for(j=0;j<2;j++‬‬
‫;]‪8.cin>>a[i][j‬‬ ‫;)]‪8. scanf("%d",&a[i][j‬‬
‫; "‪9.cout<<"enter second matrixs\n‬‬ ‫; )"‪9.printf("enter second matrixs\n‬‬
‫)‪10. for(i=0;i<2;i++‬‬ ‫)‪10. for(i=0;i<2;i++‬‬
‫)‪11.for(j=0;j<4;j++‬‬ ‫)‪11.for(j=0;j<4;j++‬‬
‫;]‪12.cin>>b[i][j‬‬ ‫;)]‪12. scanf("%d",&b[i][j‬‬
‫{)‪13.for(i=0;i<3;i++‬‬ ‫{)‪13.for(i=0;i<3;i++‬‬
‫{)‪14.for(j=0;j<4;j++‬‬ ‫{)‪14.for(j=0;j<4;j++‬‬
‫)‪15.for(k=0;k<2;k++‬‬ ‫)‪15.for(k=0;k<2;k++‬‬
‫;]‪16.c[i][j]+=a[i][k]*b[k][j‬‬ ‫;]‪16.c[i][j]+=a[i][k]*b[k][j‬‬
‫}; "‪17. cout<<c[i][j]<<"\t‬‬ ‫};)]‪17. printf("%d\t",c[i][j‬‬
‫} };"‪18.cout<<"\n‬‬ ‫} };)"‪18.printf("\n‬‬
‫توضيح الخطوات‪:‬‬
‫‪.١‬خطوة رقم)‪ (٤‬عرفنا مصفوفة ووضعنا صفر في جميع مواقعھا ألننا سنخزن فسھا نتيجة الضرب وكما ترى في‬
‫المخطط يضرب ثم يجمع أي توجد عملية جمع أكثر من مرة لذالك يجب تصفير المواقع حتى ال تؤثر على الجمع‬
‫‪.٢‬خطوة رقم )‪ ١٣‬و‪ (١٤‬ھوا التحرك ببعد المصفوفة الجديدة وھي بحجم )‪ (3*4‬وبعدھا خطوة رقم )‪ (١٥‬ھوا البعد‬
‫المفقود الذي سيفقد في عملية الضرب وخطوة رقم )‪ (١٦‬ھو كما موضح في المخطط‬
‫أي إننا متى ما جاءتنا عملية ضرب مصفوفتين نأخذ عدادان بأبعاد مصفوفة ناتجة وعداد بالبعد المفقود وبعدھا خطوة‬
‫رقم)‪ (١٦‬أي لو ضربنا المصفوفات التالية )‪ (4*6)*(6*3‬وناتج يكون مصفوفة)‪ (4*3‬والبعد المفقود )‪(6‬‬
‫البرمجة‬
‫{)‪13.for(i=0;i<4;i++‬‬ ‫مھم‬
‫{)‪14.for(j=0;j<3;j++‬‬
‫)‪15.for(k=0;k<6;k++‬‬
‫]‪16.c[i][j]+=a[i][k]*b[k][j‬‬

‫‪Step By step to Learn C or C++‬‬ ‫‪By:Hussien Ahmmed Taleb‬‬ ‫‪141‬‬


‫ترتيب المصفوفات ثنائية األبعاد‪:‬‬
‫ال يختلف ترتيب المصفوفات الثنائية عن ترتيب المصفوفات األحادية في شيء نفس الصيغة نأخذ أول عنصر في‬
‫المصفوفة ونقارنه مع بقية العناصر والثاني وبالتتالي لذالك راجع ترتيب المصفوفات األحادية أوال ‪...‬‬

‫مثال‪ :‬ترتيب مصفوفة ثنائية اإلبعاد )‪ (5*5‬ترتيب تنازليا‬

‫‪c++‬‬ ‫البرمجة بلغة‬ ‫‪c‬‬ ‫البرمجة بلغة‬


‫>‪#include<iostream.h‬‬ ‫>‪#include<stdio.h‬‬
‫)(‪int main‬‬ ‫)(‪int main‬‬
‫;‪{1.int const row=5‬‬ ‫;‪{1.int const row=5‬‬
‫;‪2.int const col=5‬‬ ‫;‪2.int const col=5‬‬
‫;]‪3. int array[row][col‬‬ ‫;]‪3. int array[row][col‬‬
‫; ‪4.int i,j,k,x,l‬‬ ‫; ‪4.int i,j,k,x,l‬‬
‫; "‪5.cout<<"Here is the Array befor sorted\n‬‬ ‫;)"‪5.printf("Here is the Array befor sorted\n‬‬
‫)‪6. for ( i=0;i<row;i++‬‬ ‫)‪6. for ( i=0;i<row;i++‬‬
‫)‪7. for ( j=0;j<col;j++‬‬ ‫)‪7. for ( j=0;j<col;j++‬‬
‫; ]‪8.cin>>array[i][j‬‬ ‫;)]‪8.scanf("%d",&array[i][j‬‬
‫{)‪9.for( k=0;k<row;k++‬‬ ‫{)‪9.for( k=0;k<row;k++‬‬
‫{)‪10. for( l=0;l<col;l++‬‬ ‫{)‪10. for( l=0;l<col;l++‬‬
‫{)‪11. for( i=0;i<row;i++‬‬ ‫{)‪11. for( i=0;i<row;i++‬‬
‫{)‪12. for ( j=0;j<col;j++‬‬ ‫{)‪12. for ( j=0;j<col;j++‬‬
‫{)]‪13. if (array[i][j] < array[k][l‬‬ ‫{)]‪13. if (array[i][j] < array[k][l‬‬
‫;]‪14.x=array[k][l‬‬ ‫;]‪14.x=array[k][l‬‬
‫;]‪15.array[k][l]=array[i][j‬‬ ‫;]‪15.array[k][l]=array[i][j‬‬
‫;‪16.array[i][j]=x‬‬ ‫;‪16.array[i][j]=x‬‬
‫} }} }}‪17.‬‬ ‫} }} }}‪17.‬‬
‫; "‪18. cout<<"Here is the Array after sorted\n‬‬ ‫;)"‪18.printf("Here is the Array after sorted\n‬‬
‫{)‪19. for ( i=0;i<row;i++‬‬ ‫{)‪19. for ( i=0;i<row;i++‬‬
‫)‪20. for ( j=0;j<row;j++‬‬ ‫)‪20. for ( j=0;j<row;j++‬‬
‫;"‪21. cout<<array[i][j]<<"\t‬‬ ‫;)]‪21.printf("%d\t",array[i][j‬‬
‫} }; "‪22. cout<<"\n‬‬ ‫} };)"‪22.printf("\n‬‬
‫توضيح الخطوات‪:‬‬
‫مھم‬
‫‪.١‬خطوة رقم )‪١‬و‪ (٢‬ھو اإلعالن عن أبعاد المصفوفة وھذه الصيغة مھمة جدا للمطور ففي البرامج السابقة لو أردت‬
‫فقط نفس المثال فقط تغير أبعاد المصفوفة لكنت بحاجة لتغير بعد المصفوفة وشروط توقف العدادات في كل‬
‫الخطوات أما ھنا إذا أردنا أن نغير بعد المصفوفة مثال قال رتب مصفوفة )‪ (4*4‬فقط نغير قيمة )‪(row=4‬‬
‫و)‪ (col=4‬ويتحول السؤال كله كما نريد بدون أي خطاء‬

‫‪.٢‬خطوة رقم)‪ ٩‬و‪ (١٠‬عدادان يمران على جميع عناصر المصفوفة لكي يقارن كل عنصر بجميع العناصر التي تليه‬
‫بواسطة العدادان في الخطوة )‪١١‬و‪(١٢‬‬

‫‪.٣‬خطوة رقم)‪ ١٣‬و‪١٤‬و‪١٥‬و‪ (١٦‬ھي عملية أبدال بين موقعين شرحت سابقا في المصفوفة األحادية‬

‫‪.٤‬خطوة رقم)‪ ١٩‬و‪٢٠‬و‪٢١‬و‪(٢٢‬طباعة للمصفوفة بعد الترتيب‬

‫‪Step By step to Learn C or C++‬‬ ‫‪By:Hussien Ahmmed Taleb‬‬ ‫‪142‬‬


‫مثال‪ :‬ترتيب صفوف مصفوفة ثنائية اإلبعاد )‪ (5*5‬ترتيب تنازليا‬
‫يقارن عناصر الصف الواحد ليرتبھا ‪.١‬األول مع الجميع‬

‫تحليل‪:‬لترتيب المصفوفة كل صف‬


‫)‪(0,0‬‬ ‫)‪(0,1‬‬ ‫)‪(0,2‬‬ ‫)‪(0,3‬‬ ‫)‪(0,4‬‬
‫)‪(1,0‬‬ ‫)‪(1,1‬‬ ‫)‪(1,2‬‬ ‫)‪(1,3‬‬ ‫على حدة نحن بحاجة لعداد خارجي يقف‬
‫)‪(1,4‬‬
‫)‪(2,0‬‬ ‫)‪(2,1‬‬ ‫)‪(2,2‬‬ ‫)‪(2,3‬‬ ‫)‪(2,4‬‬‫على عناصر المصفوفة صف صف‬
‫)‪(3,0‬‬ ‫)‪(3,1‬‬ ‫)‪(3,2‬‬ ‫)‪(3,3‬‬ ‫وليكن اسمه)‪ (k‬ويبدأ بترتيب عناصر‬
‫)‪(3,4‬‬
‫)‪(4,0‬‬ ‫)‪(4,1‬‬ ‫)‪(4,2‬‬ ‫)‪(4,3‬‬ ‫)‪(4,4‬‬
‫الصف الواحد بمقارنة العنصر األول مع‬
‫جميع العناصر التي تليه في الصف الذي عليه المؤشر العداد ثم بعد أن يرتبه ينتقل إلى الصف التالي‪.‬‬
‫عندما يكون الترتيب على الصف األول )‪(k=0‬‬

‫‪c++‬‬ ‫البرمجة بلغة‬ ‫‪c‬‬ ‫البرمجة بلغة‬


‫>‪#include<iostream.h‬‬ ‫>‪#include<stdio.h‬‬
‫)(‪int main‬‬ ‫)(‪int main‬‬
‫;‪{1.int const row=5‬‬ ‫;‪{1.int const row=5‬‬
‫;‪2. int const col=5‬‬ ‫;‪2. int const col=5‬‬
‫;]‪3.int array[row][col‬‬ ‫;]‪3.int array[row][col‬‬
‫; ‪4.int i,j,k,x‬‬ ‫; ‪4.int i,j,k,x‬‬
‫; "‪5.cout<<"Here is the Array befor sorted\n‬‬ ‫;)"‪5.printf("Here is the Array befor sorted\n‬‬
‫)‪6. for ( i=0;i<row;i++‬‬ ‫)‪6. for ( i=0;i<row;i++‬‬
‫)‪7. for ( j=0;j<col;j++‬‬ ‫)‪7. for ( j=0;j<col;j++‬‬
‫; ]‪8.cin>>array[i][j‬‬ ‫;)]‪8.scanf("%d",&array[i][j‬‬
‫)‪9.for( k=0;k<row;k++‬‬ ‫)‪9.for( k=0;k<row;k++‬‬
‫)‪10.for( i=0;i<row;i++‬‬ ‫)‪10.for( i=0;i<row;i++‬‬
‫{)‪11.for ( j=0;j<col;j++‬‬ ‫{)‪11.for ( j=0;j<col;j++‬‬
‫{)]‪12. if (array[k][j] <array[k][i‬‬ ‫{)]‪12. if (array[k][j] <array[k][i‬‬
‫;]‪13. x=array[k][j‬‬ ‫;]‪13. x=array[k][j‬‬
‫;]‪14.array[k][j]=array[k][i‬‬ ‫;]‪14.array[k][j]=array[k][i‬‬
‫}};‪15.array[k][i]=x‬‬ ‫}};‪15.array[k][i]=x‬‬
‫; "‪16. cout<<"Here is the Array after sorted\n‬‬ ‫;)"‪16.printf("Here is the Array after sorted\n‬‬
‫{)‪17.for ( i=0;i<row;i++‬‬ ‫{)‪17.for ( i=0;i<row;i++‬‬
‫)‪18. for ( j=0;j<row;j++‬‬ ‫)‪18. for ( j=0;j<row;j++‬‬
‫;"‪19. cout<<array[i][j]<<"\t‬‬ ‫;)]‪19.printf("%d\t",array[i][j‬‬
‫} }; "‪20.cout<<"\n‬‬ ‫} };)"‪20.printf("\n‬‬

‫مھم‬

‫توضيح الخطوات‪:‬‬
‫ماذا سيحصل في خطوة رقم)‪...(9—15‬؟‬
‫كيف رتبنا صفوف المصفوفة؟نجد انه يقوم بمقارنة عناصر الصف الواحد يبعضھا وترتيبھا حيث أن المتغير )‪( k‬‬
‫ينتقل في كل لوب إلى صف جديد بعد أن ينتھي من ترتيب الصف الذي يسبقه وفي المقارنة خطوة رقم)‪ (١٢‬نثبت‬
‫الصف بين المصدر والمسار الترتيبي وننقل العداد الخارجي)‪ ( i‬في كل لوب إلى عمود جديد ضمن الصف الواحد‬
‫ويعمل العداد الداخلي )‪(j‬على مقارنة ھذا العصر الذي يؤشر عليه )‪ ( i‬في الصف الواحد بكل العناصر في األعمدة‬
‫التي تليه في نفس الصف فإذا وجد فيھا اصغر منه يبدله‬
‫أتمنى أن تكون قد استوعبت الفكرة )ابومشاري(‬

‫‪Step By step to Learn C or C++‬‬ ‫‪By:Hussien Ahmmed Taleb‬‬ ‫‪143‬‬


‫مثال‪ :‬ترتيب أعمدة مصفوفة ثنائية اإلبعاد )‪ (5*5‬ترتيب تنازليا‬
‫يقارن عناصر العمود الواحد ليرتبھا ‪.١‬األول مع الجميع‬

‫تحليل‪:‬لترتيب المصفوفة كل عمود‬


‫)‪(0,0‬‬ ‫)‪(0,1‬‬ ‫)‪(0,2‬‬ ‫)‪(0,3‬‬ ‫)‪(0,4‬‬
‫)‪(1,0‬‬ ‫)‪(1,1‬‬ ‫)‪(1,2‬‬ ‫)‪(1,3‬‬ ‫على حدة نحن بحاجة لعداد خارجي يقف‬
‫)‪(1,4‬‬
‫)‪(2,0‬‬ ‫)‪(2,1‬‬ ‫)‪(2,2‬‬ ‫)‪(2,3‬‬ ‫)‪(2,4‬‬ ‫على عناصر المصفوفة عمود عمود‬
‫)‪(3,0‬‬ ‫)‪(3,1‬‬ ‫)‪(3,2‬‬ ‫)‪(3,3‬‬ ‫)‪(3,4‬‬‫وليكن اسمه )‪ (k‬ويبدأ بترتيب عناصر‬
‫)‪(4,0‬‬ ‫)‪(4,1‬‬ ‫)‪(4,2‬‬ ‫)‪(4,3‬‬ ‫)‪(4,4‬‬
‫العمود الواحد بمقارنة العنصر األول مع‬
‫جميع العناصر التي تليه في العمود الذي عليه المؤشر العداد ثم بعد إن يرتبه ينتقل إلى العمود التالي‪.‬‬
‫عندما يكون الترتيب على العمود األول )‪(k=0‬‬

‫‪c++‬‬ ‫البرمجة بلغة‬ ‫‪c‬‬ ‫البرمجة بلغة‬


‫>‪#include<iostream.h‬‬ ‫>‪#include<stdio.h‬‬
‫)(‪int main‬‬ ‫)(‪int main‬‬
‫;‪{1.int const row=5‬‬ ‫;‪{1.int const row=5‬‬
‫;‪2. int const col=5‬‬ ‫;‪2. int const col=5‬‬
‫;]‪3.int array[row][col‬‬ ‫;]‪3.int array[row][col‬‬
‫; ‪4.int i,j,k,x,l‬‬ ‫; ‪4.int i,j,k,x,l‬‬
‫; "‪5.cout<<"Here is the Array befor sorted\n‬‬ ‫;)"‪5.printf("Here is the Array befor sorted\n‬‬
‫)‪6.for ( i=0;i<row;i++‬‬ ‫)‪6.for ( i=0;i<row;i++‬‬
‫)‪7. for ( j=0;j<col;j++‬‬ ‫)‪7. for ( j=0;j<col;j++‬‬
‫; ]‪8.cin>>array[i][j‬‬ ‫;)]‪8.scanf("%d",&array[i][j‬‬
‫)‪9. for( k=0;k<row;k++‬‬ ‫)‪9. for( k=0;k<row;k++‬‬
‫)‪10.for( i=0;i<row;i++‬‬ ‫)‪10.for( i=0;i<row;i++‬‬
‫{ )‪11. for ( j=0;j<col;j++‬‬ ‫{ )‪11. for ( j=0;j<col;j++‬‬
‫{)]‪12. if (array[j][k] <array[i][k‬‬ ‫{)]‪12. if (array[j][k] <array[i][k‬‬
‫;]‪13. x=array[j][k‬‬ ‫;]‪13. x=array[j][k‬‬
‫;]‪14.array[j][k]=array[i][k‬‬ ‫;]‪14.array[j][k]=array[i][k‬‬
‫}};‪15.array[i][k]=x‬‬ ‫}};‪15.array[i][k]=x‬‬
‫; "‪16. cout<<"Here is the Array after sorted\n‬‬ ‫;)"‪16.printf("Here is the Array after sorted\n‬‬
‫{)‪17.for ( i=0;i<row;i++‬‬ ‫{)‪17.for ( i=0;i<row;i++‬‬
‫)‪18. for ( j=0;j<row;j++‬‬ ‫)‪18. for ( j=0;j<row;j++‬‬
‫;"‪19. cout<<array[i][j]<<"\t‬‬ ‫;)]‪19.printf("%d\t",array[i][j‬‬
‫}}; "‪20. cout<<"\n‬‬ ‫}};)"‪20.printf("\n‬‬

‫مھم‬
‫توضيح الخطوات‪:‬‬
‫ماذا سيحصل في خطوة رقم)‪...(9—15‬؟‬
‫كيف رتبنا أعمدة المصفوفة؟نجد انه يقوم بمقارنة عناصر العمود الواحد يبعضھا وترتيبھا حيث أن المتغير )‪( k‬‬
‫ينتقل في كل لوب إلى عمود جديد بعد أن ينتھي من ترتيب العمود الذي يسبقه‪ .‬وفي المقارنة خطوة رقم)‪ (١٢‬نثبت‬
‫العمود بين المصدر والمسار الترتيبي وننقل العداد الخارجي)‪ ( i‬في كل لوب إلى صف جديد ضمن العمود الواحد‬
‫ويعمل العداد الداخلي )‪ (j‬على مقارنة ھذا العنصر الذي يؤشر عليه )‪ ( i‬في العمود الواحد بكل العناصر في الصفوف‬
‫التي تليه في نفس العمود الذي عليه المؤشر فإذا وجد فيھا اصغر منه يبدله‬

‫*لو أردنا ترتيب تصاعدي فقط نبدل عالمة األصغر في شرط المقارنة إلى اكبر‬

‫‪Step By step to Learn C or C++‬‬ ‫‪By:Hussien Ahmmed Taleb‬‬ ‫‪144‬‬


‫النصوص )‪:(string‬‬
‫‪ .١‬تمثيلھا بالمصفوفات األحادية األبعاد‪:‬‬
‫ھي مصفوفات مكونه من سلسلة من الحروف وتخزن بنفس طريقة المصفوفة االعتيادية ويخزن بعد أخر‬
‫موقع نخزن فيه المصفوفة الحرف )'‪ ('\0‬للداللة على أن السلسلة انتھت‪.‬‬
‫لو أردنا تكوين مصفوفة حرفيه اسمھا)‪ (name‬نخزن فيھا اسم شخص وليكن)‪(hussien‬‬

‫ھيكلية تعريف‬
‫;"‪Char name[8]="hussien‬‬

‫أو تكتب ھكذا لكن ھنا يجب وضع )'‪ ('\0‬في نھاية السلسلة‬

‫ھيكلية تعريف‬
‫;}'‪Char name[8]={'h','u','s','s','i','e','n','\0‬‬

‫نالحظ إننا حجزنا ثمانية مواقع ورغم أن االسم مكون من سبعة أحرف ألنه كما قلنا يضيف )'‪ ('\0‬إلى نھاية السلسلة‬
‫باإلضافة إلى األحرف التي أدخلناھا )أي دائما نحجز حجم المصفوفة اكبر من ما نحتاجه بواحد(‬

‫أي سلسة تخزن في الذاكرة بالتسلسل أي أن مصفوفة ‪ name‬التي تحوي على "‪ "hussien‬تخزن ھكذا إذا‬
‫افترضنا انه أول موقع يخزن فيه أول حرف ھوا )‪ (200‬كما الحظت أن بقية األحرف يخزنھم بالتتالي‪.‬‬

‫عنونة المصفوفة مواقع‬ ‫]‪name[0‬‬ ‫]‪name[1‬‬ ‫]‪name[2‬‬ ‫]‪name[3‬‬ ‫]‪name[4‬‬ ‫]‪name[5‬‬ ‫]‪name[6‬‬

‫عنوان الموقع خاليا‬ ‫‪200‬‬ ‫‪201‬‬ ‫‪202‬‬ ‫‪203‬‬ ‫‪204‬‬ ‫‪205‬‬ ‫‪206‬‬ ‫‪207‬‬
‫الذاكرة‬ ‫محتواه‬ ‫‪h‬‬ ‫‪u‬‬ ‫‪s‬‬ ‫‪s‬‬ ‫‪i‬‬ ‫‪e‬‬ ‫‪n‬‬ ‫‪\0‬‬
‫*نعلم أن ترقيم المصفوفة في ھذه اللغة يبدءا من الصفر أي أن حرف )‪ (h‬يخزن في موقع صفر وحرف )‪ (i‬يخزن في موقع ‪٤‬‬

‫لو أردنا أن نضع حرف )‪ (o‬بدل حرف )‪ (u‬وبما انه ثاني موقع في المصفوفة نخزنه ھكذا‬

‫البرمجة‬
‫;'‪name[1]='o‬‬

‫عنونة المصفوفة مواقع‬ ‫]‪name[0‬‬ ‫]‪name[1‬‬ ‫]‪name[2‬‬ ‫]‪name[3‬‬ ‫]‪name[4‬‬ ‫]‪name[5‬‬ ‫]‪name[6‬‬

‫عنوان الموقع خاليا‬ ‫‪200‬‬ ‫‪201‬‬ ‫‪202‬‬ ‫‪203‬‬ ‫‪204‬‬ ‫‪205‬‬ ‫‪206‬‬ ‫‪207‬‬
‫الذاكرة‬ ‫محتواه‬ ‫‪h‬‬ ‫‪o‬‬ ‫‪s‬‬ ‫‪s‬‬ ‫‪i‬‬ ‫‪e‬‬ ‫‪n‬‬ ‫‪\0‬‬

‫ھذا الحرف الذي تم أبداله‬


‫**المكتبة التي نستخدمھا مع )‪ (string‬ھي >‪<string.h‬‬

‫‪Step By step to Learn C or C++‬‬ ‫‪By:Hussien Ahmmed Taleb‬‬ ‫‪145‬‬


‫دوال اإلدخال واإلخراج لل )‪:(string‬‬

‫في حال إدخال )‪ (string‬من قبل المستخدم ‪.‬عبارات اإلدخال االعتيادية تكون غير كافية إلدخالھا أو غير مالئمة‬
‫لدرجة ‪ .100%‬على سبيل المثال دالة اإلدخال االعتيادية ونحاول إدخال )‪ (string‬بھا ماذا سيحدث‬

‫دالة اإلدخال بلغة ‪C++‬‬


‫;]‪char name[30‬‬
‫;)‪scanf("%s",name‬‬

‫دالة اإلدخال بلغة ‪C‬‬


‫;]‪char name[30‬‬
‫; ‪cin>>name‬‬

‫الفراغ األول‬
‫سوف يأخذ الجملة المدخلة لكن ليس كلھا يأخذھا حتى أول فراغ باإلدخال أي لو أدخلنا‬
‫‪Hussien Ahmmed Taleb‬‬

‫لذالك سوف يأخذ المدخالت فقط كلمة )‪ (Hussien‬وبھمل من الفراغ األول إلى النھاية‬
‫مھم‬
‫إذا أدخلنا عدة كلمات فما الذي سوف يحدث للذي مھلته دالة اإلدخال األولى‪..‬؟‬
‫الذي مھلته دالة اإلدخال األولى لن يذھب سدى إنھما يبقى ينتظر عملية إدخال ثانية ليكون ھو كمدخل لھا) أي في‬
‫عملية اإلدخال الثانية سوف ال يطلب من المستخدم إدخال ھو يعتبر ما تبقى من دالة اإلدخال األولى كمدخل لدالة‬
‫اإلدخال الثانية( أي لو رجعنا إلى المثال السابق ووضعنا دالة إدخال أخرى وأدخلنا نفس الجملة كما في المثال‬

‫‪c++‬‬ ‫البرمجة بلغة‬ ‫‪c‬‬ ‫البرمجة بلغة‬


‫>‪#include<iostream.h‬‬ ‫>‪#include<stdio.h‬‬
‫)(‪int main‬‬ ‫)(‪int main‬‬
‫;]‪{1.char string1[20],string2[20‬‬ ‫;]‪{1.char string1[20],string2[20‬‬
‫; ‪2.cin>>string1‬‬ ‫;)‪2.scanf("%s",&string1‬‬
‫; ‪3 . cin>>string2‬‬ ‫;)‪3 .scanf("%s",&string2‬‬
‫; ‪4.cout<<string2‬‬ ‫;)‪4.prinC("%s",string2‬‬
‫}‬ ‫}‬
‫في ھذا البرنامج المفروض تنفذ خطوة رقم )‪ (٢‬يدخل المستخدم )‪ (string1‬ثم تنفذ خطوة رقم )‪ (٣‬ويدخل المستخدم‬
‫)‪ (string2‬ھذه الكالم صحيح إذا لم يتجاوز المدخالت أكثر من كلمة ھكذا‬
‫لو تالحظ شاشة التنفيذ نفذ خطوة رقم)‪ (٢‬وطلب من المستخدم إدخال وادخل )‪ (alxs‬ونفذ خطوة‬
‫رقم)‪ (٣‬وطلب من المستخدم إدخال وادخل )‪ (hussien‬وبعدھا نفذ خطوة رابعة وطبع االسم الثاني‬
‫** أما إذا ادخل المستخدم في خطوة رقم)‪ (٢‬جملة مكونة من أكثر من كلمة وھي‬
‫فالذي يحدث كما قلنا يأخذ حتى الفراغ األول ويعتبره كمدخل لدالة اإلدخال األولى‬
‫وھو)‪ (Hussien‬ويترك بقية الجملة ‪.‬وعندما ينفذ خطوة رقم)‪ (٣‬ال يطلب من المستخدم‬
‫اإلدخال أنما يعتبر ما تبقى من الجملة األولى وھو)‪ (Ahmmed Taleb‬كمدخل له ويأخذ أيضا حتى الفراغ الثاني أي‬
‫سوف يأخذ )‪ (Ahmmed‬فقط وبھمل البقية وسوف يطبع في خطوة رقم)‪ (٤‬محتويات )‪(string2‬‬

‫‪Step By step to Learn C or C++‬‬ ‫‪By:Hussien Ahmmed Taleb‬‬ ‫‪146‬‬


‫إذن الحل مع ھذه المشاكل توجد دوال إدخال تأخذ الجملة المدخلة كاملة وھي‪:‬‬
‫)‪ (cin.get‬تستخدم ھذه الدالة في لغة )‪ (c++‬إلدخال جملة كاملة وشكلھا يكون‬
‫دالة اإلدخال بلغة ‪C++‬‬
‫)‪Cin.get(string,number of input‬‬

‫‪ ( string).١‬ھي المصفوفة المراد إدخالھا ك )‪(string‬‬


‫‪ (number of input).٢‬ھي عدد الحروف المحتملة التي سندخلھا من شاشة التنفيذ ودائما اجعلھا أكثر من احتياجك‬
‫وان ال تتجاوز حجم المصفوفة‪.‬وأننا إذا تجاوزنا اإلدخال ھذا الرقم سوف سيھمل البقية ‪.‬‬
‫)‪ (cin.getline‬نفس طريقة الدالة )‪ (cin.get‬لكنھا تقرئ سطر واحد فقط‬
‫مثال‪ :‬لو كان لدينا )‪ (string1‬وحجمھا )‪ (٢٥‬ونريد إدخالھا بھذه الدالة فيكون الكود ھكذا‬
‫دالة اإلدخال بلغة ‪C++‬‬
‫]‪Char string1[25‬‬
‫)‪Cin.get(string1,25‬‬

‫)‪ (gets‬تستخدم ھذه الدالة في لغة )‪ (c‬إلدخال جملة كاملة فقط نكتبھا ونكتب اسم)‪ (string‬التي نريد أن ندخلھا بھا‬
‫دالة اإلدخال بلغة ‪C++‬‬
‫]‪Char string1[25‬‬
‫)‪gets(string1‬‬

‫دوال اإلخراج في لغة )‪ (c++‬نستخدم نفس دالة اإلخراج االعتيادية تكتب اسم )‪ (string‬وستطبع سلسلة كاملة‬

‫دالة اإلدخال بلغة ‪C++‬‬


‫;‪cout<<string1‬‬

‫دوال اإلخراج في لغة )‪ (c‬نستخدم نفس دالة اإلخراج االعتيادية ونستخدم في دالة الطباعة الرمز)‪ (%s‬واسم‬
‫)‪ (string‬وستطبع سلسلة كاملة في شاشة التنفيذ‬

‫دالة اإلدخال بلغة ‪C++‬‬


‫;)‪PrinC("%s",string1‬‬

‫*ال نستخدم "‪ %c‬الن "‪ "%c‬تطبع حرف واحد فقط وليس جملة‬

‫لنصحح المثال السابق الذي كانت به مشكلة بدوال اإلدخال باستخدام ھذه الدوال الجديدة )افحص المثال وشاھد الفرق(‬

‫‪c++‬‬ ‫البرمجة بلغة‬ ‫‪c‬‬ ‫البرمجة بلغة‬


‫>‪#include<iostream.h‬‬ ‫>‪#include<stdio.h‬‬
‫)(‪int main‬‬ ‫)(‪int main‬‬
‫;]‪{1.char string1[20],string2[20‬‬ ‫;]‪{1.char string1[20],string2[20‬‬
‫; )‪2.cin.get(string1,20‬‬ ‫;)‪2.gets(string1‬‬
‫; )‪3 . cin.get(string2,20‬‬ ‫;)‪3 . gets(string2‬‬
‫; ‪4.cout<<string2‬‬ ‫;)‪4.prinC("%s",string2‬‬
‫}‬ ‫}‬

‫‪Step By step to Learn C or C++‬‬ ‫‪By:Hussien Ahmmed Taleb‬‬ ‫‪147‬‬


‫ھناك عدة دوال للتعامل مع )‪ (string‬تقع ضمن مكتبة >‪ <string.h‬وھي‪:‬‬
‫‪ :strlen().١‬تستخدم ھذه الدالة إليجاد طول السلسة النصية )أي عدد األحرف في السلسلة وكذالك عدد الفراغات( ‪.‬‬

‫وطريقة استخدامھا ھي‬

‫ھيكلية الدالة‬
‫)‪strlen(string‬‬

‫)‪ (string‬ھي المصفوفة المراد إيجاد طولھا‬

‫مثال‪:‬إيجاد طول المصفوفة التالية‬

‫البرمجة‬
‫;"‪char string1[5]="alxs go‬‬
‫;‪int len‬‬
‫‪len=strlen(string1); // len=7‬‬
‫يكون طول المصفوفة )‪ (٧‬الن حتى الفراغ أيضا يعتبر كحرف في حساب الطول السلسلة‬

‫مثال‪ :‬برنامج ندخل سلسلة ويطبعھا بالمقلوب ‪.‬؟‬

‫تحليل‪:‬لطباعة أي مصفوفة بالمقلوب)أي أخر حرف يطبع أول حرف( يكون بوضع المؤشر على أخر حرف ثم‬
‫نتنازل إلى أول حرف بالتسلسل فتتم الطباعة ونستطيع معرفة أخر حرف بواسطة دالة معرفة طول السلسة سيعطيك‬
‫طولھا ونطرح من طولھا واحد نجد أخر رقم بالمصفوفة الن ترقيم المصفوفة يبدأ من الصفر‬

‫‪c++‬‬ ‫البرمجة بلغة‬ ‫‪c‬‬ ‫البرمجة بلغة‬


‫>‪#include<iostream.h‬‬ ‫>‪#include<stdio.h‬‬
‫>‪#include<string.h‬‬ ‫>‪#include<string.h‬‬
‫)(‪int main‬‬ ‫)(‪int main‬‬
‫;]‪{1.char string1[40‬‬ ‫;]‪{1.char string1[40‬‬
‫;‪2.int I,len‬‬ ‫;‪2.int i,len‬‬
‫; )‪3 . cin.get(string1,40‬‬ ‫;)‪3 . gets(string1‬‬
‫;‪4.len=strlen(string1)-1‬‬ ‫;‪4.len=strlen(string1)-1‬‬
‫)‪5.for(i=len ;i>=0;i--‬‬ ‫)‪5.for(i=len ;i>=0;i--‬‬
‫};]‪6.cout<<string1[i‬‬ ‫};)]‪6.prinC("%c",string1[i‬‬
‫توضيح الخطوات‪:‬‬
‫‪.١‬خطوة رقم)‪ (١‬عرفنا مصفوفة نصية‪،‬‬
‫‪.٢‬خطوة رقم)‪ (٢‬عرفنا عداد للمصفوفة ومتغير )‪ (len‬لكي نخزن فيه طول السلسلة‬
‫‪.٣‬خطوة رقم )‪ (٣‬قمنا بإدخال السلسة بواسطة دوال اإلدخال‬
‫‪.٤‬خطوة رقم)‪ (٤‬خزن طول السلسلة بالمتغير )‪ (len‬وطرنا من طول السلسلة واحد الن ترقيم المصفوفة يبدأ من‬
‫الصفر وطول المصفوفة يعطيك عدد األحرف في المصفوفة لذالك يجب طرحه بواحد‬
‫‪.٥‬عداد يبدأ بالعد من أخر عنصر بالمصفوفة ويتناقص إلى أول عنصر ويطبع كل عنصر في خطوة)‪(٦‬‬

‫* ولو تالحظ في الطباعة بلغة)‪ (c‬استخدمنا "‪ "%c‬ألننا سنطبع حرف حرف وليس سلسلة‬

‫‪Step By step to Learn C or C++‬‬ ‫‪By:Hussien Ahmmed Taleb‬‬ ‫‪148‬‬


‫‪ :strcpy().٢‬تستخدم ھذه الدالة لنسخ جميع محتويات سلسلة إلى سلسلة أخرى وتكون طريقة النسخ انه يبدأ بإضافة‬
‫عناصر السلسلة الثانية بمكان عناصر السلسلة األولى التي لھا نفس التسلسل بالموقع‬

‫ھيكلية الدالة‬
‫;)‪strcpy(string1, string2‬‬
‫مثال‪ :‬لنسخ جميع محتويات مصفوفة إلى مصفوفة أخرى‬

‫البرمجة‬
‫;" ‪char string1[5]="alxs‬‬
‫;" ‪char string2[5]="me‬‬
‫;)‪strcpy(string1, string2‬‬

‫"‪ string1 ="alxs‬قبل النسخ‬ ‫"‪ string1="mexs‬بعد النسخ‬


‫]‪string1[0‬‬ ‫]‪string1[1‬‬ ‫]‪string1[2‬‬ ‫]‪string1[3‬‬
‫]‪string1[0‬‬ ‫]‪string1[1‬‬ ‫]‪string1[2‬‬ ‫]‪string1[3‬‬
‫‪a‬‬ ‫‪l‬‬ ‫‪x‬‬ ‫‪s‬‬
‫‪m‬‬ ‫‪e‬‬ ‫‪x‬‬ ‫‪s‬‬
‫"‪String2="me‬‬

‫]‪String2[0‬‬ ‫]‪String2[1‬‬
‫‪m‬‬ ‫‪e‬‬

‫لو تالحظ أن )‪ (String2‬بقيت محافظة على محتوياتھا نفسھا بعد النسخ ألن النسخ يكون منھا إلى )‪(string1‬‬
‫وان )‪ (string1‬تم أبدال محتويات كل موقع بما يكافئه في)‪ (String2‬وبقيت المواقع التي ال يقابلھا قيم من‬
‫)‪ (String2‬محتفظة بقيمھا‬

‫‪ :strncpy().٣‬تستخدم ھذه الدالة لنسخ عدد محدد من محتويات سلسلة إلى سلسلة أخرى وتكون طريقة النسخ انه‬
‫يبدأ بإضافة عناصر السلسلة الثانية بمكان عناصر السلسلة األولى التي لھا نفس التسلسل بالموقع‬

‫ھيكلية الدالة‬
‫;)‪strncpy(string1, string2,number of copy‬‬
‫)‪ (number of copy‬ھو عدد األحرف المراد نسخھا من السلسلة الثانية إلى السلسلة األولى‬

‫مثال‪ :‬لنسخ ثالث عناصر من محتويات مصفوفة إلى مصفوفة أخرى‬

‫البرمجة‬
‫;" ‪char string1[5]="alxs‬‬
‫;" ‪char string2[5]="suha muhamed‬‬
‫;)‪strncpy(string1, string2,3‬‬
‫سوف ينسخ الحروف الثالثة األولى من السلسلة الثانية وھي)‪ (suh‬إلى السلسة األولى ويكون محتويات )‪(string1=suhs‬‬

‫‪Step By step to Learn C or C++‬‬ ‫‪By:Hussien Ahmmed Taleb‬‬ ‫‪149‬‬


‫‪ :strcat().٤‬تستخدم ھذه الدالة لإللحاق محتويات سلسلة في نھاية سلسلة أخرى ومحافظا على محتوياتھا ‪.‬‬

‫ھيكلية الدالة‬
‫;)‪strcat(string1, string2‬‬

‫مثال‪ :‬إللحاق جميع محتويات مصفوفة إلى مصفوفة أخرى‬

‫البرمجة‬
‫;" ‪char string1[7]="alxs‬‬
‫;" ‪char string2[5]="me‬‬
‫;)‪strcat(string1, string2‬‬

‫"‪ string1="alxs‬قبل النسخ‬

‫]‪string1[0‬‬ ‫]‪string1[1‬‬ ‫]‪string1[2‬‬ ‫]‪string1[3‬‬ ‫"‪ string1 ="alxsme‬بعد النسخ‬


‫‪a‬‬ ‫‪l‬‬ ‫‪x‬‬ ‫‪s‬‬
‫]‪string1[0‬‬ ‫]‪string1[1‬‬ ‫]‪string1[2‬‬ ‫]‪string1[3‬‬ ‫]‪string1[4‬‬ ‫]‪string1[5‬‬
‫"‪String2 ="me‬‬ ‫‪a‬‬ ‫‪l‬‬ ‫‪x‬‬ ‫‪s‬‬ ‫‪m‬‬ ‫‪e‬‬
‫]‪String2[0‬‬ ‫]‪String2[1‬‬
‫‪m‬‬ ‫‪e‬‬

‫لو تالحظ أن )‪ (String2‬بقيت محافظة على محتوياتھا نفسھا بعد الدمج ألن اإللحاق يكون منھا إلى )‪(string1‬‬
‫وان )‪ (string1‬تم إضافة محتويات سلسلة)‪ (String2‬إلى نھايتھا ‪ .‬يجب أن يكون حجم المصفوفة المراد اإلضافة‬
‫إليھا مساوي لعدد أحرفھا وعدد األحرف المضافة لو تالحظ أن في المثال وضعنا حجم)‪ (string1‬ھو)‪ (٧‬وھي مكونة‬
‫من أربعة أحرف ألننا سنضيف إليھا سلسلة مكونة من حرفان فيصبح طولھا سبعة‬

‫‪ :strncat().٥‬تستخدم ھذه الدالة بإلحاق عدد محدد من محتويات سلسلة في نھاية سلسلة أخرى وتكون طريقة‬

‫ھيكلية الدالة‬
‫;)‪strncat(string1, string2,number of copy‬‬
‫)‪ (number of copy‬ھو عدد األحرف المراد نسخھا من السلسلة الثانية إلى السلسلة األولى‬

‫مثال‪ :‬إللحاق ثالث عناصر من محتويات مصفوفة إلى مصفوفة أخرى‬

‫البرمجة‬
‫;" ‪char string1[5]="alxs‬‬
‫;" ‪char string2[5]="suha muhamed‬‬
‫;)‪strncat(string1, string2,3‬‬
‫سوف ينسخ الحروف الثالثة األولى من السلسلة الثانية وھي)‪ (suh‬إلى السلسة األولى ويكون محتويات )‪(string1=alxssuh‬‬

‫‪Step By step to Learn C or C++‬‬ ‫‪By:Hussien Ahmmed Taleb‬‬ ‫‪150‬‬


‫‪ :strcmp().٦‬تستخدم ھذه الدالة للمقارنة بين سلسلتين وتكون بالشكل التالي‬

‫ھيكلية الدالة‬
‫;)‪strcmp(string1, string2‬‬

‫ھناك ثالثة نتائج للمقارنة بين سلسلتين وھي‪.‬‬


‫‪.١‬فإذا كانت نتيجة المقارنة صفر فأن )‪ (String1‬تساوي )‪(String2‬‬
‫‪ .٢‬فإذا كانت نتيجة المقارنة اكبر من صفر فأن )‪ (String1‬اكبر من )‪(String2‬‬
‫‪ .٣‬فإذا كانت نتيجة المقارنة اصغر من صفر فأن )‪ (String1‬اصغر من )‪(String2‬‬

‫مثال‪ :‬للمقارنة بين سلسلتين‬

‫البرمجة‬
‫;" ‪char string1[7]="aa‬‬
‫;" ‪char string2[5]="ab‬‬
‫;‪int cmper‬‬
‫‪cmper=strcmp(string1, string2) ; //cmper<1‬‬
‫كانت نتيجة المتغير )‪ (cmper‬سالبة الن )‪ (String1‬اصغر من )‪(String2‬‬

‫‪ :strncmp().٧‬تستخدم ھذه الدالة للمقارنة بين عدد محدد من األحرف من سلسلتين‬

‫ھيكلية الدالة‬
‫;)‪strncmp (string1, string2,number of comper‬‬
‫)‪ (number of comper‬ھو عدد األحرف المراد مقارنتھا من كال السلسلتين‬

‫مثال‪ :‬لمقارنة أول عنصر من محتويات مصفوفة األولى والمصفوفة الثانية‬

‫البرمجة‬
‫;" ‪char string1[5]="hussien‬‬
‫;" ‪char string2[5]="hakmet‬‬
‫;‪int cmper‬‬
‫‪cmper=strncmp(string1, string2,1) ; //cmper=0‬‬
‫كانت نتيجة المتغير )‪ (cmper‬صفر الن الحرف األول في )‪ (String1‬يساوي الحرف األول في )‪(String2‬‬

‫‪Step By step to Learn C or C++‬‬ ‫‪By:Hussien Ahmmed Taleb‬‬ ‫‪151‬‬


‫( في السلسلة‬a) ‫ برنامج ندخل سلسلة حرف ويحسب عدد مرات ظھور الحرف‬:‫مثال‬

‫( وبعدھا نضع شرط بسيط للتحقق إذا كان‬string)‫بما انه قال سلسلة حروف نستخدم دوال اإلدخال الخاصة ب‬:‫تحليل‬
(a) ‫( ونزيد عداد في كل مرة يجد فيھا حرف‬a) ‫احد الحروف ھو‬

c++ ‫البرمجة بلغة‬ c ‫البرمجة بلغة‬


#include<iostream.h> #include<stdio.h>
#include<string.h> #include<string.h>
int main() int main()
{1.char string1[40]; {1.char string1[40];
2.int i,len,number_appear=0; 2.int i,len,number_appear=0;
3 . cin.get(string1,40) ; 3 . gets(string1);
4.len=strlen(string1)-1; 4.len=strlen(string1)-1;
5.for(i=0;i<=len;i++) 5.for(i=0;i<=len;i++)
6.If ( string1[i]=='a') 6.If ( string1[i]=='a')
7. number_appear=number_appear+1; 7. number_appear=number_appear+1;
8.cout<<"number appear of (a)="<< number_appear;} 8.prinC("number appear of (a)=%d", number_appear);}
:‫توضيح الخطوات‬
‫( كونا عداد يبدأ بأول حف بالسلسلة وينتھي بأخر حرف لكي يتحقق من أحرف السلسلة حرف حرف‬٥) ‫خطوة رقم‬.١
‫( يزيد فيھا قيمة العداد بواحد داللة‬٧) ‫( وينفذ خطوة رقم‬٦)‫( ستحقق الشرط في الخطوة رقم‬a) ‫متى ما وجد حرف‬
‫على انه وجد حرف جديد وكلما يجد الحرف يزيد العداد وفي النھاية تكون قيمة العداد بقدر عدد مرات ظھور الحرف‬
‫( في السلسلة‬a)

‫؟‬.‫ برنامج ندخل سلسلة حرف ويحسب عدد مرات ظھور أحرف العلة وطباعتھا أينما وجدت في السلسلة‬:‫مثال‬

‫ فكرة ھذا السؤال نفس فكرة السؤال السابق فقط الذي يغير شرط التحقق فبدال من أن يتحقق من حرف واحد‬:‫تحليل‬
‫سيتحقق من خمس حرف وأينما وجدھا يطبعھا‬

c++ ‫البرمجة بلغة‬ c ‫البرمجة بلغة‬


#include<iostream.h> #include<stdio.h>
#include<string.h> #include<string.h>
int main() int main()
{1.char string1[40]; {1.char string1[40];
2.int i,len,number_appear=0; 2.int i,len,number_appear=0;
3 . cin.get(string1,40) ; 3 . gets(string1);
4.len=strlen(string1)-1; 4.len=strlen(string1)-1;
5.for(i=0;i<=len;i++) 5.for(i=0;i<=len;i++)
6.If ( ( string1[i]=='a')||( string1[i]=='u')||( 6.If ( ( string1[i]=='a')||( string1[i]=='u')||( string1[i]=='o')||(
string1[i]=='o')||( string1[i]=='i')||( string1[i]=='e') ){ string1[i]=='i')||( string1[i]=='e') ){
7.cout<<string1[i]<<"\n"; 7.prinC("%c",string1[i]);
8. number_appear=number_appear+1;} 8. number_appear=number_appear+1;}
9.cout<<"number appear of vowel="<< number_appear;} 9.printf("number appear of vowel =%d\n", number_appear);}

‫( يتحقق متى ما جاء أي حرف من حروف العلة الخمسة يطبعه في‬٦) ‫ الشرط في خطوة رقم‬:‫توضيح الخطوات‬
.(٨)‫( ويزيد قيمة عداد عدد مرات ظھور أحرف العلة في خطوة رقم‬٧) ‫خطوة رقم‬

Step By step to Learn C or C++ By:Hussien Ahmmed Taleb 152


‫‪.٢‬استخدام الحروف في المصفوفات الثنائية‪:‬‬
‫ال يختلف استخدام الحروف في المصفوفات الثنائية عن استخدام األرقام في المصفوفات الثنائية تستخدم في اإلدخال‬
‫حرف حرف مكونة مصفوفة حرف وحتى في الطباعة تطبع حرف حرف‬

‫طريقة التعريف )على سبيل المثال مصفوفة حرفية ثنائية حجمھا )‪( (3*3‬‬

‫ھيكلية الدالة‬
‫; ]‪char first_arraychar [3][3‬‬

‫وطريقة اإلدخال أيضا ثابتة فقط العدادات تتغير حسب حجم المصفوفة وھي‬

‫‪c++‬‬ ‫البرمجة بلغة‬ ‫‪c‬‬ ‫البرمجة بلغة‬


‫;]‪1. char first_arrychar [3][3‬‬ ‫;]‪1.char first_arrychar [3][3‬‬
‫)‪2.for (i=0;i<3;i++‬‬ ‫)‪2.for (i=0;i<3;i++‬‬
‫)‪3.for (j=0;j<3;j++‬‬ ‫)‪3.for (j=0;j<3;j++‬‬
‫; )]‪4.scanf("%c",& first_arry[i][j‬‬ ‫; ]‪4.cin>> first_arrychar [i][j‬‬
‫** الحظ خطوة رقم)‪ (٤‬في اإلدخال استخدمنا الرمز )"‪ ("%c‬في لغة )‪ (C‬ألننا سندخل حرف حرف وليس سلسلة حروف‬

‫وتدخل بالشكل التالي‬

‫‪a‬‬ ‫‪f‬‬ ‫‪c‬‬


‫‪d‬‬ ‫‪e‬‬ ‫‪l‬‬
‫‪k‬‬ ‫‪m‬‬ ‫‪o‬‬

‫وطريقة الطباعة أيضا ثابتة فقط العدادات تتغير حسب حجم المصفوفة وھي‬

‫‪c++‬‬ ‫البرمجة بلغة‬ ‫‪c‬‬ ‫البرمجة بلغة‬


‫)‪1.for (i=0;i<3;i++‬‬ ‫)‪1.for (i=0;i<3;i++‬‬
‫)‪2.for (j=0;j<3;j++‬‬ ‫)‪2.for (j=0;j<3;j++‬‬
‫; )]‪3.printf("%c", first_arry[i][j‬‬ ‫; ]‪3.cout<< first_arrychar [i][j‬‬

‫** يضأ يجب رسم المصفوفة قبل البدء بالحل بأي سؤال‬

‫‪Step By step to Learn C or C++‬‬ ‫‪By:Hussien Ahmmed Taleb‬‬ ‫‪153‬‬


‫مثال‪ :‬برنامج ندخل مصفوفة )‪ (4*4‬ويحسب عدد أحرف العلة في المصفوفة‪.‬‬

‫تحليل‪:‬نفس طريقة الحل السابقة فقط نغير السلسلة إلى مصفوفة ثنائية الحجم‬

‫‪c++‬‬ ‫البرمجة بلغة‬ ‫‪c‬‬ ‫البرمجة بلغة‬


‫>‪#include<iostream.h‬‬ ‫>‪#include<stdio.h‬‬
‫)(‪main‬‬ ‫)(‪main‬‬
‫;‪{1.int i,j,k‬‬ ‫;‪{1.int i,j,k‬‬
‫; ‪2.int number_appear‬‬ ‫; ‪2.int number_appear‬‬
‫;‪3. number_appear =0‬‬ ‫;‪3. number_appear =0‬‬
‫;}'‪4.char vowel [7]={'a','o','u','i','e','n','\o‬‬ ‫;}'‪4.char vowel[7]={'a','o','u','i','e','n','\o‬‬
‫;]‪5.char a[4][4‬‬ ‫;]‪5.char a[4][4‬‬
‫)‪6.for(i=0;i<4;i++‬‬ ‫)‪6.for(i=0;i<4;i++‬‬
‫)‪7.for(j=0;j<4;j++‬‬ ‫)‪7.for(j=0;j<4;j++‬‬
‫;]‪8.cin>>a[i][j‬‬ ‫; )]‪8.scanf("%c",& a[i][j‬‬
‫)‪9.for(k=0;k<6;k++‬‬ ‫)‪9.for(k=0;k<6;k++‬‬
‫)‪10.for(i=0;i<4;i++‬‬ ‫)‪10.for(i=0;i<4;i++‬‬
‫)‪11.for(j=0;j<4;j++‬‬ ‫)‪11.for(j=0;j<4;j++‬‬
‫)]‪12.if(a[i][j]== vowel [k‬‬ ‫)]‪12.if(a[i][j]== vowel [k‬‬
‫;‪13.number_appear = number_appear +1‬‬ ‫;‪13.number_appear = number_appear +1‬‬
‫};‪14.cout<<"number appear of vowel="<< number_appear‬‬ ‫};)‪14.printf("number appear of vowel=%d", number_appear‬‬

‫توضيح الخطوات‪:‬‬

‫‪.١‬خطوة رقم )‪ (٤‬تم تعريف مصفوفة خزنا فيھا جميع أحرف العلة‬

‫‪.٢‬خطوة رقم )‪ (٩‬ھو عداد للمصفوفة التي تحوي أحرف العلة حيث يعمل ھذا العداد على مقارنة كل عنصر في‬
‫مصفوفة )‪ (vowel‬مع جميع العناصر المخزونة في المصفوفة المدخلة )‪ (a‬فكلما يجد حرف علة يتحقق الشرط‬
‫بخطوة رقم)‪ (١٢‬لكي ينفذ خطوة رقم )‪ (١٣‬ويزيد قيمة العداد بواحد داال على إضافة حرف علة‬

‫‪.٣‬خطوة رقم )‪ (١٤‬تتم طباعة عدد أحرف العلة كما في الشكل‬

‫‪Step By step to Learn C or C++‬‬ ‫‪By:Hussien Ahmmed Taleb‬‬ ‫‪154‬‬


‫ )‪(function‬‬

‫المستوى المطلوب‬
‫ٔان يكون القارئ ملما بما هو في الفصول السابقة وفاهما كل شيء‬

‫ٔ‬
‫االهداف‪:‬‬
‫عندما يكـتمل الفصل تكون بإذن ﷲ قد ٔاتممت التعرف علﻰ الدوال وفوائدها‬

‫ھدف السجالت ھوا تبسيط كتابة التعاريف مثال لو كان لشخص واحد طول وعمر واسم انظر‬
‫الفرق ٔ‬
‫مستوى االداء المطلوب بعد إنهاء الفصل‬
‫بدون سجل‬
‫إتقان هذه الفصل ‪100%‬‬
‫;‪Int length‬‬

‫;‪Int age‬‬

‫;]‪Chat name[25‬‬
‫ٔ‬
‫االدوات المطلوبة‪:‬ﺣاﺴوب شخصي لتجربة البرامج وقلم ودفتر لتسجيل المالﺣظات‬

‫الوقت المطلوب ‪ :‬ثالث ﺴاعات‬

‫‪Step By step to Learn C or C++‬‬ ‫‪By:Hussien Ahmmed Taleb‬‬ ‫‪155‬‬


‫الدوال )‪:(Function‬‬
‫تطرقنا في ما مضى على عدد كبير من الدوال الخاصة بلغة ) ‪ (c,c++‬وبينا طريقة استخدامھا ومنھا دالة )‪(pow‬‬
‫التي تستخدم ال يجاد قيمة الرقم المرفوع إلى قوى ‪ .‬وھذه الدوال كلھا مصممة من قبل مصممي لغة ) ‪ (c,c++‬لكي‬
‫يسھل العمل على مبرمجين فبدال أن يكتب المبرمج عدد من األسطر إليجاد قيمة رقم المرفوعة إلى قوى‬

‫على سبيل المثال إذا أردنا قيمة خمسة مرفوع إلى قوى ثالثة)‪ (5^3‬فبدون دالة )‪ (pow‬نجده ھكذا‬

‫إيجاد القوى بدون دالة )‪(pow‬‬


‫;‪1.int i,pow1=1‬‬
‫)‪2.For(i=0 ;i<3 ;i++‬‬
‫;‪3.Pow1=pow1*5‬‬
‫يحلھا مباشرة باستخدام الدالة )‪(pow‬‬

‫إيجاد القوى باستخدام دالة )‪(pow‬‬


‫)‪1.int Pow1=pow(5,3‬‬
‫فوجدنا الفرق الطريقة األولى استخدمنا ثالث اسطر برمجية وثاني طريقة استخدمنا سطر برمجي واحد وكانت‬
‫النتيجة نفسھا لذالك فائدة الدوال ھو تقليل األسطر البرمجية ومنع تكرار اكواد ألكثر من مرة أي لو احتاجينا على‬
‫سبيل المثال رفع رقم إلى قوى عشر مرات في برنامجنا في حال دون استخدام الدالة )‪ (pow‬فسنضطر إلى تكرار‬
‫الخطوات الثالث عشر مرات كلما احتجنا إليھا التي سوف تزيد من تعقيد البرنامج بينما بواسطة ھذه الدالة سوف تقلل‬
‫االكواد وتمنع التكرار كلما نحتاجھا نستدعيھا‪.‬إذا ھذا الكالم بالنسبة للدوال الجاھزة وأيضا نستطيع بناء دوال بنفسنا‬
‫لكي نمنع تكرار اسطر برمجية معينة ونزيد من سھولة تتبع البرنامج كما فعل المبرمجون في بناء دوال‬

‫ھيكلية دوال )‪(function‬‬


‫)‪Type name(parameter1, parameter2,…….‬‬
‫{‬
‫;‪Statement‬‬
‫;)‪Return(type‬‬
‫}‬
‫• )‪: (Type‬ھو نوع القيمة التي سوف ترجعھا الدالة )‪ (function‬بعد أن تنتھي من عملھا ‪.‬الن الدوال تكون‬
‫على نوعين‬

‫‪.١‬احدھا تعيد بعد استدعائھا وتكون بشكل التالي عند استدعائھا ويجب أن تحتوي على)‪ (return‬لتعيد قيمة للبرنامج‬

‫كود‬
‫;)‪1. reslt =name(var1,var2,…..‬‬
‫وبما أنھا تعيد قيمة يجب خزن القيمة المعادة في متغير بنفس نوع المصفوفة ا ي لو كان نوع المصفوفة ھو‬
‫)‪ (integer‬يجب أن يتم تعريف )‪ (reslt‬على انه متغير من نوع )‪ (integer‬لتخزن به النتيجة القيمة المرجعة‬

‫‪Step By step to Learn C or C++‬‬ ‫‪By:Hussien Ahmmed Taleb‬‬ ‫‪156‬‬


‫‪.٢‬الثانية ال تعيد أي قيمة للبرنامج تستدعى لتنفذ ما في داخلھا وينتھي كل شيء وال تحتوي في داخلھا على )‪(return‬‬
‫ألنھا ال تعيد أي قيمة وطريقة استدعائھا في البرنامج فقط نكتب اسم الدالة ھكذا‬

‫كود‬
‫;)‪name(var1,var2,…..‬‬
‫• )‪ :(name‬ھو اسم الدالة )‪ (function‬ويمكن أن يكون أي اسم لكن للوضوح اجعل اسم الدالة داال على‬
‫عمل دالتك فلو بنيت دالة تجمع رقميين فسمي الدالة )‪ (addition‬حتى تكون واضحة‪.‬‬
‫• )‪:(parameter‬ھي متغيرات يتم إرسال قيم إلى الدالة لنمثلھا داخل الدالة لغرض تنفيذ العرض المطلوب‬
‫وتقوم الدالة باستقبال المتغيرات المرسلة حسب الترتيب ‪.‬وكل متغير داخل الدالة يجب تعريفه مثال‪.‬‬

‫كود‬
‫;}‪Int disp(parameter1, parameter2,……) { statement‬‬

‫)‪Reslt=disp(var1 , var2 ,……..‬‬

‫كما تالحظ في االستدعاء كان بالتسلسل أسندت قيمة)‪(parameter2= var2, parameter1= var1‬‬

‫تسلسل تنفيذ الخطوات في البرنامج‬

‫تسلسل تنفيذ البرنامج يبدأ خطوة خطوة لكن الحظ عن وصول إلى الخطوة رقم )‪ (٥‬تم استدعاء دالة لذالك سينقل تنفيذ‬
‫البرنامج لھا لكي ينفذ الخطوات رقم)‪ (6—8‬التي في داخلھا ثم يعود إلى البرنامج حتى ينفذ خطوة رقم )‪٩‬و‪١٠‬و‪(١١‬‬
‫• )‪: (Statement‬ھي العملية المراد من الدالة تنفيذھا عند استدعائھا‪.‬‬
‫مھم‬

‫‪ .١‬المتغيرات المعرفة داخل الدوال تنتھي حياتھا بانتھاء تنفيذ أخر سطر في الدالة‪ .‬أي لو كان متغير)‪ (i‬في الدالة‬
‫أصبحت قيمته )‪ (i=5‬عند انتھاء تنفيذ الدالة فعند استدعاء الدالة مرة أخرى ال تكون قيمته خمسة الن حياته انتھت‬
‫بانتھاء االستدعاء السابق وعاد إلى قيمته األولية قبل التغير‪!.........‬‬
‫‪ .٢‬وتكتب الدالة بعد التصريح عن المكتبات مباشرة‬
‫‪.٣‬الدالة التي تتم كتابتھا تعامل داخل البرنامج حالھا كحال أي دالة من دوال اللغة‬

‫‪Step By step to Learn C or C++‬‬ ‫‪By:Hussien Ahmmed Taleb‬‬ ‫‪157‬‬


‫مثال‪ :‬دالة )‪ (function‬تقوم بجمع رقميين وتعيد النتيجة إلى البرنامج‪..‬؟‬
‫تحليل‪ :‬من السؤال نفھم أن ھذه الدالة تحتوي على )‪ (parameter‬اثنان كل واحد خاص برقم معين وتعيد قيمة من‬
‫نوع )‪ (integer‬وھي النتيجة‪.‬‬

‫‪c++‬‬ ‫البرمجة بلغة‬ ‫‪c‬‬ ‫البرمجة بلغة‬


‫>‪#include<iostream.h‬‬ ‫>‪#include<stdio.h‬‬
‫)‪1.int addition(int a,int b‬‬ ‫)‪1.int addi7on(int a,int b‬‬
‫{‬ ‫{‬
‫;‪2.int reslt‬‬ ‫;‪2.int reslt‬‬
‫;‪3.reslt=a+b‬‬ ‫;‪3.reslt=a+b‬‬
‫;)‪4.return( reslt‬‬ ‫;)‪4.return( reslt‬‬
‫}‬ ‫}‬
‫)(‪5.main‬‬ ‫)(‪5.main‬‬
‫;‪6.{int reslt‬‬ ‫;‪6.{int reslt‬‬
‫;)‪7.reslt= addi7on(3,7‬‬ ‫;)‪7.reslt= addi7on(3,7‬‬
‫;"‪8.cout<< reslt<<"\n‬‬ ‫;)‪8.printf("%d\n", reslt‬‬
‫;)‪9.reslt= addition(2,3‬‬ ‫;)‪9.reslt= addition(2,3‬‬
‫;"‪10.cout<< reslt<<"\n‬‬ ‫;)‪10. printf("%d\n", reslt‬‬
‫}‬ ‫}‬
‫توضيح الخطوات‪:‬‬

‫‪.١‬خطوة رقم )‪ (١‬ھي تعريف دالة لجمع متغيرين وتعيد قيمة من نوع )‪(integer‬‬

‫‪.٢‬خطوة رقم )‪ (٢‬عرفنا متغير جديد وخطوة رقم)‪ (٣‬جمعنا المتغيرين اللذان تم إرسالھما‬
‫مھم‬
‫‪.٣‬خطوة رقم )‪ (٤‬تم إعادة ھذه القيمة إلى المصفوفة‬

‫‪.٤‬خطوة رقم )‪ (٦‬تم تعريف متغير باسم )‪ (reslt‬لكي يجمل نتيجة الجمع وھناك متغير داخل الدالة)‪(addition‬‬
‫بنفس االسم لكن ال يؤثر عليه الن المتغيرات داخل الدالة تكون غير معرفة للمتغيرات داخل البرنامج وكذالك‬
‫المتغيرات داخل البرنامج تكون غير معرفة للمتغيرات داخل الدالة‬

‫‪.٥‬خطوة رقم)‪ (٧‬تم استدعاء دالة الجمع وإعطاء قيمة)‪ (a=3,b=7‬ھكذا‬

‫كود‬
‫)‪Int addition(int a,int b‬‬
‫لكي ينفذ خطوة رقم)‪ (1—4‬جامعا ً الرقمين‬
‫)‪Reslt= addition (3, 7‬‬
‫الذان تم ارسالھما للدالة في خطوة رقم )‪(٣‬‬

‫‪.٦‬خطوة رقم)‪ (٨‬تم طباعة ناتج الجمع وھو عشرة ) في لغة ‪ C‬استخدما "‪ "%d‬ال القيمة المعادة ھي ‪(integer‬‬

‫‪ .٧‬خطوة رقم)‪ (٩‬تم استدعاء دالة الجمع مرة أخرى وإعطاء قيمة)‪ (a=2,b=3‬ھكذا ويطبع ناتج الجمع في الخطوة‬
‫رقم)‪ (١٠‬وناتج الجمع ھو خمسة‬

‫‪Step By step to Learn C or C++‬‬ ‫‪By:Hussien Ahmmed Taleb‬‬ ‫‪158‬‬


‫دوال )‪ (function‬بدون نوع ‪:‬وھي الدوال التي ال تحتوي على قيمة مرجعة إلى البرنامج‪.‬أي تنفذ ما في داخلھا وال‬
‫تعيد أي قيمة إلى البرنامج قد تستقبل قيم لكنھا ال تعيد أي قيمة وتعرف ھكذا‬

‫كود‬
‫;}‪name(parameter1, parameter2,……) { statement‬‬

‫مثال‪ :‬دالة )‪ (function‬تقوم بطباعة رسالة معينة عند استدعائھا‪..‬؟‬

‫تحليل‪:‬ھذه الدالة تطبع رسالة أي ال ترجع أي قيمة وال تستقبل أي قيمة‬

‫‪c++‬‬ ‫البرمجة بلغة‬ ‫‪c‬‬ ‫البرمجة بلغة‬


‫>‪#include<iostream.h‬‬ ‫>‪#include<stdio.h‬‬
‫)(‪1. massageShow‬‬ ‫)(‪1. massageShow‬‬
‫{‬ ‫{‬
‫;;"‪2.cout>>"hi Mr.hussien‬‬ ‫;)"‪2.prinC("hi Mr.hussien‬‬
‫}‬ ‫}‬
‫)(‪3.main‬‬ ‫)(‪3.main‬‬
‫{‬ ‫{‬
‫)(‪4. massageShow‬‬ ‫)(‪4. massageShow‬‬
‫}‬ ‫}‬
‫توضيح الخطوات‪:‬‬

‫‪ .١‬خطوة رقم)‪ (١‬ھي دالة ال تستقبل أي متغير وال تعيد أي متغير لذلك تكتب ھكذا‬

‫‪ .٢‬خطوة رقم)‪ (٢‬ھي الرسالة التي سيتم طباعتھا عند استدعاء الدالة‬

‫‪.٣‬خطوة رقم)‪ (٤‬ھي استدعاء لدالة الطباعة لطباعة الرسالة المطلوبة‪.‬‬

‫مثال ‪ :‬دالة تطبع رقم معين يتم إرساله لھا‪...‬‬

‫تحليل‪:‬بما أنھا تطبع قيمة ترسل لھا أي تستقبل قيمة واحدة وال تعيد أي قيمة‪.‬‬

‫‪c++‬‬ ‫البرمجة بلغة‬ ‫‪c‬‬ ‫البرمجة بلغة‬


‫>‪#include<iostream.h‬‬ ‫>‪#include<stdio.h‬‬
‫)‪1. massageShow(int a‬‬ ‫)‪1. massageShow(int a‬‬
‫{‬ ‫{‬
‫;‪2.cout<<" the number send is="<<a‬‬ ‫;)‪2.prinC("the number send is=%d",a‬‬
‫}‬ ‫}‬
‫)(‪3.main‬‬ ‫)(‪3.main‬‬
‫{‬ ‫{‬
‫)‪4. massageShow(3‬‬ ‫)‪4. massageShow(3‬‬
‫}‬ ‫}‬
‫توضيح خطوات‪ :‬خطوة رقم واحد ھي دالة تستقبل قيمة واحد ال تعيد أي قيمة وخطوة رقم)‪(٢‬تطبع ھذه القيمة‬
‫وخطوة رقم )‪ (٤‬ھو استدعاء لھذه الدالة من داخل البرنامج‪.‬‬

‫‪Step By step to Learn C or C++‬‬ ‫‪By:Hussien Ahmmed Taleb‬‬ ‫‪159‬‬


‫اإلرسال بالقيمة واإلرسال بالمرجع‪:‬‬
‫مھم‬
‫إلرسال متغيرات إلى دالة يجب أن ترسل بأحد الطريقتين‬

‫‪ .١‬اإلرسال بالقيمة‪:‬ترسل فقط قيمة المتغير إلى الدالة أي إذا تغير قيمة المتغير داخل الدالة ال تتغير قيمته األصلية‬
‫داخل البرنامج ألننا أرسلنا فقط قيمته إلى الدالة لمعالجتھا ‪).‬أي ال تعاد أكثر من قيمة واحدة إلى البرنامج الرئيسي(‬

‫مثال‪ :‬بناء دالة تعمل نفس عمل الدالة )‪ (pow‬التي تجد قيمة الرقم مرفوع إلى أس )‪ (x^n‬ولنسميھا)‪ (powA‬معناه‬
‫ھذه الدالة عربية فقط للتميز بينھا وبين األصلية واالثنان يؤديان نفس العمل ‪.‬‬

‫‪c++‬‬ ‫البرمجة بلغة‬ ‫‪c‬‬ ‫البرمجة بلغة‬


‫>‪#include<iostream.h‬‬ ‫>‪#include<stdio.h‬‬
‫)‪1.int powA(int x,int n‬‬ ‫)‪1.int powA(int x,int n‬‬
‫{‬ ‫{‬
‫;‪2.int i, reslt =1‬‬ ‫;‪2.int i, reslt =1‬‬
‫)‪3.for(i=0 ;i<n ;i++‬‬ ‫)‪3.for(i=0 ;i<n ;i++‬‬
‫;‪4. reslt = reslt *x‬‬ ‫;‪4. reslt = reslt *x‬‬
‫;)‪5.return( reslt‬‬ ‫;)‪5.return( reslt‬‬
‫}‬ ‫}‬
‫)(‪6.main‬‬ ‫)(‪6.main‬‬
‫;‪7.{int reslt,x,n‬‬ ‫;‪7.{int reslt,x,n‬‬
‫;‪8.x=3,n=4‬‬ ‫;‪8.x=3,n=4‬‬
‫;)‪9.reslt= powA (x,n‬‬ ‫;)‪9.reslt= powA (x,n‬‬
‫;"‪10.cout<<" powA="<<reslt<<"\n‬‬ ‫; )‪10. prinC("powA=%d\n", reslt‬‬
‫;‪11.x=5,n=2‬‬ ‫;‪11.x=5,n=2‬‬
‫;)‪12.reslt= powA (x,n‬‬ ‫;)‪12.reslt= powA (x,n‬‬
‫};"‪13.cout<<" powA="<<reslt<<"\n‬‬ ‫}; )‪13. prinC("powA=%d\n", reslt‬‬
‫توضيح الخطوات‪:‬‬

‫‪.١‬خطو رقم)‪ ١‬إلى ‪ (٥‬ھي دالة إليجاد قيمة أي رقم مرفوع إلى أس‬

‫‪.٢‬خطوة رقم )‪ (٨‬ھو إعطاء قيم للمتغير وألس المراد إيجاده والمطلوب ھنا )‪ (x^n‬أي انه )‪(3^4‬‬
‫مھم‬
‫‪.٣‬خطوة رقم )‪ (٩‬تم إرسال قيم المتغيرين )‪ (x,n‬دالة )‪ (powA‬إليجاد حل ل)‪ (3^4‬ھكذا‬

‫كود‬
‫)‪Int powA (int x,int n‬‬
‫‪3‬‬ ‫‪4‬‬

‫)‪Reslt= powA (x , n‬‬

‫لو تالحظ تم إرسال قيم المتغيرين وليس المتغيرين نفسھما وھذا ما يسمى باإلرسال بالقيمة )أي أن المتغير)‪(x,n‬‬
‫في الدالة ليس نفس المتغير )‪ (x,n‬في البرنامج الرئيسي‬

‫‪.٤‬خطوة رقم)‪ (١٠‬تم إرسال قيم المتغيرين )‪ (x,n‬دالة )‪ (powA‬إليجاد حل ل)‪(5^2‬‬

‫‪Step By step to Learn C or C++‬‬ ‫‪By:Hussien Ahmmed Taleb‬‬ ‫‪160‬‬


‫مھم‬

‫‪ .٢‬اإلرسال بالمرجع‪:‬ترسل موقع المتغير إلى الدالة أي أن الدالة تستقبل المتغير نفسه المرسل بنفس االسم أو بأس‬
‫ماخر‪ .‬أي إذا تغير قيمة المتغير داخل الدالة تتغير قيمته األصلية داخل البرنامج ألننا أرسلنا موقعه إلى الدالة‬
‫والتغير يكون في محتوى الموقع ‪ .‬وشكلھا ھكذا‬

‫كود‬
‫;}‪Type name(&parameter1, &parameter2,……) { statement‬‬
‫نضع )&( قبل كل )‪ (parameter‬نريد أن نعيد التغير في قيمته للبرنامج بمعنى أننا سنستقبل الموقع‪.‬‬
‫وفائدة اإلرسال بالمرجع ھو أن اإلرسال بلقيمة ال يعيد أكثر من قيمة متغير واحد إلى البرنامج بينما باإلرسال‬
‫بالمرجع نستطيع أعادة أكثر من قيمة متغير إلى البرنامج‬

‫مثال‪ :‬دالة نرسل لھا متغيرين وتقوم بضرب كل واحد منھما بخمسة؟‬

‫تحليل‪ :‬بما إننا نريد ضرب كل واحد منھما بخمسة أي أن االثنان يتغيران ويعودان إلى الدالة األصلية بقيم جديدة‬
‫ونحن نعلم إننا نستطيع إعادة قيمة واحدة في حالة اإلرسال بالقيمة لذالك سنستخدم اإلرسال بالمرجع‬

‫‪c++‬‬ ‫البرمجة بلغة‬ ‫‪c‬‬ ‫البرمجة بلغة‬


‫>‪#include<iostream.h‬‬ ‫>‪#include<stdio.h‬‬
‫)‪1. mulByFive (int & x,int &n‬‬ ‫)‪1. mulByFive(int & x,int &n‬‬
‫{‬ ‫{‬
‫;‪2. x=x*5‬‬ ‫;‪2. x=x*5‬‬
‫;‪3. n=n*5‬‬ ‫;‪3. n=n*5‬‬
‫}‬ ‫}‬
‫)(‪5.main‬‬ ‫)(‪4.main‬‬
‫;‪6.{int x,n‬‬ ‫;‪6.{int x,n‬‬
‫;‪7. int y,z‬‬ ‫;‪7. int y,z‬‬
‫;‪8.x=3,n=4‬‬ ‫;‪8.x=3,n=4‬‬
‫;)‪9. mulByFive (x,n‬‬ ‫;)‪9. mulByFive (x,n‬‬
‫;"‪10.cout<<" x="<<x<<"\nn="<<n<<"\n‬‬ ‫; )‪10. prinC("x=%d\nn=%d\n", x,n‬‬
‫;‪11.y=5,z=2‬‬ ‫;‪11.y=5,z=2‬‬
‫;)‪12. mulByFive (y,z‬‬ ‫;)‪12. mulByFive (x,n‬‬
‫};"‪13. cout<<" y="<<y<<"\nz="<<z<<"\n‬‬ ‫}; )‪13. printf("y=%d\nz=%d\n", y,z‬‬
‫توضيح الخطوات‪:‬‬

‫‪.١‬خطوة رقم )‪ (٩‬أرسلنا قيم المتغيرين )‪ (x=3,n=4‬إلى الدالة وتم استقبالھما بالمرجع وطرب كل واحد منھما بخمسة‬
‫الحظ خطوة رقم )‪ (١٠‬سيطبع قيمھم الجديدة مضروبة بخمسة‬

‫كود‬
‫)‪Int mulByFive(int &x,int &n‬‬
‫‪x‬‬ ‫‪n‬‬

‫‪Reslt= mulByFive (x ,‬‬ ‫)‪n‬‬ ‫كما نالحظ من المخطط تم إرسال مواقع المتغيرات‬

‫‪Step By step to Learn C or C++‬‬ ‫‪By:Hussien Ahmmed Taleb‬‬ ‫‪161‬‬


‫مھم‬

‫‪ .٢‬خطوة رقم )‪ (١٢‬أرسلنا قيم المتغيرين )‪ (y=5,z=5‬إلى الدالة وتم استقبالھما بالمرجع وطرب كل واحد منھما‬
‫بخمسة الحظ خطوة رقم )‪ (١٣‬سيطبع قيمھم الجديدة مضروبة بخمسة كال احضنا ال يھتم مھما كان اسم المتغير ألنه‬
‫سيستقبل موقعه باأسم أخر ويغير على القيم التي فيه‬

‫كود‬
‫)‪Int mulByFive(int &x,int &n‬‬
‫‪y‬‬ ‫‪z‬‬

‫)‪Reslt= mulByFive (y , z‬‬ ‫كما نالحظ من المخطط تم إرسال مواقع المتغيرات‬


‫وتم التعبير عنھما بالدالة بأسماء جديدة لنفس المواقع‬

‫مھم‬

‫وباختصار إذا وضعنا )&( قبل أي )‪ .(parameter‬أي تغير في ھذا )‪ (parameter‬سوف يؤثر على قيمته في‬
‫البرنامج الرئيسي ‪.‬وإذا لم نضع ھذه العالمة يبقى محافظا على قيمته في البرنامج الرئيسي‬

‫مھم‬

‫إسناد قيم لمتغيرات الدالة )‪ : (function‬ھي قيم يتم إسنادھا للمتغيرات في الدالة فإذا لم نذكر ھذه المتغيرات في‬
‫االستدعاء يتم االعتماد على ھذه القيم وإذا ذكرناھا وأعطيناھا قيمة يأخذ القيمة التي أعطيناھا له‪.‬‬

‫مثال‪ :‬دالة تحتوي على قيمة زائدة )دالة لضرب رقمين(‪.‬؟‬

‫‪c++‬‬ ‫البرمجة بلغة‬ ‫‪c‬‬ ‫البرمجة بلغة‬


‫>‪#include<iostream.h‬‬ ‫>‪#include<stdio.h‬‬
‫)‪1.int mul (int a,int b=3‬‬ ‫)‪1.int mul (int a,int b=3‬‬
‫};)‪2. {return(a*b‬‬ ‫};)‪2. {return(a*b‬‬
‫)(‪3.main‬‬ ‫)(‪3.main‬‬
‫;)‪4. {cout<<"mul="<< mul (3‬‬ ‫;))‪4. {printf("mul=%d\n", mul (3‬‬
‫};)‪5. cout<<"\nmul="<< mul (3,5‬‬ ‫};))‪5. prinC("mul=%d", mul (3,5‬‬
‫توضيح الخطوات‪:‬‬

‫‪.١‬خطوة رقم)‪ (١‬ھي دالة تستقبل قيمتين وتكون قيمة )‪ (b‬ھي قيمة زائدة مساوية ل )‪(٣‬‬

‫‪.٢‬خطوة رقم)‪ (٤‬ھو استدعاء للدالة وأعطينا فقط قيمة )‪ (a‬ولم نذكر المتغير )‪ (b‬لذالك سيعتمد المتغير )‪ (b‬على‬
‫القيمة الزائدة وھي )‪ (٣‬ويضرب )‪ (3*3=9‬ويطبع رقم )‪ (٩‬في شاشة التنفيذ‬

‫‪.٣‬خطوة رقم )‪ (٥‬ھو استدعاء للدالة وأعطينا قيمة للمتغير )‪ (a,b‬لذاك سيھمل القيمة الزائدة ويعتمد على قيمة )‪(b=5‬‬
‫ويضرب )‪ (3*5=15‬ويطبع )‪ (١٥‬في شاشة التنفيذ‬

‫‪Step By step to Learn C or C++‬‬ ‫‪By:Hussien Ahmmed Taleb‬‬ ‫‪162‬‬


‫فائدة الدوال في تقليل عدد االكواد البرمجية وترتيب البرنامج‬
‫؟‬..‫برنامج لرسم الشجرة التالية‬: ‫مثال‬

‫عند تحليلنا لھذه الشجرة نرى أن الجزء المثلث يعاد أربع مرات معناه‬:‫تحليل‬

‫ أي أننا لدينا كودان‬.‫نفس الكود وبعده كود أخر لقاعدة الشجرة‬

!.. ‫احدھما يعاد أربع مرات وآخر مرة واحدة‬

!.......................(function) ‫الحل بدون دوال‬

c++ ‫البرمجة بلغة‬ c ‫البرمجة بلغة‬


#include<iostream.h> #include<stdio.h>
main() main()
{int i,j,k; {int i,j,k;
for(i=1;i<=10;i+=2){ for(i=1;i<=10;i+=2){
for(k=i;k<10;k+=2) for(k=i;k<10;k+=2)
cout<<" " ; printf(" " );
for(j=i;j>0;j--) for(j=i;j>0;j--)
cout<<"*" ; printf("*") ;
cout<<"\n" ; printf("\n") ;
} }
for(i=1;i<=10;i+=2){ for(i=1;i<=10;i+=2){
for(k=i;k<10;k+=2) for(k=i;k<10;k+=2)
cout<<" " ; printf(" " );
for(j=i;j>0;j--) for(j=i;j>0;j--)
cout<<"*" ; printf("*") ;
cout<<"\n" ; printf("\n") ;
} }
for(i=1;i<=10;i+=2){ for(i=1;i<=10;i+=2){
for(k=i;k<10;k+=2) for(k=i;k<10;k+=2)
cout<<" " ; printf(" " );
for(j=i;j>0;j--) for(j=i;j>0;j--)
cout<<"*" ; printf("*") ;
cout<<"\n" ; printf("\n") ;
} }
for(i=1;i<=10;i+=2){ for(i=1;i<=10;i+=2){
for(k=i;k<10;k+=2) for(k=i;k<10;k+=2)
cout<<" " ; printf(" " );
for(j=i;j>0;j--) for(j=i;j>0;j--)
cout<<"*" ; printf("*") ;
cout<<"\n" ; printf("\n") ;
} }
for(i=1;i<=6;i+=2){ for(i=1;i<=6;i+=2){
for(k=4;k>0;k-=1) for(k=4;k>0;k-=1)
cout<<" " ; printf(" " );
for(j=3;j>0;j--) for(j=3;j>0;j--)
cout<<"*" ; printf("*") ;
cout<<"\n" ;}} printf("\n") ;}}

Step By step to Learn C or C++ By:Hussien Ahmmed Taleb 163


‫الحل باستخدام دوال )‪!.......................(function‬‬

‫تحليل‪:‬ولو كتبا الكود المعاد أربع مرات في دالة واستدعيناھا أربع مرات وبعدة نكتب كود قاعدة الشجرة لتبسط‬
‫البرنامج كثيرا وأصبح واضح وسھل‪.‬‬

‫‪c++‬‬ ‫البرمجة بلغة‬ ‫‪c‬‬ ‫البرمجة بلغة‬


‫>‪#include<iostream.h‬‬ ‫>‪#include<stdio.h‬‬
‫)(‪Draw_tree‬‬ ‫)(‪Draw_tree‬‬
‫;‪{ int i,j,k‬‬ ‫;‪{ int i,j,k‬‬
‫{)‪for(i=1;i<=10;i+=2‬‬ ‫{)‪for(i=1;i<=10;i+=2‬‬
‫)‪for(k=i;k<10;k+=2‬‬ ‫)‪for(k=i;k<10;k+=2‬‬
‫; " "<<‪cout‬‬ ‫; )" "(‪printf‬‬
‫)‪for(j=i;j>0;j--‬‬ ‫)‪for(j=i;j>0;j--‬‬
‫; "*"<<‪cout‬‬ ‫; )"*"(‪printf‬‬
‫}}; "‪cout<<"\n‬‬ ‫}};) "‪printf("\n‬‬
‫)(‪main‬‬ ‫)(‪main‬‬
‫;‪{ int i,j,k‬‬ ‫;‪{ int i,j,k‬‬
‫;)(‪Draw_tree‬‬ ‫;)(‪Draw_tree‬‬
‫;)(‪Draw_tree‬‬ ‫;)(‪Draw_tree‬‬
‫;)(‪Draw_tree‬‬ ‫;)(‪Draw_tree‬‬
‫;)(‪Draw_tree‬‬ ‫;)(‪Draw_tree‬‬
‫{)‪for(i=1;i<=6;i+=2‬‬ ‫{)‪for(i=1;i<=6;i+=2‬‬
‫)‪for(k=4;k>0;k-=1‬‬ ‫)‪for(k=4;k>0;k-=1‬‬
‫; " "<<‪cout‬‬ ‫; )" "(‪printf‬‬
‫)‪for(j=3;j>0;j--‬‬ ‫)‪for(j=3;j>0;j--‬‬
‫; "*"<<‪cout‬‬ ‫; )"*"(‪printf‬‬
‫}}; "‪cout<<"\n‬‬ ‫}};) "‪printf("\n‬‬
‫لو تالحظ كم تبسط الكود وكم أصبح البرنامج واضح عندما وضعنا الجزء المكرر أربع مرات في دالة واستدعيناه‬
‫أربع مرات فكون شجرة وبقية قاعدة الشجرة كتبنا كودھا وحده‪.‬‬

‫مھم‬

‫المتغيرات التي تعرف تحت تعريف المكتبات تسمى متغيرات عامة تكون معرفة بالنسبة إلى جميع أجزاء البرنامج‬
‫أي على سبيل المثال لو عرفنا متغير اسمه )‪ (item‬يكون ھذا المتغير معرف بالنسبة إلى جميع الدوال أو إلى‬
‫البرنامج الرئيسي على خالف المتغيرات الخاصة التي تعرف داخل الدوال تكون فقط معرفة نسبة إلى الدالة‬
‫توضيح‬
‫<‪#Include‬‬ ‫>‬
‫‪Global variable‬‬ ‫متغيرات عامة معرفة إلى جميع أجزاء البرنامج‬

‫)(‪Main‬‬
‫{‬
‫‪Local variable‬‬ ‫متغيرات خاصة تكون معرفة فقط داخل الدالة ) ‪(main‬‬
‫}‬
‫وھذه المتغيرات ال تنتھي حياتھا إال بانتھاء البرنامج وتبقى محافظة على قيمھا الجديدة وال تعود لقيمتھا البدائية‪.‬‬
‫نستطيع تعريف واستخدام أكثر من دالة في برنامج واحد‪..‬‬

‫‪Step By step to Learn C or C++‬‬ ‫‪By:Hussien Ahmmed Taleb‬‬ ‫‪164‬‬


‫مھم‬

‫الدوال الزائدة‪:‬ھي مجموعة دوال لھا نفس االسم وتختلف في القيمة المعادة أو تختلف في نوع )‪(parameter‬‬
‫المستقبل للدالة‪ .‬فعند استدعاء احد ھذه الدوال وبما أنھا جميعا بنفس االسم لذالك سوف يستدعي المترجم الدالة‬
‫التي تستقبل اقرب نوع للمتغير الذي أرسلته لھا أو نفس النوع‪.‬‬

‫مثال‪ :‬برنامج يحوي على دوال اآلتية احدھا تجمع الرقمين واألخرى تقسمھم واألخرى تضربھم ولھم نفس االسم؟‬

‫‪c++‬‬ ‫البرمجة بلغة‬ ‫‪c‬‬ ‫البرمجة بلغة‬


‫>‪#include<iostream.h‬‬ ‫>‪#include<stdio.h‬‬
‫)‪1.int opera7on (int a, int b‬‬ ‫)‪1.int opera7on (int a, int b‬‬
‫};)‪2. {return(a*b‬‬ ‫};)‪2. {return(a*b‬‬
‫)‪3. float operation (float a , int b‬‬ ‫)‪3.float opera7on (float a, float b‬‬
‫};)‪4. {return(a+b‬‬ ‫};)‪4. {return(a/b‬‬
‫)‪5.float operation (float a, float b‬‬ ‫)‪5. float operation (float a , int b‬‬
‫};)‪6. {return(a/b‬‬ ‫};)‪6. {return(a+b‬‬
‫)(‪7.main‬‬ ‫)(‪7.main‬‬
‫;‪8. {int a=3,b=2‬‬ ‫;‪8. {int a=3,b=2‬‬
‫;‪9.float c=2.5,d=4.5‬‬ ‫;‪9.float c=2.5,d=4.5‬‬
‫;)‪10.cout<<"reslt="<< operation (a,b‬‬ ‫;))‪10. printf("reslt=%d\n", operation (a,b‬‬
‫;)‪11. cout<<"\n reslt="<< operation (c,d‬‬ ‫;) )‪11. printf("reslt=%f\n", operation (c,d‬‬
‫;)‪12. cout<<"\n reslt="<< operation (c,a‬‬ ‫;) )‪12. printf("reslt=%f\n", operation (c,a‬‬
‫}‬ ‫}‬
‫توضيح الخطوات‪:‬‬

‫‪.١‬خطوة رقم )‪ (١٠‬تم إرسال متغيرين )‪(a,b‬من نوع ‪ integer‬لذالك ستستقبله الدالة في الخطوة رقم )‪ (١‬وتضرب‬
‫الرقميين الن ھذه الدالة تستقبل المتغيرين من نوع ‪integer‬‬

‫كود‬
‫)‪1.int opera7on (int a, int b‬‬
‫‪3‬‬ ‫‪2‬‬
‫‪operation ( a ,‬‬ ‫)‪b‬‬

‫‪.٢‬خطوة رقم )‪ (١١‬تم إرسال متغيرين )‪(c,d‬من نوع ‪ float‬لذالك ستستقبله الدالة في الخطوة رقم )‪ (5‬وتقسم‬
‫الرقميين الن ھذه الدالة تستقبل المتغيرين من نوع ‪float‬‬

‫كود‬
‫)‪5.float operation (float a, float b‬‬
‫‪2.5‬‬ ‫‪4.5‬‬

‫‪operation ( x ,‬‬ ‫)‪n‬‬

‫‪.٣‬خطوة رقم )‪ (١٢‬تم إرسال متغيرين )‪(a‬من نوع ‪ (c ) , integer‬من نوع ‪ float‬لذالك ستستقبله الدالة في‬
‫الخطوة رقم )‪ (3‬وتجمع الرقميين الن ھذه الدالة تستقبل متغير من نوع ‪ integer‬ومتغير من نوع ‪float‬‬

‫‪Step By step to Learn C or C++‬‬ ‫‪By:Hussien Ahmmed Taleb‬‬ ‫‪165‬‬


‫مھم‬

‫استدعاء الدالة لنفسھا )‪:(Recursively‬‬


‫وتسمى أيضا )‪ ( Recursive Function‬أي استدعاء الدالة لنفسھا لمرة أو أكثر من مرة‪.‬فتكون شكلھا معروف أنھا‬
‫من داخل دالة )‪ (function‬نقوم باستدعائھا لنفسھا)أي يذكر اسمھا في داخلھا( ويكون شكلھا ھكذا‬

‫ھيكلية دوال )‪( Recursive function‬‬


‫)‪Type name(parameter1, parameter2,…….‬‬
‫{‬
‫;‪Statement‬‬
‫;) )‪Return( name(parameter1, parameter2,…….‬‬
‫}‬

‫مثال‪ :‬بناء الدالة التالية )‪ (X^n‬أي دالة )‪ (pow‬باستخدام أسلوب )‪( Recursive Function‬‬

‫تحليل‪:‬عندما يذكر )‪ ( Recursive Function‬يجب أن ترك أي فكرة في ذھننا لحل السؤال بدون استدعاء الدالة‬
‫لنفسھا‪.‬وكما نرى أن رفع الرقم ألس معي معناه ضرب الرقم بنفسه بمقدار قيمة األس مثال على ذالك‬

‫كود‬
‫‪4^3=4*4*4‬‬
‫أذن سنكون دالة تعيد استدعاء لنفسھا بمقدار قيمة األس المرفوع له الرقم وبكل استدعاء تضرب الرقم في نفسه‬

‫‪c++‬‬ ‫البرمجة بلغة‬ ‫‪c‬‬ ‫البرمجة بلغة‬


‫>‪#include<iostream.h‬‬ ‫>‪#include<stdio.h‬‬
‫) ‪1.int power(int x,int n‬‬ ‫) ‪1.int power(int x,int n‬‬
‫{‬ ‫{‬
‫)‪2.if (n>0‬‬ ‫)‪2.if (n>0‬‬
‫;)) ‪3.return(x*power(x,n-1‬‬ ‫;)) ‪3.return(x*power(x,n-1‬‬
‫‪4.else‬‬ ‫‪4.else‬‬
‫;‪5.return 1‬‬ ‫;‪5.return 1‬‬
‫}‬ ‫}‬
‫{ )(‪6.main‬‬ ‫{ )(‪6.main‬‬
‫};)‪7.cout<<power(4,3‬‬ ‫};))‪7.printf("%d",power(4,3‬‬

‫توضيح الخطوات‪:‬‬

‫‪.١‬خطوة رقم )‪ (٧‬أردنا أيجاد قيمة )‪ (4^3‬لذالك سيستدعي الدالة في الخطوة رقم )‪ (١‬جاعال قيمة )‪ (x=4,n=3‬ثم‬
‫ينفذ خطوة رقم )‪ (٢‬الن)‪ (n>0‬وينفذ بعده خطوة رقم )‪ (٣‬لكي يعيد الرقم مضروب باستدعاء الدالة لنفسھا مرسلة لھا‬
‫الرقم واألس منقص منه واحد ويستمر باالستدعاء الذاتي إلى أن تصبح قيمة األس )‪ (n=0‬يعيد عندھا واحد ويخرج‬
‫من االستدعاء الذاتي ‪.‬‬

‫‪Step By step to Learn C or C++‬‬ ‫‪By:Hussien Ahmmed Taleb‬‬ ‫‪166‬‬


‫توضيح ماذا سيحصل في خطوات رقم)‪ ١‬إلى ‪ (٥‬في حال كان )‪(x=4,n=3‬‬

‫توضيح ماذا سيحصل في خطوات رقم)‪ ١‬إلى ‪ (٥‬في حال كان )‪) (x=4,n=3‬فقط الخطوات التي سوف تنفذ بكل استدعاء(‬
‫االستدعاء األول‬
‫)‪1.power(x=4,n=3‬‬
‫‪2. n=3 is large than zero‬‬
‫))‪3. return(4*power(4,3-1‬‬
‫االستدعاء الثاني‬
‫)‪1.power(x=4,n=2‬‬
‫‪2. n=2 is large than zero‬‬
‫))‪3. return(4*4*power(4,2-1‬‬
‫االستدعاء الثالث‬
‫)‪1.power(x=4,n=1‬‬
‫‪2. n=1 is large than zero‬‬
‫))‪3. return(4*4*4*power(4,1-1‬‬
‫االستدعاء الرابع‬
‫)‪1.power(x=4,n=0‬‬
‫‪4. n=0 is equal to zero‬‬
‫)‪5. return(4*4*4*1‬‬
‫استدعت الدالة لنفسھا أربع مرات ؟ والنتيجة ھي)‪ (4*4*4*1=64‬أذن النتيجة صحيحة‪،..‬كتبنا فقط الخطوات التي‬
‫سوف تنفذ بكل استدعاء للدالة والتي لم تنفذ لم نكتبھا‬

‫مثال‪ :‬أيجاد مفكوك الرقم باستخدام أسلوب )‪..( Recursive Function‬؟‬

‫تحليل‪:‬عندما يذكر )‪ ( Recursive Function‬يجب أن ترك أي فكرة في ذھننا لحل السؤال بدون استدعاء الدالة‬
‫لنفسھا‪.‬وكما نرى أن المفكوك ھو ناتج من حاصل ضرب الرقم باألرقام التي اقل منه وصوال إلى الواحد‬

‫كود‬
‫‪5!=5*4*3*2*1‬‬

‫أذن سنكون دالة تعيد استدعاء لنفسھا بمقدار قيمة الرقم مثال مفكوك خمسة ستستدعي الدالة نفسھا خمس مرات وفي‬
‫كل مرة تستدعي الدالة لنفسھا نطرح من الرقم المرسل واحد ونضربه ببقية األرقام ھكذا‬

‫كود‬
‫!)‪N!=N*(n-1‬‬

‫‪Step By step to Learn C or C++‬‬ ‫‪By:Hussien Ahmmed Taleb‬‬ ‫‪167‬‬


‫‪c++‬‬ ‫البرمجة بلغة‬ ‫‪c‬‬ ‫البرمجة بلغة‬
‫>‪#include<iostream.h‬‬ ‫>‪#include<stdio.h‬‬
‫) ‪1.int fact (int x‬‬ ‫) ‪1.int fact (int x‬‬
‫{‬ ‫{‬
‫)‪2.if (x>1‬‬ ‫)‪2.if (x>1‬‬
‫;)) ‪3.return(x* fact (x-1‬‬ ‫;)) ‪3.return(x* fact (x-1‬‬
‫‪4.else‬‬ ‫‪4.else‬‬
‫;‪5.return 1‬‬ ‫;‪5.return 1‬‬
‫}‬ ‫}‬
‫{ )(‪6.main‬‬ ‫{ )(‪6.main‬‬
‫};)‪7.cout<<fact(4‬‬ ‫};))‪7.prinC("%d",fact(4‬‬
‫توضيح الخطوات‪:‬‬

‫• خطوة رقم )‪ (٧‬استدعينا دالة المفكوك وأردنا إيجاد مفكوك الرقم أربعة فعند الدخول للدالة نرى وجود خطوة‬
‫رقم)‪ (٣‬ھذه الخطوة تضرب الرقم بمفكوك األرقام التي اقل منه ھكذا)!)‪ (n*(n-1‬وتستمر بالضرب إلى أن‬
‫يصل إلى الرقم صفر‬

‫توضيح ماذا سيحصل في خطوات رقم)‪ ١‬إلى ‪ (٥‬في حال كان )‪(x=4,n=3‬‬

‫توضيح ماذا سيحصل في خطوات رقم)‪ ١‬إلى ‪ (٥‬في حال كان )‪) (x=4‬فقط الخطوات التي سوف تنفذ بكل استدعاء(‬
‫االستدعاء األول‬
‫)‪1.fact(x=4‬‬
‫‪2. x=4 is large than one‬‬
‫))‪3. return(4* fact (4-1‬‬
‫االستدعاء الثاني‬
‫)‪1. fact (x=3‬‬
‫‪2. x=3 is large than one‬‬
‫))‪3. return(4*3*power(3-1‬‬
‫االستدعاء الثالث‬
‫)‪1. fact (x=2‬‬
‫‪2. x=2 is large than one‬‬
‫))‪3. return(4*3*2*power(2-1‬‬
‫االستدعاء الرابع‬
‫)‪1. fact (x=1‬‬
‫‪4. x=1 is equal to one‬‬
‫)‪5. return(4*3*2*1‬‬
‫استدعت الدالة لنفسھا أربع مرات ؟ والنتيجة ھي)‪ (4*3*2*1=24‬أذن النتيجة صحيحة‪،..‬كتبنا فقط الخطوات التي‬
‫سوف تنفذ بكل استدعاء للدالة والتي لم تنفذ لم نكتبھا‬

‫مھم‬

‫أذا كانت الدالة مكونة من سطر برمجي واحد تسمى دوال سطريه )‪ (inline function‬وتكتب ھكذا‬

‫ھيكلية دوال )‪( inline function‬‬


‫)‪inlineType name(parameter1, parameter2,…….‬‬
‫};‪{Statement‬‬

‫‪Step By step to Learn C or C++‬‬ ‫‪By:Hussien Ahmmed Taleb‬‬ ‫‪168‬‬


‫مھم‬

‫المصفوفات والدوال‪:‬‬
‫يمكن إرسال مصفوفات أحادية اإلبعاد إلى الدوال بذكر اسمھا فقط بدون أبعاد ‪.‬‬

‫مثال‪:‬لو كان لدينا مصفوفة اسمھا )‪ (a‬ونريد إرسالھا إلى دالة اسمھا )‪(name‬‬

‫إرسال مصفوفة أحادية إلى الدوال )‪(function‬‬


‫;) ‪name( a‬‬

‫وطريقة استقبال المصفوفة األحادية في الدوال نضع فقط أقواس المصفوفة بدون إبعاد‬

‫إرسال مصفوفة أحادية إلى الدوال )‪(function‬‬


‫;) ][‪Type name(type a‬‬
‫• )‪ : (type‬ھو نوع المصفوفة المرسلة‬

‫يمكن إرسال مصفوفات ثنائية األبعاد إلى الدوال فقط بذكر اسمھا بدون أبعاد ‪.‬‬

‫مثال‪:‬لو كان لدينا مصفوفة اسمھا )‪ (a‬وإبعادھا )‪ (2*3‬ونريد إرسالھا إلى دالة اسمھا )‪(name‬‬

‫إرسال مصفوفة ثنائية إلى الدوال )‪(function‬‬


‫;) ‪name( a‬‬

‫وطريقة استقبال المصفوفة ثنائية األبعاد في الدوال نذكر فقط البعد الثاني ھكذا‬

‫إرسال مصفوفة ثنائية إلى الدوال )‪(function‬‬


‫;) ]‪Type name(type a[][3‬‬

‫• المصفوفات عند إرسالھا بھذه الطرق إلى الدوال ترسل بالقيمة وليس بالمرجع‪.‬إذا إي تغير على عناصر‬
‫المصفوفة في الدالة سوف ال يؤثر على القيم في البرنامج الرئيسي‪.‬أي ترسل نسخة من المصفوفة وليس‬
‫المصفوفة نفسھا‪.‬‬

‫‪Step By step to Learn C or C++‬‬ ‫‪By:Hussien Ahmmed Taleb‬‬ ‫‪169‬‬


‫؟‬..‫( جد جمع كل مصفوفة واكبر عدد بكل مصفوفة‬7) ‫ خمس مصفوفات أحادية اإلبعاد حجمھا‬:‫مثال‬

‫ كما نرى انه يريد ناتج جمع كل مصفوفة واكبر عدد فيكون البرنامج كبير جدا إذا لم نستعمل الدوال‬:‫تحليل‬
(function) ‫( ألنه لدل مصفوفة يجب كتابة كود يجد اكبر رقم ويجمع عناصر المصفوفة لكن مع الدوال‬function)
‫نكون دالة تجد مجموع عناصر المصفوفة ودالة تجد اكبر رقم ونمرر كل مصفوفة لھاتان الدالتان‬
c++ ‫البرمجة بلغة‬ c ‫البرمجة بلغة‬
#include<iostream.h> #include<stdio.h>
1.int maxN(int array1[]) 1.int maxN(int array1[])
2.{ int i, max; 2.{ int i, max;
3.max=array1[0]; 3.max=array1[0];
4.for (i=0;i<7;i++) 4.for (i=0;i<7;i++)
5.if (array1[i] > max ) 5.if (array1[i] > max )
6.max=array1[i]; 6.max=array1[i];
7.return(max);} 7.return(max);}
8.int sumN(int array1[]) 8.int sumN(int array1[])
9.{ int i, sum=0; 9.{ int i, sum=0;
10.for (i=0;i<7;i++) 10.for (i=0;i<7;i++)
11.sum=sum+ array1[i]; 11.sum=sum+ array1[i];
12.return(sum);} 12.return(sum);}
13.main() 13.main()
14.{ int i, a[7],b[7],c[7],d[7],e[7]; 14.{ int i, a[7],b[7],c[7],d[7],e[7];
15.cout<< "enter element (1) array="; 15.printf( "enter element (1) array=");
16.for (i=0;i<7;i++) 16.for (i=0;i<7;i++)
17.cin>>a[i]; 17.scanf("%d",&a[i]);
18.cout<<"max="<<maxN(a)<<"\tsum="<<sumN(a)<<"\n"; 18.printf("max=%d\tsum=%d\n",maxN(a),sumN(a) );
19.cout<< "enter element (2) array="; 19. printf( "enter element (2) array=");
20.for (i=0;i<7;i++) 20.for (i=0;i<7;i++)
21.cin>>b[i]; 21. scanf("%d",&b[i]);
22.cout<<"max="<<maxN(b)<<"\tsum="<<sumN(b)<<"\n"; 22. printf("max=%d\tsum=%d\n",maxN(b),sumN(b) );
23.cout<< "enter element (3) array="; 23. printf( "enter element (3) array=");
24.for (i=0;i<7;i++) 24.for (i=0;i<7;i++)
25.cin>>c[i]; 25. scanf("%d",&c[i]);
26.cout<<"max="<<maxN(c)<<"\tsum="<<sumN(c)<<"\n"; 26. printf("max=%d\tsum=%d\n",maxN(c),sumN(c) );
27.cout<< "enter element (4) array="; 27. printf( "enter element (4) array=");
28.for (i=0;i<7;i++) 28.for (i=0;i<7;i++)
29.cin>>d[i]; 29. scanf("%d",&d[i]);
30.cout<<"max="<<maxN(d)<<"\tsum="<<sumN(d)<<"\n"; 30. printf("max=%d\tsum=%d\n",maxN(d),sumN(d) );
31.cout<< "enter element (5) array="; 31. printf( "enter element (5) array=");
32.for (i=0;i<7;i++) 32.for (i=0;i<7;i++)
33.cin>>e[i]; 33. scanf("%d",&e[i]);
34.cout<<"max="<<maxN(e)<<"\tsum="<<sumN(e)<<"\n";} 34. printf("max=%d\tsum=%d\n",maxN(e),sumN(e) );}
:‫توضيح الخطوات‬
‫( ھي خطوات‬٧ ‫ إلى‬٢) ‫( ھي دالة تستقبل المصفوفة وتقوم بإيجاد اكبر رقم لو تالحظ الخطوات‬١) ‫خطوة رقم‬.١
‫إيجاد اكبر رقم نفسھا التي شرحناھا في المصفوفة األحادية وكيفية أيجاد اكبر رقم فقط وضعناھا في دالة‬
‫( ھي دالة لجمع عناصر المصفوفة‬٨)‫خطوة رقم‬.٢
‫( ھي استدعاء دالة اكبر رقم ودالة جمع عناصر‬١٨) ‫( وخطوة رقم‬a) ‫( ھي إدخال المصفوفة‬١٧‫ و‬١٦)‫خطوة رقم‬.٣
‫المصفوفة وطباعة الرقم وبقية الخطوات تتكرر نفس العملية بالنسبة لبقية المصفوفات‬
.‫** أالن أصبح لدينا دالة متى استدعيناھا تجد اكبر رقم‬

Step By step to Learn C or C++ By:Hussien Ahmmed Taleb 170


‫؟‬.‫ في مصفوفة أحادية‬.‫ برنامج لحساب الحرف األكثر تكرار وعدد مرات تكراره‬:‫مثال‬

‫إليجاد الحرف األكثر تكرار ضمن إي سلسلة يجب خزن جميع األحرف في مصفوفة وحساب عدد مرات‬:‫تحليل‬
.‫ظھور كل حرف في السلسلة وطباعة الحرف الذي يظھر أكثر من غيره‬

c++ ‫البرمجة بلغة‬ c ‫البرمجة بلغة‬


#include<iostream.h> #include<stdio.h>
#include<string.h> #include<string.h>
1.int i,m, max,fou; 1.int i,m, max,fou;
2.char a[45], charSaved[255]; 2.char a[45], charSaved[255];
3.repeat(char string[],int len) 3.repeat(char string[],int len)
4.{ int equavelentnumber[255]={0}; 4.{ int equavelentnumber[255]={0};
5. for(i=0;i<255;i++) 5. for(i=0;i<255;i++)
6.charSaved[i]=char(i); 6.charSaved[i]=char(i);
7.for(m=0;m<255;m++){ 7.for(m=0;m<255;m++){
8.for(i=0;i<len-1;i++) 8.for(i=0;i<len-1;i++)
9.if (( charSaved [m]== string [i]) && ( string [i] !=' ')) 9.if (( charSaved [m]== string [i]) && ( string [i] !=' '))
10.equavelentnumber [m]+= 1 ;} 10.equavelentnumber [m]+= 1 ;}
11.max= equavelentnumber [0]; 11.max= equavelentnumber [0];
12.for(i=0;i<255;i++) 12.for(i=0;i<255;i++)
13.if ( equavelentnumber [i]>max){ 13.if ( equavelentnumber [i]>max){
14.max= equavelentnumber [i]; 14.max= equavelentnumber [i];
15.fou =i;} 15.fou =i;}
16.cout<<"charcter more repeat "<< charSaved [ fou ]<<" \n"; 16.printf("charcter more repeat=%c\n", charSaved [ fou ]);
17.cout<<"it repeat="<<max <<"\n"; } 17.printf("it repeat=%d\n", max ); }
18.main() 18.main()
19.{int count1; 19.{int count1;
20.for ( count1=1; count1<6; count1++){ 20.for ( count1=1; count1<6; count1++){
21.cout<<"enter the Sting( "<<count1<<"): "; 21.printf("enter the Sting(%d): ", count1);
22.cin.getline(a ); 22.gets(a );
23.repeat(a,strlen(a));}} 23.repeat(a,strlen(a));}}
:‫توضيح الخطوات‬

‫( عرفنا متغيرات عامة معرفة لجميع أجزاء البرنامج‬١)‫خطوة رقم‬.١


‫( لنخزن فيھا جميع األحرف حتى نحسب عدد مرات ظھور كل حرف‬charSaved) ‫( عرفنا مصفوفة‬٢) ‫خطوة رقم‬.٢
‫(ھي دالة تستقبل السلسلة وطولھا وتطبع الحرف األكثر تكرار وعدد مرات تكراره‬٣) ‫خطوة رقم‬.٣
‫( لنخزن فيھا عدد مرات ظھور كل حرف‬equavelentnumber) ‫( عرفنا مصفوفة‬٤)‫خطوة رقم‬.٤
(charSaved) ‫( نخزن جميع األحرف والرموز في مصفوفة اسمھا‬٦‫ و‬٥) ‫خطوة رقم‬.٥
‫( نحسب عدد مرات ظھور كل حرف في السلسلة التي ادخلھا المستخدم ونخزن في‬١٠‫و‬٩‫و‬٨‫ و‬٧) ‫خطوة رقم‬.٦
(charSaved) ‫( وتكون ھذه المصفوفة مكافئ لمواقع كل رمز أو حرف في مصفوفة‬equavelentnumber) ‫مصفوفة‬
‫( نحسب الحرف الذي ظھر أكثر مرة ونطبع و نطبع عدد مرات ظھوره‬١٧ ‫ إلى‬١١)‫خطوة رقم‬.٧
‫( ھو ادخل المصفوفات وإرسالھا إلى الدالة‬٢٣ ‫ إلى‬٢٠) ‫خطوة رقم‬.٨
‫**ال يجوز تعريف متغير )متغير عام( واستخدامه كعداد في البرنامج‬
‫الرئيسي وھو مستخدم داخل احد الدوال كعداد أو تتغير قيمته سوف‬
‫ال ينفذ البرنامج ألنه سوف يجعل عبارة التكرار في غموض‬

Step By step to Learn C or C++ By:Hussien Ahmmed Taleb 171


‫؟‬.‫( تصاعديا‬5*5) ‫ برنامج لترتيب ثالث مصفوفات ثنائية اإلبعاد‬:‫مثال‬

(function)‫لترتيب ثالث مصفوفات ثنائية نستخدم نفس طريقة ترتيب المصفوفات الثنائية ونضعھا في دالة‬:‫تحليل‬
.‫ونستدعيھا ثالث مرات‬

c++ ‫البرمجة بلغة‬ c ‫البرمجة بلغة‬


#include<iostream.h> #include<stdio.h>
1.int const row=5; 1.int const row=5;
2.int const col=5; 2.int const col=5;
4.int i,j,k,x,l ; 4.int i,j,k,x,l ;
3.Sort2D(int array[][col]) 3.Sort2D(int array[][col])
{ {
4.for( k=0;k<row;k++){ 4.for( k=0;k<row;k++){
5. for( l=0;l<col;l++){ 5. for( l=0;l<col;l++){
6. for( i=0;i<row;i++){ 6. for( i=0;i<row;i++){
7. for ( j=0;j<col;j++){ 7. for ( j=0;j<col;j++){
8. if (array[i][j] >array[k][l]){ 8. if (array[i][j] > array[k][l]){
9.x=array[k][l]; 9.x=array[k][l];
10.array[k][l]=array[i][j]; 10.array[k][l]=array[i][j];
11.array[i][j]=x; 11.array[i][j]=x;
12.}} }} } 12.}} }} }
13. cout<<"Here is the Array after sorted\n" ; 13. printf("Here is the Array after sorted\n") ;
14. for ( i=0;i<row;i++){ 14. for ( i=0;i<row;i++){
15. for ( j=0;j<row;j++) 15. for ( j=0;j<row;j++)
16. cout<<array[i][j]<<"\t"; 16. printf("%d\t",array[i][j] );
17. cout<<"\n" ;}} 17. printf("\n" );}}
18. main() 18. main()
19.{ int array1[row][col]; 19.{ int array1[row][col];
20. int array2[row][col]; 20. int array2[row][col];
21. int array3[row][col]; 21. int array3[row][col];
22.cout<<"Here is the Array(1) befor sorted\n" ; 22. printf("Here is the Array(1) befor sorted\n") ;
23. for ( i=0;i<row;i++) 23. for ( i=0;i<row;i++)
24. for ( j=0;j<col;j++) 24. for ( j=0;j<col;j++)
25.cin>>array1[i][j] ; 25.scanf("%d",&array1[i][j] );
26.Sort2D(array1); 26.Sort2D(array1);
27.cout<<"Here is the Array (2) befor sorted\n" ; 27. printf("Here is the Array (2) befor sorted\n") ;
28. for ( i=0;i<row;i++) 28. for ( i=0;i<row;i++)
29. for ( j=0;j<col;j++) 29. for ( j=0;j<col;j++)
30.cin>>array1[i][j] ; 30. scanf("%d",&array2[i][j] );
31.Sort2D(array2); 31.Sort2D(array2);
32.cout<<"Here is the Array (3) befor sorted\n" ; 32. printf("Here is the Array (3) befor sorted\n" );
33. for ( i=0;i<row;i++) 33. for ( i=0;i<row;i++)
34. for ( j=0;j<col;j++) 34. for ( j=0;j<col;j++)
35.cin>>array3[i][j] ; 35. scanf("%d",&array3[i][j] );
36.Sort2D(array3);} 36.Sort2D(array3);}
‫( ھي دالة لترتيب عناصر مصفوفة تصاعديا‬٣)‫ خطوة رقم‬:‫توضيح الخطوات‬
‫( ھي إرسالھا لترتيبھا‬٢٦)‫( ھي إدخال للمصفوفة األولى وخطوة رقم‬٢٥ ‫ إلى‬٢٢)‫ونالحظ خطوة رقم‬
.‫ولخطوات البقية ھي إدخال بقية المصفوفات وترتيبھا‬

Step By step to Learn C or C++ By:Hussien Ahmmed Taleb 172


‫؟‬. (4*4) ‫ برنامج إليجاد أحرف العلة وعددھا في ثالث مصفوفات ثنائية اإلبعاد‬:‫مثال‬

. (function) ‫ إيجاد أحرف العلة في مصفوفات ثنائية ألكثر من واحدة نحتاج إلى دوال‬:‫تحليل‬

c++ ‫البرمجة بلغة‬ c ‫البرمجة بلغة‬


#include<iostream.h> #include<stdio.h>
1.char vowelchar [7]={'a','o','u','i','e','n','\o'}; 1.char vowelchar [7]={'a','o','u','i','e','n','\o'};
2..int i,j,k; 2..int i,j,k;
3.int indexofprintarray=1; 3.int indexofprintarray=1;
4.vowel( char a[][4]) 4.vowel( char a[][4])
5.{ cout<<"\nvowel Char in 5.{ printf("\nvowel Char in array(%d)\n
array("<<indexofprintarray<<")\n"; ",indexofprintarray) ;
6.indexofprintarray=indexofprintarray+1; 6.indexofprintarray=indexofprintarray+1;
7.int number_appear ; 7.int number_appear ;
8. number_appear =0; 8. number_appear =0;
9.for(k=0;k<6;k++) 9.for(k=0;k<6;k++)
10.for(i=0;i<4;i++) 10.for(i=0;i<4;i++)
11.for(j=0;j<4;j++) 11.for(j=0;j<4;j++)
12.if(a[i][j]== vowelchar [k]) 12.if(a[i][j]== vowelchar [k])
13.{cout<< "\n"<<a[i][j]; 13.{printf( "\n%d",a[i][j]);
14.number_appear = number_appear +1;} 14.number_appear = number_appear +1;}
15.cout<<"\nnumber appear of vowel="<< 15.printf("\nnumber appear of vowel=%d",
number_appear;}} number_appear);}}
16.main() 16.main()
17.{char a[4][4],b[4][4], c[4][4]; 17.{char a[4][4],b[4][4], c[4][4];
18.cout<<"\nenter (1) array:\n"; 18.printf("\nenter (1) array:\n");
19..for(i=0;i<4;i++) 19..for(i=0;i<4;i++)
20.for(j=0;j<4;j++) 20.for(j=0;j<4;j++)
21.cin>>a[i][j]; 21.scanf("%d",&a[i][j]);
22.cout<<"\nenter (2) array:\n"; 22. printf("\nenter (2) array:\n");
23.for(i=0;i<4;i++) 23.for(i=0;i<4;i++)
24.for(j=0;j<4;j++) 24.for(j=0;j<4;j++)
25.cin>>b[i][j]; 25. scanf("%d",&b[i][j]);
26.cout<<"\nenter (3) array:\n"; 26. printf("\nenter (3) array:\n");
27.for(i=0;i<4;i++) 27.for(i=0;i<4;i++)
28.for(j=0;j<4;j++) 28.for(j=0;j<4;j++)
29.cin>>c[i][j]; 29. scanf("%d",&c[i][j]);
30.vowel( a ); 30.vowel( a );
31.vowel( b); 31.vowel( b);
32.vowel( c);} 32.vowel( c);}
‫( كمتغير عام ونالحظ انه كلما نستدعي‬indexofprintarray) ‫( عرفنا متغير‬٣) ‫ خطوة رقم‬:‫توضيح الخطوات‬
‫( ألنه كما قلنا المتغير العام ال يموت‬٦) ‫( ستزداد قيمته بواحد في خطوة رقم‬٤) ‫( في الخطوة رقم‬vowel) ‫الدالة‬
(٣٢‫و‬٣١‫و‬٣٠)‫يبقى حيا حتى نھاية البرنامج وال يرجع إلى قيمه االبتدائية )أي بعد ثالث استدعائات لخطوة رقم‬
(٥)‫تصبح قيمته أربعة ( ونحن احتاجيناه حتى في كل استدعاء يطبع رقم المصفوفة الجاري البحث فيھا في خطوة رقم‬

‫وبقية الخطوات واضحة ومشروحة سابقا‬

Step By step to Learn C or C++ By:Hussien Ahmmed Taleb 173


‫‪(pointer) "#‬‬

‫المستوى المطلوب‬
‫ٔان يكون القارئ ملما بما هو في الفصول السابقة وفاهما كل شيء‬

‫ٔ‬
‫االهداف‪:‬‬
‫عندما يكـتمل الفصل تكون بإذن ﷲ قد ٔاتممت التعرف علﻰ المؤشرات وطريقة التعامل مع المتغيرات‬
‫عن طريق المواقع‬

‫ٔ‬
‫مستوى االداء المطلوب بعد إنهاء الفصل‬
‫إتقان هذه الفصل ‪100%‬‬

‫ٔ‬
‫االدوات المطلوبة‪:‬ﺣاﺴوب شخصي لتجربة البرامج وقلم ودفتر لتسجيل المالﺣظات‬

‫الوقت المطلوب ‪ :‬ثالث ﺴاعات‬

‫‪Step By step to Learn C or C++‬‬ ‫‪By:Hussien Ahmmed Taleb‬‬ ‫‪174‬‬


‫المؤشرات‪:‬‬
‫ھو إشارة أو تأشير على موقع في الذاكرة‪ .‬عرفنا سابقا إن كل متغير أو كل عنصر في المصفوفة يخزن في الذاكرة‬
‫بموقع ذو عنوان معين والمؤشر سوف يؤشر على ھذا العنوان ويمكنا من الوصول إلى القيمة المخزنة في داخله‪.‬‬

‫المؤشر‬ ‫عنوان الموقع‬ ‫محتواه‬


‫‪0x244f23e8‬‬ ‫‪data‬‬

‫المؤشر يؤشر على عنوان المتغير في الذاكرة ويحمل قيمة ھذا العنوان وھو ھنا )‪(0x244f23e8‬‬

‫المؤشرات والمتغيرات‪:‬‬
‫المتغيرات تخزن في الذاكرة ويمكن أن نؤشر على قيمھا بواسطة )‪ (pointer‬ونتالعب بقيمة ھذا الموقع بواسطته‬
‫وتكون طريقة تعريف )‪ (pointer‬مع المتغيرات ھكذا‪.‬‬

‫ھيكلية المؤشر‬
‫‪Type *ptr=&var‬‬
‫• )‪ : (ptr‬ھو اسم المؤشر وقد يكون أي اسم يعرفه المستخدم ويجب وضع عالمة النجمة )*( قبله‬
‫• )‪ :(Type‬ھو نوع المؤشر ويكون نوعه نفس نوع المتغير الذي يؤشر عليه‬
‫• )‪ :(var‬ھو اسم المتغير الذي نريد أن يؤشر عليه المؤشر ويجب وضع عالمة )&( قبله عندما نجعل المؤشر‬
‫يؤشر عليه الن وضع ھذه العالمة قبل أي متغير معناه المطلوب عنوان المتغير وليس قيمة المتغير نفسه‬
‫والمؤشرات تؤشر على العناوين المتغيرات فلو وضعنا ھذه العالمة أمام أي متغير في الطباعة سيطبع موقع‬
‫المتغير وليس قيمته‪.‬‬

‫مثال‪ :‬لو كان لدينا متغير )‪ (x=5‬ويؤشر عليه مؤشر )‪ (ptr‬بالشكل التالي فيكون المخطط ھكذا‬

‫كود‬
‫;‪int x=5‬‬
‫;‪int *ptr=&x‬‬

‫اسم المؤشر‬ ‫العنوان الذي يؤشر عليه‬


‫‪ptr‬‬ ‫‪0x244f23e8‬‬ ‫عنوان الموقع اسم المتغير‬ ‫محتواه‬
‫‪x‬‬ ‫‪0x244f23e8‬‬ ‫‪5‬‬

‫• الموقع الذي يؤشر عليه ) ‪ (ptr‬ھو )‪ (0x244f23e8‬ومحتواه ھو )‪(٥‬‬


‫• للوصول على عنوان الموقع نكتب )‪ (ptr‬أو نكتب ) ‪ ( &x‬الن االثنان أصبح لھما نفس الموقع‪.‬‬
‫• للوصول على محتويات الموقع نكتب ) ‪ (*ptr‬أو نكتب )‪ (x‬الن االثنان أصبح لھما نفس القيمة‪.‬‬

‫‪Step By step to Learn C or C++‬‬ ‫‪By:Hussien Ahmmed Taleb‬‬ ‫‪175‬‬


‫مثال‪ :‬تأشير على موقع متغير وطباعة قيمته‪.‬‬
‫‪c++‬‬ ‫البرمجة بلغة‬ ‫‪c‬‬ ‫البرمجة بلغة‬
‫>‪#include<iostream.h‬‬ ‫>‪#include<stdio.h‬‬
‫)(‪main‬‬ ‫)(‪main‬‬
‫;‪1.{int x=5‬‬ ‫;‪1.{int x=5‬‬
‫;‪2.int *ptr=&x‬‬ ‫;‪2.int *ptr=&x‬‬
‫;‪3.cout<<"location Ptr="<<ptr‬‬ ‫;)‪3.printf("location Ptr=%d",ptr‬‬
‫;‪4.cout<<"\nlocation var="<<&x‬‬ ‫;)‪4.printf("\nlocation var=%d ",&x‬‬
‫;‪5.cout<<"\nvalue Ptr="<<*ptr‬‬ ‫;)‪5.printf("\nvalue Ptr=%d ",*ptr‬‬
‫;‪6.cout<<"\n value var="<<x‬‬ ‫;)‪6.printf("\n value var=%d",x‬‬
‫}‬ ‫}‬
‫توضيح الخطوات‪:‬‬

‫‪.١‬خطوة رقم )‪ (٢‬جعلنا المؤشر)‪ (ptr‬يؤشر على موقع المتغير )‪(x‬‬

‫‪.٢‬خطوة رقم )‪ (٣‬طبعنا عنوان الموقع الذي يؤشر عليه المؤشر )‪ (ptr‬وھو نفس عنوان موقع المتغير )‪ (x‬ألنھما‬
‫يؤشران على نفس الموقع‪.‬أي أننا إذا كتبنا فقط اسم المؤشر سيطبع الموقع الذي يؤشر عليه‬

‫‪.٣‬خطوة رقم )‪ (٤‬طبعنا عنوان المتغير )‪ (x‬ألننا إذا وضعنا عالمة )&( قبل أي متغير سيطبع موقعه‬

‫‪.٤‬خطوة رقم )‪ (٥‬طبعنا القيمة التي يؤشر عليھا المؤشر)‪ (ptr‬وھي نفس قيمة المتغير )‪ (x‬ألنھما يؤشران على نفس‬
‫الموقع‪ .‬أي أننا إذا كتبنا نجمة قبل اسم المؤشر)‪ (ptr‬سيطبع محتوى الموقع الذي يؤشر عليه‬

‫‪.٥‬خطوة رقم )‪ (٦‬سيطبع قيمة المتغير )‪ (x‬شاھد شاشة التنفيذ‬

‫مثال ‪ :‬تغير محتويات المتغير )‪ (g‬بواسطة المؤشر‪.‬؟‬

‫‪c++‬‬ ‫البرمجة بلغة‬ ‫‪c‬‬ ‫البرمجة بلغة‬


‫>‪#include<iostream.h‬‬ ‫>‪#include<stdio.h‬‬
‫)(‪main‬‬ ‫)(‪main‬‬
‫;‪1.{int g=5‬‬ ‫;‪1.{int g=5‬‬
‫;‪2.int *ptr=&g‬‬ ‫;‪2.int *ptr=&g‬‬
‫;‪3. *ptr=32‬‬ ‫;‪3. *ptr=32‬‬
‫};‪4.cout<<"\nx="<<g‬‬ ‫};)‪4.printf("\nx=%d ",g‬‬

‫توضيح الخطوات‪:‬‬

‫‪.١‬خطوة رقم)‪ (٢‬جعلنا المؤشر يشير إلى موقع المتغير )‪(g‬‬

‫‪.٢‬خطوة رقم )‪ (٣‬وضعنا قيمة جديدة في الموقع الذي يؤشر عليه المؤشر )‪ (*ptr‬وھو موقع المتغير )‪(g‬‬

‫‪Step By step to Learn C or C++‬‬ ‫‪By:Hussien Ahmmed Taleb‬‬ ‫‪176‬‬


‫مھم‬

‫)‪-:(NEW‬ھي دالة تستخدم لحجز مكان في الذاكرة لمؤشر معين الن المؤشرات بطبيعتھا سوف تؤشر على‬
‫مواقع متغيرات ولن تحجز مواقع أما مع ھذا اإليعاز نستطيع حجز موقع للمؤشر وتعريفھا بالشكل التالي‬

‫ھيكلية المؤشر‬
‫]‪Type *ptr=new type[size‬‬
‫• )‪ : (ptr‬ھو اسم المؤشر وقد يكون أي اسم يعرفه المستخدم ويجب وضع عالمة النجمة )*( قبله‬
‫• )‪ :(Type‬ھو نوع المؤشر ويكون نوعه نفس نوع المتغير الذي يؤشر عليه‬
‫• )‪ :(size‬ھو الحجم أو عدد الموقع الذي سوف نحجزه للمؤشر في الذاكرة ‪.‬‬
‫•‬

‫مثال ‪ :‬تكوين مؤشر جديد وحجز مكان جديد له وإبدال بين محتوى المؤشر ومحتويات المتغير )‪.(g‬؟‬

‫‪c++‬‬ ‫البرمجة بلغة‬ ‫‪c‬‬ ‫البرمجة بلغة‬


‫>‪#include<iostream.h‬‬ ‫>‪#include<stdio.h‬‬
‫)(‪main‬‬ ‫)(‪main‬‬
‫;‪1.{int g=15,item‬‬ ‫;‪1.{int g=15,item‬‬
‫;]‪2.int *ptr=new int [1‬‬ ‫;]‪2.int *ptr=new int [1‬‬
‫;‪3. *ptr=32‬‬ ‫;‪3. *ptr=32‬‬
‫;‪4.item=*ptr‬‬ ‫;‪4.item=*ptr‬‬
‫;‪5.*ptr=g‬‬ ‫;‪5.*ptr=g‬‬
‫;‪6.g=item‬‬ ‫;‪6.g=item‬‬
‫};‪7.cout<<"\ng="<<g<<"\n*ptr="<<*ptr‬‬ ‫};)‪7.printf("\ng=%d\n*ptr=%d",g,*ptr‬‬
‫توضيح الخطوات‪:‬‬
‫‪.١‬خطوة رقم)‪ (٢‬جعلنا المؤشر يشير إلى موقع جديد ‪.‬وخطوة لرقم)‪ (٣‬خزنا بالموقع قيمة )‪(٣٢‬‬
‫‪.٢‬خطوة رقم )‪ (٤‬وضعنا قيمة المؤشر )‪ (*ptr‬في متغير مؤقت لإلبدال‬
‫‪.٣‬خطوة رقم )‪(٥‬وضعنا قيمة المتغير )‪ (g‬في الموقع الذي يؤشر عليه المؤشر )‪(*ptr‬‬
‫‪.٤‬خطوة رقم )‪ (٦‬وضعنا قيمة المؤشر التي خزناھا في متغير مؤقت إلى متغير)‪(g‬‬

‫قبل اإلبدال‬ ‫بعد اإلبدال‬

‫عنوان الموقع اسم المؤشر‬ ‫محتواه‬ ‫عنوان الموقع اسم المؤشر‬ ‫محتواه‬
‫‪ptr‬‬ ‫‪0x244f23e8‬‬ ‫‪32‬‬ ‫‪ptr‬‬ ‫‪0x244f23e8‬‬ ‫‪15‬‬
‫‪1‬‬

‫عنوان الموقع اسم المتغير‬ ‫محتواه‬ ‫عنوان الموقع اسم المتغير‬ ‫محتواه‬
‫‪item‬‬ ‫‪0x244f23a2‬‬ ‫فارغ‬ ‫‪item‬‬ ‫‪0x244f23a2‬‬ ‫‪32‬‬
‫‪3‬‬
‫‪2‬‬ ‫عنوان الموقع اسم المتغير‬ ‫محتواه‬
‫عنوان الموقع اسم المتغير‬ ‫محتواه‬
‫‪g‬‬ ‫‪0x244f23b4‬‬ ‫‪15‬‬ ‫‪g‬‬ ‫‪0x244f23b4‬‬ ‫‪32‬‬

‫‪Step By step to Learn C or C++‬‬ ‫‪By:Hussien Ahmmed Taleb‬‬ ‫‪177‬‬


‫مھم‬
‫المؤشرات والمصفوفات‪:‬‬
‫المصفوفات األحادية والمؤشرات‪ :‬عرفنا أن المصفوفة األحادية ھي مجموعة من المواقع المتتالية المحجوزة في‬
‫الذاكرة ويمكن أن نستخدم المؤشر مع المصفوفة األحادية وجعله يؤشر على احد القيم وسھولة تمريره على جميع‬
‫العناصر فقط نزيد قيمة عنوان المؤشر بواحد فينتقل المؤشر ليؤشر على الموقع التالي الذي يليه‪.‬‬

‫مثال توضيحي ‪:‬لو عرفنا المصفوفة التالية حجمھا خمسة عناصر وجعلنا المؤشر يؤشر على أول عنصر بالمصفوفة‬

‫كود‬
‫;}‪Int first_array[5]={34,26,43,23,54‬‬
‫;]‪int *ptr=& first_array[0‬‬
‫وافترضنا أن أول عنصر في المصفوفة خزن بموقع )‪(18126‬‬

‫مواقع خاليا الذاكرة‬


‫مواقع عناصر المصفوفة‬ ‫الموقع‬ ‫محتواه‬
‫‪*ptr‬‬ ‫‪18125‬‬ ‫‪data‬‬
‫]‪first_array [0‬‬ ‫‪18126‬‬ ‫‪34‬‬
‫)‪*(ptr+1‬‬
‫]‪first_array [1‬‬ ‫‪18127‬‬ ‫‪26‬‬
‫)‪*(ptr+2‬‬
‫]‪first_array [2‬‬ ‫‪18128‬‬ ‫‪43‬‬
‫)‪*(ptr+3‬‬
‫]‪first_array [3‬‬ ‫‪18129‬‬ ‫‪23‬‬
‫)‪*(ptr+4‬‬ ‫]‪first_array [4‬‬ ‫‪18130‬‬ ‫‪54‬‬
‫‪18131‬‬ ‫‪data‬‬

‫اسم المؤشر‬ ‫العنوان الذي يؤشر عليه‬


‫‪ptr‬‬ ‫‪18126‬‬

‫• الحظ أن المؤشر)‪ (ptr‬يؤشر على )]‪ (first_array [0‬أي على الموقع )‪(18126‬‬
‫• إذا أردنا أن يؤشر المؤشر )‪ (ptr‬على الموقع الثاني بالمصفوفة نزيد قيمة الموقع الذي يؤشر عليه المؤشر‬
‫)‪ (ptr‬بمقدار واحد ھكذا‬

‫كود‬
‫‪18126+1‬‬
‫‪ptr+1‬‬ ‫‪18127‬‬
‫ليصبح المؤشر يؤشر على الموقع )‪ (18127‬وھو عنوان ثاني موقع بالمصفوفة‬

‫• إذا أردنا أن يؤشر المؤشر )‪ (ptr‬على الموقع الرابع بالمصفوفة نزيد قيمة الموقع الذي يؤشر عليه المؤشر‬
‫)‪ (ptr‬بمقدار ثالثة ھكذا ‪ .‬ليصبح المؤشر يؤشر على الموقع )‪ (18129‬وھو عنوان رابع موقع بالمصفوفة‬

‫كود‬
‫‪18126+3‬‬
‫‪ptr+1‬‬ ‫‪18129‬‬

‫‪Step By step to Learn C or C++‬‬ ‫‪By:Hussien Ahmmed Taleb‬‬ ‫‪178‬‬


‫مثال‪ :‬مصفوفة مكونة من خمسة عناصر أضف مقدار )‪ (١٤‬لكل عنصر باستخدام المؤشرات‪..‬؟‬

‫‪c++‬‬ ‫البرمجة بلغة‬ ‫‪c‬‬ ‫البرمجة بلغة‬


‫>‪#include<iostream.h‬‬ ‫>‪#include<stdio.h‬‬
‫)(‪main‬‬ ‫)(‪main‬‬
‫;}‪1.{ int i, first_array[5]={34,26,43,23,54‬‬ ‫;}‪1.{ int i, first_array[5]={34,26,43,23,54‬‬
‫;]‪2.int *ptr=& first_array[0‬‬ ‫;]‪2.int *ptr=& first_array[0‬‬
‫{)‪3. for(i=0;i<5;i++‬‬ ‫{)‪3. for(i=0;i<5;i++‬‬
‫;‪4. *(ptr+i)=*(ptr+i)+14‬‬ ‫;‪4. *(ptr+i)=*(ptr+i)+14‬‬
‫}};)‪5.cout<<"\n first_array["<<i<<"]="<<*(ptr+i‬‬ ‫}};))‪4.printf("\n first_array[%d]=%d",i,*(ptr+i‬‬
‫توضيح الخطوات‪:‬‬
‫‪.١‬خطوة رقم )‪ (٢‬جعلنا المؤشر )‪ (ptr‬يؤشر على عنوان أول عنصر في المصفوفة‬
‫‪.٢‬خطوة رقم )‪ (٣‬ھو عداد يعد من )‪ (0—4‬ويكرر خطوة رقم )‪ ٤‬و‪ (٥‬في كل عدة‬
‫‪.٣‬خطوة رقم )‪ (٤‬ھو إضافة مقدار )‪ (١٤‬لكل موقع من مواقع المصفوفة فمثال عند اإلضافة في الموقع الثالث تكون‬
‫قيمة )‪ (i=2‬فتكون خطوة رقم)‪ (٤‬ھكذا‬
‫كود‬
‫;‪*(ptr+2)=*(ptr+2)+14‬‬
‫;‪4. *(ptr+i)=*(ptr+i)+14‬‬
‫وبما أن المؤشر في خطوة رقم )‪ (٢‬يؤشر على أول عنصر في المصفوفة فعد إضافة قيمة )‪ (٢‬إلى عنوان الموقع‬
‫سوف يؤشر على ثالث موقع بالمصفوفة‪.‬‬

‫مثال‪ :‬مصفوفة مكونة من ثالث عناصر أجمعھا باستخدام المؤشرات‪..‬؟‬

‫‪c++‬‬ ‫البرمجة بلغة‬ ‫‪c‬‬ ‫البرمجة بلغة‬


‫>‪#include<iostream.h‬‬ ‫>‪#include<stdio.h‬‬
‫)(‪main‬‬ ‫)(‪main‬‬
‫;}‪1.{ int sum=0, first_array[3]={ 43,23,54‬‬ ‫;}‪1.{ int sum=0, first_array[3]={ 43,23,54‬‬
‫;]‪2.int *ptr=& first_array[0‬‬ ‫;]‪2.int *ptr=& first_array[0‬‬
‫;‪3. sum+=*ptr++‬‬ ‫;‪3. sum+=*ptr++‬‬
‫;‪4. sum+=*ptr++‬‬ ‫;‪4. sum+=*ptr++‬‬
‫;‪5. sum+=*ptr++‬‬ ‫;‪5. sum+=*ptr++‬‬
‫};‪6.cout<<"\n sum="<<sum‬‬ ‫};)‪6.printf("\n sum=%d ",sum‬‬
‫توضيح الخطوات‪:‬‬
‫‪.١‬خطوة رقم )‪ (٢‬جعلنا المؤشر )‪ (ptr‬يؤشر على أول عنصر في المصفوفة‬
‫‪.٢‬خطوة رقم )‪ (٣‬أضفنا قيمة أول موقع إلى قيمة المتغير )‪ (sum‬وزودنا قيمة الوقع بمقدار واحد ليؤشر على‬
‫العنصر الثاني )لو تالحظ الزيادة بعد الجمع إي يجمع قيمة الموقع األول ثم ينقل المؤشر للموقع الثاني(‬
‫‪ .٣‬خطوة رقم )‪ (٤‬أضفنا قيمة ثاني موقع إلى قيمة المتغير )‪ (sum‬وزودنا قيمة الوقع بمقدار واحد ليؤشر على‬
‫العنصر الثالث‬
‫‪ .٤‬خطوة رقم )‪ (٥‬أضفنا قيمة ثالث موقع إلى قيمة المتغير )‪ (sum‬وزودنا قيمة الوقع بمقدار واحد‬

‫‪Step By step to Learn C or C++‬‬ ‫‪By:Hussien Ahmmed Taleb‬‬ ‫‪179‬‬


‫مھم‬

‫المصفوفات الثنائية والمؤشرات‪ :‬عرفنا أن المصفوفة الثنائية ھي مجموعة من المواقع المتتالية المحجوزة في الذاكرة‬
‫ويمكن أن نستخدم المؤشر مع المصفوفة الثنائية وجعله يؤشر على احد القيم وسھولة تمريره على جميع العناصر فقط‬
‫نزيد قيمة عنوان المؤشر بواحد فينتقل المؤشر ليؤشر على الموقع التالي الذي يليه‪.‬‬

‫مثال توضيحي‪:‬لو عرفنا المصفوفة التالية حجمھا )‪ (2*2‬وجعلنا المؤشر يؤشر على أول عنصر بالمصفوفة‬

‫كود‬
‫;} }‪int first_array[2][2]={{34,26},{43,23‬‬
‫;]‪int *ptr=& first_array[0][0‬‬
‫وافترضنا أن أول عنصر في المصفوفة خزن بموقع )‪(18126‬‬

‫مواقع خاليا الذاكرة‬


‫مواقع عناصر المصفوفة‬ ‫الموقع‬ ‫محتواه‬
‫‪*ptr‬‬ ‫‪18125‬‬ ‫‪data‬‬
‫]‪first_array [0][0‬‬ ‫‪18126‬‬ ‫‪34‬‬
‫)‪*(ptr+1‬‬
‫]‪first_array [0][1‬‬ ‫‪18127‬‬ ‫‪26‬‬
‫)‪*(ptr+2‬‬
‫]‪first_array [1][0‬‬ ‫‪18128‬‬ ‫‪43‬‬
‫)‪*(ptr+3‬‬
‫]‪first_array [1][1‬‬ ‫‪18129‬‬ ‫‪23‬‬
‫‪18131‬‬ ‫‪data‬‬

‫اسم المؤشر‬ ‫العنوان الذي يؤشر عليه‬


‫‪ptr‬‬ ‫‪18126‬‬

‫• الحظ أن المؤشر)‪ (ptr‬يؤشر على )]‪ (first_array [0][0‬أي على الموقع )‪(18126‬‬
‫• إذا أردنا أن يؤشر المؤشر )‪ (ptr‬على الموقع الثاني بالمصفوفة )أي الصف األول العمود الثاني( نزيد قيمة‬
‫الموقع الذي يؤشر عليه المؤشر )‪ (ptr‬بمقدار واحد ھكذا‬

‫كود‬
‫‪18126+1‬‬
‫‪ptr+1‬‬ ‫‪18127‬‬
‫ليصبح المؤشر يؤشر على الموقع )‪ (18127‬وھو عنوان ثاني موقع بالمصفوفة‬

‫• إذا أردنا أن يؤشر المؤشر )‪ (ptr‬على الموقع الرابع بالمصفوفة )أي الصف الثاني العمود الثاني( نزيد قيمة‬
‫الموقع الذي يؤشر عليه المؤشر )‪ (ptr‬بمقدار ثالثة ھكذا ‪ .‬ليصبح المؤشر يؤشر على الموقع )‪(18129‬‬
‫وھو عنوان رابع موقع بالمصفوفة‬

‫كود‬ ‫مھم‬
‫‪ptr+1‬‬ ‫‪18126+3‬‬ ‫‪18129‬‬
‫• تعامل المصفوفة الثنائية نفس معاملة المصفوفة األحادية بالمؤشرات الن كالھما عبارة عن خاليا متسلسلة‬
‫محجوزة بالذاكرة‬

‫‪Step By step to Learn C or C++‬‬ ‫‪By:Hussien Ahmmed Taleb‬‬ ‫‪180‬‬


‫مثال‪ :‬مصفوفة حجمھا )‪ (2*2‬أضرب كل عنصر بمقدار )‪ (٤‬باستخدام المؤشرات‪..‬؟‬

‫‪c++‬‬ ‫البرمجة بلغة‬ ‫‪c‬‬ ‫البرمجة بلغة‬


‫>‪#include<iostream.h‬‬ ‫>‪#include<stdio.h‬‬
‫)(‪main‬‬ ‫)(‪main‬‬
‫;} }‪1.{ int i, j,first_array[2][2]={{34,26},{43,23‬‬ ‫;} }‪1.{ int i, j,first_array[2][2]={{34,26},{43,23‬‬
‫;]‪2.int *ptr=& first_array[0][0‬‬ ‫;]‪2.int *ptr=& first_array[0][0‬‬
‫)‪3. for(i=0;i<2*2;i++‬‬ ‫)‪3. for(i=0;i<2*2;i++‬‬
‫;‪4. *(ptr+i)=*(ptr+i)*4‬‬ ‫;‪4. *(ptr+i)=*(ptr+i)*4‬‬
‫{)‪5.for(i=0;i<2 ;i++‬‬ ‫{)‪5.for(i=0;i<2 ;i++‬‬
‫)‪6.for(j=0;j<2 ;j++‬‬ ‫)‪6.for(j=0;j<2 ;j++‬‬
‫;]‪7.cout<< first_array[i][j‬‬ ‫;)]‪7.printf("%d\t", first_array[i][j‬‬
‫}};"‪8.cout<<"\n‬‬ ‫}};)"‪8.printf("\n‬‬
‫توضيح الخطوات‪:‬‬
‫‪.١‬خطوة رقم )‪ (٢‬جعلنا المؤشر )‪ (ptr‬يؤشر على عنوان أول عنصر في المصفوفة‬
‫‪.٢‬خطوة رقم )‪ (٣‬ھو عداد يعد من )‪ (0—4‬ويكرر خطوة رقم )‪ ٤‬و‪ (٥‬في كل عدة‬
‫‪.٣‬خطوة رقم )‪ (٤‬ھو ضرب مقدار ) ‪ (٤‬لكل موقع من مواقع المصفوفة فمثال عند اإلضافة في الموقع الثالث تكون‬
‫قيمة )‪ (i=2‬فتكون خطوة رقم)‪ (٤‬ھكذا‬
‫كود‬
‫;‪*(ptr+2)=*(ptr+2)*4‬‬
‫;‪4. *(ptr+i)=*(ptr+i)*4‬‬
‫وبما أن المؤشر في خطوة رقم )‪ (٢‬يؤشر على أول عنصر في المصفوفة فعد إضافة قيمة )‪ (٢‬إلى عنوان الموقع‬
‫سوف يؤشر على ثالث موقع بالمصفوفة ‪.‬خطوة رقم )‪ ٥‬و‪٦‬و‪٧‬و‪ (٨‬ھو طباعة لعناصر المصفوفة بعد الضرب‬

‫مثال‪ :‬مصفوفة حجمھا )‪ (2*2‬أجمعھا باستخدام المؤشرات‪..‬؟‬

‫‪c++‬‬ ‫البرمجة بلغة‬ ‫‪c‬‬ ‫البرمجة بلغة‬


‫>‪#include<iostream.h‬‬ ‫>‪#include<stdio.h‬‬
‫)(‪main‬‬ ‫)(‪main‬‬
‫;} }‪1.{ int sum=0, first_array[2][2]={{34,26},{43,23‬‬ ‫;} }‪1.{ int sum=0, first_array[2][2]={{34,26},{43,23‬‬
‫;]‪2.int *ptr=& first_array[0][0‬‬ ‫;]‪2.int *ptr=& first_array[0][0‬‬
‫;‪3. sum+=*ptr++‬‬ ‫;‪3. sum+=*ptr++‬‬
‫;‪4. sum+=*ptr++‬‬ ‫;‪4. sum+=*ptr++‬‬
‫;‪5. sum+=*ptr++‬‬ ‫;‪5. sum+=*ptr++‬‬
‫;‪6. sum+=*ptr++‬‬ ‫;‪6. sum+=*ptr++‬‬
‫};‪7.cout<<"\n sum="<<sum‬‬ ‫};)‪7.printf("\n sum=%d ",sum‬‬
‫توضيح الخطوات‪:‬‬
‫‪.١‬خطوة رقم )‪ (٣‬أضفنا قيمة أول موقع )‪ (0,0‬إلى قيمة المتغير )‪ (sum‬وزودنا قيمة الوقع بمقدار واحد ليؤشر على‬
‫العنصر الثاني )‪) (0,1‬لو تالحظ الزيادة بعد الجمع إي يجمع قيمة الموقع األول ثم ينقل المؤشر للموقع الثاني(‬
‫‪ .٢‬خطوة رقم )‪ (٤‬أضفنا قيمة ثاني موقع )‪ (0,1‬إلى قيمة المتغير )‪ (sum‬وزودنا قيمة الوقع بمقدار واحد ليؤشر‬
‫على العنصر الثالث )‪(1,0‬‬
‫‪ .٣‬خطوة رقم )‪ (٥‬أضفنا قيمة ثالث)‪ (1,0‬موقع إلى قيمة المتغير )‪ (sum‬وزودنا قيمة الوقع بمقدار واحد ليؤشر‬
‫على العنصر الرابع )‪(1,1‬‬
‫‪ .٤‬خطوة رقم )‪ (٦‬أضفنا قيمة رابع موقع )‪ (1,1‬إلى قيمة المتغير )‪ (sum‬وزودنا قيمة الوقع بمقدار واحد ‪.‬‬

‫‪Step By step to Learn C or C++‬‬ ‫‪By:Hussien Ahmmed Taleb‬‬ ‫‪181‬‬


‫مھم‬

‫المؤشرات والدوال )‪(function‬‬


‫‪ .١‬الدوال والمتغيرات‪ :‬عرفنا طريقة إرسال متغير بالقيمة كيف وبالمرجع كيف تكون‪ .‬المؤشرات تمكنك من‬
‫إرسال المتغير بالمرجع أي إرسال موقع المتغير وھذه تفيد إذا كنا نريد أن نعيد أكثر من متغير إلى البرنامج‬
‫الرئيسي ونعلم إن اإلرسال بالمرجع يكون أي تغير على المتغير في الدوال يؤثر على قيمته في البرنامج‬
‫الرئيسي‬

‫لو كان لدينا متغير اسمه )‪ (a‬ونريد إرساله إلى دالة اسمھا )‪. (name‬‬

‫إرسال مصفوفة مؤشر إلى الدوال )‪(function‬‬


‫;) ‪name( &a‬‬
‫• وضع عالمة )&( قبله معناه أننا أرسلنا عنوان أول موقع ‪.‬‬

‫وطريقة استقبال المتغير في الدوال نعرف مؤشر من نفس نوع المتغير المرسل لكي يؤشر على موقعه ‪.‬‬

‫استقبال مصفوفة مؤشر إلى الدوال )‪(function‬‬


‫;)‪Type name(type *ptr‬‬
‫• )‪ :(type‬ھو نوع المتغير المرسل‬
‫• أالن أصبح ھذا المؤشر )‪ (ptr‬يؤشر على عنوان المتغير‪.‬‬

‫مثال‪ :‬تكوين دالة تستقبل وحرف صغير وتحوله إلى حرف كبير‪..‬؟‬

‫تحليل‪ :‬لتحويل حرف من صغير إلى كبير نعلم أن الفرق بين أسكي كود كل حرف صغير ونضيره الكبير ھو‬
‫)‪ (٣٢‬لذالك لتحويل إلى حرف كبير نحول الحرف إلى أسكي كود ونطرح منه )‪ (٣٢‬ونرجع نحوله إلى حرف‬
‫فيتحول إلى حرف كبير‬

‫الحل باستخدام المؤشرات‪!...........‬‬

‫‪c++‬‬ ‫البرمجة بلغة‬ ‫‪c‬‬ ‫البرمجة بلغة‬


‫>‪#include<iostream.h‬‬ ‫>‪#include<stdio.h‬‬
‫)‪1.inline toBigLeter (char *ptr‬‬ ‫)‪1.inline toBigLeter (char *ptr‬‬
‫};‪2.{*ptr=int(*ptr)-32‬‬ ‫};‪2.{*ptr=int(*ptr)-32‬‬
‫)(‪3.main‬‬ ‫)(‪3.main‬‬
‫;‪4. { char inputchar‬‬ ‫;‪4. { char inputchar‬‬
‫;‪5.cin>> inputchar‬‬ ‫;)‪5.scanf("%c",&inputchar‬‬
‫;) ‪6.toBigLeter (& inputchar‬‬ ‫;) ‪6.toBigLeter (& inputchar‬‬
‫};‪7.cout<<"Big to it is="<< inputchar‬‬ ‫};)‪7.prinC("Big to it is=%c", inputchar‬‬

‫‪Step By step to Learn C or C++‬‬ ‫‪By:Hussien Ahmmed Taleb‬‬ ‫‪182‬‬


‫الحل بدون استخدام المؤشرات‪!...........‬‬

‫‪c++‬‬ ‫البرمجة بلغة‬ ‫‪c‬‬ ‫البرمجة بلغة‬


‫>‪#include<iostream.h‬‬ ‫>‪#include<stdio.h‬‬
‫)‪1.inline toBigLeter (char charrec‬‬ ‫)‪1. inline toBigLeter (char charrec‬‬
‫};‪2.{ charrec =int( charrec )-32‬‬ ‫};‪2.{ charrec =int(charrec)-32‬‬
‫)(‪3.main‬‬ ‫)(‪3.main‬‬
‫;‪4. { char inputchar‬‬ ‫;‪4. { char inputchar‬‬
‫;‪5.cin>> inputchar‬‬ ‫;)‪5.scanf("%c",&inputchar‬‬
‫;) ‪6.toBigLeter ( inputchar‬‬ ‫;) ‪6.toBigLeter ( inputchar‬‬
‫};‪7.cout<<"Big to it is="<< inputchar‬‬ ‫};)‪7.prinC("Big to it is=%c", inputchar‬‬

‫توضيح الخطوات بالنسبة للحلين‪:‬‬


‫• خطوة رقم )‪ (١‬نسبة إلى الحل باستخدام المؤشرات‪ :‬إعالن عند دالة سطريه تستقبل موقع الحرف وتكبر‬
‫الحرف في خطوة رقم )‪(٢‬‬
‫• خطوة رقم )‪ (١‬نسبة إلى الحل بدون استخدام المؤشرات ‪:‬إعالن عند دالة سطريه تستقبل الحرف وتكبر‬
‫الحرف في خطوة رقم )‪(٢‬‬
‫• خطوة رقم )‪ (٦‬نسبة إلى الحل باستخدام المؤشرات‪ :‬إرسال عنوان المتغير )‪ (inputchar‬إلى الدالة ھكذا‬
‫كود‬ ‫•‬
‫) ‪1. toBigLeter (char *ptr‬‬ ‫•‬
‫‪x‬‬ ‫•‬
‫) ‪toBigLeter ( &x‬‬

‫• خطوة رقم )‪ (٦‬نسبة إلى الحل بدون استخدام المؤشرات‪ :‬إرسال قيمة المتغير )‪ (inputchar‬إلى الدالة‬
‫يكون ھكذا )إذا قام المستخدم بإدخال الحرف ‪ a‬مثال فيكون اإلرسال ھكذا(‬
‫كود‬ ‫•‬
‫) ‪1. toBigLeter (char ptr‬‬ ‫•‬
‫'‪'a‬‬ ‫•‬
‫مھم‬
‫) ‪toBigLeter ( x‬‬

‫• خطوة رقم )‪ (٧‬نسبة إلى الحل باستخدام المؤشرات ‪:‬سوف يطبع الحرف بعد التكبير ألننا في المؤشرات‬
‫نتعامل مع موقع المتغير فأي تغير في الدالة على الموقع يغير في قيمه المتغير في البرنامج الرئيسي‬

‫• خطوة رقم )‪ (٦‬نسبة إلى الحل بدون استخدام المؤشرات‪ :‬سوف يطبع الحرف بدون أي تكبير نفس الحرف‬
‫المدخل سوف يطبعه ألننا أرسلنا نسخة من المتغير إلى الدالة ولم نرسل المتغير نفسه فأي تغير على ھذه‬
‫النسخة ال يؤثر بقيمه المتغير في البرنامج الرئيسي‬

‫‪Step By step to Learn C or C++‬‬ ‫‪By:Hussien Ahmmed Taleb‬‬ ‫‪183‬‬


‫‪ .٢‬الدوال والمصفوفات األحادية‪ :‬عرفا سابقا طريقة التعامل مع المصفوفات في الدوال )‪(function‬‬
‫وعرفنا طريقة اإلرسال إلى الدالة وھي إرسال نسخة من المصفوفة وليس المصفوفة األصلية أي كان إرسال‬
‫بالقيمة‪ .‬أما مع المؤشرات يكون إرسال بالمرجع أي أن أي تغير على المصفوفة داخل أي دالة )‪(function‬‬
‫سوف يؤثر على المصفوفة األصلية في البرنامج الرئيسي التي أرسلت إلى الدالة للمعالجة ألن المؤشرات‬
‫تتعامل مع مواقع الذاكرة أي مواقع المتغيرات وليس نسخة منه‬

‫ترسل المصفوفة األحادية إلى الدالة بتحديد عنوان الموقع المرسل كأن يكون أننا نرسل عنوان أول موقع وفي الدالة‬
‫عندما يعرف أول موقع يستطيع التنقل إلى باقي المواقع بزيادة قيمة المؤشر بواحد كل مرة ‪ .‬ھكذا ترسل‬

‫مثال‪:‬لو كان لدينا مصفوفة اسمھا )‪ (a‬ونريد إرسالھا إلى دالة اسمھا )‪. (name‬‬

‫إرسال مصفوفة مؤشر إلى الدوال )‪(function‬‬


‫;)]‪name( &a [0‬‬
‫• في ھذه الطريقة أرسلنا عنوان أول موقع بوضع عالمة )&( قبله ‪.‬‬

‫وطريقة استقبال المصفوفة األحادية في الدوال نعرف مؤشر من نفس نوع المصفوفة المرسلة ‪.‬‬

‫استقبال مصفوفة مؤشر إلى الدوال )‪(function‬‬


‫;)‪Type name(type *ptr‬‬
‫• )‪ :(type‬ھو نوع المصفوفة المرسلة‬
‫• أالن أصبح ھذا المؤشر )‪ (ptr‬يؤشر على عنوان أول موقع بالمصفوفة‬

‫** في إرسال المصفوفة إلى الدوال قد نرسل عنوان أول موقع أو نرسل عنوان أخر موقع أو أي موقع حسب ما‬
‫نحتاجه في برنامجنا‬

‫‪Step By step to Learn C or C++‬‬ ‫‪By:Hussien Ahmmed Taleb‬‬ ‫‪184‬‬


‫؟‬. ‫ تكوين دالة تعكس تسلسل أحرف ثالث مصفوفات بالعكس وتطبعھم بعد العكس‬: ‫مثال‬

‫ بما انه يريد عكس األحرف في المصفوفة باستخدام الدوال فيجب اإلرسال بالمرجع حتى عندما يقلب أحرف‬:‫تحليل‬
. ‫( ويعود للبرنامج الرئيسي تعكس المصفوفات أيضا في البرنامج الرئيسي‬function) ‫السلسلة وعندما ينتھي من‬

c++ ‫البرمجة بلغة‬ c ‫البرمجة بلغة‬


#include<iostream.h> #include<stdio.h>
#include<string.h> #include<string.h>
1.int i; 1.int i;
2.Reverse(char *string,int len) 2.Reverse(char *string,int len)
3.{char item; 3.{char item;
4.for(i=len; i>len/2;i--){ 4.for(i=len; i>len/2;i--){
5.item=* (string); 5.item=* (string);
6.*(string )=*(string -i+(len-i)); 6.*(string )=*(string -i+(len-i));
7. *(string -i+(len-i))= item; 7. *(string -i+(len-i))= item;
8. string --;} } 8. string --;} }
9.main() 9.main()
10. { char string1[55], string2[55], string3[55]; 10. { char string1[55], string2[55], string3[55];
11.int len; 11.int len;
12.cout<<"enter string (1): "; 12.prinC("enter string (1): ");
13.cin.getline( string1,55); 13.gets ( string1 );
14.len=strlen(string1)-1; 14.len=strlen(string1)-1;
15.Reverse( &string1[len], len); 15.Reverse( &string1[len], len);
16.cout<< string1 ; 16.printf("%s",string1 );
17.cout<<"\nenter string (2): "; 17.printf("\n enter string (2): ");
18.cin.getline( string2,55); 18.gets ( string2);
19.len=strlen(string2)-1; 19.len=strlen(string2)-1;
20.Reverse( &string2[len], len); 20.Reverse( &string2[len], len);
21.cout<< string2 ; 21.printf("%s",string2 );
22.cout<<"\n enter string (3): "; 22.printf("\n enter string (3): ");
23.cin.getline( string3,55); 23.gets ( string3 );
24.len=strlen(string3)-1; 24.len=strlen(string3)-1;
25.Reverse( &string3[len], len); 25.Reverse( &string3[len], len);
26.cout<< string3 ;} 26.printf("%s",string3);}
:‫توضيح الخطوات‬

‫(ھي دالة تستقبل أخر موقع بالسلسلة وطول ھذه السلسلة‬٢) ‫خطوة رقم‬.١

‫( ھو عداد يبدأ بالعد من أخر موقع إلى المنتصف حتى يبدل المواقع األول باألخير والثاني بالقبل‬٤) ‫خطوة رقم‬.٢
‫( ويستمر باإلبدال‬٨‫و‬٧‫و‬٦‫ و‬٥) ‫األخير في خطوات رقم‬

‫( حساب طولھا‬١٤) ‫( ھي إدخال السلسلة األولى وخطوة‬١٣) ‫خطوة رقم‬.٣

‫( ھي إرسال أخر موقع بالسلسلة وطول السلسلة‬١٥) ‫خطوة رقم‬.٤

‫ھذه صورة من شاشة التنفيذ‬.‫بقية الخطوات واضحة ومكررة‬

Step By step to Learn C or C++ By:Hussien Ahmmed Taleb 185


‫مھم‬

‫‪ .٣‬الدوال والمصفوفات الثنائية‪ :‬عرفا سابقا طريقة التعامل مع المصفوفات في الدوال )‪(function‬‬
‫وعرفنا طريقة اإلرسال إلى الدالة وھي إرسال نسخة من المصفوفة الثنائية وليس المصفوفة األصلية أي كان‬
‫إرسال بالقيمة‪ .‬أما مع المؤشرات يكون إرسال بالمرجع أي أن أي تغير على المصفوفة داخل أي دالة‬
‫)‪ (function‬سوف يؤثر على المصفوفة األصلية في البرنامج الرئيسي التي أرسلت إلى الدالة للمعالجة ألن‬
‫المؤشرات تتعامل مع مواقع الذاكرة أي مواقع المتغيرات وليس نسخة منه‬

‫ترسل المصفوفة الثنائية إلى الدالة بتحديد عنوان الموقع المرسل كأن يكون أننا نرسل عنوان أول موقع وفي الدالة‬
‫عندما يعرف أول موقع يستطيع التنقل إلى باقي المواقع بزيادة قيمة المؤشر بواحد كل مرة ‪ .‬ھكذا ترسل‬

‫مثال‪:‬لو كان لدينا مصفوفة اسمھا )‪ (a‬حجمھا )‪ (4*4‬ونريد إرسالھا إلى دالة اسمھا )‪. (name‬‬

‫إرسال مؤشر مصفوفة الثنائية إلى الدوال )‪(function‬‬


‫;)]‪name( &a [0][0‬‬
‫• في ھذه الطريقة أرسلنا عنوان أول موقع بوضع عالمة )&( قبله ‪.‬‬

‫وطريقة استقبال المصفوفة الثنائية في الدوال نعرف مؤشر من نفس نوع المصفوفة المرسلة ‪.‬‬

‫استقبال مؤشر مصفوفة الثنائية إلى الدوال )‪(function‬‬


‫;)‪Type name(type *ptr‬‬
‫• )‪ :(type‬ھو نوع المصفوفة المرسلة‬
‫• أالن أصبح ھذا المؤشر )‪ (ptr‬يؤشر على عنوان أول موقع بالمصفوفة‬

‫** في إرسال المصفوفة إلى الدوال قد نرسل عنوان أول موقع أو نرسل عنوان أخر موقع أو أي موقع حسب ما‬
‫نحتاجه في برنامجنا‬

‫‪Step By step to Learn C or C++‬‬ ‫‪By:Hussien Ahmmed Taleb‬‬ ‫‪186‬‬


‫مثال ‪ :‬تكوين دالة تضع واحد مكان العدد األولي في مصفوفة )‪ (4*4‬وصفر مكان العدد الغير أولي ‪.‬؟‬

‫تحليل‪:‬بما إننا نريد تحويل المصفوفة إلى أصفار و واحدات نرسلھا كمؤشر إلى داله وھناك العدد األولي نضع مكانه‬
‫واحد والغير أولي نضع صفر‬

‫‪c++‬‬ ‫البرمجة بلغة‬ ‫‪c‬‬ ‫البرمجة بلغة‬


‫>‪#include<iostream.h‬‬ ‫>‪#include<stdio.h‬‬
‫;‪1.int i,j‬‬ ‫;‪1.int i,j‬‬
‫;‪2.int row=4‬‬ ‫;‪2.int row=4‬‬
‫;‪3.int col=4‬‬ ‫;‪3.int col=4‬‬
‫) ‪4.prime2d (int *string‬‬ ‫) ‪4.prime2d (int *string‬‬
‫;‪5.{int prime=1‬‬ ‫;‪5.{int prime=1‬‬
‫{)‪6.for(i=0; i<row*col ;i++‬‬ ‫{)‪6.for(i=0; i<row*col ;i++‬‬
‫;‪7.prime=1‬‬ ‫;‪7.prime=1‬‬
‫)‪8.for(j=2;j<*string;j++‬‬ ‫)‪8.for(j=2;j<*string;j++‬‬
‫)‪9.if( *string % j==0‬‬ ‫)‪9.if( *string % j==0‬‬
‫;‪11.prime=0‬‬ ‫;‪11.prime=0‬‬
‫;‪12.*string= prime‬‬ ‫;‪12.*string= prime‬‬
‫} };‪13. string ++‬‬ ‫} };‪13. string ++‬‬
‫)(‪14.main‬‬ ‫)(‪14.main‬‬
‫;]‪15.{ int string1[4][4‬‬ ‫;]‪15.{ int string1[4][4‬‬
‫)‪16. for(i=0; i<row ;i++‬‬ ‫)‪16. for(i=0; i<row ;i++‬‬
‫)‪17.for(j=0; j<col ;j++‬‬ ‫)‪17.for(j=0; j<col ;j++‬‬
‫;]‪18.cin>> string1[i][j‬‬ ‫;)]‪18.scanf("%d",& string1[i][j‬‬
‫;)]‪19.prime2d( &string1[0] [0‬‬ ‫;)]‪19.prime2d( &string1[0] [0‬‬
‫{)‪20.for(i=0; i<row ;i++‬‬ ‫{)‪20.for(i=0; i<row ;i++‬‬
‫)‪21.for(j=0; j<col ;j++‬‬ ‫)‪21.for(j=0; j<col ;j++‬‬
‫;"‪22.cout<< string1[i][j]<<"\t‬‬ ‫;)]‪22.printf("%d\t", string1[i][j‬‬
‫}};"‪23.cout<<"\n‬‬ ‫}};)"‪23.printf("\n‬‬
‫توضيح الخطوات‪:‬‬
‫‪.١‬خطوة رقم )‪ (٤‬دالة تستقبل عنوان أول عنصر بالمصفوفة‬

‫‪.٢‬خطوة رقم )‪ (٥‬ھو متغير إذا كان الرقم الذي عليه المؤشر عدد أولي يبقى واحد وذا كان الرقم غير أولي يتحول‬
‫إلى صفر لكي يخزن بدل قيمة العنصر‬

‫‪.٣‬خطوة رقم )‪ (٦‬ھوا عداد يمر على جميع عناصر المصفوفة لكي يتحقق من العناصر عنصر عنصر في خطوات‬
‫رقم )‪٨‬و‪ ٧‬و‪٩‬و‪١٠‬و‪١١‬و‪ (١٢‬ھل العنصر عدد أولي أم ال‬

‫‪.٤‬خطوة رقم)‪ (١٣‬لكي ينقل المؤشر على العنصر التالي بعد أن يتحقق من العنصر السابق‬

‫‪.٥‬خطوة رقم)‪ (١٩‬ھي إرسال عنوان أول عنصر بالمصفوفة بالمصفوفة إلى الدالة‬

‫شاھد شاشة التنفيذ‬

‫‪Step By step to Learn C or C++‬‬ ‫‪By:Hussien Ahmmed Taleb‬‬ ‫‪187‬‬


‫مھم‬

‫مصفوفة أحادية غير محدودة الحجم‪:‬تعلمنا سابقا أن المصفوفات حجمھا ثابت ويجب تعريفه وال يمكن كتابة‬
‫مصفوفة دون تحديد حجمھا أما مع المؤشرات نستطيع مع دالة )‪ (new‬تكوين مصفوفة غير محدودة الحجم يحدد‬
‫حجمھا المستخدم وقت التنفيذ ‪.‬حيث أن الحجم الذي نحجزه بقدر حجم المصفوفة المطلوب‬

‫لو أردنا أن نحجز مصفوفة حجمھا )‪ (٩‬عناصر من نوع ‪ integer‬وقت التنفيذ نحجز بشكل التالي‬

‫حجز مصفوفة وقت التنفيذ‬


‫;]‪int *Array=new int [9‬‬
‫أي كأنما نقول المؤشر )‪ (*Array‬يؤشر على مكان في الذاكرة حجمه تسعة‬

‫مثال ‪ :‬برنامج يطلب من المستخدم تحديد حجم المصفوفة وقت التنفيذ وبعدھا يطلب منه أن يدخل عناصر ثم يجمع‬
‫العناصر ويجد المعدل ؟‬

‫‪c++‬‬ ‫البرمجة بلغة‬ ‫‪c‬‬ ‫البرمجة بلغة‬


‫>‪#include <iostream.h‬‬ ‫>‪#include <stdio.h‬‬
‫) (‪void main‬‬ ‫) (‪void main‬‬
‫;‪1.{int sizearray,j,sum,avg‬‬ ‫;‪1.{int sizearray,j,sum,avg‬‬
‫;‪2.sum=0‬‬ ‫;‪2.sum=0‬‬
‫; "‪3.cout<<"who size the arrray\n‬‬ ‫;)"‪3.prinC("who size the arrray\n‬‬
‫; ‪4.cin>> sizearray‬‬ ‫;) ‪4.scanf("%d",& sizearray‬‬
‫;] ‪5.int *Array=new int [ sizearray‬‬ ‫;] ‪5.int *Array=new int [ sizearray‬‬
‫; "‪6.cout<<"enter the array\n‬‬ ‫;)"‪6.prinC("enter the array\n‬‬
‫)‪7.for ( j=0;j<sizearray; j++‬‬ ‫)‪7.for ( j=0;j<sizearray; j++‬‬
‫; ]‪8. cin>> Array[j‬‬ ‫;)]‪8. scanf("%d",&Array[j‬‬
‫)‪9.for (j=0;j<sizearray; j++‬‬ ‫)‪9.for (j=0;j<sizearray; j++‬‬
‫;]‪10. sum=sum+Array[j‬‬ ‫;]‪10. sum=sum+Array[j‬‬
‫;‪11. avg=sum/sizearray‬‬ ‫;‪11. avg=sum/sizearray‬‬
‫} ;‪12. cout<<"sum="<<sum<<"\navg= "<<avg‬‬ ‫} ;)‪12.prinC("sum=%d\navg=%d",sum,avg‬‬

‫توضيح الخطوات ‪:‬‬

‫‪.١‬خطوة رقم )‪ (٤‬يطلب من المستخدم إدخال حجم المصفوفة لكي يضع الحجم الذي يدخله المستخدم في خطوة رقم‬
‫)‪ (٥‬إي مثال إذا ادخل المستخدم الرقم خمسة ستكون الخطوة رقم )‪ (٤‬بشكل التالي‬

‫حجز مصفوفة وقت التنفيذ‬


‫;]‪int *Array=new int [5‬‬
‫إي حجز خمسة مواقع في الذاكرة‬

‫الحظ الشكل التالي لھذا اإلدخال في شاشة التنفيذ ‪.‬‬

‫‪Step By step to Learn C or C++‬‬ ‫‪By:Hussien Ahmmed Taleb‬‬ ‫‪188‬‬


‫مھم‬

‫مصفوفة ثنائية غير محدودة األبعاد‪ :‬نستطيع مع دالة )‪ (new‬تكوين مصفوفة ثنائية غير محدودة األبعاد يحدد‬
‫أبعادھا المستخدم وقت التنفيذ ‪.‬‬
‫لو أردنا أن نحجز مصفوفة حجمھا )‪ (3*5‬من نوع ‪ integer‬وقت التنفيذ نحجز بشكل التالي‬

‫حجز مصفوفة وقت التنفيذ‬


‫;‪1.int k‬‬
‫;]‪2.int **Array=new int *[row‬‬
‫)‪3.for (k=0 ; k< row ; k++‬‬
‫;]‪4.Array[k]=new int[columns‬‬
‫• )‪: (row‬ھو عدد الصفوف‬
‫• )‪: (columns‬ھو عدد األعمدة‬
‫تكون طريق الحجز بشكل التالي مثال لمصفوفة )‪:(3*2‬‬
‫‪.١‬في خطوة رقم )‪ (٢‬يؤشر المؤشر )‪ (Array‬على مصفوفة مؤشرات حجمھا بقدر عدد الصفوف أي )‪(٣‬‬

‫‪**Array‬‬
‫]‪new int *[0‬‬ ‫]‪new int *[1‬‬ ‫]‪new int *[2‬‬

‫‪.٢‬خطوة رقم )‪ (٣‬يبدأ بالتحرك على كل صف يؤشر عليه المؤشر )‪ (Array‬ويكون له أعمدة في خطوة رقم )‪(٤‬‬

‫‪ .A‬عندما تكون قيمة )‪ (k=0‬سيؤشر المؤشر )‪ (Array‬على أول موقع بصف ويكون العمود له طوله )‪(٢‬‬

‫]‪Array[0‬‬
‫]‪Array [0][0‬‬ ‫]‪new int *[1‬‬ ‫]‪new int *[2‬‬
‫]‪Array [1][0‬‬

‫‪ .B‬عندما تكون قيمة )‪ (k=1‬سيؤشر المؤشر )‪ (Array‬على ثاني موقع بصف ويكون العمود له طوله )‪(٢‬‬

‫]‪Array[1‬‬
‫]‪Array [0][0‬‬ ‫]‪Array [0] [1‬‬ ‫]‪new int *[2‬‬
‫]‪Array [1][0‬‬ ‫]‪Array [1][1‬‬
‫‪ .C‬عندما تكون قيمة )‪ (k=2‬سيؤشر المؤشر )‪ (Array‬على ثالث موقع بصف ويكون العمود له طوله )‪(٢‬‬

‫]‪Array[2‬‬
‫]‪Array [0][0‬‬ ‫]‪Array [0] [1‬‬ ‫]‪Array [0] [2‬‬
‫]‪Array [1][0‬‬ ‫]‪Array [1][1‬‬ ‫]‪Array [1][2‬‬

‫‪Step By step to Learn C or C++‬‬ ‫‪By:Hussien Ahmmed Taleb‬‬ ‫‪189‬‬


‫ مصفوفة ثنائية غير محدودة الحجم يحدد حجمھا المستخدم وقت التنفيذ ويجمع عناصر القطر الرئيسي ؟‬: ‫مثال‬

c++ ‫البرمجة بلغة‬ c ‫البرمجة بلغة‬


#include <iostream.h> #include <stdio.h>
void main ( ) void main ( )
1.{ int i,j,k,sum,rowN,colN; 1.{ int i,j,k,sum,rowN,colN;
2. sum=0; 2. sum=0;
3.cin>>rowN>>colN ; 3.scanf("%d%d",&rowN,&colN);
4.int **Array=new int *[ rowN ]; 4.int **Array=new int *[ rowN ];
5.for (k=0 ; k< rowN ; k++) 5.for (k=0 ; k< rowN ; k++)
6.Array[k]=new int[ colN ]; 6.Array[k]=new int[ colN ];
7.for (i=0 ; i< rowN ; i++) 7.for (i=0 ; i< rowN ; i++)
8.for (j=0; j< colN ; j++) 8.for (j=0; j< colN ; j++)
9. cin>>Array[i][j] ; 9. scanf("%d",&Array[i][j]);
10.for (i=0 ; i< rowN ; i++) 10.for (i=0 ; i< rowN ; i++)
11. for (j=0; j< colN ; j++) 11. for (j=0; j< colN ; j++)
12.if (i==j) 12.if (i==j)
13.sum=sum+ Array[i][j]; 13.sum=sum+ Array[i][j];
14. cout<<"sum="<<sum ; } 14. printf(""sum="%d",sum); }

:‫توضيح الخطوات‬

‫( ھي إدخال عدد صفوف المصفوفة وعدد أعمدتھا‬٣) ‫خطوة رقم‬ .١


‫( تكوين المصفوفة‬٦‫و‬٥‫ و‬٤) ‫خطوة رقم‬ .٢
‫( ھي إدخال المصفوفة باإلبعاد التي حددناھا‬٩‫و‬٨‫ و‬٧) ‫خطوة رقم‬ .٣
‫( ھي أيجاد عناصر القطر الرئيسي وجمعھا‬١٣‫و‬١٢‫و‬١١‫ و‬١٠) ‫خطوة رقم‬ .٤
‫( طباعة ناتج الجمع‬١٤) ‫خطو رقم‬ .٥

‫( من شاشة التنفيذ بشكل التالي‬5*5) ‫لو أدخلنا مصفوفة حجمھا‬

Step By step to Learn C or C++ By:Hussien Ahmmed Taleb 190


‫&‪(Structures) $%‬‬

‫المستوى المطلوب‬
‫ٔان يكون القارئ ملما بما هو في الفصول السابقة وفاهما كل شيء‬

‫ٔ‬
‫االهداف‪:‬‬
‫عندما يكـتمل الفصل تكون بإذن ﷲ قد ٔاتممت التعرف علﻰ السجالت وطرق اﺴتخدامها‬

‫ٔ‬
‫مستوى االداء المطلوب بعد إنهاء الفصل‬
‫إتقان هذه الفصل ‪100%‬‬

‫ٔ‬
‫االدوات المطلوبة‪:‬ﺣاﺴوب شخصي لتجربة البرامج وقلم ودفتر لتسجيل المالﺣظات‬

‫الوقت المطلوب ‪ :‬ثالث ﺴاعات‬

‫‪Step By step to Learn C or C++‬‬ ‫‪By:Hussien Ahmmed Taleb‬‬ ‫‪191‬‬


‫‪ .١‬التراكيب )‪(Structures‬‬
‫‪ Structure‬أو ‪ Structs‬ھي مجموعة بيانات )متغيرات( بأنواع مختلفة تحت اسم واحد‪ .‬تستخدم في‬
‫حال لدينا عدة مكونات أو أشخاص يشتركون في معلومات معينه متشابه فتستخدم لجمع تعاريف لعدة‬
‫أشخاص في سجل واحد يشتركون جميعا بنفس المعلومات ‪ .‬حيث نشتق ھذه المعلومات ألي شخص‬
‫نريده‪ .‬وتكون بشكل التالي‬

‫ھيكلية تراكيب )‪( Structs‬‬


‫‪struct Structures_Name‬‬
‫{‬
‫;‪Type var1‬‬
‫;‪Type var2‬‬
‫‪.‬‬
‫‪.‬‬
‫‪.‬‬
‫;‪}ObjectName1,Object_name2‬‬
‫)‪ (Structures_Name‬ھو اسم السجل وممكن أن يكون أي اسم‬ ‫•‬
‫)‪ : (Type‬ھو نوع المتغير داخل السجل وممكن وضع أنواع مختلفة من المتغيرات داخل سجل‬ ‫•‬
‫واحد ‪.‬ويكون عدد تعريف المتغيرات غير محدد‬
‫)‪: ( ObjectName‬ھو اسم الكائن المشتق من السجل وممكن أن يكون أي اسم ‪.‬وممكن اشتقاق‬ ‫•‬
‫عدد غير محدد من الكائنات من سجل واحد فقط نضع فارزة بين كل كائن وأخر‪ .‬ونبدأ بتعريف‬
‫ھذه الكائنات بعد إغالق قوس السجل‬
‫ويوضع السجل بعد تعريف المكتبات مباشرة‪.‬‬ ‫•‬

‫السجالت تدخل ضمن مواضيع البرمجة كائنيه التوجه‬

‫‪Step By step to Learn C or C++‬‬ ‫‪By:Hussien Ahmmed Taleb‬‬ ‫‪192‬‬


‫مثال‪ :‬ابسط مثال على سجل ھي سيارة )‪ (car‬لھا رقم لوحة و موديل و اسم الشركة المصنعة؟‬
‫تحليل‪ :‬لتكوين سجل لھذه المعلومات الثالثة تكتب ؟‬
‫تراكيب )‪ ( Structs‬لمكونات سيارة‬
‫‪struct car‬‬
‫{‬
‫;‪int CarNumber‬‬
‫;‪int Model‬‬
‫;]‪char factoryDesgin[20‬‬
‫;‪}HussienCar,WaeelCar‬‬

‫نالحظ أن رقم السيارة عرف كرقم ألنه رقم السيارة عبارة عن مجموعة أرقام و موديلھا عرف رقم‬
‫الن الموديل عبارة عن تاريخ وشركة المصنعة عرفت كسلسلة الن الشركة اسم المصنعة مكونة من‬
‫أحرف أو رموز ونالحظ أننا اشتقينا من السجل سيارة حسين )‪ (HussienCar‬وسيارة وائل‬
‫)‪ (WaeelCar‬ونريد أن ندخل معلومات عن سيارة كل شخص ضمن البرنامج الرئيسي فيكون‬
‫الكود بشكل التالي‬
‫تراكيب )‪ ( Structs‬لمكونات سيارة إدخال المعلومات‬
‫)(‪main‬‬
‫{‬
‫;‪HussienCar. CarNumber =18475‬‬
‫; ‪HussienCar. Model=2011‬‬
‫;)"‪Strcpy(HussienCar. factoryDesgin,"BMW‬‬
‫;‪WaeelCar. CarNumber =75645‬‬
‫; ‪WaeelCar. Model=2005‬‬
‫;)"‪Strcpy(WaeelCar. factoryDesgin,"KIA‬‬
‫}‬
‫للوصول لمعلومات أي كائن نكتب اسم الكائن ثم نقطة )‪ (.‬ثم معلومة التي نريد إدخالھا أو طباعتھا أو‬
‫التعديل عليھا أو معالجتھا‬
‫مھم‬

‫• اسم الشركة المصنعة يكون عبارة عن مصفوفة أحرف فال يمكن إسناد سلسلة أحرف مباشرة‬
‫في السجل ھكذا‬
‫إسناد قيم بطريقة خاطئة‬
‫; "‪HussienCar. factoryDesgin="BMW‬‬
‫ھذا التعبير خاطئ لذالك يجب نسخ االسم باستخدام السالسل كما في التالي‪.‬‬
‫نسخ سلسة إلى سلسلة ضمن سجل‬
‫;)"‪Strcpy(HussienCar. factoryDesgin,"BMW‬‬

‫‪Step By step to Learn C or C++‬‬ ‫‪By:Hussien Ahmmed Taleb‬‬ ‫‪193‬‬


!.............‫يمكن إدخال السلسلة بطريقة مباشرة من شاشة التنفيذ ھكذا‬
c++ ‫البرمجة بلغة‬ c ‫البرمجة بلغة‬
cin.get(HussienCar. factoryDesgin,20); gets(HussienCar. factoryDesgin);

‫؟‬.. ‫ مجموعة من أربعة مستخدمين لكل مستخدم اسم وكلمة مرور‬:‫مثال‬

‫ ( لسجل مستخدميين أربعة كل واحد له اسم وكلمة مرور‬Structs) ‫تراكيب‬


struct password_User
{
char userName[20];
int password;
}Hussien ,Waeel,Modar,Rafeed;

‫وكود البرنامج لمستخدم واحد مع اإلدخال والطباعة ألسمه وكلمة مروره يكون‬
c++ ‫البرمجة بلغة‬ c ‫البرمجة بلغة‬
#include<iostream.h> #include<stdio.h>
#include<string.h> #include<string.h>
1.struct password_User 1.struct password_User
2.{char userName[20]; 2.{char userName[20];
3.int password; }Hussien ,Waeel,Modar,Rafeed; 3.int password; }Hussien ,Waeel,Modar,Rafeed;
4.main() 4.main()
5.{cout<<"enter hussien user name: "; 5.{printf("enter hussien user name: ");
6.cin.get(Hussien. userName,25); 6. gets( Hussien. userName );
7.cout<<"\nenter hussien password: "; 7. prinC("\nenter hussien password: ");
8.cin>> Hussien. password; 8.scanf("%d",& Hussien. password );
9.cout<<"user name: "<< Hussien. userName ; 9. prinC("user name:%s ", Hussien. userName );
10.cout<<" \npassword: "<< Hussien. password ;} 10 .printf(" \npassword: %d", Hussien. password );}
:‫توضيح الخطوات‬
‫( وكلمة مروره في‬٢) ‫ (ھو سجل للمستخدمين يحوي اسم المستخدم في خطوة رقم‬١) ‫خطوة رقم‬.١
‫( بعد أن أغلقنا السجل اشتقينا أسماء أربعة مستخدمين‬٣) ‫( ونالحظ في خطوة رقم‬٣) ‫خطوة رقم‬
‫( ھي إدخال اسم المستخدم وھو عبارة عن سلسلة‬٦)‫خطوة رقم‬.٢
‫"( الن كلمة‬%d ") ‫( استخدمنا‬c)‫( ھي إدخال كلمة المرور ونالحظ في كود لغة‬٨) ‫خطوة رقم‬.٣
(integer) ‫( على أنھا متغير‬٣) ‫المرور عرفناھا في خطوة رقم‬
‫( استخدمنا الرمز‬c) ‫( ھي طباعة اسم المستخدم في شاشة التنفيذ ونالحظ في كود لغة‬٩) ‫خطوة رقم‬.٤
.‫( ألننا أدخلنا اسم المستخدم بشكل سلسلة‬%s)

Step By step to Learn C or C++ By:Hussien Ahmmed Taleb 194


‫‪ .٢‬التراكيب المتداخلة ) ‪(Structure in Structure‬‬
‫ھي طريقة وضع سجل )‪ (Structure‬داخل سجل أخر‪ .‬الفائدة منھا ھي مثال لو كان لدينا سجل‬
‫يحوي رقم سيارة ونوعھا واسم الشركة والمصنعة وكل سيارة لھا ثالث محركات بأسماء معينة فلو‬
‫جعلنا أسماء المحركات داخل سجل وھو داخل سجل معلومات السيارة لكان كل وصول إلى سجل من‬
‫سجالت السيارة تستطيع وصول إلى ثالث أنواع المحركات فيكون البرنامج مرن وواضح ‪ .‬فتكون‬
‫الھيكلية كالتالي‬

‫ھيكلية تراكيب متداخلة‬


‫‪struct Structures_Name1‬‬
‫{‬
‫‪struct Structures_Name2‬‬
‫{‬
‫;‪Type var21‬‬
‫;‪Type var22‬‬
‫;‪} ObjectName21,Object_name22‬‬
‫;‪Type var11‬‬
‫;‪Type var12‬‬
‫‪.‬‬
‫‪.‬‬
‫;‪}ObjectName11,Object_name12‬‬

‫ھنا )‪ (Structures_Name2‬واقع ھو ومحتوياته داخل )‪ (Structures_Name1‬فإذا أردنا‬


‫أن نصل إلى مكونات السجل الداخلي وھو )‪ (Structures_Name2‬فنحتاج إلى كتابة كائن من‬
‫السجل الخارجي ثم كائن من سجل الداخلي ثم مكونات السجل الداخلي ‪.‬على سبيل المثال لو أرنا‬
‫الوصول إلى )‪ (var21‬نكتب‬

‫إسناد قيم بطريقة خاطئة‬


‫;‪ObjectName11. ObjectName21.var21‬‬

‫كائن من السجل‬ ‫كائن من السجل‬ ‫متغير من السجل‬


‫الخارجي‬ ‫الداخلي‬ ‫الداخلي‬

‫‪Step By step to Learn C or C++‬‬ ‫‪By:Hussien Ahmmed Taleb‬‬ ‫‪195‬‬


‫مثال‪ :‬سجل لسيارة لھا رقم وموديل واسم الشركة وداخلة سجل لثالث محركات‪.‬؟‬

‫تراكيب )‪ ( Structs‬متداخلة لمكونات سيارة‬


‫‪struct car‬‬
‫{‬
‫‪Struct machine‬‬
‫;‪{int Type1‬‬
‫;‪int Type2‬‬
‫;‪int Type3‬‬
‫;‪}MachineCar‬‬
‫;‪int CarNumber‬‬
‫;‪int Model‬‬
‫;]‪char factoryDesgin[20‬‬
‫;‪}HussienCar,WaeelCar‬‬

‫• أالن لو أردنا الوصول إلى نوع )‪ (Type1‬من المحركات في سيارة حسين)‪ (HussienCar‬يكون الكود‬
‫كود‬
‫;‪HussienCar. MachineCar.Type1‬‬
‫لو تالحظ كتبنا أوال اسم الكائن في السجل الخارجي)‪ (HussienCar‬ثم اسم الكائن في السجل الداخلي‬
‫)‪ ( MachineCar‬ثم اسم المحرك من النوع األول )‪ (Type1‬وھذه ھي طريقة الوصول الصحيحة‬
‫• أالن لو أردنا الوصول إلى نوع )‪ (Type1‬من المحركات في سيارة وائل )‪ ( WaeelCar‬وإعطاء رقم‬
‫)‪ (554‬لھذه المحرك يكون الكود‬

‫كود‬
‫;‪WaeelCar . MachineCar.Type1=554‬‬
‫لو تالحظ كتبنا أوال اسم الكائن في السجل الخارجي )‪ ( WaeelCar‬ثم اسم الكائن في السجل الداخلي‬
‫)‪ ( MachineCar‬ثم اسم المحرك من النوع األول)‪ (Type1‬وأسندنا له قيمة‬
‫• أالن لو أردنا الوصول إلى نوع )‪ (Type2‬من المحركات في سيارة وائل )‪( WaeelCar‬‬
‫وإعطاء رقم )‪ (5544‬لھذه المحرك ولوصول لرقم سيارته وإعطائھا رقم)‪ . (4753‬يكون‬
‫الكود‬

‫كود‬
‫;‪WaeelCar . MachineCar.Type2=5544‬‬
‫‪WaeelCar .CarNumber=4753‬‬

‫‪Step By step to Learn C or C++‬‬ ‫‪By:Hussien Ahmmed Taleb‬‬ ‫‪196‬‬


‫ھذه كود إلدخال وطباعة معلومات سيارة واحدة فقط‬
c++ ‫البرمجة بلغة‬ c ‫البرمجة بلغة‬
#include<iostream.h> #include<stdio.h>
#include<string.h> #include<string.h>
struct car struct car
{struct machine {struct machine
{int Type1; {int Type1;
int Type2; int Type2;
int Type3; int Type3;
}MachineCar; }MachineCar;
int CarNumber; int CarNumber;
int Model; int Model;
char factoryDesgin[20]; char factoryDesgin[20];
}HussienCar ; }HussienCar ;
main() main()
{cout<<"enter factory design: "; {printf("enter factory design: ");
cin.get( HussienCar . factoryDesgin ,25); gets( HussienCar . factoryDesgin );
cout<<"\nenter car number: "; printf("\nenter car number: ");
cin>> HussienCar. CarNumber ; scanf("%d",& HussienCar. CarNumber) ;
cout<<"\nenter car model: "; printf("\nenter car model: ");
cin>> HussienCar. Model ; scanf("%d",& HussienCar. Model) ;
cout<<"\nenter car machine Type1: "; printf("\nenter car machine Type1: ");
cin>> HussienCar. MachineCar. Type1 ; scanf("%d",& HussienCar. MachineCar. Type1) ;
cout<<"\nenter car machine Type2: "; printf("\nenter car machine Type2: ");
cin>> HussienCar. MachineCar. Type2 ; scanf("%d",& HussienCar. MachineCar. Type2) ;
cout<<"\nenter car machine Type3: "; printf("\nenter car machine Type3: ");
cin>> HussienCar. MachineCar. Type3 ; scanf("%d",& HussienCar. MachineCar. Type3 ) ;
cout<<" \nthe information for the car is …………\n"; printf(" \nthe information for the car is …………\n");
cout<<" factory design : "<< HussienCar . printf(" factory design :%s ", HussienCar .
factoryDesgin ; factoryDesgin);
cout<<" \n car number : "<< HussienCar. printf(" \n car number :%d ", HussienCar. CarNumber) ;
CarNumber ;
cout<<"\n car model: "<< HussienCar. Model; printf("\n car model: %d ", HussienCar. Model);
cout<<" \n machine Type1: "<< HussienCar. printf(" \n machine Type1: %d ", HussienCar.
MachineCar. Type1 ; MachineCar. Type1 ) ;
cout<<"\n machine Type2: "<< HussienCar. printf("\n machine Type2: %d ", HussienCar.
MachineCar. Type2 ; MachineCar. Type2 ) ;
cout<<" \n machine Type3: "<< HussienCar. printf(" \n machine Type3:%d ",HussienCar.
MachineCar. Type3 ; MachineCar. Type3 );
} }

‫الكود واضح وليس بحاجة إلى أي شرح أو توضيح‬

Step By step to Learn C or C++ By:Hussien Ahmmed Taleb 197


‫‪ .٣‬مصفوفة تراكيب ) ‪(Structures‬‬
‫عرفنا المصفوفات سابقا وعرفنا من اھم فوائدھا ھي الخزن المؤقت وتخزين عدد من القيم أو‬
‫الحروف بشكل مصفوفة‪.‬إذن مصفوفة سجالت ھي بدال من أن نعرف عدد من الكائنات من كل سجل‬
‫نعرف كائن واحد من نوع مصفوفة بديال عن كل ھذه الكائنات‪.‬فعلى سبيل المثال لو عدنا إلى مثال‬
‫السيارة وأردنا أربعين مستخدم ھل نعرف أربعين كائن نعرف كائن واحد من نوع مصفوفة وحجمه‬
‫أربعين ‪.‬فتكون الھيكلية ھكذا‬

‫ھيكلية مصفوفة تراكيب )‪( Structs‬‬


‫‪struct Structures_Name‬‬
‫{‬
‫;‪Type var1‬‬
‫;‪Type var2‬‬
‫‪.‬‬
‫‪.‬‬
‫‪.‬‬
‫;]‪}ObjectName1[size‬‬
‫• )]‪: (ObjectName1[size‬ھي كائن وواحد من نوع مصفوفة له حجم معين يحدده المستخدم‪.‬‬

‫فلنعود إلى مثال معلومات سيارة وھي رقم ونوع واسم الشركة لكن نريدھا ألربعين سيارة فيكون‬
‫السجل بشكل التالي‬
‫تراكيب )‪ ( Structs‬لمكونات سيارة‬
‫‪struct car‬‬
‫{‬
‫;‪int CarNumber‬‬
‫;‪int Model‬‬
‫;]‪char factoryDesgin[20‬‬
‫;]‪}userCar[40‬‬

‫لو أردنا الوصول إلى معلومات صاحب أول سجل )الوصول إلى اسم الشركة المصنعة (‬
‫كود‬
‫; ‪userCar[0]. factoryDesgin‬‬

‫‪Step By step to Learn C or C++‬‬ ‫‪By:Hussien Ahmmed Taleb‬‬ ‫‪198‬‬


( ‫• لو أردنا الوصول إلى معلومات صاحب ثاني سجل )الوصول إلى اسم الشركة المصنعة‬
‫كود‬
userCar[1]. factoryDesgin ;
.‫وكذالك البقية نصل إليھم بنفس الطريقة‬
‫• لو أردنا تعبئة معلومات صاحب أول سيارة يكون الكود‬

‫كود‬
strcpy(userCar[0]. factoryDesgin,"BMW") ;
userCar[0]. Model=2011;
userCar[0]. CarNumber=45356;
‫**الكود كامل إلدخال معلومات أربعين سيارة وطباعتھا‬
c++ ‫البرمجة بلغة‬ c ‫البرمجة بلغة‬
#include<iostream.h> #include<stdio.h>
#include<stdio.h>
struct car struct car
{int CarNumber; {int CarNumber;
int Model; int Model;
char factoryDesgin[20]; char factoryDesgin[20];
}userCar[40]; }userCar[40];
main() main()
{int i; {int i;
for (i=0;i<40;i++) for (i=0;i<40;i++)
{cout<<"\ninformation for("<<(i+1)<<") car : "; {printf("\ninforma7on for(%d) car : ",(i+1));
cout<<"enter Car factory: "; printf("enter Car factory: ");
gets( userCar[i]. factoryDesgin ); gets( userCar[i]. factoryDesgin );
cout<<"enter Car number: "; printf("enter Car number: ");
cin>> userCar[i]. CarNumber ; scanf("%d",& userCar[i]. CarNumber) ;
cout<<"enter Car Model: "; printf("enter Car Model: ");
cin>> userCar[i]. Model;} scanf("%d",& userCar[i]. Model);}
cout<<"\n-------------the information saved…\n"; printf("\n-------------the information saved…\n");
for (i=0;i<40;i++) for (i=0;i<40;i++)
{cout<<"\ninforma7on sav e ("<<(i+1)<<") car : "; { printf("\ninforma7on save(%d) car : ",(i+1));
cout<<" Car factory: "; printf(" Car factory: ");
cout<< userCar[i]. factoryDesgin ; printf( "%s",userCar[i]. factoryDesgin) ;
cout<<" Car number: "; printf(" Car number: ");
cout<< userCar[i]. CarNumber ; printf( "%d",userCar[i]. CarNumber) ;
cout<<" Car Model: "; printf(" Car Model: ");
cout<< userCar[i]. Model;}} printf("%d", userCar[i]. Model);}}
‫( حتى ندخل جميع معلومات السيارات بالنسبة إلى‬٤٠)‫ لو تالحظ استخدمنا عداد يعد حتى‬:‫توضيح‬
‫؟‬..‫( كل عدة للعداد نقوم بإدخال سجل جديد‬userCar[i])

Step By step to Learn C or C++ By:Hussien Ahmmed Taleb 199


‫‪ .٤‬مصفوفة تراكيب ) ‪(Structures‬متداخلة‬
‫ال يختلف شيئا عن تركيب داخل تركيب نفس األسلوب لكن ھنا نستخدم المصفوفات فتكون مصفوفة‬
‫تراكيب داخل مصفوفة تراكيب و الھيكلية تكون بشكل التالي‬

‫ھيكلية تراكيب متداخلة‬


‫‪struct Structures_Name1‬‬
‫{‬
‫‪struct Structures_Name2‬‬
‫{‬
‫;‪Type var21‬‬
‫;‪Type var22‬‬
‫;]‪} ObjectName21[size2‬‬
‫;‪Type var11‬‬
‫;‪Type var12‬‬
‫‪.‬‬
‫‪.‬‬
‫;]‪}ObjectName11[size1‬‬
‫فكل كائن من كائنات مصفوفة السجالت )]‪ (ObjectName11[size1‬يحوي على سجل‬
‫)]‪ (ObjectName21[size2‬بحجم )‪ (size2‬على سبيل المثال لو كان لدينا المثال التالي‬

‫مثال‪ :‬سجل لعشر سيارات لھا رقم وموديل واسم الشركة وداخلة سجل لخمس مكائن لكل ماكنة ثالث‬
‫محركات‪.‬؟‬

‫تراكيب )‪ ( Structs‬متداخلة لمكونات سيارة‬


‫‪struct car‬‬
‫{‬
‫‪Struct machine‬‬
‫;‪{int Type1‬‬
‫;‪int Type2‬‬
‫;‪int Type3‬‬
‫;]‪}MachineCar[5‬‬
‫;‪int CarNumber‬‬
‫;‪int Model‬‬
‫;]‪char factoryDesgin[20‬‬
‫;]‪} userCar[10‬‬

‫‪Step By step to Learn C or C++‬‬ ‫‪By:Hussien Ahmmed Taleb‬‬ ‫‪200‬‬


‫• لو أردنا الوصول إلى معلومات صاحب أول سجل ماكنة ألولى النوع األول‬
‫كود‬
‫; ‪userCar[0]. MachineCar[0]. Type1‬‬
‫وكذالك البقية نصل إليھم بنفس الطريقة‪.‬‬
‫صاحب أول سجل‬ ‫ماكنة األولى‬ ‫النوع األول‬

‫• لو أردنا الوصول إلى معلومات صاحب أول سجل ماكنة ثانية النوع األول‬
‫كود‬
‫; ‪userCar[0]. MachineCar[1]. Type1‬‬

‫صاحب أول سجل‬ ‫ماكنة الثانية‬ ‫النوع األول‬

‫• لو أردنا الوصول إلى معلومات صاحب ثاني سجل ماكنة أولى النوع الثاني‬
‫كود‬
‫; ‪userCar[1]. MachineCar[0]. Type2‬‬

‫صاحب ثاني سجل‬ ‫ماكنة األولى‬ ‫النوع الثاني‬

‫• لو أردنا الوصول إلى معلومات صاحب أول سجل ماكنة ألولى النوع األول ونعطيه قيمة)‪(20‬‬
‫كود‬
‫;‪userCar[0]. MachineCar[0]. Type1=20‬‬

‫صاحب أول سجل‬ ‫ماكنة األولى‬ ‫النوع األول‬

‫• لو أردنا الوصول إلى معلومات صاحب أول سجل اسم الشركة المصنعة ونعطيه )‪(BMW‬‬
‫كود‬
‫; )"‪Strcpy(userCar[0]. factoryDesgin,"BMW‬‬
‫وكذالك البقية نصل إليھم بنفس الطريقة‪.‬‬

‫‪Step By step to Learn C or C++‬‬ ‫‪By:Hussien Ahmmed Taleb‬‬ ‫‪201‬‬


‫وھذا كود المثال كامل‬
c++ ‫البرمجة بلغة‬ c ‫البرمجة بلغة‬
#include<iostream.h> #include<stdio.h>
#include<stdio.h>
1.struct car 1.struct car
2.{struct machine 2.{struct machine
3.{int Type1; 3.{int Type1;
4.int Type2; 4.int Type2;
5.int Type3; 5.int Type3;
6.}MachineCar[5]; 6.}MachineCar[5];
7.int CarNumber; 7.int CarNumber;
8.int Model; 8.int Model;
9.char factoryDesgin[20]; 9.char factoryDesgin[20];
10.} userCar[10]; 10.} userCar[10];
11.main() 11.main()
12.{int i, cont ; 12.{int i, cont ;
13.for (i=0;i<10;i++) 13.for (i=0;i<10;i++)
14.{ 14.{
15.cout<<"\ninforma7on for("<<(i+1)<<") car : "; 15.prinC("\ninforma7on for(%d) car : ",(i+1));
16.cout<<"enter Car factory: "; 16.prinC("enter Car factory: ");
17. gets( userCar[i]. factoryDesgin ); 17. gets( userCar[i]. factoryDesgin );
18.cout<<"enter Car number: "; 18.prinC("enter Car number: ");
19.cin>> userCar[i]. CarNumber ; 19.scanf("%d",& userCar[i]. CarNumber) ;
20.cout<<"enter Car Model: "; 20.prinC("enter Car Model: ");
21. cin>> userCar[i]. Model; 21 scanf("%d",& userCar[i]. Model);
22.for( cont =0; cont <5; cont ++) 22.for( cont =0; cont <5; cont ++)
23.{ 23.{
24.cout<<"\nmachine name("<<( cont +1)<<") : "; 24. printf("\n nmachine name (%d): ",( cont +1));
25.cout<<"\nenter car machine Type1: "; 25. printf("\nenter car machine Type1: ");
26.cin>> userCar[i]. MachineCar[cont]. Type1 ; 26. printf( "%d",userCar[i]. MachineCar[cont]. Type1) ;
27.cout<<"\nenter car machine Type2: "; 27. printf("\nenter car machine Type2: ");
28.cin>> userCar[i]. MachineCar[cont]. Type2 ; 28. printf( "%d", userCar[i]. MachineCar[cont]. Type2) ;
29.cout<<"\nenter car machine Type3: "; 29. printf("\nenter car machine Type3: ");
30. printf( "%d",userCar[i]. MachineCar[cont]. Type3) ;
30.cin>> userCar[i]. MachineCar[cont]. Type3 ;
31.}
31.}
32.}
32.}
33.}
33.}
: ‫توضيح البرنامج‬
‫( ففي الخطوات من‬٣٢‫ الى‬١٤) ‫( تتكرر الخطوات من‬١٣) ‫نالحظ في كل عدة للعداد في خطوة رقم‬
‫( ھو عدد بعدد سجل المكائن الداخلي‬٢٢) ‫( يدخل ملومات السجل الخارجي وخطوة رقم‬٢١ ‫ إلى‬١٦)
‫المكون من خمس مكائن لألنواع الثالث ويدخل كل ھذه المكائن لألنواع الثالث في خطوة‬
‫( لكل سجل من سجالت السجل الخارجي‬٣٠ ‫ إلى‬٢٥)

Step By step to Learn C or C++ By:Hussien Ahmmed Taleb 202


‫' )‪(File‬‬

‫المستوى المطلوب‬
‫ٔان يكون القارئ ملما بما هو في الفصول السابقة وفاهما كل شيء‬

‫ٔ‬
‫االهداف‪:‬‬
‫عندما يكـتمل الفصل تكون بإذن ﷲ قد ٔاتممت التعرف علﻰ الملفات وطرق اﺴتخدامها‬

‫ٔ‬
‫مستوى االداء المطلوب بعد إنهاء الفصل‬
‫إتقان هذه الفصل ‪100%‬‬

‫ٔ‬
‫االدوات المطلوبة‪:‬ﺣاﺴوب شخصي لتجربة البرامج وقلم ودفتر لتسجيل المالﺣظات‬

‫الوقت المطلوب ‪ :‬ثالث ﺴاعات‬


‫‪Step By step to Learn C or C++‬‬ ‫‪By:Hussien Ahmmed Taleb‬‬ ‫‪203‬‬
‫الملفات )‪:(File‬‬
‫من احد سمات اللغة )‪ ( c,c++‬توفر إمكانية تخزين مكونات أو نتائج أو متطلبات البرنامج على القرص الصلب‬
‫وتخزن الملفات بالقرص الطلب عن طريق لغة )‪(c,c++‬‬ ‫)‪ (hard Disk‬بشكل دائم أو مؤقت حسب الحاجة‬
‫بامتدادات مختلفة منھا )‪ . (.txt , .bin‬من األمثلة على استخدام الملفات لو كان لدينا برنامج ال يستطيع المستخدم‬
‫الدخول له إال بكلمة مرور فتخزن كلمة المرور في القرص الطلب بداخل ملف ومتى ما فتحنا البرنامج يطلب من‬
‫المستخدم إدخال كلمة المرور وإذا كانت الكلمة المدخلة مشابه للكلمة المخزنة يفتح له البرنامج إي خزنا كلمة المرور‬
‫بشكل دائم داخل الحاسوب ‪.‬‬
‫ الدوال التي تستخدم مع الملفات في لغة )‪ (c++‬تقع ضمن مكتبة >‪ <iostream.h‬و >‪<fstream.h‬‬
‫ الدوال التي تستخدم مع الملفات في لغة )‪ (c‬تقع ضمن مكتبة >‪<stdio.h‬‬
‫الكتابة في الملفات النصية‪:‬‬
‫للكتابة الى داخل إي ملف توجد ثالث خطوات وھي‪!..................... .‬‬
‫• خطوة األولى نعرف كائن من نوع ملف‬
‫• خطوة ثانية نفتح الملف للكتابة‬
‫• الخطوة الثالثة نكتب الى داخل الملف‬
‫‪ .١‬في لغة )‪ (c++‬نستخدم الدالة التالية للكتابة إلى داخل الملفات‬
‫كتابة الى داخل ملف في لغة ‪c++‬‬
‫; ‪1. ofstream fout‬‬
‫;)‪2. fout.open("file path",iostream family‬‬
‫;"‪3.fout<<"data‬‬
‫• الخطوة األولى عرفنا )‪ (fout‬من نوع ملف كتابة ھو اسم للملف الذي نريد الكتابة فيه‪ .‬للتعامل معه داخل‬
‫البرنامج وممكن أن يكون أي اسم‬
‫• ) ‪ : ( file path‬ھو مسار الملف المراد خزنة فيه داخل الجھاز يوضع بين عالمتي تنصيص‬
‫• )‪ : (iostream family‬ھي رموز المستخدمة مثل تستخدم للداللة على عمليات معية‬

‫جدول برموز ‪iostream family‬‬


‫وضيفته‬ ‫الرمز‬
‫يلحق اإلدخال الجديد بنھاية الملف‬ ‫‪ios::app‬‬
‫يقوم بالقراءة أو الكتابة من نھاية الملف‬ ‫‪ios::ate‬‬
‫في حال وجود الملف فسيقوم ببترھا أي حذف محتوياتھا‬ ‫‪ios::trunce‬‬
‫فتح الملف للقراءة وھي حالة افتراضية لكائنات ‪ifstream‬‬ ‫‪ios::in‬‬
‫فتح الملف للكتابة وھي حالة افتراضية لكائنات ‪ofstream‬‬ ‫‪ios::out‬‬
‫فتح الملفات على ھيئة ثنائية وليس نصية‬ ‫‪ios::binary‬‬
‫الستخدام أكثر من رمز في الحل نضع بينھم )|( مثال إذا اردنا نكتب ونلحق كتابتنا بمحتويات الملف السابق ) ‪(ios::app| ios::out‬‬ ‫•‬
‫• وفي خطوة رقم )‪ (3‬قمنا بإدخال البيانات إلى داخل الملف‬

‫‪Step By step to Learn C or C++‬‬ ‫‪By:Hussien Ahmmed Taleb‬‬ ‫‪204‬‬


‫‪ .٢‬في لغة )‪ ( c‬نستخدم الدالة التالية للكتابة إلى داخل الملفات‬
‫كتابة الى داخل ملف في لغة ‪c‬‬
‫;‪1.FILE *fout‬‬
‫;)"‪2.fout=fopen("file path","symbol‬‬
‫;)‪3.fputs("data", fout,‬‬
‫• )‪ : (fout‬ھو اسم للملف الذي نريد الكتابة فيه‪ .‬عرفناه في الخطوة رقم )‪ (١‬انه ملف‬
‫• ) ‪ : ( file path‬ھو مسار الملف المراد خزنة فيه داخل الجھاز يوضع بين عالمتي تنصيص‬
‫• )‪ : (symbol‬ھي رموز المستخدمة مثل تستخدم للداللة على عمليات معنية توضع بين عالمتي تنصيص‬
‫وھنا نستخدم الرمز ) ‪ (w‬ألننا نريد الكتابة بداخل الملف‪ .‬وھذا جدول بھذه الرموز‬

‫جدول برموز ‪symbol‬‬


‫وضيفته‬ ‫الرمز‬
‫يلحق اإلدخال الجديد بنھاية الملف‬ ‫‪a‬‬
‫فتح الملف للقراءة واذا كان الملف غير صالح تعيد قيمة صفر‬ ‫‪r‬‬
‫استحداث الملف للكتابة واذا كان الملف موجود في القرص الصلب سيمسح محتوياته‬ ‫‪w‬‬
‫كتابة وقراءة وإلحاق في الملفات الثنائية‬ ‫‪rb,wb,ab‬‬
‫فتح الملف للكتابة أو القراءة لكن في اإلضافة يكتب البيانات الجديدة فوق البيانات السابقة‬ ‫‪r+‬‬
‫استحداث الملف للكتابة أو القراءة لكن في اإلضافة يكتب البيانات الجديدة فوق البيانات السابقة‬ ‫‪w+‬‬
‫الستخدام أكثر من رمز في الحل نضع بينھم جمع مثال إذا أردنا نكتب ونلحق كتابتنا بمحتويات الملف السابق‬
‫)‪(w+a‬‬
‫• وفي خطوة رقم )‪ (٣‬قمنا بإدخال البيانات إلى داخل الملف باستخدام الدالة )‪ (fput‬التي تأخذ النص المراد‬
‫كتابته بداخل الملف بشكل سلسلة و اسم الملف‬
‫ يمكن كتابة حرف واحد فقط الى داخل الملف باستخدام الدالة )‪ (putc‬التي تأخذ اسم الملف والحرف المراد‬
‫إدخاله‬

‫كتابة الى داخل ملف في لغة ‪c‬‬


‫;)‪putc("data", fout,‬‬

‫ بعد أكمال عملنا مع إي ملف يجب إغالقه وال يجوز تركه مفتوح ويغلق بشكل التالي‬

‫إغالق ملف في لغة ‪c++‬‬


‫;‪fout.close‬‬
‫نكتب اسم املف المستخدم داخل البرنامج ثم نغلقه‬

‫إغالق ملف في لغة ‪c‬‬


‫;)‪fclose(fout‬‬
‫نستخدم دالة تأخذ اسم الملف داخل البرنامج لتغلقه‬

‫‪Step By step to Learn C or C++‬‬ ‫‪By:Hussien Ahmmed Taleb‬‬ ‫‪205‬‬


‫؟‬. ‫ برنامج لكتابة جمل على أكثر من سطر داخل ملف‬: ‫مثال‬

c++ ‫البرمجة بلغة‬ c ‫البرمجة بلغة‬


#include <fstream.h> #include <stdio.h>
int main() int main()
1. { ofstream fout; 1.{ FILE * fout;
2. fout.open("D:\\firstExa.txt"); 2. fout=fopen("D:\\firstExa.txt","w");
3. fout << "HELLOW HUSSIEN AH-ROB.\n" 3. fputs("HELLOW HUSSIEN AH-ROB.\n WELCOME
<< "WELCOME YOU PROGRAM\n" YOU PROGRAM\n WHAT DA YOU LIKE OF ME\n ",
<< "WHAT DA YOU LIKE OF ME\n"; fout);
4. fout.close(); 4.fclose(fout);
} }
‫تو ضيح الخطوات‬
‫( للكتابة فيه‬d:\) ‫( كونا ملف بالمسار‬٢) ‫ خطوة رقم‬،‫( من نوع ملف‬fout) ‫خطوة رقم واحد عرفنا‬.١
‫( أغلقنا الملف‬٤) ‫خطوة رقم‬،‫( كتابنا في الملف الحظ كيف نكتب بيانات عل أكثر من سطر‬٣) ‫خطوة رقم‬.٢
‫الحظ كيفية تكون الملف داخل جھاز الكومبيوتر‬

‫( سنجد مكتوب فيه األسطر التالية‬firstExa) ‫واذا فتحنا الملف‬

‫خزنت فيه نفس األسطر الذي كتبناھا في‬

Step By step to Learn C or C++ By:Hussien Ahmmed Taleb 206


‫مھم‬

‫خطوة رقم )في المثال السابق إذا كان الملف )‪ (firstExa‬أصال مخزن فيه معلومات معينة فالذي سوف يحدث انه‬
‫سيحذف المحتويات السابقة ويضيف المحتويات الجديدة في خطوة رقم )‪ (٣‬بدال من المحتويات السابقة‪.‬واذا أردنا‬
‫أن ال يحذف المحتويات السابقة إنما يضيف المحتويات الجديد خلفھا في الملف فقط نغير الخطوة رقم )‪ (٢‬الى‬
‫‪c++‬‬ ‫البرمجة بلغة‬ ‫‪c‬‬ ‫البرمجة بلغة‬
‫;)‪2. fout.open("D:\\firstExa.txt",ios::app‬‬ ‫;)"‪2. fout=fopen("D:\\firstExa.txt"," a‬‬

‫مثال‪ :‬برنامج مذكرة نكتب في شاشة التنفيذ وھو يخزن ما نكتبه ويستمر البرنامج بالطلب من المستخدم بالكتابة الى‬
‫أن يدخل المستخدم النقطة )‪(.‬‬
‫تحليل‪ :‬من السؤال انه يتوقف إذا ادخل المستخدم رمز النقطة )‪ (.‬إي أن البرنامج يقرئ حرف حرف من شاشة التنفيذ‬
‫ويقارن الحرف المدخل بشرط التوقف في دوارة )‪ (loop‬مستمرة ال تتوقف األ إذا ادخل المستخدم رمز النقطة وبما‬
‫إننا ندخل حرف حرف وال نريد أن يحس المستخدم انه يدخل أحرف نستخدم الدالة )‪ (getche‬في اإلدخال لكي‬
‫تقرئ ما يدخله المستخدم مباشرة‪ .‬بما انه يريد أن نخزن ما نكتبه باستمرار إي انه في كل إدخال بعد إغالق وفتح‬
‫البرنامج يضيف الحرف الجديد المدخل الى الملف وال يمسح محتوياته إنما يلحق الكتابة الجديدة بنھاية الكتابة‬
‫السابقة‬
‫‪c++‬‬ ‫البرمجة بلغة‬ ‫‪c‬‬ ‫البرمجة بلغة‬
‫>‪#include <fstream.h‬‬ ‫>‪#include <stdio.h‬‬
‫>‪#include <conio.h‬‬ ‫>‪#include <conio.h‬‬
‫)(‪int main‬‬ ‫)(‪int main‬‬
‫; ‪2. {char symbol‬‬ ‫; ‪1. {char symbol‬‬
‫;‪3. ofstream fout‬‬ ‫;‪2. FILE * fout‬‬
‫;)‪3. fout.open("D:\\note.txt",ios::app‬‬ ‫;)"‪3. fout=fopen("D:\\note .txt"," a‬‬
‫{‪4. do‬‬ ‫{‪4. do‬‬
‫;)(‪5.symbol=getche‬‬ ‫;)(‪5.symbol=getche‬‬
‫;‪6.fout << symbol‬‬ ‫;)‪6. putc(symbol, fout‬‬
‫;)'‪7.} while(symbol != '.‬‬ ‫;)'‪7.} while(symbol != '.‬‬
‫;"‪8.cout<<"\ncontent is saved‬‬ ‫;)"‪8.printf("\ncontent is saved‬‬
‫;)(‪9. fout.close‬‬ ‫;)‪9.fclose(fout‬‬
‫}‬ ‫}‬
‫توضيح الخطوات‬
‫‪ .١‬الخطوة رقم )‪ (٣‬فتحنا ملف للكتابة مع ميزة إلحاق الكتابة الجديدة بالكتابة السابقة‬
‫‪ .٢‬خطوة رقم )‪ (٥‬ھو قراءة من شاشة التنفيذ‬
‫‪ .٣‬خطوة رقم )‪ (٦‬طباعة الحرف الذي تمت قراءته في الملف‬
‫‪ .٤‬خطوة رقم )‪ ٤‬الى ‪ (٧‬تتكرر باستمرار مادام المستخدم لم يدخل رمز النقطة الن شرط التوقف في الخطوة‬
‫محتويات الملف‬ ‫رقم )‪ (٧‬أن يكون الرمز المدخل ھو نقطة‬

‫توقفت القرائة عندما ادخلنا نقطة‬

‫‪Step By step to Learn C or C++‬‬ ‫‪By:Hussien Ahmmed Taleb‬‬ ‫‪207‬‬


‫؟‬. ‫( مستخدمين وكلمات مرورھم ھي ملف‬٦) ‫ برنامج لخزن أسماء‬:‫مثال‬
‫ نكون سجل حجمه ستة يحوي اسم مستخدم وكلمة مرور وندخله في ملف‬:‫تحليل‬
c++ ‫البرمجة بلغة‬ c ‫البرمجة بلغة‬
#include<iostream.h> #include<stdio.h>
#include<stdio.h> 1.struct password_User
#include <fstream.h> 2.{char username[20];
1.struct password_User 3. char password[20]; }userProtection[6];
2.{char username[20]; 4.main()
3. char password[20]; }userProtection[6]; 5.{int i;
4.main() 6.for(i=0;i<6;i++){
5.{int i; 7. printf("\nenter hussien user name: ");
6.for(i=0;i<6;i++){ 8. gets( userProtection[i]. username );
7.cout<<"\nenter user name: "; 9. prinC("enter hussien password: ");
8. gets(userProtection[i]. username ); 10.gets( userProtection[i]. password );}
9.cout<<"enter password: "; 11.FILE * fout;
10. gets( userProtection[i]. password);} 12. fout=fopen("D:\\up.txt","w");
11.ofstream fout; 13.for(i=0;i<6;i++){
12. fout.open("D:\\up.txt"); 14.fprinC(fout ,"User ID :");
13.for(i=0;i<6;i++){ fprintf(fout , userProtection [i]. username);
14.fout << "User ID :"; fprintf(fout , "\tuser Password: ");
fout <<<< userProtection [i]. username; fprintf(fout , userProtection [i]. password);
fout <<<< "\tuser Password: "; fprintf(fout , "\n");}
fout <<<< userProtection [i]. password; 15. fclose(fout);
fout <<<<"\n";} }
15. fout.close();
}
:‫توضيح الخطوات‬
‫( كونا سجل حجمه ست مستخدمين فيه اسم وكلمة مرور‬٤‫و‬٢‫و‬١) ‫خطوة رقم‬.١
‫(( ھي إدخال أسماء المستخدمين وكلمات مرورھم‬١٠ ‫ الى‬٦)‫خطوة رقم‬.٢
‫( فتحنا الملف للكتابة فيه‬١٢) ‫( عرفنا ملف جديد وخطوة رقم‬١١) ‫خطوة رقم‬.٣
(١٤) ‫( ھو عداد لكي يدخل أسماء وكلمات مرور كل المستخدمين واحد يتلو األخر في خطوة رقم‬١٣) ‫خطوة رقم‬.٤

‫سيخزنون في الملف في الشكل التالي‬ ‫لو أدخلنا أسماء المستخدمين كما في شاشة التنفيذ‬

Step By step to Learn C or C++ By:Hussien Ahmmed Taleb 208


‫القراءة من الملفات النصية‪:‬‬
‫للقراءة من داخل إي ملف توجد ثالث خطوات وھي‪!..................... .‬‬
‫• خطوة األولى نعرف كائن من نوع ملف‬
‫• خطوة ثانية نفتح الملف للقراءة‬
‫• الخطوة الثالثة نقرئ من داخل الملف‬
‫‪.١‬في لغة )‪ (c++‬نستخدم الدالة التالية للقراءة من داخل الملفات‬
‫قراءة من داخل ملف في لغة ‪c++‬‬
‫; ‪1. ifstream fin‬‬
‫;)‪2. fin.open("file path",iostream family‬‬
‫;)‪3.fin.getline(array,80‬‬
‫الخطوة األولى عرفنا )‪ (fin‬من نوع ملف للقراءة‪ .‬ھو اسم للملف الذي نريد القراءة منه للتعامل معه داخل‬ ‫•‬
‫البرنامج وممكن أن يكون أي اسم‬
‫) ‪ : ( file path‬ھو مسار الملف المراد فتحه من داخل الجھاز يوضع بين عالمتي تنصيص‬ ‫•‬
‫)‪ : (iostream family‬ھي رموز المستخدمة مثل تستخدم للداللة على عمليات معنية‬ ‫•‬
‫وفي خطوة رقم )‪ (3‬قمنا بخزن سطر واحد من البيانات من الملف الى داخل مصفوفة‬ ‫•‬

‫‪ .٢‬في لغة )‪ ( c‬نستخدم الدالة التالية للقراءة من داخل الملفات‬


‫قراءة من داخل ملف في لغة ‪c‬‬
‫; ‪1.FILE *f fin‬‬
‫;)"‪2. fin =fopen("file path","symbol‬‬
‫;) ‪3.fgets( fin ,80, array‬‬

‫)‪ : (fout‬ھو اسم للملف الذي نريد القراءة منه‪ .‬عرفناه في الخطوة رقم )‪ (١‬انه ملف‬ ‫•‬
‫) ‪ : ( file path‬ھو مسار الملف المراد فتح الملف من داخل الجھاز يوضع بين عالمتي تنصيص‬ ‫•‬
‫)‪ : (symbol‬ھي رموز المستخدمة مثل تستخدم للداللة على عمليات معية توضع بين عالمتي تنصيص‬ ‫•‬
‫وھنا نستخدم الرمز ) ‪ (r‬ألننا نريد القراءة من داخل الملف‪ .‬وھذا جدول بھذه الرموز‬
‫وفي خطوة رقم )‪ (٣‬قمنا بقراءة البيانات من داخل الملف باستخدام الدالة )‪ (fgets‬التي تأخذ اسم الملف‬ ‫•‬
‫والنص المراد القراءة منه وتخزن الناتج في مصفوفة و )‪ (80‬ھو عدد األحرف المرد قراءتھا من الملف‬
‫يمكن قراءة حرف واحد فقط من داخل الملف باستخدام الدالة )‪ (getc‬التي تأخذ اسم الملف وتعطي والحرف‬ ‫‬
‫المراد قرائته‬

‫قراءة من داخل ملف في لغة ‪c‬‬


‫;) ‪var= getc(fin‬‬
‫ )‪: (fin‬ھو اسم الملف المراد القراءة منه‬
‫ )‪ (var‬ھو اسم المتغير المراد خزن القيمة المقروءة في داخله‬

‫ القراءة من الملف تبدأ بقراءة البايت األول ثم الثاني وبالتتابع‬

‫‪Step By step to Learn C or C++‬‬ ‫‪By:Hussien Ahmmed Taleb‬‬ ‫‪209‬‬


‫مثال ‪ :‬قم بقراءة جميع محتويات الملف الذي يقع في المسار التالي ) ‪ ( D:\\firstExa.txt‬ويحتوي الملف على البيانات‬
‫التالية‪.‬؟‬

‫تحليل‪ :‬لقراءة جميع محتويات ملف نستخدم دوال التكرار في القراءة حيث‬
‫كل ما يقرئ بايت ينتقل المؤشر إلى البايت الثاني ليقرئه في المرة القادمة‬
‫لكن ال بد من وجود دالة توقف القراءة عند الوصول إلى نھاية الملف‬

‫‪c++‬‬ ‫البرمجة بلغة‬ ‫‪c‬‬ ‫البرمجة بلغة‬


‫>‪#include <fstream.h‬‬ ‫>‪#include <stdio.h‬‬
‫>‪#include <iostream.h‬‬ ‫>‪#include <stdlib.h‬‬
‫)(‪main‬‬ ‫)(‪main‬‬
‫;]‪1. { char array [80‬‬ ‫;‪8.{ char reading‬‬
‫;‪2. ifstream fin‬‬ ‫;‪9. FILE * fin‬‬
‫;)"‪3. fin.open("D:\\firstExa.txt‬‬ ‫;)"‪10.fin=fopen("D:\\firstExa.txt","r‬‬
‫))(‪4.while(!fin.eof‬‬ ‫)‪11.while( (reading=getc(fin)) !=EOF‬‬
‫;)‪5.{fin.getline(array,80‬‬ ‫{‪12.‬‬
‫};‪6.cout<<array<<endl‬‬ ‫};) ‪13.printf("%c", reading‬‬
‫} ;)(‪7. fin.close‬‬ ‫};)‪14.fclose(fin‬‬

‫توضيح الخطوات ‪:‬‬


‫‪ .١‬خطوة رقم )‪ (١‬عرفنا مصفوفة لخزن الذي نقرئه فيه عند كل قراءة‬
‫‪ .٢‬خطوة رقم )‪ (٨‬عرفنا متغير حرفي لنخزن األحرف التي نقرئھا حرف حرف‬
‫‪ .٣‬خطوة رقم )‪٢‬و‪ (٩‬عرفنا كائن من نوع ملف ‪،‬خطوة رقم )‪ (٣‬فتحنا الملف للقراءة‬
‫‪ .٤‬خطوة رقم )‪ ٣‬و‪ (١٠‬فتحنا الملف للقراءة‬
‫‪ .٥‬خطوة رقم ) ‪١١‬و‪ (٤‬ھي دوارة ال تتوقف إال أن ينتھي من قراءة أخر سطر في الملف )‪ (eof‬ھي مختصر‬
‫لكلمة )‪ (end of file‬ھو مؤشر على نھاية الملف أي ھنا استخدمناه كشرط توقف إذا قرء أخر سطر يتوقف‬
‫حتى ال يستمر بالقراءة إلى ألما النھاية‬
‫‪ .٦‬خطوة رقم )‪ (٥‬نقرئ سطر سطر من الملف تقع الدالة ضمن مكتبة‬
‫‪ .٧‬خطوة رقم )‪ (٦‬ھي طباعة سطر سطر وكلمة )‪ (endl‬إلنزال المؤشر إلى السطر التالي‬
‫‪ .٨‬خطوة رقم )‪ (١٣‬ھي طباعة حرف حرف‬
‫ الحظ ألسم تبين لك كل دالة وتقع تحت إي مكتبة‬

‫‪Step By step to Learn C or C++‬‬ ‫‪By:Hussien Ahmmed Taleb‬‬ ‫‪210‬‬


‫الكتابة في الملفات الثنائية‪:‬‬
‫الملفات الثنائية تستخدم لتخزين المصفوفات والمتغيرات والتراكيب‪.‬وللكتابة إلى داخل إي ملف توجد ثالث خطوات‬
‫• خطوة األولى نعرف كائن من نوع ملف‬
‫• خطوة ثانية نفتح الملف للكتابة‬
‫• الخطوة الثالثة نكتب إلى داخل الملف‬

‫‪ .١‬في لغة )‪ (c++‬نستخدم الدالة التالية للكتابة إلى داخل الملفات‬


‫كتابة الى داخل ملف في لغة ‪c++‬‬
‫; ‪1. ofstream fout‬‬
‫;)‪2. fout.open("file path",iostream family|ios::binary‬‬
‫; ))‪3. fout.write((char*)& data ,sizeof(data‬‬
‫• )‪ : (iostream family‬ھي رموز المستخدمة مثل تستخدم للداللة على عمليات معنية ونستخدم ھنا الرمز‬
‫)‪ (ios::binary‬بمعنى أن الملف المدخل ھو ثنائي‬
‫• وفي خطوة رقم )‪ (3‬قمنا بإدخال البيانات إلى داخل الملف باستخدام الدالة )‪ (write‬التي تأخذ )‪ (data‬قد‬
‫يكون متغير أو مصفوفة أو سجل وحجمھا‬

‫‪ .٢‬في لغة )‪ ( c‬نستخدم الدالة التالية للكتابة إلى داخل الملفات‬


‫كتابة الى داخل ملف في لغة ‪c‬‬
‫;‪1.FILE *fout‬‬
‫;)"‪2.fout=fopen("file path","symbol‬‬
‫;)‪3.fwrite(& data ,sizeof(data),n, fout‬‬
‫• )‪ : (symbol‬ھي رموز المستخدمة مثل تستخدم للداللة على عمليات معية توضع بين عالمتي تنصيص‬
‫وھنا نستخدم الرمز ) ‪ (wb‬ألننا نريد الكتابة بداخل الملف ثنائي‪.‬‬
‫• وفي خطوة رقم )‪ (٣‬قمنا بإدخال البيانات إلى داخل الملف باستخدام الدالة )‪ (fwrite‬التي تأخذ النص المراد‬
‫كتابته )‪ (data‬بداخل الملف وحجمه وعدد المواقع أو سجالت )‪ (n‬و اسم الملف )‪(fout‬‬

‫مثال ‪ :‬تخزين مصفوفة أحادية حجمھا )‪ (١٠‬داخل ملف ‪.‬؟‬


‫‪c++‬‬ ‫البرمجة بلغة‬ ‫‪c‬‬ ‫البرمجة بلغة‬
‫>‪#include<iostream.h‬‬ ‫>‪#include<stdio.h‬‬
‫>‪#include <fstream.h‬‬ ‫>‪#include <fstream.h‬‬
‫)(‪main‬‬ ‫)(‪main‬‬
‫;‪1.{ int Array[80],i‬‬ ‫;‪1.{ int Array[80],i‬‬
‫)‪2.for(i=0;i<10;i++‬‬ ‫)‪2.for(i=0;i<10;i++‬‬
‫;]‪3.cin>> Array[i‬‬ ‫;)]‪3.scanf("%d",&Array[i‬‬
‫;‪4.ofstream fout‬‬ ‫;‪4.FILE * fout‬‬
‫;)‪5. fout.open("D:\\ar.bin",ios::binary‬‬ ‫;)"‪5. fout=fopen("D:\\ar.bin","wb‬‬
‫;))‪6. fout .write((char *) & Array , sizeof(Array‬‬ ‫;)‪6.fwrite(& Array ,sizeof(Array),10, fout‬‬
‫} ;)(‪7.fout.close‬‬ ‫} ;)‪7. fclose(fout‬‬

‫‪Step By step to Learn C or C++‬‬ ‫‪By:Hussien Ahmmed Taleb‬‬ ‫‪211‬‬


: ‫توضيح الخطوات‬
‫( فتحنا ملف ثنائي لكي نكتب في داخله‬٥) ‫ خطوة رقم‬.١
‫( أدخلنا عناصر المصفوفة في الملف وحددنا حجم البيانات المدخلة ھي عشرة‬٦) ‫ خطوة رقم‬.٢

‫وتخزن بشكل التالي‬

(*bin) ‫ الملف ال يمكن فتحه بمتصفحات الملفات االعتيادية ألن امتداده‬

‫؟‬. ‫( مستخدمين وكلمات مرورھم ھي ملف‬٦) ‫ برنامج لخزن أسماء‬:‫مثال‬


c++ ‫البرمجة بلغة‬ c ‫البرمجة بلغة‬
#include<iostream.h> #include<stdio.h>
#include<stdio.h> 1.struct password_User
#include <fstream.h> 2.{char username[20];
1.struct password_User 3. char password[20]; }userProtec7on[6];
2.{char username[20]; 4.main()
3. char password[20]; }userProtec7on[6]; 5.{int i;
4.main() 6.for(i=0;i<6;i++){
5.{int i; 7. prinC("\nenter user name: ");
6.for(i=0;i<6;i++){ 8. gets( userProtec7on[i]. username );
7.cout<<"\nenter user name: "; 9. prinC("enter password: ");
8. gets(userProtec7on[i]. username ); 10.gets( userProtec7on[i]. password );}
9.cout<<"enter password: "; 11.FILE * fout;
10. gets( userProtec7on[i]. password);} 12. fout=fopen("D:\\up.bin","wb");
11.ofstream fout; 13.for(i=0;i<6;i++)
12. fout.open("D:\\up.bin",ios::binary); 14..fwrite(& userProtection[i] ,sizeof(
13.for(i=0;i<6;i++) userProtection[i]),6, fout);
14. fout.write((char*)& userProtection[i] 15. fclose(fout);
,sizeof( userProtection[i])); }
15. fout.close();}
:‫توضيح الخطوات‬
‫( فتحنا ملف ثنائي للكتابة فيه‬١٢) ‫ خطوة رقم‬.١
‫( ھي إدخال بيانات‬١٠ ‫ إلى‬٦)‫ خطوة رقم‬.٢
‫( قمنا بإدخال كل سجل كامل‬١٤)‫ خطوة رقم‬.٣
‫مرة واحدة إلى داخل الملف‬

‫ قارن ھذا الحل بالحل السابق لنفس ھذا المثال في حالة كتابة الملفات النصية‬

Step By step to Learn C or C++ By:Hussien Ahmmed Taleb 212


‫القراءة من الملفات الثنائية‪:‬‬
‫للقراءة من داخل إي ملف توجد ثالث خطوات وھي‪!..................... .‬‬
‫• خطوة األولى نعرف كائن من نوع ملف‬
‫• خطوة ثانية نفتح الملف للقراءة‬
‫• الخطوة الثالثة نقرئ من داخل الملف‬

‫‪.١‬في لغة )‪ (c++‬نستخدم الدالة التالية للقراءة من داخل الملفات‬


‫قراءة من داخل ملف في لغة ‪c++‬‬
‫; ‪1. ifstream fin‬‬
‫;)‪2. fin.open("file path",iostream family‬‬
‫;))‪3. fin.read((char*)& array,sizeof(data‬‬
‫• )‪ : (iostream family‬ھي رموز المستخدمة مثل تستخدم للداللة على عمليات معنية ونستخدم ھنا‬
‫الرمز )‪ (ios::binary‬بمعنى أن الملف المدخل ھو ثنائي‬
‫• وفي خطوة رقم )‪ (3‬قمنا بقراءة البيانات من الملف إلى داخل مصفوفة )‪ (data‬وھذه ممكن أن تكون‬
‫مصفوفة أو سجل أو متغير وان )‪ sizeof(array‬معناه حجم البيانات التي سنقرئھا من الملف‬

‫‪ .٣‬في لغة )‪ ( c‬نستخدم الدالة التالية للقراءة من داخل الملفات‬


‫قراءة من داخل ملف في لغة ‪c‬‬
‫; ‪1.FILE *f fin‬‬
‫;)"‪2. fin =fopen("file path","symbol‬‬
‫)‪3.fread(& data ,sizeof( data ),n,fin‬‬

‫• )‪ : (symbol‬ھي رموز المستخدمة مثل تستخدم للداللة على عمليات معية توضع بين عالمتي تنصيص‬
‫وھنا نستخدم الرمز ) ‪ (br‬ألننا نريد القراءة من داخل الملف‬
‫• وفي خطوة رقم )‪ (٣‬قمنا بقراءة البيانات من داخل الملف باستخدام الدالة )‪ (fread‬إلى )‪ (data‬ممكن أن‬
‫تكون المصفوفة أو السجل أو المتغير وحجم الذي نريده ) أن نقرئه أو عدد المواقع و اسم الملف )‪(fout‬‬

‫‪.‬؟‬ ‫التالي )" ‪("D:\\ar.bin‬‬ ‫مثال ‪ :‬قراءة محتويات مصفوفة أحادية حجمھا )‪ (١٠‬من داخل ملف في المسار‬
‫‪c++‬‬ ‫البرمجة بلغة‬ ‫‪c‬‬ ‫البرمجة بلغة‬
‫>‪#include<iostream.h‬‬ ‫>‪#include<stdio.h‬‬
‫>‪#include <fstream.h‬‬ ‫>‪#include <fstream.h‬‬
‫)(‪main‬‬ ‫)(‪main‬‬
‫;‪1.{ int Array[10],i‬‬ ‫;‪1.{ int Array[10],i‬‬
‫;‪2.ifstream fout‬‬ ‫;‪2.FILE * fout‬‬
‫;)‪3. fout.open("D:\\ar.bin",ios::binary‬‬ ‫;)"‪3. fout=fopen("D:\\ar.bin","rb‬‬
‫;))‪4. fout .read((char *) & Array , sizeof(Array‬‬ ‫;)‪4.fread(& Array ,sizeof(Array) ,1, fout‬‬
‫)‪5.for(i=0;i<10;i++‬‬ ‫)‪5.for(i=0;i<10;i++‬‬
‫;"‪6.cout<< Array[i]<<"\t‬‬ ‫;)]‪6.printf("%d\t", Array[i‬‬
‫} ;)(‪7.fout.close‬‬ ‫} ;)‪7. fclose(fout‬‬

‫‪Step By step to Learn C or C++‬‬ ‫‪By:Hussien Ahmmed Taleb‬‬ ‫‪213‬‬


: ‫توضيح الخطوات‬
‫( فتحنا ملف ثنائي لكي نقرئ من داخله‬3) ‫ خطوة رقم‬.٣
‫( من الملف ويخزنھا في المصفوفة‬Array) ‫( قمنا بقراءة عناصر بحجم المصفوفة‬4) ‫ خطوة رقم‬.٤
‫( وطبعنا محتويات المصفوفة بشكل التالي‬٦‫و‬٥) ‫ خطوة رقم‬.٥

‫ھذه العناصر سبق وان خزناھا في الملف في مثال سابق‬

‫؟‬. ‫ برنامج يطبع أسماء المستخدمين وكلمات مرورھم التي خزنت في ملف كثنائي‬:‫مثال‬

c++ ‫البرمجة بلغة‬ c ‫البرمجة بلغة‬


#include<iostream.h> #include<stdio.h>
#include<stdio.h> 1.struct password_User
#include <fstream.h> 2.{char username[20];
1.struct password_User 3. char password[20]; }userProtec7on[6];
2.{char username[20]; 4.main()
3. char password[20]; }userProtec7on[6]; 5.{int i;
4.main() 6.FILE * fout;
5.{int i; 7. fout=fopen("D:\\up.bin","rb");
6.ifstream fout; 8. fread(& userProtection ,sizeof(userProtection) ,1,
7. fout.open("D:\\up.bin",ios::binary); fout);
8. fout .read((char *) & userProtection , 9. fclose(fout);
sizeof(userProtection)); 10.for(i=0;i<6;i++){
9. fout.close(); 11. printf("\n User ID :\t");
10.for(i=0;i<6;i++){ 12. printf("%s", userProtection [i].username);
11.cout << "\nUser ID :\t"; 13. printf("user Password: ");
12.cout << userProtection [i]. username; 14. printf("%s", userProtection [i]. password );}
13.cout << "\tuser Password: "; }
14.cout << userProtection [i]. password;}}

:‫توضيح الخطوات‬
‫( وكل واحد في السجل له اسم مستخدم‬٦) ‫( قرئنا من داخل الملف بيانات بحجم السجل وھو‬٧) ‫ خطوة رقم‬.١
‫وكلمة مرور سيقوم المترجم تلقائيا بإسناد كل اسم مستخدم وكلمة مروره مخزن داخل الملف الى موقع من‬
‫مواقع السجل‬

‫( قمنا بطباعة محتويات السجل التي ملئناھا من الملف‬١٤ ‫ إلى‬١٠)‫ خطوة رقم‬.٢

Step By step to Learn C or C++ By:Hussien Ahmmed Taleb 214


‫وتكون شكل شاشة التنفيذ ھكذا حسب ما ھو مخزن في الملف‬

‫ لو أردنا أن يطبع محتويات سجل لمستخدمين اثنين فقط نغير خطوة رقم )‪ (٨‬إلى‬

‫‪c++‬‬ ‫‪ c‬البرمجة بلغة‬ ‫البرمجة بلغة‬


‫‪8. fout .read((char *) & userProtection ,‬‬ ‫‪8. fread(& userProtection ,sizeof(userProtection[0]) ,2,‬‬
‫;))]‪2*sizeof(userProtection[0‬‬ ‫;)‪fout‬‬

‫الذي فعلناه ھو أخذنا حجم سجل واحد وھو السجل األول )]‪ (userProtection[0‬وضربناه في اثنان لكي نحصل‬
‫على حجم سجلين من داخل الملف فقط لذالك سيطبع محتويات سجلين فقط كما في شاشة التنفيذ‬

‫السجالت البقية تبقى فارغة‬

‫ونستطيع تحديد عدد الملفات من الرقم المضروب بالحجم فلو أردنا ثالث ملفات نضرب في ثالثة لكن ھذه الطريقة‬
‫تطبع بعدد السجالت المطلوب لكن من األول ثم الثاني وبالتسلسل ماذا لو أردنا طباعة فقط السجل الثالث أو فقط‬
‫السجل الرابع ھذا ما تقدمه دالة )‪ (seek‬التي تمكنك من تحريك المؤشر داخل الملف ألن المؤشر بطبيعته يبدأ‬
‫من أول موقع لذالك سيطبع السجالت بالتسلسل إما ھذه الدالة تمكنك من تحريك مكان المؤشر وتكون بالشكل التالي‬

‫‪.١‬في لغة )‪ (c++‬نستخدم الدالة التالية لتحريك المؤشر داخل الملف‬


‫تحريك داخل ملف في لغة ‪c++‬‬
‫;) ‪fin.seekg(offset, iostream family‬‬
‫)‪: (fin‬ھو اسم الملف داخل البرنامج‬
‫)‪ :(offset‬مكان بدء القراءة إي من إي بايت تبدأ القراءة أو الكتابة‬
‫)‪ : (iostream family‬إذا لم نضع إي رمز معناه سيبدأ )‪ (offset‬من بداية الملف وإذا وضعنا )‪(ios::end‬‬
‫معناه سيبدأ )‪ (offset‬من نھاية الملف‬
‫جعل المؤشر يبدأ من نھاية الملف بأزاحة مقدارھا ‪٥٠-‬‬
‫;)‪fin.seekg(-50,ios::end‬‬

‫‪Step By step to Learn C or C++‬‬ ‫‪By:Hussien Ahmmed Taleb‬‬ ‫‪215‬‬


‫‪.٢‬في لغة )‪ (c‬نستخدم الدالة التالية لتحريك المؤشر داخل الملف‬
‫كتابة الى داخل ملف في لغة ‪c++‬‬
‫;)‪fseek(fin,offset,whence‬‬
‫)‪: (fin‬ھو اسم الملف داخل البرنامج‬
‫)‪ :(offset‬مكان بدء القراءة إي من إي بايت تبدأ القراءة أو الكتابة‬
‫)‪ : (whence‬إذا وضعنا )‪(0‬معناه سيبدأ )‪ (offset‬من بداية الملف وإذا وضعنا )‪ (١‬معناه سيبدأ )‪ (offset‬من‬
‫الموقع الحالي وإذا وضعنا )‪ (2‬معناه سيبدأ )‪ (offset‬من نھاية الملف‬
‫جعل المؤشر يبدأ من نھاية الملف بأزاحة مقدارھا ‪٥٠-‬‬
‫;)‪int fseek(fin,-50,2‬‬

‫ في مثال السجالت لو أردنا طباعة السجل الثالث‬


‫تحليل‪ :‬نضرب حجم واحد من السجالت في اثنان ونجعلھا قيمة )‪ (offset‬حتى يؤشر في نھاية السجل الثاني وعندما‬
‫يبدأ القراءة يبدؤھا من السجل الثالث‪ .‬ونجعل التحرك من البداية وفي دالة القراءة نجعله يقرأ سجل واحد وھو الثالث‬
‫نغير الخطوة رقم )‪ (٨‬في المثال إلى خطوتين بالشكل التالي لكي يطبع سجل الثالث فقط‬
‫‪c++‬‬ ‫البرمجة بلغة‬ ‫‪c‬‬ ‫البرمجة بلغة‬
‫;))]‪fout.seekg(2*sizeof(userProtec7on[0‬‬ ‫;) ‪fseek(fout,2*sizeof(userProtec7on[0]), 0‬‬
‫‪fout .read((char *) & userProtection,‬‬ ‫‪fread(& userProtection ,sizeof(userProtec7on[0]) ,1,‬‬
‫;))]‪sizeof(userProtec7on[0‬‬ ‫;)‪fout‬‬

‫نجعله يقرأ سجل‬ ‫نضرب حجم واحد من السجالت‬ ‫ونجعل التحرك من البداية‬
‫في اثنان ونجعلھا قيمة )‪(offset‬‬
‫حتى يؤشر في نھاية الملف الثاني‬

‫ في مثال السجالت لو أردنا طباعة السجل الرابع‬


‫تحليل‪ :‬نضرب حجم واحد من السجالت في ثالثة ونجعلھا قيمة )‪ (offset‬حتى يؤشر في نھاية السجل الثالث وعندما‬
‫يبدأ القراءة يبدؤھا من السجل الرابع ونجعل التحرك من البداية وفي دالة القراءة نجعله يقرأ سجل واحد‬
‫نغير الخطوة رقم )‪ (٨‬في المثال إلى خطوتين بالشكل التالي لكي يطبع سجل الثالث فقط‬
‫‪c++‬‬ ‫البرمجة بلغة‬ ‫‪c‬‬ ‫البرمجة بلغة‬
‫;))]‪fout.seekg(3*sizeof(userProtec7on[0‬‬ ‫;) ‪fseek(fout,3*sizeof(userProtec7on[0]), 0‬‬
‫‪fout .read((char *) & userProtection,‬‬ ‫‪fread(& userProtection ,sizeof(userProtec7on[0]) ,1,‬‬
‫;))]‪sizeof(userProtec7on[0‬‬ ‫;)‪fout‬‬

‫‪Step By step to Learn C or C++‬‬ ‫‪By:Hussien Ahmmed Taleb‬‬ ‫‪216‬‬


‫وھذا كود البرنامج كامل لطباعة محتويات سجل الرابع فقط‬
c++ ‫البرمجة بلغة‬ c ‫البرمجة بلغة‬
#include<iostream.h> #include<stdio.h>
#include<stdio.h> 1.struct password_User
#include <fstream.h> 2.{char username[20];
1.struct password_User 3. char password[20]; }userProtec7on[6];
2.{char username[20]; 4.main()
3. char password[20]; }userProtec7on[6]; 5.{FILE * fout;
4.main() 6. fout=fopen("D:\\up.bin","rb");
5.{ifstream fout; 7.fseek(fout,3*sizeof(userProtec7on[0]), 0 );
6. fout.open("D:\\up.bin",ios::binary); 8.fread(& userProtection ,sizeof(userProtec7on[0]) ,1,
7. fout.seekg(3*sizeof(userProtec7on[0])); fout);
8.fout .read((char *) & userProtection 9. fclose(fout);
,sizeof(userProtec7on[0])); 10. prinC("\n User ID :\t");
9. fout.close(); 11. prinC("%s", userProtec7on [0].username);
10.cout<< "User ID :"; 12. prinC("user Password: ");
11.cout << userProtec7on [0]. username; 13. printf("%s", userProtection [0]. password );
12.cout<< "\tuser Password: "; }
13.cout << userProtec7on [0]. password;}

‫بما انه سجل واحد فليس بحاجة إلى عداد يعد للستة فقط نطبع الموقع األول الذي فيه المستخدم ھكذا‬

‫ في مثال السجالت لو أردنا طباعة السجل الرابع والخامس والسادس‬


‫( حتى يؤشر في نھاية السجل الثالث ونجعل‬offset) ‫ نضرب حجم واحد من السجالت في ثالثة ونجعلھا قيمة‬:‫تحليل‬
‫التحرك من البداية وفي دالة القراءة نجعله يقرأ ثالث سجالت لكي يقرئ السجل الرابع والخامس والسادس‬
‫( في المثال إلى خطوتين بالشكل التالي لكي يطبع سجل الثالث فقط‬٨) ‫نغير الخطوة رقم‬
c++ ‫البرمجة بلغة‬ c ‫البرمجة بلغة‬
fout.seekg(3*sizeof(userProtec7on[0])); fseek(fout,3*sizeof(userProtec7on[0]), 0 );
fout .read((char *) & userProtection, fread(& userProtection ,sizeof(userProtec7on[0]) ,3,
3*sizeof(userProtec7on[0])); fout);

‫( إلى اصفر من ثالثة ألننا سنطبع ثالث سجالت فقط‬١٠) ‫ونغير شرط توقف العداد في خطوة رقم‬

Step By step to Learn C or C++ By:Hussien Ahmmed Taleb 217


‫النھاية‬

Step By step to Learn C or C++ By:Hussien Ahmmed Taleb 218

You might also like