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

كيفية عرض ارقام عشوائية غير مكرره ياستخدام السي

بدأه alkaser-only في 30 مارس 2008 · 3 رد · 849 مشاهدة · في الأسئلة المجابة
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

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

الرجاء المساعده بجعل البرنامج ينشئ ارقام غير مكرره

#include <stdio.h>
#include <stdlib.h>

#define size 20

void sort(int []);					 //sorting function prototype

main()
{
	int m, i, save[size], unsorted[size], sorted[size], numbers, count=1;   //variables declaration

	while(count!=0)

	{

	printf("%7s %14s\n\n","RANDOM","SORTED");

	for (i=1; i<=size; i++)  
	{
		numbers=1+rand()%50;		//random numbers generation (1-50), 1 and 50 are not included

		numbers=unsorted;		//storing generated numbers in an array

		unsorted=save;		 

	}

	sort(unsorted);  // calling function to sort the array


	for (i=1; i<=size; i++)				
	{
		for (m=1;m<=size;m++)
		{

		if (unsorted=unsorted[i+m])	//cheking  repeated numbers in  array

			unsorted=1+rand()%50;		//regenerate  repeated numbers (0-50)
		}
		sorted=unsorted;
	}

	sort(sorted);	//sorting numbers in ascending order

	for (i=1;i<=size;i++)
	{

		printf("%5d %14d\n",unsorted,sorted); 
	}





	printf("To continue press 1\nto exit press 0\n");
	scanf("%d",&count);

	}

}




//sorting function definition

void sort(int list[])
{
	int  pivot, checker, temp;

	for (pivot=0; pivot<=size; pivot++)
	{
		for (checker=pivot+1; checker<=size; checker++)
		{
			if (list[pivot]>list[checker]) 
			{
				// swap the elements //
				temp=list[pivot];

				list[pivot]=list[checker];

				list[checker]=temp;
			}
		}
	}

}
#2

السلام عليكم ,,

اقتباس
الرجاء المساعده بجعل البرنامج ينشئ ارقام غير مكرره

في الواقع هذا غير ممكن :resentful:

الدوال التي نستعملها تقوم بإنتاج أعداد ضمن طريقة رياضية, و هذه الأعداد تبدأ بالتكرار بعد إنتاج عدد معين من هذه الأرقام, و هذا ما يسمى بدورة أو Period الدالة.

على العموم من أفضل منتجات الأعداد العشوائية, ما يسمى بـ Mersenne Twister,

أفضل مقال أعرفه حول هذه الطريقة :

A Mersenne Twister Class

يحتوي على صنف class تمت كتابته لإنتاج أعداد عشوائية ذات دورة طويلة جداً,

إضافة إلى سهولة استخدامه,

بالمناسبة استخدمت الصنف المذكور في برنامجي على الرابط التالي :

حمل برنامج التشفير بلغة ++c

في الحقيقة مشكلتك يمكن حلها بإضافة السطر التالي في بداية البرنامج :

srand( time_t(null) );

لأن الـ seed يتم تهيئتها بشكل افتراضي اذا لم يقم المبرمج بذلك حسب اعتقادي,

و لكن ذكرت الكلام الذي في الأعلى من باب الفائدة لمن يريد منتج أعداد عشوائية احترافي :)

#3

كما ذكر خالد ، نحن لا نستطيع بالتنبؤ عن الرقم القادم ، وقد يحتمل التكرار أو لا . لذلك يجب التحايل قليلا :)

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

كنت كتبت برنامج بهذا الشكل ، لكن لا أدري أين هو الأن ...

حل أفضل - ملاحظه لست من كتب الكود - ولكنه بسيط :) :

#include <stdio.h>
#include <stdlib.h>
#include <time.h>

#define ARRAY_SIZE 64

int main()
{   
	/*  Declarations  */ 
	int i, temp, array[ARRAY_SIZE], array_check[ARRAY_SIZE];

	/*  Seed random generator */
	srand(time(NULL));  

	/*  Init check array  */
	for(i = 0; i < ARRAY_SIZE; ++i) 
		array_check = 0;	 

	/*  Fill array with random values */ 
	for(i = 0; i < ARRAY_SIZE; ++i)
	{	   
		do
			temp = rand() % ARRAY_SIZE; 
		while (array_check[temp] != 0);  

		array_check[temp] = 1; 
		array = temp;	
	}	

	/*  Output result */ 
	for(i = 0; i < ARRAY_SIZE; ++i)
		printf("%2d. %2d\n", i, array); 

	/*  Exit succes   */
	return 0;
}

http://informatic-ar.com منصة تعليمية عربية في علوم الحاسب والبرمجة

https://moalfat.com  للكتب الالكترونية والكورسات التعليمية

Everything we see now is just an engineering solution based on old science

#4

اهلين اخوي

ابسط طريقة هي ان تحدد عدد الارقام المرادة وتنشأ مصفوفة بعدد هذه الارقام , بعد ذلك تخرج الرقم العشوائي الاول ثم تخزنه في اول عنصر , بعدها كل رقم عشوائي جديد تختبره هل هذا الرقم موجود بالمصفوفة او لا , اذا كان موجود نخرج رقم آخر واذا لم يكن موجود نسجله , ....إلخ

ستتكون لديك مصفوفة من الارقام غير المكررة

ملاحظة : تستخدم هذه الطريقة بالاختبارات الالكترونية للحصول على ارقام عشوائية للأسألة .

تحياتي

llback.jpg

اشهد ان لا إله إلا الله وان محمدا ً رسول الله

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