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

[ تمت الإجابة ]مشكله في اللوجيك

بدأه empror9 في 22 يوليو 2012 · 24 رد · 3,578 مشاهدة · في الأسئلة المجابة
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

السلام عليكم

حاليا اكتب كود لعمل non-primitive sjf .. فاهم جدا لكيفيه حل هذه المسأله السهله .. يجب ان ناخذ اقل burst time

قمت بكتابة هذا الكود

#include <iostream>
using namespace std;

int main(){
int processNumber; // number of process
	cout <<"please enter the number of process: ";
	cin >> processNumber;

// int queue[processNumber]; // declare queue 
int burstTime[processNumber]; // declare burst time
int arrivalTime[processNumber]; // declare arrival time

	// input 
	for(int i=0; i<processNumber; i++){
		cout << "p" << i << ":" << endl;
		cout <<"Burst time: ";
		cin >> burstTime;
		cout <<"Arrival time: ";
		cin >> arrivalTime;
	}

	// output
	cout<<"Process" << "\t" << "Burst" << "\t" << "Arrival" << endl;
	for(int i=0; i<processNumber; i++){
		cout <<"p" << i << "\t " << burstTime << "\t " << arrivalTime << endl;
	}

	// counting
	int shortest;
	int shorter[processNumber];
	for(int i=0; i<processNumber; i++){

	    shortest = burstTime[0];
		if(burstTime[i+1] > shortest and burstTime[i+1] < burstTime) shorter = burstTime[i+1];
		cout << shorter << endl;
	}

	return 0;
}

المشكله عندي في فهم المنطق .. اريد الان من المصفوفه shorter ان تخزن اصغر الارقام من burst time

مثال

burst time

5

2

4

3

الناتج يصبح:

2

3

4

5

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

كيف اقوم بعمله؟

#2

السلان عليكم

تفضل أخي هده الدالة التي ترتب قم بوضع البرامترات المشار اليها:


{
int c=0,h,d;
while(c<processNumber)
{
h=0;
while(h<processNumber)
{
if(burstTime[c]<burstTime[h])
{

d=burstTime[c];
burstTime[c]=burstTime[h];
burstTime[h]=d;
d=arrivalTime[c];
arrivalTime[c]=arrivalTime[h];
arrivalTime[h]=d;
}
h++;
}
c++;
}
}
int sort(int burstTime[],int arrivalTime[],int processNumber)

وهكدا يصبح الكود:


using namespace std;
int sort(int burstTime[],int arrivalTime[],int processNumber)
{
int c=0,h,d;
while(c<processNumber)
{
h=0;
while(h<processNumber)
{
if(burstTime[c]<burstTime[h])
{

d=burstTime[c];
burstTime[c]=burstTime[h];
burstTime[h]=d;
d=arrivalTime[c];
arrivalTime[c]=arrivalTime[h];
arrivalTime[h]=d;
}
h++;
}
c++;
}
}
int main(){
int processNumber; // number of process
cout <<"please enter the number of process: ";
cin >> processNumber;

// int queue[processNumber]; // declare queue
int burstTime[processNumber]; // declare burst time
int arrivalTime[processNumber]; // declare arrival time

// input
for(int i=0; i<processNumber; i++){
cout << "p" << i << ":" << endl;
cout <<"Burst time: ";
cin >> burstTime;
cout <<"Arrival time: ";
cin >> arrivalTime;
}

// output------------------------------------------------
sort(burstTime,arrivalTime,processNumber);
//////////////----------------------------------------------------
cout<<"Process" << "\t" << "Burst" << "\t" << "Arrival" << endl;
for(int i=0; i<processNumber; i++){
cout <<"p" << i << "\t " << burstTime << "\t " << arrivalTime << endl;
}

// counting
int shortest;
int shorter[processNumber];
for(int i=0; i<processNumber; i++){

shortest = burstTime[0];
if(burstTime[i+1] > shortest and burstTime[i+1] < burstTime) shorter = burstTime[i+1];
cout << shorter << endl;
}

return 0;
}
#include <iostream>

تم تعديل هذه المشاركة بواسطة the inventor habib في 22 يوليو 2012 في 02:00

#3

ملاحضة تلك الدلة سوف تكون تقيلة عندما يكون عدد processNumber كبير لدالك عليك البحت عن

