عرض مشاركة واحدة
 
قديم 10-04-2007, 03:24 AM   #1 (permalink)
Saudi Spy
عضو جديد






Saudi Spy غير متصل

Saudi Spy has a spectacular aura aboutSaudi Spy has a spectacular aura about

m3ic2 شرح مفصل لأساسيات عمل آلة حاسبة في ++c مع شرح كامل للأكواد

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

دورت قسم برمجة للغة ++C او قسم عام للبرمجة ما لقيت قلت احطه هنا

أقدم لكم شرح لكتابة آلة حاسبة بلغة ++C مع شرح الأكواد
بالبداية قبل كل شيئ ستحتاج الى مترجم Compiler . يمكنك تحميل هذا المترجم من هنا


وتنصيبه كالتالي:





ثم قم فقط بالضغط على next حتى تتم عملية الإعداد
لتظهر لك الشاشة الآتية

=======================================


بالبداية سأرفق لكم الكود كاملا ثم سنقوم بشرحه :


كود:
/*
كود لألة حاسبة قياسية
(c)oded By Saudi Spy
saudi.spy@hotmail.com
*/
#include<iostream>
#include<cmath>
using namespace std;
int main() {
char op; // متغير نصي ببمقارنة
double num1,num2,num1bb; // الأرقام التي سيجرى عليها العمليات
cout << "\n Hello "<< "\n"<< "============\n";
cout << "Enter Your 1st Numper :\n";
cin >> num1; // الرقم الأول
cout << "Enter Your 2nd Numper"\n";
cin >> num2; // الرقم الثاني
cout << "---- \n Type a Numper:\n";
cout << " 1 + \n 2 - \n 3 x \n 4 /\n 5 power \n 6 root\n ============ \n"; // لأختيار نوع العملية الحسابية 
cin >> op;
if(op=='1') // في حال الجمع
{
cout << "The Resulte of: "<< num1 << " + "<< num2 << " = " << num1+num2;
}
else if(op=='2') // في حال الطرح
{
cout << "The Resulte of: "<< num1 << " - "<< num2 << " = " << num1-num2;
}
else if (op=='3') // في حال الضرب
{
cout << "The Resulte of: "<< num1 << " x "<< num2 << " = " << num1*num2;
}
else if (op=='4') // في حال القسمة
{
if((num1 !=0) && (num2==0))
{
cout << "The Resulte of: "<< num1 << " / "<< num2 << " = Unknown";
}
else if ((num1==0) && (num2==0))
{
cout << "The Resulte of: "<< num1 << " / "<< num2 << " = " << "0";
}
else 
{
cout << "The Resulte of: "<< num1 << " / "<< num2 << " = " << num1/num2;
}
}
else if (op=='5') // في حال القوة او الأس
{
num1bb=+num1;
num1=pow(num1,num2);
cout << "The Resulte of: "<< num1bb << " power "<< num2 << " = " << num1 ;
}
else if (op=='6') // في حال الجذر التربيعي
{
num1bb=+num1;
num1=sqrt(num1);
cout << "The Root of: "<< num1bb << " = " << num1; 
} 
else // في حال حصول خطأ
{
cout << " Error \n";
}
cout << " \n \n  ====================================== \n ";
cout << "             Press CTRL+C to end or continue                 \n";
cout << "  ====================================== \n ";
return main();
}


سنقوم الآن بكتابة الكود خطوة خطوة
في البداية ستحتاج الى فتح ملف مصدر جديد كالتالي:
File - New - Source File
لكي تبدأ عملية الكتابة .. قم بكتابة التالي :

كود:
/*
كود لألة حاسبة قياسية
(c)oded By Saudi Spy
saudi.spy@hotmail.com
*/

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

كود:
/*
*/

ويمكنك كتابة ما يحلو لك بينهما وسوف يتجاهلمها المفسر

الكود التالي:
كود:
#include<iostream>
#include<cmath>
using namespace std;

لاحظ اننا قمنا بعملية تضيمن احد المكتبات من خلال الكود #include . ثم وضعنا المكبتة التي اردنا تضمينها
ونحن قمنا بتضمين مكتبة iostream (مكتبة الإدخال الأخراج)
مكتبة iostream : هذه المكتبة هي مسؤولة عن الإدخال والإخراج في ++C . فمثلا اذا اردت انت تجعل المستخدم يقول بإدخال شيء ما (مثلا اسمه ) فأنك ستقوم بكتابة الدالة cin اللتي تتيع المكتبة iostream . فلو اننا لم نقم بتضمين هذه المكتبة لن نستطيع التعامل مع دالة الإدخال cin .
ثم قمنا بتضمين المكتبة cmath . اللتي سنستخدمها بالجذر التربيعي والأس .


