You are on page 1of 105

‫‪C++ BOOK‬‬

‫كتاب‪C++‬‬
‫باللغة العربية‬

‫تأليـــف‬

‫أحمد صباح الجنابي‬


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

‫نبذة عن الكتاب‬
‫بسهولة الشرح وبساطت ِه ‪,‬كما انه مدعوما ً باللغة العربية‬ ‫يتميز هذا الكتاب‬
‫القدرة على فهم الكود وتحليله ‪ ,‬سيوضح لك الخطوات‬ ‫مما يسهل للقارئ‬
‫حدثت حتى يستطيع القارئ فهم جميع االكواد‬ ‫البرمجية وكيف‬
‫على تواصل مع الكتاب‪.‬‬ ‫البرمجية ويكون‬

‫األهداء‬

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

‫إلى طالب قسم نظم معلومات ‪ ....‬احتراما‬

‫إلى من باتوا في دجى الليل يدعون لي(أبي وأمي )‪ ....‬حبا ووفاء‬

‫إلى أصدقائي األوفياء ‪ ....‬تقديرا‬

‫إلى موالنا صاحب العصر والزمان ‪ ...‬عزا وفخرا‬

‫اهدي هذا الجهد القليل‪...‬‬

‫ت جديدة"‬
‫" غ ًدا ستنبُت في جبين األفق نجما ٍ‬
‫الحزن أيام سعيدة‬
‫ِ‬ ‫وغ ًدا ستُورق في ليالي‬

‫‪1‬‬ ‫أحمـد صبــاح الجنابـي‬


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

‫‪2‬‬ ‫أحمـد صبــاح الجنابـي‬


‫التعرف على البرنامج المستخدم في تنفيذ البرامج‪:‬‬

‫>‪#include <iostream.h‬‬
‫>‪#include <conio.h‬‬ ‫المكتبة‬
‫)( ‪void main‬‬ ‫دالة البرنامج الرئيسي‬
‫{‬
‫;)( ‪getch‬‬ ‫ايقاف تنفيذ الشاشة‬
‫}‬

‫مالحظة‪ -:‬في مكتبة >‪ #include <conio.h‬يوجد ايعازان مهمان ‪.‬‬

‫;)(‪clrscr‬‬ ‫لتنظيف الشاشة‬

‫;)(‪getch‬‬ ‫ايقاف تنفيذ الشاشة‬

‫" االبتسامة انعكاس لذاتك ‪..‬‬


‫واجهة لجمال روحك ‪...‬‬
‫إنها جمال يسكن الجمال "‬

‫‪3‬‬ ‫أحمـد صبــاح الجنابـي‬


‫دوال اإلدخال واألخراج ‪:‬‬
‫>‪#include <iostream.h‬‬
‫>‪#include <conio.h‬‬ ‫‪cin‬‬ ‫األدخال‬
‫)( ‪void main‬‬ ‫تستخدم دوال االدخال ألدخال معلومات من‬

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


‫قيم الى المتغيرات المعرفة داخل البرنامج‬
‫;‪int i‬‬ ‫من خالل ادخال المستخدم لقيمها لغرض‬
‫;‪cin >> i‬‬ ‫معالجتها القيام بالعمليات المطلوبة‪.‬‬
‫;)( ‪getch‬‬
‫}‬

