مشاهدة النسخة كاملة : 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 لكل قيمة
ومن ثم بالإكسل تقوم برسم المنحنى ، ونحن طلب من الاستاذ نفس الشيء مع مشكل آخر و كان هذا هو حلُّنا.
والله اعلم.
vBulletin® v3.8.10 Release Candidate 2, Copyright ©2000-2025, TranZ by Almuhajir