المساعدة - البحث - قائمة الأعضاء - التقويم
نسخة كاملة: احتاج مساعدة بخصوص For Loop
برمجة - شبكات - كمبيوتر - منتديات الفريق العربي للبرمجة > منتديات لغات البرمجة العام > منتدى مبرمجي C و ++C و C++.NET
fatimah
السلام عليكم
اخواني واخواتي
احتاج لمساعدة من له خبرة بلغة سي++

كيف اكتب برنامج يعطيني هذي النتيجة

كود
   *
  ***
*****
*******

بحيث يكون شكل النجوم على شكل هرم

هذي محاولة مني
كود
int n =5;

for(int i=1; i<n+1;i++)
{cout << endl;
for(int j=1; j<i+1; j++)
cout << "*";
}


بس النتيجة طلعت غير المطلوبة
كود
*
**
***
****
*****



وشكرا
djug
انسخ الكود
  1.  
  2. #include <iostream>
  3.  
  4. using namespace std;
  5.  
  6. int main()
  7. {
  8.  
  9. int n =10;
  10.  
  11. for(int i=1; i<n+1;i++)
  12. {
  13. if (i%2==0) continue;
  14. cout << endl;
  15. for(int j=1; j<i+1; j++)
  16. cout << "*";
  17. }
  18. return 0;
  19. }
  20.  
  21.  
  22.  


الشرح:
1/الحلقة الكبرى تتوقف عند 10 و ليس 5 (لأننا سنقوم بطباعة 5 أسطر من أصل 10)
2/ لما يكون العدد زوجي فإننا لا نقوم بإظهار النجمات و يتم ذلك عن طريق الأمر continue

لفهم الأمر continue

اقرأي الموضوع التالي:
Continue, كيف تعمل الكلمة continue

ملاحظة: هذا السؤال يخص c++ العادي فرجاء اطلبي من أحد المشرفين نقله إلى المكان المناسب
fatimah
شكرا جزيلا اخي على الرد
ولكن النتيجة ليست كما المطلوبة
مع العلم اني لم ادرس عن الامر continue
لذلك لا اعتقد انه من الضروري استخدامه في هذا السؤال ولكن مو مشكلة اي طريقة المهم احصل على النتيجة المطلوبة



يجب ان تكون النجوم على شكل هرم
لدي فكرة وهي طباعة مسافة قبل النجوم
ولكن لا اعرف كيف انا احاول على هذا السؤال من ايام


هل احتاج الى فور لووب ثالث
هل احتاج الى multidimensional array
هل احتاج بوينترpointers
انا شبه متاكدة ان في طريقة لحل هالسؤال باستخدام الفور لووب فقط


انا اصلا ما عندي خبرة مع الفور لووب ولا السي++
وباقي على امتحاني الفاينال في هالمادة اقل من 12ساعة confused_smile.gif الله يستر

شكرا جزيلا اخي الكريم اقدر اهتمامك للمساعدة
djug
انسخ الكود
  1.  
  2. #include <iostream>
  3.  
  4. using namespace std;
  5.  
  6. int main()
  7. {
  8.  
  9. int n =7;
  10. static int l=3;
  11.  
  12. for(int i=1; i<n+1;i++)
  13. {
  14. if (i%2==0) continue;
  15. cout << endl;
  16. for(int k=0;k<l;k++)cout << " ";
  17. l--;
  18. for(int j=1; j<i+1; j++)cout << "*";
  19.  
  20. }
  21. return 0;
  22. }
  23.  
  24.  
فهدالشلوي
هذه طريقة أخرى :
انسخ الكود
  1. #include <iostream>
  2. using namespace std;
  3. int main()
  4. {
  5. for(int i=0; i<=3 ;i++)
  6. {
  7. for(int t=3-i;t>=0;t--,cout<<" ");
  8. for(int j=1; j<=(2*i)+1;j++,cout<<"*");
  9. cout <<endl;
  10. }
  11. return 0;
  12. }
  13.  
عمـــرو
هذه محاولتي

CODE
#include <iostream>
using namespace std;

void main()
{
int floors, base_width;
cout << "enter triangle width : ";
cin >> base_width;
cout << "enter number of floors : ";
cin >> floors;
int midline = base_width / 2;
cout << "width = " << base_width << " , floors = " << floors << "\n";
for (int i = 1; i <= floors; i++)
{
int stars = int(float(base_width) * (float(i) / float(floors)));
if(stars == 0)
{
stars = 1;
}
int spaces = midline - (stars / 2);
for (int j = 0; j < spaces; j++)
{
cout << " ";
}
for (int k = 0; k < stars; k++)
{
cout << "*";
}
cout << endl;
}
}
}