‫‪cout‬‬ ‫األخراج‬
‫>‪#include <iostream.h‬‬
‫>‪#include <conio.h‬‬ ‫تستخدم دوال األخراج لعرض نواتج‬
‫العمليات التي نريدها أمام المستخدم في‬
‫)( ‪void main‬‬
‫شاشة التنفيذ ‪.‬‬
‫{‬
‫;"‪cout << "Hello‬‬
‫;)( ‪getch‬‬
‫}‬ ‫مالحظات حول األخراج‬
‫‪cout‬‬
‫● اذا اردنا ان نطبع الجملة كما هي ‪ ,‬فنضعها بين دبل كوتيشن " الجملة "‬

‫;"‪cout << "Hello‬‬


‫● اذا اردنا ان نطبع القيمة ‪,‬فنضع القيمة هكذا‪:‬‬
‫;"‪cout << "x‬‬
‫● اذا اردنا ان نطبع القيمة ومن ثم ننزل سطر‪.‬‬
‫;‪cout << "x"<<endl‬‬

‫‪4‬‬ ‫أحمـد صبــاح الجنابـي‬


‫أنواع المتغيرات‬
‫يتم استخدام هذا النوع في تعريف متغير من نوع رقمي مثل ‪3‬‬ ‫‪int‬‬

‫يتم استخدام هذا النوع في تعريف متغير من نوع عشري مثل ‪21.2‬‬ ‫‪flot‬‬

‫يتم استخدام هذا النوع في تعريف متغير من نوع حرف‬ ‫‪char‬‬

‫يتم استخدام هذا النوع في تعريف متغير من نوع كالم نص‬ ‫‪string‬‬

‫‪-‬الصيغة العامة لتعريف المتغيرات كاألتي ‪:‬‬

‫; ‪Var Type Var name‬‬

‫نوع المتغير‬ ‫اسم المتغير‬

‫● كل متغير يجب التصريح عنه قبل استخدام ُه في البرنامج‪.‬‬

‫● من الحكمة اعطاء قيمة ابتدائية لكل متغير يتم التصريح عنه‪.‬‬

‫>‪#include <iostream.h‬‬
‫>‪#include <conio.h‬‬
‫)( ‪void main‬‬
‫{‬
‫هنا تعرف المتغيرات‪//‬‬
‫;‪int i‬‬
‫;‪cin >> i‬‬
‫};)( ‪getch‬‬

‫‪5‬‬ ‫أحمـد صبــاح الجنابـي‬


‫بعض العالمات المهمة في الطباعة وترتيب الشاشة امام المستخدم‬
‫ترتيب عمودي‬ ‫‪\v‬‬

‫ترتيب أفقي‬ ‫‪\h‬‬

‫أنزال المؤشر الى سطر جديد‬ ‫‪\n‬‬

‫وضع أربع فراغات خلف العنصر التي تمت طباعته حاليا‬ ‫‪\t‬‬

‫■العمليات الحسابية وطرق تمثيلها‪:‬‬

‫العمليات الرياضية ‪:‬تستخدم إلجراء العمليات الرياضية على المتغيرات واألرقام‪.‬‬

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

‫الزيادة والنقصان بمقدار واحد‬ ‫‪ ++‬او ‪--‬‬

‫االشارة السالبة‬ ‫‪-‬‬

‫الضرب والقسمة وباقيها‬ ‫* او ‪ /‬او ‪%‬‬


‫الجمع او الطرح‬ ‫‪ +‬او ‪-‬‬

‫التساوي‬ ‫=‬

‫‪6‬‬ ‫أحمـد صبــاح الجنابـي‬


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

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

‫النفي‬ ‫!‬

‫" و " ‪AND‬‬ ‫&&‬

‫" او " ‪OR‬‬ ‫||‬

‫اكبر او اصغر‬ ‫> او <‬


‫المساواة‬ ‫==‬
‫ال يساوي‬ ‫=!‬

‫■ تمثيل العمليات الرياضية ‪:‬‬

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

‫المثال التالي على اساس عندنا متغيران هما (‪ )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 % b‬‬ ‫‪C=a mod b‬‬ ‫باقي القسمة (‪)%‬‬

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

‫‪7‬‬ ‫أحمـد صبــاح الجنابـي‬


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

‫‪8‬‬ ‫أحمـد صبــاح الجنابـي‬


‫مثال‬
‫مثال‬
‫‪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‬‬

‫‪9‬‬ ‫أحمـد صبــاح الجنابـي‬


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

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

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

‫يبدءا بمقارنة كل عمليتين رياضيتين معا وأيهما له أسبقية أعلى تنفذ اوال‬
‫اذا كان)‪ (a=5,c=10,d=5‬فيكون تسلسل تنفيذ الخطوات‬

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

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

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


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

‫مالحظة‪:‬اذا كان مابين األقواس أكثر من عملية رياضية ايضا داخل األقواس تعمل االسبقيات‬
‫فأيهما له اسبقية أعلى ينفذ أوال ‪.‬‬

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


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

‫‪11‬‬ ‫أحمـد صبــاح الجنابـي‬


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

‫;‪a =a+1‬‬
‫معناه المتغير (‪ )a‬ازداد بمقدار واحد (أي جمع قيمته السابقة مع (‪).‬‬
‫أي لو كان قيمته مثال ‪ 2‬يصبح ‪3‬‬
‫‪----------------------------------‬توضيحي مثال‪-------------------------------------‬‬
‫‪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‬‬

‫‪11‬‬ ‫أحمـد صبــاح الجنابـي‬


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

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

‫توضيح‬

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


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

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

‫توضيح‬

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


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

‫التفائل هو االيمان الذي يقودك الى النجاح‬

‫‪12‬‬ ‫أحمـد صبــاح الجنابـي‬


‫مؤثرات النقصان ‪:‬هي متغيرات من اسمها تنقص بمقدار معيين ‪.‬‬

‫;‪a =a-1‬‬
‫معناه المتغير (‪ )a‬نقص بمقدار واحد (أي طرح من قيمته السابقة بمقدار (‪).‬‬
‫أي لو كان قيمته مثال ‪ 2‬يصبح ‪).‬‬
‫‪----------------------------------‬توضيحي مثال‪-------------------------------------‬‬
‫‪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‬‬

‫‪13‬‬ ‫أحمـد صبــاح الجنابـي‬


‫مثال أكتب بداللة نصف القطر الدائرة ‪.‬برنامج يقوم بحساب مساحة الدائرة ‪area‬‬
‫>‪#include <iostream.h‬‬
‫>‪#include <conio.h‬‬
‫) ( ‪void main‬‬
‫{‬
‫;‪float R, Area‬‬
‫; ‪float p1 = 3.14159‬‬
‫; " ‪cout << " Enter radius of circle:‬‬
‫;‪cin >> R‬‬
‫;‪Area = p1 * R * R‬‬
‫;‪cout << " Area is: " << Area << endl‬‬
‫;)( ‪getch‬‬
‫}‬

‫األنسان الذي يمكنه اتقان الصبر‬


‫يمكنه اتقان أي شئ آخر‪...‬‬

‫‪14‬‬ ‫أحمـد صبــاح الجنابـي‬


‫الفصـل الثانـي*‬

‫الجمل الشرطية والعبارات الشرطية‬


‫● عبارة (‪ (if‬الشرطية االعتيادية‬
‫● عبارة (‪ (if--else‬الشرطية االعتيادية‬
‫● عبارة )‪ (if—else if‬الشرطية االعتيادية‬
‫● عبارة )‪ (Switch_Case‬الشرطية‬

‫‪15‬‬ ‫أحمـد صبــاح الجنابـي‬


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

‫●إذا لم يحقق الشرط )‪ (condition‬أي كانت نتيجة المقارنة هي )‪ )False‬ســوف يعبر جميع الخطوات‬

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

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

‫الذي بين القوسين يكون تابع للعبارة الشرطية تنفذ إذا تحقق الشرط وال تنفذ إذا لم يتحقق الشرط‪.‬‬

‫‪16‬‬ ‫أحمـد صبــاح الجنابـي‬


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

‫مثال توضيحي‬
‫>‪include<iostream.h‬‬
‫من هنا يبدأ تنفيذ البرنامج خطوة بخطوة) هذه أول خطوة)‬
‫)(‪Void Main‬‬
‫{‬
‫الخطوات الموجودة ضمن هذه الدالة ينفذها تباعا‬
‫;‪1. int x‬‬
‫;‪2. cin>>x‬‬
‫) ‪3. If ( x>5‬‬
‫{‬
‫;"‪cout<<"is greter than 5‬‬
‫}‬
‫;‪4. x=x+2‬‬
‫}; ‪5. cout<<"x="<<x‬‬
‫توضيح الخطوات‪:‬‬
‫‪ -1‬يبدا البرنامج بتنفيذ خطوة رقم )‪ )1‬بتعريف متغير (‪ )x‬من نوع ‪integer‬‬
‫‪. -2‬ثم ينفذ خطوة رقم (‪ )2‬ويطلب فيها من المستخدم إدخال قيمة للمتغير (‪ )x‬من شاشة التنفيذ‪.‬‬
‫‪ -3‬ثم يتحقق من الخطوة رقم (‪)3‬‬
‫إذا كان الرقم الذي ادخله المستخدم يحقق الشرط بين قوسي العبارة الشرطية (أي الرقم اكبر من خمسة‬
‫أي انه سوف تكون نتيجة المقارنة )‪ (condition‬هي (‪. ( True‬‬

‫هي‪:‬‬ ‫العالقات التي تستخدم كشروط )‪ (condition‬في العبارة الشرطية ‪if‬‬


‫طريقة تمثيلها في العبارة الشرطية ‪if‬‬ ‫الوظيفة‬ ‫الرمز‬
‫)‪ 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‬‬
‫)‪ If((a>b)&&(a>c‬ينفذ الجملة التابعة لعبارة ‪ if‬إذا كان ‪a‬‬ ‫جمع شرطين ب ‪And‬‬ ‫&&‬
‫اكبر من‪ b‬و ايضا يكون ‪ a‬اكبر من ‪ c‬إي يجب أن يتحقق‬
‫الشرطان حتى تنفذ الجملة‬
‫)‪ If((a>b)||(a>c‬ينفذ الجملة التابعة لعبارة ‪ if‬إذا كان ‪ a‬اكبر‬ ‫جمع شرطين ب ‪or‬‬ ‫||‬
‫من ‪ b‬او يكون ‪ a‬اكبر من‪ c‬إي إذا تحقق واحد من هذان‬
‫الشرطان تنفذ الجملة‬

‫‪17‬‬ ‫أحمـد صبــاح الجنابـي‬


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

‫‪c++‬‬ ‫البرمجة بلغة‬ ‫التنفيذ‬


‫>‪#include<iostream.h‬‬ ‫لو أدخلنا )‪ (a=3,b=2‬كما الحظت قد تنفذه‬
‫)(‪Void main‬‬
‫{‬ ‫الخطوات رقم ) ‪ (2 ,4,8‬ألن شروطها‬
‫;‪1.int a,b‬‬ ‫تحققت‪.‬‬
‫;‪2.cin>>a>>b‬‬
‫) ‪if ( a>b‬‬
‫;"‪3.cout<<"a is large than b‬‬
‫) ‪if ( a>=b‬‬
‫‪4.cout<<"\na is large than or equal‬‬
‫;"‪b‬‬
‫) ‪if ( a<b‬‬
‫;"‪5.cout<<"\na is less than b‬‬ ‫التنفيذ‪:‬‬
‫) ‪if ( a<=b‬‬ ‫‪a is large than b‬‬
‫‪6.cout<<"\n a is less than or equal‬‬
‫;"‪b‬‬ ‫‪a is large than or equal b‬‬
‫) ‪If ( a==b‬‬
‫;"‪7.cout<<"\na is equal than b‬‬ ‫‪a is not equal than b‬‬
‫) ‪if ( a!=b‬‬
‫;"‪8.cout<<"\na is not equal than b‬‬
‫}‬

‫‪18‬‬ ‫أحمـد صبــاح الجنابـي‬


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

‫شكل عبارة (‪ (if--else‬الشرطية‬


‫) ‪If ( condition‬‬
‫{‬
‫‪Statement1‬‬
‫}‬
‫‪else‬‬
‫{‬
‫‪Statement2‬‬
‫}‬

‫● إي بتوضيح أكثر إذا تحقق )‪ (condition‬ينفذ ‪ , Statement1‬وذا لم يتحقق الشرط سينفذ‬


‫تلقائيا ‪.Statement2‬‬

‫● إي إما ينفذ األسطر البرمجية بين قوسي (‪ )If‬أو ينفذ األسطر البرمجية بين قوسي )‪.(else‬‬

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

‫اكتب برنامج يختبر العدد اذا كان موجب أو سالب‬


‫>‪#include<iostream.h‬‬
‫)(‪void main‬‬
‫;‪{ int a‬‬
‫تعريف متغير ‪a‬‬
‫وادخاله‬
‫; ‪cin>>a‬‬
‫) ‪If ( a>0‬‬
‫اذا العدد اكبر من صفر‬
‫;"‪cout <<"positive‬‬
‫اطبع موجب‬
‫‪else‬‬
‫خالف ذلك‬
‫;)"‪cout <<" negative‬‬ ‫اطبع سالب‬
‫}‬

‫‪19‬‬ ‫أحمـد صبــاح الجنابـي‬


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

‫) ‪If ( condi on1‬‬


‫{‬
‫‪Statement1‬‬
‫}‬
‫عدد ‪ else if‬يكون غير محدد يحددها المستخدم حسب الحاجة ‪else if( condi on‬‬
‫‪)//‬‬
‫{‬
‫‪Statement2‬‬
‫}‬
‫) ‪else if( condi on3‬‬
‫{‬
‫‪Statement3‬‬
‫}‬
‫نضع أن نستطيع ‪ else‬إليها نحتاج لم إذا نحذفها أو ‪else //‬‬
‫{‬
‫‪Statement4‬‬
‫}‬

‫اذا لــم تحــاول لــن تتعلم‬

‫‪21‬‬ ‫أحمـد صبــاح الجنابـي‬


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

‫) يظهر يوم األحد في‬1( ‫) اكتب برنامج يقوم بطباعة أيام األسبوع بحيث إذا ضغطنا‬1‫مثال‬
‫؟‬.. ‫) يمثل السبت‬2( ‫شاشة التنفيذ والبقية بالتسلسل إلى‬
#include<iostream.h>
Void 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" ;
}

21 ‫أحمـد صبــاح الجنابـي‬


‫عبارة )‪ (Switch_Case‬الشرطية‬
‫هي مجموعة عبارات شرطية )‪ (Case‬ويقارن القيمة عنــــد كل )‪ (Case‬مـــع المتغير في‬
‫)‪ (Switch‬ويتم التحقق مـــــــن الشروط وقت التنفيذ فإذا لم يتحقـق الشرط األول ينتقل إلى‬
‫)‪ (Case‬الثانية فإذا لم يتحقق الشرط الثاني ينتقل إلى )‪ (Case‬الثالثــة حتى أخيرا يصل إلى الشرط‬
‫الذي يتحقق وإذا تحقق واحد من )‪ (Case‬سوف ينفذ ما في داخلها وبهمل البقية وإذا لم ينفذ إي‬
‫واحد منهن سوف يتجه لينفذ ما في داخل )‪ . (default‬وتكون مشابه كثيرا جدا )‪.(if else if‬‬
‫شكل عبارة )‪ (Switch_Case‬الشرطية‬
‫) ‪Switch(Truth of Case‬‬
‫‪{ Case condi on1:‬‬ ‫عدد ال ‪ Case‬يكون غير محدد يحددها المستخدم حسب الحاجة‬
‫{‬
‫‪Statement1‬‬
‫;‪} Break‬‬
‫‪Case condi on2‬‬
‫{‬
‫‪Statement2‬‬
‫;‪} Break‬‬
‫‪Case condi on3:‬‬
‫{‬
‫‪Statement3‬‬
‫;‪} Break‬‬
‫نضع أن نستطيع ‪ default‬نحتاجها لم إذا نحذفها أو ‪default: //‬‬
‫}} ‪{ Statement4‬‬

‫‪22‬‬ ‫أحمـد صبــاح الجنابـي‬


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

#include<iostream.h>
Void 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" ; }
}

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

23 ‫أحمـد صبــاح الجنابـي‬


.‫ برنامج يقوم بفحص األعداد المدخلة زوجية أم فردية‬: ‫مثال‬

#include <iostream.h>
#include <conio.h>
void main ()
{
int x, y;
L: cout << "\n Enter a number: " ;
cin >> x;
y=x%2;
if (y==0)
cout << " The number is even\n" << endl;
else
cout << " The number is odd\n" << endl;
goto L;
getch ();
}

‫عندما تستيقظ القدرات الكامنة بداخلك‬


.‫فسوف تحولك الى شخص عظيم‬

24 ‫أحمـد صبــاح الجنابـي‬


‫ اكتب برنامج لتقريب أي عدد تدخله‬/‫س‬ ‫التنفيذ‬
#include<iostream.h>
Void main()
{int i,k;
float y,m;
cin>>y ;
i=y;
k=i+1;
m=i+0.5;
if(y>=m)
cout<<"near to= "<< k ;
else
cout<<"near to= "<<i;
}

‫لمعرفة هل العدد الذي ادخلته عدد اولي ام ال‬/‫س‬ ‫التنفيذ‬


#include<iostream.h>
Void main()
{int i,m,booleanx;
booleanx=0;
cin>>m;
for(i=2;i<m;i++)
if(m%i==0)
booleanx=1;
if (booleanx==1)
cout<<"is no prime" ;
else
cout<<"is prime" ;
}

25 ‫أحمـد صبــاح الجنابـي‬


‫الفصـل الثالث*‬

‫عبارات أو جمل التكرار )‪(loop‬‬


‫● عبارة )‪ ( For--Loop‬التكرارية االعتيادية‬
‫● عبارة )‪ ( For--Loop‬التكرارية المتداخلة‬
‫)‪)Break‬‬ ‫● عبارة‬
‫● عبارة )‪(continue‬‬
‫● عبارة )‪ (While‬التكرارية‬
‫● عبارة )‪ (While‬التكرارية المتداخلة‬
‫● عبارة )‪ (Do--While‬التكرارية‬

‫‪26‬‬ ‫أحمـد صبــاح الجنابـي‬


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

‫هيكلية ‪For‬‬
‫)‪for (Initializing; Boolean_Expression; Update‬‬
‫بداية الحلقة‬ ‫شرط التوقـف‬ ‫مقدار الزيادة أو النقصان‬

‫{‬
‫‪Statement‬‬
‫}‬

‫)‪ :(Initializing‬هي القيمة البدائية المعطاة للمتغير التي منها سيبدأ العد‪(.‬مثال ‪.)i=0‬‬ ‫‪-‬‬
‫‪ :(Boolean_Expression) -‬هو شرط التوقف الذي عندما تصبح قيمة المتغير غير محققة لشرط‬
‫التوقف سوف يخرج من عبارة )‪.( For‬‬
‫‪ :(Update) -‬هي مقدار الزيادة أو النقصان في قيمة المتغير في كل دورة )‪. )loop‬مثال )‪ (i++‬او)‪.(i--‬‬
‫‪ :(statement)-‬هي الخطوات البرمجية التي ستنفذ عدد من المرات‪ .‬إذا كانت عبارة عن خطوة برمجية‬
‫واحدة فليس بحاجة لوضعها داخل أقواس وإذا كانت أكثر من خطوة يجب وضعها داخل أقواس‪.‬‬

‫‪27‬‬ ‫أحمـد صبــاح الجنابـي‬


‫مثال‪ : 1‬اكتب برنامج يقوم بطباعة االعداد من الصفر الى االربعة ( ‪) 0 1 2 3 4‬؟‬
‫>‪#include<iostream.h‬‬
‫)(‪Void main‬‬
‫;‪{ int i‬‬
‫)‪for (i=0; i<5; i++‬‬
‫;"‪cout<<i<<"\t‬‬
‫}‬

‫)‪for (i=0; i<5; i++‬‬

‫بداية الحلقة‬ ‫شرط التوقـف‬ ‫مقدار الزيادة‬

‫مثال‪ : 2‬اكتب برنامج يقوم بطباعة االعداد من االربعة الى الصفر ( ‪) 4 3 2 1 0‬؟‬
‫>‪#include<iostream.h‬‬
‫)(‪Void main‬‬
‫;‪{ int i‬‬
‫)‪for (i=4; i>=0; i--‬‬
‫;"‪cout<<i<<"\t‬‬
‫}‬

‫)‪for (i=4; i>=0; i--‬‬

‫بداية الحلقة‬ ‫شرط التوقـف‬ ‫مقدار النقصان‬

‫‪28‬‬ ‫أحمـد صبــاح الجنابـي‬


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

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

‫مثال‪ : 3‬اكتب برنامج لجمع اإلعداد الفردية بين )‪(0- 100‬؟‬


‫>‪#include<iostream.h‬‬
‫)(‪Void main‬‬
‫;‪{ int i, sum=0‬‬
‫)‪for (i=0; i<100; i=i+2‬‬
‫; ‪sum += i‬‬
‫;‪cout<< " sum =";<< sum‬‬
‫}‬

‫‪Sum=2500‬‬

‫)‪for (i=0; i<100; i=i+2‬‬

‫بداية الحلقة‬ ‫شرط التوقـف‬ ‫مقدار الزيادة ‪2‬‬

‫;‪cout<< " sum =";<< sum‬‬


‫يطبع كما هو‬ ‫يطبع ناتج العملية‬

‫‪Sum= 2500‬‬

‫‪29‬‬ ‫أحمـد صبــاح الجنابـي‬


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

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

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

‫>‪#include<iostream.h‬‬
‫)(‪Void main‬‬
‫;‪{ int i,aveg,n‬‬ ‫تصريح‬
‫;‪int sum=0‬‬
‫;‪cin>> n‬‬ ‫ادخال‬
‫{ )‪for (i=0; i<10; i++‬‬ ‫‪For‬‬
‫}; ‪sum += i‬‬
‫;‪aveg=sum/10‬‬ ‫عملية الجمع‬

‫; ‪Cout<<" aveg ="<< aveg‬‬


‫ايجاد المعدل‬
‫}‬

‫اجــعل كل يــوم ‪ ,‬بــدايــة جديـدة لك‬

‫‪31‬‬ ‫أحمـد صبــاح الجنابـي‬


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

‫تحليل ‪:‬العدد األولي هو العدد الذي يقبل القسمة على نفسه وعلى واحد فقط (إذا قبل الرقم القسمة على غير‬
‫هذان الرقمان فهو عدد غير أولي)‪. .‬ولحل هذا السؤال نكون عداد يعد من االثنان إلى اقل من الرقم‬
‫المدخل بواحد( مثال إذا كان الرقم المدخل ‪ 21‬نكون عدد يعد من ‪ 2‬إلى ‪ ) 2١‬وإذا قبل الرقم المدخل‬
‫القسمة على إي من أرقام العداد التي سيعدها وهي المحصورة بين اثنان واقل من الرقم بواحد فيكون عدد‬
‫غير أولي وإذا لم يقبل القسمة على إي من هذه اإلعداد فهو عدد أولي‪.‬‬
‫مثال ‪ :5‬اكتب برنامج يدخل عدد ويطبع هل هذا العدد اولي أم ال؟‬

‫>‪#include<iostream.h‬‬
‫)(‪Void main‬‬
‫;‪{int i,n‬‬
‫;‪int booleanx=0‬‬
‫;‪cin>> n‬‬
‫)‪for(i=2;i< n ;i++‬‬
‫)‪if( n%i==0‬‬
‫;‪booleanx=1‬‬
‫)‪if (booleanx==1‬‬
‫; "‪cout<<"The Number is no prime‬‬
‫‪else‬‬
‫} ; "‪cout<<" The Number is prime‬‬
‫توضيح الخطوات‪:‬‬
‫‪ -.‬تم تعريف متغير للعداد وأخر للرقم المدخل‬
‫‪ -2‬تم تعريف متغير واعتبر كمتغير منطقي وأعطية قيمة صفر إذا كان الرقم المدخل أولي يبقى صفر حتى نهاية‬
‫البرنامج وإذا كان غير أولي يتغير في خطوة رقم ( ‪ )٦‬إلى واحد للداللة على أن الرقم الذي تم إدخاله رقم غير‬
‫أولي حتى في نهاية البرنامج وبالتحديد في خطوة رقم ) ‪( ٧‬نتأكد من قيمة هذا المتغير إذا بقى صفر فكان الرقم‬
‫المدخل أولي وإذا تغير إلى واحد كان الرقم المدخل غير أولي‪.‬‬
‫‪ -3‬يطلب من المستخدم إدخال الرقم من شاشة التنفيذ للتحقق منه‪.‬‬
‫‪-4‬عداد يعد من االثنان إلى اقل من الرقم المدخل بواحد ويزداد بمقدار واحد‪.‬‬
‫‪ -5‬نتحقق هل يقبل الرقم المدخل القسمة على أي رقم من األرقام التي سيعدها العداد إذا قبل القسمة نغير قيمة‬
‫للمتغير المنطقي إلى واحد في خطوة رقم) ‪.)٦‬‬
‫‪ -٦‬بعد أن ينتهي العداد من العد سيتجه البرنامج إلى هذه الخطوة ونتأكد من قيمة المتغير المنطقي إذا تغيرت إلى واحد‬
‫نطبع رسالة أن عدد غير أولي وإذا بقيت صفر نطبع رسالة أن الرقم الذي تم إدخاله هو عدد أولي‪.‬‬

‫‪31‬‬ ‫أحمـد صبــاح الجنابـي‬


