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

++c ... المحاضرة ( 5 )

مغلق
بدأه BjarneStudent في 23 نوفمبر 2007 · 11 رد · 6,027 مشاهدة · في المواضيع والدروس
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

بسم الله الرحمن الرحيم

سوف نتناول في هذه المحاضرة الموضوعات التالي :

1- مقدمة لعبارات التحكم.

2- الخوارزميات algorithms.

3- شبه الكود pseudocode.

4- هياكل التحكم.

بسم الله وبه نستعين

المقدمة

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

من خلالهما كود واضح ذات أداء وكفائة عاليين.في هذا الفصل والذي يليه سوف نتعرف على عبارات التحكم في تحضير النظريات ومبادىء البرمجة الهيكلية ( المركبة ).

في هذا الفصل ( المحاضرة القادمة ) نقدم عبارات التحكم ( while , if , if... else ), ثلاث من قطع البناء التي تسمح للمبرمج ان يحدد المنطق المطلوب لدوال

الأعضاء لتؤدي مهامها. نحن نكرس جزء من هذا الفصل ( والفصلين 5 , 7 ) لتطوير أبعد للصنف GradeBook, حيث نقوم بإضافة دالة عضو للصنف حيث يستخدم

بها إحدى عبارات التحكم أو كلاهما لحساب معدل مجموع درجات الطالب, وأيضا هناك وسائل اضافية لضم عبارات لحل مشاكل مشابهه.

الخوارزميات algorithms

أي مسألة أو مهمه قابلة للتنفيذ, تكون منفذه بإتباع سلسلة من الإجراءات في ترتيب معين. ويركز هذا الترتيب على ناحيتين:

1- إجراءات التنفيذ نفسها. 2- الترتيب الي نفذت به.

وهذا ما يسمى بالخوارزم algorithm. ولكي نوضح هذا المصطلح , نأخذ المثال التالي, " خوازم النهوض إلى العمل " لموظف صغير, عندما ينهض من السرير ليذهب

إلى العمل :

1- يغادر السرير.

2- يخلع البجامة.

3- يستحم.

4- يرتدي ثوبة.

5- يتناول فطوره.

6- يقود سيارته للعمل.

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

التحكم والسيطره, وبالتالي تزداد المهمة صعوبة. على سبيل المثال, لو إختلف الترتيب وفق التالي :

1- يغادر السرير.

2- يخلع بجامته.

3- يرتدي ثوبه.

4- يستحم.

5- يتناول فطوره.

6- يقود سيارته للعمل.

بهذه الطريقة سوف يذهب للعمل مبولا. تحديد الترتيب في عبارات ( إجراءات ) تنفذ في برنامج كمبيوتر تسمى " تحكم البرنامج ".

في هذا الفصل سوف نأخذ عبارات التحكم لنرى كيف يسير تحكم برنامج.

شبه الكود pseudocode

شبه الكود لغة غير رسمية مبتكره تساعد المبرمجين بأن يطورو الخوارزميات بدون أن يقلقوا حول التفاصيل الدقيقة لنص لغة الـ C++, بعد

تحضير شبه الكود يتم تحويله إلى أجزاء مركبه ( مهيكلة ) من برامج الـ ++C, وهو ليس برمجة فعليه, شكله يشبه اللغة الإنجليزية اليوميه

, بحيث يكون سهل القراءة والفهم .

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

الكود في تطوير برامجنا. يمكن كتابة شبه الكود في أي محرر للنصوص يتم تجهيزها لحين الطلب. عند القاء نضره على شبه الكود نلاحظ أن

الإعلانات ( تلك التي لا تحتوي عمليات اسناد قيم اوليه للمتغيرات ولا تحتوي على بواني ) لا يتم كتابتها , على سبيل المثالك :

;int i

نلاحظ في هذه الإجراء لا يوجد تنفيذ ( على سبيل المثال : ادخال , إخراج , حساب , اسناد قيمة ) , هذا يحدث في معظم الحالات.

