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

How To Nest For Loops?

بدأه tracy في 29 يوليو 2009 · 14 رد · 2,223 مشاهدة · في ارشيف قسم C/C++
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

السلام عليكــم ورحمـة الله وبركاتــه

أنا الأول عاوزة أقول يا ريت تستحملوني لأني مبتدئة جدًا جدًا في السي ++، وتقريبًا

مفيش حد يفتيني فيها غيركم، فأنا هنا للتعلم.. وجزيتم خيرًا :)

هو في سؤال : اني مش بعرف أعمل نست لاتنين فور لوب جوه بعض... وفي مشكلات

كتيرة بتقابلني بحتاج أعملها كدا

مثلاً: مطلوب مني أعمل برنامحج بيظهر جدول الضرب لأي رقم يدخله اليوزر، لكن

لازم شكله يكون على 10 عواميد و 20 سطر، وبين كل عدد والتاني مسافة (على السطر الواحد)

وطبعًا أستخدم اتنين فور لوب جوه بعض، وأنا محتارة أخلي كل واحدة تعمل إيه بالظبط

وأيضًا: مفترض اني أصمم برنامج بيعرض هرم إكسات.. ويكون على الشكل التالي

X

XX

XXX

XXXX

XXXXX

وهكذا حتى 20 سطر، بردو باستخدام اتنين فور لوب جوه بعض

وسؤال جانبي أخير: ما هي الــ

floating point?

وأنا آسفة على الإطالة، لكني فعلاً محتاجة حد يفهمني وسأكون ممتنة جدًا :blush:

أستغفر الله العظيم الذي لا إله إلا هو الحي القيوم وأتوب إليه

#2
اقتباس
أعمل نست لاتنين فور لوب جوه بعض

int a, b;

for( a = 0; a < 10; ++a )
{
	for( b = 0; b < 10; ++b )
	{
		   // your code here
	}
}

اقتباس
وسؤال جانبي أخير: ما هي الــ

floating point?

نوع بيانات يمكنك من تمثيل الأعداد الكسرية مثل 3.5, 723.5345

لأنه كما تعلمين لا يمكن تمثيل الأعداد الكسرية بواسطة النوع int

الـ floating point data type يمكن تمثيلها بثلاثة أنواع في السي++: float, double, و long double

مثال بسيط

double a = 10.0;
double b = a / 3.0;

تحياتي.

SAFETY TIP : Always delete what you new, and free what you malloc, never mix new with free or malloc with delete.

#3

السلام عليكــم ورحمـة الله وبركاتــه ،،

كما تفضل أخونا محمد

النستد لوب تعتمد على التخيل فمثلا لو كان لدينا رسمه ثنائية البعد مثل الهرم الذى تبغيه يجب ان يكون لدينا لوبين متداخلين

الخارجى للتحكم فى الصفوف صفا تلو الآخر والداخلى يتحكم فى محتوى كل صف على حده

فمثلا لرسم مستطيل من الحرف x

لاحظى الكود التالى


using namespace std;
int main()
{
for (int i=0;i<5;i++)
{
for (int j=0;j<10;j++)
{
cout<<'x';
}
cout<<endl;
}
cin.get();
return 0;
}
#include<iostream>

اللوب الخارجى ذو العداد i هو الذى يقوم بالإنتقال من صف الى صف

وطبعا بدون السطر

 cout<<endl;

ستكون جميع الإكسات بجانب بعضها

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

اعتبرى اللوب الداخلى يماثل عقرب الثوانى واللوب الخارجى هو عقرب الدقائق

طبعا يمكن التحكم باللوب الداخلى لرسم ما تريدى ووضع شروط معينه لرسم الحرف اكس او رسم مسافه خاليه

-----------------------------------------------------------------------------------

بالنسبه ل floating point

وهو مصطلح يعبر عن الأعداد العشريه او الكسور العشريه

ويمكن ترجمتها مجازا بالنقطه العائمه

مثلا العدد 12.2345

يمكن كتابته بهذا الشكل

0.122345*10^2

او

1.22345*10^1

او

1223.45*10^-2

مكان النقطه تغير مع تغير الأس المرفوع اليه الأساس 10

ويوجد ملف مرفق يوضح كيفية تمثيل تلك الأعداد داخل الحاسب

تحياتى

float.pdf

اللهم صل على سيدنا محمد وعلى آله وصحبه وسلم

#4

جزاكم الله خيرًا.. :)

بس عندي سؤال:

أنا مثلاً عاوزاه في السطر الواحد يطلع خمس إكسات وبين كل إكس والتانية مسافة

أقوله:

for (int i=0;i<5;i++)
	 {
		 for (int j=0;j<10;j++)
		 {
			 cout<<'x';
		 }
cout << " ";
		 cout<<endl;

تمام كدا؟

يعني بعد ما يطلع من اللوب الداخلية يسيب مسافة وينزل سطر...

ولا كدا غلط؟؟؟

تم تعديل هذه المشاركة بواسطة tracy في 29 يوليو 2009 في 21:47

أستغفر الله العظيم الذي لا إله إلا هو الحي القيوم وأتوب إليه

#5

جربي هذا الكود وأعرف أن المطلوب 2 for loops ويمكن إنشائها ب 3 for loops , لكن بسبب الملل ولحاجة في نفسي أريد أثباتها :lol: , كتبت لكي الكود بحلقة تكرار واحدة , فقط غيري القيمة N=20 لأي قيمة أخرى لعدد أسطر الشكل بالنجوم وسيظهر بالشكل الصحيح :

#include <iostream>
using namespace std;

int main()
{
	int N=20,n;
	for(int q=0;q<N*N*2;q++)
	{
		if(!(q%(N*2)))cout<<endl;
		(abs(((q%(N*2))-(N-1)))-((q-q%(N*2))/(N*2)))+abs((abs(((q%(N*2))-(N-1)))-((q-q%(N*2))/(N*2))))==0 ? cout<<"*" : cout<<" "; 
	}
	return 0;
}

post-19273-1248897544_thumb.png

:)

*تحذير لاتستخدمي هذا الكود , لكن أريد فقط أن أعرض مايمكن عمله بالبرمجة فلا حدود للتفكير والطرق , وأضفت الموضوع كشاهد ردا في موضوع آخرهنا :معادلات باقي القسمة

لذلك إستخدام الكود سيعرضك لفقدان درجة التمرين لأنه غير قابل للشرح على الأقل حاليا :lol:

banner_60_468.gif

NOTHING IS IMPOSSIBLE

#6

اذا اردتى مسافات بين كل اكس والتانيه لازم تكون داخل اللوب الداخليه

بهذا الشكل

#include<iostream>
using namespace std;
int main()
{
	for (int i=0;i<5;i++)
	{
		for (int j=0;j<5;j++)
		{
			cout<<'x'<<" ";
		}
		cout<<endl;
	}
	cin.get();
	return 0;
}

ولاحظى أختى ان اللوب الخارجيه تحدد عدد السطور واللوب الداخليه تحدد ما يكتب داخل سطر على حده و اعتقد ان الشكل الهرمى المطلوب من الأفضل ان يكون عدد النجوم فى كل سطر 1, 3 ,5 ,7 وهكذا

مثل الموجود فى الصوره

post-153585-1248897334_thumb.gif

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

سلام

اللهم صل على سيدنا محمد وعلى آله وصحبه وسلم

#7

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

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

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

	int num;

	cout << "\nEnter a number: ";
	cin >> num;
	cout << endl;

	for ( int i = 1; i <= 20; i++)
	{
		for ( int j = 1; j <= 10; j++)
		{
			cout << num * j;
			cout << " ";

			}
			cout << num * i;
			cout << endl;
		}

	system ("pause");
	return 0;
	}

لكن في مشكلة،، بيخرج كل سطر شبه اللي قبله بالظبط،،

اللهم إلا إنه في مشكلة في آخر عدد....

أنا تعبت جدًا معاه، ومش عارفة أتصرف!! :(

أستغفر الله العظيم الذي لا إله إلا هو الحي القيوم وأتوب إليه

#8

السلام عليكم

هل تقصدى جدول ضرب بهذا الشكل

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

	int num;

	cout << "\nEnter a number: ";
	cin >> num;
	cout << endl;

	for ( int i = 1; i <= num; i++)
	{
		cout<<setw(5)<<i<<setw(5);
		for ( int j = 1; j <= num; j++)
		{
			cout<<i*j<<setw(5);
		}
		cout<<endl;
	}

	system ("pause");
	return 0;
	}

يا ريت توضحى المطلوب أكثر

سلام

تم تعديل هذه المشاركة بواسطة amin_mu123 في 29 يوليو 2009 في 23:41

اللهم صل على سيدنا محمد وعلى آله وصحبه وسلم

#9

جربي التعديل البسيط هذا .

في برنامجك بدل السطر :

 cout << num * j;

تحول ليصبح :

 cout << num * (i*j+j);

بالتالي الكود الكامل :

 

