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

سي بلس بلس من البدايه الي الاحتراف

مغلقرائج
بدأه البارودي في 7 فبراير 2005 · 167 رد · 20,167 مشاهدة · في المواضيع والدروس
مشاركة: واتساب X فيسبوك تيليجرام
#51

• الأسبقية: المعاملات الحسابية و العلاقة.

يمس البرنامج القادم علي سؤال أسبقية المعامل .

يولد السلسلة المشهورة للأعداد و التي تدعي السلسلة Fibonacci .

هنا نجد الأول مجموعة من شروط السلسلة:

1 1 2 3 5 8 13 21 34 55

كل مجموعة يتم إيجادها بإضافة الوحدة السابقة لها:

1+1 تكون 2 , 1+2 تكون 3 , 2+3 تكون 5 , 3+5 تكون 8 , وهكذا.

السلسلة Fibonacci لها التطبيقات في الحقول المتنوعة بشكل مدهش , من تصنيف الطرق في علم الحاسبات إلي عدد اللوالب في زهرة عباد الشمس.

احدي أكثر السمات المثيرة لسلسلة Fibonacci علاقتها إلي النسبة الذهبية.

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

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

هنا قائمة لملف FIBO.CPP :

#include<iostream.h>

int main()
{
	const unsigned long limit=4294967295;
	unsigned long next=0;
	unsigned long last=1;

	while(next<limit/2)
	{
  cout<<last<<" ";
  long sum=next+last;
  next=last;
  last=sum;
	}
	cout<<endl;
	return 0;
}

post-36368-1110442220_thumb.jpg

تم تعديل هذه المشاركة بواسطة البارودي في 10 مارس 2005 في 11:11

#54

ليك بناة معبد , تعطي نسبة الشرطين الأخيرين تقريب النسبة الذهبية مثل

0.618033988 - انتهاء بما فيه الكفاية للعمل الحكومي .

برنامج FIBO يستخدم النوع Unsigned long النوع الذي يحمل الأعداد الصحيحة الايجابية الأكبر .

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

نحن نعرف هذا الحد مثل النوع Const منذ أن كان لا يتغير. نحن يجب أن نتوقف عندما التالي يصبح اكبر من نصف الحد ما عدا ذلك المجموع سيتجاوز الحد.

يستعمل تعبير الاختبار نوعين من المعاملات:

(next < limit / 2)

نيتنا هي مقارنة next بنتيجة limit/2 ذلك حيث نريد أن تتم عملية القسمة قبل المقارنة. نحن يمكننا أن نضع قوسين حصر حول القسمة لضمان تنفيذها أولا.

(next < (limit / 2))

لكنا لسنا بحاجة إلي أقواس الحصر. لم لا؟

لان المعاملات الحسابية لها الأسبقية اعلي من المعاملات العلائقية.

هذا يضمن بان limit/2 سيتم تنفيذها قبل تنفيذ المقارنة. نحن سنلخص حالة الأسبقية لاحقا في هذا المستوي عدما ننظر إلي المعاملات المنطقية.

#55

• حلقة التكرار DO

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

مثالنا DIVDO يدعو المستخدم لإدخال رقمين: dividend ( الرقم الاعلي في القسمة) و divisor ( العدد السفلي).

ثم يحسب خارج القسمة quotient ( الجواب) و البقية remainder. باستخدام المعاملين / و % ثم يطبع الناتج.

#include<iostream.h>

int main()
{
	long dividend,divisor;
	char ch;

	do
	{
  cout<<"Enter dividend: "; cin>>dividend;
  cout<<"\n Enter divisor: "; cin>>divisor;
  cout<<"\n Quotient is "<<dividend/divisor;
  cout<<", remainder is "<<dividend%divisor;

  cout<<"\n Do another? (y/n): ";
 	 cin>>ch;
	}
	while(ch!='n');
	return 0;
}

post-36368-1110443151_thumb.jpg

تم تعديل هذه المشاركة بواسطة البارودي في 10 مارس 2005 في 11:28

#56

معظم هذا البرنامج يستقر ضمن حلقة التكرار DO .

أولا , الكلمة المحجوزة DO و التي تؤدي إلي بداية حلقة التكرار.

