السلام عليكم ورحمة الله وبركاته
عندي برنامج مو فاهمته إذا احد يقدر يساعدني يرسلي عالخاص عشان اضيفه عالماسنجر ويشرح لي لأني مرررررررررررررررررره متوهقه
السلام عليكم ورحمة الله وبركاته
عندي برنامج مو فاهمته إذا احد يقدر يساعدني يرسلي عالخاص عشان اضيفه عالماسنجر ويشرح لي لأني مرررررررررررررررررره متوهقه
تقدمت لحل الأخت على الماسنجر وقد حصل التالي :
OMS says:
حسناً هات ما عندك
toootooo says:
السلام عليكم
OMS says:
وعليكم السلام
toootooo says:
برسل لك فايل البرنامج عالبورلاند سي بلس بلس
OMS says:
على الإيميل
toootooo says:
ليه احسن هنا
OMS says:
أنا أستخدم الويب ماسنجر
OMS says:
يعني ما أستقبل ملف
toootooo says:
اوكي برسله عالإيميل
OMS says:
ولكن ما مشكلتك
OMS says:
يا ...
toootooo says:
ارسلته عالإيميل
toootooo says:
وصل
toootooo says:
؟
OMS says:
إنتظر قليلاً
toootooo says:
حسنا
OMS says:
من أي كتاب ؟؟
toootooo says:
كتاب مترجم
toootooo says:
اسمه
toootooo says:
تراكيب البيانات وصيغها الرياضية
OMS says:
حسناً
وهنا قمت بأخذ البرنامج وهو :
كود:#include <iostream> #include <string> using namespace std; class word { private: int size; int count; string workStr; void rotate(int); void displayWord(); public: word(string); void anagram(int); }; word::word(string inpStr):workStr(inpStr),count(0) { size=inpStr.length(); } void word::anagram(int newSize) { if(newSize==1) return; for(int j=0;j<newSize;j++) { anagram(newSize-1); if(newSize==2) displayWord(); rotate(newSize); } } void word::rotate(int newSize) { int j; int position=size-newSize; char temp=workStr[position]; for(j=position+1;j<size;j++) workStr[j-1]=workStr[j]; workStr[j-1]=temp; } void word::displayWord() { if(count<99) cout<<" "; if(count<9) cout<<" "; cout<<++count<<" "; cout<<workStr<<" "; if(count%6==0) cout<<endl; } int main() { string input; int length; cout<<"Enter a word"<<endl; cin>>input; length=input.length(); word theWord(input); theWord.anagram(length); return 0; }
OMS says:
حاول التتبع معي في البرنامج
toootooo says:
اوكي
OMS says:
في البداية قام البرنامج بإضافة مكتبتين
OMS says:
واحدة للإدخال والإخراج وواحدة للتعامل مع النصوص
OMS says:
قام في السطر الثالث بتعريف نيم سبيس
toootooo says:
.
toootooo says:
اوكي
OMS says:
أي أنه سيقوم على عمل مكتبة خاصة به يمكن إستخدامها في برنامج آخر
OMS says:
قام بعدها بتعريف كلاس وسماه وورد
OMS says:
حيث أنه ..
OMS says:
عفواً هل تعلم ما هو الكلاس
OMS says:
؟؟
toootooo says:
نعم اعرفه جيدا
OMS says:
حسناً
OMS says:
حيث أنه قام بإضافة متغيرات في القسم الخاص ودوال في القسم العام ( الخارجي )
toootooo says:
اضاف دوال ايضا في القسم الخاص
OMS says:
وبعدها قام بكتابة كود الدوال التي في الكلاس
OMS says:
نعم
toootooo says:
؟
OMS says:
يجوز إستخدامها في القسم الخاص
toootooo says:
اوكي
OMS says:
حيث أنه بهذه العملية لن يسمح بظهور الدوال في القسم الخاص عندما نأخذ كائن من نوع الكلاس
OMS says:
وبعدها قام بكتابة الكود الخاص للدالة وورد
toootooo says:
اها
OMS says:
وهنا قام بإعطاء المتغير workStr القيمة الناتجة من الباراميتر
OMS says:
وهنا قام بإعطاء المتغير
OMS says:
workStr
OMS says:
القيمة الناتجة من الباراميتر
OMS says:
inpStr
OMS says:
وقام بإعطاء المتغير
OMS says:
count
OMS says:
القيمة 0 كقيمة أولية
OMS says:
وفي الداخل قام بتعريف المتغير
OMS says:
size
OMS says:
بطول الكلمة في الباراميتر وهي هنا المتغير
OMS says:
inpStr
OMS says:
ولأنه عبارة عن متغير
OMS says:
String
OMS says:
فكان في مقدورنا أن نستخدم الخاصية
OMS says:
length
OMS says:
إلى هنا هل من أسئلة ؟؟
toootooo says:
لا إلي هنا كل شيء مفهوم
OMS says:
حسناً
OMS says:
طبعاً الدالة التي ذكرتها قبل قليل هي عبارة عن كونستركتر
OMS says:
هل تعلم ما هو الكونستركتر ؟؟
toootooo says:
كونستركتور للكلاس ؟
OMS says:
نعم
toootooo says:
نعم
OMS says:
هل تعرفه ؟
toootooo says:
فهمت
OMS says:
هو عبارة عن دالة تحمل نفس إسم الكلاس
OMS says:
وتنفذ عند أخذ كائن من نوع الكلاس
OMS says:
حسناً
OMS says:
في الدالة الثانية وهي
OMS says:
anagram
OMS says:
قام بتعريف باراميتر من نوع إنتجر
OMS says:
وفي الداخل قام بفحصه
OMS says:
إذا كان ذا القيمة 1 فإنه سيقوم بالخروج من الدالة
OMS says:
وغير ذلك فإنه سيستمر وكأن جملة الإف غير موجودة
OMS says:
في جملة الفور قام بتعريف متغير جي
toootooo says:
وماذا يعني newSize اذا كان size هو طول الكلمه
toootooo says:
؟
OMS says:
لا
OMS says:
طول الكلمة هو سايز فقط
OMS says:
والثانية متغيرة
OMS says:
تابع معي وبعد الإنتهاء من شرح الدالة إسأل
OMS says:
بعد جملة الفور
OMS says:
قام بإستدعاء ذاته
OMS says:
وتسمى هذه العملية بالإستدعاء الذاتي
OMS says:
أي
OMS says:
recurcion
OMS says:
وقام بإرسال متغير وهو الطول الحالي منقوص منه واحد
OMS says:
وبهذه العملية يمكنه الوصول إلى العدد 1 الذي سيقوم بإخراجه من الدالة ككل
OMS says:
ثم يقوم بعد ذلك بالسؤال
OMS says:
هل الطول الحالي هو 2
OMS says:
إذا كان الجواب نعم
OMS says:
قوم بتنفيذ الدالة
OMS says:
displayWord();
OMS says:
وهي المسؤولة عن طباعة الكلمة
OMS says:
الآن
OMS says:
هل لاحظت الفرق بين سايز ونيو سايز ؟
toootooo says:
يعني تقريبا السايز ثابت مانغيره عشان اذا احتجناه بطول الكلمه
OMS says:
صح
OMS says:
والثاني هو عبارة عن متغير نقوم بأخذ السايز الحقيقي من الكلاس
OMS says:
ومن ثم تنقيصه إلى أن يصل إلى 1 أي شرط الخروج
OMS says:
هل وضحت الفرق ؟
toootooo says:
اها
toootooo says:
نعم وضح
OMS says:
حسناً إلى الدالة التالية
OMS says:
وهي الدالة
OMS says:
rotate
OMS says:
وهي تقوم على قلب الجملة على ما أعتقد
OMS says:
إنتظر قليلاً لألقي عليها نظرة سريعة
toootooo says:
حسنا
OMS says:
؟؟
OMS says:
هذا البرنامج يقوم بقلب الكلمة فقط
OMS says:
يعني بعكس الكلمة فقط
OMS says:
لا عليك سأتابع الشرح
OMS says:
قام في البداية بتعريف متغير لحلقة الفور
OMS says:
في السطر الثاني من الدالة قام بتعريف متغير وهو الموقع وأعطاه قيمة أولية الطول الأصلي ناقصاً الطول الذي أدخلة في الباراميتر
OMS says:
ثم قام بأخذ الخانة عن طريق الإستدعاء الذاتي من الكلمة الأصلية وهي
OMS says:
workStr
OMS says:
طبعاً هنا إعتبرها مصفوفة وقام بأخذ الخانه منه
toootooo says:
اهاا
OMS says:
ثم في جملة الفور قام بتبديل الخانة السابقة بالخانة اللاحقة
OMS says:
يعني هنا قام بأخذ الحرف السابق وإبداله بالحرف اللاحق
OMS says:
ستخدام الإستدعاء الذاتي
OMS says:
مممممممم
OMS says:
فعلاً الذي كتب البرنامج انه ذكي
toootooo says:
روبرت لافور
OMS says:
ثم عن طريق آخر جملة قام بإعطاء الخانة اللاحقة بالمتغير تيمب الذي قد أعطاه بالأساس القيمة الأولية في ثالث جملة
OMS says:
هل لك تعليق على هذه الدالة
OMS says:
؟؟
toootooo says:
لا هل هي تقوم بإزاحه الحروف إلي اليسار
OMS says:
نعم كلام صحيح
toootooo says:
ثم وضع الحرف الذي كان في التيمب في اليمين
OMS says:
يعني تقوم بإزاحة الخانة التي إلى اليمين لتجعلها على اليسار
OMS says:
كلام صحيح وجميل
OMS says:
هل هناك تعليق آخر
toootooo says:
لا
OMS says:
حسناً إلى الدالة التالية
OMS says:
وهي دالة الطباعة
OMS says:
حيث أنه يقوم بالتشييك على المتغير
OMS says:
count
OMS says:
هل هو أقل من 99
OMS says:
إذا كان كذلك فإنه يقوم بطباعة الخانات التي تحت جملة الإف
OMS says:
وهذه العملية يطلق عليها بالعمليات التجميلية والتي تخرج منظر للشكل العام للجملة
OMS says:
حيث أنه يقوم بإختبار العدد للخانات الموجودة في النص
OMS says:
وفي الجملة
OMS says:
cout<<++count<<" ";
OMS says:
يقوم بزيادة المتغير ومن ثم طباعته
OMS says:
ثم يقوم بطباعة الكلمة
OMS says:
وإذا كان المتغير count
OMS says:
من 6 خانات فإنه يقوم بطباعة سطر جديد
OMS says:
والآن هل هناك أسئلة على الدالة السابقة ؟؟
toootooo says:
لا واضحه
OMS says:
حسناً لننطلق إلى الدالة الرئيسية
OMS says:
وفيها يقوم المبرمج بإنشاء متغير من نوع سترينج
OMS says:
ومتغير من نوع إنتجر
OMS says:
ثم يطلب من المستخدم أن يدخل جملة
OMS says:
وبعدها يقوم بتحديد طولها بالجملة
OMS says:
length=input.length();
OMS says:
ثم يقوم بإنشاء كائن من نوع
OMS says:
word
OMS says:
ويستخدم الدالة anagram
OMS says:
وفي النهاية يقوم بإرجاء القيمة 0 للدالة الرئيسية
OMS says:
......
OMS says:
هل هناك أي إستفسار
OMS says:
؟؟
toootooo says:
لا شكرااا ..
أرجع وأقولك مشكوووووور وإن شاء الله يستفيد منه الكل