Professional Documents
Culture Documents
Step by Step To Learn C or C++ By:Hussien Ahmmed Taleb
Step by Step To Learn C or C++ By:Hussien Ahmmed Taleb
اھدي ھذا الكتاب إلى أمي ومن غير أمي يستحق ھذا اإلھداء فلك يا أمي اھدي ھذا الكتاب
يا أطيب من رأت عيناي في الدنيا فجزأك & عني وأخوتي خير الجزاء أطال & لنا بعمرك ا
البريد االلكتروني
hussien89aa@yahoo.com
ھناك مرفقات مع الكتابة لكي تكتمل الطريقة التعليمية بشكل صحيح وھي
• مجموعة كبيرة من األمثلة المحلولة بكتاب مرفق
• برنامج تعليمي مصمم ) (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
الفصل األول :التعرف على أساسيات اللغة وطريقة كتابة أول برنامج لك
المستوى المطلوب
ٔ
مبتدئ جدا ال يعرف اي شيء عن هذه اللغة فما فوق ذالك
ٔ
االهداف:
ٔ ٔ
عندما يكـتمل الفصل تكون بإذن ﷲ قد اتممت التعرف علﻰ اﺴاﺴيات هذه اللغة ومبادئها وطرق تسلسل
خطوات البرنامج
ٔ
مستوى االداء المطلوب بعد إنهاء الفصل
إتقان هذه الفصل إتقان كامل الن بقية الفصول جميعها تعتمد بشكل مباشر علﻰ هذا الفصل
ٔ
االدوات المطلوبة:ﺣاﺴوب شخصي لتجربة البرامج وقلم ودفتر لتسجيل المالﺣظات
ٔ
الوقت المطلوب :اربعة ﺴاعات
• منطقة التعريفات العامة واستدعاء مكاتب للبرنامج :في ھذا المكان يتم كتابة جميع المكاتب التي سنحتاج
إليھا داخل البرنامج وكذالك المتغيرات التي تعرف بشكل عام لكل البرنامج والسجالت والدوال على سبيل
المثال دالة القراءة والطباعة ) (scanf ,printfفي لغة Cتقع ضمن المكتبة > <stdio.hلذالك يجب
استدعاء ھذه المكتبة لكي تعمل ھذه الدوال ودالة ) (cout , cinتقع ضمن مكتبة >.<iostream.h
• دالة ):(mainھذه الدالة يسلم نظام التشغيل العمل لھا وعندما ننتھي وظيفتھا ترجع له قيمة
• ساحة كتبة األكواد :ھي المنطقة التي يتم بداخلھا كتابة األكواد البرمجية وتعريفات وغيرھا
يجب وضع فارزة منقوطة في نھاية أي تعبير مبرمج من قبل المستخدم للداللة على أن التعبير انتھى . •
x
الكو د
;char x,y,z
الكو د
;int x=5
X=5
الكو د
;char symbol
;'symbol ='a
'symbol ='a
أو قد يسند التغير بقيمة في وقت اإلدخال من لوحة المفاتيح )سنتطرق عليه الحقا(
• في الطرف األيمن من المساواة يوجد فقط اسم المتغير الذي نريد إسناد قيم إليه
• في الطرف األيسر من المساواة نستطيع كتابة إي تعبير رياضي أو متغير أو قيمة معينة
• في الخطوة رقم ) (٢أسندنا القيمة الناتجة من تعبير رياضي وھو ) (x+3إلى المتغير )(y
+
• لو تالحظ أن الطرف األيمن مكون من متغير فقط والطرف األيسر مكون من تعبير رياضي
• في الخطوة رقم ) (٢أسندنا القيمة الناتجة من تعبير رياضي وھو ) (x+3إلى تعبير رياضي أخر
وھذه الشيء خاطئ وال يقبله المترجم
+
الكو د
;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.
}
مثال :برنامج لتحميل قيمة متغير من نوع integerإلى متغير من نوع float
.٢في السطر الثاني دالة Mainالتي وصفناھا سابقا وفي السطر الثالث فتحنا قوس بداية البرنامج
.٤في السطر الخامس عرفنا متغير float fixAndPintمن نوع floatوأسندنا له قيمة ٣.٥
.٥في السطر السادس ساوينا المتغير fixOnlyمن نوع integerبالمتغير float fixAndPintمن نوع float
فأصبح المتغير fixOnlyمن نوع integerيحمل فقط قيمة الجزء الصحيح للمتغير float fixAndPintمن نوع
float
والسطر الثامن أغلقنا البرنامج .٦في السطر السابع طبعنا قيمة المتغيرfixOnly
نالحظ إن المتغير fixOnlyسوف تصبح قيمته ) (٣فقط رغم الذي ساويناه فيه ھوا ) (٣.٥والذي سيظھر
في شاشة التنفيذ ھوا )(٣
نالحظ وجود ) (cout,printfھذه الدوال تستخدم لعرض الناتج على شاشة التنفيذ للمستخدم وتسمى دوال
اإلخراج وھذه ما سنتناوله أالن.
في دالة الطباعة في لغة Cاستخدمنا الرمز ""%dالن ما سنطبعه ھو متغير من نوع integerوھذه ما
ستفھمه من الجدول رقم .١
• أي لكل لغة لھا دوال خاصة في اإلدخال وھو االختالف األكثر شيوعا بين ھاتين اللغتين ھي ودوال اإلدخال
أما بقية الدوال فتتشابه كثيرا جدا في ما بينھا.
• ) (varھو اسم المتغير الذي سوف نقوم بطباعة قيمته
• ) (symbleToVarھي رموز تستخدم للداللة على نوع المتغير المراد طباعته وھذا جدول بالرموز
جدول )(١ )ھذا الجدول فقط موجود بلغة (C وصفه الرمز
المتغير varعبارة عن متغير رقمي ;)printf ("%d",&var
المتغير varعبارة عن متغير كسري ;)printf ("%f",&var
المتغير varعبارة عن حرف ;)printf ("%c",&var
المتغير varعبارة عن ﺳلسلة ;)printf ("%s",&var
لتنفيذ البرنامج نضغط ) (ctrl+f9بعد كتابة الكود .لنرى النتائج
مھم
نالحظ :أي جملة نصية يجب وضعھا بين عالمتي تنصيص عند طباعتھا في دوال الطباعة.
• لو أردنا وضع كل كلمة في ﺳطر فقط نستخدم القالب " "\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في دالة الطباعة
.١بما أن المتغير من نوع ) (floatالحظنا وجود " "%fفي لغة ) (Cداللة على أن المغير كسري الذي ﺳوف يتم
طباعته
Number_is=3.5 $
في لغة C++الموضوع ﺳھل فقط نطبع )= (Number_isبشكل ﺳلسلة قبل المتغير) (fixAndPint
ونطبع) ($بعد المتغير أيضا بشكل سلسلة وبھذا يصبح الكود ھكذا
إما في لغة ) (Cفأن إي ﺳلسلة قبل )"("%symbleToVarالخاص بالمتغير يطبع قبل المتغير في شاشة التنفيذ وأي
ﺳلسلة بعده تطبع بعد المتغير
ونعلم انه كل متغير عند طباعته له ) (symbleToVarخاص به حسب نوعه) .وبھذه يصبح الكود بلغة ) (Cھكذا(
جدول )(٢ )ھذا الجدول فقط موجود بلغة (C وصفه الرمز
المتغير varعبارة عن متغير رقمي ;)scanf("%d",&var
المتغير varعبارة عن متغير كسري ;)scanf("%f",&var
المتغير varعبارة عن حرف ;)scanf("%c",&var
المتغير varعبارة عن ﺳلسلة ;)scanf("%s",&var
مثال :إذا كان لدينا المتغير ) (xمن نوع ) (floatوأردنا إدخال قيمه له من شاشة التنفيذ سيكون الكود بشكل التالي
توضيح الخطوات:
.٢خطوة رقم ) (٢قمنا بإدخال قيمة للمتغير من شاشة التنفيذ ويدخل فقط حرف واحد .بما انه المتغير من نوع
characterفي لغة ) (Cيقرئ ويطبع بداللة ""%C
.٣خطوة رقم ) (٣قمنا بطباعة قيمة المتغير التي أدخلت في خطوة رقم ) (٢بين قوسين
ما سيظھر في شاشة التنفيذ ھوا
مھم
أبدال بين قيم متغيرين :إلبدال بين قيمة متغيرين نحتاج إلى متغير ثالث من نفس نوع المتغيرين حتى نخزن ب ِه نتيجة
احد المتغيرين ثم نبدل الن في حال عدم وجود متغير ثالث ال نستطيع اإلبدال ستضيع احد القيمتين
األدوات -:Bowties
األسبقية الوظيفة الرمز
١ إشارة النفي ~
٢ إزاحة للعدد يمين أو يسار << أو >>
٣ عملية )(and &
٤ الرفع لقوى ^
٥ عملية )(or |
المثال على أساس عندنا متغيران ھما ) (a,bوناتج العملية الرياضية يخزن في )(c
الحظ أن التمثيل البرمجي مشابه تقريبا للتمثيل الرياضي مع أبدال بعض الرموز بما يكافئھا
ووضع فارزة منقوطة في نھاية التعبير .
مثال:لو كان لدينا متغيرين من نوع ) (integerوكالھما يحمل قيمة معينة يدخل قيمھم المستخدم من
شاشة التنفيذ قم بعملية جمع لھما.
.١خطوة رقم ) (١ھي تعريف للمكتبة الخاصة بدوال اإلدخال واإلخراج.خطوة رقم ) (٢ھي دالة )(main
.٢خطوة رقم ) (٣فتحنا قوس بداية البرنامج .عرفنا المتغير األول .و عرفنا المتغير الثاني وعرفنا متغير الجمع
.٤خطوة رقم ) (٧قمنا بجمع المتغير) ( firstوالمتغير) (secondsبداخل متغير أخر اسمه ) (Sumوطبعنا قيمة
ھذه المتغير في خطوة رقم ) (٨وعرفنا المتغير ) (Sumمن نوع ) (integerوھو على أساس جمع عددين من
نوع ) (integerيكون الناتج من نوع ) (integerولو كان احد العددان غير ) (integerلكان يجب تعريف Sum
بطريقة بالئم كي يحمل نتيجة جمع ھذان العددان إي لو كان احدھما كسري لكان يجب تعريفه من نوع )(float
ونستطيع إجراء بقية العمليات الرياضية على المتغيرين بنفس الطريقة فقط نبدل إشارة الجمع في الخطوة رقم
) (٧إلى إشارة ضرب أو طرح أو قسمة ؟إي ان
لو أردنا أجراء عملية طرح للرقمين المدخلين فقط نغير خطوة رقم ) (٧إلى
كود
;7.sum= first- seconds
لو أردنا أجراء عملية ضرب للرقمين المدخلين فقط نغير خطوة رقم ) (٧إلى
كود
;7.sum= first* seconds
لو أردنا أجراء عملية قسمة للرقمين المدخلين فقط نغير خطوة رقم ) (٧إلى
كود
;7.sum= first/ seconds
في عملية القسمة يتم تعريف المتغير ) (divبدل المتغير ) (sumعلى انه متغير كسري الن
عملية قسمة إي عددين قد ينتج عنھا رقم بعد الفارزة
كما الحظنا أن العمليات الرياضية برمجيا تمثل نفسھا في الطريقة االعتيادية لكن برموز أخرى دالة عن
نوع العملية في بعض الحاالت
10%8=2
الحظ أن إذا كان الرقم األول اقل من الثاني فال يتقسم عليه أصال كله يبقى كباقي قسمة
9%12=9
7%8=7
لو أردنا أيجاد باقي قسمة للرقمين المدخلين في المثال السابق فقط نغير خطوة رقم ) (٧إلى
كود
;7.sum= first % seconds
العالئقية :ھي رموز تستخدم لمعرفة العالقة بين الرقمين إي ھل يساويه أو أكبر منه أو ال يساوي أو الرموز
اصغر منه وھذا جدول بھذه الرموز وتكون نتيجة المقارنة إما ) (Trueاو )(False
مثال
يبدأ المترجم تنفيذ العمليات من اليسار إلى اليمين
Reslt=a – c / d
يبدءا بمقارنة كل عمليتين رياضيتين معا وأيھما له أسبقية أعلى تنفذ اوأل
عند مقارنة عملية القسمة و الطرح فوجد انه القسمة له أسبقية أعلى من الطرح لذالك ستنفذ القسمة أوال
فيقسم )(10/2=5
تنفذ عملية الطرح بشكل اعتيادي ألنھا أخر عملية رياضية متبقية قبل المساواة ويكون الناتج ھوا صفر
وأخر عملية ستنفذ ھي المساواة فتصبح قيمة
( )Reslt=0
لو الحظنا كيف تغلبت عملية القسمة على عملية الطرح في المثال وربما نحن كنا نريد أن تنفذ عملية الطرح
أوال لكن المترجم نفذ حسب االسبقية لذالك يجب مراعاة التعبير واالسبقيات.
مالحظة مھمة :عند مقارنة عمليتان ويجد أن االسبقيتان متساويتان سنفذ من اليسار إلى اليمين أول
عملية تقع في اليسار تنفذ أوال
Reslt=a * c + d
يبدءا بمقارنة كل عمليتين رياضيتين معا وأيھما له أسبقية أعلى تنفذ اوأل
عند مقارنة عملية الجمع والضرب فوجد انه الضرب له أسبقية أعلى من الجمع لذالك ستنفذ الضرب أوال فيضرب
)(5*10=50
تنفذ عملية الجمع بشكل اعتيادي ألنھا أخر عملية رياضية متبقية قبل المساواة ويكون الناتج ھوا) (55وأخر
عملية ستنفذ ھي المساواة فتصبح قيمة
( )Reslt=55
مھم
رياضيا لحل ھذه المشكلة نضع أقواس حول العمليات التي لھا أسبقية اقل ونريدھا أن تنفذ أوال وھو بالضبط
ما نعمله برمجيا أيضا نستخدم أقواس )الن األقواس لھا أسبقية على جميع باقي العمليات( لذالك سوف ينفذ
ما في داخلھا تم يتعامل مع الخارج القوس وتكون النتيجة صائبة؟
ويصبح شكل المثال السابق
)Reslt=a *( c +d
)Reslt=a * ( c + d
يبدءا بمقارنة كل عمليتين رياضيتين معا وأيھما له أسبقية أعلى تنفذ اوأل
عند مقارنة عملية الضرب واألقواس فوجد انه األقواس له أسبقية أعلى من الضرب لذالك ستنفذ مابين األقواس
أوال فيجمع )(10*2=12
تنفذ عملية الضرب بشكل اعتيادي ألنھا أخر عملية رياضية متبقية قبل المساواة ويكون الناتج ھوا) (75وأخر
عملية ستنفذ ھي المساواة فتصبح قيمة
Reslt=75
ھل الحظت كم ھناك اختالف بين النتيجتين........؟
مالحظة:إذا كان مابين األقواس أكثر من عملية رياضية ايظا داخل األقواس تعمل األسبقيات فأيھما له اسبقي أعلى
ينفذ أوال على سبيل المثال لو كان المثال
)Reslt=a * ( c + d/f
تسلسل تنفيذ العمليات ھي
.١يقسم )(d/f
.٢ويجمع ناتج القسمة مع )(c
.٣ويضرب ناتج مع )(a
.٤يساوي النتيجة ب reslt
يبدءا بمقارنة كل عمليتين رياضيتين معا وأيھما له أسبقية أعلى تنفذ اوأل
عند مقارنة عملية الجمع والقسمة فوجد انه القسمة له أسبقية أعلى من الجمع لذالك سنقسم أوال فيقسم
)(4/4=1
عند مقارنة عملية الجمع مع الطرح وجد أن االسبقيتان متساويتان لذالك سنفذ من اليسار إلى اليمين ومن اليسار
أول عملية تقع ھي الجمع لذالك سينفذ الجمع أوال)(5+1=6
عند مقارنة عملية القسمة مع الطرح وجد أن األسبقية القسمة أعلى لذالك سنفذ القسمة أوال)(4/2=2
تنفذ عملية الطرح بشكل اعتيادي ألنھا أخر عملية رياضية متبقية قبل المساواة ويكون الناتج ھوا ) (4وأخر
عملية ستنفذ ھي المساواة فتصبح قيمة
y=4
رياضيا لحل ھذه المشكلة نضع أقواس حول العمليات التي لھا أسبقية اقل ونريدھا أن تنفذ أوال وھو بالضبط
ما نعمله برمجيا أيضا نستخدم أقواس حول عملية الجمع لذالك سوف ينفذ الجمع تم يقسم النتيجة على)(D
وبما أم الناتج مطروح من عملية قسمة سوف ينفذ القسمة Bعلى Cويطرح النتيجتين وتكون النتيجة
صائبة؟
y=(5+A)/d-b/c
يبدأ بمقارنة كل عمليتين رياضيتين معا وأيھما له أسبقية أعلى تنفذ اوأل
عند مقارنة األقواس والقسمة فوجد انه األقواس له أسبقية أعلى من الجمع لذالك سينفذ مابين األقواس أوال
أوال فيجمع )(5+4=9
عند مقارنة عملية القسمة مع الطرح وجد أن القسمة أعلى فستنفذ أوال )(9/4=2.25
عند مقارنة عملية القسمة مع الطرح وجد أن األسبقية القسمة أعلى لذالك سنفذ القسمة أوال)(4/2=2
y= 25
مثال
True && False || True
جد النتيجة..............................؟
1.
نعلم انه andله أسبقية أعلى من orلذالك سينفذه أوال)(True And False=False
False || True
2.
أالن عملية orبشكل اعتيادي )( False or True=True
فالناتج يكون )(True
مھم
في عمليات المقارنة إي رقم غير الصفر يعتبره واحد سوا كان موجب او سالب اذان تكون المقارنة
1.
بما انه موجود تعابير رياضية وعمليات منطقية سينفذ العمليات الرياضية التي بين األقواس أوال
أول عملية سينفذھا ھي الضرب الن أسبقيتھا أعلى من الجمع وباقي القسمة ھي ) (4*2وتساوي
ثمانية
2.
سينفذ باقي القسمة ألن أسبقيته أعلى من الجمع وباقي قسمة) (4%2ھو صفر
3.
سينفذ عملية الجمع ) (2+3يساوي خمسة
4.
اآلن يقارن عملية ) (andوعملية ) (orنعلم انه andله أسبقية أعلى من orلذالك سينفذه أوال
في عمليات المقارنة إي رقم غير الصفر يعتبره واحد سوا كان موجب أو سالب إذن تكون المقارنة
بشكل التالي
)(5 && 8
)(1 && 1=1
النتيجة ھي واحد
1 || 0
5.
أخر عملية مقارنة ھي ) (orبين الواحد والصفر والنتيجة ھي واحد
(1||0)=1
إما )&( فيمثل عملية منطقية بين كل بت مع البت الذي يقابله في المتغير المقابل وليس مع المتغير كامال
لذالك تسمى . Bowtiesوناتج العملية ممكن أن يكون إي رقم
لنعد نفس المثال-:
;Int a=5
;Int b=7
)(A & b
ماذا سيحصل؟ سوف يحول ) ٥و (٧إلى ما يقابلھما ب Binaryثم يعمل بينھم عملية and
0111 7
0101 5
0101 5
نالحظ أن ناتج ھذه العملية ھوا ) ( 5وليس ) Trueأو (Falseإي ممكن أن يكون الناتج إي رقم
وكذالك بالنسبة ل )|| و |(
التعليقات مھمة جدا بجانب األسطر البرمجية حتى في ما بعد إذا أردنا فھم البرنامج إضافة تعليقات:
الذي كتبناه في وقت مضى مجرد نقرا التعليقات بجانب األسطر نفھم ما يعني الكود
* /تعليق * / في لغة ) ( Cنضع التعليق بين
تعليق // وفي لغة ) (C++نضع التعليق بعد
1.
بما انه موجود تعابير وعمليات منطقية سينفذ العمليات التي بين األقواس أوال
أول عملية سينفذھا ھي )&( ) (4&2يحولھا الى الباينري ويعمل بين البتات )(and
)(0100)&(0010)=(0000
النتيجة ھي صفر
2.
سينفذ عملية األصغر وان االثنان ليس اصغر من أربعة فتكون النتيجة Falseاي صفر
3.
سينفذ عملية orبين ثالثة واثنان يحولھا إلى الباينري ويعمل بين البتات or
)(0011)|(0010)=(0011
النتيجة ھي ثالثة
4.
اآلن يقارن عملية ) (andوعملية ) (orنعلم انه andله أسبقية أعلى من orلذالك سينفذه أوال
في عمليات المقارنة إي رقم غير الصفر يعتبره واحد سوا كان موجب أو سالب إذن تكون المقارنة
بشكل التالي
)(1 && 0
)(1 && 0=0
النتيجة ھي واحد
0 || 0
5.
أخر عملية مقارنة ھي ) (orبين الصفر والصفر والنتيجة ھي صفر
(0||0)=0
توضيح
;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معناه غير قيمتك السابقة أوال تم نفذ الخطوة التي أنت بھا لذالك نراه في جدول
األسبقيات مقدم على باقي العمليات في أسبقيته .لو أعدنا المثال السابق
مثال:يبين كيفية تأثر بمقدار التغير في الخطوة الموجود فيھا والخطوة التي تليھا .؟
توضيح....؟
.١في السطر الربع عرفنا متغير ) (aوأعطيناه قيمة بدائية وھي ٢وفي السطر الخامس عرفنا متغير
itemولم نعطه إي قيمة
وأصبح قيمة المتغير) (a=3بعد أن نفذ الخطوة رقم ) (٦ألنه ازداد بمقدار واحد
لكان المتغير ) (aتغيرت قيمته إلى ٣قبل تنفيذ الخطوة رقم ) (٦مؤثرا بقيمته الجديدة على
الخطوة التي ھو بھا وتصبح النتيجة قيمة المتغير (٣+٣) itemوھي ٦
لو نالحظ في كال الحالتين أصبح قيمة المتغير ) (a=3لكن اختلفا في تأثيرھما في التي ھما بھا
مھم .٣السطر السابع طبعنا قيمة المتغير itemوھي كما تظھر في شاشة التنفيذ ٥
.٤السطر الثامن قمنا بعملية رياضية جديدة جمعت بين ٣وقيمة المتغير aبدون إي تغير في مقدار
قيمة ھذه المتغير لكن رغم ذالك كانت النتيجة ٦وذالك ال المتغير aتغيرت قيمته في السطر السادس
إلى ثالثة لكنه بقا محتفظا بقيمته لم يؤثر في الخطوة التي ھوا بھا إنما اثر في الخطوة التي تليه
فأصبحت النتيجة ٦وليس ٥
تمثيل رياضي
8.item=3+ a
Item=3+3
Item=6
توضيح
;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وأعطيناه قيمة بدائية وھي ٢وفي السطر الخامس عرفنا متغير
itemولم نعطه إي قيمة
وأصبح قيمة المتغير) (a=1بعد أن نفذ الخطوة رقم ) (٦ألنه تناقص بمقدار واحد
لكان المتغير ) (aتغيرت قيمته إلى واحد قبل تنفيذ الخطوة رقم ) (٦مؤثرا بقيمته الجديدة على
الخطوة التي ھو بھا وتصبح النتيجة قيمة المتغير (٣+١) itemوھي ٤
لو نالحظ في كال الحالتين أصبح قيمة المتغير ) (a=1لكن اختلفا في تأثيرھما في التي ھما بھا
مھم .٣السطر السابع طبعنا قيمة المتغير itemوھي كما تظھر في شاشة التنفيذ ٥
.٤السطر الثامن قمنا بعملية رياضية جديدة جمعت بين ٣وقيمة المتغير aبدون إي تغير في مقدار
قيمة ھذه المتغير لكن رغم ذالك كانت النتيجة ) (4وذالك ال المتغير aتغيرت قيمته في السطر
السادس إلى واحد لكنه بقا محتفظا بقيمته لم يؤثر في الخطوة التي ھوا بھا إنما اثر في الخطوة التي تليه
فأصبحت النتيجة ٤وليس ٥
تمثيل رياضي
8.item=3+ a
Item=3+1
Item=4
(putchar).2يطبع حرف واحد فقط في شاشة التنفيذ )ھذا مثال على كيفية استخدام ھاتان الدالتان(.
ھذا مثال على كيفية استخدام ھذه الدالة )يجب تضمين المكتبة conioفي الحل ألننا نستخدم دوالھا(
الحظ ما سيظھر في شاشة التنفيذ عند الضغط على حرف ) (wمن لوحة المفاتيح بدون ضغط مفتاح ).(enterلم
يظھر الحرف الذي أدخلته إنما فقط نفذ وظھرت الرسالة
الحظ ما سيظھر في شاشة التنفيذ عند الضغط على حرف ) (wمن لوحة المفاتيح بدون ضغط مفتاح )(enter
تستخدم دوال ھذه المكتبة في حل العمليات الرياضية كإيجاد جيب أو جيب تمام أو قيمة مطلقة وغيرھا وھذا شرح
لعض دوالھا
(sin).1تستخدم ھذه الدالة إليجاد جيب الزاوية بالنظام ال ) (radلذالك إليجاد جيب الزاوية بالنظام ) (degفقط
نضرب قيمة الزاوية ب pi/180
إليجاد بقية الدوال المثلثية جميعھا تكون مشتقة من جيب وجيب تمام .إي إننا نحول إي دالة مثلثيه إلى جيب أو جيب
تمام حسب تحويلھا بالدوال المثلثية .
مثال إليجاد الضل الزاوية فقط نقسم جيب على جيب تمام الزاوية
(pow).3تستخدم ھذه الدالة إليجاد قيمة رقم مرفوع إلى أس )مثال . (3^2=9طريقة تمثيل ھذه الدالة
;)X=pow(number,hispower
حيث أن numberھوا الرقم و hispowerھو األس المرفوع له
مثال :لو كان لدينا )(3^9إي ثالثة مرفوع ألس تسعة فيكتب برمجيا باستخدام ھذه الدالة ھكذا
الكود
;)X=pow(3,9
الكود
X=abs(-3); // x=3
الكود
X=sqrt(25); // x=5
الكود
X=sizeof(int); // 2 byte is the size of integer
(int).2تحول ھذه الدالة المتغيرات من أنواع أخرى إلى متغير من نوع .integerوأيضا تجد قيمة ) (ASCiiللحرف.
االسكي كود :كل حرف من األحرف االنكليزية له أسكي كود خاص به يختلف عن غيره من األحرف مثال أسكي
كود الحرف ) (aصغيرة ھو ) (٩٧ويختلف عن أسكي كود ) (Aكبيرة الذي ھوا ) .(٦٥وترتيب أسكي كود األحرف
بالتسلسل إي أن أسكي كود ) (bھو ) (٩٨ويزداد بالتتالي)(c=99,d=100,e=101-----
(char).3تحول ھذه الدالة الرقم إلى قيمة األس كي كود الخاصة به.
الكود )تحويل حرف صغير إلى حرف كبير مثال ) (aأصبح )(A
;'char x='a
x=char(int('a')-32) // x=A
وفي بعض األمثلة سوف ال اكتبھا بالغتين على حدة اكتب بلغة واحدة وأنت تستطيع التحويل
وإذا كان ھناك أكثر من ھذه االختالفات الثالث أنا سوف اكتب البرنامج بلغتين
المستوى المطلوب
ٔ
ٔان يكون القارئ ملما بما هو في الفصل االول وفاهما كل شيء
ٔ
االهداف:
عندما يكـتمل الفصل تكون بإذن ﷲ قد ٔاتممت التعرف علﻰ الجمل الشرطية وطريقة اﺴتخدام
العبارات الشرطية ومواقعها ٔوانواعها
ٔ
مستوى االداء المطلوب بعد إنهاء الفصل
إتقان هذه الفصل 100%
ٔ
االدوات المطلوبة:ﺣاﺴوب شخصي لتجربة البرامج وقلم ودفتر لتسجيل المالﺣظات
}
أي أن حسب مخطط الفصل األول الخاص بتسلسل تنفيذ خطوات البرنامج بالتتابع .في العبارة الشرطية )(if
• إذا لم يحقق الشرط ) (conditionأي كانت نتيجة المقارنة ھي ) (Falseسوف يعبر جميع الخطوات
الموجودة بين قوسي العبارة الشرطية ) (ifوال ينفذھا ) وعرفنا في الفصل األول كيف تكون مقارنة الشروط(
• وإذا تحقق الشرط ) ( conditionأي كانت نتيجة المقارنة ھي ) ( Trueينفذ الخطوات الموجودة بين
قوسي العبارة الشرطية ) (ifبشكل اعتيادي الحظ المخطط التوضيحي لسير البرنامج
مھم
إذا لم نضع أقوس خلف العبارة الشرطية معناه يتبعھا فقط السطر الذي يليھا أما إذا وضعنا أقواس خلفھا فكل
الذي بين القوسين يكون تابع للعبارة الشرطية تنفذ إذا تحقق الشرط وال تنفذ إذا لم يتحقق الشرط
برنامج يدخل المستخدم من شاشة التنفيذ وإذا كان الرقم اكبر من خمسة يعطيه رسالة انه اكبر من خمسة
وإذا كان الرقم ال يحقق الشرط بين قوسي العبارة الشرطية )) (ifإي الرقم اصغر أو يساوي خمسة إي انه
سوف تكون نتيجة المقارنة ) (conditionھي ) ( (Falseومثال
لنفرض انه أدخل الرقم 2فتكون المقارنة ھكذا.
)(a>5)(2>5 False
سوف ال ينفذ ما موجود في قوسي العبارة الشرطية ) (ifإي ال ينفذ الخطوة رقم ) ( ٣إنما ينتقل إلى ما بعد القوس
العبارة الشرطية لينفذه أي سينفذ بعد الخطوة ) ( ٢مباشرة الخطوة رقم ) ( ٤وثم ) (٥فتسلسل تنفيذ خطوات
1 2 4 5
حيث أن )=! (>,<,>=,<=,==,تستخدم كعالقة بين متغيرين أو قيمتين أو متغير وتعبير رياضي
شكل تمثيل الشروط في العبارة الشرطية )(if
متغير أو قيمة وتعبير رياضي )If(a/2==0 )If(a==0 متغير وقيمة أو متغير وأخر
التعبير الرياضي ممكن أن يكون إي عمليات رياضية ونتيجة التعبير تدخل في المقارنة
)|| (&&,تستخدم عالقة بين مجموعتين كل متغيرين على حدة ) وان Andله أسبقية على ( OR
وأن الشروط داخل العبارة الشرطية ھي أيضا تنفذ حسب األسبقيات أي أن أي شرط أسبقيته أعلى ينفذ أوال وھذا ما
شرح عنه مفصال في الفصل األول في األمثلة على األسبقيات .
تحليل السؤال :يوجد متغيران يجب تعريفھما في بداية البرنامج وقراءتھما من شاشة التنفيذ وبعدھا التحقق من الشروط
الموجود في السؤال على ھذان المتغيران وطبع رسائل لكل شرط
.٣الشرط التابع للخطوة رقم ) (٨ھوا أن يكون قيمة aال يساوي قيمة bوفعال أن قيمة aالتي أدخلناھا
مھم
كانت ٣وقيمة b=2أي كانت ال تساوي لذالك نفذ الخطوة رقم )(٨
.٢الشرط التابع للخطوة ٧ھوا أن يكون قيمة aتساوي قيمة bوفعال أن قيمة aالتي أدخلناھا كانت ٣أي
كانت تساوي b=3لذالك نفذ الخطوة ٧
)(a==b)(3==3 True
*** وبقية الخطوات لم تنفذ ألنھا لم تتحقق شروطھا مھم
كما الحظت في المثال لم نضع أقواس لألسطر البرمجية التي تتبع كل عبارة ifالن كل عبارة
لم يتبعھا أكثر من سطر برمجي واحد وكما قلنا سابقا إذا كانت عبارة الشرط يتبعھا سطر
برمجي واحد ال حاجة لوضع أقواس وإذا أكثر من سطر نضع أقواس
مثال :٢برنامج ندخل رقم ويطبع رسالة إذا كان الرقم بين) ( ١٠٠—٥إذا كان الرقم ضمن ھذه الفترة وإذا خارج
الفترة ال نطبع أي شيء .؟
تحليل:
.١لدينا رقم ندخله من شاشة التنفيذ لذالك نحن بحاجة تعريف متغير يخص الرقم ودالة إلدخاله من شاشة التنفيذ وليكن
اسم المتغير ھو )(a
.٢لدينا شرط أن يقع ضمن فترة) (١٠٠—٥في مثل ھذه األسئلة نحن بحاجة إلى دمج أكثر من شرط في عبارة
شرطية واحد كأن نقول له في الشرط أن يكون الرقم خمسة و واصغر من مئة
الكود
) If ( a > 5
وشرط اصغر من مئة أيضا بسيط وھو
الكود
) If ( a < 100
الكود
) )If ( ( a>5 )&&(a<100 مھم
*وراجع جدول ) (andلفھم الفكرة أكثر ألنه لو قلنا عملية ORبين الشرطيين لكان ھناك اختالف كبير في الحل أي
لو تحقق احد الشرطان في جملة ORتنفذ عبارة ifإما andالجملة ال تنفذ إال بتحقق الشرطيين .ليصبح الحل ھكذا
خطوة رقم ) (١عرفنا متغير من نوع integerلكي نحمله بالقيمة المدخلة .١
خطوة رقم ) (٢ھي إدخال قيمة للمتغير من قبل المستخدم .٢
خطوة رقم ) (٣ھو عملية التحقق من الشرط .٣
فلو ادخل المستخدم الرقم ) (٤٠فتكون المقارنة بشكل التالي
مثال:٣الشرط المطلوب ھوا أن قيمة المتغير ) (cيجب أن تقبل القسمة على ثالثة وعلى ستة أو تقبل القسمة على
تسعة ليحقق الشرط .؟
التحليل.الشرطان األوالن أن يقبل القسمة على) ٣و (٦إي ناتج باقي قسمتھما ھو صفر والى جانب ھذان الشرطان أن
يقبل القسمة على تسعة إي إما يقبل القسمة على ) ٣و (٦أو يقبل القسمة على ٩إي يوجد بين شرطا تحقق قبول
القسمة على ) ٣و (٦عملية andألنه واجب تحققھما معا وناجتھما داخل على عملية ORمع شرط قبول القسمة
على ٩
الكود
) )If ( ( ( c%3==0 )&&(c%6==0) ) || (c% 9==0
مھم
*إذا لم نضع أقواس حول العمليات المطلوب تحققھما معا قد ال يحقق المطلوب ألنه تحكمه األسبقية الشرط الذي
له أسبقية أعلى ينفذ أوال
لو عدنا إلى نفس الشرط السابق وفرضنا أن بين شرط قبول القسمة على ) ٣و ( ٦يوجد عملية ORوليس
عملية ANDوواجب تحقق احدھما والناتج لھما يدخل على ANDمع شرط تحقق القبول القسمة على ٩
وليس ) ORولم نضع أقواس حول شرطيين تحقق قبول القسمة على ٣أو ( ٦
الكود
( 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وعند مقارنة نتيجة مقارنة مع عدد تكون نتائج
غير صحيحة
سيتحقق من الشرط التالي ھل الواحد اكبر من ثالثة كال فتكون نتيجة ھي ) (falseإي صفر
2. 1>3=0
لذالك فالحل الصحيح بما إننا نريد تحقق الشرطان معا نستخدم بينھم عملية andكأن نقول يجب أن تكون قيمة ) (a
اكبر من ) (٣واكبر من ).( ٥
الكود
;int a=6
) )if ( ( a>5) && (a>3
لو رسمنا المخطط التوضيحي للمثال بعد التعديل يكون بشكل التالي
.٣قبل خطوة رقم ) (٣يوجد شرط لتنفيذ مابين قوسي العبارة الشرطية وھو أن يكون باقي قسمة قيمة المتغير 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ھي ) ( a=5+3=8وقيمة ) (bبقت ثابتة لم تتغير )(b=4
.٥خطوة رقم ) (٦أصبح قيمة ) (bھي ) ( b=4+2=6وقيمة ) (aبقت ثابتة لم تتغير )(a=8
في لغة ) (C++تمكنك من تعريف متغيرات أينما تشاء في البرنامج فلو عرفنا متغير بين قوسي العبارة الشرطية
يكون غير معرف بالنسبة لمن ھم خارج قوسي العبارة الشرطية فقط معرف بالداخل
الكود
)If ( True>3
};{int x=5
x=3; // سوف يعترض المترجم على ھذا السطر ويعتبر ) (xغير معرف
إي أن المتغير ننتھي حياته عند الخروج من العبارة الشرطية
ومن الشرط الموجود )) (If ( input_Numner%2==0إي متى ما كان ) (input_Numnerباقي قسمته على )(٢
ھو صفر سوف ينفذ Statement1
وخالفه إي إذا لم يتحقق الشرط إي إذا كان ) (input_Numnerباقي قسمته على ) (٢ال يساوي صفر سوف
ينفذ Statement2
) (Statement2 ،Statement1قد تكون سطر برمجي واحد أو أكثر من سطر فتوضع بين قوسين
.٢خطوة رقم ) (٢يطلب من المستخدم إدخال قيمة للمتغير ) (aمن شاشة التنفيذ
مھم
.٣أالن نأتي إلى شرط التحقق
إذا ادخل المستخدم إي رقم اكبر من صفر سوف يحقق شرط ) (ifو ينفذ السطر ) (٣ويطبع ھذه الرسالة
isisgreater
greaterthan
than11isisposi7ve
posi7ve
ويطفر السطر )) (٤ألنه يتحقق إذا لم ينفذ الشرط( تم ينفذ السطر ) (٥تم السطر ) (٦إي يكون تسلسل تنفيذ
خطوات البرنامج الكلية
isisless
lessthan
than11isisnega7ve
nega7ve
تم ينفذ السطر ) (٥تم السطر ) (٦إي يكون تسلسل تنفيذ خطوات البرنامج الكلية
الكود
)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األولى أم الثانية أم غيرھما..؟
بدون العبارات الشرطية المتداخلة 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الثانية شاھد المثال لفھم الشرح.
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")
}
:توضيح الخطوات
( أي اقل من صفر أي لم-3) ھيinput_Try وان قيمة المتغيرif (input_Try>0) سيتم التحقق من الشرط
( ويطبع في شاشة التنفيذ٥) ( الثانية وينفذ الخطوة رقمelse) يحقق الشرط لذالك سيتجه إلى عبارة
the number is less than zero
كما قلنا سابقا كل عبارة شرطية ) (ifيتبعھا سطر واحد إذا لم نضع أقواس وإذا أكثر من سطر يتبع العبارة الشرطية
التي نضع أقواس حول الذي يتبعھا وبما انه ھنا ال يوجد أقواس معناه الذي سيتبع العبارة الشرطية )if (input_Try>0
ھوا فقط السطر الذي يليه وھو ) if (input_Try %2==0وھذا السطر أيضا يتبعه سطر واحد ويوجد عبارة
elseله إي )كأننا نقول إذا تحقق الشرط األول وكان الرقم اكبر من صفر توجد عبارة شرطية تتحقق منه إذا كان
الرقم فردي أم زوجي لكن الموجب فقط يمر على عبارة ) (if—elseألنھا قيدت بالشرط الذي قبلھا(
سيتم التحقق من الشرط ) 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تحقق
سيتم التحقق من الشرط ) if (input_Try>0وان قيمة المتغير input_Tryھي ) (٤أي اكبر من صفر أي
حقق الشرط لذالك سيتجه إلى عبارة ) if (input_Try %2==0التي تلي شرط التحقق
وھذه العبارة تتحقق في ما إذا كان الرقم زوجي وان الرقم ٤ھو رقم فردي لذالك ال يتحقق الشرط وينفذ عبارة
elseوينفذ الخطوة رقم ) (٤ويطبع في شاشة التنفيذ
الشكل العام
شكل عبارة 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وبعدھا ينتقل إلى" خطوة جديدة"
.٢خطوة رقم ) (٢تنفذ بشكل اعتيادي ويطلب من المستخدم إدخال قيمة للمتغير ) ( number_enterمن شاشة
التنفيذ لنفرض إننا أدخلنا ) (number_enterمرة ) ٦و١٤و١٥و ٢٠و (١٩
سوف ينفذ الخطوة رقم ) (٣وينتھي البرنامج )حسب شرح عن الدالة) (if—else ifإذا تحقق احد الشروط في احد
العبارات تنفذ ما في داخله وتتجه إلى ما بعد elseالنھائية لتنفذه وبما انه ال يوجد شي بعد elseيوجد فقط قوس
نھاية البرنامج لذالك ستنھي البرنامج( طابعا للرسالة التالية تم وينتھي البرنامج
طابعا للرسالة التالية تم وينتھي البرنامج سوف ينفذ الخطوة رقم ) (5وخطوة رقم )(6
سوف ينفذ الخطوة رقم ) (3وال ينفذ وخطوة رقم ) (٤رغم قبوله القسمة على ) ( ٥ألنه برمجيا عندما يبدأ
البرنامج بالتحقق من الشروط يبدأ بالتحقق بالتسلسل خطوة بخطوة حسب الترتيب ونحن واضعين شرط قبول القسمة
على ثالثة قبل شرط قبول القسمة على خمسة وعندما يمر البرنامج على الشرط األول وحققه ال يمر على الشرط
الثاني بل يتجه إلى ما بعد ) .(elseلو كنا واضعين شرط قبول القسمة على خمسة قبل شرط قبول القسمة على ثالثة
لتنفذ خطوة رقم ) .(٤لذالك سيطبع البرنامج أالن ھذه الرسالة
سوف لن يحقق إي من الشروط السابقة لذالك سيتجه إلى ) (elseينفذ الخطوة رقم ) (٧طابعا للرسالة التالية تم
وينتھي البرنامج
خطوة رقم ) ٥و (٦وضعت بين قوسين للداللة على أنھما تابعتان لعبارة )(else
بما انه يوجد لدينا سبعة أيام فوضع كل يوم على حدة بعبارة شرطية يعقد البرنامج شيئ ما لذال:تحليل المتطلبات
( لتسھيل األمر قليال شاھد المثال بسيط جدا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"); }
الشكل العام
شكل عبارة 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(Day_Number
Case 51: //do some thing
;Break
الكود
Switch(Capatat_symbol)
Case 'a': //do some thing
Break;
( ھي أي عدد من االكواد البرمجية يمكن كتابتھا وحسب الحاجة وتذكر إذا أردنا أنdo some thing) حيث أن
.(Break) ( يجب أن نضعھا داخل قوسين وبعدھا نكتبCase) نكتب أكثر من سطر برمجي داخل
" وينتقل بعدھا إلى "خطوة جديدةStatement1 سوف ينفذcondiHon1 إي أن إذا تحقق •
Statement2 وإذا تحقق الشرط سوف ينفذcondiHon2 سوف ينتقل إلىcondiHon1 إذا لم يتحقق •
"بعدھا إلى "خطوة جديدة
" وبعدھا ينتقل إلى" خطوة جديدةdefault سوف ينفذ ما موجود فيconditions وإذا لم يتحقق إي من •
( ھذا شيء ثابت في ھيكلية ھذه الدالة لكي يخرج منcase) ( في نھاية كلBreak) نالحظ وجود •
( بعد تحقق احد الشروطswitch)
لدينا المعومات التالية عن ھؤالء األشخاص نريد مجرد كتابة أول حرف من اسم الشخص يعطيك المعلومات:مثال
الكاملة عنه
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" ; }}
.٢خطوة رقم ) (٢طبع رسالة للمستخدم تطلب منه إدخال أول حرف من اسم الشخص ھذه الرسائل مھمة جدا لواجه
برنامجك حتى يعلم المستخدم كيف يتعامل مع برنامجك ما ھو المطلوب منه وماذا يدخل فدائما حاول أن يكون
برنامجك واضح للمستخدم بھذه الرسائل
.٣خطوة رقم) (٣قمنا بقراءة حرف من شاشة التنفيذ ،خطوة ) (٤أدخلنا الحرف الذي ادخله المستخدم في قائمة
الخيارات وھي )(switch
.٤خطوة رقم ) (٥تحوي حالة شرطية ألول حرف من اسم الشخص ) (Ailوتالحظ األحرف في المقارنة توضع بين
عالمة تنصيصية واحدة من الجانبين ھكذا )'('A
.٥خطوة رقم ) (٦تطبع سجل ھذا الشخص إذا كان ھوا المطلوب ،وخطوة رقم ) (٧توقف ال 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)( ظھر اليوم المقابل له وھو٥) شاھد شاشة التنفيذ عندما أدخلنا الرقم
حالھا كحال إي كود برمجي أخر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");}}
شاھد شاشة التنفيذ
المستوى المطلوب
ٔ
ٔان يكون القارئ ملما بما هو في الفصل االول والثاني وفاهما كل شيء
ٔ
االهداف:
عندما يكـتمل الفصل تكون بإذن ﷲ قد ٔاتممت التعرف علﻰ دوال التكرار وطريقة اﺴتخدامها
ٔ
مستوى االداء المطلوب بعد إنهاء الفصل
إتقان هذه الفصل 100%
ٔ
االدوات المطلوبة:ﺣاﺴوب شخصي لتجربة البرامج وقلم ودفتر لتسجيل المالﺣظات
ھيكلية 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ھي الخطوات البرمجية التي ستنفذ عدد من المرات .إذا كانت عبارة عن خطوة برمجية
واحدة فليس بحاجة لوضعھا داخل أقواس وإذا كانت أكثر من خطوة يجب وضعھا داخل أقواس.
مھم
أن المتغير يبدأ بقيمة بدائية ) (Initializingويستمر بالزيادة أو النقصان حسب ) (Updateإي قد يزداد أو ينقص
بمقدار واحد أو أكثر من واحد ومتى ما أصبح قيمة المتغير غير محققة للشرط ) (Boolean_Expressionيخرج
من العبارة التكرارية إلى الخطوات البرمجية التي تليه .وإذا كانت محققة للشرط ينفذ الخطوات البرمجية التي داخل
العبارة التكرارية
شرط التحقق)(i<5
طباعة القيمة
خروج من جملة
التكرار
لو تالحظ المخطط الخاص بالبرنامج عندما يحقق الشرط يتجه لخطوة الطباعة وإذا لم يحقق يخرج من جملة تكرار
.٣خطوة رقم ) (٣ھي طباعة قيمة المتغير عند كل ) ( loopوبما أن الذي يتبع العبارة التكرارية سطر واحد فليس
بحاجة لوضعه بين قوسين تضمين) }{( .
عدد مرات تنفيذ الخطوات :تنفذ خطوة رقم ) (١مرة واحدة فقط.وتنفذ خطوة رقم) (٢وخطوة رقم ) (٣خمس
مرات بقدر عدات العداد
تحليل:حلھا نفس حل السؤال السابق فقط نقلب العداد إي نجعل قيمته البدائية ھي ٤وشرط التوقف اكبر أو يساوي
صفر ويتناقص بمقدار واحد كل عدة
.٢خطوة رقم )(٢ھي عبارة تكرارية بما إننا نريد العد من األربعة فأعطينا القيم البدائية أربعة .والعد يصل إلى
الصفر معناه شرط التوقف أن يكون اكبر أو يساوي صفر بما إننا نريد أن يعد خمس عدات بين صفر واألربعة لذالك
يجب أن يكون مقدار نقصان واحد ليعد ). (4,3,2,1,0الن لو جعلنا مقدار النقصان ٢مثال فسيعد العداد ثالث مرات
مرة) (4,2,0لذالك يجب التركيز في ھذه المواضيع جيدا
تنفذ خطوة رقم ) (١مرة واحدة فقط.وتنفذ خطوة رقم) (٢وخطوة رقم ) (٣خمس مرات بقدر عدات العداد
تحليل :نرى انه يريد اإلعداد الفردية فقط لذالك يجب أن نتجاوز اإلعداد الزوجية .نكون عداد يعد من الواحد وشرط
التوقف عند المائة ومقدار الزيادة في ) (٢حتى نجمع فقط اإلعداد الفردية ) العداد أوال يعد الرقم واحد وإذا أضفنا إليه
) (٢يعد الرقم ثالثة وإذا أضفنا ) (٢يعد خمسة وإذا أضفنا ) (٢يعد الرقم سبعة ويستمر إلى )( (٩٩
تحليل :بما انه يريد حساب المعدل من عشر درجات فيجب جمع ھذه الدرجات وقسمتھا على عشرة للحصول على
المعدل وبما أن يدخلھا المستخدم وبما إنھن عشر درجات فيصعب إدخالھا كل واحد على حدة لذالك نستخدم عبارة
) (Forالتكرارية تتكرر عشر مرات ونضع تحتھا جملة القراءة )حيث عند كل عدة للعبارة التكرارية يطلب منك
إدخال درجة ويجمع الدرجات المدخلة عند كل إدخال وناتج الجمع يقسم بعد اإلدخال على عشرة
.١خطوة رقم ) (١عرفنا متغير ) (nليكون عداد للعبارة التكرارية ومتغير حساب المعدل ومتغير إدخال الدرجات
.٢خطوة رقم ) (٢عرفنا متغير ) (sumمن نوع ) (integerوأعطيناه قيمة بدائية وھي صفر ألننا سنجمع والنضير
الجمعي ھو صفر
.٣خطوة رقم ) (٣ھي جملة تكرارية مطلوب منھا تكرر الخطوة رقم ) (٤وخطوة رقم ) (٥عشر مرات وبما انه
مطلوب أن يكرر أكثر من سطر برمجي يجب وضعھما بين قوسي العبارة التكرارية
.٤خطوة رقم ) (٤ھي دالة إدخال عند كل عدة للجملة التكرارية يطلب من المستخدم إدخال درجة جديدة
.٥خطوة رقم ) (٥يقوم بجمع الدرجات المدخلة عند كل إدخال يجمع الدرجة الجديدة مع ناتج جمع الدرجات السابقة
.٦خطوة رقم ) (٦يقوم بحساب المعدل حيث يقسم ناتج جمع الدرجات المدخلة على عشرة
.٧خطوة رقم ) (٧يقوم بطباعة المعدل
عدد مرات تنفيذ الخطوات:تنفذ خطوة رقم )١و (٢مرة واحدة فقط.وتنفذ خطوة رقم)٣و ٤و (٥عشر مرات وتنفذ
خطوة رقم) ٦و (٧مرة واحدة
تحليل :العدد األولي ھو العدد الذي يقبل القسمة على نفسه وعلى واحد فقط )إذا قبل الرقم القسمة على غير ھذان
الرقمان فھو عدد غير أولي( .ولحل ھذا السؤال نكون عداد يعد من االثنان إلى اقل من الرقم المدخل بواحد )مثال
إذا كان الرقم المدخل ٢١نكون عدد يعد من ٢إلى (٢٠وإذا قبل الرقم المدخل القسمة على إي من أرقام العداد التي
سيعدھا وھي المحصورة بين اثنان واقل من الرقم بواحد فيكون عدد غير أولي وإذا لم يقبل القسمة على إي من ھذه
اإلعداد فھو عدد أولي .
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
توضيح الخطوات:
.١خطوة رقم ) (١تم تعريف متغير للعداد وأخر للرقم المدخل
.٢خطوة رقم ) (٢تم تعريف متغير واعتبر كمتغير منطقي وأعطية قيمة صفر إذا كان الرقم المدخل أولي يبقى صفر
حتى نھاية البرنامج وإذا كان غير أولي يتغير في خطوة رقم ) (٦إلى واحد للداللة على أن الرقم الذي تم إدخاله رقم
غير أولي حتى في نھاية البرنامج وبالتحديد في خطوة رقم ) (٧نتأكد من قيمة ھذا المتغير إذا بقى صفر فكان الرقم
المدخل أولي وإذا تغير إلى واحد كان الرقم المدخل غير أولي
.٣خطوة رقم )(٣يطلب من المستخدم إدخال الرقم من شاشة التنفيذ للتحقق منه
.٤خطوة رقم ) (٤عداد يعد من االثنان إلى اقل من الرقم المدخل بواحد ويزداد بمقدار واحد
عدد مرات تنفيذ الخطوات:تنفذ خطوة رقم )١و ٢و (٣مرة واحدة فقط.
فإذا كان الرقم المدخل مثال ٧ستنفذ خطوة رقم) (٤ثالث مرات ألنھا ستعد ) (2 , 3 ,4وسوف ال تنفذ خطوة رقم
) ٥و (٦الن إذا كان الرقم المدخل ٧فھو ال يقبل القسمة على) ٢أو ٣أو (٤وبما انه لم يقبل القسمة على إي من
ھذه األرقام ستبقى قيمة ) (booleanx=0ثابتة على قيمتھا األولية لذالك خطوة رقم ) ٧و (٨ال تنفذ الن شرطھا لم
يتحقق لذالك ستنفذ خطوة رقم ) ٩و(١٠
.١خطوة رقم ) (١تم تعريف متغير ) (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
عدد مرات تنفيذ الخطوات:تنفذ خطوة رقم )١و ٢و (٣مرة واحدة فقط.
إذا كان الرقم المراد إيجاد مفكوكة على سبيل المثال ھو ٣ستنفذ خطوة رقم )٤و (٥ثالث مرات وتنفذ خطوة
رقم) (٦مرة واحدة
تحليل:نرى من السلسلة أنھا تصل إلى ) (٧وتعود بالتناقص فلحل ھذا المثال نكون عداد يعد من الواحد إلى الستة
وإذا تجاوز الستة يخرج من الجملة التكرارية ونأخذ قيمته الجديدة ونسندھا لعداد أخر يبدأ منھا وينتھي بالواحد
تحليل الخطوات:
.٢خطوة رقم) (٢عبارة تكرارية تعد من ) (١إلى ) (٦وتطبع قيم العداد في خطوة رقم ) (٣التي تكون تابعة للعبارة
التكرارية
.٣خطوة رقم ) (٤عداد جديد يعد من أخر قيمة وصل إليھا العداد األول ونحن نعلم أن شرط العداد األول باالستمرار
أن يكون قيمة ) (iاقل من سبعة وعندما أصبح قيمته سبعة خرج من الجملة التكرارية إي أن قيمة ) (i=7في الخطوة
رقم ) (٤لذالك سيعد ھذا العداد من السبعة ويتناقص إلى الواحد الن شرط توقف أن يكون اكبر من صفر)إي عندما
تصبح قيمته صفر يخرج من الجملة التكرارية( .ويطبع قيم العداد في خطوة رقم ) (٥ألنھا تابعة للخطوة رقم )(٤
عدد مرات تنفيذ الخطوات:تنفذ خطوة رقم ) (١مرة واحدة فقط .ستنفذ خطوة رقم )٢و (٣ست مرات وتنفذ
خطوة رقم)٤و (٥سبع مرات.
ھيكلية 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مرة واحدة تم يصل في خطوة رقم ) (٥إلى نھاية قوس)قوس اإلغالق( العبارة التكرارية
الخارجية في خطوة رقم ) (١وبما انه وصل إلى نھاية قوس العبارة التكرارية الخارجية سيعود الى الخطوة
**تبقى المبادئ ثابتة كل عبارة تكرارية يتبعھا سطر برمجي واحد إذا لم نستخدم أقواس وإذا وضعنا أقواس كل الذي
داخل األقواس ھو تابع للعبارة التكرارية.
تحليل :لو نركز في السؤال نراه يريد جدول ضرب وجدول الضرب مكون من ضرب رقميين فعلى سبيل المثال
جدول ضرب ١يضرب رقم واحد باألرقام من واحد إلى العشرة وجدول ضرب ٢يضرب االثنان باألرقام من واحد
إلى عشرة ويستمر !.....أي إننا سنحتاج إلى عبارتين تكراريتين عبارة خارجية تخص جدول ضرب الرقم وأرقام
داخلية تضرب ھذه الرقم باألرقام من واحد إلى عشرة.
توضيح الخطوات:
.١خطوة رقم ) (١تم تعريف متغيرين المتغير ) (iھو جدول ضرب الرقم )كان يكون جدول ضرب ثالثة مثال(
والمتغير ) (jھوا يضرب بالمتغير األول األرقام من واحد إلى العشرة
.٢خطوة رقم ) (٢ھي عبارة تكرارية تعد من ) (١إلى ) (١٠وفي كل عدة لھا تتكرر الخطوات رقم) ٣و٤و٥و(٦
والحظ وضعنا ھذه الخطوات بين قوسين ألنھا أكثر من خطوة ونريد أن نتبعھا لھذه العبارة التكرارية لذالك يجب
وضعھا بين قوسين
.٣خطوة رقم ) (٣ھي رسالة تظھر بداية كل جدول تبين للمستخدم انه ھذا الجدول ھو للرقم المعين وھي بضبط
الرسالة الموجودة في شاشة التنفيذ في األسفل ومؤشر عليھا ب )" جملة الطباعة الخطوة ) ("(٣وكما تالحظ أن في
كل عدة للعبارة التكرارية الخطوة رقم ) (٢تتكرر الخطوة رقم ) (٣مرة واحدة لتظھر بداية كل جدول
.٥خطوة رقم ) (٥ھي عملية طباعة كل قيمة من التي تعدھا العبارة التكرارية في الخطوة رقم ) (٢باألرقام من )(١
إلى ) (١٠التي تعدھا العبارة التكرارية في خطوة رقم ) (٤وھذه جملة الطباعة ھي تابعة لھذه العبارة التكرارية وما
تنتجه ھذه جملة الطباعة شاھده بالرسالة الموجودة في شاشة التنفيذ في األسفل ومؤشر عليھا ب )" جملة الطباعة
الخطوة )("(٥
.٦خطوة رقم ) (٦ھي عملية طباعة سطر جديد بعد كل جدول ضرب والحظھا ھي تابعة للعبارة التكرارية في
خطوة رقم) (٢وما تنتجه ھذه جملة الطباعة شاھده بالرسالة الموجودة في شاشة التنفيذ في األسفل ومؤشر عليھا ب
)" جملة الطباعة الخطوة )("(٦
مھم
كيف نعرف أن الخطوة رقم ) (٦ھي تابعه للخطوة رقم ) (٢وليس للخطوة رقم )..(٤؟
كما تالحظ أن خطوة رقم ) (٢تحصر بين قوسيھا خطوات رقم)٣و٤و٥و (٦ونالحظ أن العبارة التكرارية في الخطوة
رقم ) (٤تتبعھا فقط سطر واحد ألننا لم نضع أقواس خلفھا أي إننا نقصد فقط السطر الذي يليھا ھو تابع لھا فتبقى
الخطوة رقم ) (٦وبما أنھا داخل قوسين الخطوة رقم ) (٢فھي تابعة لھا.
تحليل :من شاشة التنفيذ نر انه يعد ) (١ثم ) (١٢ثم ) (١٢٣ويستمر نرى أن تكوين رسم بھذا الشكل يستحيل دون
استخدام عبارات التكرار المتداخلة.فما نحتاجه ھنا ھو عبارة تكرارية خارجية تعد من ٢إلى ) ٦أي تعد خمس عدات
بقدر عدد األسطر تعد) ( (2,3,4,5,6وعبارة تكرارية داخلية تبدأ بالعد من الواحد وشرط توقفھا اقل من قيمة العداد
الخارجي لكل عدة مثال في العدة األولى تكون قيمة المتغير ) (i=2في العداد الخارجي سيعد العداد الداخلي من واحد
إلى اقل من ) (٢أي سيعد ) (1وفي العدة الثانية تكون قيمة المتغير ) (i=3في العداد الخارجي سيعد العداد الداخلي
من واحد إلى اقل من ) (٣أي سيعد ) (12ويستمر إلى نھاية .
.١خطوة رقم ) (١تم تعريف متغيرين للعدادات .وفي خطوة رقم ) (٢عداد خارجي يعد من ٢إلى ٦وتتبعه الخطوات
البرمجية رقم) ٣و٤و (٥ألنھا داخل قوسيه ففي كل عدة له تحدث ھذه الخطوات
.٢خطوة رقم ) (٣ھي عبارة تكرارية داخلية تبدأ بالعد من الواحد إلى اقل من قيمة العداد الخارجي أي إذا عد العداد
الخارجي ٢تعد ھذه العبارة التكرارية ) (1وإذا عد العداد الخارجي ٣تعد ھذه العبارة التكرارية ) (12وإذا عد العداد
الخارجي ٤تعد ھذه العبارة التكرارية ) (123وإذا عد العداد الخارجي ٥تعد ھذه العبارة التكرارية) (1234ويستمر
.٣خطوة رقم ) (٤تابعة للخطوة رقم ) (٣حتى تطبع قيم العداد وخطوة رقم ) (٥تابعة للخطوة رقم ) (٢حتى بعد كل
طباعة ينزل المؤشر إلى سطر جديد لكي يطبع العبارة الجديدة على سطر أخر .جرب احذفھا وشاھد ماذا سيحدث
تحليل:ھذا المثال سھل لو ركزت فيه انه يطبع نجمة وينزل سطر ثم يطبع فراغ ونجمة ثم ينزل سطر ثم فراغان
ونجمة وينزل سطر ثم ثالث فراغات ونجمة وينزل سطر ويستمر بزيادة عدد الفراغات .مقدما انه يحتاج إلى عدادان
حتى يكونا الشكل المطلوب العداد األول يعد من الواحد إلى الخمسة )ألنھا خمس نجمات( وأخر داخلي يعد من واحد
إلى اقل من العداد الخارجي ليوضع فراغات قبل النجمات
.١خطوة رقم ) (١تم تعريف متغيرين للعدادات األول اسم ) (starللنجمات وأخر اسمه ) (emptyلطباعة الفراغات
وفي خطوة رقم ) (٢عداد خارجي يعد من ١إلى ٥وتتبعه الخطوات البرمجية رقم ) ٣و٤و (٥ألنھا داخل قوسيه
ففي كل عدة له تحدث ھذه الخطوات
.٢خطوة رقم ) (٣ھي عبارة تكرارية داخلية تبدأ بالعد من الواحد إلى اقل من قيمة العداد الخارجي أي إذا عد العداد
الخارجي ) (١ال تعد ھذه العبارة التكرارية ألنھا ال يتحقق شرطھا وال تنفذ وخطوة رقم ) (٤التابعة لھا ال تنفذ أيضا
تنفذ الخطوة رقم ) (٥فقط ليطبع نجمة وينزل سطر .وإذا عد العداد الخارجي ٢تعد ھذه العبارة التكرارية ) (1وتنفذ
خطوة رقم) (٤مرة واحدة طابعة فراغ واحد ثم تنفذ خطوة رقم ) (٥طابعة نجمة وتنزل سطر .وإذا عد العداد
الخارجي ٢تعد ھذه العبارة التكرارية ) (1,2وتنفذ خطوة رقم ) (٤مرتان طابعة فراغان ثم تنفذ خطوة رقم )(٥
طابعة نجمة وتنزل سطر .وإذا عد العداد الخارجي ٣تعد ھذه العبارة التكرارية ) (1,2,3وتنفذ خطوة رقم)(٤
ثالث مرات طابعة ثالث فراغات ثم تنفذ خطوة رقم ) (٥طابعة نجمة وتنزل سطر ويستمر إلى النھاية.
المثال واضح فليس بحاجة إلى توضيح ووضعنا ھذه الشكل المطلوب في الرسم كمقدمة
للمصفوفات وطريقة تمثيلھا حيث ھذه النقاط مواقع في الذاكرة حيث أول موقع ھو )(0,0
ويستمر. .......
مثال :لو كان لدينا عبارة تكرارية تعد من ) (1—200ونريدھا عندما يصل العداد إلى) (75يخرج البرنامج من
العبارة التكرارية إليك ھذا المثال.
.٣خطوة رقم ) (٣ھو شرط للتوقف أي عندما تصبح قيمة العداد ھي ) (٧٥ينفذ الخطوة رقم ) (٤والتي تسبب
بالخروج من العبارة التكرارية واالنتقال إلى ما بعدھا وھي خطوة رقم ) (٦كما تالحظ في الرسم باألسھم.
مھم
.٤خطوة رقم ) (٥تتم طباعة قيمة العداد عند كل دورة وتالحظ أن العداد سوف ال يصل في عده إلى ) (٢٠٠إنما
يصل إلى ) (٧٤في الطباعة وينقطع ألنه خطوة رقم ) (٤تقطع تنفيذ الجمل البرمجية التي تليھا داخل العبارة
التكرارية عندما يصل العداد إلى ) (٧٥وشاھد شاشة التنفيذ.
.٥خطوة رقم ) (٦تطبع رسالة بعد الخروج من الجملة التكرارية وشاھدھا في شاشة التنفيذ باألسفل
مثال:برنامج إدخال الرقم السري ويستمر بطلب الرقم من المستخدم إلى أن يدخل الرقم الصحيح
شاشة التنفيذ
مثال :لو كان لدينا عبارة تكرارية تعد من ) (1—200ونريدھا عندما يصل العداد إلى ) (75بھمل الخطوات البرمجية
التي تليه داخل عبارة التكرار أي ال يطبع رقم ).(٧٥
.٢خطوة رقم ) (٢عداد يعد من ) (١إلى ) (٢٠٠ويكرر في داخله الخطوات رقم ) ٣و ٤و (٥
.٣خطوة رقم ) (٣ھوا تحقق من شرط متى أصبح رقم العداد ) (٧٥سينفذ خطوة رقم ) (٤و سيھمل الخطوات
البرمجية التي تليه سيھمل خطوة رقم ) (٥أي سوف ال يطبع رقم العداد عند ھذه العدة
.٤خطوة رقم ) (٥نطبع قيمة العداد عند كل عدة عدا عندما تكون قيمته ) (٧٥ألنه سيھمل ھذه الخطوة
لم يتم طباعة رقم ٧٥طبع رقم ٧٤وبعدھا طبع رقم ٧٦
ألنه عندما أصبح قيمة العداد ٧٥تحقق شرط خطوة )(٣
وھمل الخطوات التي تليه بما فيه خطوة الطباعة ھملت فلم
يطبع الرقم
نالحظ من الھيكلية انه إذا تحقق شرط معين )وحتى نستطيع أن نضعھا بدون شرط لتنفذ( سوف ينتقل التنفيذ البرنامج
(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;}
.١خطوة رقم ) (١تم تعريف متغير للعداد التي سيتم طباعة قيمته عند كل عدة
.٢خطوة رقم )(٢ھي نقطة تعرفھا جملة ) (gotoنكتبھا ھكذا حتى عندما نريد الرجوع لھا فقط نكتب ) (gotoإلى
النقطة التي نود الرجوع إليھا.وتسمية النقطة ممكن يكون أي اسم
.٥خطوة رقم ) (٥شرط التحقق يتحقق مادام قيمة العداد لم تصل إلى ) (١٥يرجع إلى النقطة التي في الخطوة رقم
) (٢وينفذ الخطوات بشكل متتالي
ھيكلية 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ھي الخطوات البرمجية التي ستنفذ عدد من المرات .إذا كانت عبارة عن خطوة برمجية •
مھم
واحدة فليس بحاجة لوضعھا داخل أقواس وإذا كانت أكثر من خطوة يجب وضعھا داخل أقواس.
أن المتغير يبدأ بقيمة بدائية ) (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++
}
.١خطوة رقم ) (١عرفنا متغير ) (iمن نوع .integerبما إننا نريد العد من الصفر فأعطينا القيم البدائية صفر
.٢خطوة رقم )(٢ھي عبارة تكرارية بما أن العد يصل إلى ٤معناه شرط التوقف أن يكون اقل من خمسة بما إننا
نريد أن يعد خمس عدات بين صفر واألربعة لذالك يجب أن يكون مقدار الزيادة واحد ليعد ). (0 ,1,2,3,4الن لو
جعلنا مقدار الزيادة ٢مثال فسيعد العداد ثالث مرات مرة ) (0,2,4لذالك يجب التركيز في ھذه المواضيع جيدا.
القيمة البدائية
مھم
للعداد )(i=0
شرط
التحقق)(i<5
طباعة القيمة
زيادة قيمة
العداد )(i++
خروج من
جملة التكرار
لو تالحظ المخطط الخاص بالبرنامج عندما يحقق الشرط يتجه لخطوة الطباعة وإذا لم يحقق يخرج من جملة تكرار
تحليل:حلھا نفس حل السؤال السابق فقط نقلب العداد أي نجعل قيمته البدائية ھي ٤وشرط التوقف اكبر أو يساوي
صفر ويتناقص بمقدار واحد كل عدة
.١خطوة رقم ) (١عرفنا متغير ) (iمن نوع integerفأعطيناه القيم البدائية أربعة
.٢خطوة رقم )(٢ھي عبارة تكرارية بما إننا نريد العد من األربعة فأعطينا القيم البدائية أربعة .والعد يصل إلى
الصفر معناه شرط التوقف أن يكون اكبر أو يساوي صفر ) ) ( while(i>=0بما إننا نريد أن يعد خمس عدات بين
صفر واألربعة لذالك يجب أن يكون مقدار نقصان واحد ليعد ). (4,3,2,1,0الن لو جعلنا مقدار النقصان ٢مثال
فسيعد العداد ثالث مرات مرة ) (4,2,0لذالك يجب التركيز في ھذه المواضيع جيدا
.٣خطوة رقم ) (٣طباعة قيمة عداد .وخطوة رقم ) (٤عداد النقصان يتناقص بمقدار واحد عند كل عدة
تنفذ خطوة رقم ) (١مرة واحدة فقط.وتنفذ خطوة رقم) (٣وخطوة رقم ) (٤خمس مرات بقدر عدات العداد
تحليل :نرى انه يريد اإلعداد الفردية فقط لذالك يجب أن نطفر اإلعداد الزوجية .نكون عداد يعد من الواحد وشرط
التوقف عند المائة ومقدار الزيادة في ) (٢حتى نجمع فقط اإلعداد الفردية
.٢خطوة رقم ) (٢عرفنا متغير ) (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ھي خمسين رقم وتنفذ خطوة رقم) (٦مرة واحدة
تحليل :بما انه يريد حساب المعدل من عشر درجات فيجب جمع ھذه الدرجات وقسمتھا على عشرة للحصول على
المعدل وبما انه يقول يدخلھا المستخدم وبما إنھن عشر درجات فيصعب إدخالھا كل واحد على حدة لذالك نستخدم
عبارة ) (whileالتكرارية تتكرر عشر مرات ونضع تحتھا جملة القراءة )حيث عند كل عدة للعبارة التكرارية يطلب
منك إدخال درجة ويجمع الدرجات المدخلة عند كل إدخال وناتج الجمع يقسم بعد اإلدخال على عشرة
.١خطوة رقم ) (١عرفنا متغير متغير حساب المعدل ومتغير إدخال الدرجات
.٢خطوة رقم ) (٢عرفنا متغير ) (sumمن نوع ) (integerوأعطيناه قيمة بدائية وھي صفر ألننا سنجمع والنضير
الجمعي ھو صفر وعرفنا المتغير ) (nليكون عداد للعبارة التكرارية وأعطينا قيمته االبتدائية صفر
.٣خطوة رقم ) (٣ھي جملة تكرارية مطلوب منھا تكرر الخطوة رقم )٤و ٥و (٦عشر مرات
.٤خطوة رقم ) (٤ھي دالة إدخال عند كل عدة للجملة التكرارية يطلب من المستخدم إدخال درجة جديدة
.٥خطوة رقم ) (٥يقوم بجمع الدرجات المدخلة عند كل إدخال يجمع الدرجة الجديدة مع ناتج جمع الدرجات السابقة
.٦خطوة رقم ) (٦ھو عداد الجملة التكرارية يزداد بمقدار واحد عند كل عدة.
.٧خطوة رقم ) (٧يقوم بحساب المعدل حيث يقسم ناتج جمع الدرجات المدخلة على عشرة
.٨خطوة رقم ) (٨٧يقوم بطباعة المعدل
ھيكلية 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
**تبقى المبادئ ثابتة كل عبارة تكرارية يتبعھا سطر برمجي واحد إذا لم نستخدم أقواس وإذا وضعنا أقواس كل الذي
داخل األقواس ھو تابع للعبارة التكرارية.
تحليل ):المثال نفسه موجود في عبارة ) (forالتكرارية المتداخلة ستجد تحليل بشكل مفصل(.
.١خطوة رقم ) (١تم تعريف متغيرين المتغير ) (iھو جدول ضرب الرقم )كان يكون جدول ضرب ثالثة مثال(
والمتغير ) (jھوا يضرب بالمتغير األول األرقام من واحد إلى العشرة
.٢خطوة رقم ) (٢ھي عبارة تكرارية تعد من ) (١إلى ) (١٠وفي كل عدة لھا تتكرر الخطوات رقم ) ٣إلى (٩
.٣خطوة رقم ) (٣ھي رسالة تظھر بداية كل جدول تبين للمستخدم انه ھذا الجدول ھو للرقم المعين وھي بضبط
الرسالة الموجودة في شاشة التنفيذ في األسفل ومؤشر عليھا ب )" جملة الطباعة الخطوة ) ("(٣وكما تالحظ أن في
كل عدة للعبارة التكرارية الخطوة رقم ) (٢تتكرر الخطوة رقم ) (٣مرة واحدة لتظھر بداية كل جدول
.٤خطوة رقم ) (٤ھي عملية وضع قيمة ابتدائية لل ) (whileالداخلية عند كل عدة لل ) (whileفي خطوة رقم )(٢
.٦خطوة رقم ) (٦ھي عملية طباعة كل قيمة من التي تعدھا العبارة التكرارية في الخطوة رقم ) (٢باألرقام من )(١
إلى ) (١٠التي تعدھا العبارة التكرارية في خطوة رقم ) (٥وھذه جملة الطباعة ھي تابعة لھذه العبارة التكرارية وما
تنتجه ھذه جملة الطباعة شاھده بالرسالة الموجودة في شاشة التنفيذ في األسفل ومؤشر عليھا ب )" جملة الطباعة
الخطوة )("(٥
.٨خطوة رقم ) (٨ھي عملية طباعة سطر جديد بعد كل جدول ضرب والحظھا ھي تابعة للعبارة التكرارية في
خطوة رقم) (٢وما تنتجه ھذه جملة الطباعة شاھده بالرسالة الموجودة في شاشة التنفيذ في األسفل ومؤشر عليھا ب
)" جملة الطباعة الخطوة )("(٦
مھم
كيف نعرف أن الخطوة رقم ) (٨ھي تابعه للخطوة رقم ) (٢وليس للخطوة رقم )..(٥؟
كما تالحظ أن خطوة رقم ) (٢تحصر بين قوسيھا خطوات رقم) ٣إلى (٩ونالحظ أن العبارة التكرارية في الخطوة
رقم ) (٥تتبعھا فقط خطوة رقم ) ٦و (٧فتبقى الخطوة رقم ) (٦خارج قوس العبارة التكرارية الداخلية وبما أنھا
داخل قوسين الخطوة رقم ) (٢فھي تابعة لھا.
) :(Initializingھي القيمة البداية المعطاة للمتغير التي منھا سيبدأ العد) .مثال (i=0 •
) :(Boolean_Expressionھو شرط التوقف الذي عندما تصبح قيمة المتغير غير محققة لشرط التوقف •
سوف يخرج من عبارة ) (whileبمعنى أخر مادام نتيجة اختباره ال ) (Boolean_Expressionھي
) (Trueالعبارة التكرارية تستمر بتنفيذ مابين قوسيھا ومتى ما أصبح ) (Falseيخرج من العبارة التكرارية.
مثال ) ((i<5ھوا شرط التوقف ويبدأ العد من الواحد
) :(Updateھي مقدار الزيادة أو النقصان في قيمة المتغير في كل دورة ) .(loopمثال ) ( i++أو )(i-- •
) :(statementھي الخطوات البرمجية التي ستنفذ عدد من المرات .إذا كانت عبارة عن خطوة برمجية •
مھم
واحدة فليس بحاجة لوضعھا داخل أقواس وإذا كانت أكثر من خطوة يجب وضعھا داخل أقواس.
أن المتغير يبدأ بقيمة بدائية ) (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
}
.١خطوة رقم ) (١عرفنا متغير ) (iمن نوع .integerبما إننا نريد العد من الصفر فأعطينا القيم البدائية صفر
.٢خطوة رقم ) (٢تمتد إلى خطوة رقم ) (٥ھي عبارة تكرارية بما أن العد يصل إلى ٤معناه شرط التوقف أن
يكون اقل من خمسة بما إننا نريد أن يعد خمس عدات بين صفر واألربعة لذالك يجب أن يكون مقدار الزيادة واحد
ليعد ). (0 ,1,2,3,4الن لو جعلنا مقدار الزيادة ٢مثال فسيعد العداد ثالث مرات مرة ) (0,2,4لذالك يجب التركيز
في ھذه المواضيع جيدا.
القيمة البدائية
مھم
للعداد )(i=0
طباعة القيمة
زيادة قيمة
العداد )(i++
شرط
التحقق)(i<5
خروج من
جملة التكرار
لو تالحظ المخطط الخاص بالبرنامج عندما يحقق الشرط يتجه لخطوة الطباعة وإذا لم يحقق يخرج من جملة تكرار
.٣خطوة رقم ) (٣ھي طباعة قيمة المتغير عند كل عدة .خطوة رقم ) (٤ھو عداد يزداد بمقدار واحد عند كل عدة
* قارن ھذا المثال بالمثال المشابه له ب) ( while , Forوشاھد الفرق .
عدد مرات تنفيذ الخطوات:تنفذ خطوة رقم ) (١مرة واحدة فقط.وتنفذ خطوة رقم) (٣وخطوة رقم ) (٤خمس مرات
تحليل:حلھا نفس حل السؤال السابق فقط نقلب العداد أي نجعل قيمته البدائية ھي ٤وشرط التوقف اكبر أو يساوي
صفر ويتناقص بمقدار واحد كل عدة
.١خطوة رقم ) (١عرفنا متغير ) (iمن نوع integerفأعطيناه القيم البدائية أربعة
.٢خطوة رقم )(٢ھي عبارة تكرارية بما إننا نريد العد من األربعة فأعطينا القيم البدائية أربعة .والعد يصل إلى
الصفر معناه شرط التوقف أن يكون اكبر أو يساوي صفر ) ) ( while(i>=0بما إننا نريد أن يعد خمس عدات بين
صفر واألربعة لذالك يجب أن يكون مقدار نقصان واحد ليعد ). (4,3,2,1,0الن لو جعلنا مقدار النقصان ٢مثال
فسيعد العداد ثالث مرات مرة ) (4,2,0لذالك يجب التركيز في ھذه المواضيع جيدا
.٣خطوة رقم ) (٣ھي طباعة قيمة المتغير عند كل عدة .خطوة رقم ) (٤ھو عداد ينقص بمقدار واحد عند كل عدة
تنفذ خطوة رقم ) (١مرة واحدة فقط.وتنفذ خطوة رقم) (٣وخطوة رقم ) (٤خمس مرات بقدر عدات العداد
تحليل :نرى انه يريد اإلعداد الفردية فقط لذالك يجب أن نطفر اإلعداد الزوجية .نكون عداد يعد من الواحد وشرط
التوقف عند المائة ومقدار الزيادة في ) (٢حتى نجمع فقط اإلعداد الفردية
.٢خطوة رقم ) (٢عرفنا متغير ) (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ھي خمسين رقم وتنفذ خطوة رقم) (٦مرة واحدة
ھيكلية 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
**تبقى المبادئ ثابتة كل عبارة تكرارية يتبعھا سطر برمجي واحد إذا لم نستخدم أقواس وإذا وضعنا أقواس كل الذي
داخل األقواس ھو تابع للعبارة التكرارية.
تحليل ):المثال نفسه موجود في عبارة ) (forالتكرارية المتداخلة ستجد تحليل بشكل مفصل(.
.١خطوة رقم ) (١تم تعريف متغيرين المتغير ) (iھو جدول ضرب الرقم )كان يكون جدول ضرب ثالثة مثال(
والمتغير ) (jھوا يضرب بالمتغير األول األرقام من واحد إلى العشرة
.٢خطوة رقم ) (٢ھي عبارة تكرارية تعد من ) (١إلى ) (١٠وفي كل عدة لھا تتكرر الخطوات رقم ) ٣إلى (٩
.٣خطوة رقم ) (٣ھي رسالة تظھر بداية كل جدول تبين للمستخدم انه ھذا الجدول ھو للرقم المعين وھي بضبط
الرسالة الموجودة في شاشة التنفيذ في األسفل ومؤشر عليھا ب )" جملة الطباعة الخطوة ) ("(٣وكما تالحظ أن في
كل عدة للعبارة التكرارية الخطوة رقم ) (٢تتكرر الخطوة رقم ) (٣مرة واحدة لتظھر بداية كل جدول
.٤خطوة رقم ) (٤ھي عملية وضع قيمة ابتدائية لل ) (do--whileالداخلية عند كل عدة لل ) (do-- whileفي
خطوة رقم )(٢
.٦خطوة رقم ) (٦ھي عملية طباعة كل قيمة من التي تعدھا العبارة التكرارية في الخطوة رقم ) (٢باألرقام من )(١
إلى ) (١٠التي تعدھا العبارة التكرارية في خطوة رقم ) (٥وھذه جملة الطباعة ھي تابعة لھذه العبارة التكرارية وما
تنتجه ھذه جملة الطباعة شاھده بالرسالة الموجودة في شاشة التنفيذ في األسفل ومؤشر عليھا ب )" جملة الطباعة
الخطوة )("(٥
.٨خطوة رقم ) (٨ھي عملية طباعة سطر جديد بعد كل جدول ضرب والحظھا ھي تابعة للعبارة التكرارية في
خطوة رقم) (٢وما تنتجه ھذه جملة الطباعة شاھده بالرسالة الموجودة في شاشة التنفيذ في األسفل ومؤشر عليھا ب
)" جملة الطباعة الخطوة )("(٦
مھم
كيف نعرف أن الخطوة رقم ) (٨ھي تابعه للخطوة رقم ) (٢وليس للخطوة رقم )..(٥؟
كما تالحظ أن خطوة رقم ) (٢تحصر بين قوسيھا خطوات رقم) ٣إلى (٩ونالحظ أن العبارة التكرارية في الخطوة
رقم ) (٥تتبعھا فقط خطوة رقم ) ٦و (٧فتبقى الخطوة رقم ) (٦خارج قوس العبارة التكرارية الداخلية وبما أنھا
داخل قوسين الخطوة رقم ) (٢فھي تابعة لھا.
كما قلنا أن االختالف بينھا وبينھم أن دالة ) (Do—Whileالتكرارية تنفذ مابين قوسيھا ثم يتحقق من الشرط فإذا
كان ناتج الشرط ) ( Trueتعيد تنفيذ مابين قوسيھا من جديد وإذا كان ) (Falseفتنتقل للخطوة التي تليه .أما
) (Forو ) (whileيتحقق من الشرط ثم تنفذ مابين قوسيھا كان ناتج الشرط ) ( Trueتنفذ مابين قوسيھا وإذا
كان ) (Falseفتنتقل للخطوة التي تليه.
لتوضيح الفكرة بھذا المثال.
مثال:برنامج يطلب منك أن تدخل رقم ويقدر الرقم يطبع عبارة )! (Helloأي لو أدخلت ) (٥سيطبع ھذه العبارة
خمسة مرات وإذا أدخلت واحد يطبعھا مرة واحدة.
تحليل :مادام عدد مرات الطباعة مرتبط بإدخال المستخدم فالحل يكون عبارة تكرارية تبدأ من الواحد إلى الرقم الذي
ادخله المستخدم وتحته جملة طباعة )أي إذا ادخل ٢سيعد العداد ) (1,2أي عدتان ويطبع الجملة مرتان(.
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++; }
}
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 ) ;
}
سوف يطبع ) (for,whileالجملة خمس مرات ألنه عداد يعد من ) (١إلى ) (٥وإذا تجاوز الرقم ) (٥ال يسمح له
بطباعة الجملة من جديد ويخرج من العبارة التكرارية
سوف يطبع ) (do--whileالجملة خمس مرات ألنه عداد يعد من ) (١إلى ) (٥وإذا تجاوز الرقم ) (٥ال يسمح له
بطباعة الجملة من جديد ويخرج من العبارة التكرارية
سوف ال يطبع ) (for,whileجملة الطباعة وال مرة ألنه عندما يتحقق من الشرط في خطوة رقم )(٣
وھو ) (i<= input_numbeوھو ھكذا) (1<=0=falseسوف ال يحقق الشرط العبارة الشرطية لذالك سوف ال ينفذ
الجملة التابعة لعبارة التكرار .وال يطبع جملة الطباعة التابعة لھا
سوف يطبع ) (do--whileالجملة مرة واحدة ألنه أوال ينفذ الخطوات)٣و٤و (٥بعد خطوة خامسة يتحقق من الشرط
ويجد انه الشرط ال يتحقق وال يعيد عبارة التكرار.وألكنه طبع الجملة في خطوة ) (٤قبل التحقق من الشرط
المستوى المطلوب
ٔان يكون القارئ ملما بما هو في الفصول السابقة وفاهما كل شيء
ٔ
االهداف:
عندما يكـتمل الفصل تكون بإذن ﷲ قد ٔاتممت التعرف علﻰ المصفوفات وطرق تمثيلها
ٔ
مستوى االداء المطلوب بعد إنهاء الفصل
إتقان هذه الفصل 100%
ٔ
االدوات المطلوبة:ﺣاﺴوب شخصي لتجربة البرامج وقلم ودفتر لتسجيل المالﺣظات
• ) (arrraynameھو اسم المصفوفة الذي سنتعامل معه في البرنامج أي اسم ممكن أن نسمي المصفوفة
• ) (size of arrayھوا حجم الذي ستشغله المصفوفة في الذاكرة وقد يكون أي رقم حسب احتياجك
• ) (Typeھو نوع المصفوفة التي سوف نعرفھا قد تكون حرفية أو رقمية .لو عرفنا مصفوفة من نوع
) (integerجميع عناصرھا تكون ) (integerوال يجوز تخزين أحرف في داخلھا
ھيكلية
int ;]first_array [5
لنفرض أن تخزين أول عنصر في المصفوفة بدء بموقع ) (18126ويكون شكل مواقع الذاكرة ھكذا
لو تالحظ أن أول عنصر للمصفوفة وھو )] (first_array [0يحجز الموقع ) (18126وتخزن فيه قيمة أول عنصر
ويليه بقية العناصر بالتتالي أي )] (first_array [1يحجز الموقع ) (18127وبالتتالي....؟
** عنونة عناصر المصفوفة تبدأ من الصفر كما تالحظ أول موقع بالمصفوفة ھو )](first_array [0
ھيكلية
]first_array [index
) (indexھو عنوان الموقع الذي نريد أن نصل إلى محتوياته في داخل المصفوفة لنعدل عليھا أو نطبعھا.
كود
;first_array [2]=79
لو تالحظ أن ) (index=2وليس ) (٣ألنه كما قلنا تسلسل عناصر المصفوفة يبدأ من الصفر وليس من الواحد أي
لو كان لدينا مصفوفة حجمھا خمسة عناصر فتسلسل ) (indexيكون من الصفر إلى األربعة .لذالك بعد أن وضعنا
رقم ) (79بالموقع الثالث يصبح شكل المصفوفة في مواقع الذاكرة ھكذا
كود
;first_array [3]=90
• لو أردنا طباعة محتويات الموقع الثالث
C++ الكود بلغة C الكود بلغة
;]cout<< first_array [2 ;)]Printf("%d", first_array [2
لو أردنا تعريف مصفوفة من نوع floatنفس طريقة مصفوفة السابقة وكذالك بقية األنواع تعرف بنفس الطريقة
ھيكلية
float ;]first_array [5
كود
int ;}first_array [5]={34,26,43,23,54
فيكون شكل المصفوفة في مقطع الذاكرة وھي مخزن فيھا العناصر ھكذا
إي أن العنصر األول في المصفوفة تكون قيمته ) (first_array [0]=34وبقية المواقع بالتسلسل كما في الشكل .
مثال :برنامج ندخل مصفوفة أحادية األبعاد مكونة من ستة عناصر من شاشة التنفيذ ونطبعھا.؟
.١خطوة رقم ) (١تم تعريف متغير للعداد وتم تعريف مصفوفة أرقام حجمھا ستة
.٢خطوة رقم ) (٢ھوا عداد يعد من صفر إلى خمسة وكل عدة يتم طلب في خطوة ) (٣إدخال عنصر جديد من
المصفوفة كما ھوا مبين في الشكل ،عندما يكون ) (i=0فان )] (first_arry[iمعناه )] (first_arry[0أي يطلب من
المستخدم إدخال العنصر األول ويستمر بطلب اإلدخال إلى أخر عنصر وھو )) (i=5كما ھو بالشكل باألسفل(
.٥خطوة رقم ) (٦عداد يعد من صفر إلى الخمسة ليطبع جميع عناصر المصفوفة في الخطوة رقم ) .(٦أي عندما
يعد العداد رقم صفر ستنفذ خطوة رقم ) (٦طابعة )] (first_arry[0تم عندما يعد العداد رقم واحد ستنفذ خطوة رقم
) (٦طابعة )] (first_arry[1تم عندما يعد العداد رقم اثنان ستنفذ خطوة رقم ) (٦طابعة )] (first_arry[2ويستمر
بطباعة جميع عناصر المصفوفة من محتويات أول موقع إلى محتويات أخر موقع .
مھم
لو غيرنا عداد خطوة رقم) (٥وجعلناه يتناقص من خمسة إلى الصفر سوف يطبع أوال )] (first_arry[5ثم
)] (first_arry[4ويستمر إلى الصفر طابعا المصفوفة بالمقلوب )من أخر عنصر إلى أول عنصر(
كود
)5.for (i=5;i>=0;i--
مھم
أبدال بين قيم موقعين :إلبدال بين قيمة موقعين في المصفوفة نحتاج إلى متغير ثالث من نفس نوع المصفوفة حتى
نخزن ب ِه نتيجة احد الموقعين ثم نبدل الن في حال عدم وجود متغير ثالث ال نستطيع اإلبدال وستضيع احد القيمتين
تحليل :خطوات اإلدخال ھي اعتيادية وتقريبا ثابتة في المصفوفات فمصفوفة حجمھا خمسة نحتاج عداد يعد من
الصفر إلى األربعة ثم بعد اإلدخال نجمع جميع عناصر المصفوفة مع بعضھا
توضيح الخطوات:
.١خطوة رقم ) (١تم تعريف متغير للعداد وتم تعريف مصفوفة أرقام حجمھا خمسة ومتغير للجمع وأعطيناه صفر
كقيمة ابتدائية كما قلنا سابقا يجب تصفير المتغير الجمع قبل الجمع
.٢خطوة رقم) ٢و (٣إدخال المصفوفة كما تالحظ العداد يعد من الصفر إلى األربعة الن حجم المصفوفة خمسة
.٣خطوة رقم ) (٤عداد يمر على عناصر المصفوفة عنصر عنصر لكي يجمعھا مع بعضھا أي عندما يكون قيمة
العداد ھي ) (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
تحليل :خطوات اإلدخال ھي اعتيادية وتقريبا ثابتة في المصفوفات فمصفوفة حجمھا سبعة نحتاج عداد يعد من الصفر
إلى ستة .ثم بعد اإلدخال نجد اكبر رقم بين عناصر المصفوفة كيف.؟ نسند قيمة أول عنصر في المصفوفة لمتغير
وثم نقارن قيمة ھذا المتغير مع بقية العناصر أي عنصر في المصفوفة نجد أن قيمته اكبر من قيمة متغيرنا نبدل قيمة
متغيرنا بقيمة عنصر المصفوفة ونستمر حتى النھاية وكل ما وجد متغيرنا قيمة أعلى منه أخذھا وإذا اقل منه التھمه
ويستمر إلى النھاية ويكون في التالي حامال أعلى قيمة.
جعلت الخطوات التي تنفذ ذو لون عميق والتي ال تنفذ ذات لون رفيع
.١خطوة رقم ) (١تم تعريف متغير للعداد وتم تعريف مصفوفة أرقام حجمھا سبعة ومتغير لخزن اكبر رقم وخطوة
رقم ) ٢و ( ٣ھي إدخال للمصفوفة
.٢خطوة رقم ) (٤سندنا قيمة أول موقع إلى متغير ) (maxحتى نقارنه مع بقية المواقع حتى أي قيمة تكون اكبر منه
في المقارنة نبدلھا بقيمة ) (maxحتى نحصل على اكبر قيمة.
.٣خطوة رقم )(٥عداد يمر على جميع عناصر المصفوفة لكي نقارن في خطوة رقم ) (٦عناصر المصفوفة بقيمة
المتغير ومتى ما كان احد عناصر المصفوفة قيمته اكبر نبدل قيمة ) (maxفي خطوة رقم ) (٧بالقيمة األكبر منه
لو تالحظ أن قيمة الموقع الخامس ھي اكبر قيمة من بين القيم )شاھد التوضيح وكيفية تغير قيمة )(max
مھم
لو أردنا إيجاد اصغر رقم في المصفوفة فقط نبدل الشرط في الخطوة رقم ) (٦إلى اصغر ھكذا
كود
) 6.if (array1[i] < max
وطريقة التتبع ھنا كلما يجد رقم في المصفوفة اصغر من قيمة المتغير يسند المتغير للقيمة األصغر
مھم
كود
;]array1[i]=2* array1[i
كأنما نقول قيمة العنصر الجديد تساوي قيمته القديمة مضروبة في )(٢
كود
;array1[i]= array1[i] /4
وال توضع فقط ھذه الجملة وحدھا يجب وضع قبلھا عداد يمر على جميع عناصر المصفوفة لكي يقسم جميع العناصر
عنصر عنصر لو تالحظ خطوة رقم ) (٢وخطوة رقم ) (٣في المثال التالي.
مثال :مصفوفة من خمسة عناصر إضافة قيمة خمسة لكل عنصر في المصفوفة
توضيح الخطوات:
.١خطوة رقم ) (٣نضيف فيھا قيمة خمسة لكل عنصر من عناصر المصفوفة
.٢وضعنا خطوة رقم ) (٤داخل قوس العبارة التكرارية حتى يطبع مباشرة قيمة كل موقع بعد اإلضافة .
لنفرض أن لدينا مصفوفة من خمسة عناصر ونريد ترتيبھا تصاعديا وكانت القيم المخزنة بالمصفوفة كما في الشكل
]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
6 42 45 85 64
قيمة الموقع الخامس اقل من قيمة الموقع الرابع لذال سنبدل بينھما وستصبح المصفوفة مرتبة بشكل التالي
]array[0 ]array[1 ]array[2 ]array[3 ]array[4
6 42 45 64 85
تحليل:كيف نرتب برمجيا؟علمنا انه بالترتيب نقارن كل موقع بجميع المواقع التي تليه لذالك سنحتاج إلى عدادان
األول خاص بالمرور على كل موقع مرة واحدة وعداد داخلي يقارن كل عنصر مرة عليه العداد الخارجي بجميع
العناصر التي تليه في المصفوفة وأينما وجد رقم اقل منه يبدل بينھما.
توضيح الخطوات:
.١خطوة رقم ) (١عرفنا مصفوفة حجمھا خمسة ومتغير للعداد الخارجي ) (iومتغير أخر للعداد الداخلي )(j
.٢خطوة رقم ) (٢عرفنا متغير لتخزين قيمة احد المتغيرين عند اإلبدال لكي ال تضيع قيمة احدھما
.٣خطوة رقم ) (٣ھي رسالة طباعيه تطلب من المستخدم إدخال المصفوفة وخطوة رقم ) ٤و (٥قراءة المصفوفة
.٤خطوة رقم ) (٦ھوا عداد خارجي يبدأ بالعد من الصفر إلى الموقع القبل األخير لكي يرتبھم وال يعد الموقع األخير
الن الموقع األخير مرتب أصال من قبل الخطوة التي تسبقه لذالك نرى شرط التوقف في العداد ھو).(i<5-1
أي في كل عدة لھذا العداد تتكرر الخطوات رقم ) ٧و٨و٩و١٠و(١١
.٥خطوة رقم ) (٧ھوا عداد يبدأ بالعد من قيمة العداد الخارجي إلى أربعة أي إذا عد العداد الخارجي صفر سيعد
العداد الداخلي من صفر إلى أربعة لكي يقارن الموقع األول بجميع المواقع التي تليه .وإذا عد العداد الخارجي واحد
سيعد العداد الداخلي من واحد إلى أربعة لكي يقارن المواقع الثاني بجميع المواقع التي تليه ويستمر إلى موقع الرابع
.٦خطوة رقم ) (٨ھوا شرط أذا كان قيمة العنصر اقل من قيمة احد المواقع التي تليه يبدل بينھم في خطوة
رقم ) ٩و١٠و(١١
مھم
لو أردنا ترتيب المصفوفة تنازليا نفس الطريقة فقط نبدل الشرط في خطوة رقم ) (٨إلى
كود
)]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
تحليل:لكي نعرف ھل الرقم متناظر ھنا في مصفوفة خماسية يجب أن يساوي محتويات الموقع األول محتويات الموقع
الخامس والثاني يساوي الرابع )المثال التالي ليس يتحقق فقط من تناظر األرقام بل الحروف أيضا(
توضيح الخطوات:
.١خطوة رقم ) (٣ھي دالة إلدخال حرف وليس رقم ورغم أنھما ستدخل بشكل حرف ومداخالتنا قد تكون أرقام فال
يھم ففي المقارنة فبدال ما يقارن الرقم ) (١يقارن االسكي كود له أي ) (٥٠فال يضر لكن للجمالية استخدمنا ھذه الدالة
.٢خطوة رقم ) (٥يقارن العناصر األول باألخر والثاني بالقبل األخير وھكذا ماداما متساويين يكون المتغير )(bol=0
فإذا كانا غير متساويين ويتحقق شرط خطوة رقم ) (٥وينفذ خطوة ) (٦ستتحول قيمته إلى واحد
.٣خطوة رقم ) (٧يتحقق من قيمة المتغير ) (bolإذا بقت ثابتة حسب تعريفھا طبع رسالة إن الرقم متناظر وإذا
تغيرت إلى واحد يطبع رسالة أن الرقم غير متناظر
تحليل :الموضوع بسيط جدا ليدك ثالث مصفوفات نفس الحجم أو باألحرى نفس حجم المصفوفة ) (aألنھا قد تكون
جميع اإلعداد فردية أو زوجية.وبعد أن ندخل المصفوفة ) (aنكون شرط إذا كان عددھا فردي نضعه في ) (cوإذا
كلن زوجي نضعھا في ) (bولكل مصفوفة عداد خاص بھا.
توضيح الخطوات:
.١خطوة رقم ) (١عرفنا عداد للمصفوفة ) (aوھو ) (count_aو عداد للمصفوفة ) (bوھو ) (count_bو عداد
للمصفوفة ) (cوھو ) (count_cوعرفنا المصفوفات بنفس األحجام
.٣خطوة رقم ) (٤ھوا عداد الختبار عناصر المصفوفة ) (aتتبعه الخطوات رقم ) (5—11كلھا داخله التكرار
.٤خطوة رقم ) (٥ھوا شرط التحقق إذا كان رقم المصفوفة زوجية سيوضع في مصفوفة ) (bفي خطوة رقم )(٦
ونزود عداد ھذه المصفوفة في خطوة رقم )) (٧لكل مصفوفة عدادھا لكي نميز بينھم باإلضافة حتى تكون اإلضافة
صحيحة(
.٥خطوة رقم ) (٨ھوا شرط التحقق إذا لم يكون رقم المصفوفة زوجي سيوضع في مصفوفة ) (cفي خطوة رقم
) (9ونزيد عداد ھذه المصفوفة في خطوة رقم )) (10لكل مصفوفة عدادھا لكي نميز بينھم باإلضافة حتى تكون
اإلضافة صحيحة(
.٦خطوة رقم ) (١٢ھو عداد يبدأ بالصفر وينتھي بأقل من عداد المصفوفة ) (bلكي نطبع فقط المواقع التي تحتوي
على عناصر في ھذه المصفوفة والنطبع المواقع الفارغة اعتمادا على عدادھا الذي يزداد بعد كل إضافة في خطوة
رقم )(7
.٧خطوة رقم ) (١٥ھو عداد يبدأ بالصفر وينتھي بأقل من عداد المصفوفة ) (cلكي نطبع فقط المواقع التي تحتوي
على عناصر في ھذه المصفوفة والنطبع المواقع الفارغة اعتمادا على عدادھا الذي يزداد بعد كل إضافة في خطوة
رقم )(١٠
مھم
من أالن فصاعدا متى ما قال لك قسم عناصر مصفوفة إلى مصفوفتين استخدم نفس ھذا األسلوب فقط الشرط في
خطوة رقم خمسة يتغير أو تغير أخر بسيط لكن تبقى الھيكلية تقريبا نفسھا!........
العنونة تكون )رقم العمود ،رقم الصف( وان العنونة األعمدة والصفوف تبدأ من الصفر وليس من الواحد أي لو أردنا
الوصول إلى عنصر في الصف الثاني العمود األول تكون عنونه ).(1,0
والمصفوفة الثنائية أيضا مجموعة خاليا متتالية في الذاكرة تحجز لغرض خزن معلومات معينة في داخلھا كأن نخزن
في داخلھا أرقام أو أحرف وتبقى ھذه القيم مخزنة داخل المصفوفة حتى نغلق البرنامج إذا لم نغيرھا داخل البرنامج.
المصفوفات الثنائية :يجب اإلعالن عن عدد المواقع التي نحتاجھا في العمل في بداية البرنامج حتى يحجزھا المترجم
للمصفوفة وال يخزن قيم أخرى داخل ھذه المواقع تبقى محجوزة فقط لعناصر المصفوفة ويكون اإلعالن عليھا ھكذا
ھيكلية
]Trype of array arrrayname[row,columns
ھيكلية
int ;]first_array [3][2
كما تالحظ في العنونة كيف تكون :عمود رقم ) (0وھو العمود األول وعمود رقم ) (1وھو العمود الثاني
وصف رقم ) (0وھو الصف األول و صف رقم ) (1وھو الصف الثاني و صف رقم ) (2وھو الصف الثالث.
لنفرض أن تخزين أول عنصر في المصفوفة بدء بموقع ) (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ألنه كما قلنا تسلسل صفوف المصفوفة تبدأ من الصفر وليس من
الواحد أي العمود األول في الحقيقة ھوا عمود رقم صفر في البرمجة والحظ المخطط في الصفحة السابقة
لو أردنا تعريف مصفوفة من نوع floatنفس طريقة مصفوفة السابقة وكذالك بقية األنواع
ھيكلية
float ;]first_array [5][3
نستطيع أعطاء عناصر المصفوفة قيم وقت التعريف ھكذا
ھيكلية
int ;} }first_array [2][2]={{34,26},{43,23
فيكون شكل المصفوفة في مقطع الذاكرة وھي مخزن فيھا العناصر ھكذا
لو أردنا وضع رقم معين في جميع مواقع عناصر المصفوفة وقت التعريف نكتب ھكذا
مثال إذا أردنا وضع رقم صفر في جميع مواقع مصفوفة حجمھا )(٢*٢
ھيكلية
int ;} first_array [2][2]={0
مھم
تعريف وإدخال المصفوفة الثنائية:ھذه الخطوات ثابتة في تعريف وإدخال أي مصفوفة ثنائية ال تتغير ابد
مثال :مصفوفة حجمھا ) (4*3تعريفھا وإدخالھا
الذي يتغير بين سؤال وأخر فقط المكتوب بخط عريض .
.١في خطوة رقم ) (١عرفنا نوع المصفوفة ممكن أن يتبدل نوعھا حسب الطلب وحجمھا حسب السؤال قال في
السؤال ) (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فيكون الشرط ھو ثابت في كل مصفوفة نريد إيجاد قطر الرئيسي.
الذي يميز عناصر القطر الثانوي عن غيرھا من العناصر في المصفوفة أن قيمة الصف عند جمعھا بقيمة العمود
تساوي أربعة الحظ ) (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
الذي يميز عناصر تحت القطر الرئيسي عن غيرھا من العناصر في المصفوفة أن قيمة كل العمود اقل من قيمة كل
الصف الحظ التالي )) (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
البرمجة
)If(i+j>4
ما يميز عناصر العمود األول عن غيره من األعمدة أن قيمة ) (j=0ما يميز عناصر العمود الرابع عن غيره من
األعمدة أن قيمة) (j=3فشرط الحصول عليھما وھو ثابت
البرمجة
))If((j==0)||(j==3
ما يميز عناصر الصف األول عن غيره من الصفوف أن قيمة ) (i=0وما يميز عناصر الصف الثالث عن غيره من
الصفوف أن قيمة ) (i=2و ما يميز عناصر الصف الرابع عن غيره من الصفوف أن قيمة ) (i=3فشرط الحصول
عليھما وھو ثابت
البرمجة
))If((i==0)||(i==2) ||(i==3
تحليل :نعلم أن شرط الحصول على عناصر القطر الرئيسي في أي مصفوفة ھو ثابت وھو ) (i==jوللكثير من
المعلومات راجع المخطط السابق عن الحصول على القطر الرئيسي
توضيح الخطوات:
.١خطوة رقم ) ٣و٤و٥و (٦ھي تعريف وإدخال المصفوفة وھي ثابتة في كل برنامج ندخل فيه مصفوفة حسب حجم
المصفوفة فقط تتغير قيم توقف العدادان كما قلنا سابقا
.٢خطوة رقم) ٧و (٨عدادان يمران على جميع عناصر المصفوفة بالتسلسل صف صف لكي نتحقق من الشرط فأي
رقم يقع في القطر الرئيسي سيكون عندھا قيمة العدادان ) (i==jلذالك سيحقق الشرط في الخطوة رقم ) (٩ويطبع
الرقم في الخطوة رقم )(١٠
كما في الشكل
معلومة
*جميع األمثلة التي حليناھا في المصفوفات األحادية نستطيع استخدامھا في المصفوفات الثنائية فقط نبدل البعد الواحد
إلى بعدين والعداد إلى عدادين
*لو أردنا ضرب جميع عناصر المصفوفة برقم معين مثال ) (٢نضرب ھكذا
البرمجة
;]a[i][j]=2*a[i][j
وكذالك بقية العمليات جمع عنصر مع كل عناصر المصفوفة أو ضربه
ال تنسى أن تضع عداد للصفوف وعداد ألعمدة المصفوفة قبل ھذه الخطوة ليضر عنصر عنصر
تحليل:ارجع إلى خطوات التحليل السابقة وستفھم الشروط المراد إيجادھا وطريقة تحليلھا ورسم المصفوفة .
توضيح الخطوات:
.١خطوة رقم ) ٣و٤و٥و (٦ھي تعريف وإدخال المصفوفة وھي ثابتة في كل برنامج ندخل فيه مصفوفة حسب الحجم
.٢خطوة رقم) ٧و( ٨عدادان يمران على جميع عناصر المصفوفة بالتسلسل صف صف لكي نتحقق من الشروط
.٣خطوة رقم ) (٩ھو شرط لجمع العناصر فوق القطر الرئيسي أي أذا جاء أي عنصر ضمن عناصر فوق القطر
الرئيسي سينفذ الخطوة رقم ) (١٠لكي يجمعه ببقية عناصر فوق القطر الرئيسي
.٤خطوة رقم ) (١١ھو شرط لجمع العناصر تحت القطر الرئيسي أي إذا جاء أي عنصر ضمن عناصر تحت القطر
الرئيسي سينفذ الخطوة رقم ) (١٢لكي يجمعه ببقية عناصر تحت القطر الرئيسي
.٥خطوة رقم ) (١٣ھو شرط لجمع العناصر فوق القطر الثانوي أي إذا جاء أي عنصر ضمن عناصر فوق القطر
الثانوي سينفذ الخطوة رقم ) (١٤لكي يجمعه ببقية عناصر فوق القطر الثانوي
.٦خطوة رقم ) (١٥ھو شرط لجمع العناصر تحت القطر الثانوي أي إذا جاء أي عنصر ضمن عناصر تحت القطر
الثانوي سينفذ الخطوة رقم ) (١٦لكي يجمعه ببقية عناصر تحت القطر الثانوي
كما نالحظ كن الرسم أننا نريد أن نضع قيمة واحد في الصف األول والصف الرابع والعمود األول والعمود الرابع
والمواقع خالفھما نضع فيھا صفر.وان ما يميز الصف األول عن باقي الصفوف أن قيمة ) (i=0وما يميز الصف الرابع عن بقية
الصفوف أن قيمة ) (i=3وان ما يميز العمود األول عن باقي األعمدة أن قيمة ) (j=0وما يميز العمود الرابع عن بقية األعمدة أن قيمة
) (j=3وسيكون لذالك الشرط يجمع بين ھذه الشروط األربعة كما في البرنامج
توضيح الخطوات:
خطوة رقم ) (٢عرفنا مصفوفة حجمھا ) (٤*٤وخزنا صفر في جميع مواقعھا .١
خطوة رقم) ٣و (٤عداد يمر على جميع عناصر المصفوفة صف صف .٢
خطوة رقم) (٥ھو شرط اختيار إذا كان الصف األول أو الصف الرابع أو العمود األول أو العمود الرابع .٣
سوف ينفذ خطوة رقم ) (٦ليضع واحد بد الصفر في الموقع
خطوة رقم ) (٧طبع محتويات المصفوفة .٤
خطوة رقم ) (٨وھي خطوة النزول إلى سطر جديد بعد طباعة صف كامل حتى يكون شكل المصفوفة .٥
المطبوعة بالشكل المطلوب ومطابقة لھيكلية المصفوفات الثنائية ولكي تتأكد من موقعھا قبل أن تغلق قوس
العبارة التكرارية الخاصة بالعداد ) (iضعھا في كل برنامج
+
ھذا الشكل يمثل جمع الموقع األول والمواقع البقية نفس الشيء الثاني مع الثاني وبالتتابع
.١خطوة رقم ) ٦و ٧و (٨ھي عملية إدخال للمصفوفة األولى .خطوة رقم) ١٠و١١و (١٢إدخال المصفوفة الثانية
.٢خطوة خطوة رقم) ١٣و (١٤ھوا عدادا يمر على جميع عناصر المصفوفة صف صف ليجمع في خطوة رقم)(١٥
العنصر األول في المصفوفة األولى مع العنصر األول بالمصفوفة الثانية والثاني بالثاني بالتتابع
عملية طرح مصفوفتين نفس الخطوات السابقة فقط نبدل خطوة ) (١٥بالتالي
البرمجة
;]15.c[i][j]=a[i][j]-b[i][j
تحليل:لضرب مصفوفتين ) (3*2) *(2*4يجب أن يكون الناتج مصفوفة بحجم ) (3*4حسب قواعد الضرب
*
+
بھذا الشكل حصلنا على أول قيمة وكذالك البقية
*
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
.٢خطوة رقم) ٩و (١٠عدادان يمران على جميع عناصر المصفوفة لكي يقارن كل عنصر بجميع العناصر التي تليه
بواسطة العدادان في الخطوة )١١و(١٢
.٣خطوة رقم) ١٣و١٤و١٥و (١٦ھي عملية أبدال بين موقعين شرحت سابقا في المصفوفة األحادية
مھم
توضيح الخطوات:
ماذا سيحصل في خطوة رقم)...(9—15؟
كيف رتبنا صفوف المصفوفة؟نجد انه يقوم بمقارنة عناصر الصف الواحد يبعضھا وترتيبھا حيث أن المتغير )( k
ينتقل في كل لوب إلى صف جديد بعد أن ينتھي من ترتيب الصف الذي يسبقه وفي المقارنة خطوة رقم) (١٢نثبت
الصف بين المصدر والمسار الترتيبي وننقل العداد الخارجي) ( iفي كل لوب إلى عمود جديد ضمن الصف الواحد
ويعمل العداد الداخلي )(jعلى مقارنة ھذا العصر الذي يؤشر عليه ) ( iفي الصف الواحد بكل العناصر في األعمدة
التي تليه في نفس الصف فإذا وجد فيھا اصغر منه يبدله
أتمنى أن تكون قد استوعبت الفكرة )ابومشاري(
مھم
توضيح الخطوات:
ماذا سيحصل في خطوة رقم)...(9—15؟
كيف رتبنا أعمدة المصفوفة؟نجد انه يقوم بمقارنة عناصر العمود الواحد يبعضھا وترتيبھا حيث أن المتغير )( k
ينتقل في كل لوب إلى عمود جديد بعد أن ينتھي من ترتيب العمود الذي يسبقه .وفي المقارنة خطوة رقم) (١٢نثبت
العمود بين المصدر والمسار الترتيبي وننقل العداد الخارجي) ( iفي كل لوب إلى صف جديد ضمن العمود الواحد
ويعمل العداد الداخلي ) (jعلى مقارنة ھذا العنصر الذي يؤشر عليه ) ( iفي العمود الواحد بكل العناصر في الصفوف
التي تليه في نفس العمود الذي عليه المؤشر فإذا وجد فيھا اصغر منه يبدله
*لو أردنا ترتيب تصاعدي فقط نبدل عالمة األصغر في شرط المقارنة إلى اكبر
ھيكلية تعريف
;"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من قبل المستخدم .عبارات اإلدخال االعتيادية تكون غير كافية إلدخالھا أو غير مالئمة
لدرجة .100%على سبيل المثال دالة اإلدخال االعتيادية ونحاول إدخال ) (stringبھا ماذا سيحدث
الفراغ األول
سوف يأخذ الجملة المدخلة لكن ليس كلھا يأخذھا حتى أول فراغ باإلدخال أي لو أدخلنا
Hussien Ahmmed Taleb
لذالك سوف يأخذ المدخالت فقط كلمة ) (Hussienوبھمل من الفراغ األول إلى النھاية
مھم
إذا أدخلنا عدة كلمات فما الذي سوف يحدث للذي مھلته دالة اإلدخال األولى..؟
الذي مھلته دالة اإلدخال األولى لن يذھب سدى إنھما يبقى ينتظر عملية إدخال ثانية ليكون ھو كمدخل لھا) أي في
عملية اإلدخال الثانية سوف ال يطلب من المستخدم إدخال ھو يعتبر ما تبقى من دالة اإلدخال األولى كمدخل لدالة
اإلدخال الثانية( أي لو رجعنا إلى المثال السابق ووضعنا دالة إدخال أخرى وأدخلنا نفس الجملة كما في المثال
) (getsتستخدم ھذه الدالة في لغة ) (cإلدخال جملة كاملة فقط نكتبھا ونكتب اسم) (stringالتي نريد أن ندخلھا بھا
دالة اإلدخال بلغة C++
]Char string1[25
)gets(string1
دوال اإلخراج في لغة ) (c++نستخدم نفس دالة اإلخراج االعتيادية تكتب اسم ) (stringوستطبع سلسلة كاملة
دوال اإلخراج في لغة ) (cنستخدم نفس دالة اإلخراج االعتيادية ونستخدم في دالة الطباعة الرمز) (%sواسم
) (stringوستطبع سلسلة كاملة في شاشة التنفيذ
*ال نستخدم " %cالن " "%cتطبع حرف واحد فقط وليس جملة
لنصحح المثال السابق الذي كانت به مشكلة بدوال اإلدخال باستخدام ھذه الدوال الجديدة )افحص المثال وشاھد الفرق(
ھيكلية الدالة
)strlen(string
البرمجة
;"char string1[5]="alxs go
;int len
len=strlen(string1); // len=7
يكون طول المصفوفة ) (٧الن حتى الفراغ أيضا يعتبر كحرف في حساب الطول السلسلة
تحليل:لطباعة أي مصفوفة بالمقلوب)أي أخر حرف يطبع أول حرف( يكون بوضع المؤشر على أخر حرف ثم
نتنازل إلى أول حرف بالتسلسل فتتم الطباعة ونستطيع معرفة أخر حرف بواسطة دالة معرفة طول السلسة سيعطيك
طولھا ونطرح من طولھا واحد نجد أخر رقم بالمصفوفة الن ترقيم المصفوفة يبدأ من الصفر
* ولو تالحظ في الطباعة بلغة) (cاستخدمنا " "%cألننا سنطبع حرف حرف وليس سلسلة
ھيكلية الدالة
;)strcpy(string1, string2
مثال :لنسخ جميع محتويات مصفوفة إلى مصفوفة أخرى
البرمجة
;" char string1[5]="alxs
;" char string2[5]="me
;)strcpy(string1, string2
]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
ھيكلية الدالة
;)strcat(string1, string2
البرمجة
;" char string1[7]="alxs
;" char string2[5]="me
;)strcat(string1, string2
لو تالحظ أن ) (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
ھيكلية الدالة
;)strcmp(string1, string2
البرمجة
;" char string1[7]="aa
;" char string2[5]="ab
;int cmper
cmper=strcmp(string1, string2) ; //cmper<1
كانت نتيجة المتغير ) (cmperسالبة الن ) (String1اصغر من )(String2
ھيكلية الدالة
;)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
( وبعدھا نضع شرط بسيط للتحقق إذا كانstring)بما انه قال سلسلة حروف نستخدم دوال اإلدخال الخاصة ب:تحليل
(a) ( ونزيد عداد في كل مرة يجد فيھا حرفa) احد الحروف ھو
؟. برنامج ندخل سلسلة حرف ويحسب عدد مرات ظھور أحرف العلة وطباعتھا أينما وجدت في السلسلة:مثال
فكرة ھذا السؤال نفس فكرة السؤال السابق فقط الذي يغير شرط التحقق فبدال من أن يتحقق من حرف واحد:تحليل
سيتحقق من خمس حرف وأينما وجدھا يطبعھا
( يتحقق متى ما جاء أي حرف من حروف العلة الخمسة يطبعه في٦) الشرط في خطوة رقم:توضيح الخطوات
.(٨)( ويزيد قيمة عداد عدد مرات ظھور أحرف العلة في خطوة رقم٧) خطوة رقم
طريقة التعريف )على سبيل المثال مصفوفة حرفية ثنائية حجمھا )( (3*3
ھيكلية الدالة
; ]char first_arraychar [3][3
وطريقة اإلدخال أيضا ثابتة فقط العدادات تتغير حسب حجم المصفوفة وھي
وطريقة الطباعة أيضا ثابتة فقط العدادات تتغير حسب حجم المصفوفة وھي
** يضأ يجب رسم المصفوفة قبل البدء بالحل بأي سؤال
تحليل:نفس طريقة الحل السابقة فقط نغير السلسلة إلى مصفوفة ثنائية الحجم
توضيح الخطوات:
.١خطوة رقم ) (٤تم تعريف مصفوفة خزنا فيھا جميع أحرف العلة
.٢خطوة رقم ) (٩ھو عداد للمصفوفة التي تحوي أحرف العلة حيث يعمل ھذا العداد على مقارنة كل عنصر في
مصفوفة ) (vowelمع جميع العناصر المخزونة في المصفوفة المدخلة ) (aفكلما يجد حرف علة يتحقق الشرط
بخطوة رقم) (١٢لكي ينفذ خطوة رقم ) (١٣ويزيد قيمة العداد بواحد داال على إضافة حرف علة
المستوى المطلوب
ٔان يكون القارئ ملما بما هو في الفصول السابقة وفاهما كل شيء
ٔ
االهداف:
عندما يكـتمل الفصل تكون بإذن ﷲ قد ٔاتممت التعرف علﻰ الدوال وفوائدها
ھدف السجالت ھوا تبسيط كتابة التعاريف مثال لو كان لشخص واحد طول وعمر واسم انظر
الفرق ٔ
مستوى االداء المطلوب بعد إنهاء الفصل
بدون سجل
إتقان هذه الفصل 100%
;Int length
;Int age
;]Chat name[25
ٔ
االدوات المطلوبة:ﺣاﺴوب شخصي لتجربة البرامج وقلم ودفتر لتسجيل المالﺣظات
على سبيل المثال إذا أردنا قيمة خمسة مرفوع إلى قوى ثالثة) (5^3فبدون دالة ) (powنجده ھكذا
.١احدھا تعيد بعد استدعائھا وتكون بشكل التالي عند استدعائھا ويجب أن تحتوي على) (returnلتعيد قيمة للبرنامج
كود
;)1. reslt =name(var1,var2,…..
وبما أنھا تعيد قيمة يجب خزن القيمة المعادة في متغير بنفس نوع المصفوفة ا ي لو كان نوع المصفوفة ھو
) (integerيجب أن يتم تعريف ) (resltعلى انه متغير من نوع ) (integerلتخزن به النتيجة القيمة المرجعة
كود
;)name(var1,var2,…..
• ) :(nameھو اسم الدالة ) (functionويمكن أن يكون أي اسم لكن للوضوح اجعل اسم الدالة داال على
عمل دالتك فلو بنيت دالة تجمع رقميين فسمي الدالة ) (additionحتى تكون واضحة.
• ):(parameterھي متغيرات يتم إرسال قيم إلى الدالة لنمثلھا داخل الدالة لغرض تنفيذ العرض المطلوب
وتقوم الدالة باستقبال المتغيرات المرسلة حسب الترتيب .وكل متغير داخل الدالة يجب تعريفه مثال.
كود
;}Int disp(parameter1, parameter2,……) { statement
كما تالحظ في االستدعاء كان بالتسلسل أسندت قيمة)(parameter2= var2, parameter1= var1
تسلسل تنفيذ البرنامج يبدأ خطوة خطوة لكن الحظ عن وصول إلى الخطوة رقم ) (٥تم استدعاء دالة لذالك سينقل تنفيذ
البرنامج لھا لكي ينفذ الخطوات رقم) (6—8التي في داخلھا ثم يعود إلى البرنامج حتى ينفذ خطوة رقم )٩و١٠و(١١
• ): (Statementھي العملية المراد من الدالة تنفيذھا عند استدعائھا.
مھم
.١المتغيرات المعرفة داخل الدوال تنتھي حياتھا بانتھاء تنفيذ أخر سطر في الدالة .أي لو كان متغير) (iفي الدالة
أصبحت قيمته ) (i=5عند انتھاء تنفيذ الدالة فعند استدعاء الدالة مرة أخرى ال تكون قيمته خمسة الن حياته انتھت
بانتھاء االستدعاء السابق وعاد إلى قيمته األولية قبل التغير!.........
.٢وتكتب الدالة بعد التصريح عن المكتبات مباشرة
.٣الدالة التي تتم كتابتھا تعامل داخل البرنامج حالھا كحال أي دالة من دوال اللغة
.١خطوة رقم ) (١ھي تعريف دالة لجمع متغيرين وتعيد قيمة من نوع )(integer
.٢خطوة رقم ) (٢عرفنا متغير جديد وخطوة رقم) (٣جمعنا المتغيرين اللذان تم إرسالھما
مھم
.٣خطوة رقم ) (٤تم إعادة ھذه القيمة إلى المصفوفة
.٤خطوة رقم ) (٦تم تعريف متغير باسم ) (resltلكي يجمل نتيجة الجمع وھناك متغير داخل الدالة)(addition
بنفس االسم لكن ال يؤثر عليه الن المتغيرات داخل الدالة تكون غير معرفة للمتغيرات داخل البرنامج وكذالك
المتغيرات داخل البرنامج تكون غير معرفة للمتغيرات داخل الدالة
كود
)Int addition(int a,int b
لكي ينفذ خطوة رقم) (1—4جامعا ً الرقمين
)Reslt= addition (3, 7
الذان تم ارسالھما للدالة في خطوة رقم )(٣
.٦خطوة رقم) (٨تم طباعة ناتج الجمع وھو عشرة ) في لغة Cاستخدما " "%dال القيمة المعادة ھي (integer
.٧خطوة رقم) (٩تم استدعاء دالة الجمع مرة أخرى وإعطاء قيمة) (a=2,b=3ھكذا ويطبع ناتج الجمع في الخطوة
رقم) (١٠وناتج الجمع ھو خمسة
كود
;}name(parameter1, parameter2,……) { statement
.١خطوة رقم) (١ھي دالة ال تستقبل أي متغير وال تعيد أي متغير لذلك تكتب ھكذا
.٢خطوة رقم) (٢ھي الرسالة التي سيتم طباعتھا عند استدعاء الدالة
تحليل:بما أنھا تطبع قيمة ترسل لھا أي تستقبل قيمة واحدة وال تعيد أي قيمة.
.١اإلرسال بالقيمة:ترسل فقط قيمة المتغير إلى الدالة أي إذا تغير قيمة المتغير داخل الدالة ال تتغير قيمته األصلية
داخل البرنامج ألننا أرسلنا فقط قيمته إلى الدالة لمعالجتھا ).أي ال تعاد أكثر من قيمة واحدة إلى البرنامج الرئيسي(
مثال :بناء دالة تعمل نفس عمل الدالة ) (powالتي تجد قيمة الرقم مرفوع إلى أس ) (x^nولنسميھا) (powAمعناه
ھذه الدالة عربية فقط للتميز بينھا وبين األصلية واالثنان يؤديان نفس العمل .
.١خطو رقم) ١إلى (٥ھي دالة إليجاد قيمة أي رقم مرفوع إلى أس
.٢خطوة رقم ) (٨ھو إعطاء قيم للمتغير وألس المراد إيجاده والمطلوب ھنا ) (x^nأي انه )(3^4
مھم
.٣خطوة رقم ) (٩تم إرسال قيم المتغيرين ) (x,nدالة ) (powAإليجاد حل ل) (3^4ھكذا
كود
)Int powA (int x,int n
3 4
لو تالحظ تم إرسال قيم المتغيرين وليس المتغيرين نفسھما وھذا ما يسمى باإلرسال بالقيمة )أي أن المتغير)(x,n
في الدالة ليس نفس المتغير ) (x,nفي البرنامج الرئيسي
.٢اإلرسال بالمرجع:ترسل موقع المتغير إلى الدالة أي أن الدالة تستقبل المتغير نفسه المرسل بنفس االسم أو بأس
ماخر .أي إذا تغير قيمة المتغير داخل الدالة تتغير قيمته األصلية داخل البرنامج ألننا أرسلنا موقعه إلى الدالة
والتغير يكون في محتوى الموقع .وشكلھا ھكذا
كود
;}Type name(¶meter1, ¶meter2,……) { statement
نضع )&( قبل كل ) (parameterنريد أن نعيد التغير في قيمته للبرنامج بمعنى أننا سنستقبل الموقع.
وفائدة اإلرسال بالمرجع ھو أن اإلرسال بلقيمة ال يعيد أكثر من قيمة متغير واحد إلى البرنامج بينما باإلرسال
بالمرجع نستطيع أعادة أكثر من قيمة متغير إلى البرنامج
مثال :دالة نرسل لھا متغيرين وتقوم بضرب كل واحد منھما بخمسة؟
تحليل :بما إننا نريد ضرب كل واحد منھما بخمسة أي أن االثنان يتغيران ويعودان إلى الدالة األصلية بقيم جديدة
ونحن نعلم إننا نستطيع إعادة قيمة واحدة في حالة اإلرسال بالقيمة لذالك سنستخدم اإلرسال بالمرجع
.١خطوة رقم ) (٩أرسلنا قيم المتغيرين ) (x=3,n=4إلى الدالة وتم استقبالھما بالمرجع وطرب كل واحد منھما بخمسة
الحظ خطوة رقم ) (١٠سيطبع قيمھم الجديدة مضروبة بخمسة
كود
)Int mulByFive(int &x,int &n
x n
Reslt= mulByFive (x , )n كما نالحظ من المخطط تم إرسال مواقع المتغيرات
.٢خطوة رقم ) (١٢أرسلنا قيم المتغيرين ) (y=5,z=5إلى الدالة وتم استقبالھما بالمرجع وطرب كل واحد منھما
بخمسة الحظ خطوة رقم ) (١٣سيطبع قيمھم الجديدة مضروبة بخمسة كال احضنا ال يھتم مھما كان اسم المتغير ألنه
سيستقبل موقعه باأسم أخر ويغير على القيم التي فيه
كود
)Int mulByFive(int &x,int &n
y z
مھم
وباختصار إذا وضعنا )&( قبل أي ) .(parameterأي تغير في ھذا ) (parameterسوف يؤثر على قيمته في
البرنامج الرئيسي .وإذا لم نضع ھذه العالمة يبقى محافظا على قيمته في البرنامج الرئيسي
مھم
إسناد قيم لمتغيرات الدالة ) : (functionھي قيم يتم إسنادھا للمتغيرات في الدالة فإذا لم نذكر ھذه المتغيرات في
االستدعاء يتم االعتماد على ھذه القيم وإذا ذكرناھا وأعطيناھا قيمة يأخذ القيمة التي أعطيناھا له.
.١خطوة رقم) (١ھي دالة تستقبل قيمتين وتكون قيمة ) (bھي قيمة زائدة مساوية ل )(٣
.٢خطوة رقم) (٤ھو استدعاء للدالة وأعطينا فقط قيمة ) (aولم نذكر المتغير ) (bلذالك سيعتمد المتغير ) (bعلى
القيمة الزائدة وھي ) (٣ويضرب ) (3*3=9ويطبع رقم ) (٩في شاشة التنفيذ
.٣خطوة رقم ) (٥ھو استدعاء للدالة وأعطينا قيمة للمتغير ) (a,bلذاك سيھمل القيمة الزائدة ويعتمد على قيمة )(b=5
ويضرب ) (3*5=15ويطبع ) (١٥في شاشة التنفيذ
عند تحليلنا لھذه الشجرة نرى أن الجزء المثلث يعاد أربع مرات معناه:تحليل
تحليل:ولو كتبا الكود المعاد أربع مرات في دالة واستدعيناھا أربع مرات وبعدة نكتب كود قاعدة الشجرة لتبسط
البرنامج كثيرا وأصبح واضح وسھل.
مھم
المتغيرات التي تعرف تحت تعريف المكتبات تسمى متغيرات عامة تكون معرفة بالنسبة إلى جميع أجزاء البرنامج
أي على سبيل المثال لو عرفنا متغير اسمه ) (itemيكون ھذا المتغير معرف بالنسبة إلى جميع الدوال أو إلى
البرنامج الرئيسي على خالف المتغيرات الخاصة التي تعرف داخل الدوال تكون فقط معرفة نسبة إلى الدالة
توضيح
<#Include >
Global variable متغيرات عامة معرفة إلى جميع أجزاء البرنامج
)(Main
{
Local variable متغيرات خاصة تكون معرفة فقط داخل الدالة ) (main
}
وھذه المتغيرات ال تنتھي حياتھا إال بانتھاء البرنامج وتبقى محافظة على قيمھا الجديدة وال تعود لقيمتھا البدائية.
نستطيع تعريف واستخدام أكثر من دالة في برنامج واحد..
الدوال الزائدة:ھي مجموعة دوال لھا نفس االسم وتختلف في القيمة المعادة أو تختلف في نوع )(parameter
المستقبل للدالة .فعند استدعاء احد ھذه الدوال وبما أنھا جميعا بنفس االسم لذالك سوف يستدعي المترجم الدالة
التي تستقبل اقرب نوع للمتغير الذي أرسلته لھا أو نفس النوع.
مثال :برنامج يحوي على دوال اآلتية احدھا تجمع الرقمين واألخرى تقسمھم واألخرى تضربھم ولھم نفس االسم؟
.١خطوة رقم ) (١٠تم إرسال متغيرين )(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
.٣خطوة رقم ) (١٢تم إرسال متغيرين )(aمن نوع (c ) , integerمن نوع floatلذالك ستستقبله الدالة في
الخطوة رقم ) (3وتجمع الرقميين الن ھذه الدالة تستقبل متغير من نوع integerومتغير من نوع float
مثال :بناء الدالة التالية ) (X^nأي دالة ) (powباستخدام أسلوب )( Recursive Function
تحليل:عندما يذكر ) ( Recursive Functionيجب أن ترك أي فكرة في ذھننا لحل السؤال بدون استدعاء الدالة
لنفسھا.وكما نرى أن رفع الرقم ألس معي معناه ضرب الرقم بنفسه بمقدار قيمة األس مثال على ذالك
كود
4^3=4*4*4
أذن سنكون دالة تعيد استدعاء لنفسھا بمقدار قيمة األس المرفوع له الرقم وبكل استدعاء تضرب الرقم في نفسه
توضيح الخطوات:
.١خطوة رقم ) (٧أردنا أيجاد قيمة ) (4^3لذالك سيستدعي الدالة في الخطوة رقم ) (١جاعال قيمة ) (x=4,n=3ثم
ينفذ خطوة رقم ) (٢الن) (n>0وينفذ بعده خطوة رقم ) (٣لكي يعيد الرقم مضروب باستدعاء الدالة لنفسھا مرسلة لھا
الرقم واألس منقص منه واحد ويستمر باالستدعاء الذاتي إلى أن تصبح قيمة األس ) (n=0يعيد عندھا واحد ويخرج
من االستدعاء الذاتي .
توضيح ماذا سيحصل في خطوات رقم) ١إلى (٥في حال كان )) (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يجب أن ترك أي فكرة في ذھننا لحل السؤال بدون استدعاء الدالة
لنفسھا.وكما نرى أن المفكوك ھو ناتج من حاصل ضرب الرقم باألرقام التي اقل منه وصوال إلى الواحد
كود
5!=5*4*3*2*1
أذن سنكون دالة تعيد استدعاء لنفسھا بمقدار قيمة الرقم مثال مفكوك خمسة ستستدعي الدالة نفسھا خمس مرات وفي
كل مرة تستدعي الدالة لنفسھا نطرح من الرقم المرسل واحد ونضربه ببقية األرقام ھكذا
كود
!)N!=N*(n-1
• خطوة رقم ) (٧استدعينا دالة المفكوك وأردنا إيجاد مفكوك الرقم أربعة فعند الدخول للدالة نرى وجود خطوة
رقم) (٣ھذه الخطوة تضرب الرقم بمفكوك األرقام التي اقل منه ھكذا)!) (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وتكتب ھكذا
المصفوفات والدوال:
يمكن إرسال مصفوفات أحادية اإلبعاد إلى الدوال بذكر اسمھا فقط بدون أبعاد .
مثال:لو كان لدينا مصفوفة اسمھا ) (aونريد إرسالھا إلى دالة اسمھا )(name
وطريقة استقبال المصفوفة األحادية في الدوال نضع فقط أقواس المصفوفة بدون إبعاد
يمكن إرسال مصفوفات ثنائية األبعاد إلى الدوال فقط بذكر اسمھا بدون أبعاد .
مثال:لو كان لدينا مصفوفة اسمھا ) (aوإبعادھا ) (2*3ونريد إرسالھا إلى دالة اسمھا )(name
وطريقة استقبال المصفوفة ثنائية األبعاد في الدوال نذكر فقط البعد الثاني ھكذا
• المصفوفات عند إرسالھا بھذه الطرق إلى الدوال ترسل بالقيمة وليس بالمرجع.إذا إي تغير على عناصر
المصفوفة في الدالة سوف ال يؤثر على القيم في البرنامج الرئيسي.أي ترسل نسخة من المصفوفة وليس
المصفوفة نفسھا.
كما نرى انه يريد ناتج جمع كل مصفوفة واكبر عدد فيكون البرنامج كبير جدا إذا لم نستعمل الدوال:تحليل
(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) ( ھي إدخال المصفوفة١٧ و١٦)خطوة رقم.٣
المصفوفة وطباعة الرقم وبقية الخطوات تتكرر نفس العملية بالنسبة لبقية المصفوفات
.** أالن أصبح لدينا دالة متى استدعيناھا تجد اكبر رقم
إليجاد الحرف األكثر تكرار ضمن إي سلسلة يجب خزن جميع األحرف في مصفوفة وحساب عدد مرات:تحليل
.ظھور كل حرف في السلسلة وطباعة الحرف الذي يظھر أكثر من غيره
(function)لترتيب ثالث مصفوفات ثنائية نستخدم نفس طريقة ترتيب المصفوفات الثنائية ونضعھا في دالة:تحليل
.ونستدعيھا ثالث مرات
. (function) إيجاد أحرف العلة في مصفوفات ثنائية ألكثر من واحدة نحتاج إلى دوال:تحليل
المستوى المطلوب
ٔان يكون القارئ ملما بما هو في الفصول السابقة وفاهما كل شيء
ٔ
االهداف:
عندما يكـتمل الفصل تكون بإذن ﷲ قد ٔاتممت التعرف علﻰ المؤشرات وطريقة التعامل مع المتغيرات
عن طريق المواقع
ٔ
مستوى االداء المطلوب بعد إنهاء الفصل
إتقان هذه الفصل 100%
ٔ
االدوات المطلوبة:ﺣاﺴوب شخصي لتجربة البرامج وقلم ودفتر لتسجيل المالﺣظات
المؤشر يؤشر على عنوان المتغير في الذاكرة ويحمل قيمة ھذا العنوان وھو ھنا )(0x244f23e8
المؤشرات والمتغيرات:
المتغيرات تخزن في الذاكرة ويمكن أن نؤشر على قيمھا بواسطة ) (pointerونتالعب بقيمة ھذا الموقع بواسطته
وتكون طريقة تعريف ) (pointerمع المتغيرات ھكذا.
ھيكلية المؤشر
Type *ptr=&var
• ) : (ptrھو اسم المؤشر وقد يكون أي اسم يعرفه المستخدم ويجب وضع عالمة النجمة )*( قبله
• ) :(Typeھو نوع المؤشر ويكون نوعه نفس نوع المتغير الذي يؤشر عليه
• ) :(varھو اسم المتغير الذي نريد أن يؤشر عليه المؤشر ويجب وضع عالمة )&( قبله عندما نجعل المؤشر
يؤشر عليه الن وضع ھذه العالمة قبل أي متغير معناه المطلوب عنوان المتغير وليس قيمة المتغير نفسه
والمؤشرات تؤشر على العناوين المتغيرات فلو وضعنا ھذه العالمة أمام أي متغير في الطباعة سيطبع موقع
المتغير وليس قيمته.
مثال :لو كان لدينا متغير ) (x=5ويؤشر عليه مؤشر ) (ptrبالشكل التالي فيكون المخطط ھكذا
كود
;int x=5
;int *ptr=&x
.٢خطوة رقم ) (٣طبعنا عنوان الموقع الذي يؤشر عليه المؤشر ) (ptrوھو نفس عنوان موقع المتغير ) (xألنھما
يؤشران على نفس الموقع.أي أننا إذا كتبنا فقط اسم المؤشر سيطبع الموقع الذي يؤشر عليه
.٣خطوة رقم ) (٤طبعنا عنوان المتغير ) (xألننا إذا وضعنا عالمة )&( قبل أي متغير سيطبع موقعه
.٤خطوة رقم ) (٥طبعنا القيمة التي يؤشر عليھا المؤشر) (ptrوھي نفس قيمة المتغير ) (xألنھما يؤشران على نفس
الموقع .أي أننا إذا كتبنا نجمة قبل اسم المؤشر) (ptrسيطبع محتوى الموقع الذي يؤشر عليه
توضيح الخطوات:
.٢خطوة رقم ) (٣وضعنا قيمة جديدة في الموقع الذي يؤشر عليه المؤشر ) (*ptrوھو موقع المتغير )(g
)-:(NEWھي دالة تستخدم لحجز مكان في الذاكرة لمؤشر معين الن المؤشرات بطبيعتھا سوف تؤشر على
مواقع متغيرات ولن تحجز مواقع أما مع ھذا اإليعاز نستطيع حجز موقع للمؤشر وتعريفھا بالشكل التالي
ھيكلية المؤشر
]Type *ptr=new type[size
• ) : (ptrھو اسم المؤشر وقد يكون أي اسم يعرفه المستخدم ويجب وضع عالمة النجمة )*( قبله
• ) :(Typeھو نوع المؤشر ويكون نوعه نفس نوع المتغير الذي يؤشر عليه
• ) :(sizeھو الحجم أو عدد الموقع الذي سوف نحجزه للمؤشر في الذاكرة .
•
مثال :تكوين مؤشر جديد وحجز مكان جديد له وإبدال بين محتوى المؤشر ومحتويات المتغير ).(g؟
عنوان الموقع اسم المؤشر محتواه عنوان الموقع اسم المؤشر محتواه
ptr 0x244f23e8 32 ptr 0x244f23e8 15
1
عنوان الموقع اسم المتغير محتواه عنوان الموقع اسم المتغير محتواه
item 0x244f23a2 فارغ item 0x244f23a2 32
3
2 عنوان الموقع اسم المتغير محتواه
عنوان الموقع اسم المتغير محتواه
g 0x244f23b4 15 g 0x244f23b4 32
مثال توضيحي :لو عرفنا المصفوفة التالية حجمھا خمسة عناصر وجعلنا المؤشر يؤشر على أول عنصر بالمصفوفة
كود
;}Int first_array[5]={34,26,43,23,54
;]int *ptr=& first_array[0
وافترضنا أن أول عنصر في المصفوفة خزن بموقع )(18126
• الحظ أن المؤشر) (ptrيؤشر على )] (first_array [0أي على الموقع )(18126
• إذا أردنا أن يؤشر المؤشر ) (ptrعلى الموقع الثاني بالمصفوفة نزيد قيمة الموقع الذي يؤشر عليه المؤشر
) (ptrبمقدار واحد ھكذا
كود
18126+1
ptr+1 18127
ليصبح المؤشر يؤشر على الموقع ) (18127وھو عنوان ثاني موقع بالمصفوفة
• إذا أردنا أن يؤشر المؤشر ) (ptrعلى الموقع الرابع بالمصفوفة نزيد قيمة الموقع الذي يؤشر عليه المؤشر
) (ptrبمقدار ثالثة ھكذا .ليصبح المؤشر يؤشر على الموقع ) (18129وھو عنوان رابع موقع بالمصفوفة
كود
18126+3
ptr+1 18129
المصفوفات الثنائية والمؤشرات :عرفنا أن المصفوفة الثنائية ھي مجموعة من المواقع المتتالية المحجوزة في الذاكرة
ويمكن أن نستخدم المؤشر مع المصفوفة الثنائية وجعله يؤشر على احد القيم وسھولة تمريره على جميع العناصر فقط
نزيد قيمة عنوان المؤشر بواحد فينتقل المؤشر ليؤشر على الموقع التالي الذي يليه.
مثال توضيحي:لو عرفنا المصفوفة التالية حجمھا ) (2*2وجعلنا المؤشر يؤشر على أول عنصر بالمصفوفة
كود
;} }int first_array[2][2]={{34,26},{43,23
;]int *ptr=& first_array[0][0
وافترضنا أن أول عنصر في المصفوفة خزن بموقع )(18126
• الحظ أن المؤشر) (ptrيؤشر على )] (first_array [0][0أي على الموقع )(18126
• إذا أردنا أن يؤشر المؤشر ) (ptrعلى الموقع الثاني بالمصفوفة )أي الصف األول العمود الثاني( نزيد قيمة
الموقع الذي يؤشر عليه المؤشر ) (ptrبمقدار واحد ھكذا
كود
18126+1
ptr+1 18127
ليصبح المؤشر يؤشر على الموقع ) (18127وھو عنوان ثاني موقع بالمصفوفة
• إذا أردنا أن يؤشر المؤشر ) (ptrعلى الموقع الرابع بالمصفوفة )أي الصف الثاني العمود الثاني( نزيد قيمة
الموقع الذي يؤشر عليه المؤشر ) (ptrبمقدار ثالثة ھكذا .ليصبح المؤشر يؤشر على الموقع )(18129
وھو عنوان رابع موقع بالمصفوفة
كود مھم
ptr+1 18126+3 18129
• تعامل المصفوفة الثنائية نفس معاملة المصفوفة األحادية بالمؤشرات الن كالھما عبارة عن خاليا متسلسلة
محجوزة بالذاكرة
لو كان لدينا متغير اسمه ) (aونريد إرساله إلى دالة اسمھا ). (name
وطريقة استقبال المتغير في الدوال نعرف مؤشر من نفس نوع المتغير المرسل لكي يؤشر على موقعه .
مثال :تكوين دالة تستقبل وحرف صغير وتحوله إلى حرف كبير..؟
تحليل :لتحويل حرف من صغير إلى كبير نعلم أن الفرق بين أسكي كود كل حرف صغير ونضيره الكبير ھو
) (٣٢لذالك لتحويل إلى حرف كبير نحول الحرف إلى أسكي كود ونطرح منه ) (٣٢ونرجع نحوله إلى حرف
فيتحول إلى حرف كبير
• خطوة رقم ) (٦نسبة إلى الحل بدون استخدام المؤشرات :إرسال قيمة المتغير ) (inputcharإلى الدالة
يكون ھكذا )إذا قام المستخدم بإدخال الحرف aمثال فيكون اإلرسال ھكذا(
كود •
) 1. toBigLeter (char ptr •
''a •
مھم
) toBigLeter ( x
• خطوة رقم ) (٧نسبة إلى الحل باستخدام المؤشرات :سوف يطبع الحرف بعد التكبير ألننا في المؤشرات
نتعامل مع موقع المتغير فأي تغير في الدالة على الموقع يغير في قيمه المتغير في البرنامج الرئيسي
• خطوة رقم ) (٦نسبة إلى الحل بدون استخدام المؤشرات :سوف يطبع الحرف بدون أي تكبير نفس الحرف
المدخل سوف يطبعه ألننا أرسلنا نسخة من المتغير إلى الدالة ولم نرسل المتغير نفسه فأي تغير على ھذه
النسخة ال يؤثر بقيمه المتغير في البرنامج الرئيسي
ترسل المصفوفة األحادية إلى الدالة بتحديد عنوان الموقع المرسل كأن يكون أننا نرسل عنوان أول موقع وفي الدالة
عندما يعرف أول موقع يستطيع التنقل إلى باقي المواقع بزيادة قيمة المؤشر بواحد كل مرة .ھكذا ترسل
مثال:لو كان لدينا مصفوفة اسمھا ) (aونريد إرسالھا إلى دالة اسمھا ). (name
وطريقة استقبال المصفوفة األحادية في الدوال نعرف مؤشر من نفس نوع المصفوفة المرسلة .
** في إرسال المصفوفة إلى الدوال قد نرسل عنوان أول موقع أو نرسل عنوان أخر موقع أو أي موقع حسب ما
نحتاجه في برنامجنا
بما انه يريد عكس األحرف في المصفوفة باستخدام الدوال فيجب اإلرسال بالمرجع حتى عندما يقلب أحرف:تحليل
. ( ويعود للبرنامج الرئيسي تعكس المصفوفات أيضا في البرنامج الرئيسيfunction) السلسلة وعندما ينتھي من
(ھي دالة تستقبل أخر موقع بالسلسلة وطول ھذه السلسلة٢) خطوة رقم.١
( ھو عداد يبدأ بالعد من أخر موقع إلى المنتصف حتى يبدل المواقع األول باألخير والثاني بالقبل٤) خطوة رقم.٢
( ويستمر باإلبدال٨و٧و٦ و٥) األخير في خطوات رقم
.٣الدوال والمصفوفات الثنائية :عرفا سابقا طريقة التعامل مع المصفوفات في الدوال )(function
وعرفنا طريقة اإلرسال إلى الدالة وھي إرسال نسخة من المصفوفة الثنائية وليس المصفوفة األصلية أي كان
إرسال بالقيمة .أما مع المؤشرات يكون إرسال بالمرجع أي أن أي تغير على المصفوفة داخل أي دالة
) (functionسوف يؤثر على المصفوفة األصلية في البرنامج الرئيسي التي أرسلت إلى الدالة للمعالجة ألن
المؤشرات تتعامل مع مواقع الذاكرة أي مواقع المتغيرات وليس نسخة منه
ترسل المصفوفة الثنائية إلى الدالة بتحديد عنوان الموقع المرسل كأن يكون أننا نرسل عنوان أول موقع وفي الدالة
عندما يعرف أول موقع يستطيع التنقل إلى باقي المواقع بزيادة قيمة المؤشر بواحد كل مرة .ھكذا ترسل
مثال:لو كان لدينا مصفوفة اسمھا ) (aحجمھا ) (4*4ونريد إرسالھا إلى دالة اسمھا ). (name
وطريقة استقبال المصفوفة الثنائية في الدوال نعرف مؤشر من نفس نوع المصفوفة المرسلة .
** في إرسال المصفوفة إلى الدوال قد نرسل عنوان أول موقع أو نرسل عنوان أخر موقع أو أي موقع حسب ما
نحتاجه في برنامجنا
تحليل:بما إننا نريد تحويل المصفوفة إلى أصفار و واحدات نرسلھا كمؤشر إلى داله وھناك العدد األولي نضع مكانه
واحد والغير أولي نضع صفر
.٢خطوة رقم ) (٥ھو متغير إذا كان الرقم الذي عليه المؤشر عدد أولي يبقى واحد وذا كان الرقم غير أولي يتحول
إلى صفر لكي يخزن بدل قيمة العنصر
.٣خطوة رقم ) (٦ھوا عداد يمر على جميع عناصر المصفوفة لكي يتحقق من العناصر عنصر عنصر في خطوات
رقم )٨و ٧و٩و١٠و١١و (١٢ھل العنصر عدد أولي أم ال
.٤خطوة رقم) (١٣لكي ينقل المؤشر على العنصر التالي بعد أن يتحقق من العنصر السابق
.٥خطوة رقم) (١٩ھي إرسال عنوان أول عنصر بالمصفوفة بالمصفوفة إلى الدالة
مصفوفة أحادية غير محدودة الحجم:تعلمنا سابقا أن المصفوفات حجمھا ثابت ويجب تعريفه وال يمكن كتابة
مصفوفة دون تحديد حجمھا أما مع المؤشرات نستطيع مع دالة ) (newتكوين مصفوفة غير محدودة الحجم يحدد
حجمھا المستخدم وقت التنفيذ .حيث أن الحجم الذي نحجزه بقدر حجم المصفوفة المطلوب
لو أردنا أن نحجز مصفوفة حجمھا ) (٩عناصر من نوع integerوقت التنفيذ نحجز بشكل التالي
مثال :برنامج يطلب من المستخدم تحديد حجم المصفوفة وقت التنفيذ وبعدھا يطلب منه أن يدخل عناصر ثم يجمع
العناصر ويجد المعدل ؟
.١خطوة رقم ) (٤يطلب من المستخدم إدخال حجم المصفوفة لكي يضع الحجم الذي يدخله المستخدم في خطوة رقم
) (٥إي مثال إذا ادخل المستخدم الرقم خمسة ستكون الخطوة رقم ) (٤بشكل التالي
مصفوفة ثنائية غير محدودة األبعاد :نستطيع مع دالة ) (newتكوين مصفوفة ثنائية غير محدودة األبعاد يحدد
أبعادھا المستخدم وقت التنفيذ .
لو أردنا أن نحجز مصفوفة حجمھا ) (3*5من نوع integerوقت التنفيذ نحجز بشكل التالي
**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
:توضيح الخطوات
المستوى المطلوب
ٔان يكون القارئ ملما بما هو في الفصول السابقة وفاهما كل شيء
ٔ
االهداف:
عندما يكـتمل الفصل تكون بإذن ﷲ قد ٔاتممت التعرف علﻰ السجالت وطرق اﺴتخدامها
ٔ
مستوى االداء المطلوب بعد إنهاء الفصل
إتقان هذه الفصل 100%
ٔ
االدوات المطلوبة:ﺣاﺴوب شخصي لتجربة البرامج وقلم ودفتر لتسجيل المالﺣظات
نالحظ أن رقم السيارة عرف كرقم ألنه رقم السيارة عبارة عن مجموعة أرقام و موديلھا عرف رقم
الن الموديل عبارة عن تاريخ وشركة المصنعة عرفت كسلسلة الن الشركة اسم المصنعة مكونة من
أحرف أو رموز ونالحظ أننا اشتقينا من السجل سيارة حسين ) (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
وكود البرنامج لمستخدم واحد مع اإلدخال والطباعة ألسمه وكلمة مروره يكون
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)
• أالن لو أردنا الوصول إلى نوع ) (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
فلنعود إلى مثال معلومات سيارة وھي رقم ونوع واسم الشركة لكن نريدھا ألربعين سيارة فيكون
السجل بشكل التالي
تراكيب ) ( Structsلمكونات سيارة
struct car
{
;int CarNumber
;int Model
;]char factoryDesgin[20
;]}userCar[40
لو أردنا الوصول إلى معلومات صاحب أول سجل )الوصول إلى اسم الشركة المصنعة (
كود
; userCar[0]. 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])
مثال :سجل لعشر سيارات لھا رقم وموديل واسم الشركة وداخلة سجل لخمس مكائن لكل ماكنة ثالث
محركات.؟
• لو أردنا الوصول إلى معلومات صاحب أول سجل ماكنة ثانية النوع األول
كود
; userCar[0]. MachineCar[1]. Type1
• لو أردنا الوصول إلى معلومات صاحب ثاني سجل ماكنة أولى النوع الثاني
كود
; userCar[1]. MachineCar[0]. Type2
• لو أردنا الوصول إلى معلومات صاحب أول سجل ماكنة ألولى النوع األول ونعطيه قيمة)(20
كود
;userCar[0]. MachineCar[0]. Type1=20
• لو أردنا الوصول إلى معلومات صاحب أول سجل اسم الشركة المصنعة ونعطيه )(BMW
كود
; )"Strcpy(userCar[0]. factoryDesgin,"BMW
وكذالك البقية نصل إليھم بنفس الطريقة.
المستوى المطلوب
ٔان يكون القارئ ملما بما هو في الفصول السابقة وفاهما كل شيء
ٔ
االهداف:
عندما يكـتمل الفصل تكون بإذن ﷲ قد ٔاتممت التعرف علﻰ الملفات وطرق اﺴتخدامها
ٔ
مستوى االداء المطلوب بعد إنهاء الفصل
إتقان هذه الفصل 100%
ٔ
االدوات المطلوبة:ﺣاﺴوب شخصي لتجربة البرامج وقلم ودفتر لتسجيل المالﺣظات
بعد أكمال عملنا مع إي ملف يجب إغالقه وال يجوز تركه مفتوح ويغلق بشكل التالي
خطوة رقم )في المثال السابق إذا كان الملف ) (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
} }
توضيح الخطوات
.١الخطوة رقم ) (٣فتحنا ملف للكتابة مع ميزة إلحاق الكتابة الجديدة بالكتابة السابقة
.٢خطوة رقم ) (٥ھو قراءة من شاشة التنفيذ
.٣خطوة رقم ) (٦طباعة الحرف الذي تمت قراءته في الملف
.٤خطوة رقم ) ٤الى (٧تتكرر باستمرار مادام المستخدم لم يدخل رمز النقطة الن شرط التوقف في الخطوة
محتويات الملف رقم ) (٧أن يكون الرمز المدخل ھو نقطة
سيخزنون في الملف في الشكل التالي لو أدخلنا أسماء المستخدمين كما في شاشة التنفيذ
) : (foutھو اسم للملف الذي نريد القراءة منه .عرفناه في الخطوة رقم ) (١انه ملف •
) : ( file pathھو مسار الملف المراد فتح الملف من داخل الجھاز يوضع بين عالمتي تنصيص •
) : (symbolھي رموز المستخدمة مثل تستخدم للداللة على عمليات معية توضع بين عالمتي تنصيص •
وھنا نستخدم الرمز ) (rألننا نريد القراءة من داخل الملف .وھذا جدول بھذه الرموز
وفي خطوة رقم ) (٣قمنا بقراءة البيانات من داخل الملف باستخدام الدالة ) (fgetsالتي تأخذ اسم الملف •
والنص المراد القراءة منه وتخزن الناتج في مصفوفة و ) (80ھو عدد األحرف المرد قراءتھا من الملف
يمكن قراءة حرف واحد فقط من داخل الملف باستخدام الدالة ) (getcالتي تأخذ اسم الملف وتعطي والحرف
المراد قرائته
تحليل :لقراءة جميع محتويات ملف نستخدم دوال التكرار في القراءة حيث
كل ما يقرئ بايت ينتقل المؤشر إلى البايت الثاني ليقرئه في المرة القادمة
لكن ال بد من وجود دالة توقف القراءة عند الوصول إلى نھاية الملف
قارن ھذا الحل بالحل السابق لنفس ھذا المثال في حالة كتابة الملفات النصية
• ) : (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
؟. برنامج يطبع أسماء المستخدمين وكلمات مرورھم التي خزنت في ملف كثنائي:مثال
:توضيح الخطوات
( وكل واحد في السجل له اسم مستخدم٦) ( قرئنا من داخل الملف بيانات بحجم السجل وھو٧) خطوة رقم.١
وكلمة مرور سيقوم المترجم تلقائيا بإسناد كل اسم مستخدم وكلمة مروره مخزن داخل الملف الى موقع من
مواقع السجل
( قمنا بطباعة محتويات السجل التي ملئناھا من الملف١٤ إلى١٠) خطوة رقم.٢
لو أردنا أن يطبع محتويات سجل لمستخدمين اثنين فقط نغير خطوة رقم ) (٨إلى
الذي فعلناه ھو أخذنا حجم سجل واحد وھو السجل األول )] (userProtection[0وضربناه في اثنان لكي نحصل
على حجم سجلين من داخل الملف فقط لذالك سيطبع محتويات سجلين فقط كما في شاشة التنفيذ
ونستطيع تحديد عدد الملفات من الرقم المضروب بالحجم فلو أردنا ثالث ملفات نضرب في ثالثة لكن ھذه الطريقة
تطبع بعدد السجالت المطلوب لكن من األول ثم الثاني وبالتسلسل ماذا لو أردنا طباعة فقط السجل الثالث أو فقط
السجل الرابع ھذا ما تقدمه دالة ) (seekالتي تمكنك من تحريك المؤشر داخل الملف ألن المؤشر بطبيعته يبدأ
من أول موقع لذالك سيطبع السجالت بالتسلسل إما ھذه الدالة تمكنك من تحريك مكان المؤشر وتكون بالشكل التالي
نجعله يقرأ سجل نضرب حجم واحد من السجالت ونجعل التحرك من البداية
في اثنان ونجعلھا قيمة )(offset
حتى يؤشر في نھاية الملف الثاني
بما انه سجل واحد فليس بحاجة إلى عداد يعد للستة فقط نطبع الموقع األول الذي فيه المستخدم ھكذا
( إلى اصفر من ثالثة ألننا سنطبع ثالث سجالت فقط١٠) ونغير شرط توقف العداد في خطوة رقم