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

خوارزمية لإيجاد جميع الإحتمالات من Nعدد

مغلق
بدأه HGB في 7 أبريل 2006 · 6 رد · 15,455 مشاهدة · في الرياضيات والخوارزميات
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

هذا البرنامج كتبته من مدة طويلة جدا6 سنوات تقريبا , لكن تذكرته ووجدته بين الملفات وهو عبارة عن سطرين لكن أجهدني كثيرا وقت تصميمه !

وهو لإيجاد الإحتمالات الكلية الممكنة بتكرار لمجموع N مثلا 34gfgh6334 ونريد أن نوجد جميع تبديلاتها الممكنة بتكرار في لنقل 4 خانات فقط ,,,

سيقوم البرنامج بتوليد الإحتمالات الممكنة ويعرضها على الشاشة ,, الفكرة أنه يمكن الإستفادة من ال tool في برامج أخرى كبرامج توليد كلمات المرور بعشوائية مثلا !

 

[color= #007f00;]#include "stdafx.h"

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

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

 

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

 

[color= #0000ff;]int _tmain[color= #000000;]([color= #0000ff;]int argc, _TCHAR[color= #000000;]* argv[color= #000000;][[color= #000000;]][color= #000000;])

[color= #000000;]{

	[color= #0000ff;]const [color= #0000ff;]int PLACES[color= #000000;]=[color= #ff0000;]5;	[color= #007f00;]//How many places do you want the characters to be placed in, "any number"

    [color= #0000ff;]int result[color= #000000;][PLACES[color= #000000;]];

 

    [color= #0000ff;]unsigned [color= #0000ff;]int POW;

    [color= #0000ff;]const [color= #0000ff;]int char_num[color= #000000;]=[color= #ff0000;]3;	[color= #007f00;]//Define the number of characters

    [color= #0000ff;]char STRING[color= #000000;][char_num[color= #000000;]][color= #000000;]=[color= #000000;]{[color= #A31515;]'1',[color= #A31515;]'2',[color= #A31515;]'3'[color= #000000;]};	[color= #007f00;]//Write down your characters array

 

	cout[color= #000000;]<<[color= #A31515;]"The total number of substrings is : "[color= #000000;]<<pow[color= #000000;]([color= #000000;]([color= #0000ff;]float[color= #000000;])char_num,PLACES[color= #000000;])[color= #000000;]<<endl;

	cout[color= #000000;]<<[color= #A31515;]"Press Enter to continue displaying the strings"[color= #000000;]<<endl;

	cin.[color= #808000;]get[color= #000000;]([color= #000000;]);

 

    [color= #0000ff;]for[color= #000000;]([color= #0000ff;]int q[color= #000000;]=[color= #ff0000;]0;q[color= #000000;]<pow[color= #000000;]([color= #000000;]([color= #0000ff;]float[color= #000000;])char_num,PLACES[color= #000000;]);q[color= #000000;]++[color= #000000;])

    [color= #000000;]{

		[color= #0000ff;]for[color= #000000;]([color= #0000ff;]int w[color= #000000;]=[color= #ff0000;]0;w[color= #000000;]<PLACES;w[color= #000000;]++[color= #000000;])

			[color= #000000;]{

				POW[color= #000000;]=pow[color= #000000;]([color= #000000;]([color= #0000ff;]float[color= #000000;])char_num,w[color= #000000;]);

				cout[color= #000000;]<<STRING[color= #000000;][[color= #000000;]([color= #000000;](q[color= #000000;]-[color= #000000;](q[color= #000000;]%POW[color= #000000;])[color= #000000;])[color= #000000;]/POW[color= #000000;])[color= #000000;]%char_num[color= #000000;]];

			[color= #000000;]}	

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

    [color= #000000;]}

 

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

    cin.[color= #808000;]ignore[color= #000000;]([color= #000000;]);

	cin.[color= #808000;]get[color= #000000;]([color= #000000;]);	[color= #007f00;]//Freeze the screen, you can also use ctrl+F5 in VS compilers

 

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

[color= #000000;]}

// perm.cpp : Defines the entry point for the console application.
//

#include "stdafx.h"
#include <cmath>
#include <iostream>

using namespace std;

int _tmain(int argc, _TCHAR* argv[])
{
	const int PLACES=5;	//How many places do you want the characters to be placed in, "any number"
	int result[PLACES];

	unsigned int POW;
	const int char_num=3;	//Define the number of characters
	char STRING[char_num]={'1','2','3'};	//Write down your characters array

	cout<<"The total number of substrings is : "<<pow((float)char_num,PLACES)<<endl;
	cout<<"Press Enter to continue displaying the strings"<<endl;
	cin.get();

	for(int q=0;q<pow((float)char_num,PLACES);q++)
	{
		for(int w=0;w<PLACES;w++)
			{
				POW=pow((float)char_num,w);
				cout<<STRING[((q-(q%POW))/POW)%char_num];
			}	
		cout<<endl;
	}

	cout<<"FINISH"<<endl;
	cin.ignore();
	cin.get();	//Freeze the screen, you can also use ctrl+F5 in VS compilers

	return 0;
}

banner_60_468.gif

NOTHING IS IMPOSSIBLE

#2

يعطيك العافبة أخ HGP

حلو الواحد يتعب بعدين يخترع شي مثل هذا حلو كتيير

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

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

#3

شكرا يا هيثم

الاخت مينيكات بامكانك ان تاخذي اي مشكلة وتقومي بحلها بدون النظر الى الخورازمية المستخدمة لحلها وبهذا تكونين قد اخترعت واحدة

أضاعوني وأي فتى أضاعـوا * * * ليـوم كــريهـة وســـداد ثغــــر

وخـــــلونـي ومعتـرك المنايـا * * * وقد شـــرعوا أسنــتهم لنحـري

كأني لم أكــــــن فيهـم وسيطـا * * * ولم تك نســبتي في آل عمــرو

أجرر في الجـــوامع كـل يـوم * * * ألا لله مظــــلمتـي وهـصـــري

عسى الملك المجيب لمن دعاه * * * سينجيني فيعلم كيــف شكـري

فأجـــزي بالكرامـة أهـل ودي * * * وأجزي بالضـغينة أهل ضري

منتديات الرياضيات العربية

#4

ممكن اخوي تعطينا البرنامج بصيغه exe

لاني ماعرف اي شي بالبرمجه وهالنوع من البرامج نفسي فيه من زمان

ممكن ترد علينا بسرعه جزاك الله خيرك

مع السلامه

#5

لدي سؤال أحاول أن أجد له حل وعجزت الى أن قرأت هذي المقاله للأخ HGB

سؤالي:

ماهي الخوارزمية أو القانون الرياضي الذي من خلاله أستطيع أن أصل الى الأحتمالات لعدد محدد من الخانات.

مثلا أربع خانات وكل خانه تحتوي على قيمة مثلا أ ب ت ث

كم عدد الاحتمالات لهذه الاربع الخانات؟؟؟؟؟ من لديه معلومه فاليساعدني فضلا لا أمراَ.

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

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

#6

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

أ ب ت 1 2 3

سنأخذ الجزء الاول الحروف مكون من ثلاث خانات = x حيث هنا x=3

و كل خانة لها 28 احتمال (عدد حروف الهجاء) بشرط يسمح بتكرار الحرف في الخانة الثانية و الثالثة فسيكون عدد الاحتمالات لكل خانة = N حيث هنا N= 28

سيكون عدد الاحتمالات الكلية لجزء الحروف P1

P1= N^X أي N أس X و في مثالنا

P1 = 28^3=21952 احتمال ممكن

و نفس الشي لجزء الأرقام حيث X=3 و N= 10

P2 = 10^3=1000 احتمال ممكن

ثم نضرب P1 في P2 و نحصل على عدد لوحات السيارات الممكنة .

21952000 سيارة

أما في حالة لا يسمح بتكرار الحرف

فستضرب عدة أرقام في بعضها عددها يساوي X

و الأرقام هي N , N-1 , N-2 و هكذا

في مثالنا P1= 28*27*26

P1=19656

P2=10*9*8

P2= 720

ثم نضرب P1 في P2 و نحصل على عدد لوحات السيارات الممكنة .

14152320سيارة

و إذا أردت خوارزمية لطباعة جميع أرقام لوحات السيارات (شوية صعبة لأن العدد جدا كبير فطبقها على مثال صغير ) كل مافي الموضوع أنك تحتاج لfor Loop

بعدد الخانات و هنا ستحتاج 3 للحروف و 3 للأرقام و ستضع for loop الأرقام داخل الحروف ممكن أكتب الكود بس للأسف ما عندي سي بلس بلس حالياً لكن سأحاول أكتبه في الوورد .

#7

هلا أخوي وندوزxp

أولا أشكرك على الرد والمشاركة.

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

وأشكرك مرة أخرى على تجاوبك معي.

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

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