‫مثال‪: 6‬برنامج إليجاد مفكوك اإلعداد‪.‬؟‬
‫تحليل‪ :‬المفكوك هو عملية ضرب العدد باإلعداد التي هي اقل منه وصوال إلى الواحد( مثال مفكوك‪ 6‬هو‬
‫(‪ )6!=6*5*4*3*2*1‬وبرمجيا لحل هذا السؤال نكون عدد يبدأ من الواحد وينتهي بالرقم المدخل‬
‫ونضرب قيم العداد واحدة باألخرى إلى النهاية نحصل على المفكوك‪..‬‬
‫مثال‪ : 6‬اكتب برنامج إليجاد مفكوك اإلعداد (‪)factoral‬؟‬
‫>‪#include<iostream.h‬‬
‫)(‪Void main‬‬
‫;‪{ int i,n‬‬ ‫تصريح‬

‫;‪int fact=1‬‬
‫; ‪cin>> n‬‬ ‫ادخال‬

‫)‪for(i=1;i<= n ;i++‬‬ ‫‪For‬‬


‫;‪fact = fact *i‬‬
‫‪Factoral‬‬
‫}; ‪cout<<"factoral= "<< fact‬‬

‫فال يمكن اعطائه صفر ألنه أي عدد يضرب *‪ 0‬يكون الناتج‬ ‫●يجب ان نصرح عن ‪factoral=1‬‬
‫صفر ‪.‬‬

‫بقدر ما تركز مجهودك في أمر ما ‪,‬‬


‫بقــــــدر مـــا تحــقق النجــاح فيه‪.‬‬

‫‪32‬‬ ‫أحمـد صبــاح الجنابـي‬


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

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

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


‫>‪#include<iostream.h‬‬
‫)(‪Void main‬‬
‫;‪{ int i,j‬‬ ‫تصريح‬

‫)‪for(i=1;i<7;i++‬‬ ‫)‪For(i‬‬

‫;‪cout<<i‬‬ ‫االخراج‬

‫)‪for(j=i;j>0;j--‬‬ ‫)‪For(j‬‬

‫} ;‪cout<<j‬‬ ‫االخراج‬

‫مثال ‪: 8‬لطباعة األرقام المكافئة لألحرف من ‪A-Z‬‬


‫>‪#include <iostream.h‬‬
‫>‪#include <conio.h‬‬
‫)( ‪void main‬‬
‫{‬
‫)‪for (int i='A' ;i<='Z' ;i++‬‬
‫;‪cout << " " << i‬‬
‫;)( ‪getch‬‬
‫}‬

‫‪33‬‬ ‫أحمـد صبــاح الجنابـي‬


90 -65 ‫ لطباعة األحرف الكبيرة المكافئة لألرقام من‬:9 ‫مثال‬
#include <iostream.h>
#include <conio.h>
void main ()
{
for (int i='A' ;i<='Z' ;i++)
cout << " " << i;
getch ();
}

.‫ برنامج يقوم بإدخال عددين ومن ثم إجراء عمليات الجمع والطرح والضرب والقسمة عليهما‬:10 ‫مثال‬
#include <iostream.h>
#include <conio.h>
void main ()
{
int x, y;
cout << "x= ";
cin >> x;
cout << "y= ";
cin >> y;
cout << "x+y= " << x+y << endl;
cout << "x-y= " << x-y << endl;
cout << "x*y= " << x*y << endl;
if (y != 0)
cout << "x/y= " << (float)x/y << endl;
getch ();
}

34 ‫أحمـد صبــاح الجنابـي‬


.‫ وذلك بتكراره‬x ‫ على الشاشة متكون من حرف‬E ‫ برنامج يظهر حرف‬:11 ‫مثال‬
#include <iostream.h>
#include <conio.h>
void main ( )
{
cout << "xxxxxxxx" << endl;
cout << "x" << endl;
cout << "x" << endl;
cout << "xxxxxxxx" << endl;
cout << "x" << endl;
cout << "x" << endl;
cout << "xxxxxxxx" << endl;
getch ();
}

14 -0 ‫ برنامج يقوم بإظهار مربعات األرقام من‬:12 ‫مثال‬


#include <iostream.h>
#include <conio.h>
void main ( )
{
for (int i = 0; i < 15; i++)
cout << i * i << " ";
getch ();
}

35 ‫أحمـد صبــاح الجنابـي‬


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

‫هيكلية )‪( For--Loop‬‬


‫)‪for (Initializing1; Boolean_Expression1; Update1‬‬
‫{‬
‫)‪for (Initializing2; Boolean_Expression2; Update2‬‬
‫{‬
‫‪statement‬‬
‫}}‬

‫الحياة كفاح ‪,‬ســــالحها‬


‫االرادة ‪ ,‬وغايتهـــا السعـــادة‪,‬‬
‫وروحها األمل‬

‫‪36‬‬ ‫أحمـد صبــاح الجنابـي‬


‫مثال ‪:13‬برنامج جدول ضرب من ‪ 1‬الى ‪1١‬‬

‫تحليل ‪ :‬لو نركز في السؤال نراه يريد جدول ضرب وجدول الضرب مكون من ضرب رقميين فعلى سبيل‬
‫المثال جدول ضرب ‪ 1‬يضرب رقم واحد باألرقام من واحد إلى العشرة وجدول ضرب ‪ 2‬يضرب االثنان‬
‫باألرقام من واحد إلى عشرة ويستمر ‪ !.....‬أي إننا سنحتاج إلى عبارتين تكراريتين عبارة خارجية تخص‬
‫جدول ضرب الرقم وأرقام داخلية تضرب هذه الرقم باألرقام من واحد إلى عشرة‪.‬‬
‫هيكلية )‪( For--Loop‬‬
‫>‪#include<iostream.h‬‬
‫)(‪Void main‬‬
‫;‪{ int i,j‬‬
‫)‪for (i=1; i<=10; i++‬‬
‫;"‪{ cout<<"Multiply tabel for("<<i<<").\n-------------------------------\n‬‬
‫)‪for (j=1; j<=10; j++‬‬
‫;"‪Cout<< j<<" * " <<i<<"="<<i*j<<"\n‬‬
‫}};"‪Cout<<"\n‬‬

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

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

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

‫‪37‬‬ ‫أحمـد صبــاح الجنابـي‬


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

#include<iostream.h>
Void 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" ;}
}

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

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

38 ‫أحمـد صبــاح الجنابـي‬


‫مثال ‪:16‬برنامج يكون شكل نقاط كما في الرسم( هذه النقاط هي مواقع عناصر ا لمصفوفة‬
‫ذات بعدين (‪)5*5‬؟‬

‫>‪#include<iostream.h‬‬
‫)(‪Void main‬‬
‫;‪{ int i,j‬‬
‫)‪for (i=0; i<5; i++‬‬
‫‪{f‬‬
‫)‪or (j=0; j<5; j++‬‬
‫;" )" << ‪cout<<"("<< i<<" , " <<j‬‬
‫};"‪Cout<<"\n‬‬
‫}‬

‫أن تحيــــط نفســــــك بااليجابيين‬


‫المحبين مـــن الناس ‪ ,‬هو نصف‬
‫الطريق الى النجاح‬

‫‪39‬‬ ‫أحمـد صبــاح الجنابـي‬


:‫ اكتب برنامج لطباعة االشكال التالية‬/‫س‬
Ex17
#include<iostream.h>
Void main()
{int z,x;
for(z=1;z<=5;z++){
cout<<"*\n" ;
for(x=0;x<=z-1;x++)
cout<<" " ;
}}

Ex18
#include<iostream.h>
Void main()
{int z,x;
for(z=1;z<=5;z++){
for(x=z;x<=5;x++)
cout<<" " ;
cout<<"*\n" ;
}}

Ex19
#include<iostream.h>
Void main()
{int I,j,k;
for(i=1;i<=7;i+=2){
for(k=i;k<7;k+=2)
cout<<" " ;
for(j=i;j>0;j--)
cout<<"*" ;
cout<<"\n" ;}}

41 ‫أحمـد صبــاح الجنابـي‬


‫س ‪ / 20‬اكتب برنامج لحساب عدد االرقام المدخلة اليه بحيث اذا ادخلنا ‪ .١١‬ينتج ‪3‬‬
‫>‪#include<iostream.h‬‬
‫)(‪Void main‬‬
‫;‪{int i,k,m‬‬
‫;‪cin>>k‬‬
‫;‪m=1‬‬
‫)‪for(i=1;i<=4;i++‬‬
‫;‪{m=m*10‬‬
‫)‪if(k<m‬‬
‫{‬
‫;‪Cout<<"number of bit=<<i‬‬
‫}};‪break‬‬
‫}‬

‫س‪: 21‬برنامج لطباعة المتسلسلة االتية (‪).2345٦٧٦5432.‬؟‬

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

‫تحقيق النجاح ‪ ,‬يتطلب‬


‫منك أن تكون متفائال‬

‫‪41‬‬ ‫أحمـد صبــاح الجنابـي‬


:‫ اكتب برنامج لطباعة الدالة االتية‬/ 22‫س‬

#include <iostream.h>
main()
{int i;
float y,x,s,f,m,n,d;
f=y=1;
m=-1;
n=0;
cout<<"enter the power of";
cin>>d;
cout<<"enter the number";
cin>>x;
for(i=1;i<=d;i++){
f=f*i;
m=m*x;
n=-m; // inverse sgnal inevery loop
s=n/f;
y=y+s;}
cout<<y;}

‫ اكتب برنامج لمعرفة هل العدد الذي ادخلته زوجي ام فردي دون استخدام القسمة وباقيها؟‬/23‫س‬
#include<iostream.h>
Void main()
{int i,j,a;
cin>>a;
for(i=1;i<30 ;i=i+2) {
if(a==i)
cout<<a<<" is odd";}
for(j=0;j<30 ;j=j+2){
if(a==j)
cout<<a<<" is even ";
}}

42 ‫أحمـد صبــاح الجنابـي‬


:‫ اكتب برنامج يطبع الشكل التالي دون استخدام المصفوفة‬/ 24‫س‬

#include <iostream.h>
Void main()
{int i,j,k,m,n,o,p;
for(i=3;i>0;i--){
cout<<"";
for(j=i;j>0;j--) cout<<" ";
for(k=i*2;k<=6;k++)
cout<< "*";
cout<<"\n";}
for(m=7;m>0;m=m-2){
cout<<"";
for(n=m;n>0;n--)
cout<<"*";
cout<<"\n";
for(o=m;o<=7;o=o+2)
cout<<" ";}}

3١ ‫ و‬١ ‫ اطبع االحرف الزوجية بين‬/25‫س‬

#include<iostream.h>
Void main()
{int i,j;
for(i=2;i<30;i+=2)
cout<<i<<"\t";
}

3١ ‫ و‬١ ‫ اطبع االحرف الفردية بين‬/26‫س‬

#include<iostream.h>
Void main()
{i
nt i,j;
for(i=.;i<30;i+=2)
cout<<i<<"\t";}

43 ‫أحمـد صبــاح الجنابـي‬


H ‫ اطبع الشكل التالي دون استخدام المصفوفة‬/27‫س‬

#include<iostream.h>
Void main()
{int i,j,k; //for print my na
for(i=1;i<5;i++){
for(j=0;j<2;j++)
cout<<"*";
if((i==1)||(i==4))
cout<<" ";
else
cout<<"*";
for(k=0;k<2;k++)
cout<<"*";
cout<<"\n";}}

‫ اطبع الشكل التالي دون استخدام المصفوفة‬/28‫س‬

#include<iostream.h>
Void main()
{int i,j,k;
for(i=5;i>=0;i--){
for(j=0;j<=i;j++)
cout<<"*";
cout<<"\n";
for(k=i;k<=5;k++)
cout<<" ";
}}

‫اطبع الشكل التالي دون استخدام المصفوفة‬: /29‫س‬

#include<iostream.h>
Void main()
{int i,j;
for(i=5;i>=0;i--){
for(j=i;j<=5;j++)
cout<<"*";
cout<<"\n";
}}

44 ‫أحمـد صبــاح الجنابـي‬


‫)‪:)Break‬‬ ‫عبارة‬
‫تستخدم هذه الدالة للتوقف عن العبارات التكرارية عند شرط معين واالنتقال إلى ما بعد العبارة التكرارية‬
‫(الحظ شكل السهم إلى أين ينتقل‪).‬أي انه فقط يخرج من عبارة التكرار الموجود هو فيها وينتقل لينفذ‬
‫الخطوات البرمجية التي تليه‪...‬‬
‫موقع عبارة )‪ )Break‬في البرنامج‬
‫)‪for (Initializing1; Boolean_Expression1; Update1‬‬
‫{‬
‫)‪If(condition‬‬
‫;‪Break‬‬
‫;‪Statement‬‬
‫}‬

‫مثال ‪:‬لو كان لدينا عبارة تكرارية تعد من (‪ )2١١-1‬ونريدها عندما يصل العداد إلى (‪ )٧5‬يخرج البرنامج‬
‫من العبارة التكرارية إليك هذا المثال‪.‬‬
‫موقع عبارة )‪ )Break‬في البرنامج‬
‫>‪#include<iostream.h‬‬
‫)(‪Void main‬‬
‫;‪{ int i‬‬
‫)‪for (i=1; i<200; i++‬‬
‫)‪{ If (i==75‬‬
‫;‪break‬‬
‫}; "‪cout<<i<<"\t‬‬
‫;"‪cout<<"\nis finished print to 75‬‬
‫}‬

‫تالحظ قطعت طباعة العداد عند ‪ ٧4‬وطبع‬


‫بعدها رسالة الخطوة البرمجية رقم ( ‪)٦‬‬

‫‪45‬‬ ‫أحمـد صبــاح الجنابـي‬


‫عبارة )‪:( continue‬‬
‫تستخدم هذه الدالة إلهمال الخطوات البرمجية التي تليها واالنتقال إلى عبارة التكرار وعد عدة جديدة حسب‬
‫شرط عبارة التكرار إذا كانت تقبل عدة جديدة) الحظ شكل السهم إلى أين ينتقل (‪ .‬أي انه فقط بهمل‬
‫ال(‪ (Statement‬وينتقل إلى عبارة التكرار لبيداء عدة جديدة اعتيادية‪.‬‬

‫موقع عبارة )‪ (continue‬في البرنامج‬


‫)‪for (Initializing1; Boolean_Expression1; Update1‬‬
‫)‪{ If (condition‬‬
‫;‪Continue‬‬
‫;‪Statement‬‬
‫}‬
‫مثال ‪ :‬لو كان لدينا عبارة تكرارية تعد من (‪ )2١١-1‬ونريدها عندما يصل العداد إلى (‪)٧5‬‬
‫بهمل الخطوات البرمجية التي تليه داخل عبارة التكرار أي ال يطبع رقم (‪ )٧5‬؟‬
‫موقع عبارة (‪ )continue‬في البرنامج‬
‫>‪#include<iostream.h‬‬
‫)(‪Void main‬‬
‫;‪{ int i‬‬
‫)‪for (i=1; i<200; i++‬‬
‫)‪{ If (i==75‬‬
‫;‪continue‬‬
‫}; "‪cout<<i<<"\t‬‬
‫;" ‪cout<<"\ nis finished print to200 execpt 75 is not print‬‬
‫}‬

‫لم يتم طباعة رقم ‪ ٧5‬طبع رقم ‪٧4‬‬


‫وبعدها طبع رقم ‪٧٦‬‬

‫‪46‬‬ ‫أحمـد صبــاح الجنابـي‬


‫عبارة )‪ (While‬التكرارية ‪:‬‬
‫هي عبارة تكرارية تستخدم لتكرار خطوات برمجية المحصورة بين قوسيها لعدد من المرات تكون مشابه‬
‫تماما لعبارة التكرار وتستطيع المقارنة بين هيكلية هاتان العبارتان التكراريتان وسوف تجد التشابه بينهما‪.‬‬

‫هيكلية عبارة )‪ (While‬في البرنامج‬


‫‪Initializing‬‬
‫)‪while ( Boolean_Expression‬‬
‫{‬
‫;‪Statement‬‬
‫‪Update‬‬
‫}‬

‫)‪ :(Initializing‬هي القيمة البدائية المعطاة للمتغير التي منها سيبدأ العد‪(.‬مثال ‪.)i=0‬‬ ‫‪-‬‬
‫‪ :(Boolean_Expression) -‬هو شرط التوقف الذي عندما تصبح قيمة المتغير غير محققة لشرط‬
‫التوقف سوف يخرج من عبارة )‪.)while‬‬

‫)‪ :(Update‬هي مقدار الزيادة أو النقصان في قيمة المتغير في كل دورة )‪. )loop‬مثال )‪ (i++‬او‪(i-‬‬ ‫‪-‬‬
‫)‪.-‬‬
‫‪ :(statement)-‬هي الخطوات البرمجية التي ستنفذ عدد من المرات‪ .‬إذا كانت عبارة عن خطوة‬
‫برمجية واحدة فليس بحاجة لوضعها داخل أقواس وإذا كانت أكثر من خطوة يجب وضعها داخل أقواس‪.‬‬

‫‪47‬‬ ‫أحمـد صبــاح الجنابـي‬


‫مثال‪ : 1‬اكتب برنامج يقوم بطباعة االعداد من الصفر الى االربعة ( ‪) 0 1 2 3 4‬؟‬
‫>‪#include<iostream.h‬‬
‫)(‪Void main‬‬
‫;‪{ int i=0‬‬
‫)‪while( i<5‬‬
‫;"‪{ cout<<i<<"\t‬‬
‫} ;‪i++‬‬
‫}‬
‫مثال‪ : 2‬اكتب برنامج يقوم بطباعة االعداد من االربعة الى الصفر ( ‪) 4 3 2 1 0‬؟‬
‫>‪#include<iostream.h‬‬ ‫تحليل‪:‬حلها نفس حل السؤال السابق فقط نقلب‬
‫)(‪main‬‬ ‫العداد أي نجعل قيمته البدائية هي ‪ 4‬وشرط‬
‫;‪{1.int i=4‬‬ ‫التوقف اكبر أو يساوي صفر ويتناقص بمقدار‬
‫واحد كل عدة‬
‫)‪2.while( i>=0‬‬
‫;"‪{3.cout<<i<<"\t‬‬
‫};‪4.i--‬‬
‫}‬
‫مثال‪ : 3‬اكتب برنامج لجمع اإلعداد الفردية بين )‪(0- 100‬؟‬
‫>‪#include<iostream.h‬‬
‫تحليل ‪:‬نرى انه يريد اإلعداد الفردية فقط‬
‫)(‪main‬‬
‫لذالك يجب أن نطفر اإلعداد الزوجية‪ .‬نكون‬
‫;‪{1.int n=1‬‬
‫عداد يعد من الواحد وشرط التوقف عند‬
‫;‪2.int sum=0‬‬
‫المائة ومقدار الزيادة في ( ‪ )2‬حتى نجمع‬
‫)‪3.while( n<100‬‬ ‫فقط اإلعداد الفردية‪.‬‬
‫; ‪{4. sum += n‬‬
‫};‪5. n=n+2‬‬
‫};‪6.Cout<<"sum="<<sum‬‬
‫‪Sum=2500‬‬

‫‪48‬‬ ‫أحمـد صبــاح الجنابـي‬


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

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

‫مثال‪ : 4‬اكتب برنامج يدخل المستخدم درجات ‪ 1١‬مواد وتقوم بحساب المعدل له؟‬
‫>‪#include<iostream.h‬‬
‫)(‪Void main‬‬
‫;‪{ int aveg,input_number‬‬
‫;‪int sum=0,n=0‬‬
‫{ )‪while(n<10‬‬
‫;‪cin>> input_number‬‬
‫; ‪sum += input_number‬‬
‫};‪n++‬‬
‫;‪aveg=sum/10‬‬
‫; ‪Cout<<" aveg ="<< aveg‬‬
‫}‬

‫‪49‬‬ ‫أحمـد صبــاح الجنابـي‬


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

‫هيكلية عبارة )‪ (While‬التكرارية المتداخلة‬


‫;‪Initializing1‬‬
‫)‪While(Boolean_Expression1‬‬
‫;‪{ Ini alizing2‬‬
‫)‪While(Boolean_Expression2‬‬
‫{‬
‫;‪Statement‬‬
‫;‪Update2‬‬
‫}‬
‫} ;‪Update1‬‬
‫على سبيل المثال لو كان لدينا هذا التداخل‬

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


‫>‪#include<iostream.h‬‬
‫)(‪Void main‬‬
‫;‪{ int i=1,j‬‬
‫{ )‪while( i<=10‬‬
‫;"‪cout<<"Multiply tabel for("<<i<<").\n-------------------------------\n‬‬
‫;‪j=1‬‬
‫{ )‪while( j<=10‬‬
‫;"‪cout<< j<<" * " <<i<<"="<<i*j<<"\n‬‬
‫};‪j++‬‬
‫تحليل‪ :‬المثال نفسه موجود في‬
‫;"‪cout<<"\n‬‬
‫عبارة ‪ for‬التكرارية المتداخلة‬
‫};‪i++‬‬
‫ستجد تحليل بشكل مفصل‬
‫}‬

‫‪51‬‬ ‫أحمـد صبــاح الجنابـي‬


‫عبارة )‪ (Do--While‬التكرارية ‪:‬‬
‫هي عبارة تكرارية تستخدم لتكرار خطوات برمجية المحصورة بين قوسيها لعدد من المرات تكون مشابه‬
‫كثيرا لعبارة التكرار )‪ (For‬و)‪ (while‬فقط االختالف بينها وبينهم أن عبارة )‪(Do—While‬‬
‫التكرارية تنفذ ما بين قوسيها ثم يتحقق من الشرط أما ‪ For‬و ‪ while‬يتحقق من الشرط ثم تنفذ ما‬
‫بين قوسيها‪.‬‬

‫هيكلية عبارة )‪ (Do—While‬التكرارية المتداخلة‬


‫‪Initializing‬‬
‫{ ‪do‬‬
‫;‪Statement‬‬
‫‪Update‬‬
‫;)‪} while ( Boolean_Expression‬‬

‫)‪ :(Initializing‬هي القيمة البدائية المعطاة للمتغير التي منها سيبدأ العد‪(.‬مثال ‪.)i=0‬‬ ‫‪-‬‬
‫‪ :(Boolean_Expression) -‬هو شرط التوقف الذي عندما تصبح قيمة المتغير غير محققة لشرط‬
‫التوقف سوف يخرج من عبارة )‪.(Do—While‬‬

‫)‪ :(Update‬هي مقدار الزيادة أو النقصان في قيمة المتغير في كل دورة )‪. )loop‬مثال )‪ (i++‬او‪(i-‬‬ ‫‪-‬‬
‫)‪.-‬‬
‫‪ :(statement)-‬هي الخطوات البرمجية التي ستنفذ عدد من المرات‪ .‬إذا كانت عبارة عن خطوة‬
‫برمجية واحدة فليس بحاجة لوضعها داخل أقواس وإذا كانت أكثر من خطوة يجب وضعها داخل أقواس‪.‬‬

‫‪51‬‬ ‫أحمـد صبــاح الجنابـي‬


‫مثال‪ : 1‬اكتب برنامج يقوم بطباعة االعداد من الصفر الى االربعة ( ‪) 0 1 2 3 4‬؟‬
‫>‪#include<iostream.h‬‬
‫)(‪main‬‬
‫;‪{ int i=0‬‬
‫{ ‪do‬‬
‫;"‪cout<<i<<"\t‬‬
‫};‪i++‬‬
‫;)‪while( i<5‬‬
‫}‬
‫مثال‪ : 2‬اكتب برنامج يقوم بطباعة االعداد من االربعة الى الصفر ( ‪) 4 3 2 1 0‬؟‬
‫>‪#include<iostream.h‬‬
‫)(‪main‬‬ ‫تحليل‪:‬حلها نفس حل السؤال السابق فقط نقلب‬
‫;‪{1.int i=4‬‬ ‫العداد أي نجعل قيمته البدائية هي ‪ 4‬وشرط‬
‫‪2.do‬‬ ‫التوقف اكبر أو يساوي صفر ويتناقص بمقدار‬
‫واحد كل عدة‬
‫;"‪{3.cout<<i<<"\t‬‬
‫};‪4.i--‬‬
‫;)‪5. while( i>=0‬‬
‫}‬