اما الكود التالي:
كود:
using namespace std;
قم بكتابته فور تضمين المكتبة iostream لأستعمال مساحة الأسماء (لا يهم ما فائدته فقط قم بوضعه مع iostream ).

نأتي الآن للكود :
كود:
int main()
هذه هي الدالة الرئيسة في السي . ويجب كتابتها في اي كود . وصيغة الدالة كالتالي:
كود:
int function() { محتوى الدالة return x; }
الشرح:
نقوم بتعريف الدالة . ثم نضع قوس وكتابة محتوى الدالة (البرنامج) ثم نقوم بعملية الاستدعاء المطلوبة . من خلال return وسيتم شرحها فيما بعد( بالعربي لا تهتم بهالسوالف بالبداية).

كود:
char op; // متغير نصي ببمقارنة
double num1,num2,num1bb; // الأرقام التي سيجرى عليها العمليات
cout << "\n Hello "<< "\n"<< "============\n";
cout << "Enter Your 1st Numper :\n";
cin >> num1; // الرقم الأول
cout << "Enter Your 2nd Numper"\n";
cin >> num2; // الرقم الثاني
cout << "---- \n Type a Numper:\n";
cout << " 1 + \n 2 - \n 3 x \n 4 /\n 5 power \n 6 root\n ============ \n"; // لأختيار نوع العملية الحسابية 
cin >> op;
هذا الكود لأدخال رقمان ليتم عمل الحساب عليهما . في البداية قمنا بتعريف ثلاث متغيرات من نوع double . بالكود التالي:
كود:
double num1,num2,num1bb;

المتغير الأول اللذي هو : num1 يعتبر الرقم الأول الذي سيدخله المستخدم
المتغير الثاني هو : num2 يعتبر الرقم الثاني الذي سيدخله المستخدم
اما الرقم الثالث : num1bb فستعرف فائدته بآخر البرنامج
لكن الآن سنقوم بعمل ما يحتاجه برنامجنا .. ننتقل للكود التالي:


كود:
 char op;


هنا قمنا يتعريف متغير نصي وهو op (لاحظ ان المتغيرات من نوع double تعتبر عددية .. اما عند تعريف متغير ب char يعتبر متغير نصي).
سبب تعريفنا لهذا المتغير هو لاختيار العملية الحسابية المراد اجرائها على الرقمان num1 و num2
فمثلا اذا ادخل المستخدم لـ op الرقم واحد فمثلا يعني (الجمع) فيتم اجراء عملية الجمع .. وهكذا. ان لم تفهم ستفهم بالكود التالي:


كود:
 cout << "\n Hello "<< "\n"<< "============\n";
cout << "Enter Your 1st Numper :\n";
cin >> num1; // الرقم الأول
cout << "Enter Your 2nd Numper"\n";
cin >> num2; // الرقم الثاني
cout << "---- \n Type a Numper:\n";
cout << " 1 + \n 2 - \n 3 x \n 4 /\n 5 power \n 6 root\n ============ \n"; // لأختيار نوع العملية الحسابية 
cin >> op;


هنا سنقوم بشرح عدة امور:
cout : هذه الدالة هي دالة اخراج ... لتفهم قم بكتابة الكود التالي داخل الكومبايلر
كود:
#include<iostream>
using namespace std;
int main() {
cout << "Hello ";
return 0;
}


هذا البرنامج الصغير يقوم بطباعة الكلمة Hello . بأستخدام cout
اذا اردت طباعة شيء للمستخدم يجب كتابة cout ثم سهمان لليسار >> ثم ما تريد طباعته بين علامتي الترميز "" ثم وضع فاصلة منقوطة ; لتخبر الكومبايلر عن نهاية السطر
كالتالي تماما:

كود:
cout << "Hello ";
لنترجمه ثم نقوم بتجريبه
اولا سنحتاج لحفظ الملف .. قم بحفظ الملف من file - save وقم باختيار القرص C
ثم اذهب للقرص C من خلال الدوس .
الان بالبرنامج قم بالضغط على CTRL+F9 ليتم ترجمة البرنامج

ثم قم بتشغيله من الدوس بكتابة اسم البرنامج