سوف نعطي فيما يلي مثالا بسيط لتوضيح ماسبق شرحه, ناخذ برنامج و نمثل خوارزميه له هي عبارة عن شبه كود.

البرنامج :

1

 
  // Fig. 2.5: fig02_05.cpp
2  // Addition program that displays the sum of two numbers.
3  #include <iostream> // allows program to perform input and output
4
5  // function main begins program execution
6  int main()
7  {
8	 // variable declarations
9	 int number1; // first integer to add  
10	 int number2; // second integer to add 
11	 int sum; // sum of number1 and number2
12
13	 std::cout << "Enter first integer: "; // prompt user for data
14	 std::cin >> number1; // read first integer from user into number1
15
16	 std::cout << "Enter second integer: "; // prompt user for data
17	 std::cin >> number2; // read second integer from user into number2
18
19	 sum = number1 + number2; // add the numbers; store result in sum
20
21	 std::cout << "Sum is " << sum << std::end1; // display sum; end line
22
23	 return 0; // indicate that program ended successfully
24
25  } // end function main

خوارزم البرنامج السابق :

 
1  Prompt the user to enter the first integer
2  Input the first integer
3
4  Prompt the user to enter the second integer
5  Input the second integer
6
7  Add first integer and second integer, store result
8  Display result

الخوارزم يمثل إدخال عددين صحيحي من المستخدم , ثم يجمع هذين العددين ويعرض الناتج.

السطور ( 1,2 ) من الخوارزم تمثل السطور ( 13,14 ) من البرنامج. وهكذا .

يستخدم شبه الكود لتمثيل العبارات في الدالة الرئيسية فقط ( main ) , وليس لكامل البرنامج.

هياكل التحكم

عادة ً العبارات في البرنامج تنفذ الواحدة تلو الأخرى في الترتيب الذي هي كتبت فيه , هذا الترتيب للتنفيذ يسمى التنفيذ المتسلسل sequential execution. سوف

نشرح فيما يلي خروج تقييد التنفيذ بالتسلسل عن الترتيب المتسلسل ( اي انه ليس من المشترط أن تنفذ العبارة القادمة ) .. وهذا يسمى نقل التحكم transfer of control.

خلال الستينات إتضح أن الإستخدام الجزافي في نقل التحكم سببه عبارة عبارة goto, التي تسمح للمبرمج أن ينقل التحكم إلى أي منطقه يريد من البرنامج, بحيث اصبحت

الكثير من البرنامج شبيهه بمعكرونه الإسبقتي.

أبحاث Bohm وَ Jacopini اثبتت أن البرامج يجب أن تكتب بدون عبارات goto, واصبح هذا تحدي المبرمجين في ذلك العصر. ولم يتسنى ذلك حتى السبعينات ,

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

في تسليم الأنظمه والمشاريع البرمجية. وتبين للجميع أن المفتاح هو إعتماد البرمجة الهيكلية بشكل تام وعلى مدى أوسع , إلى حد الإستغناء تماما عن عبارة goto.

خرجت أعمال Bohm وَ Jacopini بأنه يجب الإستغناء عن عبارة goto بثلاث هياكل تحكم , تحقق سرعة وأداء عاليين , وهما , الهيكل المتسلسل , وهيكل

الإختيار , وهيكل التكرار. وسوف نشير إليهم في لغتنا هذه بعبارات التحكم ( control statments ).

نأخذ هذا الشكل , وذلك لتوضيح مادتنا القادمة :

شكل 1-5 :

post-133999-1195850116_thumb.jpg

الهيكل المتسلسل في الـ ++C:

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

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

في هذا الشكل , العبارتين تقومان بجمع الدرجة لمتغير المجموع وجمع القيمة ( 1 ) لمتغير العداد. سوف نستخدم هذه العبارات للحصول على معدل درجات

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

بشكل مكثف ومتطور في التمارين.

مخططات الحركة تكون جزء من نماذج الـ UML لمخطط الحركة لسير عمل البرنامج. مخطط الحركة يتكون من رموز لها دلالات بحيث تصف حالة