‫مثال‪ : 3‬اكتب برنامج لجمع اإلعداد الفردية بين )‪(0- 100‬؟‬


‫>‪#include<iostream.h‬‬
‫)(‪main‬‬ ‫تحليل ‪:‬نرى انه يريد اإلعداد الفردية فقط‬
‫;‪{ int n=1‬‬ ‫لذالك يجب أن نطفر اإلعداد الزوجية‪ .‬نكون‬
‫عداد يعد من الواحد وشرط التوقف عند‬
‫;‪int sum=0‬‬
‫المائة ومقدار الزيادة في ( ‪ )2‬حتى نجمع‬
‫‪do‬‬ ‫فقط اإلعداد الفردية‪.‬‬
‫; ‪{ sum += n‬‬
‫;)‪n=n+2;} while( n<100‬‬
‫};‪Cout<<"sum="<<sum‬‬ ‫‪Sum=2500‬‬

‫‪52‬‬ ‫أحمـد صبــاح الجنابـي‬


‫الفصـل الرابع*‬
‫المصفوفات وأنـواعها‬
‫● المصفوفات األحادية األبعاد‬
‫● تبديل عناصر المصفوفات‬
‫● المصفوفات ثنائية األبعاد‬
‫● القطر الرئيسي والثانوي‬
‫● ترتيب المصفوفات ثنائية األبعاد‬

‫‪53‬‬ ‫أحمـد صبــاح الجنابـي‬


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

‫]‪Type arrrayname[size of array‬‬

‫نوع المصفوفة‬ ‫أسم المصفوفة‬ ‫حجم المصفوفة‬

‫;]‪int first_arry [5‬‬

‫نستطيع أعطاء عناصر المصفوفة قيم معينة كقيم أولية وقت التعريف عن المصفوفة هكذا‬

‫;}‪int first_array [5]={34,26,43,23,54‬‬

‫‪54‬‬ ‫أحمـد صبــاح الجنابـي‬


‫؟‬.‫برنامج ندخل مصفوفة أحادية األبعاد مكونة من ستة عناصر من شاشة التنفيذ ونطبعها‬:1 ‫مثال‬
#include<iostream.h>
void main()
{ int first_arry[6] ,i; ‫ تحديد حجم المصفوفة والتصريح عنها‬-.
for (i=0;i<6;i++)
cin>> first_arry[i] ; ‫ ادخال المصفوفة‬-2

Content of array is .\n";


for (i=0;i<6;i++)
cout<< first_arry[i]<<"\t"; ‫ اخراج المصفوفة‬-3

‫ ؟‬.‫برنامج ندخل مصفوفة أحادية األبعاد مكونة من خمسة عناصر ونجمعها‬:2 ‫مثال‬
#include<iostream.h>
Void main()
{ int i,array1[5],sum=0; ‫ تحديد حجم المصفوفة والتصريح عنها‬-.

for (i=0;i<5;i++)
cin>> array1[i] ; ‫ ادخال المصفوفة‬-2

for (i=0;i<5;i++)
‫ عملية الجمع‬-3
sum=sum+array1[i];
cout<< "sum of array item="<<sum;} ‫ اخراج المصفوفة‬-4

‫توضيح عملية الجمع‬


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

55 ‫أحمـد صبــاح الجنابـي‬


‫مثال‪:3‬برنامج ندخل مصفوفة أحادية األبعاد مكونة من سبعة عناصر جد اكبر رقم‪.‬؟‬
‫>‪#include<iostream.h‬‬
‫تحليل‪ :‬خطوات اإلدخال هي اعتيادية‬
‫)(‪Void main‬‬ ‫وتقريبا ثابتة في المصفوفات فمصفوفة‬
‫;‪{ int i,array1[7],max‬‬ ‫حجمها سبعة نحتاج عداد يعد من الصفر‬
‫)‪for (i=0;i<7;i++‬‬ ‫إلى ستة ‪.‬ثم بعد اإلدخال نجد اكبر رقم بين‬
‫; ]‪cin>> array1[i‬‬ ‫عناصر المصفوفة كيف‪.‬؟ نسند قيمة أول‬
‫;]‪max=array1[0‬‬ ‫عنصر في المصفوفة لمتغير وثم نقارن‬
‫قيمة هذا المتغير مع بقية العناصر أي‬
‫)‪for (i=0;i<7;i++‬‬
‫عنصر في المصفوفة نجد أن قيمته اكبر‬
‫) ‪if (array1[i] > max‬‬ ‫من قيمة متغيرنا نبدل قيمة متغيرنا بقيمة‬
‫;]‪max=array1[i‬‬ ‫عنصر المصفوفة ونستمر حتى النهاية وكل‬
‫ما وجد متغيرنا قيمة أعلى منه أخذها وإذا‬
‫};‪cout<< "max number in array1 is="<<max‬‬
‫اقل منه التهمه ويستمر إلى النهاية ويكون‬
‫في التالي حامال أعلى قيمة‪.‬‬

‫مثال ‪:4‬مصفوفة من خمسة عناصر إضافة قيمة خمسة لكل عنصر في المصفوفة‬
‫>‪#include<iostream.h‬‬
‫)(‪main‬‬
‫;}‪{ int i,array1[5]={10,15,30,32,21‬‬
‫)‪for (i=0;i<5;i++‬‬
‫;‪{ array1[i]= array1[i]+5‬‬
‫};"‪cout<< array1[i]<<"\t‬‬
‫}‬

‫ألم اليوم ‪ ,‬هو قوة الغد‬

‫‪56‬‬ ‫أحمـد صبــاح الجنابـي‬


‫تبديل عناصر المصفوفات‪:‬‬
‫;‪Temp=x‬‬
‫;‪X=Y‬‬
‫;‪Y= Temp‬‬
‫تحليل‪:‬كيف نرتب برمجيا؟علمنا انه بالترتيب نقارن كل موقع بجميع المواقع التي تليه لذالك سنحتاج‬
‫إلى عدادان األول خاص بالمرور على كل موقع مرة واحدة وعداد داخلي يقارن كل عنصر مرة عليه‬
‫العداد الخارجي بجميع العناصر التي تليه في المصفوفة وأينما وجد رقم اقل منه يبدل بينهما‪.‬‬

‫مثال ‪:5‬برنامج لترتيب عناصر المصفوفة ترتيبا تصاعديا‪..‬؟‬


‫>‪#include<iostream.h‬‬
‫)(‪Void main‬‬
‫تحديد حجم مصفوفة والتصريح عنها‬
‫;‪{ int array[5],i,j‬‬
‫;‪int temp =0‬‬
‫)‪for (i=0;i<5;i++‬‬ ‫ادخال عناصر المصفوفة‬

‫; ]‪cin>>array[i‬‬
‫)‪for ( i=0;i<5-1;i++‬‬
‫)‪for ( j=i; j<5;j++‬‬
‫)]‪if (array[j] <array[i‬‬
‫{‬
‫;]‪temp =array[j‬‬
‫;]‪array[j]=array[i‬‬ ‫تبديل (ترتيب المصفوفة تصاعديا)‬

‫; ‪array[i]= temp‬‬
‫}‬
‫)‪for (i=0;i<5;i++‬‬ ‫اخراج عناصر المصفوفة‬
‫};"‪cout<<array[i]<<"\n‬‬

‫‪57‬‬ ‫أحمـد صبــاح الجنابـي‬


‫تحليل‪:‬كيف نرتب برمجيا؟علمنا انه بالترتيب نقارن كل موقع بجميع المواقع التي تليه لذالك سنحتاج‬
‫إلى عدادان األول خاص بالمرور على كل موقع مرة واحدة وعداد داخلي يقارن كل عنصر مرة عليه‬
‫العداد الخارجي بجميع العناصر التي تليه في المصفوفة وأينما وجد رقم اكبر منه يبدل بينهما‪.‬‬

‫مثال ‪:6‬برنامج لترتيب عناصر المصفوفة ترتيبا تنازلي‪..‬؟‬


‫>‪#include<iostream.h‬‬
‫)(‪Void main‬‬
‫تحديد حجم مصفوفة والتصريح عنها‬
‫;‪{ int array[5],i,j‬‬
‫;‪int temp =0‬‬
‫)‪for (i=0;i<5;i++‬‬ ‫ادخال عناصر المصفوفة‬
‫; ]‪cin>>array[i‬‬
‫)‪for ( i=0;i<5-1;i++‬‬
‫)‪for ( j=i; j<5;j++‬‬
‫)]‪if (array[j] >array[i‬‬
‫{‬
‫;]‪temp =array[j‬‬
‫;]‪array[j]=array[i‬‬ ‫تبديل (ترتيب المصفوفة تنازلي )‬

‫; ‪array[i]= temp‬‬
‫}‬
‫)‪for (i=0;i<5;i++‬‬ ‫اخراج عناصر المصفوفة‬
‫};"‪cout<<array[i]<<"\n‬‬

‫امال روحــــك تفاؤال‬

‫‪58‬‬ ‫أحمـد صبــاح الجنابـي‬


‫المصفوفات ثنائية األبعاد‪:‬‬
‫ال تختلف المصفوفات الثنائية كثيرا عن المصفوفة أحادية اإلبعاد‪ .‬تختلف فقط في العنونة فبدال من )‪(index‬‬
‫واحد نستخدم اثنان واحد للصفوف وأخر لألعمدة‪.‬‬

‫االعمدة‬
‫‪0‬‬ ‫‪1‬‬ ‫‪2‬‬

‫‪0‬‬ ‫(‪)0,0‬‬ ‫(‪)0,1‬‬ ‫(‪)0,2‬‬

‫الصفوف‬ ‫‪1‬‬ ‫(‪)1,0‬‬ ‫(‪)1,1‬‬ ‫(‪)1,2‬‬


‫‪2‬‬ ‫(‪)2,0‬‬ ‫(‪)1,1‬‬ ‫(‪)2,2‬‬

‫]‪Type arrrayname[row][columns‬‬

‫نوع المصفوفة‬ ‫أسم المصفوفة‬ ‫عدد الصفوف‬ ‫عدد االعمدة‬

‫;]‪int first_arry [n][n‬‬

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

‫;]‪int first_arry[n][m‬‬
‫عدد الصفوف‬ ‫عدد االعمدة‬

‫)‪for (i=0;i<n;i++‬‬ ‫عداد للصفوف ‪i‬‬

‫)‪for (j=0;j<m;j++‬‬ ‫عداد ألعمدة ‪j‬‬

‫; ]‪cin>> first_arry[i][j‬‬ ‫ادخال المصفوفة‬

‫‪59‬‬ ‫أحمـد صبــاح الجنابـي‬


‫● القطر الرئيسي‪:‬‬

‫(‪)0,0‬‬ ‫(‪)0,1‬‬ ‫(‪)0,2‬‬ ‫(‪)0,3‬‬


‫(‪)1,0‬‬ ‫(‪)1,1‬‬ ‫(‪)1,2‬‬ ‫(‪)1,3‬‬
‫(‪)2,0‬‬ ‫(‪)1,1‬‬ ‫(‪)2,2‬‬ ‫(‪)2,3‬‬
‫(‪)3,0‬‬ ‫(‪)3,1‬‬ ‫(‪)3,2‬‬ ‫(‪)3,3‬‬
‫) ‪) i==j‬‬
‫* عداد االعمدة = عداد الصفوف‬
‫* فوق القطر الرئيسي (‪)i<j‬‬
‫* تحت القطر الرئيسي (‪)i>j‬‬

