المساعد الشخصي الرقمي

مشاهدة النسخة كاملة : lمساعدة مستعجلة من فضلكم في c++


zadiko12
2011-12-18, 08:58
ارجو من السادة الكرام مساعدتي في حل هذا المشكل وساكون ممتن لكم المشكل يقول

ecrir un program c++ qui premet de trier un tableau de type entier par l'une des trois methodes tri par insertion.selection.fusion
-pour inplementer l'analyse de la complexité des trois methodes on veut tracer des courbe qui indiquent la variation de nombre d'operation executé en fonction de la taille du tableau a trier , ecrire la programme c++ qui effectue cette analyse

ارجو منكم الرد في اقرب الاجال

أخ المسلمين
2011-12-18, 14:57
هل تعرف كيفية اجراء ترتيب جدول يدويا بالثلاث طرق التي ذكرتها
insertion.selection.fusion

zadiko12
2011-12-18, 15:30
non je pe pas le faire

أخ المسلمين
2011-12-18, 15:52
حتى انا نسيتها، و لم اتذكر الا طريقة tri par selection

مثلا اذا كان لدينا جدول به مثلا 5 خانات

1 2 3 4 5

نستعمل 2 بوكل

الاولى للانتقال من العنصر الاول الى الخامس
و الثانية للبحث عن اصغر عنصر في الخانات التي هي بعد مؤشر البوكل الاولى، مثلا يدويا :


1 2 3 4 5
5 3 1 9 7

نبدأ بالعنصر الاول و نقارن معه جميع القيم للحصول على القيمة الصغرى
i=1;min=i
j=2
t[j] < t[i] ->min=j

i=1;min=i
j=3
t[j] < t[i] ->min=j


i=1;min=i
j=4
t[j] > t[i


i=1;min=i
j=5
t[j] > t[i



tmp=t[i
t[i=t[min
t[min=tmp



بعد انتهاء بوكل جي، يكون لدينا اصغر عنصر في الخانة الاولى (أي i)

و هكذا من اجل الخانة الثانية و الثالثة ... حتى ما قبل الاخيرة، لانه في الخانة ما قبل الاخيرة يكون لدينا خانتين، اي الاصغر في ماقبل الاخيرة، و الاكبر في الخانة الاخيرة

و البرنامج يكون كالتالي:


#include <iostream>

using namespace std;

int main(int argc,char** argv)
{
int* tab;
int size;

cout << "Entrer la taille du tableau" << endl;
cin >> size;

tab = new int;

for(int i=0;i<size;i++)
{
cout << "Entrer tab[" << i+1 << "] : ";
cin >> tab[i];
}

int min,tmp;
for(int i=0;i<(size-1);i++)
{
min = i;
for(int j=i+1;j<size;j++)
{
if( tab[j] < tab[min] )
min = j;
}
tmp = tab[i];
tab[i] = tab[min];
tab[min] = tmp;
}

cout << "tableau triee est :" << endl;
for(int i=0;i<size;i++)
cout << tab[i] << "\t";
cout << endl;
delete[](tab);
return(0);
}
بالنسبة للجزء الثاني من التمرين حاول القيام به، فهو سهل، اذا لم تستطع ساضعه

[SIZE=5]

zadiko12
2011-12-18, 17:45
انا احتاج الى الجزء الثاني اكثر من الأول ارجوا وصعه بسرعة وبارك الله فيك يا اخي

أخ المسلمين
2011-12-18, 18:08
لا اعرف ما الذي تدرسونه بالضبط

و لكن الحل سهل

اذا قمنا بحساب الكومبليكسنتي يدويا، من اجل هذه الخوارزمية هي (حجم الجدول مربع) n*n

في هذه الحالة اكتب دالة بسيطة بالسي ++

اما اذا كان الطلب حرفيا، اي حساب عدد التنفيذات الحقيقي من دون تقريبات، هذا سهل كذلك، اضف متغير نوع عدد طبيعي n=0، بعد كل تنفيذة في البرنامج السابق اضف له واحد n++، في النهاية، اعرضه بالشاشة
ملاحظة: طبق هذا سوى على الجزء الخاص بالترتيب، لا تضف واحد في حالة قراءة و عرض الجدول

** أم عبد الرحمن **
2011-12-18, 18:33
السلام عليكم ورحمة الله وبركاته
حساب الكوملبكسيتي يكون بطريقتين :
إما نظرية (théorique ) :

وذلك بحساب

l'ordre de grandeur

(c'est le grand O dans le pire des cas )

أو تطبيقية Expérimentale

وذلك بحساب le temps d'execution

ولحساب هذه الأخيرة ( بالسي مثلا ) :
نقوم بالتالي:

#include <time.h>

...........
//par exemple ici tu met le code de la fonction de trie

void main()
{
// ces deux variables , stockent le temps juste au démarrage de l’exécution et juste à la fin de l'execution de la fonction //
clock_t debut, fin;

float TempsExec;
......

// ici par exemple vous voulez faire appel à la fonction de trie

debut =clock();

TrieSelection(...);

fin=clock();

// calcule du temps d'execution


TempsExec=(float)(fin-debut)/(CLOCK_PER_SEC);


}






وبصفة عامة في هذا النوع من التطبيقات ، يطلبون منكم المقارنة بين نوعي الكوملكسيتي .
والله أعلم

zadiko12
2011-12-18, 19:22
نعم ولكن اريد برنامج يسمح برسم منحنى ال>ي يدل على الكومبليكسيتي تاع البرنامج

** أم عبد الرحمن **
2011-12-18, 19:45
السلام عليكم ورحمة الله وبركاته
لا يمكن لبرنامج القيام بذلك مباشرة -على حسب علمي- ، عليك عمل جدول ، فيه مثلا قيم N ، و Temps D’exécution لكل قيمة
ومن ثم بالإكسل تقوم برسم المنحنى ، ونحن طلب من الاستاذ نفس الشيء مع مشكل آخر و كان هذا هو حلُّنا.
والله اعلم.