وبالمناسبة ، كيف تدرجون صناديق الشفرات الملونة ؟
fatimah
اشكركم اخواني djug وفهد وعمرو
انا اسفة تعبتكم معاي ولكن جميع الاكواد عطتني نفس النتيجة وهي :



******^^^^
ليش ماعرف
هل هذي نفس النتيجة اللي حصلتو عليها في اجهزتكم؟؟؟؟؟؟؟
ماادري يمكن المشكلة من عندي
على فكرة انا استخدم mingw compiler for c++
and crimson editor to type my codes

هل تفرق يعني لو كنت استخدم سوفتوير اخر ؟ماعتقد!!!
تعبتكم معاي انا جدا اسفة واشكركم فردا فردا وبصراحة انا تقريبا استسلمت في معرفة الكود حق هالسؤال
شكرا جزيلا
djug
إليك النتيجة



بخصوص الـ IDE
أنصح باستعمال code::blocks

موجود على
http://www.codeblocks.org/

هناك موضوع يقارن بين الـ IDE هنا في المنتدى ابحثي عنه

إقتباس
وبالمناسبة ، كيف تدرجون صناديق الشفرات الملونة ؟

ضع الكود بين
[g code=cpp]
و
[/g code]
(قم بمسح المسافة الموجودة بعد الحرف g)
fatimah




إقتباس(djug @ Oct 12 2008, 08:21 PM) *
إليك النتيجة



بخصوص الـ IDE
أنصح باستعمال code::blocks

موجود على
http://www.codeblocks.org/

هناك موضوع يقارن بين الـ IDE هنا في المنتدى ابحثي عنه


ضع الكود بين
[g code=cpp]
و
[/g code]
(قم بمسح المسافة الموجودة بعد الحرف g)



شكرا جزيلا اخوي على اهتمامك بالمساعدة
الله يوفقك
دريد عبد الله
مرحبا
المشاركة 8 للأخ djug صحيحة.
بس مو عيب هيك سؤال ما ينحل مع أغلب الشباب.. يا حيف laugh.gif
تاني مرة نادولي لأنو هاد شغلي 032.gif
فهدالشلوي
جميع الكودات تعمل المطلوب فقط اختلاف في الاسلوب.
تأكد من مطابقة الكود.
دريد عبد الله
مرحبا
إقتباس
جميع الكودات تعمل المطلوب فقط اختلاف في الاسلوب.

لم أجرب الأكواد كلها لكن جربت بعضها ووجدت أخطاء منطقية.
على كل.. خلص امتحان الأخت وما نفع الكلام sad.gif
فهدالشلوي
إقتباس
لم أجرب الأكواد كلها لكن جربت بعضها ووجدت أخطاء منطقية

الجميع هنا يبحث عن الفائدة اتمنى منك أخي ان توضح الاخطاء المنطقيه التي وجدتها من اجل ان نتلافاها مستقبلا إن شاء الله.
djug
إقتباس
لم أجرب الأكواد كلها لكن جربت بعضها ووجدت أخطاء منطقية.
على كل.. خلص امتحان الأخت وما نفع الكلام


لا وجود لأية أخطاء منطقية في الشيفرات الثلاثة

بخصوص شيفرة الأخ فهد الشلوي فهناك مشكل في الـ tag المستعمل (gcode) تحقق بعد عملية النسخ من وجود علامات + في مكانها (جربت الكود و وجدته يشتغل جيدا)

أعتبر هذا الكود أفضل الثلاثة لقلة عدد سطورها

أما عن شيفرة الأخ عمرو فتوجد أخطاء صغيرة في الكتابة فقط (ليست أخطاء منطقية) : نسي أن يكتب int قبل الدالة main إَضافة إلى كتابة الكلمة namespace بـحرف N كبير
fatimah
شكرا اخ دريد صحيح خلص امتحاني بس الكلام لازال ينفع والحمد لله امتحاني ماكان يبين لي صعب بس مو واثقة منه بصراحة والله يستر على النتيجة
وبعدين انا بصراحة جديدة جدا في مجال البرمجة يعني صار لي اربع شهور وانا ادرس سي++ كاول لغة برمجة ادرسها ووجدت فيها المتعة ولله الحمد
اخي ياليت توضح الاخطاء المنطقية اللي تكلمت عنها في اكواد الاخ فهد ومنكم نستفيد
واذا عندك رأي لحل السؤال ياليت تتفضل فيه واكون شاكرة لك اخي
انا كمان لسه ماخلصت دراسة السي++ ولسه عند مادة سي++ السمستر الجاي ان شاء الله
وان شاء الله راح اكثر مشاركاتي في هالمنتدى المفيد خلال الاجازة استعدادا لحرب السي++ القادمة
تعليق على الاخ djug فعلا كلامك اخي انا كمان وجدتها اسهل لانها كماناقرب من الطريقة اللي تعلمتها وفهمتها كلها ولله الحمد
مع ذلك انا ماسمعت قبل عن الامر continue فتعلمت شي جديد وشكرا لك اخي
شكرا لاخ فهد واخ عمرو
عمـــرو
نعم أخي djug الشفرة التي كتبتها تعمل جيدًا وأنا لم أضعها إلا بعد أن جربتها أولاً ، والدالة main جعلتها لا ترجع قيمة وبالتالي سبقتها ب void فليس شرطًا أن ترجع int. والكلمة n amespace يحولها المنتدى تلقائيًا إلى namespace حتى داخل صناديق الشفرة ، وهذا خطأ في المنتدي.

