الفريق العربي للبرمجةأرشيف المنتديات · 2000 – 2023
نسخة أرشيفية للقراءة فقط — التسجيل والمشاركة مغلقان، والمحتوى محفوظ كما كان.

تمرين خفيف

بدأه فهدالشلوي في 12 أبريل 2010 · 22 رد · 1,775 مشاهدة · في لغة C و ++C
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

السلام عليكم.

في مشاركة قراءت سؤال أجاب عليه أخي عوماني أتتني فكره جميله لحله وفق شروط مختلفه عن السؤال الاول.

السؤال :

اريد طباعة الاعداد بالشكل التالي:

9

88

777

6666

55555

444444

3333333

22222222

111111111

بالشروط التالية استخدام For مرة واحده فقط و cout مرة واحده فقط

بالتوفيق .

2
tvquran_6.gif

#2

اعتقد انه على الأقل سيوجد اثنان cout احدهم لطباعه الرقم و الأخر لطباعة سطر جديد

إذا كان كذلك فممكن اما واحده فقط فأنا لا اعرف كيف؟؟

و الله ولى التوفيق

مدونتي: C++ Tips and Tricks

#3
 #include <iostream>

using namespace std;

int main()
{
    int x  ;
    int  n = 1 ;
    cin >> x ;
    for (int i = x ; i > 0 ; i--)
    {
        cout << i*n << endl ;
        n = n * 10 + 1 ;

    }
    return 0;
}
1
#4

نعم محمد ضع إجابتك السطر الجديد يوضع بعد cout في نفس السطر

MLN4EVER إجابة صحيحة .

سأضع إجابتي بعد قليل .

tvquran_6.gif

#5

السلام عليكم

مترجم السي لا يعمل عندي، و كتبته بالسي شارب مؤقتا.

اقتباس
int k=111111111;

int b=100000000;

for (i = 9; i>0; i--)

{

//Console.Write("{0}\n",i*k/b);

cout << i * k / b << endl;

b/= 10;

}

1
#6

بن العيد إجابة موفقه وحل مميز إيضا.

تم تعديل هذه المشاركة بواسطة فهدالشلوي في 13 أبريل 2010 في 01:39

tvquran_6.gif

#7
int k=111111111;
 int b=100000000;
 for (i = 9; i>0; i--)
 {   
     //Console.Write("{0}\n",i*k/b);
     cout << i * k / b << endl;
     b/= 10;
 }
#8

وهذه إجابتي وربما هناك حلول أفضل :

#include <iostream>
#include<cmath>
using namespace std;


int main(int argc, char *argv[])
{

for(int i=9;i>=1;i--)
{
cout <<((long(pow(10,10-i))-1)/9)*i <<endl;
}
return 0;
}

تم تعديل هذه المشاركة بواسطة فهدالشلوي في 13 أبريل 2010 في 02:01

tvquran_6.gif

#9

تقريبا إلاجابات جميعها تعتمد في ضرب الرقم في العدد 1 مكرر بعدد المرات المطلوبه .

tvquran_6.gif

#10
اقتباس
تقريبا إلاجابات جميعها تعتمد في ضرب الرقم في العدد 1 مكرر بعدد المرات المطلوبه .

اجابتى ليست كذلك و ايضا استخدمت cout مره واحده فقط

for (int i = 9, w = 1; i > 0; w == 0? (i--, w = 10 - i) :w--)
        cout << char(w == 0? '\n': 0x30 + i);

و الله ولى التوفيق

تم تعديل هذه المشاركة بواسطة Muhammad alaa في 13 أبريل 2010 في 03:11

2

مدونتي: C++ Tips and Tricks

#11
#include <iostream>
using namespace std;
int main()
{

for(float i=9,j=10;i>=1,j<=1000000000;i--,j=10*j)
{
cout <<long((j-1)/9*i)<<endl;
}
getchar();getchar();
return 0;
}

يبدو أنني تأخرت :blush:

1
#12

رائع يا محمد إجابة مميزة من شخص مميز .

ولا أنسى MLN4EVER فقد كان سباق بالاجابة وكانت إجابة موفقه ومميزة وإيضا أبن العيد فقد كانت إجابته بطريقه مميزة

حقيقة إجابات تدل على عقول نشطه بارك الله فيكم وزادكم علما ونور .

محمد أمين لم تتأخر بل أتيت بإجابة ممتازة والقفزات التي استخدمتها في الفور فكره جيده فعلا.

شكرا لك وشكرا لكل من قدم إجابة لهذا السؤال.

tvquran_6.gif

#13
Muhammad alaa كتب:

اجابتى ليست كذلك و ايضا استخدمت cout مره واحده فقط

int w = 1;

for (int i = 9; i > 0; w == 0? (i--, w = 10 - i) :w--)
        cout << char(w == 0? '\n': 0x30 + i);

و الله ولى التوفيق

يا لها من إجابة ممتازة فعلاً شكراً لك

وشكرا كذلك للإخوة على إجابتهم كذلك

#14

اشكرك اخي فهد المخ كان واقف شوي وشغلته

 for (int i = 9; i > 0; w == 0? (i--, w = 10 - i) :w--)

الاخ محمد ماهذا ال for حقيقه لفيت فيه حتى دخت فما بال الكومبايلر

ممكن تشرحه لاني اول مره اشوف زي كذا وكيف طريقة عمل البرنامج لان char ايضا غريب وضعها بالطريقه

هذه ؟؟؟

تم تعديل هذه المشاركة بواسطة MLN4EVER في 13 أبريل 2010 في 02:42

#15
for (int i = 9, j = 1; (i > 0 && j<=9*j); i--, j=(10*j)+1)
cout<<i*j << endl;

:blush:

1
#16

لتفهم كيف يعمل اللوب لابد ان تعرف كيف ستتم العمليه نفسها.

الفكره كلها قائمه على استخدام cout واحده فقط و السؤال الذى يطرح نفسه كيف ستتم هذه العمليه؟

الأمر سيتم كالتالى:

الرقم 9 سيتم طباعته 1 مره

الرقم 8 سيتم طباعته 2 مره

الرقم 7 سيتم طباعته 3 مره

الرقم 6 سيتم طباعته 4 مره

الرقم 5 سيتم طباعته 5 مره

الرقم 4 سيتم طباعته 6 مره

الرقم 3 سيتم طباعته 7 مره

الرقم 2 سيتم طباعته 8 مره

الرقم 1 سيتم طباعته 9 مره

الرقم 0 لن يتم طباعته

فلنترك الرقم صفر قليلا و لننظر لباقى الأرقام ما العلاقه بينهم، كما نرى العلاقه هى كالتالى

9 + 1 = 10
8 + 2 = 10
7 + 3 = 10
6 + 4 = 10
5 + 5 = 10
4 + 6 = 10
3 + 7 = 10
2 + 8 = 10
1 + 9 = 10

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

w == 0? (i--, w = 10 - i) :w--

إذا كان الرقم الحالى (w) يساوى صفر قم بتقليل الرقم الذى سيتم طباعته (i) بمقدار 1 و قم بتخزين عدد مرات الدوران الجديده داخل w و ذلك عن طريق المعادله 10 - i و حيث ان i تم تقليلها لذا فـ w ستحتوى على عدد مرات طباعة الرقم الموجود بـ i.

فى حالة الرقم صفر سيتم طباعة سطر جديد

و الله ولى التوفيق

1

مدونتي: C++ Tips and Tricks

#17

ييظهر ان السؤال له عدد كبير من الطرق رغم أني لم اتصور ان يكون له كل هذه الطرق .

طريقة مختصرة وجميله منك يابن العيد.

محمد علاء فكرتك جميلة وشرحك أجمل .

tvquran_6.gif

#18

اسف اكثرت الاسئلة ولكن ماهذا 0x30 +i ???????

#19

0x30 تقابل الرقم 48 فى جدول الـ ASCII و هو رمز الرقم صفر

و هذا السطر

0x30 +i

يقابل رمز الرقم المراد طباعته بمعنى اذا كان i يساوى 9 فالرقم سيكون 0x39 و هو يقابل الرقم 9 فى جدول الـ ASCII.

و الله ولى التوفيق

مدونتي: C++ Tips and Tricks

#20

الف شكر وضحت الفكر

#21

هل من الممكن ان تشرح لنا حــلك اخي فهد الشــلوي ..بالتفصيـل .. وشكرا

#22

السلام عليكم.



  • هنا نرفع العدد عشرة لقوى من من 1 الي 9 فتظهر لي سلسلة من الاعداد التي جميع خاناتها 9
  • long(pow(10,10-i))-1


    هنا نقسم التسعات على 9 ليظهر العدد على صورة سلسلة من الاعداد التي خاناتها 1

  • (long(pow(10,10-i))-1)/9


    نضرب في العدد الذي نريده ان يظهر متكرر

  • (long(pow(10,10-i))-1)/9*i


تستطيع تجربتها سطر بسطر بالكومبايلر وتشاهد نتيجة كل سطر من هذه السطور الثلاثه.

1
tvquran_6.gif

#23

الله يعطيك العافيه مشكور

مواضيع مشابهة