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

مسألة دراسية ....

بدأه almstshar2 في 28 أغسطس 2008 · 6 رد · 720 مشاهدة · في الأسئلة المجابة
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

السلام عليكم

عمتم مساء اخوتي جميعا

انا من هوات البرمجة نصحني احد الاخوة بكتاب

كيف تبرمج بلغة السي ++ للدكتور صلاح الدوة جي

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

اذا احد عندة اي فكررة ياليت يساعدني

نتركم مع المسألة

(برنامج محاكة:"بين السلحفاة والارنب")

سوف نحاول في هذا التمرين تذكر احد القصص قصة السباق بين الارنب والسلحفاة

وسوف نستخدم عملية توليد ارقام عشوائية لمحاكات السباق

يبدأ السباق من المربع رقم 1 حتى المربع 70 حيث يوجد خط النهاية ويمثل كل مربع احد المواضع الممكنة التي يمكن اشغالها اثناء السباق.يجري السباق على سفح جبل مما يسبب انزلاق المتسابقين .

يتضمن البرنامج ساعة تدق دقة واحدة كل ثانية ويجب تصحيح موضع كل متسابق عند كل دقة من دقات الساعة حسب القواعد التالية..

السلحفاة مشي سريع 50% 3 مربعات الى اليمين

\\ انزلاق 20% 6 مربعات الى اليسار

\\ مشي بطئ 30% مربع واحد الى اليمين

الارنب نوم 20% لا توجد اي حركة

\\ قفزة كبيرة 20% 9 مربعات الى اليمين

\\ انزلاق كبير 10% 12مربع الى اليسار

\\ قفزة صغيرة 30% مربع واحد الى اليمين

\\ انزلاق صغير 20% مبرعان الى اليسار

ملاحظة: يبدأ السباق من اليسار الى اليمين اي ان اتجاة الحركة نحو الامام يتم نحو اليمين.

استخدم متحولات لحفظ موضع كل مشترك بالسباق (تنحصر ارقام المواضع بين 1 و 70 )

يبدأ كل حيوان من المربع واحد (نقطة البداية) وعندما ينزلق الى اليسار الى ما قبل المربع 1 فيتم اعادتة الى الوراء الى المربع واحد.

قم بتوليد النسبة المئوية الموضحة في الجدول السابق بأستخدام مولد لااعداد العشوائية (i) المحصورة ضمن المجال

0>= i<=10

فمن اجل السلفاة مثلا فأنها تقوم بتنفيذ مشي سريع عند توليد العدد

<FONT size=2>1<= i<=5</FONT>

وتفذ انزلاقا عند

<FONT size=2>6<= i<=7</FONT>

ومشيا بطيا عند

<FONT size=2>8<= i<=10</FONT>

وبي نفس الطريقة تتم معالجة حركة الارنب

يبدأ السباق بعد طباعة العبارة التالية

BANG!!!!!!

ثم عند كل دقة من دقات الساعة (اي عند كل حلقة من حلقات التركرا) يتم طباعة سطر مؤلف من سبعين موضع

علية حرف T للدلالة على موضع السلحفاة وحرف H موضع الارنب .يمكن احيانا اني يصل كل المتسابقين الى نفس الموضع عندها تقوم السلحفاة بضرب الارنب ويطبع

كلمة OUCH في ذالك الموضع .تبقى بقية المواضع الاخرى التي ليس فيها t او H او OUCH (في حالة التعادل) فارغة.

بعد طباعة السطر نحقق من احد الحيوانين قد وصل الى الموضع 70 او تجاوزة.اذا حصل ذاللك عندها يحدد البرنامج الفائز وتنتهي عملية المحاكاة ويطبع اسم الفائز

طبعا ياشباب انا ابغى الفكررة فقط

ويعطيكم الف عافية

#2

السلام عليكم

هذا جزء من البرنامج

يوضح حركة السلحفاه

وطبعا سهل تطبيق حركة الأرنب

بالمثل


#include<conio.h>
#include <time.h>
using namespace std;
void wait ( int s )
{
clock_t end;
end = clock () + s * CLOCKS_PER_SEC;
while (clock() < end) {}
}
int main()
{
char race_t[70];
int place_turtle=0;
for(int m=0;m<70;race_t[m++]=' ');race_t[70]='\0';
int i;
srand(time(0));
while(1)
{
i =1+rand()%10;
cout<<" i = "<<i<<endl;
if (i>=1 && i<=5)
{
place_turtle+=3;

}
else if(i>=6 && i<=7)
{
place_turtle-=6;
if(place_turtle<0) place_turtle=0;
}
else if (i>=8 && i<=10)
{
place_turtle+=1;
}
cout<<" place of turtle now : "<<place_turtle<<endl;
race_t[place_turtle]='T';
cout<<race_t<<endl;
wait(1);
for(int m=0;m<70;race_t[m++]=' ');
system("cls");
}

getch();
return 0;
}
#include <iostream>

