مشاهدة النسخة كاملة : كورس ++c مكثف
mhmd_saud 20-06-2007, 10:50 PM السلام عليكم ورحمة الله وبركاته
بصراحة مش عارف ابدأ منين .....
لكن هادخل فى الموضوع على طول
انا شوفت الموضوع الرائع بتاع المهندس حمزة - اتعلم ++C من البداية - وعجبتنى الفكرة جدا بس شايف ان الموضوع لم ياخذ حقه
علشان كده قررت اخوض التجربة دى بطريقة اكثر ترتيبا خصوصا وانا لسة فريش بعد الامتحانات وبعد دراستى لهذه اللغة
ومن غير مقدمات كتييير هابدأ على طول
اولا وقبل اى شئ الممارسة العملية اهم الف مرة من مجرد القراءة عشان كده لازم يكون عندكم برنامج تنفذوا عليه بعض المسائل عمليا
وعشان ما تلفوش كتير حملوا من هنا نسخة 4.5 ++borland turbo c (http://www.qtruni.com/software/uploads/Borland%20Turbo%20C++%204.5.zip)
نبدأ بتعريف اساسيات لغة السى:
تحتوى لغة السى على مكتبات وتحتوى كل مكتبة على بعض الاوامر
لذلك يجب عند استخدام امر معين الاعلان عن المكتبة التى تحتوى هذا الامر حتى يتعرف عليه المترجم
ويتم الاعلان عن المكتبة بهذا الشكل #include<name of lib>
(تركيب برنامج مكتوب بلغة السى)
1- الدالة main
هى اهم الدوال وهى الدالة التى يبدأ المترجم بتنفيذها
2- علامة بداية ونهاية الدالة ** }
والتى يكون بداخلها الاوامر الخاصة بالدالة
3- علامة نهاية الاوامر ;
تعتبر لغة السى الفاصلة المنقوطة هى علامة نهاية الامر وهى من مميزات لغة السى حيث يستطيع المبرمج استخدام المسافات والدخول فى سطر جديد لتنظيم شكل البرنامج دون ان يتعارض ذلك مع نهاية الامر
4- بعض الاوامر
الامر cout وهو امر الاخراج - اخراج بيانات على الشاشة-
الامر cin وهو امر ادخال البيانات من المستخدم
وهناك اومر اخرى للاخراج والادخال كانت تستخدم فى لغة الس الاساسية ولكنى سأركز على الاوامر الجديدة فى لغة ++C
ودلوقتى نبدأ بأبسط برنامج يمكن كتابته
برنامج يخرج على الشاشة كلمة hello arab
#include<iostream.h>
void main(void)
**
cout<<"hello arab";
}
iostream.h اسم المكتبة
>> توضع بعد cout ويتم اخراج ما بعدها
" "علامات الاقتباس توضع عندما نريد اخراج بيانات كما هى ولا تستخدم عندما نريد اخراج قيمة لمتغير كما سنرى لاحقا
سؤال هذا الدرس
اكتب برنامج يقوم بطباعة - اخراج - اسمك على الشاشة
وانتظروا الجزء الثانى
mhmd_saud 21-06-2007, 01:48 AM المتغيرات من اهم الاشياء التى تتعامل معها جميع لغات البرمجة و بالطبع لغة السى
وهذا المتغير يأخذ مساحة من الذاكرة تتوقف اساسا على نوعه
اولا المتغيرات الحرفية
وهى المتغيرات التى يتحدد لها حروف فقط وتاخذ مساحة واحد بايت من الذاكرة مثل :
'language='c
'letter='A
'x='7
وهنا علامة = لا تعنى تساوى ولكن تعنى (ضع) بمعنى مثلا ضع فى المتغير letter حرف A
نلاحظ ايضا انه عند التعامل مع المتغير الحرفى فاننا نضعه بين العلامتين ' '
وفى المثال الثالث يتم التعامل مع الرقم 7 على انه حرف وليس رقم
ومن الجدير بالذكر انلغة السى لغة حساسة لنوع الحرف صغيرا ام كبيرا
ثانيا المتغيرات العددية او الحسابية
وتنقسم الى 1 - متغيرات صحيحة integer variables
وتشغل فى معظم المترجمات على 2 بايت من الذاكرة
وقيمة الثابت المعرف على انه integer تتراوح من -32767 و+32767
اما اذا كانت قيمة المتغير اكبر او تتراوح بين -2147483648 و +2147483647 فيتم تعريفه غلى انه long
ويشغل 4 بايت من الذاكرة
2- متغيرات حقيقية floating point variable
وهى المتغيرات التى تحتوى على علامة عشرية - كسور- والمتغير المتغير المعرف على انه float تاخذ مساحة 4 بايت وتتكون من 6 خانات مثلا 1.23486 واما فى الصورة الاسية فان اصغر رقم هو 10 اس -38 واكبر رقم هو 10 اس 38
اما اذا كان اكبر من ذلك فيتم تعريفه على انه double ويشغل 8 بايت واصغر رقم هو 10 اس -308 واكبر رقم هو 10 اس 308
وكلمة 10 اس 308 تكتب فى السى على هذا النحو e308
مثلا (10x25 اس 3) تكتب بهذه الصورة 25e3
كيفية تعريف المتغيرات
char b;
int d,h;
long y;
float m;
double f;
حيث char للمتغير الحرفى
كما يمكن تعريف اكثر من متغير من نوع واحد ويتم الفصل بينهم بالفاصلة العادية ,
العمليات
العملية .......... الاشارة
الجمع .............. +
الطرح .............. -
الضرب ............ *
القسمة............. /
باقى القسمة .... %
*مثلا باقى قسمة 14 على 6 يساوى 2
مثال ضع ناتج x و y فى z
z=x+y;
z=x-y;
z=x*y;
z=x/y;
z=x%y;
بعض العمليات الشهيرة واختصاراتها والفرق بينها
مثال العملية .............. المثال المختصر ................. الرمز
x+=y ..................... x=x+y ......................... =+
x- =y ..................... x=x-y .......................... = -
x*=y ..................... x=x*y ......................... =*
x/=y ...................... x=x/y ......................... =/
x=%y .................. x= x%y ........................ =%
هناك ايضا عمليات اخرى مثل x++ او ++x والتى تعنى x=x+1
x-- او --x والتى تعنى x=x-1
ويتضح الفروق بينها فى المثالين التاليين
;++y=x
;y=++x
والاولى تعنى ضع قيمة x فى y ثم اضف 1 على x
اما الثانية تعنى اضف 1 على x ثم ضع الناتج فى y
العمليات النسبية
العملية ..................... الرمز
اقل من ..................... >
اكبر من .................... <
اقل من او يساوى ........ =>
اكبر من او يساوى ....... = <
يساوى ..................... ==
لا يساوى .................. =!
اخيرا وليس اخرا التعليق
التعليق ذو اهمية كبيرة خصوصا للمبرمج
وهذا التعليق يتم تجاهله من المترجم وهو نوعين اما
line comment ويكون بهذه الصورة
comment // وينتهى تلقائيا مع نهاية السطر
block comment ويكون بهذه الصورة
/* comment */
ولا يمكن كتابة اكثر من تعليق داخل بعض فى حالة الـ block comment
مثال
/* this program calculates your age in monthes*/
#include<iostream.h>
void main(void)
{int years,months; //definition of variables
cout<<"please type your age in years \n";
cin>>years;
months=years*12;
cout<<"you are "<<months<<" months old";
}
n/ تعنى انتقل الى سطر جديد
t/ تعنى tab بضع مسافات
mhmd_saud 21-06-2007, 01:53 PM السلام عليكم
طبعا انا شايف عدم فاعلية او اهتمام اى حد بالموضوع عشان كده انا قررت اتوقف عن الشرح
تطبيقات الكمبيوتر 22-06-2007, 07:18 PM أهلا صديقي لي عودة على هذا الموضوع واريدك تشرح لي كل النقاط المهمه لأنه مقرر علينا في هذا الفصل ....
وشكرا ....
تطبيقات الكمبيوتر 22-06-2007, 07:18 PM أهلا صديقي لي عودة على هذا الموضوع واريدك تشرح لي كل النقاط المهمه لأنه مقرر علينا في هذا الفصل ....
وشكرا ....
شموووووخ 27-06-2007, 01:28 AM شكرا على المجهود الاكثر من رائع والله يعطيك العافيه بانتظار درسك القادم ان شاء الله...تحياتي
ossamaussama 01-07-2007, 11:08 AM شكرا على الشرح
وننتظر المزيد
الحســام 04-07-2007, 04:27 AM شرح قيم أخي العزيز
ننتظر البــــــــــــــــــــاقي
ودمت بخير
م.مجدى خطاب 11-07-2007, 09:53 AM أخونا الكريم م/ mhmd_saud شرحك رائع جدا والواحد كان بدء يدخل الى عالى السى بلاس
ولا أعلم لما توقفت
برجاء مواصلة الموضوع القييم الممتاز
http://www.21za.com/pic/thankyou004_files/34.gif
حمزاوي 13-07-2007, 04:08 AM السلام عليكم و رحمة الله و بركاته
اولا احببت ان اعقب على المهندس الفاضل كاتب الموضوع الجميل جدا .
و تعقيبي الاول وهو بالشكر له على ما قدم من كورس منتصف لم يكتمل .
وتعقيبي الاخر وهو اننا (نحن العرب ) نفعل الخير و ننتظر الثناء و الشكر من الناس وهذا لا احبذه كثيرا و نصيحتي لكاتب الموضوع ان يقدم الخير ولا ينتظر من اي احد كان ان ينعته ويصفه بأنه جميل و يشكره
و ينتظر الاجر و المثوبه من رب العباد.
مجرد رأي
المحاربين القدماء 15-07-2007, 03:37 AM السلام عليكم و رحمة الله
شكرا للأخ المهندس كاتب الموضوع
و نرجو من الله أن تكمل لنا الشرح لتعم الفائدة
نهال حسن 18-07-2007, 01:59 AM الكورس غير جيد ولم يشرح الكثير كما ان الشرح غير مرتب
نهال حسن 18-07-2007, 02:02 AM ولكن شكرا لك على مجهودك وتحتاج التركيز فى كتابتك
خبير استراتيجي 21-07-2007, 10:22 PM شكرا على ما تقدم و نطلب منك أحونا أن لا تبخل بما لديك عن بقية اخوتك
م . محمد سالم
بنت شرقيه 25-07-2007, 06:23 AM الشرح تمام للمبتدئين
بس ياريت تراعى برده ان فى ناس عاوزه تتزود فيها
ياريت لو توسع المواضيع شويه
بنت شرقيه 25-07-2007, 06:24 AM ومشكور على مجهودك وبانتظار الجديد
محمد قاسم محمد بابكر 25-07-2007, 06:41 PM الرجاء من الأخوة المهندسين الأجلاء مساعدتي في إنجاز بحث مشروع التخرج في الإسكادا
somebody 09-08-2007, 09:42 AM السلام عليكم
طبعا انا شايف عدم فاعلية او اهتمام اى حد بالموضوع عشان كده انا قررت اتوقف عن الشرح
جميل...رائع....شيء خرافي لم يكن عالبال ولا الخاطر.....طريقة ايصال افكار اسطوريه.....لا بد من ان تذكر في فهارس العلماء
يكفيك هذا المديح لتكمل؟؟؟؟
نرجس صبري 10-08-2007, 02:07 PM الف شكر ياباش مهندس على ما قدمته من الشرح ونتمنى المزيد , وفى انتظار باقى الكورس
جزاك الله كل خير
محمد ل ل 25-08-2007, 05:05 PM اخي المهندسmhmd
ارجوا متابعة دروسك واجرك على الله
فاطمة عيد 25-08-2007, 08:01 PM الموضوع ممتاز والله وشكرا على مجهودك وياريت تكمل الدروس علشان انا متابعة معاك واسفة على عدم الرد من اول مرة .
انا متابعاك والله علشان هدرس c++ السنة الجاية .
كمل معلش
وجزاك الله خير
مستنية باقى الدروس
mhmd_saud 27-08-2007, 02:16 PM بسم الله الرحمن الرحيم
قبل ما اكمل شرح عايز اقول انا اسف لكل اللى فهمونى غلط
وبجد سبب توقفى عن مواصلة الموضوع ظروف خاصة بعيدة خالص عن مشكلة الردود او غيرها
ومش هاتكلم كتير لكن هادخل فى الموضوع على طول
هاندرس الحلقات او loops :
1- الحلقة باستخدام الامر for
2- الحلقة باستخدام الامر while
3- الحلقة باستخدام الامر do .......... while
لكن سؤال هنا ايه الفايدة من استخدام الحلقات او ايه هى اصلا الحلقات ؟
نشوف المثال ده فالاول
اكتب برنامج لحساب وطباعة مربع الاعدلد من 1 : 5
#include<iostream.h>
main()
{int m,n,x,y,z;
m=1*1;n=2*2;x=3*3;y=4*4;z=5*5;
cout<<m<<"\t"<<n<<"\t"<<x<<"\n"<<y<<"\t"<<z;
}
طيب ايه رايكم لو كان المطلوب حساب وطباعة مربعات 100 رقم
هنا يجى بقى دور الحلقات
وهو ان الحلقات بتستخدم لتنفيذ امر معين او مجموعة من الاوامر تسمى جسم الحلقة عدة مرات
والصيغة العامة للحلقة for
for(initial value;condition;step)
{body}
حيث initial value : هى القيمة الابتدائية "بداية الحلقة"
condition : هو شرط تكرار تنفيذ الحلقة ويستمر تكرار تنفيذ اوامر الحلقة مادام الشرط محقق
step : هى خطوة او التغير فى قيمة عداد الحلقة بين دورتين متتاليتين
body : جسم الحلقة وهو الاوامر المراد تنفيذا عدة مرات وتكتب بين اقواس ويمكن ازالة الاقواس فى حالة وجود امر واحد داخ هذه الحلقة
ومن الاشياء المهمة جدا هى ملاحظة عدم وجود الفاصلة المنقوطة ; بعد نهاية الامر for ولا بعد جسم الحلقة
false
for(initial value;condition;step);
{body};
حيث ان وجود الفاصلة المنقوطة بعد نهاية الامر for وبالتحديد قبل جسم الحلقة يجعل الحاسب يعتبر ان جسم الحلقة خالى - امر وهمى - يجعل الحلقة تدور بدون تنفيذ اوامر جسم الحلقة
دلوقتى نكتب نفس البرنامج السابق باستخدام الحلقة for
#include<iostream.h>
main()
**
int x,y;
for(x=1;x<=5;x++)
{y=x*x;
cout<<y<<"\t";
}
}
مثال اخر : كتابة برنامج لحساب مربعات ومكعبات الاعداد من 1 : 10
#include<iostream.h>
main()
**
int x,y,z;
for(x=1;x<=10;x++)
{y=x*x;
z=y*x;
cout<<x<<"\t"<<y<<"\t"<<z<<"\n";
}
}
ندخل لحاجة اكبر شوية وهى الحلقات المتداخلة nested loops
والحلقات المتداخلة ما هى الا حلقة عادية لكن تحتوى داخلها على حلقة اخرى كما يمكن ان تحتوى هذه الحلقة الداخلية على حلقة اخرى بداخلها وهكذا
ومثال على الحلقات المتداخلة
برنامج لطباعة جدول الضرب من 1 : 4
#include<iostream.h>
main()
**
int x,y,z;
for(x=1;x<=4;x++)
{for(y=1;y<=4;y++)
{z=y*x;
cout<<x<<"*"<<y<<"="<<z<<"\t";
}
cout<<"\n";
}
}
فى البرنامج السابق نلاحظ ان الحلقة الخارجية بدات العد من الرقم 1
ثم دخلت الى الحلقة الداخلية وبدات بتنفيذها حيث قامت بالعد من 1 : 4 لتكون بذلك انهت دورتها مكونة جدول ضرب 1
ثم تخرج من الحلقة - الداخلية - لتجد امر اخر وهو النزول الى سطر جديد وبعد تنفيذه نجد ان شرط استمرار الحلقة الخارجة لازال مستمر حيث ان المتغير x لم ياخذ سوى القيمة 1
فينتقل الى الرقم التالى حسب الخطوة والتى تعتبر 1 (++x) فياخذ المتغير x القيمة 2 ثم يبدا بتنفيذ جسم الحلقة وهو الحلقة الداخلية مرة اخرى مكونا بذلك جدول ضرب 2 وهكذا
بكدة يبقى تقريبا خلصنا الحلقة for
نيجى للحلقة باستخدام الامر while
والحلقة while ما هى الا صورة خاصة من الحلقة for
والصورة العامة لها
while(condition)
statement;
حيث condition هو شرط تكرار تنفيذ الحلقة
و statement هو جسم الحلقة وهو امر او عدة اوامر
ونستفيد من الحلقة while فى بعض المسائل التى لا نعرف فيها قيمة محددة لعدد مرات تكرار الحلقة او ان نهاية الحلقة تحدث فجأة
ومن الجدير بالذكر ان اى حلقة مكتوبة بالامر for يمكن كتابتها بالامر while والعكس صحيح
مثال توضيحى
using for
for(x=1;x<=10;x++)
{cout<<x;}
using while
x=1;
while(x<=10)
{cout<<x;
x++;
}
مثال :
برنامج يقوم بحساب مجموع الارقام التى يقوم بادخالها المستخدم حتى اذا زادت محصلة هذه الارقام عن 100 يتم الخروج وطباعة المحصلة
#include<iostream.h>
main()
**
int x,sum;
sum=0;
while(sum<=100)
{cin>>x;
sum=sum+x;
}
cout<<sum;
}
نلاحظ هنا شيئين وهما
1- عدم معرفتنا بخطوة المتغير x حيث ان المستخدم سيقوم بادخال ارقام عشوائية غير منتظمة ومن هنا تاتى فائدة الامر while ولكن كما ذكرنا فانه يمكن كتابة نفس البرنامج باستخدام الحلقة for مع ترك مكان بداية الحلقة و الخطوة فارغين والاكتفاء بوضع الفاصلة المنقوطة فقط بهذ الشكل
for( ;sum<=100; )
2- هى تصفير القيمة sum قبل الدخول فى الحلقة وهو امر هام جداحيث انه عند حجز مكان للمتغير sum فى الذاكرة فى البداية على انه int فاننا لا نضمن ان يكون هذا المكان فارغا ولكن يمكن ان يحتوى اى رقما عشوائيا وهنا تحدث المشكلة حيث انه عندما يتم حساب المجموع فانة سوف يقوم بجمع هذا الرقم ضمن الارقام المدخلة اما فى حالة ما اذا كان هذا الرقم العشوائى اكبر من 100 فان البرنامج لن يدخل فى الحلقة اساسا وذلك ان شرط الحلقة ان يكون المتغير sum<= 100
كما اننا لن نقوم بتصفير هذه القيمة دائما ففى حالة ما اذا اردنا حساب محصلة ضرب هذه الارقام المدخلة فاننا سنستخدم المحايد الضربى بان نجعل قيمة المتغير sum=1 وهكذا فاننا نضع قيمة هذا المتغير حسب متطلبات البرنامج
اما عن عدم تصفيرنا لقيمة المتغير x فهذا لاننا نضمن انه عندما يقوم المستخدم بادخال قيمة x فانه سوف يمحو الرقم العشوائى الموجود فى هذا المكان من الذاكرة ويضع مكانه القيمة الجديدة المدخلة
واخيرا الحلقة باستخدام الامر do.....while
والصورة العامة لها
do{statement;} while(condition);
وهنا نلاحظ الفرق بين while و do while ففى حالة do while يتم تنفيذ الاوامر التى بعد do ثم يتم اختبار الناتج حسب شرط الحلقة
كما انه لا يجب ان ننسى انه فى حالة استخدام الامر do while يجب ان نضع فاصلة منقوطة بعد شرط الحلقة للدلالة على نهاية الامر
مثال : برنامج لحساب محصلة الارقام المدخلة من المستخدم ويتوقف البرنامج عند ادخال رقم سالب ويقوم بطباعة المحصلة
البرنامج ده له اكتر من حل انا عن نفسى حليته بخمس طرق باستخدام while , for , do while لكن انا هاكتب طريقتين فقط لتوضيح بعض الاشياء
الطريقة الاولى باستخدام do while
#include<iostream.h>
main()
**
int x,sum=0;
do{cin>>x;
sum=sum+x;
}
while(x>=0);
sum=sum-x;
cout<<sum;
}
ونلاحظ وضع sum=sum-x لكى نقوم بطرح القيمة الاخيرة السالبة لكى تكون المحصلة هى محصلة الارقام الموجبة فقط
الطريقة الثانية باستخدام while
#include<iostream.h>
main()
**
int x,sum=0;
while(1)
{cin>>x;
if(x<0) break;
sum=sum+x;
}
cout<<sum;
}
ونلاحظ شرط الامر while وهو الرقم 1
والرقم 1 يعنى استمرارية الحلقة الى ما لا نهاية او الى ان يتم شرط اخر داخل الحلقة كالامر break
والامر break هنا هو المتسبب فى الخروج من الحلقة "جواب الشرط" عند حدوث الشرط if
وهنا لم نحتاج الى وضع sum=sum-x لانه اذا كانت x سالبة فانه سيتم الخروج من الحلقة بدون اضافة قيمته الى المحصلة sum
والامر break يستخدم لانهاء اى دورة اضطراريا والخروج منها دون اكمالها
والاامر المعاكس له وهو الامر continue ويستخدم لبدء تنفيذ دورة جديدة للحلقة دون استكمال لدورة التنفيذ الحالية
مثال : برنامج ياخذ ارقام من المستخدم ويقوم بحساب وطباعة محصلة الارقام السالبة فقط ويتوقف اذا ادخل المستخدم الرقم 0
#include<iostream.h>
main()
**
int x,sum=0;
while(1)
{cin>>x;
if(x==0) break;
else if(x>=0) continue;
sum=sum+x;
}
cout<<sum;
}
بكدة اكون شرحت الحلقات على قدر علمى
ونكمل فى الدرس التالى ان شاء الله
محمد ل ل 27-08-2007, 03:16 PM الحمد لله على السلامة
و جزاك الله على هذه الدروس الجيدة
mhmd_saud 08-09-2007, 01:12 PM انا شرحت الاوامر والشروط بعد الحلقات وبالظبط يوم السبت الماضى 07-9-1 ازاى اجى النهاردة الاقى الشرح مش موجود انا هاتجنن
نيره التقنيي 09-09-2007, 01:11 AM الحمد لله على السلامه
ويارب يزيدك علم ومعرفه
وبالنجاح والموفقيه.......
نيره التقنيي
|