مشاهدة النسخة كاملة : مسائل C++
منطلق بطموحي 14-12-2005, 08:17 PM السلام عليكم:
خطرت في بالي فكرة هو أن اضع سؤال تطبيقي حول لغة C++ و يتم تجديد السؤال اسبوعيا
بحيث نناقش السؤال و طريقة الحل في حالة مواجهة الصعاب
و طبعا الفكرة هي للمبتدئين في البرمجة
قبل كل شيء يمكن الرجوع لاكثر من موقع تعليمي في ال C++ و منهم :
http://www.tkne.net/vb/showthread.php?t=2707
http://cplus.about.com/od/beginnerctutorial/l/blcplustut.htm
نوعية المسائل التي سيتم طرحها هي من النوع الذي يتم الاستفادة منه بالحياة
سيتم طرحة المسألة الاولى بعد قليل...
منطلق بطموحي 14-12-2005, 08:28 PM -المسألة الاولى -
سابدأ بمسألة بسيطة تحتاج لاستعمال selection و هو أمر مشروح في الموقع الاول الذي ذكرته و هي دروس للمهندس حمزة أحمد
A mail order houses sells five different products whose retail prices are the following
P1=2.98$
P2=4.50$
P3=9.98$
P4=4.49$
P5=6.87$
Write a C++ program that reads a series of pairs of numbers as follows
a)Product number
b)Quantity sold for one day
Restrictions:
1-You should use switch statment to solve the prolem rather than using multiple if statments
2-The program should calculate and display the retail value of all products sold last week
3-Don't use functions except the main function
4-No advanced features such as arrays and pointers are used
منطلق بطموحي 18-12-2005, 01:49 PM لدينا حتى يوم 22-12-2005 لحل المسألة كي نمر بأكثر من فكرة
اذا كانت هناك نقاط غير واضحة ارجو الاستفسار عنها
منطلق بطموحي 28-12-2005, 02:36 PM سيحذف الموضوع خلال يومين لعدم وجود تفاعل
mauri 29-12-2005, 02:42 AM االسلام عليكم ورحمة الله
أخي العزيز هلا كتبت التمرين باللغة العربية.
ألف شكر
.
منطلق بطموحي 30-12-2005, 03:23 PM السلام عليكم:
هذا هو التمرين باللغة العربية:
خمسة انواع من المنتجات تحمل الارقام و الاسعار المذككورة بالنسخة الاجنبية من 1 الى 5
اكتب برنامج بلغة السي ++ بحيث يقرأ كل من رقم البضاعة و كمية البضاعة المباعة منها
البرنامج يحسب سعر البضاعة المباعة خلال اسبوع ما
يجب استعمال switch بدلا من استعمال if
لا نريد اية دوال باستثناء الدالة الرئيسية main
و لا اية ادوات برمجية باستثناء الاساسيات اي لا نستعمل المصفوفات مثلا
mauri 30-12-2005, 05:34 PM السلام عليكم ورحمة الله
أخي هاك الرد وأرجو أن يكون صحيحا
#include<iostream>
using namespace std;
int main()
** int p[5](0,0,0,0,0);
int help;
int price;
do{
cout<<"Please The Nr of Product!!"<<endl;
cin>>help;
switch(help)**
case 1:
cout<<"Please Price!!"<<endl;
p[0]=price;
break;
case 2:
cout<<"Please Price!!"<<endl;
p[1]=price;
break;
case 3:
cout<<"Please Price!!"<<endl;
p[2]=price;
break;
case 4:
cout<<"Please Price!!"<<endl;
p[3]=price;
break;
case 5:
cout<<"Please Price!!"<<endl;
p[4]=price;
break;
}
}while(help!=0);
for(int i=0; i<5; i++)
cout<<"Product"<<i+1<<": "<<p[i]<<endl;
return 0;
}
mauri 30-12-2005, 05:39 PM لقد ارتكبت هناك خطأ وهو عدم تعريف P as double و كذالك Price
منطلق بطموحي 31-12-2005, 01:06 PM السلام عليكم:
شكرا لك على بذل المجهود
هناك عدة أخطاء منها:
الخطأ الذي انت ذكرته
و ثانيا لتعريف المصفوفة لديك يجب ان تقول
p[5]={0};
و هنا سيتم تصفير عناصر المصفوفة كلها
ذكرت بالسؤال قيمة الاسعار و ارقامها فاين هي؟
نحن نطلب رقم البضاعة و فيحال ادخالها يجب ان يفهم البرنامج تلقائيا سعرها
فيجب ان نطلب منه رقم البضاعة ليعرف هو سعرها و كم بعنا منها فيقوم بضرب سعر البضاعة بعددها و هكذا يتم تجميع جميع المبيعات و يقول لنا مجموعها
وقعت في خطأ infinte loop فالى متى سيتوقف البرنامج؟
الى متى سنزوده بالمعلومات؟
فلحل هذه المشكلة ممكن ان نستعمل break داخل اloop فمثلا لو قلنا if(x==-1)break;
و شيء اخير انا طلبت عدم استعمال المصفوفات اي p[] مثلا اي يجب استعمل تركيب C++ بسيط
و اكرر شكري لك : :06cc2:
( انتظر التصحيح و اذا لم تفهم شيء ارجو ان تستفسر)
MoonDreams 31-12-2005, 01:17 PM السلام عليكم ورحمة الله وبركاته
موضوع جميل وجدير بالتفاعل تشكر عليه يا أخي
لا تحذفه أخي المراقب العام
بس اعطينا مهلة وإن شاء الله أرجع بعد الامتحانات وأحاول المشاركة معكم
تحياتي ؛؛ :)
منطلق بطموحي 31-12-2005, 01:37 PM الدرس الاول:
نبدأ البرمجة ببرنامج بسيط
#include<iostream>
using namespace std;
void main()
**
int integer1;//first number to be unput by user
int integer2;//second number to be input by user
int sum; //variable in which sum sum will be stored
cout<<"Enter the first integer \n";
cin>>integer1;//read the first integer
cout<<"Enter the second number\n";
cin>>integer2;//read the second integer
sum=integer1+integer2;//assign result to sum
cout<<"Sum is = "<<sum<<endl;
}
شرح البرنامج:
#include<iostream>
هنا نستدعي المكتبة التي تجعل تفاعل مع العالم الخارجي و ترجمتها هنا input output stream
و بمجرد ذكر using namespace std;
تتيح لنا استعمال ال cout و ال cin
حينما نشاهد مثل هذا
//sentence هي جملة واحدة لا تاثر على البرنامج و لا تظهر اي هي معلوماتلا لك انت تضعها متى ما اردت
هناك عدة انواع من التعريفات منها:
int اي اعداد صحيحة
float تاخذ ارقام كسرية مثل 2.3
double مثل float و لكن الدقة مضاعفة
void اي لا شيء
ملحوظة: فقط في حالة void لا نعمل ارجاعلا لشيء (سيتم التوضيح ببرنامج لاحق)
عندما نبرمج نفكر باسلوب منظم:
اولا كل برنامج به mainfunction و هي ببرنامجنا void main() و بعدها ** و هي بداية ما يسمى بالتركيب block و نبدأ بتعريف المتغيرات لدينا مع نوعها
ببرنامجنا int integer1; من نوع عدد صحيح و غيرها من المتغيرات
تلاحظون يجب الحاق كل متغير بفاصلة منقوطة ;
cout<<"hello"; ستطبع hello و لكي تظهر لجملة نضعها بين " "
cin>>x; ادخال المتغير
نهاية الدالة }
البرنامج السابق يطلب منك اول رقم مثلا 4
يطلب رقم اخر مثلا 5
يعطيك المجموع=9
منطلق بطموحي 31-12-2005, 01:40 PM ان شاء الله اخي لن اقوم بحذفه
و بانتظار مشاركتك
ووفقكم الله في الامتحانات
:00s4:
MoonDreams 31-12-2005, 01:46 PM تسلم أخي
بارك الله فيك ..
وإن شاء الله أكون عند حسن ظنكم !
منطلق بطموحي 31-12-2005, 01:51 PM الدرس الثاني:
سؤال: كيف يحسب البرنامج التالي : y=2*5*5+3*5+7
الحل:
ان اول ما يتم حسابه هو ما بين الاقواس () ثم الضرب * ثم القسمة / ثم باقي القسمة % ثم الجمع + و اخيرا الطرح -
اذا بالرجوع للسؤال يكون الترتيب كالتالي:
2*5=10
y=10*5+3*5+7
الان
10*5=50
اذن
y=50+15+7
الان
50+15=65
اذن
y=65+7
اذن
y=72
السؤال الثاني:
ما ناتج التالي:
1) 5+4
2)5-4
3)5/4
4)8%2
5)17%2
الحل:
5+4=9
5-4=1
5\4=1
8%2=صفر
17%2=1
اذن حظنا بالقسمة لا ناخذ الباقي
MoonDreams 31-12-2005, 01:55 PM أستاذنا الكريم
هل لك أن تضع الأسئلة بدون إجابة لكي نفكر فيها ؟؟!
ونكتشف أخطاءنا ..
شاكرين جهودك الطيبة ..
منطلق بطموحي 31-12-2005, 02:06 PM نعم لك ما تريد بعد كم درس ساضع تمارين
منطلق بطموحي 03-01-2006, 08:15 PM الدرس الثالث:
Demorgan's law :
باتفراض ان د(س) عبارة عن توقع مجاله د فان
ليس لكل د(س) تكافئ هناك س ليس د(س)
مثال :
(x>3)||(y<10) equivalent !( (x<3)&&(y>=10))
لان هناك رموز جديدة هي:
|| تعني or
&& تعني and
! تعني ليس not
تلاحظون كل اكبر > تحول <= اصغر او يساوي و العكس
لو كان|| تصبح &&
فالتطبيق تطبيق مباشر
منطلق بطموحي 03-01-2006, 08:26 PM ملحوظة: في حالة وجود || يعني واحد من الاحداث يجب ان يكون صحيح
ان كان && لا بد ان يكون الحدثين صحيحين ليتم ترجمته
من الدروس الثلاثة السابقة هذه مجموعة تمارين بسيطة:
التمرين الاول:
معطى معادلة جبرية
y=ax^3 +7
ايهما الصحيح ( يمكن اختيار اكثر من اجابة)
y=a*x*x*x+7
y=a*x*x*(x+7)
y=(a*x)*x*(x+7)
y=(a*x)*x*x+7
y=a*(x*x*x)+7
y=a*x*(x*x+7)
التمرين الثاني:
رتب حدوث العمليات التالية:
x=2%2+2*2-2/2
(3*9*(3+(9*3/(3))))
التمرين الثالث:
اكتب برنامج يسمح للمستخدم بادخال قيمتين في مجال الارقام الصحيحة و الكسرية بحيث يقوم بعرض حاصل جمعهمها و ضربهمها و طرحهما اضافة لناتج القسمة
التمرين الرابع:
اكتب برنامج يقوم بفصل الرقم المكون من خمس خانات مختلفة
فرضا ادخلنا الرقم 12345
سيعرض البرنامج
1 2 3 4 5
التمرين الخامس:
اكتب عبارة مكافئة ل
!((w<=5)||(w>=10))&&!(r==1)
ابو احمد2 03-01-2006, 09:20 PM ممكن تشرح المصفوفه وكذلك الشروط وا && ماذ تعني.......... ارجو ان تبين كيفية استعمال الحلقة whil
MoonDreams 04-01-2006, 10:20 PM سلامٌ من الله عليكم ورحمة وبركات ..
الله يعطيك العافية أستاذنا ..
اسمح لي أتفلفس اشوي و أضع ملخص للفرق بين OR ( والذي يرمز لها بـ || ) وبين And ( والذي يرمز لها بـ && )
علماً بأن
T = True
F = Fals
************************************************** ************************************************** **
[1]
______________________________________
OR
______________________________________
T || T = T
T || F = T
F || T = T
F || F = F
-----------------------------------------------------------------------------------------------------------------------
* نلاحط أنه لا يتم تنفيذ الأمر إذا كانت قيمة كلا الطرفين في الشرط خاطئة Fals
------------------------------------------------------------------------------------------------------------------------
************************************************** *************************************************
[2]
______________________________________
And
______________________________________
T && T = T
T && F = F
F && T = F
F && F = F
-----------------------------------------------------------------------------------------------------------------------
* نلاحط أنه لا يتم تنفيذ الأمر إلاّ إذا كانت قيمة كلا الطرفين في الشرط صائبة True
------------------------------------------------------------------------------------------------------------------------
************************************************** *************************************************
والآن نحاول الإجابة على بعض التمارين ...
وإن شاء الله نكون تلاميذ شاطرين ومجتهدين :008:
-----------------------
التمرين الاول:
معطى معادلة جبرية
كود:
y=ax^3 +7
الإجابة هي :
y=a*(x*x*x)+7
أولاً نفك الأقواس بعدها نضرب الفك في a وبعد ذلك نضيف 7
---------------------------------------
التمرين الثاني:
رتب حدوث العمليات التالية:
كود:
x=2%2+2*2-2/2
كود:
(3*9*(3+(9*3/(3))))
معلش الأقواس معفوسة شوي لذلك سأعود بعد تحليلها !
وبعد حل البرامج الباقية
تحياتي وشكراً جزيلاً ... :073:
منطلق بطموحي 05-01-2006, 09:27 AM السلام عليكم:
شكرا لك اخي MoonDreams على الشرح ...و كان بمثابة جدول الصدق و هذا مفيد جدا خاصة لمن اختار تخصص الحاسب الالي
بالنسبة للمعادلة الجبرية اجابة صحيحة لكن هناك اجابة صحيحة اخرى ;)
و بانتظار باقي الاجابات ان شاء الله تعالى
منطلق بطموحي 05-01-2006, 09:48 AM شكرا على مرورك اخي أحمد و ساتطرق للحلقة while ان شاء الله بعد شرح if
الدرس الرابع:
سنبدأ من اليوم بدراسة control structures اي هياكل التحكم و هي بداية البرمجة الفعلية
درسنا في السابق المبادئ البسيطة لكتابة برنامج مع بعض الادوات المنطقية مثل قانون De Morgan's
سنتطرق اليوم بإذن الله تعالى لهياكل التحكم بما فيها الحلقات loops
أولا:الخوارزميات Algorithims :
أي مشكلة حسابية يمكن ان تحل عن طريق اجراء بعض العمليات علىشكل سلسلة من الاحداث بترتيب معين
ان الخطوات لحل احدى المشكلات تتلخص في الاتي:
1- الاحداث التي ستتدخث لانهاء مشكلة ما
2-ترتيب الاحداث لانهاء المشكلة
هذا ما يسمى بالخوارزمية
مثال:
فلنأخذ خوارزمية ما:
يريد أحمد الذاهب للعمل فعليه القيام بالتالي لحل المشكلة:
1-ينهض من السرير
2-يذهب لاخذ shower
3-يلبس ملابسه
4-يتناول فطوره
5-يذهب للعمل
الان فلنفرض ان الخوازرمية تمت بشكل اخر على النحو التالي:
1-ينهض من السرير
2-يلبس ملابسه
3-ياخذ حمامه shower
4-يتناول فطوره
5-يذهب للعمل
بالتالي سيصل احمد بملابس مبللة للعمل
اذا ان عملية ترتيب الاحداث بحيث ان الجمل او الافعال تنتهي لحل المشكلة ببرنامج ما هي ما تسمى program control
ثانيا:Pseudocode
عبارة عن لغة مصطنعة و غير رسمية تساعد المبرمجين لصنع الخوازرميات .ان هذه اللغة قريبة جدا من اللغة الانجليزية الاعتيادية التي نستخدمها.
ثالثا: Control structures هياكل التحكم
مثال:
طلب منا اضافة الدرجات للمجموع الكلي فان العبارة المكافئة بلغة C++ هي التالي
total=total+grade;
و تكتب بطريقة مختصرة كالتالي:
total+=grade;
رياضيا انها عبارة غير منطقية لكن برمجيا صحيحة 100% لذا يجب ان لا يحصل لنا لبس اذ هناك فرق بين التالي في البرمجة:
= تعني assignment اي انا اعطيها القيمة و == و هي equality اي تساويها تماما
سنحتاج لاستخدام مثل العبارة السابقة ما يسمى بالحلقات loops التي سنتطرق لها لاحقا بعد بعض الامور ان شاء الله
منطلق بطموحي 05-01-2006, 10:27 AM الدرس الخامس:
هناك شيء يسمى بهياكل الاختيار selection structures و سندرس منها عبارات if و if else و switch باذن الله
أولا: if statments و if else
تعتبر الاسهل في الفهم من هياكل التحكم و الابسط منهم
ان عبارة if تؤدي المطلوب فقط اذا كان الشرط صحيح اما غير ذلك فانها تقوم بعدم التفيذ (تطنيش :006: )
أما عبارة if else تقوم بالسماح للمبرمج بذكر الاحداث التي تؤديها بينما الشرط صحيح و احداث اخرى لتؤديها اذا كان الشرط خطأ
فلناخذ مثال:
معطى ال pseudocode التالي:
If student's grade is greater than or equal to 60
print"passed"
else
print"failed"
بمعنى لو كان درجة الطالب تساوي او اكبر من 60 اطبع ناجح غير ذلك راسب
كيف نحول التالي لعبارات برمجية بلغة C++ ؟
التحويل:
if(grade>=60)
cout<<"passed";
else
cout<<"Failed";
هناك اختصار جدير بالذكر لعبارة if else هو التالي:
cout<<(grade>=60 ? "passed" : "Failed" );
مكافئ للكود الاول و لكن بسطر واحد!
مثال آخر :
if(grade>=60)
cout<<"passed.\n";
**
else
cout<<"Failed.\n";
cout<<"You must take this course again.\n";
}
المثال السابق يحوي ما يسمى block بما انه به ** } بداية و نهاية block
الان تفسير الكود:
اذا كانت درجة الطالب اقل من 60 فان العبارات الموجودة ضمن block سيتم طباعتها اي كالتالي
Failed
You must take this course again
لاحظ ان استعال الاقواس الملتوية } و ** مهم جدا اذا بدونها كانت العبارة cout<<"You must take this course again"; ستكون خارج جسم ال else و قد تطبع دون الالتفات ما اذا كانت الدرجة اكبر او اقل من 60
أخطاء شائعة:
1- نسيان الاقواس لعمل block قد يؤدي لعمل أخطاء عند الترجمة سواء شكلية ام منطقية
2-وضع فاصلة منقوطة ; بعد عبارة if يؤدي لخطأ منطقي في حالة عبارة واحدة من if و خطأ شكلي في حالة اكثر من عبارة
مثال :
اكتب برنامج يحسب مساحة المستطيل ...يقوم البرنامج بقراءة عرض و طول المستطيل ثم يقوم بالفحص ما إذا كانت المساحة اصغر او تساوي 50 يطبع " المساحة مقبولة" اما غير ذلك يطبع "المساحة غير مقبولة "
الحل:
#include<iostream>
using namespace std;
void main()
**
int w;
int l;
int a;
cout<<"What is the length of your rectangle\n";
cin>>l;
cout<<"What is the width of your rectangle? \n";
cin>>w;
a=w*l; // that is area=width*length
cout<<"The area = " <<a<<endl;
if(a<=50) cout<<"It is accepted\n";
else
cout<<"It is not accepted\n";
}
منطلق بطموحي 05-01-2006, 10:45 AM تمارين على الدرس الخامس:
التمرين الاول:
صحح الاخطاء في التالي:
if(gender==1)
cout<<"Woman"<<endl;
else;
cout<<"Man"<<endl;
if(age>=65);
cout<<"Age is greater or equal than 65"<<endl;
else
cout<<"Age is less than 65<<endl";
التمرين الثاني:
باضافة الاقواس فقط دون تغيير شيء اعمل التعديلات المطلوبة لاظهار النواتج التالية معطى الكود:
if(y==8)
if(x==5)
cout<<"@@@@@"<<endl;
else
cout<<"#####"<<endl;
cout<<"$$$$$"<<endl;
cout<<"&&&&&"<<endl;
1) باعتبار ان x=5 و y=8 يجب ان يظهر
@@@@@
$$$$$
&&&&&
2) باعتبار x=5 و y=8 يجب ان يظهر
@@@@@
3) باعتبار x=5 و y=8 يجب اظهار
@@@@@
&&&&&
4)باعتبار x=5 و y=7 يجب ان يظهر
#####
$$$$$
&&&&&
التمرين الثالث:
اكتب برنامج يسمح للمستخدم بان يدخل الاحداثيات السينية و الصادية لنقطة تقع في الفضاء الاحداثي بحيث يخبر المستخدم ما اذا كانت النقطة تقع على نقطة الاصل أو على المحور السيني او المحور الصادي او على احدى الارباع الاربعة
مثال:
(0,0) هي نقطة الاصل
(4,0) على المحور السيني ( س=4 , ص=0 )
(-2,3) على الربع الثاني ( حيث س=-2 و ص=3)
( اسمحولي ذكرت السين و الصاد لان النقطة لا تظهر المنتدى بشكل صحيح )
MoonDreams 05-01-2006, 04:15 PM السلام عليكم ...
العفو أستاذ :033:
بالنسبة للمعادلة الجبرية اجابة صحيحة لكن هناك اجابة صحيحة اخرى
نعم ، لم انتبه لوجود هذه ..
y=(a*x)*x*x+7
---------------------
التمرين الثاني:
رتب حدوث العمليات التالية:
كود:
x=2%2+2*2-2/2
الناتج سيكون :
x = 0 + 4 – 1 = 3
حيث كان الترتيب هكذا :
1- باقي القسمة
2 - الضرب
3 - القسمة
( وهؤلاء حسب الأسبقية )
ثم الجمع والطرح ( أيضاً حسب الأسبقية )
كود:
(3*9*(3+(9*3/(3))))
( 21 ( 3 + 9 ) )
= 21 * 12
= 252
-----------------------------------------------
التمرين الثالث:
اكتب برنامج يسمح للمستخدم بادخال قيمتين في مجال الارقام الصحيحة و الكسرية بحيث يقوم بعرض حاصل جمعهمها و ضربهمها و طرحهما اضافة لناتج القسمة
#include<iostream.h>
void main(void)
**
float n1,n2,m,d,totil;
cout<<"Enter Your F_Number \n";
cin>>n1;
cout<<"Enter Your S_Number \n";
cin>>n2;
cout<<"The Totil F_Number + S_Number = " <<n1+n2<<endl;
if (n1 >= n2)
**
cout<<"The Totil F_Number - S_Number = " <<n1-n2<<endl;
m = n1-n2;
}
else
**
cout<<"The Totil S_Number - F_Number = " <<n2-n1<<endl;
m = n2-n1;
}
cout<<"The Totil F_Number * S_Number = " <<n1*n2<<endl;
if (n1 >= n2)
**
cout<<"The Totil F_Number / S_Number = " <<n1/n2<<endl;
d = n1/n2;
}
else
**
cout<<"The Totil S_Number / F_Number = " <<n2/n1<<endl;
d = n2/n1;
}
totil = ((n1+n2)+m)+(n1*n2)+d;
cout<<"The All Totil of Your Numbers is : "<<totil<<endl;
}
التمرين الرابع:
اكتب برنامج يقوم بفصل الرقم المكون من خمس خانات مختلفة
فرضا ادخلنا الرقم 12345
سيعرض البرنامج
1 2 3 4 5
#include<iostream.h>
void main(void)
**
char n[4];
int i;
cout<<"Enter Any Number Form 5 Digit \n";
for(i=0;i<5;i++)
**
cin>>n[i];
}
cout<<"The Number is : ";
for(i=0;i<=4;i++)
**
cout<<n[i]<<" ";
}
cout<<endl;
}
-----------------------------------------------
التمرين الخامس:
اكتب عبارة مكافئة ل
كود:
!((w<=5)||(w>=10))&&!(r==1)
(w > 5) || (w < 10) && (r !=1)
--------------
أتمنى أن تكون جميع إجاباتي صحيحة :006:
-------------
سأعود بعد الاطلاع على الدروس الجديدة .. :062:
تحياتي وشكراً جزيلاً :033:
منطلق بطموحي 05-01-2006, 07:17 PM بارك الله فيك اخي MoonDreams
اجابات ممتازة :05a4:
لكن بالنسبة للبرنامج الثاني الذي يقوم بفصل الارقام هل تستطيع برمجته دون استعمال مصفوفات و حلقات ؟
منطلق بطموحي 05-01-2006, 07:18 PM لديك خطأ واحد و الحل الصحيح:
!((w<=5) || (w>=10)) && !(r==1) is equivalent to !( ((w<=5) || (w>=10)) || (r==1))
MoonDreams 07-01-2006, 10:51 PM السلام عليكم ..
امممم
معذرة لغيابي لكن أصابتي الانفلونزا فادعوا لي بالشفاء العاجل !
لكن بالنسبة للبرنامج الثاني الذي يقوم بفصل الارقام هل تستطيع برمجته دون استعمال مصفوفات و حلقات ؟
إن شاء الله أحاول ، وإذا ما فلحت أخبرك .. :014:
-----------------------------------------------------------------------
لديك خطأ واحد و الحل الصحيح:
!((w<=5) || (w>=10)) && !(r==1) is equivalent to !( ((w<=5) || (w>=10)) || (r==1))
إذا قلنا أن علامة :023: تعني Not لنفي العبارة
إذاً فنفي w<=5
هو w>5 .......... لا أصغر ولا تساوي
ونفي w>=10
هو w<10 ........ لا أكبر ولا تساوي
أما نفي r==1
فهو r!=1 ......... لا تساوي الواحد
هل لك أن توضح تصحيح الإجابة ؟؟؟!!!!!!!!
منطلق بطموحي 08-01-2006, 12:14 AM بالنسبة للتوضيح ماذكرته صحيح لكن السؤال بالكود يظهر باسلوبغير الذي اريد و بالنسبة للعلامات انت لم تغيرها من || ل && و العكس
منطلق بطموحي 08-01-2006, 02:31 PM الدرس السادس:
سنتناول انواع التعريفات بشيء من الدقة
#include<iostream>
using namespace std;
void main()
**
cout<<"The size of int = "<<sizeof(int)<<endl;
clog<<"The size of long int = "<<sizeof (long int)<<endl;
cerr<<"The size of char = "<<sizeof(char)<<endl;
cout<<"The size of float = "<<sizeof(float)<<endl;
}
المخرجات كالتالي:
The size of int = 4
The size of long int = 4
The size of char = 1
The size of float = 4
التفسير:
من هذا الكود تعمدت لاكثر من شيء:
أولا :
cout و clog و cerr هما نفس الشيء ! :01s2:
ثانيا:
المتغيرات على انواع الاساسية منها هي:
int عدد صحيح و يأخذ 4 بايت مثلا على جهازي ربما بوضع الكود على جهازكم يعطي رقم مختلف
float عدد كسري مثلا 1.3
double عدد كسري بدقة مضاعفة
char اي حرف مثلا 'a' تلاحظون وضع ' '
الان يمكن ان نحدد بعض الاشياء :
long كي ياخذ ارقام أكبر
unsigned int مثلا ياخذ ارقام موجبة فقط و صحيحة
short int ايضا
هناك نوع لطيف اسمه bool و ياخذ قيمتين true قيمتها 1 و false قيمتها 0 ( سنتعرض لبرنامج لاحقا )
شيء اخير اود ذكره هنا الامر sizeof و تلاحظون بالبرنامج يعطيكم كم بايت للمتغير و كما قلت قد يختلف من جهاز لاخر
منطلق بطموحي 08-01-2006, 03:10 PM هناك امر قديم اسمه goto يستخدم للتكرار لكن لا ينصح باستخدامه و في جميع الاحوال كل ما نفعله بامر goto يفعل بهياكل التحكم الاخرى لذا لن اتطرق اليه نهائيا
الدرس السابع:
سندرس هنا الحلقة التكرارية while :
ان الحلقات التكرارية تتيح للمستخدم تكرار حدث معين بينما while بعض الشروط صحيحة conditions
على سبيل المثال لناخذ ال pseudocode التالي :
While there are more items on my shopping list
Purchase next item and cross it off my list
هنا الشرط لدينا : هناك اكثر من سلعة في قائمة التسوق خاصتي
هذا الشرط اما صحيح و إما خطأ ....فان كان صحيحا فالحدث سيكون purchase next item and cross it off my list و هذا الحدث سيتم تنفيذه بشكل تكراري بينما الشرط لا زال صحيحا
سيصل في لحظة ما ان الشرط اصبح خاطئا عندما تنتهي البضائع انتهى تنفيذ الشرط فهنا و عند هذه النقطة التكرار ينتهي و يتم انهاء الترجمة
مثال آخر :
اكتب برنامج يسال المستخدم عن رقم صحيح بحيث لو ادخل المستخدم رقم اقل من 1 او اكبر من 20 يجب ان يعرض "رقم خاطئ ) و ينتهي البرنامج و في حال ادخاله رقم ضمن الحدود المسموح بها يطبع بعدد هذا الرقم نجوم بشكل عمودي و افقي
الحل:
#include<iostream>
using namespace std;
void main()
**
int n , count;
cout<<"Enter a number between 1 and 20 : " ;
cin>>n;
if(n<1||n>20)
cout<<"Invalid Number " <<endl;
else **
count=1;
while(count<=n) **
cout<<"*"<<endl;
count++; //same as count=count+1;
}
cout<<endl;
count=1;
while(count<=n) **
cout<<"*";
count++;
}
cout<<endl;
}
}
sample run :
Enter a number between 1 and 20 : 5
*
*
*
*
*
*****
sample run :
Enter a number between 1 and 20 : 21
Invalid Number
تفسير الكود :
أولا تلاحظون ان while كالتالي:
while(condition)
**
statment1
statment2
.
.
.
.
.
increment or decrement
}
condition اي الشرط
ثم العبارات و ما نريد تكراراه وفقا للشروط
ثم و الاهم الزيادة increment مثلا a++ او النقصان مثلا a- - و هذا امر غاية في الاهمية بدونه ستصبح حلقة غير منتهية و هو من الاخطاء الشائعة جدا جدا جدا
الان وضعنا عداد count=1 قيمته 1 بنيما كان هذا اقل كمن او يساوي القيمة المدخلة ( 5 مثلا )
يطبع نجمة ثم يزداد العديد
الان :
ادخلنا 5
1 اقل من 5 اذا *
يزداد العداد1
2 اقل من 5 اذا *
يزداد العداد
3 اقل من 5 اذا *
و هكذا حتى 5 و تساوي 5 اذا *
اذا تكون لدينا 5 نجمات *****
و بنفس ال while loop الثانية الفرق اننا نطبع بشكل عمودي و الاول بشكل افقي و الفرق هو endl لا اكثر
منطلق بطموحي 09-01-2006, 12:16 AM مثال آخر على while loop :
باعتبار ان احمد يعمل في احدى المدرس كمعلم لعشرة تلاميذ و في احدى الامتحانات يريد احمد عمل برنامج يحسب له متوسط الدرجات ....
الحل:
#include<iostream>
#include<iomanip>
using namespace std;
int main()
**
float total=0,counter=1,grade,average;
while(counter<=10) **
cout<<"Enter grade " ;
cin>>grade;
total+=grade; // means total=total+grade
counter++;
}
average=total/10;
cout<<"Ahmed's class average is = "<<fixed<<setprecision(2)<<average<<endl;
return 0; // indicate program ended successfully
}
مثلا المخرجات كالتالي:
Enter grade 96.3
Enter grade 45.254
Enter grade 57
Enter grade 100
Enter grade 63.5
Enter grade 14.2
Enter grade 94
Enter grade 82.3
Enter grade 64
Enter grade 45
Ahmed's class average is = 66.16
الشرح:
الاشياء الجديدة :
اضافة المكتبة #include<iomanip> و استعملنا الامر setprecision بقيمة setprecision(3) و يعني الدقة الكسرية كم ستكون فلو مثلا كان المعدل 75.896457 لا اريده كله فيعطيني اياه اقرب لمنزلتين عشريتين و قبل الامر fixed كي نضمن ثبات الدقة لمنزلتين
الشيء الثاني بالبرنامج استعملت int main() بعدما اعتدنا على void التي لا ترجع قيمة و بما اني قلت جميع الانواع ترجع قيم باستثناء void فلقد ارجعنا القيمة صفر return 0; نهاية البرنامج للدلالة على ان البرنامج انتهى بشكل صحيح
الهدف من استعمال المتغير float اننا بحساب المتوسط نطلب دقة عالية فليس من المعقول مثلا ان احسب متوسط ثلاثة تلاميذ مثلا 3+5+5 / 2 =6 لو كانت عدد صحيح int و هذا غير دقيق
بالنسبة ل while يجب ان تحلولها كما فعلت بالمثال الاول لتتاكدوا انها حلقة منتهية فعلا و تلاحظون اني عرفت العداد = 1 و المجموع = صفر حتى يجمع من البداية و هذا امر مهم للغاية
منطلق بطموحي 09-01-2006, 12:27 AM تعديل معين على البرنامج السابق:
#include<iostream>
#include<iomanip>
using namespace std;
int main()
**
float total=0,counter=1,grade;
double average;
while(counter<=10) **
cout<<"Enter grade " ;
cin>>grade;
total+=grade; // means total=total+grade
counter++;
}
average=static_cast<double>(total)/10;
cout<<"Ahmed's class average is = "<<fixed<<setprecision(2)<<average<<endl;
return 0; // indicate program ended successfully
}
فلنفرض مثلا اني عرفت المتغيرات جميعا على انها اعداد صحيحة عدا المتغير average اذ اني اريده ان يكون عدد كسري
طيب لكن الجواب سيصبح عدد و انا مصر على ان اجعل بقية المتغيرات اعداد صحيحة :00s6:
بالتالي هناك شيء لطيف جدا الامر :
static_cast<variable type> ( )
حيث مكان variable type نضع نوع الذي نريد التحويل اليه مثلا double بمثالنا
بمثالنا جعلنا المجموع اي Total و لو بشكل لحظي عبارة عن متغير من نوع double و هذه هي فائدة الامر الجديد!
منطلق بطموحي 09-01-2006, 12:42 AM لا زلنا نتحدث عن الحلقة التكرارية while loop
الزيادة و النقاصان increment and dicrement :
ما الفرق بين a++ و ++a
a++ ; ( هنا بعد ال a نضع ++ ) لكن تظهر بشكل مقلوب لديكم بالمنتدى !
هنا نسعمل القيمة الحالية للمتغير a ثم نزيد ب 1
اما
++a
الزيادة تتم اولا
ونفس الحالة في حالة النقصان اي - -
مثال توضيحي :
#include<iostream>
using namespace std;
int main()
**
int c;
c=5;
cout<<c<<endl;
cout<<c++<<endl;
cout<<c<<endl<<endl;
c=5;
cout<<c<<endl;
cout<<++c<<endl;
cout<<c<<endl;
return 0;
}
المخرجات :
5
5
6
5
6
6
مثال اخر :
#include<iostream>
using namespace std;
void main()
**
int counter=1;
while(counter<=10) **
cout<<counter<<endl;
counter++;
}
}
المخرجات:
1
2
3
4
5
6
7
8
9
10
سؤال : بالبرنامج السابق هل هناك فرق بين counter++ و ++counter ؟
منطلق بطموحي 09-01-2006, 01:02 AM سامحوني فلقد اطلت الحديث عن while loop و لكن اطلت بالشرح و التفصيل لانها الاصعب من الحلقات التكرارية ففهمك لها جيدا سيسهل علي شرح البقية
تمارين على الدرس السابع :
التمرين الاول :
تعرف على الاخطاء و صححها في الاكواد التالية هذا ان وجدت :
while(c<=5) **
product*=c;
++c;
while(z>=0)
sum+=z;
x=1;
while(x<=10);
x++;
}
التمرين الثاني:
1- اكتب برنامج باستعمال الحلقة while بحيث يطبع الاعداد من 1 الى 20 بشرط ان كل سطر يعرض 5 ارقام فقط بالتحديد ( مساعدة : كيف سنحل مشكلة كل سطر به 5 اعداد ؟ فكر بالادوات الرياضية كباقي القسمة مثلا )
2-اكتب برنامج يحسب كم شخص رسب و كم شخص نجح من مادة ال C++ بحيث لو ادخل المستخدمة القيمة 1 تعني النجاح و لو ادخل القيمة 2 تعني الرسوب و من ثم يحسب لنا كم عدد الناجحين و الساقطين ( افترض عدد الطلبة = 10 )
3-اعمل تعديل على البرنامج المشروح لحساب المتوسط بحيث يحسب المتوسط لاي عدد و لا يتقيد بعدد الطلبة الذي يساوي 10 بالمثال ...عند ادخال -1 كدرجة بتوقف البرنامج و يعرض لنا المتوسط ...أما في حالة لم يتم ادخال اي درجة يجب ان تطبع " لا توجد درجات مدخلة " و ينتهي عمل البرنامج
4-مضروب العدد رياضيا هو ن! = ن ( ن-1 ) !
مثللا5!=4*3*2*1=120
4!=4*3*2*1=24
و الحالات الخاصة هي : 0! = 1 و 1! = 1
و هكذا
اكتب برنامج لحساب مضروب العدد باستخدام while دون استعمال اي نوع من الدوال باستثناء ال main و في حال ان ادخل المستخدم عدد اقل من 1 او اكبر من 20 يخبره بان العدد غير صحيح و يطلب منه ادخال العدد مرة ثانية
5- اكتب برنامج ياخذ 3 اعداد و يحدد من هو العدد الاكبر و من هو العدد الاصغرثم يحسب المدى (مساعدة : المدى=العدد الاكبر -العدد الاصغر )
منطلق بطموحي 09-01-2006, 01:09 AM ساتوقف عند هذه النقطة و نحاول حل التمارين من اول درس حتى الدرس السابع و مناقشتهم في حال وجود مشاكل
اتمنى رؤية مشاركات ....
و من ثم نكمل سلسلة الدروس ان شاء الله مع المزيد من التمارين
منطلق بطموحي 09-01-2006, 02:18 PM نبدأ بحل التمارين التي لم تحل بعد :
اكتب برنامج يقوم بفصل الرقم المكون من خمس خانات مختلفة
فرضا ادخلنا الرقم 12345
سيعرض البرنامج
1 2 3 4 5
كل تمرين برمجي يحل باالكثير من الطرق
الطريقة الاولى : ما ذكره اخي MoonDreams باستخدام المصفوفات و لكن لم ندرسها بعد
الطريقة الثانية : باستخدام باقي القسمة %
الطريقة الثالثة : باستخدام باقي القسمة مع الحلقات التكرارية مثى while
بانتظار المحاولات و في حال وجود مشاكل ساطرح الحل
MoonDreams 09-01-2006, 02:30 PM سلاااااااااام
يبدو أن غيابي سبب تراكم الدروس والتمارين علي !!!!
كنت سأطلب منك - إذا سمحت - أن تتوقف بضع أيام لنتمكن من قراءة الدروس بتمعن وحل التمارين !
أقترح وضع درسين أو ثلاثة ( فقط ) في الأسبوع ..
تحياتي
وإن شاء الله أعود بحل التمارين
ولا أنسى أن أقدم لك طبقاً من الشكر الجزيل المحلى بأطيب الأمنيات
ودمتم ســـالمين ؛؛ :)
منطلق بطموحي 09-01-2006, 03:16 PM السلام عليكم:
شكرا لك اخي MoonDreams على المتابعة المستمرة
و فعلا لذد ذكرت بالرد قبل الاخير التالي :
ساتوقف عند هذه النقطة و نحاول حل التمارين من اول درس حتى الدرس السابع و مناقشتهم في حال وجود مشاكل
اتمنى رؤية مشاركات ....
و من ثم نكمل سلسلة الدروس ان شاء الله مع المزيد من التمارين
و الرد الاخير كان تمرين انت حللته باستخدام المصفوفات و نريد حله بطرق اخرى لاني لم اتطرق للمصفوفات بعد
و بانتظار عودتكم ....
:034:
mauri 11-01-2006, 05:27 PM السلام غليكم ورحمة الله
أولا وقبل كن شىء
أود أن أهنئ الجميع بمناسبة عيد الأضحى المبارك وكل سنة وأنتم بخير
:077:
تمرين تغيير ترتيب الأرقام
#include<iostream>
using namespace std;
int main()
** cout<<"Number!!"
int number;
cin>>number;
do{
cout<<number%10;
number/=10;
}while(number!=0);
return 0;
}
:
mauri 11-01-2006, 05:35 PM وتمرين الأرقام من 1 الى 20
#include<iostream>
using namespace std;
int main()
**
for(int i=1; i<=20; i++)**
if(i%5!=0)cout<<i<<" ";
else
cout<<i<<endl;
}
return 0;
}
mauri 11-01-2006, 05:43 PM وتمرين حساب عدد المرات التي أدخل فيها رقم 1 وعدد المرات التي أدخل فيها رقم 2
#include<iostream>
using namespace std;
int main()
** int not, k=0, i=0, j=0;
do{
cin>>not;
if(not==1)
i++;
else if(not==2)
j++;
else
k=1;
}while(k!=1);
cout<<"The number with 1"<<i<<endl;
cout<<"The number with 2"<<j<<endl;
return 0;
}
mauri 11-01-2006, 05:55 PM التمرين الرابع
#include<iostream>
using namespace std;
int main()
** int x, y=1;
cin>>x;
if(x<0)
cout<<"!!faul!!"<<endl;
else if(x==0 || x==1)
cout<<y<<endl;
else
{while(x!=0)**
y*=x;
x--;
};
cout<<"X!="<<y<<endl;
}
return 0;
}
mauri 11-01-2006, 06:04 PM التمرين الخامس
#include<iostream>
using namespace std;
int main()
** double a, b, c, help;
cout<<"Nomber!!"<<endl;
cin>>a>>b>>c;
if(a>b && a>c)
{cout<<a;
if(b<c)
cout<<a-b<<endl;
else
cout<<a-c<<endl;
}
else if(b>a && b>c)
{cout<<b;
if(a<c)
cout<<b-a<<endl;
else
cout<<b-c<<endl;
}
else
{cout<<c;
if(b<a)
cout<<c-b<<endl;
else
cout<<c-a<<endl;
}
return 0;
}
mauri 11-01-2006, 06:06 PM والى اللقاء في مرة أخرى و السلام عليكم ورحمة الله وبركاته
منطلق بطموحي 11-01-2006, 09:42 PM السلام عليكم ورحمة الله وبركاته
شكرا لك اخي على الحلول ...سعدت بالردود
لدي بعض التعليقات البسيطة و ساضعها بالردود المنفصلة القادمة
منطلق بطموحي 11-01-2006, 09:44 PM بالنسبة لسؤال فصل الارقام لم اطلب فصلها بشكل عكسي و لكن سنعتبره سؤال جديد و الحل جيد لكن لدي ملاحظتين :
1- عبارات cout غير واضحة
2-لم تستخدم endl لفصل الارقام
اليك بعض التعديلات
#include<iostream>
using namespace std;
int main()
** int number;
cout<<"Enter a Number \n";
cin>>number;
do{
cout<<number%10<<endl;
number/=10;
}while(number!=0);
return 0;
}
منطلق بطموحي 11-01-2006, 09:59 PM لا تعليق على سؤال عرض الارقام من 1 الى 20 بحيث ان كل 5 منها بسطر واحد فالحل نموذجي و ممتاز ....لكن باستعمل for loop و التي لم اشرحها بعد ...و بالطبع يحل ب while loop
تمرين حساب عدد الراسبين و الناجحين عملت له ترجمة و لم يؤدي المطلوب !
بالنسبة لتمرين حساب المضروب لدي تعليقات بسيطة :
الاول اضافة عبارة
cout<<"Enter a number to evaluate its factorial\n";
كي يعرف المستخدم ماذا سيدخل
نقل العبارة cout<<x<<"!="; الى الاعلى و cout>>y; للاسفل كي يظهر التالي مثلا 5!=120
حذف العبارة : else if(x==0 || x==1)
cout<<y<<endl فلا فائدة منها ...
يصبح الكود :
#include<iostream>
using namespace std;
int main()
** int x, y=1;
cout<<"Enter a number to evaluate its factorial\n";
cin>>x;
cout<<x<<"!=";
if(x<0)
cout<<"!!Number is out of range!!"<<endl;
else
{while(x!=0)**
y*=x;
x--;
};
}
cout<<y<<endl;
return 0;
}
مثال على المخرجات:
Enter a number to evaluate its factorial
5
5!=120
مثال اخر :
Enter a number to evaluate its factorial
0
0!=1
منطلق بطموحي 11-01-2006, 10:00 PM السؤال الاخير لم افهم الحل
شكرا لك
MoonDreams 13-01-2006, 03:47 PM سلااام
بداية أأسف على التأخير !
لكني عدت بحل بعض التمارين وإن شاء الله الباقي في الطريق لضيق الوقت
وأرحب بأخونا (أختنا) mauri
الحمد لله صار معي منافس في حل التمارين !!!! :D
شوفوا حلي ..
------------------------------------------
تمارين على الدرس الخامس:
التمرين الاول:
صحح الاخطاء في التالي:
كود:
if(gender==1)
cout<<"Woman"<<endl;
else;
cout<<"Man"<<endl;
الخطأ هو وجود الفاصلة المنقوطة بعد else
فيكون التصحيح :
if(gender==1)
cout<<"Woman"<<endl;
else
cout<<"Man"<<endl;
-----------------------------------------------------------------
كود:
if(age>=65);
cout<<"Age is greater or equal than 65"<<endl;
else
cout<<"Age is less than 65<<endl";
الخطأ هو وجود الفاصلة المنقوطة بعد if
فيكون التصحيح :
if(age>=65)
cout<<"Age is greater or equal than 65"<<endl;
else
cout<<"Age is less than 65<<endl";
-------------------------------------------------------------------------
التمرين الثاني:
باضافة الاقواس فقط دون تغيير شيء اعمل التعديلات المطلوبة لاظهار النواتج التالية معطى الكود:
كود:
if(y==8)
if(x==5)
cout<<"@@@@@"<<endl;
else
cout<<"#####"<<endl;
cout<<"$$$$$"<<endl;
cout<<"&&&&&"<<endl;
1) باعتبار ان x=5 و y=8 يجب ان يظهر
كود:
@@@@@
$$$$$
&&&&&
الحل هو :
if(y==8)
if(x==5)
cout<<"@@@@@"<<endl;
else
**
cout<<"#####"<<endl;
}
cout<<"$$$$$"<<endl;
cout<<"&&&&&"<<endl;
--------------------------------------------
2) باعتبار x=5 و y=8 يجب ان يظهر
كود:
@@@@@
الحل هو :
if(y==8)
if(x==5)
cout<<"@@@@@"<<endl;
else
**
cout<<"#####"<<endl;
cout<<"$$$$$"<<endl;
cout<<"&&&&&"<<endl;
}
--------------------------------------------
3) باعتبار x=5 و y=8 يجب اظهار
كود:
@@@@@
&&&&&
الحل هو :
if(y==8)
if(x==5)
cout<<"@@@@@"<<endl;
else
**
cout<<"#####"<<endl;
cout<<"$$$$$"<<endl;
}
cout<<"&&&&&"<<endl;
--------------------------------------------
4)باعتبار x=5 و y=7 يجب ان يظهر
كود:
#####
$$$$$
&&&&&
الحل هو :
if(y==8)
if(x==5)
cout<<"@@@@@"<<endl;
else
**
cout<<"#####"<<endl;
cout<<"$$$$$"<<endl;
cout<<"&&&&&"<<endl;
}
أو :
الحل هو :
if(y==8)
if(x==5)
cout<<"@@@@@"<<endl;
else
**
cout<<"#####"<<endl;
}
cout<<"$$$$$"<<endl;
cout<<"&&&&&"<<endl;
--------------------------------------------
التمرين الثالث:
اكتب برنامج يسمح للمستخدم بان يدخل الاحداثيات السينية و الصادية لنقطة تقع في الفضاء الاحداثي بحيث يخبر المستخدم ما اذا كانت النقطة تقع على نقطة الاصل أو على المحور السيني او المحور الصادي او على احدى الارباع الاربعة
مثال:
(0,0) هي نقطة الاصل
(4,0) على المحور السيني ( س=4 , ص=0 )
(-2,3) على الربع الثاني ( حيث س=-2 و ص=3)
( اسمحولي ذكرت السين و الصاد لان النقطة لا تظهر المنتدى بشكل صحيح )
* لدي استفسار حول هذا البرنامج :
بخصوص الأرباع .. هل ضروري أن نخبره في أي ربع يقع ؟!
--------------------------------------
* بخصوص الدرس السادس لم أفهمه جيداً فهل لك التوضيح أكثر !
-----------------------
* بالنسبة لـ :
اضافة المكتبة
#include<iomanip>
هل هي ضرورية ؟ وما هي فائدتها ؟ أو متى نحتاجها أو يجب علينا إضافتها ؟!!
---------------------
سؤال : بالبرنامج السابق هل هناك فرق بين counter++ و ++counter ؟
اللي أعرفه إنه إذا كان اسم المتغير قبل ++ فيعني ذلك قبل قيمته الزيادة
وإذا كان بعد ++ فيعني قيمته بعد الزيادة ؛ وكذلك بالنسبة إلى النقصان --
مثلاً لو كانت القيمة البدائية لـ counter = 1
فإن counter++ = 1+1 = 2
أما ++counter = 1 لأنه قبل الزيادة !
صح ؟!
----------------------
تمارين على الدرس السابع :
التمرين الاول :
تعرف على الاخطاء و صححها في الاكواد التالية هذا ان وجدت :
كود:
while(c<=5) **
product*=c;
++c;
الخطأ في : product*=c;
والتصحيح إما : product+=c ( إذا كان القصد هو الزيادة )
أو product= product * c
----------------------------
كود:
while(z>=0)
sum+=z;
إن وُجد خطأ فهو في وضع الأقواس ** } تحت while ؛ وإلا فإني لا أجد خطأً !!
----------------------------
كود:
x=1;
while(x<=10);
x++;
}
التصحيح بوضع قوس ** تحت while وفوق x++
----------------------------
سأعود قريباً بإذن الله ؛؛ :)
منطلق بطموحي 13-01-2006, 04:43 PM السلام عليكم :
مشكوور على الحلول MoonDreams
* لدي استفسار حول هذا البرنامج :
بخصوص الأرباع .. هل ضروري أن نخبره في أي ربع يقع ؟!
نعم ضروري و القصد من البرنامج هو استعمال عبارات if else و التدريب عليها لا اكثر
* بخصوص الدرس السادس لم أفهمه جيداً فهل لك التوضيح أكثر !
اممم ... لم اعرف ما هو الشيء الغير مفهوم ؟
عموما ملخص الدرس :
تعرف ان البرمجة تاخذ حيز من الذاكرة بالطبع و فيه اعرض عبارة محجوزة في ال C++ هي sizeof() و هي عبارة عن دالة تخبرك عن الحجم بالبايت للمتغيرات
و انواع المتغيرات الاساسية هي :
int عدد صحيح
float عدد كسري
double عدد كسري بدقة مضاعفة
char حرف
هناك انواع فرعية تضاف للانواع الرئيسية هي :
unsigned اي بدون اشارة اي مجموعة الاعداد الموجبة مع الصفر ...فمثلا لو قلت unsigned int x فالمتغير x ياخذ اعداد صحيحة بما انه int من نوع موجب unsigned
signed مع الاشارة
long يأخذ مجال أكبر
short
و غيرها من الاشياء ....
و ايضا فكرة اخرى من الدرس :
استعمال sizeof() بكل جهاز انواع المتغيرات قد تختلف و الحجم سيكون بالبايت كما هو معروف فيمكنك نسخ البرنامج الذي وضعته و الاضافة عليه طبعا و تعرف الحجم الذي تستهلكه الذاكرة على جهازك ...
و شيء اخير :
cout و clog و cerr كلها تستخدم لعبارات ال output اي كلها تؤدي نفس الغرض و لو تلاحظ بالبنرامج الذي وضعته استعملتها كلها و اشتغل بشكل طبيعي ....
اضافة المكتبة
#include<iomanip>
هل هي ضرورية ؟ وما هي فائدتها ؟ أو متى نحتاجها أو يجب علينا إضافتها ؟!!
ضرورية بالبرنامج الذي وضعته ... و يجب علينا اضافتها عند الحاجة فقط !
لها اكثر من استعمال و من اهم العبارات التي تتضمنها هذه المكتبة
setw() بين الاقواس نضع عدد ....و هي مسافة افقية ....بشكل ادق بدلا من ان تقول \n او \t و غيرها تحدد عدد المسافات و الامر مفيد في بعض الاشياء و منها عمل جداول
setprecision() ايضا بين الاقواس و هذا مفيد في حالة استعمال الارقام الكسرية سواء من نوع double او float ...فلنفرض ان الناتج كان بالصورة 3.145698 و انا بالحقيقة لا يهمني سوى اول منزلتين عشريتين فاستعمل التالي fixed ثم setprecision(2) كما في المثال ...راجعه
اللي أعرفه إنه إذا كان اسم المتغير قبل ++ فيعني ذلك قبل قيمته الزيادة
وإذا كان بعد ++ فيعني قيمته بعد الزيادة ؛ وكذلك بالنسبة إلى النقصان --
مثلاً لو كانت القيمة البدائية لـ counter = 1
فإن counter++ = 1+1 = 2
أما ++counter = 1 لأنه قبل الزيادة !
صح ؟!
صحيح هذا ما ذكرته قبل المثال و بعد المثال سالت سؤال ...هل مخرجات البرنامج ستتاثر لو وضعت counter++ او ++counter هذا ما اريد معرفته ...و لماذا ؟
-------
لي عودة للتعليق على الحلول ان شاء الله
و نصيحة دائما انسخوا البرامج و اعملوا لها ترجمة على المترجم سواء visual c++ او اي مترجم يدعم اللغة و فهم الكود ...اما القراءة المجردة له لا تفيد
mauri 14-01-2006, 12:16 PM السؤال الاخير لم افهم الحل
شكرا لك
السلام عليكم ورحمة الله
كلا مك يا أخي صحيح فقد كتبت الحل بطريقة غير علمية وذالك لأني كنت أ ظن أن اليرنامج ينبغي أن لا يحتوي على Array أما الأن فهذا البرنامج يمكنه أن يتعامل مع أكثر من ثلاثة أعداد وذالك حسب رغبة المستخدم فهو يسأل في البداية عن عدد الأرقام ومن بعد يسأل عن الأرقام
#include<iostream>
using namespace std;
int main()
** int* a;
int b,help,help1, c, n;
cout<<"Please gib the Number of numbers"<<endl;
cin>>n;
a= new int[n];
cout<<"Please gib"<<n<<" number\n";
for(int i=0; i<n; i++)
cin>>a[i];
help=a[0];
help1=a[0];
for(int j=0; j<n-1; j++)
**
if(help<a[j+1])
help=a[j+1];
if(help1>a[j+1])
help1=a[j+1];
b=help;
c=help1;}
cout<<"The big Number is :"<<b<<" and The difference is :"<<b-c<<endl;
return 0;
}
أخوكم Mauri
والسلام عليكم
منطلق بطموحي 15-01-2006, 10:15 AM حل صحيح ...شكرا لك
لكن بالفعل انا لا اريد arrays و لا حتى pointers لانها امور لم اصل لها بعد
منطلق بطموحي 15-01-2006, 10:28 AM عودة للحلول اخي MoonDreams
بالنسبة لمسالة if هذا النوع من المسائل يسمى ب Dangling else problems و هي من اشهر التدريبات و التي يخطأ بها الكثيرون ....
الحلول الثلاثة الاولى من المسالة صحيحة اما الحل الرابع فوضعت لي حلين و الحلين غير صحيحين للاسف
و الحل
if(y==8)**
if(x==5)
cout<<"@@@@@"<<endl;}
else
cout<<"#####"<<endl;
cout<<"$$$$$"<<endl;
cout<<"&&&&&"<<endl;
و حلك الاول لا يعطي مخرجات نهائيا اما الثاني فسيظهر لك علامات غير المطلوبة
لي عودة...
منطلق بطموحي 15-01-2006, 10:36 AM بالنسبة لهذا التصحيح
if(age>=65)
cout<<"Age is greater or equal than 65"<<endl;
else
cout<<"Age is less than 65<<endl";
تم المطلوب لكن حبذا ان تغير موضع علامة التنصيص كي لا يطبع على الشاشة صراحة <<endl فليس هو المطلوب
الخطأ في : product*=c;
والتصحيح إما : product+=c ( إذا كان القصد هو الزيادة )
أو product= product * c
بالعكس product*=c اختصار product=product*c
كما هو الحال في product+=c و الحال نفسه في حالة القسمة و الطرح و اي عملية رياضية صحيحة ;)
الخطأ هو ان احد الاقواس لا يتواجد و هو قوس النهاية }
إن وُجد خطأ فهو في وضع الأقواس ** } تحت while ؛ وإلا فإني لا أجد خطأً !!
كلامك صحيح هذا هو التصحيح :D
شكرا لك على المحالاوت الطيبة ... :)
منطلق بطموحي 15-01-2006, 10:46 AM بقيت اربعة تمارين لم تحل ها هي كل لا تضطروا للرجوع
1-اكتب برنامج ياخذ 3 اعداد و يحدد من هو العدد الاكبر و من هو العدد الاصغرثم يحسب المدى (مساعدة: المدى=العدد الاكبر -العدد الاصغر (
2-اعمل تعديل على البرنامج المشروح لحساب المتوسط بحيث يحسب المتوسط لاي عدد و لا يتقيد بعدد الطلبة الذي يساوي 10 بالمثال ...عند ادخال -1 كدرجة بتوقف البرنامج و يعرض لنا المتوسط ...أما في حالة لم يتم ادخال اي درجة يجب ان تطبع " لا توجد درجات مدخلة " و ينتهي عمل البرنامج
3-اكتب برنامج يحسب كم شخص رسب و كم شخص نجح من مادة ال C++ بحيث لو ادخل المستخدمة القيمة 1 تعني النجاح و لو ادخل القيمة 2 تعني الرسوب و من ثم يحسب لنا كم عدد الناجحين و الساقطين ( افترض عدد الطلبة = 10 (
4-اكتب برنامج يسمح للمستخدم بان يدخل الاحداثيات السينية و الصادية لنقطة تقع في الفضاء الاحداثي بحيث يخبر المستخدم ما اذا كانت النقطة تقع على نقطة الاصل أو على المحور السيني او المحور الصادي او على احدى الارباع الاربعة
مثال:
(0,0) هي نقطة الاصل
(4,0) على المحور السيني ( س=4 , ص)
(-2,3) على الربع الثاني ( حيث س=-2 و ص=3 )
) اسمحولي ذكرت السين و الصاد لان النقطة لا تظهر المنتدى بشكل صحيح (
سابدأ من الرد القادم بتكلمة الدروس...
منطلق بطموحي 15-01-2006, 11:04 AM الدرس الثامن :
سنتناول هنا الحلقة do while بشكل سريع
يكون شكل هذه الحلقة كالتالي:
do **
Statments
} while (condition) ;
الفرق بين هذه الحلقة و بين الحلقة while ان هذه الحلقة تتم على الاقل مرة واحدة
مثال :
اكتب برنامج يطبع على الشاشة الاعداد من 1 حتى 10
الحل :
#include<iostream>
using namespace std;
int main()
**
int counter=1;
do{
cout<<counter<<" ";
}while(++counter<=10); //end of do while
cout<<endl;
return 0; //indicates successful termination
}
منطلق بطموحي 15-01-2006, 11:08 AM ملاحظة: لاحظت ان البعض يستخدم المكتبة التالية #include<iostream.h>
ان اضافة .h عبارة عن شيء قديم يستعمل بالمترجمات القديمة و لا يتطلب اضافة using namespace std; لكن من النسخة السادسة فما فوق من المترجمات لا يتطلب استعمال هذا النظام
منطلق بطموحي 15-01-2006, 11:34 AM الدرس التاسع:
الحلقة for :
الحلقة التكرارية for هي الابسط من الحلقات التكرارية و الاكثر استعمالا لانها تجعل الكود اقصر ...
الجميل في هذه الحلقة انها تحوي تعريف المتغير و الشرط اضافة للزيادة او النقصان كله في سطر واحد منظم و بسيط على الشكل التالي:
for(initialization;condition;increment)
خطأ شائع : استعمال فواصل بداخل الحلقة بدلا من الفواصل المنقوطة
مثال:
اكتب برنامج يطبع الارقام من 1 حتى 10
#include<iostream>
using namespace std;
int main()
**
for(int counter=1;counter<=10;counter++)
cout<<counter<<endl;
return 0;
}
لاحظوا قصر الكود مقارنة بباقي الحلقات
مثال اخر :
اكتب برنامج يقوم بحساب مجموع الاعداد الزوجية من 2 حتى 100
الحل :
#include<iostream>
using namespace std;
int main()
**
int sum=0;
for(int number=2;number<=100;number+=2)
sum+=number;
cout<<"Sum is = "<<sum<<endl;
return 0;
}
مثال اخر :
اكتب برنامج يعرض التالي:
SSSS
S**S
S**S
S**S
SSSS
الحل :
هذا التمرين يحتاج لما يسمى ب nested loops اي حلقة بداخل حلقة و ها هو الحل و السبيل الوحيد لفهمه هو تحليله
#include<iostream>
using namespace std;
int main()
**
int w=5;
int z=4;
for(int i=1;i<=w;i++)**
for (int j=1;j<=z;j++)**
if (i==1 || i==w || j==1 || j==z) cout << 'S';
else cout << '*';
}
cout << endl;
}
}
منطلق بطموحي 15-01-2006, 11:59 AM اليكم بعضا من التمارين :
التمرين الاول :
اكتب برنامج يطلب من المستخدم ادخل عدد صحيح بحيث يكون بين 100 و 999 ...في حال ان ادخل المستخدم رقم ليس ضمن هذه الحدود يطلب منه ادخال الرقم مرة اخرى ...
مثال على المخرجات المطلوبة:
لو ادخل المستخدم 999 يتم عرض التالي :
**9**
**9**
**9**
و هلم جرا ...
مساعدة: استعمل الحلقة التكرارية do while
التمرين الثاني:
اكتب برنامج يطبع جدول للاعداد الزوجية بالترتيب و القيمة التربيعية لهذه الاعداد من العدد 2 حتى 10
مساعدة : لا تنسى استعمال المكتبة #include<iomanip >لكي يسهل عمل الجدول
التمرين الثالث:
اكتب برنامج يطلب من المستخدم ادخال عدد الارقام التي يود حساب مجموعها ثم يخبر المستخدم بالتالي :
1-مجموع هذه الارقام
2-مجموع الارقام الفردية فقط منها
3-مجموع الارقام الزوجية فقط منها
مثال على المخرجات:
How many numbers you would like to enter?
3
Enter a number
5
Enter a number
6
Enter a number
3
The sum = 14
The sum of odd integers= 8
The sum of even integers= 6
التمرين الرابع:
اكتب برنامج يطبع التالي:
*
***
*****
*******
*********
ملحوظة : النجمة الاولى تكون بمنتصف الخط اي سيكون شكل مثلث لكن الاكواد تعاندني
MoonDreams 15-01-2006, 03:02 PM شحوالكم ؟؟
افتقدناكم بالأمس إذ أن المنتدى كان مغلقاً للتعديلات :p
بالعكس product*=c اختصار product=product*c
كما هو الحال في product+=c و الحال نفسه في حالة القسمة و الطرح و اي عملية رياضية صحيحة
بصراحة ..
هذي معلومة جديدة علي :eek:
كنت أعرف أنها فقط تطبق على الجمع ولم يتم إخبارنا أو إطلاعي على أنه بالإمكان استخدامها مع أي عملية حسابية أخرى :confused:
تحياتي :D
منطلق بطموحي 15-01-2006, 03:17 PM :p
عادة لا يتم الاخبار بكل شيء ففي البرمجة اختصارات لاشياء كثيرة :D
و الغالب فعلا يتم الاخبار عن الجمع لانها اكثر عملية شائعة في عمليات الزيادة و النقصان
منطلق بطموحي 15-01-2006, 03:40 PM اود شرح مثال اخر على for loop ....
لدينا معادلة رياضية من عالم المحاسبة لحساب الفائدة المركبة هي:
a=p(1+r)^n علامة ^ تعني مرفوعة للاساس
a عبارة عن مقدارالمال المودع في نهاية السنة n
p عبارة عن المقدار الاصلي للاموال المستثمرة
r عبارة عن معدل الفائدة السنوية
المهم الان اننا نريد عمل برنامج لحساب الفائدة المركبة ....
هنا سنتعرف على مكتبة جديدة اسمها :
#include<cmath> بها الكثير من الاوامر و في الوقت الحالي سنتعرف على الامر pow(,) فمثلا لو قلت pow(2,3)يعني اني اريد حساب 2 مرفوع للاساس 3 يعني يساوي 8
و سنتعرف بالتفصيل لاوامر المكتبة لاحقا عند الانتهاء من هياكل التحكم ان شاء الله تعالى
الحل:
#include<iostream>
#include<iomanip>
#include<cmath>
using namespace std;
int main()
**
double amount; //amount to deposit
double principle=1000.0; //starting principle
double rate=0.05; //intrest rate
//formating our table
cout<<"Year"<<setw(21)<<"Amount to deposit"<<endl;
cout<<fixed<<setprecision(2);
for (int year=1;year<=10;year++) **
amount=principle*pow(1.0+rate,year);
//output table
cout<<setw(4)<<year<<setw(21)<<amount<<endl;
}
return 0;
}
اذا فالحل باستعمال for بسيطة جدا و عمل المعادلة التي ذكرتها باستعمال دالة الاساس pow من المكتبة cmath
ستكون المخرجات كالتالي:
Year Amount to deposit
1 1050.00
2 1102.50
3 1157.63
4 1215.51
5 1276.28
6 1340.10
7 1407.10
8 1477.46
9 1551.33
10 1628.89
منطلق بطموحي 15-01-2006, 11:19 PM الدرس العاشر:
عبارات continue و break
تتحكم عبارات break و continue في سير الحلقات loops التي درسناها ( for و while و do while ) كما تفيدنا break عند دراسة جملة الاختيار switch لاحقا ان شاء الله تعالى.
أولا : break
عند استعمال العبارة break في الحلقات for و while و do while هذا اضافة لجملة الاختيار switch فانها تسبب انهاء الحلقة و الخروج منها بشكل فوري
ثانيا : continue
عند استعمال العبارة continue في الحلقات while و do while و for فانها تقوم بحجب الرؤية عن الشرط و تقوم بالدورة التالية ( تطنيش يعني :eek: )
ساضع مثال على break و مثال على continue و اوضح العمل فيهما باذن الله
المثال الاول :
اكتب برنامج يقوم بعملية مسح على الارقام من 1 الى 10 من خلال حلقة مناسبة و يقوم بالتوقف نهائيا و الخروج من هذه الحلقة عند وصول الحلقة للرقم 5
الحل:
#include<iostream>
using namespace std;
int main()
**
for(int x=1;x<=10;x++)**
if(x==5) break;
cout<<x<<" "; }
return 0;
}
مع ان الحلقة افترضنا انها تقوم بمسح على الارقام الى 10 الا انها وصلت لعدد 5 فقامت برؤية الشرط if(x==5) break; فتم الخروج من الحلقة نهائية و سيتم عرض التالي على الشاشة:
1 2 3 4
المثال الثاني:
باستعال حلقة تكرارية مناسبة قم بعرض الارقام من 1 حتى 10 باستثناء طباعة الرقم 5
#include<iostream>
using namespace std;
int main()
**
for(int x=1;x<=10;x++)**
if(x==5) continue;
cout<<x<<" "; }
return 0;
}
تلاحظون هنا ان المخرجات
1 2 3 4 6 7 8 9 10
و لم يتم عرض 5 و هذا بسبب استعمال if(x==5)continue; و هذا الشرط يقوم بالتنطيش كما ذكرنا عند 5 و يقوم بالدورة التالية في الحلقة :D
التمرين على هذا الجزء يكمن في تمرين وضعته في مجموعة التمارين الاخيرة و طلبت استعمال الحلقة do while فيه ;)
منطلق بطموحي 15-01-2006, 11:20 PM ساتوقف هنا حتى نحل التمارين الجديدة ان شاء الله
:)
MoonDreams 16-01-2006, 01:47 AM مرحبا أستاذ ..
الحقيقة فكرت في كلامك هذا كثيراً ..
وهو :
ملاحظة: لاحظت ان البعض يستخدم المكتبة التالية
#include<iostream.h>
ان اضافة .h عبارة عن شيء قديم يستعمل بالمترجمات القديمة و لا يتطلب اضافة using namespace std; لكن من النسخة السادسة فما فوق من المترجمات لا يتطلب استعمال هذا النظام
أنا أستخدم هذه المكتبة لأنه هكذا تعلمنا ( ولعلك تشير إلي بكلامك !! ) :D
لكن إذا استغنينا عن (.h) هل يكون من الضروري استدعاء الأمر
using namespace std;
:confused:
أم أنه لا تأثير لذلك !
لأنه في الحقيقة إذا ما حطيت (.h) دائماً يطلع لي أخطاء في cout<< و cin>>
:eek: !!!!!
هذا شي .....
---------------
وهذا تمرين الإحداثي السيني والصادي
لكن فيه شي ، وهو أنه إذا كانت النقطة على الخط ( يعني أحد الإحداثيين يساوي صفر ) فهل نشرط كذلك شروط ليخبرنا بذلك ؟!
ومسامحة لأن اللغة الإنجليزية مو لهناك :( ! لكن أهم شي البرنامج مفهوم :D
#include<iostream.h>
main()
**
int a,b;
cout<<"Enter your first number"<<endl;
cin>>a;
cout<<"Enter your second number"<<endl;
cin>>b;
if(a<=0 && b>=0)
cout<<"The point in the 1st quarter "<<endl;
else if (a>=0 && b>=0)
cout<<"The point in the 2nd quarter "<<endl;
else if(a>=0 && b<=0)
cout<<"The point in the 3rd quarter "<<endl;
else if(a<=0 && b<=0)
cout<<"The point in the 4th quarter "<<endl;
else
cout<<"The point in the center"<<endl;
}
----------------------------
شيء آخر :
جلست أفكر في حل التمارين المتبقية ( لكن لم يسعفني الوقت كثيراً لحلها جميعها )
لكن عندي كم استفسار ...
بعد إذنك طبعاً
امممممممم
لحظة وارجع !
MoonDreams 16-01-2006, 02:07 AM -اكتب برنامج ياخذ 3 اعداد و يحدد من هو العدد الاكبر و من هو العدد الاصغرثم يحسب المدى (مساعدة: المدى=العدد الاكبر -العدد الاصغر (
هل تريده بحلقة التكرار ؟!
2-اعمل تعديل على البرنامج المشروح لحساب المتوسط بحيث يحسب المتوسط لاي عدد و لا يتقيد بعدد الطلبة الذي يساوي 10 بالمثال ...عند ادخال -1 كدرجة بتوقف البرنامج و يعرض لنا المتوسط ...أما في حالة لم يتم ادخال اي درجة يجب ان تطبع " لا توجد درجات مدخلة " و ينتهي عمل البرنامج
تقصد مثال while loop في الدرس (7) ؟؟
3-اكتب برنامج يحسب كم شخص رسب و كم شخص نجح من مادة ال C++ بحيث لو ادخل المستخدمة القيمة 1 تعني النجاح و لو ادخل القيمة 2 تعني الرسوب و من ثم يحسب لنا كم عدد الناجحين و الساقطين ( افترض عدد الطلبة = 10 (
بأي حلقة تكرار ؟ أم هناك حلقة محددة ؟!
منطلق بطموحي 16-01-2006, 02:14 AM السلام عليكم :
شكرا لك مرة اخرى على الحلول ...
بالنسبة لسؤال ال if حلك صحيح من الناحية البرمجية و لكن لم يؤدي المطلوب تماما ساضع لك التعديل ثم اعلق
#include<iostream>
using namespace std;
void main()
**
int a,b;
cout<<"Enter your first number"<<endl;
cin>>a;
cout<<"Enter your second number"<<endl;
cin>>b;
if(a<0 && b>0)
cout<<"The point in the 2nd quarter "<<endl;
else if (a>0 && b>0)
cout<<"The point in the 1st quarter "<<endl;
else if(a>0 && b<0)
cout<<"The point in the 4th quarter "<<endl;
else if(a<0 && b<0)
cout<<"The point in the 3rd quarter "<<endl;
else if (a==0&&b!=0)
cout<<"The point is on the Y-axis"<<endl;
else if (b==0&&a!=0)
cout<<"The point is on the X-axis"<<endl;
else
cout<<"The point in the center"<<endl;
}
التعديلات :
1- حذف .h و هنا ضروري جدا اضافة using namespace std; و هذه اجابة على سؤالك :p
2-الربع الاول هو الثاني و الثالث هو الرابع ...لذا غيرت بالكلمات و هذه مسالة رياضية بحتة لا علاقة لها بالبرمجة
3-حذف علامات المساوة في < و > اي اصغر و اكبر من حتى تعمل جملة else الاخيرة التي تقول ان النقطة في المنتصف
4-اضافة جملتين if بحيث الاولى تخبرنا ما اذا كانت النقطة على محور السينات او على محور الصادات
5-اضافة كلمة void ل main علما ان ترك المكان فارغ ليس خطأ و لكن يشكل تحذير من المترجم
منطلق بطموحي 16-01-2006, 02:17 AM هل تريده بحلقة التكرار ؟!
كما تريد ...
تقصد مثال while loop في الدرس (7) ؟؟
كلامك صحيح
بأي حلقة تكرار ؟ أم هناك حلقة محددة ؟!
طالما لم احدد ذلك و تم شرح جميع الحلقات بحمد الله تعالى فاستعمل ما شئت منها و لكن المهم ان تؤدي المطلوب...
MoonDreams 16-01-2006, 02:25 AM وعليكم السلام والرحمة :)
بداية لم أضع علامة المساواة في الشرط ؛ لكن لم أكن أدرِ إن كانت النقطة على الخط فهل تريدها أن تكون ضمن الأرباع أم لا !
لذلك وضعت علامات المساواة .. :p
1- حذف .h و هنا ضروري جدا اضافة using namespace std; و هذه اجابة على سؤالك
ما أفهم ليش نطول السالفة وهي قصيرة ؟؟ :confused:
.h أقصر وأسهل :D
فهل للأمر using namespace std; فوائد إضافية أكثر من .h
وشكراً لك :)
منطلق بطموحي 16-01-2006, 02:35 AM ما أفهم ليش نطول السالفة وهي قصيرة ؟؟
مواكبة للتطورات الحديثة في المترجمات ...
.h هي عبارة عن اضافة ما يسمى ب header file و نعم ستضطر فعلا لاستعمال هذا النوع من الملفات و انشائها اذا كنت تبرمج برامج كبيرة جدا و خاصة في المشاريع التي يشترك فيها عدد من الطلبة كله ياخذ قسم من البرنامج
التطورات الحديثة تقول لا تستعمل الملفات header و بالتالي تلغى .h من جميع المكتبات و يتم ذكر ماذا سيتم استعماله من المكتبات
فمثلا لو اضفت المكتبة :
#include<iostream>
و سنستعمل منها cin و cout و endl فيجب ان اذكر التالي :
using std::cout;
using std::cin;
using std::endl;
و هذا ما تذكره الكتب البرمجية التي تتبع في شرحها النسخة السادسة فما فوق و لكن كلما اريد اضافة شيء ساقول له ماذا ساستعمل امر مزعج
لذا هناك اختصار لجميع المكتبات بعد اضافاتها اضع الجملة
using namespace std;
و هنا اضمن ان كل ما ساستعمله سيكون معرف و لا تحدث مشاكل !
اعرف اني تكلمت كثيرا و ستظل تستعمل .h فلا بأس :eek:
منطلق بطموحي 16-01-2006, 02:41 AM و حتى لا تزعل و لا يضيق خلقك الحين بحط درس استثنائي اسمه namespace ;)
MoonDreams 16-01-2006, 02:45 AM بالعكس !!
لم تتكلم كثيراً :eek:
ولو عندك إضافت فأرجو ذكرها :D
طبعاً إذا بيبقى فيك نَفَس للإجابة على تساؤلاتي الكثيرة !
سين سؤال :
هل تعني أنه - مثلاً - عند كتابة
(.h ) يكون حجم الملف أكبر من أن يكون بدونها !!
منطلق بطموحي 16-01-2006, 03:06 AM درس استثنائي ( خاص ل MoonDreams ) :
موضوع الدرس هو تابع للرد السابق و موضوع ال namespace
ما قصتها يا ترى ؟
غير ما ذكرته سابقا فانه لاستعمال عضو من namespace اما استعال ما يسمى binary scope على الشكل
namespace _name::member و هذا ما سنشرحه في درس الدوال ان شاء الله
او استعمال كاستخدام using مثل المدعوة using namespace std; هنا انا استعمل النوع std منها
اليك مثال و بعده ستاتي تعليقات :
#include <iostream>
using namespace std;
namespace first
**
int var = 5;
}
namespace second
**
double var = 3.1416;
}
int main () **
cout << first::var << endl;
cout << second::var << endl;
return 0;
}
هلا اخبرتني ما هي المخرجات ؟
هلا تلحظ شيء معي ؟
var في ال namespace الاولى لها قيمة و var بل namespace الثانية لها قيمة ....هل المخرجات تاثرت بذلك ؟ هل هناك خطأ و قال المترجم انه اعادة تعريف و هذه تناقضات ؟
حسنا لن افصل تركيبة الاخ namespace تستطيع ملاحظتها بنفسك و بها :: بالمخرجات التي سندرسها لاحقا عن الدخول في الدوال
مثال اخر:
#include <iostream>
using namespace std;
namespace first
**
int x = 5;
int y = 10;
}
namespace second
**
double x = 3.1416;
double y = 2.7183;
}
int main () **
using first::x;
using second::y
cout << x << endl;
cout << y << endl;
cout << first::y << endl;
cout << second::x << endl;
return 0;
}
ما هي المخرجات ؟ ...ماذا حصل؟
مثال اخر :
#include <iostream>
using namespace std;
namespace first
**
int x = 5;
}
namespace second
**
double x = 3.1416;
}
int main () **
**
using namespace first;
cout << x << endl;
}
**
using namespace second;
cout << x << endl;
}
return 0;
}
ما هي المخرجات ؟
هل عرفت الان ان namespace تشكل اهمية في عالم البرمجة ؟
:confused: :confused: :confused:
منطلق بطموحي 16-01-2006, 03:11 AM هل تعني أنه - مثلاً - عند كتابة
(.h ) يكون حجم الملف أكبر من أن يكون بدونها !!
اطلاقا !
منطلق بطموحي 16-01-2006, 04:43 AM هذه هي التمارين التي لم تحل بعد ( لكي لا يظطر احد للرجوع للصفحات السابقة الا لقراءة الشرح مرة اخرى طبعا)
1-اكتب برنامج ياخذ 3 اعداد و يحدد من هو العدد الاكبر و من هو العدد الاصغرثم يحسب المدى (مساعدة: المدى=العدد الاكبر -العدد الاصغر (
2-اعمل تعديل على البرنامج المشروح لحساب المتوسط بحيث يحسب المتوسط لاي عدد و لا يتقيد بعدد الطلبة الذي يساوي 10 بالمثال ...عند ادخال -1 كدرجة بتوقف البرنامج و يعرض لنا المتوسط ...أما في حالة لم يتم ادخال اي درجة يجب ان تطبع " لا توجد درجات مدخلة " و ينتهي عمل البرنامج
3-اكتب برنامج يحسب كم شخص رسب و كم شخص نجح من مادة ال C++ بحيث لو ادخل المستخدمة القيمة 1 تعني النجاح و لو ادخل القيمة 2 تعني الرسوب و من ثم يحسب لنا كم عدد الناجحين و الساقطين ( افترض عدد الطلبة = 10 (
4- اكتب برنامج يطلب من المستخدم ادخل عدد صحيح بحيث يكون بين 100 و 999 ...في حال ان ادخل المستخدم رقم ليس ضمن هذه الحدود يطلب منه ادخال الرقم مرة اخرى ... و يظل البرنامج يسال المستخدم حتى يدخل المستخدم -1 فينتهي عمل البرنامج
مثال على المخرجات المطلوبة:
لو ادخل المستخدم 999 يتم عرض التالي :
**9**
**9**
**9**
و هلم جرا ...
مساعدة: استعمل الحلقة التكرارية do whileو لا تنسى عبارات continue و break
5- اكتب برنامج يطبع جدول للاعداد الزوجية بالترتيب و القيمة التربيعية لهذه الاعداد من العدد 2 حتى 10
مساعدة : لا تنسى استعمال المكتبة
كود:
#include<iomanip >
لكي يسهل عمل الجدول
6-اكتب برنامج يطلب من المستخدم ادخال عدد الارقام التي يود حساب مجموعها ثم يخبر المستخدم بالتالي :
1-مجموع هذه الارقام
2-مجموع الارقام الفردية فقط منها
3-مجموع الارقام الزوجية فقط منها
مثال على المخرجات:
How many numbers you would like to enter?
3
Enter a number
5
Enter a number
6
Enter a number
3
The sum = 14
The sum of odd integers= 8
The sum of even integers= 6
7-اكتب برنامج يطبع التالي:
MoonDreams 16-01-2006, 05:15 PM سلاااااااااااام :D
عُدنا !! >>> سبيس تووون :D
أول شي هذي حلول التمارين القديمة .. :rolleyes:
تفضل أستاذي وإن شاء الله يكون حلي صحيح :D
1-اكتب برنامج ياخذ 3 اعداد و يحدد من هو العدد الاكبر و من هو العدد الاصغرثم يحسب المدى (مساعدة: المدى=العدد الاكبر -العدد الاصغر (
#include <iostream>
using namespace std;
void main()
**
int n,i,max,min,ra;
cout<<"Enter number 1"<<endl;
cin>>n;
max=min=n;
for(i=2;i<4;i++)
**
cout<<"Enter number "<<i<<endl;
cin>>n;
if(max<n) max=n;
if(min>n) min=n;
}
ra= max-min;
cout<<"The MAX = "<<max<<"\nThe MIN = "<<min<<"\nThe range = "<<ra<<endl;
}
2-اعمل تعديل على البرنامج المشروح لحساب المتوسط بحيث يحسب المتوسط لاي عدد و لا يتقيد بعدد الطلبة الذي يساوي 10 بالمثال ...عند ادخال -1 كدرجة بتوقف البرنامج و يعرض لنا المتوسط ...
#include<iostream>
#include<iomanip>
using namespace std;
int main()
**
float total=0,counter=0,grade,average;
while(grade!=-1)
**
cout<<"Enter grade " ;
cin>>grade;
if(grade!=-1)
**
total+=grade; // means total=total+grade
counter++;
}
}
average=total/counter;
cout<<"Ahmed's class average is = "<<average<<endl;
return 0; // indicate program ended successfully fixed<<setprecision(2)<<
}
أما في حالة لم يتم ادخال اي درجة يجب ان تطبع " لا توجد درجات مدخلة " و ينتهي عمل البرنامج
هذي ما عرفت الها :( ! كيف نخليه يفحص أنه لا توجد درجات ؟
علماً بأني حاولت فيها كثيراً لدرجة أني استخدمت void !!!!!!!! :confused:
3-اكتب برنامج يحسب كم شخص رسب و كم شخص نجح من مادة ال C++ بحيث لو ادخل المستخدمة القيمة 1 تعني النجاح و لو ادخل القيمة 2 تعني الرسوب و من ثم يحسب لنا كم عدد الناجحين و الساقطين ( افترض عدد الطلبة = 10 (
#include<iostream>
#include<iomanip>
using namespace std;
int main()
**
int n,p=0,f=0,i;
cout<<"Chose:\n 1-Pass.\n 2-Fail.\n";
for(i=0;i<10;i++)
**
cout<<"Enter value\n" ;
cin>>n;
if(n==1)
**
p++;
}
else if(n==2)
**
f++
;
}
else
**
cout<<"Enter number 1 or 2 Please\n";
}
}
cout<<"The total of pass is: "<<p<<endl;
cout<<"The total of fail is: "<<f<<endl;
return 0; // indicate program ended successfully fixed<<setprecision(2)<<
}
-------------------------------------------------------
وأقدم جزيل شكري وامتناني على الدرس الاستثنائي :) وجهودك الطيبة
منطلق بطموحي 16-01-2006, 06:40 PM لقد فرحت كثيرا عدم استعمالك .h ...فمباارك :cool:
بالنسبة للسؤال الاول فالحل صحيح ....
بالنسبة للسؤال الثاني فايضا صحيح لكن بما ان اضفت المكتبة iomanip فاضفت لك الدقة العشرية الامر fixed setprecision(2) كي يظهر المعدل average بمنزلتين عشريتين فقط
بالنسبة للشيء الذي لم تستطيع حله و هو عند عدم ادخال الدرجات فالخدعة بسيطة باستعمال عبارة if اذا كان العداد counter مساوي للصفر فمعنى هذا اننا لم ندخل اي درجات
اليك التعديل:
#include<iostream>
#include<iomanip>
using namespace std;
int main()
**
float total=0,counter=0,grade,average;
while(grade!=-1)
**
cout<<"Enter grade " ;
cin>>grade;
if(grade!=-1)
**
total+=grade; // means total=total+grade
counter++;
}
}
if(counter!=0) **
average=total/counter;
cout<<"Ahmed's class average is = "<<fixed<<setprecision(2)<<average<<endl;}
else
cout<<"No grades were entered"<<endl;
return 0; // indicate program ended successfully
}
بالنسبة للسؤال الثالث فايضا الحل صحيح 100% و لكن لماذا استعملت المكتبة #include<iomanip> و انت لم تستخدم اية اوامر منها ؟
-----
اذا تبقى لدينا اربعة اسئلة ... من سؤال 4 حتى 7
منطلق بطموحي 16-01-2006, 07:57 PM ساقوم بشرح الدرس الحادي عشر لانهاء هياكل التحكم control structures و سيكون عليه تمرين واحد فقط ان شاء الله و ساتوقف حينها لحل التمارين الخمسة ( 4 في السابق اضافة لتمرين الدرس الاخير )...
الدرس الحادي عشر : جملة الاختيار switch
درسنا في السابق جملة الاختيار if else و ذكرنا ان هناك جملة اختيار اخرى هي switch كما ذكرت سابقا انها تحتاج لعبارة break التي درسناها في عبارات القفز jump statments ( break and continue ) ....
جملة switch دائما يمكن تحويلها لعبارات if else فهي صيغة مختصرة لها ....
ان الشكل العام لهذه الجملة كالتالي:
switch (expr) **
case c1:
statements // do these if expr == c1
break;
case c2:
statements // do these if expr == c2
break;
case c2: // Multiple values can share same code.
case c3:
case c4:
statements // do these if expr == any of c2, c3, or c4.
break;
. . .
default:
statements // do these if expr != any above
}
التفسير :
switch(expr) هذه البداية و اي حالة تاتي مثلا case c1 : معنى هذا if(expr==c1)
هناك حالة اختيارية هي الحالة default: هذه الحالة في حال ان جميع الحالات السابقة ليست صحيحة
لا تنسوا اضافة ' ' في حالة التعامل مع الحروف مثلا case'a':
في حالة التعامل مع الارقام لا نضع هذه العلامة ' '
في حالة كان لدينا اكثر من حالة تحت بند واحد مثلا
if(x==1||x==2||x==3) {cout<<"hi";}
فان جملة الاختيار switch المكافئة كالتالي:
switch(x) **
case 1:
case 2:
case 3:
cout<<hi";
يجب اضافة break ; بعد كل حالة دائما ( الحالة نقصد بها case )
كما هو موضح بالشكل العام للعبارة switch
ملحوظة صغير لم اذكرها سابقا : while(1) تعني ان الحلقة while ستستمر بالدوران بشكل مستمر اي لا نهائي ....
مثال:
محل حلويات يبيع 3 انواع مختلفة من الحلوى ....نريد تصميم برنامج بلغة C++ يخبرنا بمبيعات الشهر الماضي عن طريق ادخالها علما بان اسعار الحلويات كالتالي:
رقم المنتج : 1 السعر : 10
رقم المتج:2 السعر :5
رقم المنتج 3 السعر : 2.25
يتم اخبار المستخدم بمجموع المبيعات عند ادخاله -1
الحل :
يمكن حل التمرين بالطبع باستعمال عبارات if else لكن سنستخدم هنا عبارة switch
#include<iostream>
using namespace std;
int main() **
float price,retail=0;
int quantity,product;
while(1) **
cout<<"Enter the product number( -1 to stop)\n";
cin>>product;
if(product==-1) break;
cout<<"Enter the quantity\n";
cin>>quantity;
switch(product) **
case 1 :
price=10;
break;
case 2 :
price=5;
break;
case 3 :
price=2.25;
break;
}
retail+=(price*quantity);
}
cout<<"The retail value is = "<<retail<<endl;
return 0;
}
منطلق بطموحي 16-01-2006, 08:07 PM تمرين على الدرس الحادي عشر :
اكتب برنامج بلغة C++ يقوم بقراءة العمليات التالية :
+ عملية الجمع
- عملية الطرح
/ عملية القسمة
* عملية الضرب
% عملية باقي القسمة
! العملية المنطقية ليس
s عملية الخروج
ثم يطلب من المستخدم العدد الاول N1 و العدد الثاني N2
و يطلب من المستخدم نوع العملية التي يود ان يقوم بها.... مثلا سيدخل المستخدم + و يخبره بناتج الجمع
يتوقف البرنامج عن العمل في حال ان ادخل المستخدم العملية s
مثال على المخرجات :
Enter Operation: +
Enter N1: 3
Enter N2: 4
N1 + N2 = 3 + 4 = 7
Enter Operation: *
Enter N1: 2
Enter N2: 3
N1 * N2 = 2 * 3 = 6
Enter Operation: !
Enter N1: 1
Enter N2: 0
!N1 = !1 = 0
!N2 = !0 = 1
Enter Operation: S
استعن بعبارة switch للاختيار
------
انتهينا من دراسة هياكل التحكم control structures سانتظر حتى حل التمارين المتبقية ثم انتقل لدرس جديد تماما و لكن بالطبع سيعتمد على هياكل التحكم و كل درس في البرمجة معتمد على سابقه ....
MoonDreams 17-01-2006, 12:40 AM لقد فرحت كثيرا عدم استعمالك .h ...فمباارك :cool:
الله يبارك فيك
بالنسبة للسؤال الثالث فايضا الحل صحيح 100% و لكن لماذا استعملت المكتبة #include<iomanip> و انت لم تستخدم اية اوامر منها ؟
-----
امممممم
بصراحة .. بصراحة !!...
v
v
v
v
نظراً لضيق الوقت ظليت أبرمج على نفس الملف !
و
نسيت أشيل هذي المتبكة بعد ما حليت السؤال الثاني :D
فعلاً احنا ما نحتاجها هنا
وشكراً لتنبيهك :p
ولو لاحظت بعد الجمل التعليقية اللي إنته كاتبنها في برنامج حساب المتوسط ما أزلتها !!! :eek:
تحياتي
وإن شاء الله أتمكن من حل البقية في أقرب فرصة ..
وأجرب كلامك
بالنسبة للشيء الذي لم تستطيع حله و هو عند عدم ادخال الدرجات فالخدعة بسيطة باستعمال عبارة if اذا كان العداد counter مساوي للصفر فمعنى هذا اننا لم ندخل اي درجات
منطلق بطموحي 17-01-2006, 01:30 AM بانتظار المحاولات الجديدة ان شاء الله
:rolleyes: ;)
ايملي 18-01-2006, 02:31 AM عندي مسألة طويله لمادة هياكل بيانات عن المصفوفات
وأتمنى المساعده إذا وافقت راسلني وإذا لا الله كريم
ايملي 18-01-2006, 03:22 AM أنا عجزت أحل واجب الهياكل ممكن تساعدوني
بلييييييييز
أنا شوي وأبكي
لأن المادة صعبه جدا
والواجب تسليموا السبت الجاي
أنا أدرس في معهد العالمية للحاسب والتقنية يعني حرام كلمة مهندس فيه
الي يساعدني أدعيلوا واللي يطلب ألبيلوا بليييييييييز بسرعة
منطلق بطموحي 18-01-2006, 07:55 PM هل هذه هي المسألة ؟
http://www.tkne.net/vb/showthread.php?t=8304
MoonDreams 19-01-2006, 09:43 PM مرحباً .. :cool:
أعتقد أستاذنا عطيناك فترة استراحة كافية :p
وهانحن نعود بحلول التمارين ... :D
وإن شاء الله نحصل لنا كم علامة :eek: :D
بس بعد حل الأمثلة أبيك - إذا سمحت وما فيها ثقالة - تعيد لي شرح مثال أحس إني شوية مضيع فيه !!!!
عموماً .. هذه الحلول
على بركة الله نبدأ ..
بسم الله الرحمن الرحيم
-------------------------------
التمرين الاول :
اكتب برنامج يطلب من المستخدم ادخل عدد صحيح بحيث يكون بين 100 و 999 ...في حال ان ادخل المستخدم رقم ليس ضمن هذه الحدود يطلب منه ادخال الرقم مرة اخرى ...
مثال على المخرجات المطلوبة:
لو ادخل المستخدم 999 يتم عرض التالي :
**9**
**9**
**9**
و هلم جرا ...
مساعدة: استعمل الحلقة التكرارية do while
** ا **
** ل **
** ح **
** ل **
#include<iostream>
using namespace std;
void main()
**
int n,i,j,a,b,c;
cout<<"Enter chose any number btween 100 - 999\n";
cin>>n;
a=n/100;
b=n%100/10;
c=n%10/1;
do
**
for(i=0;i<=2;i++)
**
cout<<endl;
cout<<"*";
for(j=0;j<=0;j++)
**
cout<<"*";
if(i==0) cout<<a;
if(i==1) cout<<b;
if(i==2) cout<<c;
}
cout<<"**";
}
cout<<endl;
}while(n>999||n<100);
}
ــــــــــــــــــــــــــــــــــــــــــــــــــ ــــــــــــــــــــــــــــــــــــ
التمرين الثاني:
اكتب برنامج يطبع جدول للاعداد الزوجية بالترتيب و القيمة التربيعية لهذه الاعداد من العدد 2 حتى 10
مساعدة : لا تنسى استعمال المكتبة
كود:
#include<iomanip >
لكي يسهل عمل الجدول
الحل ^2
#include<iostream>
using namespace std;
void main()
**
int i;
cout<<"Number\t"<<"Squre\n";
for(i=2;i<=10;i+=2)
**
cout<<i<<"\t"<<i*i<<endl;
}
}
******************************
وهذا باستخدام مكتبة iomanip
#include<iostream>
#include<iomanip>
using namespace std;
void main()
**
int i;
cout<<"Number"<<setw(10)<<"Squre\n";
for(i=2;i<=10;i+=2)
**
cout<<setw(4)<<i<<setw(10)<<i*i<<endl;
}
}
ــــــــــــــــــــــــــــــــــــــــــــــــــ ــــــــــــــــــــــــــــــــــــ
التمرين الثالث:
اكتب برنامج يطلب من المستخدم ادخال عدد الارقام التي يود حساب مجموعها ثم يخبر المستخدم بالتالي :
1-مجموع هذه الارقام
2-مجموع الارقام الفردية فقط منها
3-مجموع الارقام الزوجية فقط منها
مثال على المخرجات:
How many numbers you would like to enter?
3
Enter a number
5
Enter a number
6
Enter a number
3
The sum = 14
The sum of odd integers= 8
The sum of even integers= 6
الحل =
#include<iostream>
using namespace std;
void main()
**
int m,n,s=0,o=0,e=0,i;
cout<<"How many numbers you would like to enter?\n";
cin>>m;
for(i=0;i<m;i++)
**
cout<<"Enter a number\n";
cin>>n;
s+=n;
if(n%2==0) e+=n;
if(n%2!=0) o+=n;
}
cout<<"The sum of all numbers = "<<s<<"\nThe sum of odd numbers = "<<o<<"\nThe sum of even numbers = "<<e<<endl;
}
ــــــــــــــــــــــــــــــــــــــــــــــــــ ــــــــــــــــــــــــــــــــــــ
التمرين الرابع:
اكتب برنامج يطبع التالي:
كود PHP:
*
***
*****
*******
*********
ملحوظة : النجمة الاولى تكون بمنتصف الخط اي سيكون شكل مثلث لكن الاكواد تعاندني
الحل :.
#include<iostream>
#include<iomanip>
using namespace std;
void main()
**
int i,j;
float n=10;
for(i=1;i<10;i++)
**
n=n-0.5;
cout<<endl<<setw(n);
for(j=0;j<i;j++)
**
if(i%2==0) continue;
cout<<"*";
}
}
cout<<endl;
}
ــــــــــــــــــــــــــــــــــــــــــــــــــ ــــــــــــــــــــــــــــــــــــ
تمرين على الدرس الحادي عشر :
اكتب برنامج بلغة C++ يقوم بقراءة العمليات التالية :
+ عملية الجمع
- عملية الطرح
/ عملية القسمة
* عملية الضرب
% عملية باقي القسمة
! العملية المنطقية ليس
s عملية الخروج
ثم يطلب من المستخدم العدد الاول N1 و العدد الثاني N2
و يطلب من المستخدم نوع العملية التي يود ان يقوم بها.... مثلا سيدخل المستخدم + و يخبره بناتج الجمع
يتوقف البرنامج عن العمل في حال ان ادخل المستخدم العملية s
مثال على المخرجات :
Enter Operation: +
Enter N1: 3
Enter N2: 4
N1 + N2 = 3 + 4 = 7
Enter Operation: *
Enter N1: 2
Enter N2: 3
N1 * N2 = 2 * 3 = 6
Enter Operation: !
Enter N1: 1
Enter N2: 0
!N1 = !1 = 0
!N2 = !0 = 1
Enter Operation: S
استعن بعبارة switch للاختيار
الحـــل :
#include<iostream>
#include<iomanip>
using namespace std;
void main()
**
int n1,n2;
char a;
while(1)
**
cout<<"\nChose one operation :\n (+)\t (-)\t (*)\t (/)\t (%)\t (!)\n [or Press (s) to Exit]\n";
cin>>a;
if (a=='s'|| a=='S')break;
cout<<"Enter your 1st number :\n";
cin>>n1;
cout<<"Enter your 2nd number :\n";
cin>>n2;
switch(a)
**
case '+':
cout<<n1<<" + "<<n2<<" = "<<n1+n2;
break;
case '-':
if(n1>n2) cout<<n1<<" - "<<n2<<" = "<<n1-n2;
if(n2>n1) cout<<n2<<" - "<<n1<<" = "<<n2-n1;
break;
case '*':
cout<<n1<<" * "<<n2<<" = "<<n1*n2;
break;
case '/':
if(n1>n2) cout<<n1<<" / "<<n2<<" = "<<n1/n2;
if(n2>n1) cout<<n2<<" / "<<n1<<" = "<<n2/n1;
break;
case '%':
if(n1>n2) cout<<n1<<" % "<<n2<<" = "<<n1%n2;
if(n2>n1) cout<<n2<<" % "<<n1<<" = "<<n2%n1;
break;
case '!':
cout<<"!"<<n1<<" = "<<!n1;
cout<<setw(10)<<"!"<<n2<<" = "<<!n2;
break;
default:
cout<<"Error! Pleas,Chose Again";
break;
}
}
}
ــــــــــــــــــــــــــــــــــــــــــــــــــ ــــــــــــــــــــــــــــــــــــ
ما أدري ..
هل بقى تمرين ما حليناه ؟؟! :confused:
MoonDreams 19-01-2006, 10:01 PM أستاذنا العزيز منطلق
يا ليت توضح شرح هذا المثال أكثر إذا أمكن ... :)
وشكراً جزيلاً لك ؛؛
اود شرح مثال اخر على for loop ....
لدينا معادلة رياضية من عالم المحاسبة لحساب الفائدة المركبة هي:
a=p(1+r)^n علامة ^ تعني مرفوعة للاساس
a عبارة عن مقدارالمال المودع في نهاية السنة n
p عبارة عن المقدار الاصلي للاموال المستثمرة
r عبارة عن معدل الفائدة السنوية
المهم الان اننا نريد عمل برنامج لحساب الفائدة المركبة ....
هنا سنتعرف على مكتبة جديدة اسمها :
كود:
#include<cmath>بها الكثير من الاوامر و في الوقت الحالي سنتعرف على الامر pow(,) فمثلا لو قلت pow(2,3)يعني اني اريد حساب 2 مرفوع للاساس 3 يعني يساوي 8
و سنتعرف بالتفصيل لاوامر المكتبة لاحقا عند الانتهاء من هياكل التحكم ان شاء الله تعالى
منطلق بطموحي 19-01-2006, 10:32 PM السلام عليكم :
ما شاء الله ...حلول منظمة و ممتازة ...لكن عندي تعليق بالنسبة للسؤال الاول الذي يطبع الرقم مفككا
عملت لك نسخة معدلة حيث ان البرنامج لديك يطلب من المستخدم ادخال الرقم مرة واحدة و يفككه و شيء اخر اذا ادخل رقم ليس ضمن الحدود يقع في خطأ الحلقات اللانهائية و يعصب المترجم
الحل كان باضافة عبارات break و continue و جعل الحلقة غير منتهية عن طريقة جعل while(1) و ادخال الجمل ما قبل الحلقة بداخلها كي يظل يسال المستخدم ....ايضا هناك حلقتين for لا ادري ما الهدف منها....انت قرات نسخة السؤال القديمة عندما وضعته مرة اخرى في اخر مجموعة قلت لا تنسوا استعمال continue و break ...
:p
اليك التعديل :
#include<iostream>
using namespace std;
void main()
**
int n,i,j,a,b,c;
do
**
cout<<"Enter chose any number btween 100 - 999(-1 to stop)\n";
cin>>n;
if(n==-1) break;
else if(n<100||n>999) **
cout<<"Invalid entry...Try again\n";
continue; }
a=n/100;
b=n%100/10;
c=n%10/1;
cout<<"**"<<a<<"**"<<endl<<"**"<<b<<"**"<<endl<<"**"<<c<<"**"<<endl;
}while(1);
}
اما بالنسبة لبقية التمارين فصحيحة 100 % :cool:
-----
بالنسبة للمثال الذي تطلب توضيحه ما هو الامر الغير الواضح ؟ هل هو المثال نفسه غير واضح ام المكتبة cmath ؟
قبل ان انسى بما انك تريد علامات :p ....اممم بعد تفكير شرير :eek: ساعطيك 95 % :D
منطلق بطموحي 19-01-2006, 10:38 PM ان شاء الله تعالى و بعد ان انتهينا من هياكل التحكم سابدأ من الدرس القادم للانتقال الى موضوع جديد و مناقشته هو موضوع الدوال functions
عرفنا طبعا الدالة الرئيسية main و لكن هل هي الدالة الوحيدة في C++ ....الا يمكن ان ننشأ دوال لانفسنا ...؟
ترقبونا ..... ( دعاية :p )
MoonDreams 20-01-2006, 12:20 AM بداية ..
شكراً يا أستاذي على التعديل ..:rolleyes:
اما بالنسبة لبقية التمارين فصحيحة 100 %
قبل ان انسى بما انك تريد علامات ....اممم بعد تفكير شرير ساعطيك 95 %
الحين التمارين صحيحة 100% وتعطيني بس 95 % ؟؟!! :eek: :mad:
يا الله ..
الحمد لله إنو مستوانا ممتاز :D
وطبعاً كنت أمزح ! فهناك تمارين أخطأت فيها قليلاً :(
-----
بالنسبة للمثال الذي تطلب توضيحه ما هو الامر الغير الواضح ؟ هل هو المثال نفسه غير واضح ام المكتبة cmath ؟
أعتقد أن المكتبة تتيح لنا استخدام بعض العمليات الحسابية ( كالأس مثلاً )
لكن لا أدريالمثال كله على بعضه أحس إنه فيه شي من الغموض وعدم الوضوح !!! :eek:
ولماذا أعطينا بعض المتغيرات قيم معينة ؟؟
مثلاً أعطينا principle القيمة 1000.0
والـ rate أعطيناها القيمة 0.05
:confused:
معذرة إن لم أفهم ! :(
منطلق بطموحي 20-01-2006, 12:45 PM كانت القيم 1000.0 و 0.05 قيم افتراضية اي انه سيحسب الفائدة المركبة باعتبار ان هذه القيمة معطاة في المعادلة
يعني افترض انك تدرس المحاسبة و صادفك هذا السؤال و تريد حله عن طريق C++ فبدلا من ات يطلب من المستخدم قيم المستخدم يريد معرفة القيم فقط عند 1000.0 و 0.05 و باقي القيم يتم التعويض فيعا بالمعادلة التي ذكرتها غير ان n هي عدد السنوات اي تتغير من 1 الى 10 اظن بالسؤال و ايضا هذا افتراض انها عشرة
لم يكن الهدف من السؤال التعقيد و لكن الهدف هو استخدام المكتبة cmath و استعملت منها الامر pow(x,y) و هو امر الرفع للاساس .... 2^3 = 2*2*2=8 تعادل pow(2,3) برمجيا طبعا لا بد من اضافة المكتبة cmath .....و لاحظ ان المعادة مرفوعة للاساس n هذا ما دعاني لاستخدام المكتبة
اذا كان استخدام المكتبة لا زال يشكل غموضا لديك فالدرس القادم في الدوال اول ما سيكون سيكون شرح عن المكتبة cmath و ليس اوامرها هذه المرة انما سنسميها الدوال :p
و ايضا درس الدوال سيحسسك باهمية الامر return الذي سالت عنه سابقا و ستعرف لماذا استخدمته ....
اما اذا لا زال حل السؤال غامضا فارجو ان تخبرني ....
منطلق بطموحي 20-01-2006, 01:30 PM اليك نسخة من البرنامج عامة اكثر الذي يحسب الفائدة المركبة ...قمت بالغاء principle=1000.0; الذي يمثل بالمعادلة الرمز p ( التي ذكرتها ) و بالغاء 0.05 الذي يمثل بالمعادلة التي ذكرتها الحرف r و جعلت المستخدم هو الذي يحدد القيمة لهما و بالتالي البرنامج سيكون اعم و اشمل
#include<iostream>
#include<iomanip>
#include<cmath>
using namespace std;
int main()
**
double amount; //amount to deposit
double principle; //starting principle
double rate; //intrest rate
cout<<"What is your starting principle\n";
cin>>principle;
cout<<"What is the intrest rate in your problem\n";
cin>>rate;
//formating our table
cout<<"Year"<<setw(21)<<"Amount to deposit"<<endl;
cout<<fixed<<setprecision(2);
for (int year=1;year<=10;year++) **
amount=principle*pow(1.0+rate,year);
//output table
cout<<setw(4)<<year<<setw(21)<<amount<<endl;
}
return 0;
}
و تلاحظ استخدام المكتبة cmath يكمن هنا :
amount=principle*pow(1.0+rate,year);
و هذا مكافئ للمعادلة التي ذكرتها و هي
a=p*(1+r)^n
principle نفسها p مضربة ب الدالة pow(1.0+rate,year) التي تعادل تماما (1+r)^n و الدالة pow ( دالة الاساس) من الدوال الجاهزة و سنتعرض لها الدرس القادم هي و غيرها من دوال المكتبة cmath باذن الله ....
لو اردت تطوير اكثر بالبرنامج اجعل for من 1 حتى s مثلا حيث s يدخله المستخدم قبل الدخول للحلقة يمثل عدد السنوات التي يريد حساب الفائدة لها و لا يقتصر الامر على السنوات العشرة الاولى ....
منطلق بطموحي 20-01-2006, 06:48 PM الدرس الثاني عشر :
من هذا الدرس ان شاء الله سنبدأ بالموضوع الثاني بعد الانتهاء من هياكل التحكم ...
عنوان الموضوع الثاني سيكون : Functions الدوال
في الحقيقة لقد تعرفنا على الدوال دون ان اذكر هذا سابقا و الدالة التي تعاملنا معها هي الدالة الرئيسة main و استعملنا منها int main() و void main() .... هذه الدالة لا يقوم اي برنامج بدونها ....و لكن من الان فصاعدا سنتعامل مع دوال اخرى...
لماذا ندرس الدوال؟
غالبا فان المشاكل البرمجية التي ستصادفنا لاحقا هي اكثر طولا و تعقيدا من المشاكل التي تعرضنا لها في هياكل التحكم سابقا لذا فان احد الطرق التي نلجأ اليها في البرمجية هي تقسيم المشكلة الكبيرة الى مشاكل صغيرة يتم ربط بعضها البعض و هنا ياتي دور تقسيم البرامج لدوال functions
و للدوال فوائد سنكتشفها من خلال البرامج و الشروح القادمة باذن الله
منطلق بطموحي 20-01-2006, 07:09 PM الدرس الثالث عشر :
دوال المكتبة cmath :
استخدمنا سابقا هذه المكتبة في مثال على الحلقة for
صيغة المكتبة :
#include<cmath>
الدوال التي تحويها هذه المكتبة كثيرة ساتعرض لبعضها ...
exp(x) هي الدالة e بالرياضيات مثلا
exp(1.0) قيمتها 2.71828
من الدوال ايضا : fabs(x) و هي دالة مطلق العدد
مثلا fabs(-8) مساوية ل 8
من الدوال الدالة التي تعرضنا لها دالة الاساس :
pow(x,y) و تعني القيمة x مرفوعة للاساس y
مثال عليها : pow(3,2) تعني 3 ^2 = 9
اخر دالة ساتعرض لها هي دالة الجذر sqrt(x)
مثلا sqrt(9.0) تساوي 3.0
و هناك غيرها من الدوال sin و cos و tan الدوال المثلثية
و log(x) اللوغاريثم ....الخ
مثال :
اكتب برنامج يقوم بحساب قيمة الجذر لعدد صحيح ثم يطلب من المستخدم عددين صحيحين يقوم بحساب العدد الاول مرفوع لاساس العدد الثاني ...
الحل:
باستخدام دوال المكتبة بكل بساطة و يسر ...
#include<iostream>
#include<cmath>
using namespace std;
int main()**
int x,n;
cout<<"Enter two numbers\n";
cin>>x>>n;
cout<<x<<"raised to the power of "<<n<<" is equal = "<<pow(x,n)<<endl;
cout<<"Enter a number\n";
cin>>x;
cout<<"The square root of "<<x<<" is = "<<sqrt(x)<<endl;
return 0;
}
مثال على المخرجات :
Enter two numbers
2 3
2raised to the power of 3 is equal = 8
Enter a number
81
The square root of 81 is = 9
منطلق بطموحي 20-01-2006, 07:32 PM مثال اخر :
اكتب برنامج يقوم بحساب القيمة التربيعية للاعداد من 1 حتى 5دون استخدام المكتبة #include<cmath> مرة بدون استخدام اي دوال و مرة ببرمجة دالة اعطها الاسم square ...
الحل:
اولا : الحل بدون استخدام دوال
#include<iostream>
using namespace std;
int main()
**
for(int n=1;n<=5;n++)
cout<<n*n<<" ";
cout<<endl;
return 0;
}
و هذا لا يحتاج للشرح ...
ثانيا : الحل باستخدام الدوال
#include<iostream>
using namespace std;
int square(int); // function prototype
int main() **
for(int n=1;n<=5;n++)
cout<<square(n)<<" "; //function call
cout<<endl;
return 0;
}
//designing function
int square(int n) **
return n*n ;
}
نلاحظ اولا ما يسمى prototype يكون دائما قبل الدالة الرئيسة يكون شكله مشابه للدالة في الاسفل ....على الشكل
type name(values);
type هو النوع و سيكون اما void او int او float ...الخ مما درسناه
name الاسم للدالة و هذا انت تتحكم فيه ...سمها ما تشاء
values ممكن ان تكون اكثر من قيمة اي ماذا ستاخذ الدالة ....بمثالنا تاخذ قيمة صحيحة int و هنا لا يتم ذكر اسم المتغير ... لا حاجة لذلك
فلنفترض انها تاخذ قيمتين مثلا واحدة من نوع int و الاخرى float سيكون المظهر كالتالي:
int square(int,float); و انوه لاهمية الفاصلة المنقوطة في نهاية ال prototype الذي يكون فوق ال main
الان ننتقل للدالة الرئيسة main لاحظوا هذا :
cout<<square(n)<<" "; //function call
هذا نسميه مناداة الدالة ....اممم الان ننادي باسم الدالة و القيمة التي تأخذها ...حتى بالنهاية يتم طباعة ما نريد من خلال الدالة الرئيسة
الان ننتقل للدالة نلاحظ انها على الشكل :
int square(int n) **
return n*n ;
}
و تلاحوظن بالتاكيد انها بنفس شكل ال prototype تماما الا ان القيمة ما بين الاقواس اعطيناها اسم و هذا واجب و ان الفاصلة المنقوطة لا تتواجد هنا نهائيا
الان ناتي لدالخها نلاحظ return n*n; و هذا يعني ان الدالة ترجع n*n اي القيمة المربعة لعدد ...الان لو رجعنا للدالة الرئيسة و لاحظنا مناداة الدالة سترجع لنا القيمة التربيعية و تطبعها ....هل عرفتم الان اهمية return ؟
ملحوظة مهمة جدا : اي دالة نود استخدام return فيها يجب ان تكون من نوع يرجع قيمة سواء int او غيره و لا نستعمل void مثلا لانها دالة لا ترجع قيم ...
نفس المثال السابق بتغيير بسيط :
#include<iostream>
using namespace std;
int square(int); // function prototype
int main() **
for(int n=1;n<=5;n++)
cout<<square(n)<<" "; //function call
cout<<endl;
return 0;
}
//designing function
int square(int k) **
return k*k ;
}
الملاحظة ان بالدالة استخدمت القيمة k و التي لم تكن موجودة بل main هل ستختلف النتائج ...؟ لا !
استعمل ما شئت و لكن بنفس الترتيب الذي تريده لانه بالاخير يتم استيعاضها بالدالة الرئيسة
الان بالنسبة للبرامج السابقة كلها لها نفس المخرجات بالطبع !
منطلق بطموحي 20-01-2006, 07:45 PM مثال :
اكتب برنامج باستخدام الدوال يقوم بحساب متوسط الدرجات لثلاثة قيم صحيحة و المتوسط يكون بدقة عشرية لا تزيد عن منزلتين عشريتين ...فليكن اسم الدال |