[ السلام عليكم
اخواني عندي برنامج ابغى اكتبه بلغة c++ باستخدام تركيبة القائمة المرتبطة (linked list)وظيفة هالبرنامج انه ندخل له كثيرة حدود فيطبع لنا كثيرة الحدود مع حذف الحد الذي يساوي صفر يعني مثلا ندخل له
5x^2+6x^3+3x^2+0x^4+7x^1+8x^0
فيطبع لنا على الشاشة
8x^2+6x^3+7x+8
انا فكرت بكتابة الكود لكن عجزت اكمل ..واتمنى انكم تساعدوني وهذي افكاري بحل البرنامج اذا فيه خطأ ياليت توضحونه وياليت تساعدوني باكمال كتابة الكود مع الشرح لو تكرمتوا..
طبعا بالبداية نسوي التركيبة وتحتوي على متغيرين القوة والمعامل وكذلك مؤشر يؤشرالى عقدة مجاورة ثم وبعد الاعلان عن التركيبة نعلن عن مؤشر من نوع التركيبة بحيث يكون هذا المؤشر GLOBAL لاننا سوف نستخدمه في جميع الدوال
1-اول شي نطلب عدد حدود كثيرة الحدود وهذي سهلة (عدد الحدود متغير GLOBALلاننا قد نستخدمه في جميع الدوال)
2-ننشئ قائمة مرتبطة فارغة اي ان المؤشر يشير الى فراغNULL
3 _بعد ذلك نطبع على الشاشه انه تم انشاء القائمة
4_قراءة عنصري كل عقدة في القائمه(القوة والمعامل) ابتداء بالعقدة الاولى عن طريق دوران نهايته عدد حدود كثيرة الحدود ثم نرسل العناصر الى دالة بحيث يكون عمل هذه الدلة تضيف عقدة من الامامالى القائمة المتصلة بما ان كثيرة الحدود هذه عبارة عن جمع فالاضافة من الامام او الخلف او الوسط لا يؤثرINSERT_IN_FRONT
5_بعد ذلك نستدعي دالة تبحث عن اي معامل =0 في كل عقدة اي ان هذه الدلة سوف تتلقى المعامل فاذا وجدت معاملا داخل العقدة =0 فانها سوف تستدعي دالة اخرى تقوم بحذف هذه العقدة التي معاملها =0 لان ذلك يعني ان العقدة كلها =0الدالة التي تبحث عن المعامل صفر ستحتوي على دوران من 0 الى اقل من عدد الحدود وفي كل دورة تختبر المعامل اذا هو يساوي صفر فانها ستستدعي دالة الحذف واذا المعامل لا يساوي صفر فانها ستكمل الدوران بحثا عن معاملا في العقد =0
6- دالة الحذف السابقة تستوجب ان عدد الحلقات سينقص في كل مرة تستدعىn--;
7-دالة تبحث عن قوى متساوية لتجمع معامليهايعني 7س^2+3س^2=10س^2 يعني هالدالة سوف تستقبل قوة وتعمل دوران من 0الى اقل من عدد العقد وفي كل مرة سوف تسأل ما اذا كان قوة العقدة =القوة التي ارسلت اليها ام لا
اذا كان قوة العقدة التي تحت الاختبار =العنصر المرسل اليها فانها تستدعي دالة تضيف عقدة جديدة بحيث ان معامل هذه العقدة =حاصل جمع المعاملين وقوة هذه العقدة =القوة المرسلة اليها ثم نعود لدلة البحث فان كانت دالة البحث قد استدعت دالة الاضافة فانها تستدعي دالة لحذف اي عقدة اسها =الاس المرسل لدالة البحث
8_في كل مرة نستدعي دالة الحذف عدد العقد يقلn--; وفي كل مرة نستدعي دالة الاضافة عدد العقد يزيدn++; وهكذا
9_دالة الطباعة وهي اخر دالة تستدعى في المين وهذه الدالة تطبع كثيرة الحدود بعد حذف اي حد =0 وكذلك بعد جمع معاملات ذات القوة المتشابهة هذه الدالة ستحتووي على دوران من i=0 الى n واذا كان الاس =1 ماراح تطبع الاس واذا كان الاس=0 ماراح تطبع xولا الاس اتمنى انكم فهمتون زين واذا فيه اي نقطة مو واضحةياليت تسألون
هذي بداياتي
#include<iostream.h>
void insert(int ,int );
void creat();
struct node
{
int x,y;
node*next;
};
node *mynode;
void creat()
{mynode=NULL;};
void insert(int a,int b)
{
node*p= new node;
p->x=a;
p->y=b;
p->next =mynode;
mynode=p;
}
void main ()
{
int i ,n,a,b;
cout <<"please enter how many node you will manipulation"<<endl;
cin>>n;
creat();
cout<<"NODE IS CREATED"<<endl;
for (i=0;i<n;i++)
{
cout<<"a=";
cin>>a;
cout <<"b=";
cin>>b;
insert(a,b);
}
}