مشاركة: :: مشروع لتعليم أساسيات ++C :: موضوع الردود و الأسئلة
السلام عليكم
أخي Wolf Sniper
لم أقم حتى الآن بقراءة الحل و لن أقوم حتى أتمكن من انجاز البرنامج التطبيقي ..
لدي سؤال
أريد أن أقوم بعمل برنامج يقوم المستخدم فيه بادخال ماشاء من السطور
و عندما يكتب doit يعني do it يقوم البرنامج بطباعة جميع ماكتبه المستخدم
و لكن بشرط
عدم طباعة كلمة doit و right
هل يمكنك مساعدتي ؟
كل ما أريده هو مساعدة فقط و ليس البرنامج و الكود
شكرا لك مقدما
و السلام
مشاركة: :: مشروع لتعليم أساسيات ++C :: موضوع الردود و الأسئلة
اقتباس:
المشاركة الأصلية كتبت بواسطة Son Of UAE
السلام عليكم ورحمة الله ..
يجب ان اعترف باني مقصر بهذه الدورة :( .. ولكن مازلت اتابع الدروس ... وانا مطمأن لانك وصلت لهذا الكم من الدروس. فالدروس مثبته بالمنتدى حيث يمكنني العودة إليها متى أشاء .. :D
استمر :)
المهم أنك متابع للموضوع و هذا يكفي بالنسبة لي :) .. حتى أنا أصلاً مقصر في الموضوع حيث أني تأخرت في وضع بعض الدروس ..
اقتباس:
المشاركة الأصلية كتبت بواسطة Night_3
السلام عليكم
أخي Wolf Sniper
لم أقم حتى الآن بقراءة الحل و لن أقوم حتى أتمكن من انجاز البرنامج التطبيقي ..
لدي سؤال
أريد أن أقوم بعمل برنامج يقوم المستخدم فيه بادخال ماشاء من السطور
و عندما يكتب doit يعني do it يقوم البرنامج بطباعة جميع ماكتبه المستخدم
و لكن بشرط
عدم طباعة كلمة doit و right
هل يمكنك مساعدتي ؟
كل ما أريده هو مساعدة فقط و ليس البرنامج و الكود
شكرا لك مقدما
و السلام
لقد حللت لك السؤال .. انظر الصورة :
http://members.lycos.co.uk/wolfsniper84c/C/doit.gif
إذا كان هذا قصدك من السؤال .. فطريقة الحل هي كالتالي :
أننا أولاً نحتاج لمصفوفة أحادية البعد لكي تخزن الجملة التي سيكتبها المستخدم .. مع الانتباه لاستخدام cin.getline !؟ لأننا نريد تخزين كامل السطر في المصفوفة المرادة ..
بعد ذلك سنقوم باختبار وجود كلمة ( doit ) في المصفوفة .. لذلك كل ما عليك فعله هو وضع حلقة for لكي تختبر جميع قيم المصفوفة حرفاً حرفاً .. و داخل هذه الحلقة سنختبر وجود الكلمة ( doit ) .. و ذلك بوضع الشرط ( if ) و لكن ماذا سيكون الشرط ؟
حاول استخدام جدول الآسكي ( ASCII ) لاختبار وجود أحرف كلمة ( doit ) لأنه أسهل و أبسط من اختبار السلاسل الحرفية .. مع العلم أن :
الحرف ( d ) : يساوي في الآسكي 100 .
الحرف ( o ) : يساوي في الآسكي 111 .
الحرف ( i ) : يساوي في الآسكي 105 .
الحرف ( t ) :يساوي في الآسكي 116 .
و بالتالي نستطيع الأن أن نضع الشرط و لكن كيف ؟ يجب أن نختبر وجود الأحرف الأربعة لذلك سيكون دليل أول حرف ( في الاختبار ) هو ( i ) .. و دليل الحرف الثاني ( i+1 ) و دليل الحرف الثالث ( i+2 ) .. و الرابع ( i+3 ) .. الأن قم باستخدام هذه الأدلة من أجل الاختبار و أيضاً استخدم قيم الأحرف ( doit ) في جدول الآسكي .
إذا تحقق الشرط نطبع الجملة و نكسر الحلقة عن طريق break .. و بذلك يكون السؤال قد حل .
إذا لم تعرف الطريقة أخبرني لكي أعطيك الكود .. و أتمنى أن يكون شرح طريقة الحل قد أفادك .. بالتوفيق .
:: بالنسبة لدرس المؤشرات ::
في هذا الأسبوع إن شاء الله سيكون الدرس نازل في موضوع الدروس .. و بعدها سأتوقف عن الكتابة من أجل الامتحانات .. و شكراً
مشاركة: :: مشروع لتعليم أساسيات ++C :: موضوع الردود و الأسئلة
::
::
اعترف لك اخوي اني مقصر واييييييييد في قراءة الدروس.... :28: (الاعتراف بالحق فضيلة)<<<<اسمعوا هذا :biggrin: ......و هذا بسبب الامتحانات...و إلي بعدها امتحانات :17:
لكن اوعدك إني ارد لمستواي القديم و اتمنى اني اكون عند حسن ظنك
و سلامتكم.....:ciao:
::
::
مشاركة: :: مشروع لتعليم أساسيات ++C :: موضوع الردود و الأسئلة
اقتباس:
المشاركة الأصلية كتبت بواسطة UAE Naruto
::
::
اعترف لك اخوي اني مقصر واييييييييد في قراءة الدروس.... :28: (الاعتراف بالحق فضيلة)<<<<اسمعوا هذا :biggrin: ......و هذا بسبب الامتحانات...و إلي بعدها امتحانات :17:
لكن اوعدك إني ارد لمستواي القديم و اتمنى اني اكون عند حسن ظنك
و سلامتكم.....:ciao:
::
::
لا عليك أخي UAE Naruto الدراسة أهم ;) .. حتى أنا الأن في الفترة التي تسمى بفترة ما قبل الامتحانات .. يعني الجميع في نفس الحالة :D
:: إضافة جزء من الدرس الثامن ::
تم إضافة الجزء الأول من الدرس الثامن .. و البقية في الأسبوع القادم إن شاء الله للأسباب السابقة .
1 مرفق
مشاركة: :: مشروع لتعليم أساسيات ++C :: موضوع الردود و الأسئلة
السلام عليكم ورحمة الله وبركاته
يوجد لدي لبس في أحد الامثلة في موضوع العودية:
في المثال الأول في الأمثلة التطبيقية لدرس الخامس ،أنا فهمت العودية لكن المشكلة في هذا المثال أنني حينما
أحوال أن أستنتج الحل بنفسي يكون الحل غير الحل الصحيح.
في هذا المثال لو فرضنا أننا أدخلنا 4قوة3 يكون الناتج كما في الصورة المرفقة
http://www.montada.com/attachment.ph...d=200409&stc=1
لكن النتج الصحيح هو 64.
هل من الممكن أخي أن تشرح لي كيف يستنتج البرنامج الحل الصحيح ؟
وشكرا.......
مشاركة: :: مشروع لتعليم أساسيات ++C :: موضوع الردود و الأسئلة
اقتباس:
المشاركة الأصلية كتبت بواسطة ThE* DaRk *SiDe
السلام عليكم ورحمة الله وبركاته
يوجد لدي لبس في أحد الامثلة في موضوع العودية:
في المثال الأول في الأمثلة التطبيقية لدرس الخامس ،أنا فهمت العودية لكن المشكلة في هذا المثال أنني حينما
أحوال أن أستنتج الحل بنفسي يكون الحل غير الحل الصحيح.
في هذا المثال لو فرضنا أننا أدخلنا 4قوة3 يكون الناتج كما في الصورة المرفقة
http://www.montada.com/attachment.ph...d=200409&stc=1
لكن النتج الصحيح هو 64.
هل من الممكن أخي أن تشرح لي كيف يستنتج البرنامج الحل الصحيح ؟
وشكرا.......
أخي الكريم ..
بالنسبة لهذا المثال .. كان التابع ( power ) مكتوباً على الشكل التالي :
كود:
int power(int x, int y)
{
if( y==0 ) return 1;
else return( x*power(x, y-1) );
}
و مع افتراض أننا نريد حساب 4 قوة 3 .. و بذلك سيكون استنتاج الحل كالتالي :
في الاستدعاء الأول ( حيث أن main قام باستدعاء هذا التابع ) :
قيمة x : ثابتة دائماً في جميع الاستدعاءات و تساوي 4 .
قيمة y : في هذا الاستدعاء تساوي 3 .
و بما أن ( y ) لا تساوي الصفر .. فسيتم تنفيذ التعليمة التالية :
كود:
return( x*power(x, y-1) );
لاحظ هنا كيف أننا سنعيد للتابع main ناتج ضرب : 4 × 4 قوة 2 .. و هي تساوي ( 4 قوة 3 ) .. و لكن قبل أن نعيد ذلك الناتج علينا حساب 4 قوة 2 لذلك سيتم استدعاء التابع ( power ) مرة أخرى من أجل تلك العملية .
القيمة المعادة للتابع main : غير معروفة إلى أن يتم معرفة قيمة 4 قوة 2 .. و عند الحصول على القيمة ( 4 قوة 2 ) من الاستدعاء الثاني نعيد للتابع main الناتج ( 4 × 4 قوة 2 ) و هو يساوي ( 4 قوة 3 ) .
في الاستدعاء الثاني :
قيمة x : قلنا أنها ثابتة دائماً في جميع الاستدعاءات و تساوي 4 .
قيمة y : في هذا الاستدعاء تساوي 2 .. لأن الاستدعاء الأول قام بإرسال ( y-1 ) .
و بما أن ( y ) لا تساوي الصفر .. فسيتم تنفيذ التعليمة التالية :
كود:
return( x*power(x, y-1) );
إذا هنا سيتم حساب ( 4 قوة 2 ) و إعطاء ذلك الناتج للاستدعاء الأول .. و لكننا سنحسب تلك العملية عن طريق ( 4 × 4 قوة 1 ) و هي تساوي ( 4 قوة 2 ) .. لذلك سيتم إرسال ( 4 قوة 1 ) للاستدعاء الثالث لكي يتم حسابها .
القيمة المعادة للاستدعاء الأول : غير معروفة أيضاً إلى أن يتم حساب ( 4 قوة 1 ) في الاستدعاء الثالث .. و عند الحصول على ذلك الناتج سيتم إرجاع ( 4 × 4 قوة 1 ) للاستدعاء الأول .
في الاستدعاء الثالث :
قيمة x : أيضاً تساوي 4 .
قيمة y : في هذا الاستدعاء تساوي 1 .. لأن الاستدعاء الثاني قام بإرسال ( y-1 ) .
و بما أن ( y ) لا تساوي الصفر .. فسيتم تنفيذ التعليمة التالية :
كود:
return( x*power(x, y-1) );
هنا ( في هذا الاستدعاء ) سيتم حساب ( 4 × 4 قوة 0 ) و هي تسوي ( 4 قوة 1 ) .. و سيتم إرسال هذا الناتج كقيمة معادة إلى الاستدعاء الثاني .. و لكن قبل ذلك علينا حساب ( 4 قوة 0 ) و هذا ما سوف ينفذه الاستدعاء الرابع .
القيمة المعادة للاستدعاء الثاني : غير معروفة أيضاً إلى أن يتم حساب ( 4 قوة 0 ) و عندها سيتم إرجاع القيمة ( 4 × 4 قوة 0 ) للاستدعاء الثاني .
في الاستدعاء الرابع :
قيمة x : أيضاً تساوي 4 .
قيمة y : هنا نكون قد وصلنا إلى الحالة النهائية و هيا الحالة المعروفة جوابها و هي عندما يكون الأس يساوي ( الصفر ) .. لذلك سيتم تنفيذ التعليمة التالية :
هنا ستكون القيمة المعادة للاستدعاء الثالث تساوي واحد و هي ناتج ( 4 قوة 0 ) .. و بذلك سيتم إرجاع القيم بالتسلسل بين الاستدعاءات حتى الرجوع إلى التابع main .. و ذلك كالتالي :
الاستدعاء الرابع سيعيد القيمة ( 1 ) للاستدعاء الثالث .. و الاستدعاء الثالث سيعيد القيمة ( 4 × 4 قوة 0 ) إلى الاستدعاء الثاني ( الناتج إلى الأن 4 ) .. و الاستدعاء الثاني سيعيد القيمة ( 4 × 4 قوة 1 ) إلى الاستدعاء الأول ( الناتج 16 ) .. و أخيراً الاستدعاء الأول سيعيد القيمة ( 4 × 4 قوة 2 ) إلى التابع الرئيسي main و سيكون الناتج ( 64 ) .
أتمنى أن تكون الفكرة قد وصلت .. بالتوفيق .
:: تنبيه ::
هناك أخطاء جوهري و منطقية في الدرس الثامن في فقرة ( التحرير الديناميكي ) .. لذلك لا تأخذوا بما هو مكتوب في تلك الفقرة .. و سيتم التصحيح قريباً إن شاء الله ( بمساعدة المراقب ) .. و الخطأ كان مني لعدم تأكدي من المعلومات التي كتبتها .. وسيتم توضيح أنه تم تصحيح تلك المعلومات داخل تلك الفقرة .
لذلك أرجو الانتباه إلى من يقوم بتصوير هذه الدروس و نشرها في الجامعات على هذا الخطأ لأني على علم بذلك .. و جزاهم الله خيراً على عملهم و حرصهم .. و الله الموفق .
مشاركة: :: مشروع لتعليم أساسيات ++C :: موضوع الردود و الأسئلة
أولا أشكرك أخوي لإجابتك على أسئلتي وأعتذر على إزعاجك :( ويبدو أنني طالب سيء . :D
في الحقيقه أنا فهمت لكن بقي لدي لبس بسيط وهو أنه:ستكون القيمة المعادة من الإستدعاء الثاني 16 وستكون القيمة المعادة من الأستدعاء ألاول64 وسيكون مجموعها 80. إلا أذ كانت قيمة كل إستدعاء مستقلة بذاتها.
أكرر أسفي عل الازعاج.
مشاركة: :: مشروع لتعليم أساسيات ++C :: موضوع الردود و الأسئلة
اقتباس:
المشاركة الأصلية كتبت بواسطة ThE* DaRk *SiDe
أولا أشكرك أخوي لإجابتك على أسئلتي وأعتذر على إزعاجك :( ويبدو أنني طالب سيء . :D
في الحقيقه أنا فهمت لكن بقي لدي لبس بسيط وهو أنه:ستكون القيمة المعادة من الإستدعاء الثاني 16 وستكون القيمة المعادة من الأستدعاء ألاول64 وسيكون مجموعها 80. إلا أذ كانت قيمة كل إستدعاء مستقلة بذاتها.
أكرر أسفي عل الازعاج.
لا إزعاج أبداً ;)
و المهم هو أن تفهم الحل .. بالنسبة للسؤال :
كما قلت أنت فكل استدعاء مستقل تماماً عن الاستدعاء الآخر و كأن لكل استدعاء قيمه الخاصة به .. فمثلاً الوسيط ( y ) يمثل متحولاً مختلفاً تماماً عن بقية الوسائط ( y ) في الاستدعاءات الأخرى ولكل وسيط قيمة مستقلة به تختلف أيضاً عن باقي الاستدعاءات ..
و بالنسبة للجواب الأخير ( 64 ) هذا هو الناتج الذي سيعيده الاستدعاء الأول للتابع main .. و هذا يعني أن القيمة التي سوف تتطبع على الشاشة هي ذلك الناتج .. و لكن لماذا جمعتهم أنت ؟ ليس لعملية الجمع دخل هنا في الحل .
مشاركة: :: مشروع لتعليم أساسيات ++C :: موضوع الردود و الأسئلة
السلام عليكم
أخي Wolf Sniper
لقد قمت بتحقيق الشرط الأول و هو كتابة كل ما شاء المستخدم من النصوص (مصفوفة سجلات)
و لا أستطع تحقيق الشرط الثاني وهو كسر حلقة فور ..
هل يمكنك أن تعطيني الكود
و لم تجبني عن
اذا أدخل المستخدم كلمة سيئة مثل 6
ألا تطبع في نهاية البرنامج
و هذا ما قصدته بكلمة right
هل يمكن تحقيق هذا ؟
و شكرا لك على اضافة درس المؤشرات
رغم أني لم أفهم أهميتهم حتى الآن:02:
و السلام
مشاركة: :: مشروع لتعليم أساسيات ++C :: موضوع الردود و الأسئلة
السلام عليكم
عمري 19 سنة
معهد كمبيوتر
عندي خلفية عن لغة الباسكال
و اتمنى ان اتابع معكم و يعطيك العافية :)