sorting algorithm

حتي تجد دالة سريعة.wink.gif

ادهب الي درس الأخ أحمد

/index.php?showtopic=259233

تم تعديل هذه المشاركة بواسطة the inventor habib في 22 يوليو 2012 في 02:46

#4

+المشكلة الأن في الكود هو أن ترتيب Process

يعني p0 p1...سوف يتغير

#5

الله يعطيك العافيه

شغلت البرنامج لكن لا يطبع لي .. هل من الممكن اعطائي شرح مبسط للوجيك حتى اطبقه بنفسي؟ لان حاولت افهم الكود وجدته صعب جدا

#6

أي كود أخي الدالة التي وضعت أنا

#7

+الكود يعمل لدي ويطبع كل شيئ

#8

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

هل يفي هذا بالغرض ؟ :)

 Selectsort (int data[],int n) {
   int min,tmp,i,j,min_id;

   for (i=0; i<n-1; i++) {
       min = data;
       for (j=i+1; j<n; j++)
           if (data[j] < min) {
              min = data[j];
              min_id = j;
           }
       tmp = data;
       data = data[min_id];
       data[min_id] = tmp;
   }
}

إليك هذا الرابط الذي يتحدث عن sorting algorithm

http://www.cs.oswego.edu/~mohammad/classes/csc241/samples/sort/Sort2-E.html

حمل هذا المرفق أخي : :lol:

Sorting Algorithm.zip

تم تعديل هذه المشاركة بواسطة Hamza+C+ASM في 22 يوليو 2012 في 14:21

rS3eY.png
#9