الشفرة التي كتبتها أطول قليلاً لكنها مرنة ، بمعنى أنك يمكنك إدخال أي قيم لأبعاد المثلث وسيرسم البرنامج المثلث على أي حال ، وليس محصورًا في قيمة محددة سلفًا لا يمكن تغييرها. وللوصول إلى هذه المرونة يجب أن تكون الشفرة أطول قليلاً ، هذه هي ضريبة لا بد من دفعها. هذا غير طريقتي في الكتابة حيث أفضل أن تكون الشفرة أوضح وإن كانت أطول.

شكرًا لكم جميعًا.
عمـــرو
يمكن أن نختصر الشفرة كالتالي وستؤدي نفس الوظيفة ، فقط غير القيم من البرنامج ثم أعد الترجمة :

انسخ الكود
  1. #include <iostream>
  2. using namespace std;
  3. void main()
  4. {
  5. int floors = 5;
  6. int base_width = 9;
  7. for (int i = 1; i <= floors; i++, cout << endl)
  8. {
  9. int stars = int(float(base_width) * (float(i) / float(floors)));
  10. int spaces = (base_width - stars) / 2;
  11. for (int j = 0; j < spaces; j++, cout << " ");
  12. for (int k = 0; k < stars; k++, cout << "*");
  13. }
  14. }
  15.  