‫●القطر الثانوي‪:‬‬

‫(‪)0,0‬‬ ‫(‪)0,1‬‬ ‫(‪)0,2‬‬ ‫(‪)0,3‬‬


‫(‪)1,0‬‬ ‫(‪)1,1‬‬ ‫(‪)1,2‬‬ ‫(‪)1,3‬‬
‫(‪)2,0‬‬ ‫(‪)1,1‬‬ ‫(‪)2,2‬‬ ‫(‪)2,3‬‬
‫(‪)3,0‬‬ ‫(‪)3,1‬‬ ‫(‪)3,2‬‬ ‫(‪)3,3‬‬
‫)‪)i+j=n-1‬‬

‫* عداد االعمدة‪ +‬عدد الصفوف = حجم المصفوفة ‪1 -‬‬


‫* فوق القطر الثانوي (‪)i+j<n-1‬‬
‫* تحت القطر الثانوي (‪)i+j>n-1‬‬

‫‪61‬‬ ‫أحمـد صبــاح الجنابـي‬


‫مثال ‪:‬مصفوفة مربعة( ‪ )5*5‬أطبع فقط عناصر القطر الرئيسي ؟‬

‫تحليل‪ :‬نعلم أن شرط الحصول على عناصر القطر الرئيسي في أي مصفوفة هو ثابت وهو)‪(i==j‬‬

‫وللكثير من المعلومات راجع المخطط السابق عن الحصول على القطر الرئيسي‪.‬‬

‫>‪#include<iostream.h‬‬
‫)(‪Void main‬‬
‫;‪{ int i‬‬
‫;‪int j‬‬
‫;]‪int a[5][5‬‬
‫)‪for(i=0;i<5;i++‬‬
‫)‪for(j=0;j<5;j++‬‬
‫;]‪cin>>a[i][j‬‬
‫)‪for(i=0;i<5;i++‬‬
‫)‪for(j=0;j<5;j++‬‬
‫)‪if(i==j‬‬
‫};"‪cout<<a[i][j]<<"\n‬‬

‫كـــن متفائال آلخر لحظة‬

‫‪61‬‬ ‫أحمـد صبــاح الجنابـي‬


‫اجمع العناصر فوق القطر الرئيسي وجمع العناصر تحته وجمع العناصر‬ )5*5( ‫مصفوفة مربعة‬: ‫مثال‬
. ‫فوق القطر الثانوي وتحته كل على حدة‬

#include<iostream.h>
main()
{ int i,j,sum,sum1,sum2,sum3;
sum=0,sum1=0,sum2=0,sum3=0;
int a[5][5];
for(i=0;i<5;i++)
for(j=0;j<5;j++)
cin>>a[i][j];
for(i=0;i<5;i++)
for(j=0;j<5;j++) {
if(i<j)
sum+=a[i][j];
if(i>j)
sum1+=a[i][j];
if((i+j)<4)
sum2+=a[i][j];
if((i+j)>4)
sum3+=a[i][j];}
cout<<"\n sum above secondary diagonal= "<<sum2;
cout<<"\n sum above main diagonal= "<<sum;
cout<<"\n sum under main diagonal= "<<sum1;
cout<<"\n sum under secondary diagonal= "<<sum3;}

62 ‫أحمـد صبــاح الجنابـي‬


:‫) كما في الشكل‬4*4( ‫تكوين مصفوفة‬: ‫مثال‬
1111
2222
3333
4444

#include <iostream.h>
#include<conio.h>
int const n=4;
void main)(
{
Clrscr )(;
int a[n][n];
int i,j;
for(i=0;i<n;i++)
for(j=0;j<n;j++)
a[i][j] =i+1;
cout«"The Array :- "«endl;
for(i=0;i<n;i++)
{
for(j=0;j<n;j++(
cout«a[i][j]<<" ";
cout«endl;
}
getch)(;
}

63 ‫أحمـد صبــاح الجنابـي‬


:‫) كما في الشكل‬4*4( ‫تكوين مصفوفة‬: ‫مثال‬
1222
2122
2212
2221

#include <iostream.h>
#include<conio.h>
int const n=4;
void main)(
{
Clrscr )(;
int a[n][n];
int i,j;
for(i=0;i<n;i++)
{ for(j=0;j<n;j++)
If(i==j) a[i][j]=1;
else
a[i][j]=2;
}
cout«"The Array :- "«endl;
for(i=0;i<n;i++)
{
for(j=0;j<n;j++(
cout«a[i][j]<<" ";
cout«endl;
}
getch)(;
}

64 ‫أحمـد صبــاح الجنابـي‬


‫مثال ‪:‬تكوين مصفوفة (‪ )4*4‬كما في الشكل‪:‬‬

‫تحليل ‪:‬كما نالحظ كن الرسم أننا نريد أن نضع قيمة واحد في الصف األول والصف الرابع والعمود األول‬
‫والعمود الرابع والمواقع خالفهما نضع فيها صفر‪.‬وان ما يميز الصف األول عن باقي الصفوف أن قيمة‬
‫(‪ )i=0‬وما يميز الصف الرابع عن بقية الصفوف أن قيمة (‪ )i=3‬وان ما يميز العمود األول عن باقي‬
‫األعمدة أن قيمة (‪ )j=0‬وما يميز العمود الرابع عن بقية األعمدة أن قيمة (‪ )j=3‬وسيكون لذالك الشرط يجمع‬
‫بين هذه الشروط األربعة كما في البرنامج‪.‬‬

‫)‪(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‬‬

‫>‪#include<iostream.h‬‬
‫)(‪main‬‬
‫{‬
‫;‪int i,j‬‬
‫;}‪int a[4][4]={0‬‬
‫{)‪for(i=0;i<4;i++‬‬
‫{)‪for(j=0;j<4;j++‬‬
‫))‪if((j==0)||(i==3)||(j==3)||(i==0‬‬
‫;‪a[i][j]=1‬‬
‫};"‪cout<< a[i][j]<<"\t‬‬
‫};"‪cout<<"\n‬‬
‫}‬

‫‪65‬‬ ‫أحمـد صبــاح الجنابـي‬


a ‫مصفوفة‬ b ‫مصفوفة‬

)0,0( )0,1( )0,2( )0,0( )0,1( )0,2(


)1,0( )1,1( )1,2( )1,0( )1,1( )1,2(
+
)2,0( )1,1( )2,2( )2,0( )1,1( )2,2(

c ‫مصفوفة‬

)0,0( )0,1( )0,2(


)1,0( )1,1( )1,2(
)2,0( )1,1( )2,2(

.‫ ) وخزنهما في مصفوفة ثالثة‬3*3( ‫اكتب برنامج لجمع مصفوفتين حجمهما‬:‫مثال‬


#include<iostream.h>
Void main()
{ int i,j;
int a[3][3], b[3][3], c[3][3];
cout<<"enter first matrixs\n";
for(i=0;i<3;i++)
for(j=0;j<3;j++)
cin>>a[i][j];
cout<<"enter second matrixs\n";
for(i=0;i<3;i++)
for(j=0;j<3;j++)
cin>>b[i][j];
for(i=0;i<3;i++){
for(j=0;j<3;j++){
c[i][j]=a[i][j]+b[i][j];
cout<<c[i][j]<<"\t";}
cout<<"\n";}}

‫عملية طرح مصفوفتين نفس الخطوات السابقة فقط نبدل خطوة جمع المصفوفتين بخطوة‬

c[i][j]=a[i][j]-b[i][j];

66 ‫أحمـد صبــاح الجنابـي‬


‫؟‬..(3*2) *(2*4) ‫برنامج لضرب مصفوفتين‬:‫مثال‬
(3*4) ‫( يجب أن يكون الناتج مصفوفة بحجم‬3*2) *(2*4) ‫لضرب مصفوفتين‬:‫تحليل‬

#include<iostream.h>
Void main()
{ int i,j,k;
int a[3][2];
int b[2][4];
int c[3][4]={0}; //put zero in every location
cout<<"enter first matrixs\n" ;
for(i=0;i<3;i++)
for(j=0;j<2;j++)
cin>>a[i][j];
cout<<"enter second matrixs\n" ;
for(i=0;i<2;i++)
for(j=0;j<4;j++)
cin>>b[i][j];
for(i=0;i<3;i++){
for(j=0;j<4;j++){
for(k=0;k<2;k++)
c[i][j]+=a[i][k]*b[k][j];
cout<<c[i][j]<<"\t" ;}
cout<<"\n";} }

67 ‫أحمـد صبــاح الجنابـي‬


:‫ترتيب المصفوفات ثنائية األبعاد‬
‫ال يختلف ترتيب المصفوفات الثنائية عن ترتيب المصفوفات األحادية في شيء نفس الصيغة نأخذ أول عنصر‬
...‫في المصفوفة ونقارنه مع بقية العناصر والثاني وبالتتالي لذالك راجع ترتيب المصفوفات األحادية أوال‬
‫؟‬..‫) ترتيب تنازليا‬5*5) ‫ترتيب مصفوفة ثنائية اإلبعاد‬: ‫مثال‬

#include<iostream.h>
Void main()
{ int const row=5;
int const col=5;
int array[row][col];
int i,j,k,x, i ;
cout<<"Here is the Array befor sorted\n" ;
for ( i=0;i<row;i++)
for ( j=0;j<col;j++)
cin>>array[i][j] ;
for( k=0;k<row;k++){
for( i=0;i<row;i++){
for ( j=0;j<col;j++){
if (array[k][j] < array[k][i]){
x=array[k][j];
array[k][j]=array[k][i];
array[k][i]=x;
}} }} }
cout<<"Here is the Array after sorted\n" ;
for ( i=0;i<row;i++){
for ( j=0;j<row;j++)
cout<<array[i][j]<<"\t";
cout<<"\n" ;} }

68 ‫أحمـد صبــاح الجنابـي‬


10 3 2 4 7 1 5 3 2 4 7 1 5 10

#include <iostream.h>

#include<conio.h>

int const n=7;

void main()

clrscr();

int m=0, i=0;

int a[n],b[n];

cout«"Input The array :- ";

for(i=0;i<n;i++)

cin» a[i];

cout«"Input the value of M:- ";

cin»m;

for(i=0;i<n;i++)

b[((i-m)%n)]= a[i];

for(i=0;i<n;i++)

cout« b[i]«" ";

getch();}

69 ‫أحمـد صبــاح الجنابـي‬


Ex

4444 2111

3333 1211

2222 1121

1111 1112
#include <iostream.h> #include <iostream.h>

#include<conio.h> #include<conio.h>

int const n=4; int const n=4;


void main()
void main()
{
{
clrscr();
clrscr();
int a[n][n];
int a[n][n];
int i,j;
int i,j;
for(i=0;i<n;i++)
for(i=0;i<n;i++) { for(j=0;j<n;j++)
for(j=0;j<n;j++) If(i==j) a[i][j]=2;
a[i][j] =i-1; else
cout«"The Array :- "«endl; a[i][j]=1;

for(i=0;i<n;i++) }

{ for(j=0;j<n;j++) cout«"The Array :- "«endl;


for(i=0;i<n;i++)
cout«a[i][j]«" ";
{ for(j=0;j<n;j++)
cout«endl;
cout«a[i][j]«" ";
}
cout«endl;
getch();
} getch();}
}
71 ‫أحمـد صبــاح الجنابـي‬
‫ درجة باتجاه عقرب الساعة؟‬٠١ ‫اقلب مصفوفة‬/‫س‬

#include<iostream.h>
Void main()
{int i,j;
int a[3][3];
for(i=0;i<3;i++)
for(j=0;j<3;j++)
cin>>a[i][j];
for(j=0;j<3;j++){
cout<<"\n";
for(i=2;i>=0;i--)
cout<<a[i][j]<<"\t";
}}

.‫ درجة‬.٨١ ‫ اقلب المصفوفة‬/‫س‬

#include<iostream.h>
Void main()
{int i,j;
int a[3][3];
for(i=0;i<3;i++)
for(j=0;j<3;j++)
cin>>a[i][j];
for(i=2;i>=0;i--){
cout<<"\n";
for(j=2;j>=0;j--)
cout<<a[i][j]<<"\t";
}}

71 ‫أحمـد صبــاح الجنابـي‬


‫ درجة‬270 ‫اقلب مصفوفة‬:‫س‬

#include<iostream.h>
Void main()
{int i,j;
int a[3][3];
for(i=0;i<3;i++)
for(j=0;j<3;j++)
cin>>a[i][j];
for(j=2;j>=0;j--){
cout<<"\n";
for(i=0;i<3;i++)
cout<<a[i][j]<<"\t";
}}

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

#include<iostream.h>
Void main()
{int i,j;
int a[3][3];
for(i=0;i<3;i++)
for(j=0;j<3;j++)
cin>>a[i][j];
for(i=0;i<3;i++){
cout<<"\n";
for(j=0;j<3;j++)
if((i==0)&&(j==0))
a[i][j]=0; {
cout<<""<<"\t";}
else
cout<<a[i][j]<<"\t";
}}

72 ‫أحمـد صبــاح الجنابـي‬


‫ترتيب عناصر مصفوفة ذات بعد واحد تصاعديا؟‬ /‫س‬
#include<iostream.h>
int main()
{int array[5]={50,32,93,2,74};
int sure=0;
int x=0;
cout<<"Here is the Array befor sorted\n" ;
for (int j=0;j<5;j++)
cout<<array[j];
for (int i=0;i<5-1;i++) {
sure=0;
for (int j=i; j<5;j++) {
if (array[j] <array[i]){

x=array[j];
array[j]=array[i];
array[i]=x;
sure=1;}}
if (sure ==0) break;}
cout<<"Here is the Array after sorted\n";
for (i=0;i<5;i++)
cout<<array[i]<<"\n";
}

73 ‫أحمـد صبــاح الجنابـي‬


‫مصفوفة مكونة من خمس عناصر اجمعها واحسب المعدل واطبع المصفوفة‬:‫س‬
‫بالمقلوب؟‬
#include<iostream.h>
Void main()
{int i ,sum,avg;
int a[5];
sum=0;
cout<<"enter the matrixs\n";
for(i=0;i<5;i++)
cin>>a[i];
for(i=0;i<5;i++)
sum+=a[i];
avg=sum/5;
cout<<"sum="<< sum <<"navg="<<avg<<endl;
cout<<"the matrixs invers is\n";
for(i=4;i>=0;i--)
cout<<a[i];
}

_______________________________________________________________

)2 ) ‫ضرب مصفوفة في رقم ثابت مثال‬:/‫س‬