ثم , كما هو الحال مع حلقات التكرار الأخرى . تحدد أقواس الشيالات جسم حلقة التكرار "{}". في النهاية جملة While مزودة بتعبير الاختبار و إنهاء حلقة التكرار.

جملة While تبدوا كثيرا مثل التي في حلقة التكرار While ماعدا موقعها في نهاية حلقة التكرار و في الحقيقة تنتهي بفاصلة منقوطة ";"

( والتي من السهل نسيانها).

الشكل العام لحلقة التكرار DO في الشكل التالي:

post-36368-1110443958_thumb.jpg

#57

بعد كل عملية حسابيه يسال DIVDO المستخدم هل إذا كان يريد أن يجري العملية مرة أخري؟. لو كان كذلك المستخدم سيدخل الحرف ' y ' و تعبير الاختبار

ch != ‘n’

سيبقي true . إذا المستخدم ادخل الحرف ' n ' تعبير الاختبار سيصبح false و سينتهي عمل حلقة التكرار .

الشكل التالي يعرض مخطط لعمل حلقة التكرار DO .

post-36368-1110444183_thumb.jpg

#60

• عندما تستخدم أي حلقة تكرار.

نحن جعلنا بعض البيانات العامة حول كم حلقة تكرار استخدمت.

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

حلقتي التكرار While و Do يستخدمان عندما لا تكون عارف مسبقا متى ستنتهي حلقة التكرار ( حلقة التكرار While عندما أنت قد لا تريد تنفيذ جسم حلقة التكرار كل مرة و حلقة التكرار Do عندما تكون متأكد انك تريد تنفيذ جسم حلقة التكرار علي الأقل مرة ).

هذه المعايير إلي حد ما متحكمة جدا.

كل أنواع حلقات التكرار المستخدمة بتكون أكثر مسألة للأسلوب عن قواعد الصعوبة و السرعة . يمكنك في الحقيقة استخدام أي نوع من حلقات التكرار و التي تقريبا تعمل في أي موقف.

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

#61

• القرارات

القرارات في حلقات التكرار دائما تتعلق بنفس السؤال :

هل يجب أن نفعل ذلك ( جسم حلقة التكرار) مرة أخري؟

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

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

تحتاج البرامج أيضا لاتخاذ القرارات السابقة .

في البرامج القرارات تسبب عملية قفز إلي جزء مختلف من البرنامج اعتمادا علي قيمة تعبير .

القرارات يمكن أن تصمم في إل C++ بطرق متعددة .

الأكثر أهميه بيكون مع جملة " If…Else " و التي تختار بين بديلين . هذا التعبير يمكن أن يستخدم بدون إل Else . ببساطة مثل جملة If .

جملة القرار الأخرى , Switch , تنشئ فروع متعددة للبدائل المتعددة من الرموز , اعتمادا علي قيمة متغير واحد .

في النهاية المعاملات الشرطية تستعمل في الحالات الخاصة.

سنفحص معا كل هذه الإنشاءات.

#62

• الجملة الشرطية If

جملة If الشرطية تعتبر ابسط جمل القرارات أو الجمل الشرطية.

برنامجنا التالي IFDEMO مزود بمثال :

#include<iostream.h>

int main()
{
	int x;

	cout<<"Enter a number: ";
	cin>>x;

	if(x>100)
  cout<<"That number is greater than 100 \n";
	return 0;
}

post-36368-1110445984_thumb.jpg

#64

كما تري تركيبة جملة If تبدو كثيرا مثل تركيبة جملة While .

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

الجمل التي تأتي بعد While يتم تنفيذها مرارا وتكرارا حتى تصبح نتيجة جملة الشرط False .

الشكل التالي يظهر عملية جملة If :

post-36368-1110446220_thumb.jpg

#65

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

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

وها هي المخرجات:

post-36368-1110446348_thumb.jpg

#67

• بيانات متعددة في جسم جملة If

كما في حلقات التكرار , الاكواد ( الشفرات ) التي في جسم جملة If يمكن أن تشمل علي بيان واحد – كما هو واضح في مثال IFDEMO – أو كتلة من البيانات محددة بالشيالات ( أقواس الشيالات "{}" ).

هذا الاختلاف الذي في IFDEMO يسمي IF2 سنشاهد كيف يبدو.

#include<iostream.h>

