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

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

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

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

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

1- كتابة اول برنامج.

2- كتابة برنامج أخر يقوم بجمع عددين صحيحين.

3- مفاهيم في الذاكرة.

4- الحساب.

5- اتخاذ القرار : المساواة والمقارنات العلائقية.

بسم الله نبدأ

عند بناء أي نظام أو تطبيق برمجي ( برنامج ) فإننا سوف نقوم بتحليله ومن ثم تصميمه وم ثم برمجته.

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

وهناك أيضا بعض الشرح للعمليات الرياضية ومفاهيم الذاكرة.

أول برنامج في الـ C++ , طباعة سطر من النص.

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

 
1  // Fig. 2.1: fig02_01.cpp
2  // Text-printing program.
3  #include <iostream> // allows program to output data to the screen
4
5  // function main begins program execution
6  int main()
7  {
8	 std::cout << "Welcome to C++!\n"; // display message
9
10	 return 0; // indicate that program ended successfully
11
12  } // end function main

السطرين ( 1,2 ) :

 // Fig. 2.1: fig02_01.cpp
// Text-printing program.

نلاحظ في بداية هذين السطرين العلامتين ( // ) وهي تعني أن ما يأتي بعدها إلى نهاية اسطر يعتبر تعليق وسوف يتجاهلة

المترجم تماما. والتعليقات مهمة في توضيح عمل البرنامج وجعله مفهوم عند عمليات الصيانة والتطوير.

السطر ( 3 ) :

يعتبر السطر كاملا سطر موجه للمعالج الأولي وذلك لأنه ابتدأ بالعلامة #.

الـــ include <iostream> هي الأمر الموجه للمعالج وهو يقول له : " ضمن محتويات الملف <iostream> في البرنامج "

ويسمى الملف < iostream > بالـheader file أي ملف الرأس , وهذا الملف ضروري عندما نريد أن نقرأ البيانات وعندما

نريد أن نطبع على الشاشة.

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

نسيان الـ # أو السطر بكاملة , وهذا يلود خطأ للمترجم. وذلك لأن المترجم لم يتعرف على الـ cout أو الـ cin ( احد كائنات الإدخال

والإخراج ).

السطر ( 6 ) :

 int main()

الدالة الرئيسية , جزء أساسي من كل برنامج. والأقواس هذه تعني أن الـ main عبارة عن قطعة بناء تسمى الدالة ( function ).

برنامج الـ C++ عادة ً ما يتكون من دالة واحدة على الأقل , ودالة رئيسية على الأكثر.

عندما يبدأ التنفيذ لأي برنامج فإنه يبحث عن هذه الدالة لكي يبدأ التنفيذ منها ولا يشترط أن تكون هذه الدالة في بداية البرنامج

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

السطر ( 7 ) :

{

( { ) ويسمى قوس اليسار , أو قوس الفتح , وهو يشير إلى بداية جسم الدالة, وينتهي عند السطر ( 12 ) , } , قوس اليمين

, او قوس الإغلاق , وهو يشير إلى نهاية جسم الدالة.

السطر ( 8 ) :

std::cout << "Welcome to C++!\n"; // display message

من بداية السطر إلى الفاصلة المنقوطة يسمى " عبارة " , وتشير الفاصلة المنقوطة إلى نهاية العبارة والسطر بأكملهيخبر الكمبيوتر بأن يؤدي عملية إخراج الرسالة مابين علامتي التنصيص على الشاشة. مابين علامتي التنصيص يسمى

في كثير من الاحيان سلسلة حرفية literal string او سلسلة string أو رسالة message وفيما يلي شرح السطر بالتفصيل :

Std :: cout :الـ namespaces std هي مساحة اسماء تحتوي على الكثير من الأسماء مثل ( cout, cin, endl ... الخ ),

والجزء يعني أننا نستخدم إسم ( وهو في هذه الحالة cout ) الذي ينتمي إلى مساحات الأسماء std. ولا ننسى أن هذا الجزء

عبارة عن كائن.

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

اتجاه هذه العلامة يكون بإتجاه ذهاب البيانات ( هل هو اخراج أم ادخال ).

" welcome to C++ \n " : وهي الرسالة التي سوف تظهر على الشاشة. ( \n ) لن تطبع على الشاشة شكليا, بل سوف

يتم القفز إلى السطر الجديد عن طريقها. ( \ ) تسمى رمز هروب والحرف n يوحد معه ليشكل سلسلة هروب لسطر جديد.

وفيما يلي قائمة من سلاسل الهروب :

post-133999-1193400343_thumb.jpg

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

نسيان الفاصلة المنقوطة في آخر العبارة سوف يولد خطأ عند تصحيح البرنامج ( خطأ ترجمة ).

السطر ( 10 ) :

return 0; // indicate that program ended successfully

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

في الفصول القادمة.

السطر ( 12 ) :

  }