الإجراء وتسمى action state symbols ( المعينات والدوائر الصغير المربوطه بسهام نقل تمثل سير الحركه ).

هذا الرسم حاله حال شبه الكود , فهو يسهل للمبرمجين تطوير وتمثيل خوارزمياتهم بحيث تعرض كيفية عمل هياكل التحكم, بالرغم من أن الكثير يفضلوا شبه

لأكواد في عمل ذلك.

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

انتقالات التنفيذ ( أولا , جمع الدرجة للمجموع. ثانيا , زيادة العداد بواحد ).

الدائرة المصمته في قمة المخطط تمثل أعداد قيمة أولية. في آخر الرسم يوجد دائرة مصمته محاطه بدائرة جوفاء وهي تمثل نهاية التنفيذ.

في رسم الـ UML في الشكل السابق , تلاحظون المستطيلات المطوية الزاوية , تسمى ( ملاحظات ), وهي ما تمثل تعليقات توضيحية تصف رموز المخطط.

هذه الملاحظات تستخدم الكود المرتبط في كل حدث اجرائي في مخطط الحركة

عبارات الإختيار في الـ ++C :

في لغة الـ ++C لدينا ثلاث عبارات إختيار وهي : if , if .. else , switch

if : إذا تحقق الشرط ( يكون صحيح ) ينفذ الإجراء , واذا لم يتحقق يتجاوزه .. فقط. وتسمى عبارة إختيار مفردة ( لانها تنفذ إجراء واحد فقط اذا تحقق الشرط ).

else .. if : في حالة تحقق الشرط , تودي إجراء معين , واذا لم يتحقق تنفذ إجراء آخر. وتسمى عبارة اختيار مزدوجة ( لأنها تنفذ إجرائين , عندما تكون صحيحة وعندما تكون خاطئة ).

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

عبارات التكرار في الـ ++C :

في لغة الـ ++C لدينا ثلاث عبارات تكرار وتسمى ايضا حلقات تكرار loops , وهي : for , while , do .. while.

تؤدي هذه العبارات إجراء معين بشكل متكرر كل ما تحقق الشرط , عدد هذه التكرارات تكون من الصفر إلى أن يفشل الشرط , ما عدى العبارة do .. while , فيكون من الـواحد إلى أن يفشل

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

كل الكلمات ( for , do , while , else , if , switch) كلمات مفتاحية ( keywords) في الـ ++C هذه الكلمات محجوزة في الـ ++C لتطبيق تقنيات معينة.

فيما يلي قائمة بالمفتاحيات في الـ ++C:

شكل 2-5 :

post-133999-1195974370_thumb.jpg

خطأ برمجي شائع :

إستخدام المفتاحية كمعرف يولد خطأ نصي ( syntax error ).

خطأ برمجي شائع :

حروف المفتاحية مع أي حرف كبير يولد خطأ نصي. كل مفتاحيات الـ ++C تحتوي حروف صغيره فقط.

خلاصة عبارات التحكم :

من كلامنا السابق , نستفيد أنه يوجد لدينا ثلاث أنواع من عبارات التحكم ( تسلسل , اختيار , تكرار ).

لو نظرنا لكل كود ( أو دالة عضو ) لرأينا أنها تتكون من إحدى هذه الأنواع , او خليط منها يمثل الخوارزم الذي يطبقه هذا البرنامج.

نستطيع أن نقوم بعمل نموذج لكل عبارة تحكم , وذلك بعمل مخطط حركة لوصف سلوكها بشكل رسومي. دائما ما يحتوي مخطط الحركة activity diagram على

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

أي عمل العبارات بشكل رزمة , كما في نموذجنا السابق (1-5) الذي يمثل كودنا السابق.

وهناك أيضا طريقة اخرى لإتصال ( ترابط ) عبارات التحكم , تسمى هذه الطريقة بالتداخل ( nesting). وهي الطريقة التي تكون فيها عبارات التحكم الواحدة داخل الإخرى.

خلاصة : يتكون كود الـ C++ من ثلاث أنواع من عبارات التحكم , تكون مرتبة بطريقتين , التداخل والترزيم ( nesting & stacking).