دريد عبد الله
مرحبا مجددا:
حابب إطرح تعريف أولا للإفادة :
الخطأ المنطقي : خطأ لايكتشفه البرنامج.. لأنه ليس خطأ لغويا.. بل منطقيل هو صحيح, لكن لا يعطي النتائج المطلوبة من البرنامج كما هي.
على ذلك :
أحد الإخوان قال بأن الأكواد كلها صحيحة.
(طبعا أنا لا أقصد الشيفرات الثلاثة التي ذكرها الأخ إنما أقصد الشيفرات جميعها ربما لم يفهم قصدي9
إلا أن المشاركة 2 مثلا تحوي كود خاطئ.. لا يعطي شكل هرم فهو يحوي خطأ منطقي صح؟
رح حاول ارسل شوية مشاركات أو تجارب..

دريد عبد الله
مرحبا إليكم هذه المحاولة :
كود
#include<iostream.h>
int main()
{  int n;
    cin >> n;
    n=n*2;
    int st = n/2 , en= st;
    for(int i=0;i<n;i++)
    {    for(int j=0;j<=en;j++)
        {
            if(j>=st && j<=en )
                cout << "*";
            else
                cout << " ";
        }
    st--;en++;
    cout << endl;
    if (en==n) break;
    }
}
فهدالشلوي
جميل جدا أخي بارك الله فيك لكن ايضا الكود به خطاء!
يجب ان تضيف retun 0; للبرنامج.

لكن الكود فكرته طيبه.

بارك الله فيك.
fatimah
اخ دريد شكرا لك الكود رائع جدا
واضح انه فعلا شغلك وخبير بالسي++
fatimah
إقتباس(عمـــرو @ Oct 13 2008, 03:50 PM) *
نعم أخي djug الشفرة التي كتبتها تعمل جيدًا وأنا لم أضعها إلا بعد أن جربتها أولاً ، والدالة main جعلتها لا ترجع قيمة وبالتالي سبقتها ب void فليس شرطًا أن ترجع int. والكلمة n amespace يحولها المنتدى تلقائيًا إلى namespace حتى داخل صناديق الشفرة ، وهذا خطأ في المنتدي.

الشفرة التي كتبتها أطول قليلاً لكنها مرنة ، بمعنى أنك يمكنك إدخال أي قيم لأبعاد المثلث وسيرسم البرنامج المثلث على أي حال ، وليس محصورًا في قيمة محددة سلفًا لا يمكن تغييرها. وللوصول إلى هذه المرونة يجب أن تكون الشفرة أطول قليلاً ، هذه هي ضريبة لا بد من دفعها. هذا غير طريقتي في الكتابة حيث أفضل أن تكون الشفرة أوضح وإن كانت أطول.

شكرًا لكم جميعًا.

اخي عمرو شكرا لك على المساعدة
اخي انا في البداية لما جيت اشغل البرنامج طلع لي خطأ بان الدالة main must return int
يعني مايصير تكون void
ال compiler لايقبل لذلك غيرت الى integer وضبطت معاي
اخي انا اعرف انه مو كل مترجمات السي++ سواء لذلك احب اعرف ايش compiler اللي تستخدمه اخي الكريم

fatimah
إقتباس
مرحبا
المشاركة 8 للأخ djug صحيحة.
بس مو عيب هيك سؤال ما ينحل مع أغلب الشباب.. يا حيف
تاني مرة نادولي لأنو هاد شغلي


اخي الكريم عن جد ابدعت وشهادتك كخبير سي++ انه مو عيب اغلب الشباب ما يعرفوه زرعت لي الثقة بقدراتي البرمجية في السي++
تصور هذا سؤال جا في امتحان نهائي في السنوات السابقة وفي هذي المادة نحن ندرسها كاول لغة برمجة ومادة اساسية تعتمد عليها كثير مواد في السنوات القادمة
وكمان نحن درسنا السي++ من الصفر في هذي المادة واخر السمستر يجيبو سؤال تعجيزي صراحة الاستاذ اللي حط هالسؤال ماعنده ضمير الله يهيده
بس الحمد لله امتحاني عدى على خير ولو اني موواثقة منه الله يستر الحمد لله على كل حال


شكرا لك اخي الكريم
صراحة الكود ابدااااع
اما تكون خبير سي++ او عبقري جدا
دريد عبد الله
مرحباً أخواني الكرام:
أخي الكريم فهد :
بالنسبة لكلمة return 0;
بعض المترجمات ترسل رسالة تنبيه بوجوب هذا مثل المترجم اللذي أملكه turbo c++ 4.5 ولا تعتبره خطأ
و بعضها يعتبره خطأ قاتل ربما.
لكن المهم الفكرة الخوارزمية.
الأخت فاطمة :
أشكرك جزيلا على هذه الكلمات التي أعادت لي الثقة بعد أن خيب بعض أعضاء منتدى التقنيات الجديدة أملي بنفسي و بهم..
بالنسبة لموضوع الخبرة : صدقيني أختي حل مثل هذه المسألة لا يتطلب خبرة كبيرة.. ستكتشفين هذا في المستقبل القريب إن
شاء الله.
الخبرة تأتي من حل المسائل مسألة تلو الأخرى و بالتدريج حسب الصعوبة..
يعني هناك مسائل أصعب من هذه ب50 مرة (إن كان للصعوبة مقياس) و هناك أصعب ب 100 مرة و هناك أكثر.
وهناك خوارزميات متعددة لحل المسائل منها الخوارزميات العودية و الخوارزميات التراجعية و غيرهما الكثير..
هناك عدة مواقع تفيدك في تطوير خبراتكم البرمجية منها موقع الأولمبياد الأمريكي للمعلوماتية :
http://ace.delos.com/usacogate
سجلي أختي عضويتك و استلمي إيميل ثم باشري بحل المسائل..
ولاحظي الفرق في درجة الصعوبة.
تذكروا إخواني : كل مسألة يحلها الطالب قد ترفعه عدة درجات و بجد هناك من المسائل ما يضاعف الخبرات
وخصوصا عندما يحلها الطالب بدون مساعدة أحد و عندما يكتشف خوارزمية الحل بنفسه.
الموقع رائع جدا و أغلب مسائل الأولمبياد الدولي تقتبس منه و من بعض المواقع العالمية المشابهة.
وتعتمد على الموقع الكثير من الفرق المشاركة في الأولمبياد المعلوماتي الدولي في تدريس طلابها و اختيار المشاركين..
باختصار الموقع هام و رائع جدا.
يعني حلي أختي أول مسألتين من الموقع ولاحظي مدى سخافة الكود الذي قدمته أنا laugh.gif
fatimah
شكرا اخي الكريم على المعلومة انا توني بالبداية لدرجة اني ماكنت اعرف ان في مواقع زي كذا
شكرا اخي الكريم ربي يوفقك ويجزاك خير يارب


دريد عبد الله
واجبنا يا أختي..
وفقك الله في دراستك.
لا تنسي أن تطمأنينا عن نتائج الإمتحانات.. و عساك تبلغين من التفوق فيها ما تشائين..
والله ولي التوفيق
bizi
كل الطرق صحيحة الخطئ يمكن ان يكون في برنامجك
هذه "نسخة - خفيفة" من محتويات الرئيسية للإستعراض الكامل مع المزيد من الصور والخيارات الرجاء إضغط هنا.
Invision Power Board © 2001-2009 Invision Power Services, Inc.