إغلاق جسم الدالة الرئيسية.

لممارسة برمجية جيدة :

طباعة سطر أخر الدالة لتأكيد انتهاء ادالة والإنتقال لدالة جديدة.

ترك فراغ عند بداية السطر بعد فتح قوس الإبتداء للدالة ويفضل ترك ثلاث فراغات.

تعديل بسيط على البرنامج السابق .

 




1  // Fig. 2.3: fig02_03.cpp
2  // Printing a line of text with multiple statements.
3  #include <iostream> // allows program to output data to the screen
4
5  // function main begins program execution
6  int main()
7  {
8	 std::cout << "Welcome "; 
9	 std::cout << "to C++!\n";
10
11	 return 0; // indicate that program ended successfully
12
13  } // end function main

عندما نبدل السطر ( 8 ) في البرنامج الأول بالسطرين التاليين في البرنامج الثاني فإنه ( البرنامج الثاني ) سوف يطبع الجملة في بنفس الطريقة السابقة.

مع ملاحظة وضع الفراغ بعد كلمة welcome .

تعديل آخر , عندما نستبدل السطر ( 8 ) بالسطر :

std::cout << "Welcome\nto\n\n C++!\n";

فإن البرنامج سوف يطبع الجملة في ثلاث سطور والسبب يرجع لإدراج سلسلة الهروب لسطر جديد ثلاث مرات.

جربوا ذلك .

برنامج جمع عددين

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

كائن الإدخال std :: cin وعامل الإستخلاص >> . ومن ثم جمع هذين العددين وطباعة النتيجة على الشاشة

عن طريق كائن الإخراج std :: cout .

 



 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 إلى 7 ( :

تم شرحها في برنامجنا السابق.

السطور ( 9, 10, 11 ) :

9

	 int number1; // first integer to add  
10	 int number2; // second integer to add 
11	 int sum; // sum of number1 and number2

عمل تصريح أو إعلان عن ثلاث متغيرات sum, number1, number2 .

المتغير ما هو إلا مكان في ذاكرة الكمبيوتر يتم تخزين قيمة معينة لإعادة استخدامها فيما بعد.

التصريح يقول في هذه السطور : " قم بإنشاء ثلاثة متغيرات من نوع أعداد صحيحة int اسماؤها كالتالي

sum, number1, number2 ". فهذا يعني أن هذه المتغيرات تحتوي على أعداد صحيحة مثل ( 0, -11 ,

7 , 6938073 ).

عندما نصرح عن متغير ما يجب ان نسميه ونحدد نوعه. في صياغة أخرى , قبل أن نستخدم أي متغير في البرنامج يجب

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

محدد.

ويمكنك أيضا أن تعرف كل المتغيرات في سطر واحد. فيمكن كتابتها بهذا الشكل :

int sum ,number1, number2;

بعض المبرمجين يقومون بوضع كل تصريح في سطر , وذلك لتسهيل التعليق عليها.

لممارسة البرمجة بشكل جيد :

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

سطر , وذلك لتسهيل التعليق عليها.

أيضا هناك أنواع اخرى من البيانات , ومنها النوع double الذي يمثل الأعداد الحقيقية , والنوع char الذي يمثل الرموز,

وأنواع أخرى.

هذه الأنواع الثلاثة ( int, double, char ) تسمى بالأنواع الرئيسية , أو الأنواع البدائية , الأنواع المضمنة أو الضمنية.

عندما نسمي متغير فيجب أن نضع في إعتبارنا عدة امور , أهمها :

1- ان يكون خليط من حروف وارقام , بالإضافة إلى الشرطة السفلية ( لا يتجاوز ذلك ).

2- أن لا يكون من الأسماء المحجوزة ( الكلمات المفتاحية ) مثل ( class, int, char .. الخ ).

3- أن لغة الـ C++ لغة شديدة الحساسية , أي أنه لو اختلف حرف واحدفي المتغير فسوف يعتبر متغير آخر

, أي أن a1 ليست كالـ A1 .

فكرة برمجية مفيدة :

ليس هناك طول محدد للمعرف في الـ C++, ولكن ربما التطبيق أو البرنامج الذي تعمل عليه يفرض عليك طول معين.

استخدم معرِّف بـ 31 رمز أو اقل لتحقيق النتقلية.

لممارسة برمجية جيدة :

أختر اسم ذا معنى وتجنب استخدام الإختصارات , وذلك لجعل قراءة البرنامج مفهومة اكثر, وتجنب دائما الاسماء التي تبدا

بخط سفلي طويل وذلك لعدم التشويش بينها وبين مسميات الـ C++ عند عملية الترجمة.

لمنع حدوث الأخطاء :