اعتذر منك اخي the inventor habib فالمشكله كانت من عندي :(

الان هذا الكود تبعي لكن يطبع لي 0 في كل مره .. استخدمت داله Hamza+C+ASM

#include <iostream>
using namespace std;

int Selectsort (int data[],int n) {
   int min,tmp,i,j,min_id;

   for (i=0; i<n-1; i++) {
       min = data;
       for (j=i+1; j<n; j++)
           if (data[j] < min) {
              min = data[j];
              min_id = j;
           }
       tmp = data;
       data = data[min_id];
       data[min_id] = tmp;
   }
}


int main(){
int processNumber; // number of process
        cout <<"please enter the number of process: ";
        cin >> processNumber;

// int queue[processNumber]; // declare queue
int burstTime[processNumber]; // declare burst time
int arrivalTime[processNumber]; // declare arrival time

        // input
        for(int i=0; i<processNumber; i++){
                cout << "p" << i << ":" << endl;
                cout <<"Burst time: ";
                cin >> burstTime;
                cout <<"Arrival time: ";
                cin >> arrivalTime;
        }

        cout << Selectsort(burstTime, processNumber) << endl;
        cout<<"Process" << "\t" << "Burst" << "\t" << "Arrival" << endl;
        for(int i=0; i<processNumber; i++){
                cout <<"p" << i << "\t " << burstTime << "\t " << arrivalTime << endl;

        }


        return 0;
}

بالمناسبه لماذا الداله لا يوجد بها return? لانها من النوع int

شاكر ومقدر

#10

السلام عليكم

أخي لمادا فعل هكدا

cout << Selectsort(burstTime, processNumber) << endl;

يكفي أن تستدعي الدالة هكدا فقط

Selectsort(burstTime, processNumber)

جربها.

#11

+ادا استعملت دالة الأخ حمزة فان ادا طبعت burstTime فال arrivalTime الخاصة بها ستكون مختلفة

استعمل تلك الدالة التي وضعت

#12
the inventor habib كتب:

السلام عليكم

أخي لمادا فعل هكدا

cout << Selectsort(burstTime, processNumber) << endl;

يكفي أن تستدعي الدالة هكدا فقط

Selectsort(burstTime, processNumber)

جربها.

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

اقتباس
+ادا استعملت دالة الأخ حمزة فان ادا طبعت burstTime فال arrivalTime الخاصة بها ستكون مختلفة

استعمل تلك الدالة التي وضعت

لم افهمك هل تقصد استعمل الداله التي وضعتها لي؟

#13

نعم لان ادا استعملت تلك الدلة فالقيم سوف تتغير يعني الرقم الموجود في burtTime[0] سوف يصبح كمتال في burstTime[3]

و لكن arrivalTime[0] دائما يشير الي burtTime[0] ولكن تلك الدالة التي وضعت أنا تقوم بتغيير كلاهما في نفس الوقت

+انها تطبع اخي انضر مادا دخلت ومادا طبعت لي

please enter the number of process: 4
p0:
Burst time: 0
Arrival time: 2
p1:
Burst time: 9
Arrival time: 6
p2:
Burst time: 1
Arrival time: 2
p3:
Burst time: 15
Arrival time: 36
Process Burst   Arrival
p0   	0   	2
p1   	1   	2
p2   	9   	6
p3   	15  	36
0
0
3
4200893

أخي مادا تريد من هده الجمل


int shorter[processNumber];
for(int i=0; i<processNumber; i++){

shortest = burstTime[0];
if(burstTime[i+1] > shortest and burstTime[i+1] < burstTime) shorter = burstTime[i+1];
cout << shorter << endl;
}
		int shortest;

#14

لان هناك بعض الأخطاء

وهدا الخطا الأول هو أن

i<processNumber

وأن

burstTime

موجود لان حجم المصفوفة burstTime هو processNumber

يعني أن أخر خانة به ابتدئا من صفر هي

burstTime[processNumber-1]

ولكن يا أخي أنت وضعت

burstTime[i+1]

و i سوف يصبح في الأخير processNumber-1

وادا أضفت 1

مادا سيحدت

سيصبح

burstTime[i+1]==burstTime[processNumber]

وهو غير موجود في المصفوفة

جرب هدا الأخير:

#include <iostream>
using namespace std;
int sort(int burstTime[],int arrivalTime[],int processNumber)
{
    	int c=0,h,d;
    	while(c<processNumber)
    	{
            	h=0;
            	while(h<processNumber)
            	{
                    	if(burstTime[c]<burstTime[h])
                    	{

                            	d=burstTime[c];
                            	burstTime[c]=burstTime[h];
                            	burstTime[h]=d;
                            	d=arrivalTime[c];
                            	arrivalTime[c]=arrivalTime[h];
                            	arrivalTime[h]=d;
                    	}
                    	h++;
            	}
            	c++;
    	}
}
int main(){
int processNumber; // number of process
    	cout <<"please enter the number of process: ";
    	cin >> processNumber;

// int queue[processNumber]; // declare queue
int burstTime[processNumber]; // declare burst time
int arrivalTime[processNumber]; // declare arrival time

    	// input
    	for(int i=0; i<processNumber; i++){
            	cout << "p" << i << ":" << endl;
            	cout <<"Burst time: ";
            	cin >> burstTime;
            	cout <<"Arrival time: ";
            	cin >> arrivalTime;
    	}

    	// output------------------------------------------------
            	sort(burstTime,arrivalTime,processNumber);
    	//////////////----------------------------------------------------
    	cout<<"Process" << "\t" << "Burst" << "\t" << "Arrival" << endl;
    	for(int i=0; i<processNumber; i++){
            	cout <<"p" << i << "\t " << burstTime << "\t " << arrivalTime << endl;
    	}

    	// counting
    	int shortest;
    	int shorter[processNumber];
    	for(int i=0; i<processNumber-1; i++){

            	shortest = burstTime[0];
            	if(burstTime[i+1] > shortest and burstTime[i+1] < burstTime) shorter = burstTime[i+1];
            	cout << shorter << endl;
    	}

    	return 0;
}

تم تعديل هذه المشاركة بواسطة the inventor habib في 22 يوليو 2012 في 15:00

#15

طيب جميل اخي انظر الى الناتج هنا

please enter the number of process: 4
p0:
Burst time: 0
Arrival time: 2
p1:
Burst time: 9
Arrival time: 6
p2:
Burst time: 1
Arrival time: 2
p3:
Burst time: 15
Arrival time: 36
Process Burst   Arrival
p0      0       2
p1      1       2
p2      9       6
p3      15      36
0
0
3
4200893

من المفترض ان يطبع لي

0

1

9

15

وهو ترتيب Burst من الاصغر الى الاكبر هذا ما اريده

#16

أليس هدا ما طبعه:Process Burst

p0 0

p1 1

p2 9

p3 15

#17

طيب ساعطيك مثال افرض ان Burst هو

5

2

3

8

الناتج يصبح حسب الذي اريده

2

3

5

8

فقط :)