طبعا بتكون حركه لا نهائيه لأن البرنامج لم يكتمل بعد

وطبعا من الممكن استخدام الداله

sleep

بدلا من الداله

wait

ولكن يجب ادراج المكتبه

windows.h

وبارامتر الداله

sleep

سيكون 1000

بالتوفيق أخى المستشار

وأى سؤال

حاضرين

:blink:

تم تعديل هذه المشاركة بواسطة amin_mu123 في 29 أغسطس 2008 في 07:37

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

#3

السلام عليكم كيفك أخى

هذا تكملة حركه الأرنب

ولكن باقى بعض الأجزاء البسيطه


#include <iostream>
#include<conio.h>
#include <time.h>
using namespace std;
void wait ( int s )
{
clock_t end;
end = clock () + s * CLOCKS_PER_SEC;
while (clock() < end) {}
}
int main()
{
char race_t[70];
char race_r[70];
int place_turtle=0;
int place_rabit=0;
for(int m=0;m<70;race_t[m++]=' ');race_t[70]='\0';
for( m=0;m<70;race_r[m++]=' ');race_r[70]='\0';
int i,j;
srand(time(0));
while(1)
{
i =1+rand()%10;
j=1+rand()%10;
cout<<" i = "<<i<<endl;
cout<<" j ="<<j<<endl;
//************************************************************
if (i>=1 && i<=5)
{
place_turtle+=3;

}
else if(i>=6 && i<=7)
{
place_turtle-=6;
if(place_turtle<0) place_turtle=0;
}
else if (i>=8 && i<=10)
{
place_turtle+=1;
}
//**********************************************************
if(j>=1 && j<=2) {}
else if(j>=3 && j<=4) place_rabit+=9;
else if(j==5)
{
place_rabit-=12;
if(place_rabit<0) place_rabit=0;
}
else if(j>=6 && j<=8) place_rabit+=1;
else if(j>=9 && j<=10)
{
place_rabit-=2;
if(place_rabit<0) place_rabit=0;
}
cout<<" place of turtle now : "<<place_turtle<<endl;
cout<<" place of rabit now : "<<place_rabit<<endl;
race_t[place_turtle]='T';
race_r[place_rabit]='R';
if(place_rabit>=70) {cout<< "\n Rabit win";break;}
else if(place_turtle>=70) {cout<<"\n Turtle win"; break;}
if(place_rabit==place_turtle)
{
system("cls");
cout<<" Rabit Say OUCH";
wait(2);
}
cout<<race_t<<endl;
cout<<race_r<<endl;
wait(1);
for(int m=0;m<70;race_t[m++]=' ');
for(m=0;m<70;race_r[m++]=' ');
system("cls");
}

getch();
return 0;
}

:huh:

ولكن الشى الذى لم أفهمه هل لكل حيوان متغير عشوائى خاص به

أم متغير واحد لكلا منهم

؟

تم تعديل هذه المشاركة بواسطة amin_mu123 في 29 أغسطس 2008 في 10:12

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

#4
#include <iostream>
	#include<conio.h>
	#include <time.h>
	using namespace std;
	 void wait ( int s )
	{
	  clock_t end;
	  end = clock () + s * CLOCKS_PER_SEC;
	  while (clock() < end) {}
	}
void  main() 
	{
		 char race_t[70];
		 int num=0;
		 int place_turtle=0;
		 int place_rabit=0;
		 for(int m=0;m<70;race_t[m++]=' ');
		 race_t[70]='\0';
		 int i;
		 srand(time(0));
		 cout<<"start the Game   \n";
		 while(1)
		 {
			 i =1+rand()%10;

			 if (i>=1 && i<=5)
			 {
				 place_turtle+=3;

			 }
			 else if(i>=6 && i<=7)
			 {
				 place_turtle-=6;
				 if(place_turtle<0) place_turtle=0;

				 place_rabit-=12;
				 if(place_rabit<0) place_rabit=0;
			 }
			 else if (i>=8 && i<=10)
			 {
				 place_turtle+=1;
				 place_rabit+=9;
			 }
			 else if (i>=3 && i<=5)
			 {
				 place_rabit+=1;
			 }
			 else if (i>=1 && i<=2)
			 {
				 place_rabit-=2;
				 if (place_rabit<0) place_rabit=0;
			 }


			 if(place_rabit>=70) {cout<< "\n Rabit  win";break;}

			  else if(place_turtle>=70) {cout<<"\n Turtle win"; break;}

			else if (place_turtle == place_rabit)
			{
				race_t[place_turtle]='O';
				race_t[place_turtle + 1]='U';
				race_t[place_turtle + 2]='C';
				race_t[place_turtle + 3]='H';


			}

			else  
			{
			 race_t[place_turtle]='T'; 
			 race_t[place_rabit]='H';
			}


			 cout<<race_t;
			cout<<endl<<endl;

			 for(int m=0;m<70;race_t[m++]=' ');
			 wait(1);
			}

		cout<<endl<<endl;
		system("pause");


	 }