ومن الممكن أن يحتوي البرنامج على عبارات التحكم السبعة جميعها ( المتسلسلة , if , if .. else , switch, for, while , do .. while ).

انتهت المحاضرة .

تم تعديل هذه المشاركة بواسطة BjarneStudent في 25 نوفمبر 2007 في 10:16

وليس يبني العلا الا نديٌ ووغى , همـا المعارج للأسنى من الرتب

#2

السلام عليكم ,,

هذا الدرس جميل جداً و خصوصاً الكلام حول الخوارزميات ,,

تحياتي ,,

#3

مشكور

شرح رائع

لكن فيني أسئلة طريقة UML استعاملك فيها عن طريق

;

Rational Rose

يعني متلا انا عندي كلاسات معينة وحابة امتلها باRational Rose كيف أعملها

ممكن تفيدني بها الموضوع

والله يعطيك العافية

#4
Khaled.Alshaya كتب:
السلام عليكم ,,

هذا الدرس جميل جداً و خصوصاً الكلام حول الخوارزميات ,,

تحياتي ,,

سعيد بحضورك

جزيل الشكر

نور الوجود كتب:
مشكور

شرح رائع

لكن فيني أسئلة طريقة UML استعاملك فيها عن طريق

;

Rational Rose

يعني متلا انا عندي كلاسات معينة وحابة امتلها باRational Rose كيف أعملها

ممكن تفيدني بها الموضوع

والله يعطيك العافية

العفو اختي

بالنسبة للـ Rational rose

هذا الطريقة في الـ UML تستخدم للبرامج الكبيرة , وذلك لتحليل النظام , وهناك برنامج يقوم بتمثيل الأنظمة البرمجية ( البرامج التي تحتوي على أصناف كثيرة ) إلى مخطط عبارة

عن نماذج UML.

هذا البرنامج يمكنك البحث عنه إذا كان لديك أصناف ( كلاسات ) تريدين تمثيلها بالـ UML, اسم هذا البرنامج rational rose , وأعتقد أن حجمة يفوق

الـ 200 ميقابايت.

وليس يبني العلا الا نديٌ ووغى , همـا المعارج للأسنى من الرتب

#5

درس موفق ومميز كما عودتنا

جزاك الله خير.

tvquran_6.gif

#6

السلام عليكم ورحمة الله وبركاته

اشكرك كل الشكر على هذا الشرح المنسق.

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

ولدي أستفساراً

1/ بخصوص المحاضرات السابقة . أين أضع الأسئلة بخصوصهما ؟

2/أنا قمت بتنزل Microsoft Visual Studio.Net بصراحة تايه فيه :wacko:

أفـتـح أي من هـؤلاء ؟؟

121sy6.jpg

ولقد قمت بقتح win32 project مرة و win32 console Applicationمرة . وبعد كتابة البرنامج تلك تظهر في المفسر

1>------ Build started: Project: Enter, Configuration: Debug Win32 ------
1>Compiling...
1>Enter.cpp
1>d:\projects\enter\enter\enter.cpp(27) : fatal error C1010: unexpected end of file while looking for precompiled header. Did you forget to add '#include "stdafx.h"' to your source?
1>Build log was saved at "file://d:\Projects\Enter\Enter\Debug\BuildLog.htm"
1>Enter - 1 error(s), 0 warning(s)
========== Build: 0 succeeded, 1 failed, 0 up-to-date, 0 skipped ==========

وتظهر عند تنفيذ كل برنامج ولا أعرف السبب :(

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

errors1wu7.gif

شـكـراً

ووو

دمت في رعاية الله :)

eteba3.png

(قل إن كنتم تحبون الله فاتبعوني يحببكم الله)

#7

من اجل تنفيذ الامثلة في الدروس اتبع مايلي:

File → New → Project → General → Empty Project.

ثم اكتب اسم المشروع الذي ترغبه.

ثم اختر من القائمة

View → Solution Explorer → Source File → Add → New Item →C++ File (.CPP)