كما ترى طبع لنا كلمة Hello
واذا اردت انتقال لسطر جديد يمكنك كتابة \n الان قم بمسح الكود السابق(الخاص ب cout ) وضع الكود التالي:
كود:
 cout << " \n ===== Hello \n ===== ";

الان قم بترجمته وتجربته .. لترى النتيجة وستعرف ان \n معناها انتقال لسطر جديد
اعتقد انك الان فهمت ما فائدة cout


ننتقل للكود التالي:
كود:
  cout << "Enter Your 1st Numper :\n";
cin >> num1;
في البداية اخبرنا المستخدم بأدخال رقم من خلال cout

ثم يأتي cin . ما هي cin ?

cin عبارة عن دالة إدخال . فمثلا اذا اردت استقبال قيمة من المستخدم تستطيع استخدام cin ثم سهمان لليمين << ثم المتغير المراد تخزين القيمة بداخلها
مثلا لو ادخل المستخدم الرقم 5 سيتخدم تخزين الرقم 5 بالمتغير num1 ... وهكذا
كود:
cout << "Enter Your 1st Numper :\n";
cin >> num1; // الرقم الأول
cout << "Enter Your 2nd Numper"\n";
cin >> num2; // الرقم الثاني
نخبر المستخدم لأدخال الرقم الاول ثم نخزن قيمته في المتغير num1
نخبر المستخدم لأدخال الرقم الثاني ثم نخزن قيمته بالمتغير num2
اصبح الان لدينا رقمان نستطيع اجراء العملية الحسابية عليهما من ضرب وطرح وغيره.

نأتي للكود التالي:
كود:
 cout << " 1 + \n 2 - \n 3 x \n 4 /\n 5 power \n 6 root\n ============ \n"; // لأختيار نوع العملية الحسابية 
cin >> op;
هنا نطلب من المستخدم ادخال رقم .. لكن هذا الرقم ليس لأجراء العملية الحسابية بل لاختيار نوع العملية من جمع وطرح الخ.
مثلا او ادخل الرقم 1 يستخدم تخزينه بالمتغير op . ثم سيتم عمل مقارنة . لو كانت قيمة المتغير op هي 1 سيتم عمل الجمع و 2 سيتم عمل الطرح ... الخ
الان اكتب الكود التالي ثم قوم بترجمته وتشغيله لترى ما سيحدث:

