السلام عليكم,
ممكن حدا من الاخوة بيكتب لنا افكار عده متسلسله لعمل functions احب ان اتدرب عليها و كتابتها و من ثم و ضعها هنا للنقاش ان كان فيها خطأ ما
اكملت دروس الدوال من مده فصيره و حابب اتدرب عليها عن طريق كتابه ما ستقترحونه
السلام عليكم,
ممكن حدا من الاخوة بيكتب لنا افكار عده متسلسله لعمل functions احب ان اتدرب عليها و كتابتها و من ثم و ضعها هنا للنقاش ان كان فيها خطأ ما
اكملت دروس الدوال من مده فصيره و حابب اتدرب عليها عن طريق كتابه ما ستقترحونه
يعني مثلاً ...اكتب دالة تقوم بحساب مجموع عددين (نمررهما كوسائط ) وتعيد المجموع ..
هكذا تقصد ؟...إذا كان ذلك ..فهذه بعض الأمثلة :
اكتب دالةتأخذ وسيطين (عددين صحيحين) ..وتعيد ناتج قسمة الأول على الثاني ..(إن لم يكن الثاني 0)
اكتب دالة تأخذ وسيطاً (حرف ).. تعيد الحرف التالي له ... وتعيد a إن ان الحرف المدخل هوz ..
اكتب دالة تأخذ حرفاً صغيراً وتعيد الحرف الكبير المقابل له ...
اكتب دالة تأخذ حرفاً كبيراً وتعيد الحرف الصغير مالقابل له ...
اجمع الدالتين السابقتين في دالة واحدة واكتب دالة أخرى للتعرف إذا كان العدد المدخل كبير أو صغير ثم تقوم بعكسه (الكبير تجعله صغير والصغير تجعله كبير )
حل المسائل الخمس السابقة وأنتظر إجاباتك
و أنا أقترح عليك السؤال التالي :
اكتب دالة تستقبل عددا صحيحاً و تعيد true إذا كان فردياً و false في الحالة المعاكسة.
المطلوب هو كتابة الدالة بأكثر من خمسة طرق :)
C++ and Java, say, are presumably growing faster than plain C, but I bet C will still be around. ― Dennis Ritchie
~OoO~________--------------------------------------------________~OoO~
من مواضيعي :
مصطفى 36a2 كتب:يعني مثلاً ...اكتب دالة تقوم بحساب مجموع عددين (نمررهما كوسائط ) وتعيد المجموع ..
هكذا تقصد ؟...إذا كان ذلك ..فهذه بعض الأمثلة :
اكتب دالةتأخذ وسيطين (عددين صحيحين) ..وتعيد ناتج قسمة الأول على الثاني ..(إن لم يكن الثاني 0)
اكتب دالة تأخذ وسيطاً (حرف ).. تعيد الحرف التالي له ... وتعيد a إن ان الحرف المدخل هوz ..
اكتب دالة تأخذ حرفاً صغيراً وتعيد الحرف الكبير المقابل له ...
اكتب دالة تأخذ حرفاً كبيراً وتعيد الحرف الصغير مالقابل له ...
اجمع الدالتين السابقتين في دالة واحدة واكتب دالة أخرى للتعرف إذا كان العدد المدخل كبير أو صغير ثم تقوم بعكسه (الكبير تجعله صغير والصغير تجعله كبير )
حل المسائل الخمس السابقة وأنتظر إجاباتك
شكرا لك اخي و شكرا للاخ احمد,
حابب اعرف ماذا تقصد بالوسيط في اللغه الانكليزيه؟ هل هو integer or variable?
انا عارف لان حظرتك وضحت عددين صحيحين اذن هو انتجر و لكن في السؤال الثاني مطلوب و سيط حرف اريد التاكد ان الوسيط معناه فريبل او ماذا في الانكليزيه
صمودا كتب:شكرا لك اخي و شكرا للاخ احمد,
حابب اعرف ماذا تقصد بالوسيط في اللغه الانكليزيه؟ هل هو integer or variable?
انا عارف لان حظرتك وضحت عددين صحيحين اذن هو انتجر و لكن في السؤال الثاني مطلوب و سيط حرف اريد التاكد ان الوسيط معناه فريبل او ماذا في الانكليزيه
على ما اعتقد تقصد الوسيط الحسابي و لست متاكدا لاني و اعوذ بالله من كلمه اني تعلمت بدائيات اللغه بالانكليزي
حل السؤال الاول ادناه ارجو ان تخبرني باي خطأ
شكرا
#include <iostream>
using namespace std;
int average(int x, int y);
int main()
{
int firstn;
int secondn;
cout << "Please enter the tow numbers below to get the median: " << endl;
cin >> firstn;
cin >> secondn;
int total = average(firstn, secondn);
cout << total << endl;
}
int average(int x, int y)
{
if (x == 0 || y == 0)
{
cout << "Either x or y is ZERO" << endl;
}
else
{
return (x + y)/2;
}
}مصطفى 36a2 كتب:يعني مثلاً ...اكتب دالة تقوم بحساب مجموع عددين (نمررهما كوسائط ) وتعيد المجموع ..
هكذا تقصد ؟...إذا كان ذلك ..فهذه بعض الأمثلة :
اكتب دالةتأخذ وسيطين (عددين صحيحين) ..وتعيد ناتج قسمة الأول على الثاني ..(إن لم يكن الثاني 0)
اكتب دالة تأخذ وسيطاً (حرف ).. تعيد الحرف التالي له ... وتعيد a إن ان الحرف المدخل هوz ..
اكتب دالة تأخذ حرفاً صغيراً وتعيد الحرف الكبير المقابل له ...
اكتب دالة تأخذ حرفاً كبيراً وتعيد الحرف الصغير مالقابل له ...
اجمع الدالتين السابقتين في دالة واحدة واكتب دالة أخرى للتعرف إذا كان العدد المدخل كبير أو صغير ثم تقوم بعكسه (الكبير تجعله صغير والصغير تجعله كبير )
حل المسائل الخمس السابقة وأنتظر إجاباتك
اخي ممكن تعيد كتابه اخر 4 اساله و تكتبها باللغه الانلكيزيه اجد صعوبه بفهمها مثلا
حرف كبير و حرف صغير, هل تقصد Cap Letter and Small Letter?
مرحبا بك أخي...
بالنسبة لكودك ..
#include <iostream>
using namespace std;
int average(int x, int y);
int main()
{
int firstn;
int secondn;
cout << "Please enter the tow numbers below to get the median: " << endl;
cin >> firstn;
cin >> secondn;
int total = average(firstn, secondn);
cout << total << endl;
}
int average(int x, int y)
{
if (x == 0 || y == 0)
{
cout << "Either x or y is ZERO" << endl;
}
else
{
return (x + y)/2;
}
}في هذا المكان بالتحديد :
if (x == 0 || y == 0)
{
cout << "Either x or y is ZERO" << endl;
}. لا تتركها بدون return سيولد لك ذلك أخطاء في البرنامج ..
اقتباسحابب اعرف ماذا تقصد بالوسيط في اللغه الانكليزيه؟
أقصد parameter ..
اقتباسعلى ما اعتقد تقصد الوسيط الحسابي
لا بل أقصد عملية القسمة العادية : مثلاً نمرر 2 , 3 ,ويعيد التابع 3/2 ... وإذا مررنا 3و0 نطبع عبارة خطأ :القسمة على صفر ولا ننفذ العملية ...
اقتباسحرف كبير و حرف صغير, هل تقصد Cap Letter and Small Letter?
نعم هذا ما قصدته ... مثلاُ نمرر a للfunction فتعيد A
اقتباساخي ممكن تعيد كتابه اخر 4 اساله و تكتبها باللغه الانلكيزيه اجد صعوبه بفهمها
حسنا سأكتب لك الprototype للدوال الأربعة الأولى وأنت اكتب الbody لها ..
float first(float ,float ); char second(char ); char third(char); char forth(char);
ترجمة الكلام السابق :
دالة function
تأخذ وسيط : pass a parameter
تعيد قيمة return a value
حرف char
إذا كان لا يزال هناك شيء غير مفهوم فلا بأس اسأل ..
تحياتي
مصطفى 36a2 كتب:مرحبا بك أخي...
بالنسبة لكودك ..
#include <iostream> using namespace std; int average(int x, int y); int main() { int firstn; int secondn; cout << "Please enter the tow numbers below to get the median: " << endl; cin >> firstn; cin >> secondn; int total = average(firstn, secondn); cout << total << endl; } int average(int x, int y) { if (x == 0 || y == 0) { cout << "Either x or y is ZERO" << endl; } else { return (x + y)/2; } }في هذا المكان بالتحديد :
if (x == 0 || y == 0) { cout << "Either x or y is ZERO" << endl; }. لا تتركها بدون return سيولد لك ذلك أخطاء في البرنامج ..
أقصد parameter ..
لا بل أقصد عملية القسمة العادية : مثلاً نمرر 2 , 3 ,ويعيد التابع 3/2 ... وإذا مررنا 3و0 نطبع عبارة خطأ :القسمة على صفر ولا ننفذ العملية ...
نعم هذا ما قصدته ... مثلاُ نمرر a للfunction فتعيد A
حسنا سأكتب لك الprototype للدوال الأربعة الأولى وأنت اكتب الbody لها ..
float first(float ,float ); char second(char ); char third(char); char forth(char);ترجمة الكلام السابق :
دالة function
تأخذ وسيط : pass a parameter
تعيد قيمة return a value
حرف char
إذا كان لا يزال هناك شيء غير مفهوم فلا بأس اسأل ..
تحياتي
السلام عليكم اخي مصطفى
شكرا جزيلا لك الان كل شي واضح
نعم كان لدي خطأ و اكتشفت عدم وجود ال return
لانه لازال يوجد احتمال اخر يمكن ان يكون الرقم غير صفر في if conditional statement
ساقوم بحل البقيه ان شاء الله
تحياتي لك
صمودا كتب:السلام عليكم اخي مصطفى
شكرا جزيلا لك الان كل شي واضح
نعم كان لدي خطأ و اكتشفت عدم وجود ال return
لانه لازال يوجد احتمال اخر يمكن ان يكون الرقم غير صفر في if conditional statement
ساقوم بحل البقيه ان شاء الله
تحياتي لك
حل التمرين الثاني حسب ما فهمته
#include <iostream>
using namespace std;
char letterFun(char word);
int main()
{
char letter;
cout << "Enter a character please: " << endl;
cin >> letter;
cout << letterFun(letter);
}
char letterFun(char word)
{
return word;
}صمودا كتب:حل التمرين الثاني حسب ما فهمته
#include <iostream> using namespace std; char letterFun(char word); int main() { char letter; cout << "Enter a character please: " << endl; cin >> letter; cout << letterFun(letter); } char letterFun(char word) { return word; }
حل السؤال الاخر
#include <iostream>
using namespace std;
char capt(char const * x);
int main()
{
cout << capt("training");
}
char capt(char const * x)
{
return x[0] - 32;
}السلام عليكم
بالنسبة لسؤالي فقد يكون صعباً عليك بعض الشيء إذا كنت جديد على C++, لذا سأضعه في موضوع مستقل للنقاش و أضع جميع الحلول الممكنة و يمكنك المشاركة إ أردت :)
سأضع رابط الموضوع حالما تتم كتابته.
C++ and Java, say, are presumably growing faster than plain C, but I bet C will still be around. ― Dennis Ritchie
~OoO~________--------------------------------------------________~OoO~
من مواضيعي :
صمودا كتب:حل السؤال الاخر
#include <iostream> using namespace std; char capt(char const * x); int main() { cout << capt("training"); } char capt(char const * x) { return x[0] - 32; }
مثال اخر استخدمت فيه ال toupper() built in function
#include <iostream>
#include <string>
using namespace std;
char const capt(string letter);
int main()
{
cout << capt("wadi");
}
char const capt(string letter)
{
letter[0] = toupper(letter[0]);
return letter[0];
}أحمد الشنقيطي كتب:السلام عليكم
بالنسبة لسؤالي فقد يكون صعباً عليك بعض الشيء إذا كنت جديد على C++, لذا سأضعه في موضوع مستقل للنقاش و أضع جميع الحلول الممكنة و يمكنك المشاركة إ أردت :)
سأضع رابط الموضوع حالما تتم كتابته.
شكرا لك اخي احمد انتظر منك الرابط
C++ and Java, say, are presumably growing faster than plain C, but I bet C will still be around. ― Dennis Ritchie
~OoO~________--------------------------------------------________~OoO~
من مواضيعي :
أحمد الشنقيطي كتب:هل يمكنك تمييز الأعداد الفردية بعشر طرق ؟ ( أتحداك أن تفعل !! :) )
السلام عليكم
مشا شاء الله عشره طرق؟ زاد المطلوب من 5 الى 10 :)
لا اتسطيع صراحه, و لكن هذا ما احتاج لتعلمه لا احب ان استخدم داله موجوده اصلا للاستخدام
اريد ان اتعلم ان اكوت شبيه لها حتى تسهل مسيرتي في التعلم ان شاء الله
انفعنا يعملك هنا او في موضوع اخر و ارجو ان تعلمني بالرابط
تحياتي لك
الرابط مُدرج تحت الكتابة, اضغط على العنوان ذو اللون الأزرق للذهاب إلى الموضوع.
C++ and Java, say, are presumably growing faster than plain C, but I bet C will still be around. ― Dennis Ritchie
~OoO~________--------------------------------------------________~OoO~
من مواضيعي :
الاجابة للسؤال قبل الاخير
#include <iostream>
#include <string>
using namespace std;
string letter(string lower);
int main()
{
string name;
cout << "Type your name: " << endl;
cin >> name;
cout << letter(name);
}
string letter(string lower)
{
lower[0] = tolower(lower[0]);
return lower;
}الاجابه للسوال الاخير
#include <iostream>
#include <string>
using namespace std;
string letterFun(string letter);
int main()
{
string name;
cout << "Type your name: " << endl;
cin >> name;
cout << letterFun(name);
}
string letterFun(string letter)
{
if (letter[0] == tolower(letter[0]))
{
cout << "This is a downcase letter! " << endl;
letter[0] = toupper(letter[0]);
cout << "Your name has been uppercased below! " << endl;
return letter;
}
else
{
cout << " this is an uppercase letter " << endl;
letter[0] = tolower(letter[0]);
cout << "Your name has been dowcased below! " << endl;
return letter;
}
}أحسنت بارك الله فيك ... (وضعت تعليقات على كل كود على حدة ... )
ما رأيك الآن بجرعة إضافية من مستوى أعلى ((في الحقيقة أفضل من يقوم بذلك هو المشرف الأخ أحمد الشنقيطي وليس أنا ....فهو أستاذي وطبعا يعرف كيف يتدرج في المستويات))
على كل حال ... حاول أن تحل هذا التمرين ...
اكتب تابعاً ... يستقبل اسم المستخدم user name وكلمة السر password من المستخدم ... ونمرر له عن طريق parameters اسم المستخدم وكلمة السر الصحيحين ...
ويقوم بطباعة العبارة : Denied في حال عدم تطابقهما... أو Accepted في حال التطابق ... ( حاول تجزئة التابع إلى أكبر عدد من التوابع ... يعني كل عملية أنشئ لها تابع مستقل)
بالتوفيق
مصطفى 36a2 كتب:أحسنت بارك الله فيك ... (وضعت تعليقات على كل كود على حدة ... )
ما رأيك الآن بجرعة إضافية من مستوى أعلى ((في الحقيقة أفضل من يقوم بذلك هو المشرف الأخ أحمد الشنقيطي وليس أنا ....فهو أستاذي وطبعا يعرف كيف يتدرج في المستويات))
على كل حال ... حاول أن تحل هذا التمرين ...
اكتب تابعاً ... يستقبل اسم المستخدم user name وكلمة السر password من المستخدم ... ونمرر له عن طريق parameters اسم المستخدم وكلمة السر الصحيحين ...
ويقوم بطباعة العبارة : Denied في حال عدم تطابقهما... أو Accepted في حال التطابق ... ( حاول تجزئة التابع إلى أكبر عدد من التوابع ... يعني كل عملية أنشئ لها تابع مستقل)
بالتوفيق
اشكرك جزيل الشكر اخي الكريم مصطفى صراحه التمرين يبدو افضل شيء للانتقال لمرحه اعلى في اللغه
جدا ممنون لوقتك و لوقت الاخ احمد في هذه التمارين الجميله
ساقوم بعمل التمرين الاخير الذي وضعته و اكتبه هنا ان شاء الله
بالنسبه للتمرين الثاني او الثالث, صراحه لم اعرف بان البراميتر يجب ان تتغير تصورت انها تعيد ما تكبته على كل حال ساحل المثال تبع اسم المستخدم و الرقم السري
شكرا لكم اخواني
صمودا كتب:اشكرك جزيل الشكر اخي الكريم مصطفى صراحه التمرين يبدو افضل شيء للانتقال لمرحه اعلى في اللغه
جدا ممنون لوقتك و لوقت الاخ احمد في هذه التمارين الجميله
ساقوم بعمل التمرين الاخير الذي وضعته و اكتبه هنا ان شاء الله
بالنسبه للتمرين الثاني او الثالث, صراحه لم اعرف بان البراميتر يجب ان تتغير تصورت انها تعيد ما تكبته على كل حال ساحل المثال تبع اسم المستخدم و الرقم السري
شكرا لكم اخواني
بارك الله فيك اخي الكريم
لقد عملت حلين لهذا التمرين الاول وضعت فريبلس تحتوي على اسم المستخدم و الرقم السري
الحل الثاني هو عمليه تطابق if the username == "sometext" as well as the password
#include <iostream>
#include <string>
using namespace std;
int main()
{
string storedU = "somodan";
string storedP = "123456";
string username;
string password;
cout << "enter your user name: " << endl;
cin >> username;
cout << "enter your password: " << endl;
cin >> password;
if (username != storedU)
{
cout << " your username does not exist!" << endl;
}
else if (password != storedP)
{
cout << "your password do not match" << endl;
}
else if (username == storedU && password == storedP)
{
cout << "You are logged in now! " << endl;
}
}#include <iostream>
#include <string>
using namespace std;
int main()
{
string username;
string password;
cout << "Please enter your username and password: " << endl;
cin >> username;
cin >> password;
if (username == "somodan" && password == "123456")
{
cout << "Access is allowed! " << endl;
}
else
cout << "Access is Denied!, your username and password do not match! " << endl;
return 0;
}الحل الأول رائع والحل الثاني ممتاز ....![]()
ما عدا نقطة بسيطة وصغيرة جدا ...أهملتها ...
أين التوابع .... لم تستخدم سوى main >>> قم بتغليف هذه العمليات داخل توابع ... هذا ما اتفقنا عليه ... بارك الله فيك
سأترك التصحيح للأخ مصطفى لأنه صاحب السؤال :)
لكن, لدي ملاحظة بسيطة تتعلق بمقارنة المصفوفات الحرفية.
المصفوفات (بشكل عام) عبارة عن أنواع مُركبة (Complex Types) و بالتالي لا يمكنك أن تقول للكومبايلر أن يقارن مصفوفة من عشرة عناصر وكأنها كتلة واحدة !
الأنواع المُركبة (Arrays, structures, unions, classes, ...) لاتُقارن إلا عنصرا بعنصر.
لحسن الحظ أنك تتعامل مع الفئة string داخل C++, هذه الفئة تحتوي على إعادة تعريف للمعامل == و هذا ما أمكنك من مقارنة كائنات الــ string دون وجود أي مشاكل.
لكن, لو كنت تتعامل مع المصفوفات الحرفية (char *) فلا تستخدم المعامل == في المقارنة لأنه غير مُعرف.
استخدم الدالة strcmp لمثل هذا الأمر. و إن كنت تريد مقارنة جزء معين من السلسلة الحرفية فيمكنك استخدام الدالة strncmp, توجد ثلاث حالات:
مثال :
const char * chaine1 = "blabla";
const char * chaine2 = "blabla";
const char * chaine3 = "blablu";
if (strcmp(chaine1, chaine2) == 0) {
/* les chaines sont identiques */
}
if (strcmp(chaine2, chaine3) != 0) {
/* les chaines sont différentes */
}
if (strncmp(chaine2, chaine3, 3) == 0) {
/* les chaines sont identiques en se limitant a comparer les 3 premiers caracteres */
}إذا كنتَ تريد محاكاة الدالة strcmp فيمكنك كتابتها بهذه الطريقة :
int str_cmp(char str_1[], char str_2[]) {
int i = 0;
while (str_1 || str_2)
if (str_1 != str_2[i++]) return -1;
return 0;
}C++ and Java, say, are presumably growing faster than plain C, but I bet C will still be around. ― Dennis Ritchie
~OoO~________--------------------------------------------________~OoO~
من مواضيعي :
مصطفى 36a2 كتب:الحل الأول رائع والحل الثاني ممتاز ....
ما عدا نقطة بسيطة وصغيرة جدا ...أهملتها ...
أين التوابع .... لم تستخدم سوى main >>> قم بتغليف هذه العمليات داخل توابع ... هذا ما اتفقنا عليه ... بارك الله فيك
اشكرك بارك الله فيك
صراحه لم افهم معنى التوابع لحد ما فسرتها لي الان
ان شاء الله اعملها ب توابع في وقت ما اليوم في توقيتي هنا
بارك الله فيك اخي و جزاك الله خيرا
اقتباسصراحه لم افهم معنى التوابع لحد ما فسرتها لي الان
لا بد أنك تقصد هذه العبارة :
اقتباسقم بتغليف هذه العمليات داخل توابع
التغليف أهم مبدأ من مبادئ البرمجة كائنية التوجه OOP ... object oriented programming
وهو في الحقيقة طريقة تفكير تساعد بشكل مذهل على تجزئة المشكلة إلى مشاكل جزئية ...
يمكننا عن طريق حل المشاكل الحزئية ..أن نحل المشكلة الرئيسية ...
وأهم ميزة له هي الreuse إعادة الاستخدام ...فلو أردنا أن نغير خاصية ما أو أن نضيف ميزة جديدة ... فسيكون هناك مكان محدد نبحث عنه ...ودالة بعينها نغير فيها ...
دون أن نعدل على باقي الكود ....
((طبعاً التوابع تقوم بتغليف بسيط .... أما التغليف الحقيقي فهو عن كريق الصفوف classes >>> ))
بالتوفيق ..
التغليف أو الكبسلة (Encapsulation) : هي عملية تجميع كل الخصائص properties والطرق ( العمليات ) Methods في وحدة واحدة ( داخل غلاف واحد ) حيث لا يمكن الوصول إليها ( أي الخصائص والطرق ) إلا عن طريق الكائن. يتم ذلك عن طريق محددات الوصول أو مستويات الحماية التي تنقسم إلى ثلاثة أقسام :
1- مستوى الحماية الخاص private :
وفيه يتم تعريف الأعضاء التي يتم استخدامها في الصنف ، ولا يمكن الوصول إليها من خارج الصنف.
2- مستوى الحماية المحمي protected :
الأعضاء المعرفة في هذا المستوى تشبه الأعضاء الخاصة غير أنه يمكن توريثها إلى أي صنف آخر.
3- مستوى الحماية العام Public :
وفيه يتم تعريف الأعضاء العامة التي يمكن الوصول إليها من خارج الصنف.
يوجد أيضا تغليف من نوع آخر و هو تغليف الواجهات الرسومية. في الــ windows مثلا, عندما نضغط على زرّ × لإغلاق النافذة, فإنّ النظام يستدعي الدالة WndProc وُيمرر لها الرسالة WM_CLOSE والتي تقابل الرقم 0x10 بنظام العد السداسي عشري أو 16 بالنظام العشري, لكن المُستخدم لا يشعر بما يحدث خلف الكواليس لأنه تم تغليف واجهة النظام و أصبح المستخدم يتعامل مع مجموعة أزرار و نوافذ, و بالتالي تكمن فائدة تغليف الــ GUI في إخفاء التعقيدات عن المستخدم.
C++ and Java, say, are presumably growing faster than plain C, but I bet C will still be around. ― Dennis Ritchie
~OoO~________--------------------------------------------________~OoO~
من مواضيعي :