#include<iostream.h>
Void main()
{int i,j;
int a[3][3];
cout<<"enter matrixs\n" ;
for(i=0;i<3;i++)
for(j=0;j<3;j++)
cin>>a[i][j];
for(i=0;i<3;i++){
cout<<"\n";
for(j=0;j<3;j++){
a[i][j]=2*a[i][j];
cout<<a[i][j]<<"\t" ;}}}

74 ‫أحمـد صبــاح الجنابـي‬


‫جمع مصفوفتين‬

#include<iostream.h>
Void main()
{int i,j;
int a[3][3];
int b[3][3];
int c[3][3];
cout<<"enter first matrixs"<<"\n";
for(i=0;i<3;i++)
for(j=0;j<3;j++)
cin>>a[i][j];
cout<<"enter second matrixs"<<"\n";
for(i=0;i<3;i++)
for(j=0;j<3;j++)
cin>>b[i][j];
for(i=0;i<3;i++){
cout<<"\n";
for(j=0;j<3;j++){
c[i][j]=a[i][j]+b[i][j];
cout<<c[i][j]<<"\t";}
}}
‫طرح مصفوفتين‬

#include<iostream.h>
Void main()
{int i,j;
int a[3][3];
int b[3][3];
int c[3][3];
cout<<"enter first matrixs"<<"\n";
for(i=0;i<3;i++)
for(j=0;j<3;j++)
cin>>a[i][j];
cout<<"enter second matrixs"<<"\n";
for(i=0;i<3;i++)
for(j=0;j<3;j++)
cin>>b[i][j];
for(i=0;i<3;i++){
cout<<"\n";
for(j=0;j<3;j++){
c[i][j]=a[i][j]-b[i][j];
cout<<c[i][j]<<"\t";}
}}

75 ‫أحمـد صبــاح الجنابـي‬


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

#include<iostream.h>
Void main()
{int i,j,max,min;
int a[3][3];
cout<<"enter matrixs"<<"\n";
for(i=0;i<3;i++)
for(j=0;j<3;j++)
cin>>a[i][j];
max=a[0][0];
for(i=0;i<3;i++)
for(j=0;j<3;j++)
if(a[i][j]>max)
max=a[i][j];
cout<<"max="<< max<<"\t";
min=a[0][0];
for(i=0;i<3;i++)
for(j=0;j<3;j++)
if(a[i][j]<min)
min=a[i][j];
cout<<"min="<< min;
}

76 ‫أحمـد صبــاح الجنابـي‬


‫الفصـل الخامس*‬

‫الدوال‬
‫● الدوال‬
‫● اإلرسال بالقيمة واإلرسال بالمرجع‬
‫● إسناد قيم لمتغيرات الدالة ‪(function‬‬
‫● استدعاء الدالة لنفسها )‪:(Recursively‬‬

‫● المصفوفات والدوال‬

‫‪77‬‬ ‫أحمـد صبــاح الجنابـي‬


‫الدوال )‪:(Function‬‬
‫تطرقنا في ما مضى على عدد كبير من الدوال الخاصة بلغة (‪ )c++‬وبينا طريقة استخدامها ومنها دالة )‪)pow‬‬
‫التي تستخدم ال يجاد قيمة الرقم المرفوع إلى قوى ‪ .‬وهذه الدوال كلها مصممة من قبل مصممي لغة (‪ )c++‬لكي‬

‫هكذا‪.‬‬ ‫على سبيل المثال إذا أردنا قيمة خمسة مرفوع إلى قوى ثالثة (‪ )5^3‬فبدون دالة )‪ )pow‬نجده‬

‫إيجاد القوى بدون دالة )‪)pow‬‬


‫;‪int i,pow1=1‬‬
‫)‪For(i=0 ;i<3 ;i++‬‬
‫;‪pow1=pow1*5‬‬

‫يحلها مباشرة باستخدام الدالة )‪)pow‬‬

‫إيجاد القوى باستخدام دالة )‪)pow‬‬


‫)‪int pow1=pow(5,3‬‬
‫فوجدنا الفرق الطريقة األولى استخدمنا ثالث اسطر برمجية وثاني طريقة استخدمنا سطر برمجي واحد وكانت‬
‫النتيجة نفسها لذالك فائدة الدوال هو تقليل األسطر البرمجية ومنع تكرار اكواد ألكثر من مرة أي لو احتاجينا‬
‫على سبيل المثال رفع رقم إلى قوى عشر مرات في برنامجنا في حال دون استخدام الدالة )‪ )pow‬فسنضطر‬
‫إلى تكرار الخطوات الثالث عشر مرات كلما احتجنا إليها التي سوف تزيد من تعقيد البرنامج بينما بواسطة هذه‬
‫الدالة سوف تقلل االكواد وتمنع التكرار كلما نحتاجها نستدعيها‪.‬إذا هذا الكالم بالنسبة للدوال الجاهزة وأيضا‬
‫نستطيع بناء دوال بنفسنا لكي نمنع تكرار اسطر برمجية معينة ونزيد من سهولة تتبع البرنامج كما فعل‬
‫المبرمجون في بناء دوال‪.‬‬

‫هيكلية دوال )‪(Function‬‬


‫)‪Type name(parameter1, parameter2,…….‬‬
‫{‬
‫;‪Statement‬‬
‫;)‪Return(type‬‬
‫}‬

‫‪78‬‬ ‫أحمـد صبــاح الجنابـي‬


‫‪ :Type‬هو نوع القيمة التي سوف ترجعها الدالة )‪ )function‬بعد أن تنتهي من عملها‪ .‬الن‬
‫الدوال تكون على نوعين ‪:‬‬
‫‪ .-1‬احدها تعيد بعد استدعائها وتكون بشكل التالي عند استدعائها ويجب أن تحتوي على‬
‫)‪ (return‬لتعيد قيمة للبرنامج ‪.‬‬
‫كود‬
‫;)‪reslt =name(var1,var2,…..‬‬

‫وبما أنها تعيد قيمة يجب خزن القيمة المعادة في متغير بنفس نوع القيمة المعادة اي لو كان نوع‬
‫القيمة المعادة هو )‪ (integer‬يجب أن يتم تعريف )‪ (reslt‬على انه متغير من نوع‬
‫)‪ (integer‬لتخزن به النتيجة القيمة المرجعة ‪.‬‬
‫‪ -2‬الثانية ال تعيد أي قيمة للبرنامج تستدعى لتنفذ ما في داخلها وينتهي كل شيء وال تحتوي في‬
‫داخلها على )‪ (return‬ألنها ال تعيد أي قيمة وطريقة استدعائها في البرنامج فقط نكتب اسم‬
‫الدالة هكذا ‪:‬‬
‫كود‬
‫;)‪name(var1,var2,…..‬‬

‫)‪ :(name‬هو اسم الدالة )‪ (function‬ويمكن أن يكون أي اسم لكن للوضوح اجعل اسم‬
‫الدالة داال على عمل دالتك فلو بنيت دالة تجمع رقميين فسمي الدالة )‪ (add‬حتى تكون‬
‫واضحة ‪.‬‬
‫)‪ :(parameter‬هي متغيرات يتم إرسال قيم إلى الدالة لنمثلها داخل الدالة لغرض تنفيذ‬
‫العرض المطلوب وتقوم الدالة باستقبال المتغيرات المرسلة حسب الترتيب‪ .‬وكل متغير داخل‬
‫الدالة يجب تعريفه مثال‪.‬‬
‫كود‬
‫;}‪Int disp(parameter1, parameter2,……) { statement‬‬

‫استدعاء الدالة داخل البرنامج )……‪Reslt =disp(var1, var2,..‬‬

‫كما تالحظ في االستدعاء كان بالتسلسل أسندت قيمة )‪(parameter2= var2, parameter1=var1‬‬

‫‪79‬‬ ‫أحمـد صبــاح الجنابـي‬


‫تسلسل تنفيذ الخطوات في البرنامج‬

‫تسلسل تنفيذ البرنامج يبدأ خطوة خطوة لكن الحظ عن وصول إلى الخطوة رقم (‪ )5‬تم استدعاء دالة لذالك‬
‫سينقل تنفيذ البرنامج لها لكي ينفذ الخطوات رقم (‪ )6-8‬التي في داخلها ثم يعود إلى البرنامج حتى ينفذ‬
‫خطوة رقم (‪9‬و‪1١‬و‪. )11‬‬

‫)‪ : (Statement‬هي العملية المراد من الدالة تنفيذها عند استدعائها‪.‬‬

‫مالحظة‪:‬‬
‫‪ -1‬المتغيرات المعرفة داخل الدوال تنتهي حياتها بانتهاء تنفيذ أخر سطر في الدالة ‪.‬أي لو كان متغير )‪ (i‬في‬
‫الدالة أصبحت قيمته (‪ )i=5‬عند انتهاء تنفيذ الدالة فعند استدعاء الدالة مرة أخرى ال تكون قيمته خمسة الن‬
‫حياته انتهت بانتهاء االستدعاء السابق وعاد إلى قيمته األولية قبل التغير‪!........‬‬

‫‪ -2‬وتكتب الدالة بعد التصريح عن المكتبات مباشرة‪.‬‬

‫‪ -3‬الدالة التي تتم كتابتها تعامل داخل البرنامج حالها كحال أي دالة من دوال اللغة‪.‬‬

‫‪81‬‬ ‫أحمـد صبــاح الجنابـي‬


‫مثال ‪:‬دالة )‪ (function‬تقوم بجمع رقميين وتعيد النتيجة إلى البرنامج‪..‬؟‬

‫تحليل ‪:‬من السؤال نفهم أن هذه الدالة تحتوي على )‪ (parameter‬اثنان كل واحد خاص برقم معين‬
‫وتعيد قيمة من نوع )‪ (integer‬وهي النتيجة‪.‬‬

‫>‪#include<iostream.h‬‬
‫)‪1.int addi on(int a,int b‬‬
‫{‬
‫;‪int reslt‬‬
‫الدالة‬
‫;‪reslt=a+b‬‬
‫;)‪return( reslt‬‬
‫}‬
‫)(‪Void main‬‬
‫;‪{int reslt‬‬
‫;)‪reslt= addi on(3,7‬‬ ‫البرنامج الرئيسي‬
‫;"‪cout<< reslt<<"\n‬‬
‫;)‪reslt= addition(2,3‬‬
‫;"‪cout<< reslt<<"\n‬‬
‫}‬

‫ال تنــــدم على شــئ انتهــى‬


‫دائما هناك وقت‬
‫لتبــــدأ مـــن جــديــد‬

‫‪81‬‬ ‫أحمـد صبــاح الجنابـي‬


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

‫كود‬
‫;}‪name(parameter1, parameter2,……) { statement‬‬

‫مثال ‪:‬دالة )‪ (function‬تقوم بطباعة رسالة معينة عند استدعائها‪..‬؟‬


‫تحليل‪:‬هذه الدالة تطبع رسالة أي ال ترجع أي قيمة وال تستقبل أي قيمة‬

‫>‪#include<iostream.h‬‬
‫)(‪MassageShow‬‬ ‫دالة ال تستقبل أي متغير وال تعيد أي متغير لذلك تكتب هكذا‬
‫{‬
‫;;"‪cout>>"hi Mr.hussien‬‬
‫الرسالة التي سيتم طباعتها عند استدعاء الدالة‬
‫}‬
‫)(‪Void main‬‬
‫{‬
‫)(‪massageShow‬‬ ‫استدعاء لدالة الطباعة لطباعة الرسالة المطلوبة‬
‫}‬
‫مثال ‪ :‬دالة تطبع رقم معين يتم إرساله لها‪...‬‬

‫تحليل‪:‬بما أنها تطبع قيمة ترسل لها أي تستقبل قيمة واحدة وال تعيد أي قيمة‪.‬‬

‫>‪#include<iostream.h‬‬
‫)‪massageShow(int a‬‬ ‫دالة تستقبل قيمة واحد ال تعيد أي قيمة‬
‫{‬
‫;‪cout>>" the number send is="<<a‬‬ ‫تطبع هذه القيمة‬
‫}‬
‫)(‪Void main‬‬
‫{‬
‫)‪massageShow(3‬‬ ‫البرنامج‬ ‫استدعاء لهذه الدالة من داخل‬
‫}‬

‫‪82‬‬ ‫أحمـد صبــاح الجنابـي‬


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

‫‪-1‬اإلرسال بالقيمة‪:‬ترسل فقط قيمة المتغير إلى الدالة أي إذا تغير قيمة المتغير داخل الدالة ال تتغير قيمته‬
‫األصلية داخل البرنامج ألننا أرسلنا فقط قيمته إلى الدالة لمعالجتها‪( .‬أي ال تعاد أكثر من قيمة واحدة إلى‬
‫البرنامج الرئيسي)‪.‬‬
‫مثال ‪:‬بناء دالة تعمل نفس عمل الدالة )‪ (pow‬التي تجد قيمة الرقم مرفوع إلى أس )‪ (x^n‬ولنسميها )‪(powA‬‬
‫معناه هذه الدالة عربية فقط للتميز بينها وبين األصلية واالثنان يؤديان نفس العمل‪.‬‬

‫>‪#include<iostream.h‬‬
‫)‪int powA(int x,int n‬‬
‫{‬
‫;‪int i, reslt =1‬‬
‫)‪for(i=0 ;i<n ;i++‬‬ ‫دالة إليجاد قيمة أي رقم مرفوع إلى أس‬
‫;‪reslt = reslt *x‬‬
‫;)‪return( reslt‬‬
‫}‬
‫)(‪Void main‬‬
‫;‪{int reslt,x,n‬‬ ‫إعطاء قيم للمتغير وألس المراد إيجاده‬
‫;‪x=3,n=4‬‬
‫;)‪reslt= powA (x,n‬‬
‫والمطلوب هنا)‪ (x^n‬أي انه )‪(3^4‬‬
‫;"‪cout<<" powA="<<reslt<<"\n‬‬
‫;‪x=5,n=2‬‬
‫;)‪reslt= powA (x,n‬‬
‫};"‪cout<<" powA="<<reslt<<"\n‬‬

‫لو تالحظ تم إرسال قيم المتغيرين وليس المتغيرين نفسهما وهذا ما يسمى باإلرسال بالقيمة) أي أن‬
‫المتغير )‪ (x,n‬في الدالة ليس نفس المتغير )‪ (x,n‬في البرنامج الرئيسي‪.‬‬

‫التفاؤل يــدفع النفس الى مزيد من التألق‬

‫‪83‬‬ ‫أحمـد صبــاح الجنابـي‬


‫‪ -2‬اإلرسال بالمرجع‪:‬ترسل موقع المتغير إلى الدالة أي أن الدالة تستقبل المتغير نفسه المرسل بنفس‬
‫االسم أو بأس ماخر ‪.‬أي إذا تغير قيمة المتغير داخل الدالة تتغير قيمته األصلية داخل البرنامج ألننا‬
‫أرسلنا موقعه إلى الدالة والتغير يكون في محتوى الموقع ‪ .‬وشكلها هكذا‪:‬‬

‫;}‪Type name(&parameter1, &parameter2,……) { statement‬‬

‫نضع )&( قبل كل )‪ (parameter‬نريد أن نعيد التغير في قيمته للبرنامج بمعنى أننا سنستقبل الموقع‪.‬‬
‫وفائدة اإلرسال بالمرجع هو أن اإلرسال بلقيمة ال يعيد أكثر من قيمة متغير واحد إلى البرنامج بينما‬
‫باإلرسال بالمرجع نستطيع أعادة أكثر من قيمة متغير إلى البرنامج‪.‬‬

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

‫>‪#include<iostream.h‬‬
‫)‪mulByFive (int & x,int &n‬‬
‫{‬
‫;‪x=x*5‬‬
‫;‪n=n*5‬‬
‫}‬
‫)(‪Void main‬‬
‫;‪{int x,n‬‬
‫;‪int y,z‬‬
‫;‪x=3,n=4‬‬
‫;)‪mulByFive (x,n‬‬
‫;"‪cout<<" x="<<x<<"\nn="<<n<<"\n‬‬
‫;‪y=5,z=2‬‬
‫;)‪mulByFive (y,z‬‬
‫};"‪cout<<" y="<<y<<"\nz="<<z<<"\n‬‬
‫توضيح الخطوات‪:‬‬
‫‪.1‬خطوة رقم ( ‪ (9‬أرسلنا قيم المتغيرين )‪ (x=3,n=4‬إلى الدالة وتم استقبالهما بالمرجع وطرب كل واحد‬
‫منهما بخمسة الحظ خطوة رقم) ‪ )1١‬سيطبع قيمهم الجديدة مضروبة بخمسة‪.‬‬
‫‪ .2‬خطوة رقم (‪ (12‬أرسلنا قيم المتغيرين )‪ (y=5,z=5‬إلى الدالة وتم استقبالهما بالمرجع وطرب كل‬
‫واحد منهما بخمسة الحظ خطوة رقم (‪ )13‬سيطبع قيمهم الجديدة مضروبة بخمسة كال احضنا ال يهتم مهما‬
‫كان اسم المتغير ألنه سيستقبل موقعه باأسم أخر ويغير على القيم التي فيه‪.‬‬
‫‪ -‬وباختصار إذا وضعنا )&( قبل أي )‪ .(parameter‬أي تغير في)‪(parameter‬‬
‫سوف يؤثر على قيمته في البرنامج الرئيسي‪ .‬وإذا لم نضع هذه العالمة يبقى محافظا على قيمته في‬
‫البرنامج الرئيسي‪.‬‬

‫‪84‬‬ ‫أحمـد صبــاح الجنابـي‬


‫إسناد قيم لمتغيرات الدالة )‪ : (function‬هي قيم يتم إسنادها للمتغيرات في الدالة فإذا لم نذكر هذه‬
‫المتغيرات في االستدعاء يتم االعتماد على هذه القيم وإذا ذكرناها وأعطيناها قيمة يأخذ القيمة التي أعطيناها له‪.‬‬

‫مثال ‪:‬دالة تحتوي على قيمة زائدة ) دالة لضرب رقمين(‪..‬؟‬

‫>‪#include<iostream.h‬‬
‫)‪int mul (int a,int b=3‬‬
‫};)‪{return(a*b‬‬
‫)(‪Void main‬‬
‫;)‪{cout<<"mul="<< mul (3‬‬
‫};)‪cout<<"\nmul="<< mul (3,5‬‬

‫النفوس المتفائلة وحدها التي تمضي‬


‫نحــــــو مرادها بثبات ويقين وهدوء‬

‫‪85‬‬ ‫أحمـد صبــاح الجنابـي‬


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

‫الحل باستخدام دوال )‪(function‬‬ ‫الحل بدون دوال )‪(function‬‬


‫>‪#include<iostream.h‬‬ ‫>‪#include<iostream.h‬‬
‫)(‪Draw_tree‬‬ ‫)(‪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‬‬ ‫; " "<<‪cout‬‬
‫)‪for(j=i;j>0;j--‬‬ ‫)‪for(j=i;j>0;j--‬‬
‫; "*"<<‪cout‬‬ ‫; "*"<<‪cout‬‬
‫}}; "‪cout<<"\n‬‬ ‫; "‪cout<<"\n‬‬
‫)(‪main‬‬ ‫}‬
‫;‪{ int i,j,k‬‬ ‫{)‪for(i=1;i<=10;i+=2‬‬
‫;)(‪Draw_tree‬‬ ‫)‪for(k=i;k<10;k+=2‬‬
‫;)(‪Draw_tree‬‬ ‫; " "<<‪cout‬‬
‫;)(‪Draw_tree‬‬ ‫)‪for(j=i;j>0;j--‬‬
‫;)(‪Draw_tree‬‬ ‫; "*"<<‪cout‬‬
‫{)‪for(i=1;i<=6;i+=2‬‬ ‫; "‪cout<<"\n‬‬
‫)‪for(k=4;k>0;k-=1‬‬ ‫}‬
‫; " "<<‪cout‬‬ ‫{)‪for(i=1;i<=10;i+=2‬‬
‫)‪for(j=3;j>0;j--‬‬ ‫)‪for(k=i;k<10;k+=2‬‬
‫; "*"<<‪cout‬‬ ‫; " "<<‪cout‬‬
‫}}; "‪cout<<"\n‬‬ ‫)‪for(j=i;j>0;j--‬‬
‫; "*"<<‪cout‬‬
‫; "‪cout<<"\n‬‬
‫}‬
‫لو تالحظ كم تبسط الكود وكم أصبح‬ ‫{)‪for(i=1;i<=10;i+=2‬‬
‫البرنامج واضح عندما وضعنا‬ ‫)‪for(k=i;k<10;k+=2‬‬
‫; " "<<‪cout‬‬
‫الجزء المكرر أربع مرات في دالة‬ ‫)‪for(j=i;j>0;j--‬‬
‫واستدعيناه أربع مرات فكون شجرة‬ ‫; "*"<<‪cout‬‬
‫; "‪cout<<"\n‬‬
‫وبقية قاعدة الشجرة كتبنا كودها‬ ‫}‬
‫وحده‪.‬‬ ‫{)‪for(i=1;i<=6;i+=2‬‬
‫)‪for(k=4;k>0;k-=1‬‬
‫; " "<<‪cout‬‬
‫)‪for(j=3;j>0;j--‬‬
‫; "*"<<‪cout‬‬
‫}}; "‪cout<<"\n‬‬