كود:
#include<iostream>
#include<cmath>
using namespace std;
int main() {
char op; // متغير نصي ببمقارنة
double num1,num2,num1bb; // الأرقام التي سيجرى عليها العمليات
cout << "\n Hello "<< "\n"<< "============\n";
cout << "Enter Your 1st Numper :\n";
cin >> num1; // الرقم الأول
cout << "Enter Your 2nd Numper"\n";
cin >> num2; // الرقم الثاني
cout << "---- \n Type a Numper:\n";
cout << " 1 + \n 2 - \n 3 x \n 4 /\n 5 power \n 6 root\n ============ \n"; // لأختيار نوع العملية الحسابية 
cin >> op;
return 0;
{

ستلاحظ انه لن يحصل اي عملية حسابية .. لاننا لم نقوم بعمل المقارنة بعد ...
ناتي للكود التالي:

كود:
    if(op=='1') // في حال الجمع
{
cout << "The Resulte of: "<< num1 << " + "<< num2 << " = " << num1+num2;
}
else if(op=='2') // في حال الطرح
{
cout << "The Resulte of: "<< num1 << " - "<< num2 << " = " << num1-num2;
}

هذا الكود لأجراء عملية المقارنة باستخدام الدالة الشرطية IF
في البداية قلنا لو كان قيمة op تساوي 1 اذا قم بعملية الجمع من خلال num1+num2
حسنا ان لم يكن قيمة op تساوي 1 ؟؟ لن يقوم بعمل اي جمع وسينتقل للشرط الثاني باستخدام else if ويستمر بعمل الممقارنة .
لاحظ اننا اشترطنا ان يدخل المستخدم احد الارقام من 1 الى 6 ... ماذا لو ادخل 9 ؟ ستعرف الحل بآخر البرنامج

كما ترى الكود التالي:
كود:
 if(op=='1') // في حال الجمع
{
cout << "The Resulte of: "<< num1 << " + "<< num2 << " = " << num1+num2;
}
else if(op=='2') // في حال الطرح
{
cout << "The Resulte of: "<< num1 << " - "<< num2 << " = " << num1-num2;
}
else if (op=='3') // في حال الضرب
{
cout << "The Resulte of: "<< num1 << " x "<< num2 << " = " << num1*num2;
}

في حال op=1 سيتم جمع الرقمان num1 و num2
في حال op=2 سيتم طرح الرقمان num1 و num2
في حال op=3 سيتم ضرب الرقمان num1 و num2
نأتي لكود القسمة:
كود:
else if (op=='4') // في حال القسمة
{
if((num1 !=0) && (num2==0))
{
cout << "The Resulte of: "<< num1 << " / "<< num2 << " = Unknown";
}
else if ((num1==0) && (num2==0))
{
cout << "The Resulte of: "<< num1 << " / "<< num2 << " = " << "0";
}
else 
{
cout << "The Resulte of: "<< num1 << " / "<< num2 << " = " << num1/num2;
}
}

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

كود:
 cout << "The Resulte of: "<< num1 << " / "<< num2 << " = " << num1/num2;

ثم قم بأدخال الرقم الاول 5 والثاني 0 لترى النتيجة
من المعروف ان 5÷0=غير معرف
لذلك ظهر لنا شرط جديد . لذلك سنحتاج تضمين if داخل else if نفسها:
كود:
   if((num1 !=0) && (num2==0))
{
cout << "The Resulte of: "<< num1 << " / "<< num2 << " = Unknown";
}

هنا قلنا ااذا كان الرقم الاول لا يساوي صفر والرقم الثاني يساوي صفر قم بطباعة النتيجة unknown اي غير معروف.

حسنا مااذا لو الشرط اختلف (اي ان الرقم الاوب يساوي صفر) اذا لن يعمل شيء وسينتقل للكود التالي:
كود:
 else if ((num1==0) && (num2==0))
{
cout << "The Resulte of: "<< num1 << " / "<< num2 << " = " << "0";
}

هنا اختلف الامر لو كان الرقمان صفر سيتم طباعة القيمة 0 . لان 0÷0=
0
كود:
else 
{
cout << "The Resulte of: "<< num1 << " / "<< num2 << " = " << num1/num2;
}
هنا سيتم عمل عملية القسم بشكل عادي جدا .. وبذلك تلافينا اخطاء حسابية

ننتقل في حال الاس:
كود:
 else if (op=='5') // في حال القوة او الأس
{
num1bb=+num1;
num1=pow(num1,num2);
cout << "The Resulte of: "<< num1bb << " power "<< num2 << " = " << num1 ;
}

هنا بالبداية قمنا بأسناد قيمة num1 الى المتغير num1bb . لماذا ؟ لانه حينها عند طباعة المخرجات سيتم طباعتها بشكل خاطئ.
الدالة pow تتبع المكبتة cmath . لذلك تم تضمين cmath
لاحظ الكود التالي:
كود:
       num1=pow(num1,num2);
فمثلا لو كانت num1=2 و num2=3
قلنا للمترجم اننا نريد قيمة num1 تساوي (قيمة num1 اس قيمة num1)
اي انه قيمة num1 تساوي 2 اس 3


ننتقل للكود التالي:
كود:
else if (op=='6') // في حال الجذر التربيعي
{
num1bb=+num1;
num1=sqrt(num1);
cout << "The Root of: "<< num1bb << " = " << num1; 
}

هنا في حال الجذر التربيعي وادخال الرقم 6 ... سيتم ااستخدام الدالة sqrt . لاحظ اننا هنا لم نستخدم num2 لاننا لا نحتاجه.
نأتي للكود الأخير:
كود:
 else // في حال حصول خطأ
{
cout << " Error \n";
}

حسنا ماذا لو اعطى المستخدم قيمة المتغير op الرقم 8 ?? بكل بساطة سيتم طباعة الكلمة Error اي خطأ
اما return main() هو لاستدعاء الدالة الرئيسية من جديد واستمرار البرنامج . لو قمت بكتابة return 0 سيتم انهاء البرنامج. <<<< تعبت :1:*
==========================================

وصلى الله وسلم على نبينا محمد وعلى آله وصحبه وسلم
انتهى الدرس
اي سؤال انا بالخدمة

تحميل الشرح مع الصور بصيغة html
النقل للدرس مفتوح بس مع ذكر الحقوق
بالتوفيق للجميع

التعديل الأخير تم بواسطة XP ; 10-04-2007 الساعة 10:07 PM.
  رد مع اقتباس