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

مشكلة مع المصفوفات التي حجمها يقل عن 9000 ؟

مغلق
بدأه SB4 في 6 يونيو 2007 · 2 رد · 439 مشاهدة · في الأسئلة المجابة
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

السلام عليكم

الصراحة حاولت اليوم أكتب برنامج يحسب الوقت من بدايه عملية ترتيب الأرقام وحتى إنتهائها المشكلة أن المصفوفات التي يقل حجمها عن 9000 لا تظهر النتائج ولعل السبب أن عملية الترتيب تكون بالـ millisecond بينما عندما يكون الحجم 9000 يكون الوقت المستغرق ثانية واحده . المطلوب كيف يمكن أن أجعل بالثواني مثلا عندما ادخل حجم المصفوفة 10 يكون الوقت بالثواني وليس بجز من الثانية millisecond . هل استخدم معادلة للتحويل من الـ millisecond إلى الـ second وماهي أم هناك أمر يفي بالغرض ؟

وهذا هو البرنامج

#include "stdafx.h"
#include<iostream>
#include <stdio.h>
#include<cstdlib>
#include <ctime>

using namespace std;


int main()
{
	time_t tStart,tEnd;
	double dif;
	int* aNumber = NULL;
	int iNum;

	cout<<"Please, Enter the size of array : ";
	cin>>iNum;
	aNumber = new int[iNum];


	srand(time(NULL));
	for(int i = 0; i < iNum; i++)
		aNumber = rand() % iNum;

	/*cout<<"=== Before Sort ==="<<endl;
	for(int iB = 0; iB < iNum; iB++)
		cout<<aNumber[iB]<<endl;*/


	time (&tStart);
	for(int iFl = 0; iFl < iNum; iFl++)
	{
		for(int iSl = 0; iSl < (iNum - 1); iSl++)
		{
			if(aNumber[iSl]>aNumber[iSl+1])
			{
				int temp;
				temp = aNumber[iSl];
				aNumber[iSl] = aNumber[iSl+1];
				aNumber[iSl+1] = temp;
			}
		}
	}
	time(&tEnd);


	/*cout<<"=== After Sort ==="<<endl;
	for(int iA = 0; iA < iNum; iA++)
		cout<<aNumber[iA]<<endl;*/


	dif = difftime(tEnd,tStart);
	printf("It took you %.2lf seconds to type your name.\n", dif );

	delete [] aNumber;
	aNumber = NULL;
	while(1);

	return 0;
}

وشكرا مقدما

تم تعديل هذه المشاركة بواسطة SB4 في 6 يونيو 2007 في 00:33

#2

يمكن تقسم الناتج على 10 ؟

هذا برنامج يحسب الوقت ، جربه يمكن يضبط معك حتى ولو جعلت الحجم اقل من 9000 :

#include <iostream>
using std::cout;

#include <sys/timeb.h>

int main()
{	

	struct _timeb st_time_start;
	struct _timeb st_time_end;

	_ftime( &st_time_start );
	// get start time in milliseconds
	long start = st_time_start.millitm;

	//Start


	for ( int i=0; i < 1000; i++ )
		//for ( int j=0; j < 1000; j++ )
			//for ( int k=0; k < 1000; k++ )
				cout <<"Welcome!";

	//End

	_ftime( &st_time_end );
	cout <<"Operation took: "<<( st_time_end.millitm-start )<<" ms\n";

	system("PAUSE");
	return 0;
}
#3

جزاك الله خير أخوي مجلد جديد

انا عدلت على الكود ليكون بالشكل التالي :

#include "stdafx.h"
#include<iostream>
#include <stdio.h>
#include<cstdlib>
#include <ctime>
#include <sys/timeb.h>

using namespace std;
using std::cout;


int main()
{
	//time_t tStart,tEnd;
	//double dif;
	struct _timeb st_time_start;
	struct _timeb st_time_end;
	int* aNumber = NULL;
	int iNum;

	cout<<"Please, Enter the size of array : ";
	cin>>iNum;
	aNumber = new int[iNum];


	srand(time(NULL));
	for(int i = 0; i < iNum; i++)
		aNumber = rand() % iNum;

	/*cout<<"=== Before Sort ==="<<endl;
	for(int iB = 0; iB < iNum; iB++)
		cout<<aNumber[iB]<<endl;*/


	//time (&tStart);
	_ftime( &st_time_start );
	// get start time in milliseconds
	long start = st_time_start.millitm;
	for(int iFl = 0; iFl < iNum; iFl++)
	{
		for(int iSl = 0; iSl < (iNum - 1); iSl++)
		{
			if(aNumber[iSl]>aNumber[iSl+1])
			{
				int temp;
				temp = aNumber[iSl];
				aNumber[iSl] = aNumber[iSl+1];
				aNumber[iSl+1] = temp;
			}
		}
	}
	//time(&tEnd);
	_ftime( &st_time_end );


	/*cout<<"=== After Sort ==="<<endl;
	for(int iA = 0; iA < iNum; iA++)
		cout<<aNumber[iA]<<endl;*/


	//dif = difftime(tEnd,tStart);
	//printf("It took you %.2lf seconds to type your name.\n", dif );
	cout <<"Operation took: "<<( st_time_end.millitm-start )<<" ms\n";


	delete [] aNumber;
	aNumber = NULL;
	system("PAUSE");

	return 0;
}

لكن في مشكلة عندما يكون حجم المصفوفة 1600 أو 1500 يعطيني نفس الرقم حتى عندما يكون الحجم 1400 بعض مرات يعرض الوقت وبعض مرات لا ؟!!! زين في أمر اسمه lock ما أدري هل في احد عنده معلومات عن هذا الامر وطريقة استخدامه ؟؟

هذا الموضوع مغلق.

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

عدد الزوار حالياً

المتواجدون خلال آخر دقيقتين · يتحدّث كل ٣٠ ثانية

—الإجمالي—أعضاء مسجّلون—زوار بدون تسجيل

جارٍ التحقق من المتواجدين…