#18

حسنا جرب هدا الكود:

#include <iostream>
using namespace std;
int sort(int burstTime[],int arrivalTime[],int processNumber)
{
		int c=0,h,d;
		while(c<processNumber)
		{
        		h=0;
        		while(h<processNumber)
        		{
                		if(burstTime[c]<burstTime[h])
                		{

                        		d=burstTime[c];
                        		burstTime[c]=burstTime[h];
                        		burstTime[h]=d;
                        		d=arrivalTime[c];
                        		arrivalTime[c]=arrivalTime[h];
                        		arrivalTime[h]=d;
                		}
                		h++;
        		}
        		c++;
		}
}
int main(){
int processNumber; // number of process
		cout <<"please enter the number of process: ";
		cin >> processNumber;

// int queue[processNumber]; // declare queue
int burstTime[processNumber]; // declare burst time
int arrivalTime[processNumber]; // declare arrival time

		// input
		for(int i=0; i<processNumber; i++){
        		cout << "p" << i << ":" << endl;
        		cout <<"Burst time: ";
        		cin >> burstTime;
        		cout <<"Arrival time: ";
        		cin >> arrivalTime;
		}

		// output------------------------------------------------
        		sort(burstTime,arrivalTime,processNumber);
		//////////////----------------------------------------------------
		cout<<"Burst"<< endl;
		for(int i=0; i<processNumber; i++){
        		cout << burstTime<< endl;
		}



		return 0;
}
#19

جمييييييييييل جدا حبيبي الله يعطيك العافيه وشكرا للجميع :)

#20

بالتوفيق في الحقيقة ان كان هدا ما أردت فقط فيمكنك الأستغناء عن الكتير تفضل هدا البسيط:

#include <iostream>
using namespace std;
int sort(int burstTime[],int processNumber)
{
		int c=0,h,d;
		while(c<processNumber)
		{
        		h=0;
        		while(h<processNumber)
        		{
                		if(burstTime[c]<burstTime[h])
                		{

                        		d=burstTime[c];
                        		burstTime[c]=burstTime[h];
                        		burstTime[h]=d;
                		}
                		h++;
        		}
        		c++;
		}
}
int main(){
    	int processNumber;
    	cout <<"please enter the number of process: ";
    	cin >> processNumber;
    	int i;
    	int burstTime[processNumber];
    	for(i=0; i<processNumber; i++)
    	{
            	cout << "p" << i << ":";
            	cout <<"Burst time: ";
            	cin >> burstTime;
            	cout <<endl;
    	}
    	sort(burstTime,processNumber);
    	cout<<"Burst"<< endl;
    	for(i=0; i<processNumber; i++)
    	{
        	cout << burstTime<< endl;
    	}
		return 0;
}

تم تعديل هذه المشاركة بواسطة the inventor habib في 22 يوليو 2012 في 15:20

#21

empror9@

لا تنسى ترشيح الإجابات التى أفادتك حتى نضمن ذهاب النقاط إلى مستحقيها.

#22

بارك الله فيك اخي الكريم .. ربي يوفقك دنيا واخره

هلا أحمد الشنقيطي .. ابشر الان ساقوم بالترشيح

#23

مرحبا مره اخرى .. قمت بايجاد كود افضل من الكود الذي كتبته وقمت بالتعديل عليه كثيرا حتى اصبح بالشكل التالي

#include<iostream>
using namespace std;

struct process{
    int processId;
    int burstTime;
	int arrivalTime;
	int arrivedFirst;
};