يجب علينا تجنب الأسماء التي من الحتمل أن تصبح كلمات محجوزة في المستقبل, مثل كلمة object ومن في نفس حالتها, فإن

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

السطر ( 14 ) :

14	 std::cin >> number1; // read first integer from user into number1

استخدمنا كائن الإدخال cin وهو اسم من اسماء مساحة الأسماء std واستخدمنا ايضا عامل الإستخلاص >> لأخذ القيمة من

لوحة المفاتيح. يقوم الكائن std :: cin بأخذ القيمة من المستخدم وتخزينها في المتغير الذي يلي عامل الإستخلاص >> .

لمنع حدوث الاخطاء :

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

كيف تحدث عملية الإسناد في السطر ( 14 ( ؟

عند تنفيذ البرنامج يقف سير التنفيذ عن هذا السطر ومن ثم ينتظر المستخدم بأن يقوم بعملية الإدخال ,يستجيب المتستخدم

بطباعة عدد صحيح ( الكمبيوتر يتعبره رمز ) , ثم يضغط مفتاح الإدخال enter لإرسال الحرف للكمبيوتر. يقوم الكمبيوتر

بتحويل تمثيل الرمز إلى عدد صحيح ومن ثم يقوم بإسناد نسخة منه للمتغير number1 . وبعد ذلك يشير الـ number1 إلى

هذه القيمة المدخلة في بقية البرنامج.

السطر ( 19 ) :

19	 sum = number1 + number2; // add the numbers; store result in sum

عملية حاصل اسناد حاصل جمع العددين number1 و number2 للمتغير sum .

تسمى العمليتيين ( + , = ) عمليات ثنائية , أ ي أن كل عملية تحتوي على معاملين , في عملية الـ + المعاملان هما ( number1,

numbe2 ) , وفي عملية الـ = فإن المعاملان هما ( حاصل جمع العددين , المتغير sum ). وذكرنا فيما سبق أن السطر بأكمله

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

لممارسة برمجية جيدة :

ضع فراغ إلى كل جانب من جوانب العملية الثنائية. على سبيل المثال , اكتب sum = number1 + number2 بدلا من

Sum=number1+number2 , وذلك من أجل ترتيب البرنامج ووضوحه.

السطر ( 21 ) :

21	 std::cout << "Sum is " << sum << std::end1; // display sum; end line

هي تقريبا عمليتين في سطر واحد , طباعة قيمة عدد صحيح وطباعة متسلسلة حرفية ( القيمة هي sum والمتسلسلة هي sum is ).

هناك اسم جديد من أسماء مساحة الأسماء std وهو الـ endl وهو يقوم بطباعة سطر جديد.

يمكن أن يكتب السطرين ( 19, 20 ) في سطر واحد بالشكل التالي :

 

 std::cout << "Sum is " << sum << std::endl; // display sum; end line

وبهذه الطريقة نستغني عن التصريح عن المتغير sum .

مفاهيم في الذاكرة

المتغيرات sum, number1, number2 هي عبارة عن مواقع في الذاكرة. كل متغير له إسم وحجم وقيمة ونوع. في

برنامج جمع عددين , في السطر ( 14 ) في العبارة : std :: cin >> number1 ;

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

المدخل الأول في البرنامج يكون موقعة number1 .

الرسم التالي للتوضيح :

post-133999-1193400354_thumb.jpg

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

هذه المواقع لا يشترط ان تكون متجاورة في الذاكرة فيمكن أن تكون متفرقة.

في عملية الجمع والإسناد : sum = number1 + number2 لا تتغير القيم number1 , number2 . بل الذي يتغير

هو محتوى الـ sum .

طريقة الحساب

معظم البرامج تقوم بعمليات حسابية. الشكل التالي يلخص العمليات الحسابية في الـ c++ :

post-133999-1193400363_thumb.jpg

لاحظ استخدام رموز خاصة لم تستخم في الجبر. علامة النجمة ( * ) تشير للضرب , وعلامة النسبة

المئوية ( % ) تشير إلى باقي القسمة وتسمى الـ modulus التي سوف يتم شرحها بإختصار.

في عملية القسمة هناك نقطة جديرة بالإشارة إليها وهي , عند عملية قسمة العدد الصحيح ( البسط والمقام اعداد صحيحة )

يكون ناتج القسمة عدد صحيح. على سبيل المثال التعبير 7/4 يعني ناتج 1 والتعبير 17/5 يعطي الناتج 3 . وذلك لأن

الأجزاء والكسور في ناتج القسمة سوف يتم طرحهما من الناتج.

يجب أن يكون المعاملين للعملية % أعداد صحيحة. التعبير x/y ينتج عنه باقي القسمة من x/y . أيضا 7%4 ينتج عنه

العدد 3 , والـ 7%5 ينتج عنه الناتج 2.

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

محاولة استخدام الـ % مع معاملات ليست اعداد صحيحة سوف يولد خطأ في الترجمة.

التعبيرات الحسابية في خط مستقيم :

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

المثال العملي post-133999-1193405868_thumb.gif حتى تنفذ على البرنامج يجب كتابتها بالشكل a/b .

الأقواس لتجميع التعبيرات المتفرعة :

الأقواس في لغة الـ C++ تأخذ الشكل نفسه في التعبير الجبري , مثلا , لضرب المقدار c+b بعدد a , نكتبه بالشكل التالي :

a * ( a + b ) .

ترتيب الأوليات في التعبيرات الحسابية :

الـ C++ تطبق العمليات في التعبيرات الرياضية في سلسلة وترتيب دقيق محدد بقواعد أولوية مسبقة. وهذا التطبيق يكون

بالترتيب التالي :

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

2- ثانيا, عمليات الـ ( %, /, * ) تأتي بعد الأقواس ولها نفس المستوى , وعند تتواليها في عملية حسابية تطبق من اليسار لليمين.

3- ثالثا , عمليات الـ ( +, = ) تأتي بعد العمليات السابقة في التنفيذ. ايضا إذا اتت بشكل متعاقب فإنها تطبق من اليسار لليمين.

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

لليمين أو العكس , فإننا نشير هنا إلى الترابطية associativity .

وفيما يلي قائمة بالعمليات الحسابية وأولويات تنفيذها :

post-133999-1193400374_thumb.jpg

تعبير جبري ومقابله في الـ C++ :

الجبري post-133999-1193405201_thumb.gif

الـ C++ m = ( a + b + c + d + e ) / 5 الأقواس ضرورية هنا.

لنوضح ترتيب التنفيذ في معادلة معينة, لنأخذ العملية التالية ( z = pr % q + w / x – y ) فإن ترتيب التنفيذ

سوف يكون بالشكل التالي :

post-133999-1193400385_thumb.jpg

أيضا سوف نرى الأولويات في المعادلة من الدرجة الثانية ( post-133999-1193405210_thumb.gif) تكون بالشكل التالي :

post-133999-1193402653_thumb.jpg

بالرسم التوضيحي سوف نوضح طريقة الحصول على النتيجة من تطبيق الأولية الحصيحة على معادلة :

post-133999-1193400396_thumb.jpg

اتخاذ القرار : المساواة والمقارنات العلائقية

سوف نقدم تحت هذا العنوان أداة مهمة في الـ C++ وهي العبارة الشرطية ( if ). وعن طريقها يمكن للبرنامج أن

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

نستخدم أثناء العبارة الشرطية ( if ) بعض عمليات المقارنة , اختصرناها في الشكل التالي :

post-133999-1193400406_thumb.jpg

كلها لها نفس الأولوية وترابطيتها من اليسار لليمين.

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

لا تضع أي فراغ خلال عمليات المقارنة ( ==, !=, >= .. الخ ) أو أن تقوم بعكس ترتيبهما ( كأن تكتب != بدلا من =! ) فإن

ذلك يؤدي إلى خطأ نصي.

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

عدم التفريق بين الـ = والـ == , فالاولى عملية اسناد , والثانية عملية مقارنة , والنتيجة خطأ منطقي.

فيما يلي سوف نشرح برنامج يحتوي على ست عمليات مقارنة.

1  // Fig. 2.13: fig02_13.cpp
2  // Comparing integers using if statements, relational operators
3  // and equality operators.
4  #include <iostream> // allows program to perform input and output
5
6  using std::cout; // program uses cout
7  using std::cin;  // program uses cin 
8  using std::endl; // program uses endl
9
10  // function main begins program execution
11  int main()
12  {
13	 int number1; // first integer to compare
14	 int number2; // second integer to compare
15
16	 cout << "Enter two integers to compare: "; // prompt user for data
17	 cin >> number1 >> number2; // read two integers from user
18
19	 if ( number1 == number2 )					   
20		cout << number1 << " == " << number2 << endl;
21
22	 if ( number1 != number2 )
23		cout << number1 << " != " << number2 << endl;
24
25	 if ( number1 < number2 )
26		cout << number1 << " < " << number2 << endl;
27
28	 if ( number1 > number2 )
29		cout << number1 << " > " << number2 << endl;
30
31	 if ( number1 <= number2 )
32		cout << number1 << " <= " << number2 << endl;
33
34	 if ( number1 >= number2 )
35		cout << number1 << " >= " << number2 << endl;
36
37	 return 0; // indicate that program ended successfully
38
39  } // end function main

السطور ( من 6 إلى 8 ) :

 




using std::cout; // program uses coutusing std::cin;  // program uses cinusing std::endl; // program uses endl

استخدمنا التصريح using الذي يزيل الحاجة إلى إعادة استخدام البادئة std :: في البرنامج. أي انه بعد نستخد cin

, cout مباشرة بدلا std :: cout , std :: cin في , نكتبها مره في بداية البرنامج ونوفر جهد استخدامها بشكل متكرر

في باقي البرنامج.

لممارسة برمجية جيدة :

وضع using مباشرة بعد #include .

السطور ( 13, 14 ) :

13	 int number1; // first integer to compare
14	 int number2; // second integer to compare

الإعلان عن المتغيرات في البرنامج.

السطور ( 19, 20 ) :

19	 if ( number1 == number2 )					   
20		cout << number1 << " == " << number2 << endl;

مقارنة القيم number1, number2 لفحص شرط المساواة. إذا القيمتين متساويتين , العبارة في السطر 20 سوف تنفذ.

واذا لم يتحقق الشرط لا تنفذ العملية وينتقل التنفيذ إلى السطور التالية في البرنامج وتطبق باقي المقارنات.

لاحظ أن كل عبارة شرطية في برنامجنا هذا لديها عبارة واحد في التنفيذ, اذا احتوى الشرط أكثر من عبارة ( أكثر من فاصلة

منقوطة ) فإن جسم العبارة الشرطية يجب أن يبدأ بالقوس { وينتي بالـ } . يسمى ما بين القوسين بالقطعة ( block ).

لممارسة برمجية جيدة :

لتسهيل القراءة لا تستخدم اكثر من عبارة شرطية في كل سطر.

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

وضع فاصلة منقوطة مباشرة بعد اقواس العبارة الشرطية على اليمين كما يلي : if ( ~ ) ; فإن ذلك سوف يجعل الشرط

فارغ وجملة الشرط سوف تنفذ في كل الحالات.

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

في المرفقات اسئلة الواجب وسؤالين للتحدي

من لدية اي سؤال في المحاضرة أو في اسئلة الواجب فلا يتردد , اما سؤالي التحدي , فالنقاش فيهم يتم بعد نهاية فرصة تسليم الواجب وهي يوم الثلاثاء من الإسبوع القادم.

exercises.zip

تم تعديل هذه المشاركة بواسطة BjarneStudent في 27 أكتوبر 2007 في 09:41

1

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

#2

لمن ليس لدية البرنامج , أو من يريد معرفة الخطوات الأولى في تحرير برنامج وتنفيذه , أو من يريد معرفة بيئة تطوير البرنامج

أو جميع ما سبق , زيارة الرابط

كتابة برنامج وتنفيذه وشرح بيئة التطوير ومراحل التنفيذ

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

#3

شرح ولا اجمل

شكرا لك .

زادك الله من العلم والرزق.

الواجب سوف ارسله على الخاص ان شاء الله.

tvquran_6.gif

#4
arabi2013 كتب:
شرح ولا اجمل

شكرا لك .

زادك الله من العلم والرزق.

الواجب سوف ارسله على الخاص ان شاء الله.

العفو ,وأنا ايضا اشكرك على الإهتمام والمتابعة

أتمنى ان يحل الواجب على شكل ملف تطبيق C++ ومن ثم جمع الملف , أو جمع جميع ملفات البرامج المحلولة وضغطها ومن ثم رفعها إلى مركز تحميل وإرسال الرابط

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

#5

عمل جميل جداً..

أنا إن شاء الله سوف أشتري سيدي البرنامج وأنزله(لأنو حجمه من الرابط 67ميغا يعني بدو شي أسبوع ليتحمل معي..!!) ثم أقرأ موضوعك :كتابة برنامج وتنفيذه و..

ثم أقرأ هذه المحاضرة وإذا في أسئلة أحلها

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

#6
أسامة 90 كتب:
عمل جميل جداً..

أنا إن شاء الله سوف أشتري سيدي البرنامج وأنزله(لأنو حجمه من الرابط 67ميغا يعني بدو شي أسبوع ليتحمل معي..!!) ثم أقرأ موضوعك :كتابة برنامج وتنفيذه و..

ثم أقرأ هذه المحاضرة وإذا في أسئلة أحلها

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

ابحث عن DVC++ ............ممتاز لك

#7
أسامة 90 كتب:
(لأنو حجمه من الرابط 67ميغا يعني بدو شي أسبوع ليتحمل معي..!!)

حجم الملف بعد فك الضغط 260ميقابايت تقريبا , وأعتقد ان الـ 67 ميقابت لن تحتاج أكثر من الثلاث ساعات لمن لديه سرعة اتصال عادية

جرب ان تحمله

نريد أن نرى تطبيقك قبل أن نبدأ في الفصل الثالث

اتمنى لك التوفيق

خليفه المنصوري كتب:
ابحث عن DVC++ ............ممتاز لك

اخي المنصوري , اشكر لك المتابعة والمساعدة

تم تعديل هذه المشاركة بواسطة BjarneStudent في 27 أكتوبر 2007 في 18:54

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

#8

أخي arabi2013جميع الحلول وصلتني , وهي رائعة وكاملة ولكن لا أرى حلا للسؤال الثالث , يبدو انه سقط سهوا

هناك ملاحظة على سؤال التحدي الأول : فكرة الحل كانت صحيحة 100% وحلك يكفي ولكن المطلوب في السؤال هو فقط , معرفة هل العدد الأول مضاعف الثاني فقط , وليس مطلوب معرفة هل العدد الثاني مضاعف الأول , ولكنه شي إضافي

اشكرك على المتابعة الرائعة

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

#9

تطرقنا في المحاضرة لعدة تقنيات مهمة في السي ++

, من لديه تساؤل أو فكرة , أو يبدو له أدنى غموض في أي برنامج حول هذه التقنيات , فالمشاركة مفتوحة لذلك , وانا في انتظار اسئلتكم

البراعة في السي++ تكمن في كتابة البرامج وتعدد الأفكار والحلول , والتدريب المستمر على تنفيذ البرامج وتتبعها

تم تعديل هذه المشاركة بواسطة BjarneStudent في 27 أكتوبر 2007 في 19:06

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

#10

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

بالنسبه للدرس واضح جدا و اسلوبك في عرضه رائع اتمنى ان يساعدك الله عزوجل وتكمل معنا الى اقصى حد تستطيعه.

tvquran_6.gif

#11
arabi2013 كتب:
أخي BjarneStudent نعم راجعت الملفات الان وواضح انه صار لخبطه في حفظ الملفات ووجدت ان السؤال الثالث غير مرفق لكن بمشئية الله غدا ساكتب الحل وارسله.

بالنسبه للدرس واضح جدا و اسلوبك في عرضه رائع اتمنى ان يساعدك الله عزوجل وتكمل معنا الى اقصى حد تستطيعه.

إن شاء الله

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

#12

يعني سؤال:

هلأ مثلا الكود الأول أو أي كود يجب أن نكتبه كله من أوله إلى آخره؟؟

يعني ما في جزء منه بيكون مكتوب في البرنامج مثلاً؟؟

وما فهمنا أول كود هل كله كود يعني ولا في شي ثابت يكتب في كل الأكواد؟؟

#13
أسامة 90 كتب:
يعني سؤال:

هلأ مثلا الكود الأول أو أي كود يجب أن نكتبه كله من أوله إلى آخره؟؟

الغالب المشترك بين كل الأكود في لغة السي++ هو

#include <iostream>

وذلك لأن معظم برامج السي++ ( إن لم يكن جميعها ) تستخدم كائنات الإدخال والإخراج.

ودالة المين رئيسية في كل برنامج سي++ , فهي أول ما ينفذ البرنامج.

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

#14

الآن أخي الكريم أنا أقرأ وأرى الأوامر تختلف

هل هو بسبب استخدامي للبورلاند الاصدار الخامي

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

سؤال هل سأستفيد من دروسكم ؟؟

#15

يسلمو اخي

شرح رائع ومفصل

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

لكن لما حملت لحتي أحل التمرين ما فتح معي شو الملف اللي مستخدمه

صراحة انا ما بشتغل عالفيجوال بشتغل علي TC

#16

حلول التمارين لهذه المحاضر .

إجابة السؤال الأول :

#include<iostream>
using std::cout;
int main()
{
	cout <<"*********		 ***			 *			 *\n";
	cout <<"*	   *	   *	 *		  ***		   * *\n";
	cout <<"*	   *	  *	   *		*****		 *   *\n";
	cout <<"*	   *	  *	   *		  *		  *	 *\n";
	cout <<"*	   *	  *	   *		  *		 *	   *\n";
	cout <<"*	   *	  *	   *		  *		  *	 *\n";
	cout <<"*	   *	  *	   *		  *		   *   *\n";
	cout <<"*	   *	   *	 *		   *			* *\n";
	cout <<"*********		 ***			 *			 *\n";

	return 0;
}

إجابة السؤال الثاني :

#include<iostream>
using std::cout;
using std::cin ;
int main()
{
	int r;
	cout<<"please Enter radius of a circle\n";
	cin>>r;
	cout<<"\n";
	cout<<"the circle diameter ="<<2*r<<"\n";
	cout<<"the circle circumference ="<<2*r*3.14<<"\n";
	cout<<"the area of circle ="<<r*r*3.14<<"\n";



	return 0;
}

جواب السؤال الثالث :

#include <iostream>

using namespace std;


int main () {

	int num1, num2, num3, largest, smallest, sum, avg, prod;

	cout << "Enter three numbers: ";
	cin >> num1 >> num2 >> num3;

	sum = num1 + num2 + num3;
	prod = num1 * num2 * num3;
	avg = sum / 3;

	cout << "the sum is : " << sum << endl;
	cout << "product is : " << prod << endl;
	cout << "the average is : " << avg << endl;



	largest = num1;
	if ( num2 > largest )
		largest = num2;

	if ( num3 > largest )
		largest = num3;
	cout << "the largest is : " << largest << endl;



		smallest = num1;
	if ( num2 < smallest )
		smallest = num2;

	if ( num3 < smallest )
		smallest = num3;
	cout << "the smallest is : " << smallest << endl;




	return 0;
}

جواب السؤال الرابع :

#include<iostream>
using std::cout;
using std::cin ;
int main()
{
	int  a;
	cout<<"Enter the integer : ";
	cin>>a;
	cout<<"\n";
	if((a%2)==0)
		cout<<"the integer is even : "<<a<<"\n";
   if((a%2)!=0)
	   cout<<"the integer is odd  : "<< a << "\n";

	return 0;
}

جواب السؤال الخامس :

#include<iostream>
using std::cout;
using std::cin ;
int main()
{
	int  a1;
	int  a2;
	int  a3;
	int  a4;
	int  a5;
	int  a6;
	int  a7;
	int  a8;
	int  a9;
	int  a10;
	cout<<"Enter nambur 10 : ";
	cin>>a1>>a2>>a3>>a4>>a5>>a6>>a7>>a8>>a9>>a10;
	cout<<"\n";
	cout<<"integer\t"<<"square\t"<<"cube\n";
	cout<<a1<<"\t"<<a1*a1<<"\t"<<a1*a1*a1<<"\n";
	cout<<a2<<"\t"<<a2*a2<<"\t"<<a2*a2*a2<<"\n";
	cout<<a3<<"\t"<<a3*a3<<"\t"<<a3*a3*a3<<"\n";
	cout<<a4<<"\t"<<a4*a4<<"\t"<<a4*a4*a4<<"\n";
	cout<<a5<<"\t"<<a5*a5<<"\t"<<a5*a5*a5<<"\n";
	cout<<a6<<"\t"<<a6*a6<<"\t"<<a6*a6*a6<<"\n";
	cout<<a7<<"\t"<<a7*a7<<"\t"<<a7*a7*a7<<"\n";
	cout<<a8<<"\t"<<a8*a8<<"\t"<<a8*a8*a8<<"\n";
	cout<<a9<<"\t"<<a9*a9<<"\t"<<a9*a9*a9<<"\n";
	cout<<a10<<"\t"<<a10*a10<<"\t"<<a10*a10*a10<<"\n";

	return 0;
}

جواب سؤال التحدي الأول :

#include <iostream>

using namespace std;

int main ()


{

int number1, number2;

cout << "Input the first number: ";
cin >> number1;

cout << "Input the second number: ";
cin >> number2;

if ( number1 % number2 == 0 )
cout <<" the first is multiple of second \n";
if ( number1 % number2 )
cout <<" the fist isn't multiple of second \n";

return 0;

}

جواب سؤال التحدي الثاني :

#include <iostream>

using namespace std;

int main ()


{

int number, digit1, digit2, digit3, digit4, digit5;

cout << "Input the first number: ";
cin >> number;

digit1 = number % 10;
number = number / 10;

digit2 = number % 10;
number  = number  / 10;

digit3 = number  % 10;
number  = number  / 10;

digit4 = number  % 10;
number  = number  / 10;

digit5 = number ;

cout <<" the number separated : "<< digit1 << "  " << digit2<<"  "<< digit3<< "  "<< digit4 << "  " << digit5 << endl;


return 0;

}

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

#17
التميمية كتب:
الآن أخي الكريم أنا أقرأ وأرى الأوامر تختلف

هل هو بسبب استخدامي للبورلاند الاصدار الخامي

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

سؤال هل سأستفيد من دروسكم ؟؟

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

هنا

وهاهنا

نور الوجود كتب:
يسلمو اخي

شرح رائع ومفصل

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

لكن لما حملت لحتي أحل التمرين ما فتح معي شو الملف اللي مستخدمه

صراحة انا ما بشتغل عالفيجوال بشتغل علي TC

مالذي لم تستطيعي تحميلة , البرنامج أم اسئلة التمارين ؟

تم تعديل هذه المشاركة بواسطة BjarneStudent في 4 نوفمبر 2007 في 14:33

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

#18

أخي الكريم

أنا حملت التمارين ونزله ع الجهاز وفكيت الضغط لكن التمرين نفسه ما فتح

#19

الملف الى مرفق من النوع docx وهو ملف وورد 2007 تنسيق جديد.

tvquran_6.gif

#20
نور الوجود كتب:
أخي الكريم

أنا حملت التمارين ونزله ع الجهاز وفكيت الضغط لكن التمرين نفسه ما فتح

الملف في المرفقات بصيغة .txt , يمكنك فتحة بالمفكرة

exercises.zip

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

#21

مشكور اخي

#22

اخي بارك الله فيك

لكن عندي ملاحظة بتريح الكثير من عناء كبير

وهو

بدل ما تكتب

using std::cout; 
using std::cin;  
using std::endl;

الخ

فقط بدون هالعملية اكتب بعد ما استدعي الهيدرز اللي بدي اياها :

using namespace std;

يعني لو بدي اعدل على احد الامثلة

4  #include <iostream> // allows program to perform input and output
5
6  using namespace std;
7  
8  
9
10  // function main begins program execution
11  int main()
12  {
13	 int number1; // first integer to compare
14	 int number2; // second integer to compare
15
16	 cout << "Enter two integers to compare: "; // prompt user for data
17	 cin >> number1 >> number2; // read two integers from user
18
19	 if ( number1 == number2 )					   
20		cout << number1 << " == " << number2 << endl;
21
22	 if ( number1 != number2 )
23		cout << number1 << " != " << number2 << endl;
24
25	 if ( number1 < number2 )
26		cout << number1 << " < " << number2 << endl;
27
28	 if ( number1 > number2 )
29		cout << number1 << " > " << number2 << endl;
30
31	 if ( number1 <= number2 )
32		cout << number1 << " <= " << number2 << endl;
33
34	 if ( number1 >= number2 )
35		cout << number1 << " >= " << number2 << endl;
36
37	 return 0; // indicate that program ended successfully
38
39  } // end function main
#23
نور الوجود كتب:
مشكور اخي

العفو نور الوجود

المظفر بالله كتب:
اخي بارك الله فيك

لكن عندي ملاحظة بتريح الكثير من عناء كبير

وهو

بدل ما تكتب

using std::cout; 
using std::cin;  
using std::endl;

الخ

فقط بدون هالعملية اكتب بعد ما استدعي الهيدرز اللي بدي اياها :

using namespace std;

يعني لو بدي اعدل على احد الامثلة

4  #include <iostream> // allows program to perform input and output
5
6  using namespace std;
7  
8  
9
10  // function main begins program execution
11  int main()
12  {
13	 int number1; // first integer to compare
14	 int number2; // second integer to compare
15
16	 cout << "Enter two integers to compare: "; // prompt user for data
17	 cin >> number1 >> number2; // read two integers from user
18
19	 if ( number1 == number2 )					   
20		cout << number1 << " == " << number2 << endl;
21
22	 if ( number1 != number2 )
23		cout << number1 << " != " << number2 << endl;
24
25	 if ( number1 < number2 )
26		cout << number1 << " < " << number2 << endl;
27
28	 if ( number1 > number2 )
29		cout << number1 << " > " << number2 << endl;
30
31	 if ( number1 <= number2 )
32		cout << number1 << " <= " << number2 << endl;
33
34	 if ( number1 >= number2 )
35		cout << number1 << " >= " << number2 << endl;
36
37	 return 0; // indicate that program ended successfully
38
39  } // end function main

اخي المظفر بالله

أهلا وسهلا بك , سعيد بطرحك.

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

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

ولكن هناك اعتبارات اخرى , مثل كمية الكود وسرعة الأداء.

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

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

الطريقة التي اقترحتها تحضر مساحة الأسماء بكاملها , وهذا يكلف ذاكرة ( في الكاش ) ووقت اضافي في التنفيذ فيما لو استخدما الطريقة المشروحة.

نحن لم نستخدم سوى ثلاث كائنات , cin و cout , endl.

ولتوضيح ذلك , نأخذ المثال لو أني طالب في ثالث ثانوي , ولدي 21 مادة مقررة , وتراني كل يوم أحضر جميع المواد - جميع الكتب

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

هذا التصرف لا يشكل مخالفة , ولكن هناك تصرف أفضل منه يوفر الجهد والوقت.

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

#24

مشكور حبيبي

بس سؤال؟؟

لمن اكتب رنامج في c++ وانهي بدي اعمل تجييك او اظهار الشاشة السؤداء حتى اعرف البرنامج صحيح او خطا ؟؟

بس الشاشة متطلع شو السبب؟؟؟

#25

اشكرك يا غالى على الدورة والحمد لله بدأت معك

وسأكمل بأذن الله تعالى:)

وانا اطبق اول برنامج دائما تظهر لى هذه الرسالة التى ازعجتنى كثيرا

الصورة بالمرفقات اتمنى انك تساعدنى فى ايجاد الحل فى اسرع وقت ممكن

post-88741-1198892549_thumb.jpg

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

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