[color= #007f00;]#include <iostream>

 

[color= #0000ff;]using [color= #0000ff;]namespace std;

 

[color= #0000ff;]int main[color= #000000;]([color= #000000;])

[color= #000000;]{

	 [color= #0000ff;]int num;   

    cout [color= #000000;]<< [color= #A31515;]"[color= #A31515; font-weight: bold;]nEnter a number: ";

    cin [color= #000000;]>> num;

    cout [color= #000000;]<< endl;

 

    [color= #0000ff;]for [color= #000000;]( [color= #0000ff;]int i [color= #000000;]= [color= #ff0000;]1; i [color= #000000;]<= [color= #ff0000;]20; i[color= #000000;]++[color= #000000;])

    [color= #000000;]{

        [color= #0000ff;]for [color= #000000;]( [color= #0000ff;]int j [color= #000000;]= [color= #ff0000;]1; j [color= #000000;]<= [color= #ff0000;]10; j[color= #000000;]++[color= #000000;])

        [color= #000000;]{

            cout [color= #000000;]<< num [color= #000000;]* [color= #000000;](i[color= #000000;]*j[color= #000000;]+j[color= #000000;]);

            cout [color= #000000;]<< [color= #A31515;]" ";

 

            [color= #000000;]}

            [color= #007f00;]//cout << num * i+j;

            cout [color= #000000;]<< endl;

        [color= #000000;]}

 

[color= #0000ff;]return [color= #ff0000;]0;

[color= #000000;]}

banner_60_468.gif

NOTHING IS IMPOSSIBLE

#10

أخي amin_mu123

جزاكم الله كل خير؛ أفدتني كثيرًا في المثلث.. لكن جدول الضرب لا أعنيه بهذا الشكل..

مطلوب مني أعمل برنامج بيظهر جدول الضرب لأي رقم يدخله اليوزر، لكن

لازم شكله يكون على 10 عواميد و 20 سطر، وبين كل عدد والتاني مسافة (على السطر الواحد)

وطبعًا أستخدم اتنين فور لوب جوه بعض، وأنا محتارة أخلي كل واحدة تعمل إيه بالظبط

هكذا، لكن الأستاذ HGB جزاه الله خيرًا حللي المشكلة.. شكرًا أخي :)

أستاذي HGB جزاك الله خيرًا، فعلاً المشكلة اتحلت مع تعديل بسيط:

cout<<num*(i*j);

بدون +j الأخيرة.......

بس ممكن أفهم معنى التعديل دا؟؟؟

بعد إذنك، علشان بس أفهم الفور لوبس دي كويس.. :)

أستغفر الله العظيم الذي لا إله إلا هو الحي القيوم وأتوب إليه

#11

جميل جدا :)

لفهم i*j يجب أن تتخيلي مكان وجود الرقم الذي سيعرض وبالضبط ماستكون مكوناته .

بالمناسبة خمنت فقط ماتحتاجينه ولم أتوقع أن يعمل بالشكل الذي تريدينه بهذا التعديل مباشرة بالتالي الموضوع شبه صدفة :lol: , لكن الخطأ لديكي كان أن قيمة الضرب ستكون ثابتة دائما حيث كانت مضروبة في j , لكن تحتاجين أن تجعلي قيمة الضرب متغيرة , بالتالي لايمكن تغير قيمة الضرب إلى بالضرب في متغير آخر , والمتغير الوحيد لديكي الثاني هو i .

لفهم الموضوع بشكل كامل أدخلي في قيمة Num الرقم 1 ... من تباين الأرقام سيتضح كل شيء , فالعددين i*j ليسا إلا حاصل ضرب الصف في العمود بالضبط في الجدول الناشيء وبالتالي عند ضربه في أي قيمة Num سيعطي الأعداد المطلوبة المقابلة .

banner_60_468.gif

NOTHING IS IMPOSSIBLE

#12

تمااااااااام تماااااااام..... :)

بجد بجد جزاكم الله خيرًا،،، أنا ممتنة جدًا لكم.. :)

أستغفر الله العظيم الذي لا إله إلا هو الحي القيوم وأتوب إليه

#13

طيب معلش حاجة كمان.. :blush:

أنا في الـ structure لو حبيت أعمل فور لوب....

مش جاية معايا:

struct employee {
	   int number;
	   float compensation;
	   };

int main () {
	employee emp1, emp2, emp3;

	   cout << "Enter number of employee number 1: ";
	   cin >> emp1.number;
	   cout << "Enter number of employee number 2: ";
	   cin >> emp2.number;
	   cout << "Enter number of employee number 3: ";
	   cin >> emp3.number;

	   cout << "Enter compensation of employee number 1: ";
	   cin >> emp1.compensation;
	   cout << "Enter compensation of employee number 2: ";
	   cin >> emp2.compensation;
	   cout << "Enter compensation of employee number 3: ";
	   cin >> emp3.compensation;



   system ("pause");
   return 0;
	}

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

حاولت أعملها كدا::

for (int i = 0; i < 3; i++){
cout << "Enter the number of employee " << i+1;
"
cin >> emp.number;
}

بس هي طبعًا غلط؛ لأني عرفت تلاتة فوق.......

يعني مش عارفة أعمل إيه في الـ cin !!! :unsure:

أستغفر الله العظيم الذي لا إله إلا هو الحي القيوم وأتوب إليه

#14

السلام عليكم

لكى تستخدمى الفور لوب فى إدخال البيانات يجب اعلان مصفوفه من الستركت أولا

   employee emp[3];

وفى داخل اللوب يكون ادخال البيانات بهذا الشكل

cin>> emp.number;

بالتوفيق ان شاء الله

اللهم صل على سيدنا محمد وعلى آله وصحبه وسلم

#15

تمااااااام، بجد جزاكم الله خيرًا...

أنا خطر على بالي المصفوفات، ما منعني منها إلا الكسل....

متشكرين يا فندم... :)

أستغفر الله العظيم الذي لا إله إلا هو الحي القيوم وأتوب إليه

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