هذا هو المطلوب بعد التعديل على الكود

يعطيك الف عافية

لو تشرح لي الدالة هذي

 void wait ( int s )
	{
	  clock_t end;
	  end = clock () + s * CLOCKS_PER_SEC;
	  while (clock() < end) {}
	}
#5

وهذي بأاستخدام المؤشراات :thumb_up:

#include <iostream>
	#include<conio.h>
	#include <time.h>
	using namespace std;
	 void wait ( int s )
	{
	  clock_t end;
	  end = clock () + s * CLOCKS_PER_SEC;
	  while (clock() < end) {}
	}
void  main() 
	{
		 char *race_t[70];
		 int num=0;
		 int place_turtle=0;
		 int place_rabit=0;
		 for(int m=0;m<70;race_t[m++]=" ");
		 race_t[70]='\0';
		 int i;
		 srand(time(0));
		 cout<<"start the Game   \n";
		 while(1)
		 {
			 i =1+rand()%10;

			 if (i>=1 && i<=5)
			 {
				 place_turtle+=3;

			 }
			 else if(i>=6 && i<=7)
			 {
				 place_turtle-=6;
				 if(place_turtle<0) place_turtle=0;

				 place_rabit-=12;
				 if(place_rabit<0) place_rabit=0;
			 }
			 else if (i>=8 && i<=10)
			 {
				 place_turtle+=1;
				 place_rabit+=9;
			 }
			 else if (i>=3 && i<=5)
			 {
				 place_rabit+=1;
			 }
			 else if (i>=1 && i<=2)
			 {
				 place_rabit-=2;
				 if (place_rabit<0) place_rabit=0;
			 }


			 if(place_rabit>=70) {cout<< "\n Rabit  win";break;}

			  else if(place_turtle>=70) {cout<<"\n Turtle win"; break;}

			else if (place_turtle == place_rabit)
			{
				*(race_t + place_turtle)="OUCH";

			}

			else  
			{
			 *(race_t + place_turtle)="T"; 
			 *(race_t + place_rabit)="H";
			}

			for (int y = 0;y<70;y++)
			 cout<<*(race_t + y);
			cout<<endl<<endl;

			 for(int m=0;m<70;*(race_t + m++)=" ");
			 wait(1);
			}

		cout<<endl<<endl;
		system("pause");


	 }
#6

clock هذه دالة تعيد توقيت من بدء تشغيلها وتستخدم عادتا مع الميكرو CLOCKS_PER_SEC .

CLOCKS_PER_SEC مايكرو كل 1000 منه بثانيه واحده

فكرة الدالة هي مؤقت انتظار فقط.

للزياده حولها هنا

نفذ هذا الكود للتضح لك أكثر

  1.  
  2. #include <cstdlib>
  3. #include <iostream>
  4. #include<ctime>
  5. using namespace std;
  6.  
  7. int main(int argc, char *argv[])
  8. {
  9. clock_t end;
  10. end = clock () + 1 * CLOCKS_PER_SEC;
  11. while (clock() < end)
  12. {
  13. cout<<clock()<<endl;
  14. }
  15. system("PAUSE");
  16. return EXIT_SUCCESS;
  17. }
  18.  

تم تعديل هذه المشاركة بواسطة فهدالشلوي في 29 أغسطس 2008 في 23:14

tvquran_6.gif

#7

ممتاز أخى المستشار وأنت يا أخى فهد

ولكن هناك شى بسيط ناقص ويكتمل الموضوع

يبدأ السباق بعد طباعة العبارة التالية

BANG

فكر كيف يمكن ذلك؟

تحياتى لك :pwease:

تم تعديل هذه المشاركة بواسطة amin_mu123 في 30 أغسطس 2008 في 00:57

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

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