‫‪86‬‬ ‫أحمـد صبــاح الجنابـي‬


‫استدعاء الدالة لنفسها )‪:(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 :‬‬

‫>‪#include<iostream.h‬‬
‫) ‪int power(int x,int n‬‬
‫{‬
‫)‪if (n>0‬‬
‫;)) ‪return(x*power(x,n-1‬‬ ‫دالة )‪(pow‬‬
‫‪else‬‬
‫;‪return 1‬‬
‫}‬
‫{ )(‪Void main‬‬
‫;)‪cout<<power(4,3‬‬ ‫البرنامج الرئيسي‬
‫}‬

‫‪87‬‬ ‫أحمـد صبــاح الجنابـي‬


‫توضيح ماذا سيحصل في خطوات في دالة )‪ )pow‬في حال كان )‪((x=4,n=3‬المثال السابق)‪.‬‬

‫توضيح ماذا سيحصل في خطوات في دالة )‪ )pow‬في حال كان )‪ ((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‬‬ ‫النتيجة هي ‪4*4*4*1=64‬‬
‫)‪5. return(4*4*4*1‬‬

‫مثال ‪:‬أيجاد مفكوك الرقم باستخدام أسلوب (‪( Recursive Function‬؟‬


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

‫!)‪N!=N*(n-1‬‬

‫مثال ‪:‬أيجاد مفكوك الرقم باستخدام أسلوب (‪( Recursive Function‬؟‬


‫>‪#include<iostream.h‬‬
‫) ‪int fact (int x‬‬
‫{‬
‫)‪if (x>1‬‬
‫;)) ‪return(x* fact (x-1‬‬ ‫دالة ‪Fact‬‬
‫‪else‬‬
‫;‪return 1‬‬
‫}‬
‫{ )(‪Void main‬‬ ‫البرنامج الرئيسي‬
‫};)‪cout<<fact(4‬‬

‫‪88‬‬ ‫أحمـد صبــاح الجنابـي‬


‫المصفوفات والدوال‪:‬‬
‫يمكن إرسال مصفوفات أحادية اإلبعاد إلى الدوال بذكر اسمها فقط بدون أبعاد‬

‫مثال‪ :‬لو كان لدينا مصفوفة اسمها(‪ )a‬ونريد إرسالها إلى دالة اسمها )‪(name‬‬

‫إرسال مصفوفة أحادية إلى الدوال‬


‫;) ‪name( a‬‬

‫وطريقة استقبال المصفوفة األحادية في الدوال نضع فقط أقواس المصفوفة بدون إبعاد‬

‫إرسال مصفوفة أحادية إلى الدوال‬


‫;) ] [‪Type name(type a‬‬

‫يمكن إرسال مصفوفات ثنائية األبعاد إلى الدوال فقط بذكر اسمها بدون أبعاد‬

‫مثال‪ :‬لو كان لدينا مصفوفة اسمها(‪ )a‬وإبعادها (‪ )2*3‬ونريد إرسالها إلى دالة اسمها )‪name‬‬

‫إرسال مصفوفة ثنائية إلى الدوال‬


‫;) ‪name( a‬‬

‫وطريقة استقبال المصفوفة ثنائية األبعاد في الدوال نذكر فقط البعد الثاني هكذا‬

‫إرسال مصفوفة ثنائية إلى الدوال‬


‫;) ]‪Type name(type a[][3‬‬

‫المصفوفات عند إرسالها بهذه الطرق إلى الدوال ترسل بالقيمة وليس بالمرجع‪.‬إذا إي تغير‬
‫على عناصر المصفوفة في الدالة سوف ال يؤثر على قيم العناصر في البرنامج الرئيسي‪.‬أي‬
‫ترسل نسخة من المصفوفة وليس المصفوفة نفسها‪.‬‬

‫األرادة القــوية تقصر المســافات‬

‫‪89‬‬ ‫أحمـد صبــاح الجنابـي‬


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

‫( ألنه لدل مصفوفة يجب كتابة كود يجد اكبر رقم ويجمع عناصر المصفوفة لكن مع الدوال‬function)

. ‫) نكون دالة تجد مجموع عناصر المصفوفة ودالة تجد اكبر رقم ونمرر كل مصفوفة لهاتان الدالتان‬function)

#include<iostream.h>
#include<string.h>
int i,m, max,fou;
char a[45], charSaved[255];
repeat(char string[ ],int len)
{ int equavelentnumber[255]={0};
for(i=0;i<255;i++)
charSaved[i]=char(i);
for(m=0;m<255;m++){
for(i=0;i<len-1;i++)
if (( charSaved [m]== string [i]) && ( string [i] !=' '))
equavelentnumber [m]+= 1 ;}
max= equavelentnumber [0];
for(i=0;i<255;i++)
if ( equavelentnumber [i]>max){
max= equavelentnumber [i];
fou =i;}
cout<<"charcter more repeat "<< charSaved [ fou ]<<" \n";
cout<<"it repeat="<<max <<"\n"; }
void main()
{int count1;
for ( count1=1; count1<6; count1++){
cout<<"enter the Sting( "<<count1<<"): ";
cin.getline(a );
repeat(a,strlen(a));}}

91 ‫أحمـد صبــاح الجنابـي‬


‫) تصاعديا ؟‬5*5( ‫برنامج لترتيب ثالث مصفوفات ثنائية اإلبعاد‬: ‫مثال‬
‫لترتيب ثالث مصفوفات ثنائية نستخدم نفس طريقة ترتيب المصفوفات الثنائية ونضعها في دالة‬:‫تحليل‬
.‫( ونستدعيها ثالث مرات‬function)

#include<iostream.h>
1.int const row=5;
2.int const col=5;
4.int i,j,k,x,l ;
3.Sort2D(int array[][col])
{
4.for( k=0;k<row;k++){
5. for( l=0;l<col;l++){
6. for( i=0;i<row;i++){
7. for ( j=0;j<col;j++){
8. if (array[i][j] >array[k][l]){
9.x=array[k][l];
10.array[k][l]=array[i][j];
11.array[i][j]=x;
12.}} }} }
13. cout<<"Here is the Array after sorted\n" ;
14. for ( i=0;i<row;i++){
15. for ( j=0;j<row;j++)
16. cout<<array[i][j]<<"\t";
17. cout<<"\n" ;}}
18. main()
19.{ int array1[row][col];
20. int array2[row][col];
21. int array3[row][col];
22.cout<<"Here is the Array(1) befor sorted\n" ;
23. for ( i=0;i<row;i++)
24. for ( j=0;j<col;j++)
25.cin>>array1[i][j] ;
26.Sort2D(array1);
27.cout<<"Here is the Array (2) befor sorted\n" ;
28. for ( i=0;i<row;i++)
29. for ( j=0;j<col;j++)
30.cin>>array1[i][j] ;
31.Sort2D(array2);
32.cout<<"Here is the Array (3) befor sorted\n" ;
33. for ( i=0;i<row;i++)
34. for ( j=0;j<col;j++)
35.cin>>array3[i][j] ;
36.Sort2D(array3);}

91 ‫أحمـد صبــاح الجنابـي‬


‫) كل على حدة؟‬4*4( ‫برنامج إليجاد أحرف العلة وعددها في ثالث مصفوفات ثنائية اإلبعاد‬: ‫مثال‬

.(function) ‫إيجاد أحرف العلة في مصفوفات ثنائية ألكثر من واحدة نحتاج إلى دوال‬: ‫تحليل‬

#include<iostream.h>
1.char vowelchar [7]={'a','o','u','i','e','n','\o'};
2..int i,j,k;
3.int indexofprintarray=1;
4.vowel( char a[][4])
5.{ cout<<"\nvowel Char in
array("<<indexofprintarray<<")\n";
6.indexofprintarray=indexofprintarray+1;
7.int number_appear ;
8. number_appear =0;
9.for(k=0;k<6;k++)
10.for(i=0;i<4;i++)
11.for(j=0;j<4;j++)
12.if(a[i][j]== vowelchar [k])
13.{cout<< "\n"<<a[i][j];
14.number_appear = number_appear +1;}
15.cout<<"\nnumber appear of vowel="<<
number_appear;}}
16.main()
17.{char a[4][4],b[4][4], c[4][4];
18.cout<<"\nenter (1) array:\n";
19..for(i=0;i<4;i++)
20.for(j=0;j<4;j++)
21.cin>>a[i][j];
22.cout<<"\nenter (2) array:\n";
23.for(i=0;i<4;i++)
24.for(j=0;j<4;j++)
25.cin>>b[i][j];
26.cout<<"\nenter (3) array:\n";
27.for(i=0;i<4;i++)
28.for(j=0;j<4;j++)
29.cin>>c[i][j];
30.vowel( a );
31.vowel( b);
32.vowel( c);}

92 ‫أحمـد صبــاح الجنابـي‬


‫الفصـل السادس*‬

‫المؤشرات‬
‫● المؤشرات‬
‫● الدالة )‪(NEW‬‬
‫● المؤشرات والمصفوفات‬
‫■ المصفوفات االحادية والمؤشرات‬
‫■ المصفوفات الثنائية والمؤشــرات‬

‫● المؤشرات والدوال‬

‫‪93‬‬ ‫أحمـد صبــاح الجنابـي‬


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

‫عنوان الموقع‬ ‫محتواه‬


‫المؤشر‬ ‫‪0x244f23e8‬‬ ‫‪data‬‬

‫المؤشر يؤشر على عنوان المتغير في الذاكرة ويحمل قيمة هذا العنوان وهو هنا (‪.)0x244f23e8‬‬

‫المتغيرات تخزن في الذاكرة ويمكن أن نؤشر على قيمها بواسطة )‪ (pointer‬ونتالعب بقيمة هذا‬
‫الموقع بواسطته وتكون طريقة تعريف )‪ (pointer‬مع المتغيرات هكذا‪.‬‬
‫هيكلية المؤشر‬
‫‪Type *ptr=&var‬‬
‫)‪ : (ptr‬هو اسم المؤشر وقد يكون أي اسم يعرفه المستخدم ويجب وضع عالمة النجمة )*( قبله‬

‫)‪ :(Type‬هو نوع المؤشر ويكون نوعه نفس نوع المتغير الذي يؤشر عليه‬

‫)‪ :(var‬هو اسم المتغير الذي نريد أن يؤشر عليه المؤشر ويجب وضع عالمة )&(قبله عندما نجعل‬
‫المؤشر يؤشر عليه الن وضع هذه العالمة قبل أي متغير معناه المطلوب عنوان المتغير وليس قيمة‬
‫المتغير نفسه والمؤشرات تؤشر على العناوين المتغيرات فلو وضعنا هذه العالمة أمام أي متغير في‬
‫الطباعة سيطبع موقع المتغير وليس قيمته‪.‬‬

‫مثال ‪:‬لو كان لدينا متغير (‪ )x=5‬ويؤشر عليه مؤشر )‪ (ptr‬بالشكل التالي فيكون المخطط هكذا‬

‫;‪int x=25‬‬
‫;‪int *ptr=&x‬‬

‫اسم المؤشر‬ ‫العنوان الذي‬ ‫اسم المتغير‬ ‫عنوان الموقع‬ ‫محتواه‬


‫يؤشر عليه‬ ‫‪x 0x244f23e8‬‬ ‫‪25‬‬
‫‪Ptr‬‬ ‫‪0x244f23e8‬‬

‫‪94‬‬ ‫أحمـد صبــاح الجنابـي‬


.‫تأشير على موقع متغير وطباعة قيمته‬: ‫مثال‬

#include<iostream.h>
Void main()
{int x=5;
int *ptr=&x;
cout<<"loca on Ptr="<<ptr;
cout<<"\nlocation var="<<&x;
cout<<"\nvalue Ptr="<<*ptr;
cout<<"\n value var="<<x;
}

‫؟‬.‫( بواسطة المؤشر‬g) ‫ تغير محتويات المتغير‬: ‫مثال‬

#include<iostream.h>
main()
{int g=5;
int *ptr=&g;
*ptr=32;
cout<<"\nx="<<g;}

95 ‫أحمـد صبــاح الجنابـي‬


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

‫هيكلية المؤشر‬
‫]‪Type *ptr=new type[size‬‬
‫)‪ : (ptr‬هو اسم المؤشر وقد يكون أي اسم يعرفه المستخدم ويجب وضع عالمة النجمة )*( قبله‬
‫)‪ :(Type‬هو نوع المؤشر ويكون نوعه نفس نوع المتغير الذي يؤشر عليه‬

‫)‪ :(size‬هو الحجم أو عدد الموقع الذي سوف نحجزه للمؤشر في الذاكرة‪.‬‬

‫مثال ‪ :‬تكوين مؤشر جديد وحجز مكان جديد له وإبدال بين محتوى المؤشر ومحتويات المتغير)‪.(g‬؟‬

‫>‪#include<iostream.h‬‬
‫)(‪Void main‬‬
‫;‪{int g=15,item‬‬
‫;]‪int *ptr=new int [1‬‬
‫;‪*ptr=32‬‬
‫;‪item=*ptr‬‬
‫;‪*ptr=g‬‬
‫;‪g=item‬‬
‫};‪cout<<"\ng="<<g<<"\n*ptr="<<*ptr‬‬

‫‪96‬‬ ‫أحمـد صبــاح الجنابـي‬


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

‫مثال توضيحي‪ :‬لو عرفنا المصفوفة التالية حجمها خمسة عناصر وجعلنا المؤشر يؤشر على أول عنصر‬
‫بالمصفوفة‪.‬‬

‫;}‪Int first_array[5]={34,26,43,23,54‬‬
‫;]‪int *ptr=& first_array[0‬‬

‫مثال ‪:‬مصفوفة مكونة من خمسة عناصر أضف مقدار ) ‪ ( 14‬لكل عنصر باستخدام المؤشرات‪..‬؟‬

‫>‪#include<iostream.h‬‬
‫)(‪Void main‬‬
‫;}‪{ int i, first_array[5]={34,26,43,23,54‬‬
‫;]‪int *ptr=& first_array[0‬‬
‫{)‪for(i=0;i<5;i++‬‬
‫;‪*(ptr+i)=*(ptr+i)+14‬‬
‫}};)‪cout<<"\n first_array["<<i<<"]="<<*(ptr+i‬‬

‫;‪*(ptr+i)=*(ptr+i)+14‬‬ ‫;‪*(ptr+2)=*(ptr+2)+14‬‬ ‫الخطوة رقم (‪)4‬‬

‫مثال ‪:‬مصفوفة مكونة من ثالث عناصر أجمعها باستخدام المؤشرات‪..‬؟‬

‫>‪#include<iostream.h‬‬
‫)(‪Void main‬‬
‫;}‪{ int sum=0, first_array[3]={ 43,23,54‬‬
‫;]‪int *ptr=& first_array[0‬‬
‫;‪sum+=*ptr++‬‬
‫;‪sum+=*ptr++‬‬
‫;‪sum+=*ptr++‬‬
‫};‪cout<<"\n sum="<<sum‬‬

‫‪97‬‬ ‫أحمـد صبــاح الجنابـي‬


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

‫مثال توضيحي‪:‬لو عرفنا المصفوفة التالية حجمها (‪ )2*2‬وجعلنا المؤشر يؤشر على أول عنصر‬
‫بالمصفوفة‬

‫;} }‪int array[2][2]={{34,26},{43,23‬‬


‫;]‪int *ptr=& array[0][0‬‬
‫وافترضنا أن أول عنصر في المصفوفة خزن بموقع( ‪( 18126‬‬

‫اسم المؤشر‬ ‫العنوان الذي يؤشر عليه‬


‫‪ptr‬‬ ‫‪18126‬‬

‫إذا أردنا أن يؤشر المؤشر ‪ ptr‬على الموقع الثاني بالمصفوفة (أي الصف األول العمود‬
‫الثاني) نزيد قيمة الموقع الذي يؤشر عليه المؤشر ‪ ptr‬بمقدار واحد هكذا‪.‬‬

‫‪ptr+1 18126+1 18127‬‬

‫ليصبح المؤشر يؤشر على الموقع ( ‪ )18127‬وهو عنوان ثاني موقع بالمصفوفة‪.‬‬

‫إذا أردنا أن يؤشر المؤشر ‪ ptr‬على الموقع الرابع بالمصفوفة) أي الصف الثاني العمود‬
‫الثاني ( نزيد قيمة الموقع الذي يؤشر عليه المؤشر ‪ ptr‬بمقدار ثالثة هكذا ‪ .‬ليصبح‬
‫)‪ ) 18129‬وهو عنوان رابع موقع بالمصفوفة‪.‬‬ ‫المؤشر يؤشر على الموقع‬

‫‪ptr+1 18126+3 18129‬‬

‫تعامل المصفوفة الثنائية نفس معاملة المصفوفة األحادية بالمؤشرات الن كالهما عبارة عن‬
‫خاليا متسلسلة محجوزة بالذاكرة‪.‬‬

‫‪98‬‬ ‫أحمـد صبــاح الجنابـي‬


‫؟‬..‫) باستخدام المؤشرات‬4( ‫) أضرب كل عنصر بمقدار‬2*2( ‫مصفوفة حجمها‬: ‫مثال‬

#include<iostream.h>
Void main()
{ int i, j,first_array[2][2]={{34,26},{43,23} };
int *ptr=& first_array[0][0];
for(i=0;i<2*2;i++)
*(ptr+i)=*(ptr+i)*4;
for(i=0;i<2 ;i++){
for(j=0;j<2 ;j++)
cout<< first_array[i][j];
cout<<"\n";}}

4. *(ptr+i)=*(ptr+i)*4; *(ptr+2)=*(ptr+2)*4; )4( ‫خطوة رقم‬

‫؟‬..‫) أجمعها باستخدام المؤشرات‬2*2( ‫مصفوفة حجمها‬: ‫مثال‬

#include<iostream.h>
Void main()
{ int sum=0, first_array[2][2]={{34,26},{43,23} };
int *ptr=& first_array[0][0];
sum+=*ptr++;
sum+=*ptr++;
sum+=*ptr++;
sum+=*ptr++;
cout<<"\n sum="<<sum;}

99 ‫أحمـد صبــاح الجنابـي‬


‫المؤشرات والدوال‬
‫الدوال والمتغيرات ‪:‬عرفنا طريقة إرسال متغير بالقيمة كيف وبالمرجع كيف تكون ‪.‬المؤشرات تمكنك‬
‫من إرسال المتغير بالمرجع أي إرسال موقع المتغير وهذه تفيد إذا كنا نريد أن نعيد أكثر من متغير إلى‬
‫البرنامج الرئيسي ونعلم إن اإلرسال بالمرجع يكون أي تغير على المتغير في الدوال يؤثر على قيمته في‬
‫البرنامج الرئيسي‪.‬‬
‫لو كان لدينا متغير اسمه (‪ )a‬ونريد إرساله إلى دالة اسمها )‪.(name‬‬
‫إرسال مصفوفة مؤشر إلى الدوال‬
‫;) ‪name( &a‬‬
‫وضع عالمة )&( قبله معناه أننا أرسلنا عنوان أول موقع‪.‬‬

‫وطريقة استقبال المتغير في الدوال نعرف مؤشر من نفس نوع المتغير المرسل لكي يؤشر على موقعه‪.‬‬
‫استقبال مصفوفة مؤشر إلى الدوال‬
‫;)‪Type name(type *ptr‬‬

‫)‪ :(type‬هو نوع المتغير المرسل‬


‫أالن أصبح هذا المؤشر )‪ (ptr‬يؤشر على عنوان المتغير‪.‬‬

‫مثال ‪:‬تكوين دالة تستقبل وحرف صغير وتحوله إلى حرف كبير‪..‬؟‬
‫تحليل ‪:‬لتحويل حرف من صغير إلى كبير نعلم أن الفرق بين أسكي كود كل حرف صغير ونضيره الكبير‬
‫هو (‪ )32‬لذالك لتحويل إلى حرف كبير نحول الحرف إلى أسكي كود ونطرح منه (‪ )32‬ونرجع نحوله‬
‫إلى حرف فيتحول إلى حرف كبير‪.‬‬
‫الحل بدون استخدام المؤشرات‬ ‫الحل باستخدام المؤشرات‬
‫>‪#include<iostream.h‬‬ ‫>‪#include<iostream.h‬‬
‫)‪1.inline toBigLeter (char charrec‬‬ ‫)‪1.inline toBigLeter (char *ptr‬‬
‫};‪2.{ charrec =int( charrec )-32‬‬ ‫};‪2.{*ptr=int(*ptr)-32‬‬
‫)(‪3.void main‬‬ ‫)(‪3.void main‬‬
‫;‪4. { char inputchar‬‬ ‫;‪4. { char inputchar‬‬
‫;‪5.cin>> inputchar‬‬ ‫;‪5.cin>> inputchar‬‬
‫;) ‪6.toBigLeter ( inputchar‬‬ ‫;) ‪6.toBigLeter (& inputchar‬‬
‫<<"=‪7.cout<<"Big to it is‬‬ ‫<<"=‪7.cout<<"Big to it is‬‬
‫};‪inputchar‬‬ ‫};‪inputchar‬‬

‫‪111‬‬ ‫أحمـد صبــاح الجنابـي‬


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

‫مثال‪:‬لو كان لدينا مصفوفة اسمها (‪ )a‬ونريد إرسالها إلى دالة اسمها )‪.(name‬‬

‫;)]‪name( &a [0‬‬

‫وطريقة استقبال المصفوفة األحادية في الدوال نعرف مؤشر من نفس نوع‬


‫المصفوفة المرسلة‪.‬‬

‫;)‪Type name(type *ptr‬‬


‫)‪ :(type‬هو نوع المصفوفة المرسلة‪.‬‬
‫أالن أصبح هذا المؤشر )‪ (ptr‬يؤشر على عنوان أول موقع بالمصفوفة‪.‬‬

‫**في إرسال المصفوفة إلى الدوال قد نرسل عنوان أول موقع أو نرسل عنوان أخر‬
‫موقع أو أي موقع حسب ما نحتاجه في برنامجنا‪.‬‬

‫‪111‬‬ ‫أحمـد صبــاح الجنابـي‬


‫ ؟‬.‫ تكوين دالة تعكس تسلسل أحرف ثالث مصفوفات بالعكس وتطبعهم بعد العكس‬: ‫مثال‬
‫بما انه يريد عكس األحرف في المصفوفة باستخدام الدوال فيجب اإلرسال بالمرجع حتى عندما‬: ‫تحليل‬
‫يقلب أحرف السلسلة وعندما ينتهي من الدالة ويعود للبرنامج الرئيسي تعكس المصفوفات أيضا في‬
.‫البرنامج الرئيسي‬

#include<iostream.h>
#include<string.h>
1.int i;
2.Reverse(char *string,int len)
3.{char item;
4.for(i=len; i>len/2;i--){
5.item=* (string);
6.*(string )=*(string -i+(len-i));
7. *(string -i+(len-i))= item;
8. string --;} }
9.main()
10. { char string1[55], string2[55], string3[55];
11.int len;
12.cout<<"enter string (1): ";
13.cin.getline( string1,55);
14.len=strlen(string1)-1;
15.Reverse( &string1[len], len);
16.cout<< string1 ;
17.cout<<"\nenter string (2): ";
18.cin.getline( string2,55);
19.len=strlen(string2)-1;
20.Reverse( &string2[len], len);
21.cout<< string2 ;
22.cout<<"\n enter string (3): ";
23.cin.getline( string3,55);
24.len=strlen(string3)-1;
25.Reverse( &string3[len], len);
26.cout<< string3 ;}

112 ‫أحمـد صبــاح الجنابـي‬


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

‫ترسل المصفوفة الثنائية إلى الدالة بتحديد عنوان الموقع المرسل كأن يكون أننا نرسل عنوان أول موقع‬
‫وفي الدالة عندما يعرف أول موقع يستطيع التنقل إلى باقي المواقع بزيادة قيمة المؤشر بواحد كل مرة ‪.‬‬
‫هكذا ترسل‬

‫مثال‪:‬لو كان لدينا مصفوفة اسمها (‪ )a‬حجمها (‪ )4*4‬ونريد إرسالها إلى دالة اسمها )‪.(name‬‬

‫;)]‪name( &a [0][0‬‬


‫‪ -‬في هذه الطريقة أرسلنا عنوان أول موقع بوضع عالمة )&( قبله‪.‬‬

‫وطريقة استقبال المصفوفة الثنائية في الدوال نعرف مؤشر من نفس نوع المصفوفة المرسلة‪.‬‬
‫استقبال مؤشر مصفوفة الثنائية إلى الدوال‬
‫;)‪Type name(type *ptr‬‬

‫)‪ :(type‬هو نوع المصفوفة المرسلة‪.‬‬


‫أالن أصبح هذا المؤشر )‪ (ptr‬يؤشر على عنوان أول موقع بالمصفوفة‪.‬‬

‫●في إرسال المصفوفة إلى الدوال قد نرسل عنوان أول موقع أو نرسل عنوان أخر موقع‬
‫أو أي موقع حسب ما نحتاجه في برنامجنا‪.‬‬

‫‪113‬‬ ‫أحمـد صبــاح الجنابـي‬


‫ ؟‬.‫)وصفر مكان العدد الغير أولي‬4*4(‫ تكوين دالة تضع واحد مكان العدد األولي في مصفوفة‬: ‫مثال‬
‫بما إننا نريد تحويل المصفوفة إلى أصفار و واحدات نرسلها كمؤشر إلى داله وهناك العدد األولي‬:‫تحليل‬
.‫نضع مكانه واحد والغير أولي نضع صفر‬

#include<iostream.h>
1.int i,j;
2.int row=4;
3.int col=4;
4.prime2d (int *string )
5.{int prime=1;
6.for(i=0; i<row*col ;i++){
7.prime=1;
8.for(j=2;j<*string;j++)
9.if( *string % j==0)
11.prime=0;
12.*string= prime;
13. string ++;} }
14.void main()
15.{ int string1[4][4];
16. for(i=0; i<row ;i++)
17.for(j=0; j<col ;j++)
18.cin>> string1[i][j];
19.prime2d( &string1[0] [0]);
20.for(i=0; i<row ;i++){
21.for(j=0; j<col ;j++)
22.cout<< string1[i][j]<<"\t";
23.cout<<"\n";}}

114 ‫أحمـد صبــاح الجنابـي‬

You might also like