int main()
{
	int x;

	cout<<"Enter a number: ";
	cin>>x;

	if(x>100)
	{
  cout<<"The number "<<x;
  cout<<" is greater than 100\n";
	}
	return 0;
}

post-36368-1110446711_thumb.jpg

#70

• تداخل جمل IF داخل حلقات التكرار

تركيبات الحلقات والقرارات نحن رأينا حتى الآن إنهم يمكنهم أن يتداخلوا كل واحد داخل الآخر .

أنت يمكنك أن تدخل جمل If داخل حلقات التكرار , وحلقات التكرار داخل جمل If , وجمل If داخل جمل If و هكذا.

ها هو مثال , PRIME , حيث يقوم بإدخال جملة If داخل حلقة التكرار For .

هذا المثال يخبرك إذا كان الرقم المدخل هل هو عدد أولي .

( الأعداد الأولية هي أعداد صحيحة تقبل القسمة علي نفسها وعلي الواحد الصحيح . هذه مجموعة من الأعداد الأولية مثل 2 , 3 , 5 , 7 , 11 , 13 , 17 ).

#include<iostream.h>
#include<process.h>  //for exit(0); function.

int main()
{
	unsigned long n,j;

	cout<<" Enter a number: ";
	cin>>n;

	for(j=2; j<=n/2;j++)
  if(n%j==0)
  {
 	 cout<<"It's not prime;divisible by "<<j<<endl;
 	 exit(0);
  }
  cout<<"It's prime\n";
  return 0;
}

post-36368-1110447493_thumb.jpg

تم تعديل هذه المشاركة بواسطة البارودي في 10 مارس 2005 في 12:39

#71

في هذا المثال , المستخدم يدخل رقم الذي تخصص قيمته للمتغير n .

البرنامج بعد ذلك يستخدم حلقة التكرار For لقسمة المتغير n بكل رقم بداية من 2 حتى قيمة n/2 . حيث أن المقسوم هو j متغير الحلقة.

لو أي قيمة ل j تقسم بانتظام إلي n , إذن قيمة إل n ليست أولية.

عندما الرقم يقسم بانتظام إلي الآخر فان الباقي يساوي صفر.

نحن نستخدم معامل الباقي % في جملة If لاختبار الشرط بكل قيم إل j .

لو كان العدد غير أولي , سنخبر المستخدم وسنخرج من البرنامج.

هنا بعض المخرجات لثلاث محاولات منفصلة من البرنامج :

post-36368-1110447782_thumb.jpg

#73

لاحظ بأنه ليس هناك أقواس شيالات "{}" حول جسم حلقة التكرار For .

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

لو أردت ذلك يمكنك إدراج شيالات "{}" وذلك للقراءة فقط . بالرغم من أن المعالج ليس بحاجة إليهم .

#74

• مكتبة دالة exit ( )

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

هذا تم انجازه بمكتبة دالة Exit( ) .

تؤدي هذه الدالة إلي الخروج من البرنامج و عدم الاهتمام بما هو موجود في القائمة.

حيث لا يوجد لها قيمة مرجعه . حجته الوحيدة , الصفر في مثالنا , حيث يرجع إلي نظام التشغيل عند الخروج من البرنامج.

( هذه القيمة مفيدة في ملفات الدفعات Batch files , حيث يمكنك استخدام قيمة إل ERRORLEVEL للاستعلام عن قيمة المرجعة المزودة عن طريق Exit( ) .

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

#75

• جملة If…Else

جملة If تتركك تفعل بعض الأشياء لو تحقق الشرط . وإذا لم يتحقق الشرط فلن يحدث شئ .

لكن يفترض إن إحنا نريد أن نفعل شئ واحد إذا تحقق الشرط و شئ آخر إذا لم يتحقق الشرط .

في هذه الحالة يأتي دور الجملة If…Else .

إنها تشمل علي جملة If يليها جملة أو كتلة من الجمل يليها الكلمة المحجوزة Else يليها جملة أخري أو كتلة من الجمل .

الشكل العام سنشاهده في الشكل التالي:

post-36368-1110878255_thumb.jpg

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

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

عدد الزوار حالياً

المتواجدون خلال آخر دقيقتين · يتحدّث كل ٣٠ ثانية

—الإجمالي—أعضاء مسجّلون—زوار بدون تسجيل

جارٍ التحقق من المتواجدين…