int main(){
    int numberOfProcesses;

     //number of process
    cout <<"please enter the number of process: ";
    cin >> numberOfProcesses;

    struct process p[numberOfProcesses];
    struct process temp;


     // get burst time , arrival time
     for(int i=0; i<numberOfProcesses; i++){
        p.processId = i;
		cout << "p" << i << ":" << endl;
		cout <<"Burst time: ";
        cin >> p.burstTime;
		cout <<"Arrival Time: ";
		cin >> p.arrivalTime;
      }

	   //display user input
       cout<<"Process" << "\t" << "Burst" << "\t" << "Arrival" << endl;
      for(int i=0;i<numberOfProcesses;i++){
          cout <<"P" << p.processId << "\t" << p.burstTime << "\t" << p.arrivalTime <<endl;
      }


      //sort
      for(int i=0; i<numberOfProcesses; i++){
          for(int j=0; j<numberOfProcesses; j++){
			for(int arrival=1; arrival<numberOfProcesses; arrival++){
			arrivedFirst = p[0].arrivalTime;
				if(p[arrival].arrivalTime<arrivedFirst){
					arrivedFirst = p[arrival].arrivalTime;

				}
			}
			  // select the arrived proccess first
			  if(arrivedFirst){

			  }
			  // select the smallest burst time
              if(p[j].burstTime>p.burstTime){
                  temp = p;
                  p = p[j] ;
                  p[j] = temp;
              }
			  // if same value with burst time, select the arrived first
			  if(p[j].burstTime==p.burstTime){
				  if(p[j].arrivalTime>p.arrivalTime){
				  temp = p;
                  p = p[j] ;
                  p[j] = temp;
				  }
			  }
          }
      }

     // after computing

	  //display
	  cout << endl;
       cout<<"Process" << "\t" << "Burst" << "\t" << "Arrival" << endl;
      for(int i=0;i<numberOfProcesses;i++){
          cout <<"P" << p.processId << "\t" << p.burstTime << "\t" << p.arrivalTime <<endl;
      }

      return 0;
	  }

هنا يفترض ان يكون التعديل

// select the arrived proccess first
                          if(arrivedFirst){


   }

الان اريد اخذ البروسيس يصل الى الجدول بمعنى ان المتغير arrivedFirst يقوم بجلب اول بروسيس وصل .. اريد ان اخذه بالاول ومن ثم اعرض باقي النتائج

حاولت كثير ماعرفت اسويه .. هل من افكار؟

تم تعديل هذه المشاركة بواسطة empror9 في 23 يوليو 2012 في 01:39

#24

غيرت الكود بعض الشئ .. الان يطبع اصغر arrival time للجميع .. انا اريده فقط ان يطبع اصغر arrival time لـ بروسيس واحد بعدها يطبع بقية البروسسات على حسب الاقل في burst time

هذا كودي بعد التعديل

#include<iostream>
using namespace std;

struct process{
    int processId;
    int burstTime;
	int arrivalTime;
	// int arrivedFirst;
};

int main(){
    int numberOfProcesses;

     //number of process
    cout <<"please enter the number of process: ";
    cin >> numberOfProcesses;

    struct process p[numberOfProcesses];
    struct process temp;


     // get burst time , arrival time
     for(int i=0; i<numberOfProcesses; i++){
        p.processId = i;
		cout << "p" << i << ":" << endl;
		cout <<"Burst time: ";
        cin >> p.burstTime;
		cout <<"Arrival Time: ";
		cin >> p.arrivalTime;
      }

	   //display user input
       cout<<"Process" << "\t" << "Burst" << "\t" << "Arrival" << endl;
      for(int i=0;i<numberOfProcesses;i++){
          cout <<"P" << p.processId << "\t" << p.burstTime << "\t" << p.arrivalTime <<endl;
      }


      //sort
      for(int i=0; i<numberOfProcesses; i++){
          for(int j=0; j<numberOfProcesses; j++){
			for(int arrival=1; arrival<numberOfProcesses; arrival++){
			p.arrivalTime = p[0].arrivalTime;
				if(p[arrival].arrivalTime<p[j].arrivalTime){
					p[0].arrivalTime = p[arrival].arrivalTime;

				}
			}

			  // select the smallest burst time
              if(p[j].burstTime>p.burstTime){
                  temp = p;
                  p = p[j] ;
                  p[j] = temp;
              }
			  // if same value with burst time, select the arrived first
			  if(p[j].burstTime==p.burstTime){
				  if(p[j].arrivalTime>p.arrivalTime){
				  temp = p;
                  p = p[j] ;
                  p[j] = temp;
				  }
			  }
          }
      }

     // after computing

	  //display
	  cout << endl;
       cout<<"Process" << "\t" << "Burst" << "\t" << "Arrival" << endl;
      for(int i=0;i<numberOfProcesses;i++){

          cout <<"P" << p.processId << "\t" << p.burstTime << "\t" << p.arrivalTime <<endl;
      }

      return 0;
	  }
#25

هل من مساعده؟

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