ثم سم الملف بالاسم الذي ترغبه

بعد ذلك أكتب الكود ثم اضغط على كنترول و اف خمسة.

tvquran_6.gif

#8

السلام عليكم ورحمة الله وبركاته

اشكرك عزيزي arabi2013 علي تعاونك .

ولقد قمت بتنفيذ الخطوات التي ذكرتها .

والنتيجة

1>------ Build started: Project: project 1, Configuration: Debug Win32 ------
1>Compiling...
1>project name.cpp
1>.\project name.cpp(1) : error C2059: syntax error : 'constant'
1>.\project name.cpp(3) : error C2014: preprocessor command must start as first nonwhite space
1>.\project name.cpp(7) : error C2143: syntax error : missing ';' before '{'
1>.\project name.cpp(7) : error C2447: '{' : missing function header (old-style formal list?)
1>Build log was saved at "file://c:\Documents and Settings\BOS\My Documents\Visual Studio 2005\Projects\project 1\project 1\Debug\BuildLog.htm"
1>project 1 - 4 error(s), 0 warning(s)
========== Build: 0 succeeded, 1 failed, 0 up-to-date, 0 skipped ==========

وأيضا ظهرت رسالة الخطأ السابقة !!!!

eteba3.png

(قل إن كنتم تحبون الله فاتبعوني يحببكم الله)

#9

في مشاركتك الاولى المصرف يخبرك انك لم تضيف السطر #include "stdafx.h"'

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

اما بالنسبه لرسائل الخطاء في مشاركتك الاخيرة يبدو انك نسيت في احد الاسطر العلامة ";"

tvquran_6.gif

#10
اقتباس
وهذا يتطلب منك اضافه الهد السابق.

ما معني إضافة الهد ؟؟

وللأسف قد جربت أكثر من برنامج . ولكن نفس الأخطاء تظهر ؟!!

بمعني أن السبب ليس في نسان الفاصلة المنقوطة . والله أعلم

تم تعديل هذه المشاركة بواسطة HUNTER OF THE DREAMS في 29 نوفمبر 2007 في 18:51

eteba3.png

(قل إن كنتم تحبون الله فاتبعوني يحببكم الله)

#11
HUNTER OF THE DREAMS كتب:

السلام عليكم ورحمة الله وبركاته

اشكرك عزيزي arabi2013 علي تعاونك .

ولقد قمت بتنفيذ الخطوات التي ذكرتها .

والنتيجة

1>------ Build started: Project: project 1, Configuration: Debug Win32 ------
1>Compiling...
1>project name.cpp
1>.\project name.cpp(1) : error C2059: syntax error : 'constant'
1>.\project name.cpp(3) : error C2014: preprocessor command must start as first nonwhite space
1>.\project name.cpp(7) : error C2143: syntax error : missing ';' before '{'
1>.\project name.cpp(7) : error C2447: '{' : missing function header (old-style formal list?)
1>Build log was saved at "file://c:\Documents and Settings\BOS\My Documents\Visual Studio 2005\Projects\project 1\project 1\Debug\BuildLog.htm"
1>project 1 - 4 error(s), 0 warning(s)
========== Build: 0 succeeded, 1 failed, 0 up-to-date, 0 skipped ==========

وأيضا ظهرت رسالة الخطأ السابقة !!!!

ولو أنه يبدو ان لديك اخطاء نصية في كتابة الكود ( لا يوجد اخطاء في استخدامك للمحرر ).

انا انصحك بإستخدام المترجم المعتمد في الدورة , من هنا

وليس يبني العلا الا نديٌ ووغى , همـا المعارج للأسنى من الرتب

#12

السلام عليكم ورحمة الله وبركاته

أشكر تعاونك وجزيت الجنه بما تقدم

أستطعت إدراك ما مر إلي الأن بفضل الله . ومجهودك وصبرك معنا .

دمت طيبا إن شاء الله ً .

eteba3.png

(قل إن كنتم تحبون الله فاتبعوني يحببكم الله)

هذا الموضوع مغلق.

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