انجمنهای فارسی اوبونتو
		کمک و پشتیبانی => برنامهسازی => نویسنده: mostafa4875 در 25 آذر 1393، 05:57 بظ
		
			
			- 
				سلام و عرض ادب به تمامی کاربران عزیز
 
 یک پروژه ای داشتم در مورد ضرب چند جمله ای بصورت لیست پیوندی یکطرفه در C++ که باید فردا تحویل بدم ممنون میشم هر کی این پروژه رو داره دیغ نکنه لینکشو بزاره خیلی ممنون میشم
- 
				تا الان چقدر از اون رو نوشتید؟ و مشکلتون کجای اون هست؟
			
- 
				ممنون از توجهتون 
 
 تونستم از گوگل یه چیزایی پیدا کنم اما باید مفهوم کد رو هم بدونم که متاسفانه به مشکل برخوردم کد زیر رو نگاه کنید
 
 #include<stdio.h>
 #include<stdlib.h>
 #include<conio.h>
 struct node
 {
 float coef;
 int expo;
 struct node *next;
 };
 
 struct node *create(struct node *);
 struct node *insert_s(struct node *,float,int);
 struct node *insert(struct node *,float,int);
 void display(struct node *ptr);
 void poly_add(struct node *,struct node *);
 void poly_mult(struct node *,struct node *);
 int main( )
 {
 struct node *start1=NULL,*start2=NULL;
 
 printf("Enter polynomial 1 :\n");
 start1=create(start1);
 
 printf("Enter polynomial 2 :\n");
 start2=create(start2);
 
 printf("\nPolynomial 1 is :  ");
 display(start1);
 printf("\nPolynomial 2 is :  ");
 display(start2);
 
 poly_add(start1, start2);
 poly_mult(start1, start2);
 getch();
 return 0;
 }
 
 struct node *create(struct node *start)
 {
 int i,n,exp;
 float coeff;
 printf("Enter the number of terms : ");
 scanf("%d",&n);
 for(i=1;i<=n;i++)
 {
 printf("Enter coeficient for term %d : ",i);
 scanf("%f",&coeff);
 printf("Enter exponent for term %d : ",i);
 scanf("%d",&exp);
 start=insert_s(start,coeff,exp);
 }
 return start;
 }
 struct node *insert_s(struct node *start,float co,int ex)
 {
 struct node *ptr,*tmp;
 tmp=(struct node *)malloc(sizeof(struct node));
 tmp->coef=co;
 tmp->expo=ex;
 /*list empty or exp greater than first one */
 if(start==NULL || ex > start->expo)
 {
 tmp->next=start;
 start=tmp;
 }
 else
 {
 ptr=start;
 while(ptr->next!=NULL && ptr->next->expo >= ex)
 ptr=ptr->next;
 tmp->next=ptr->next;
 ptr->next=tmp;
 }
 return start;
 }
 
 struct node *insert(struct node *start,float co,int ex)
 {
 struct node *ptr,*tmp;
 tmp=(struct node *)malloc(sizeof(struct node));
 tmp->coef=co;
 tmp->expo=ex;
 /*If list is empty*/
 if(start==NULL)
 {
 tmp->next=start;
 start=tmp;
 }
 else    /*Insert at the end of the list*/
 {
 ptr=start;
 while(ptr->next!=NULL)
 ptr=ptr->next;
 tmp->next=ptr->next;
 ptr->next=tmp;
 }
 return start;
 }
 
 void display(struct node *ptr)
 {
 if(ptr==NULL)
 {
 printf("\nZero polynomial\n");
 return;
 }
 printf("\n");
 while(ptr!=NULL)
 {
 printf("(%.1fx^%d)", ptr->coef,ptr->expo);
 ptr=ptr->next;
 if(ptr!=NULL)
 printf(" + ");
 else
 printf("\n");
 }
 }
 void poly_add(struct node *p1,struct node *p2)
 {
 struct node *start3;
 start3=NULL;
 
 while(p1!=NULL && p2!=NULL)
 {
 if(p1->expo > p2->expo)
 {
 start3=insert(start3,p1->coef,p1->expo);
 p1=p1->next;
 }
 else if(p2->expo > p1->expo)
 {
 start3=insert(start3,p2->coef,p2->expo);
 p2=p2->next;
 }
 else if(p1->expo==p2->expo)
 {
 start3=insert(start3,p1->coef+p2->coef,p1->expo);
 p1=p1->next;
 p2=p2->next;
 }
 }
 /*if poly2 has finished and elements left in poly1*/
 while(p1!=NULL)
 {
 start3=insert(start3,p1->coef,p1->expo);
 p1=p1->next;
 }
 /*if poly1 has finished and elements left in poly2*/
 while(p2!=NULL)
 {
 start3=insert(start3,p2->coef,p2->expo);
 p2=p2->next;
 }
 printf("\nAdded polynomial is : ");
 display(start3);
 }
 
 void poly_mult(struct node *p1, struct node *p2)
 {
 struct node *start3;
 struct node *p2_beg = p2;
 start3=NULL;
 if(p1==NULL || p2==NULL)
 {
 printf("\nMultiplied polynomial is zero polynomial\n");
 return;
 }
 
 
 while(p1!=NULL)
 {
 p2=p2_beg;
 while(p2!=NULL)
 {
 start3=insert_s(start3,p1->coef*p2->coef,p1->expo+p2->expo);
 p2=p2->next;
 }
 p1=p1->next;
 }
 printf("\nMultiplied polynomial is : ");
 display(start3);
 }
 
 ممنون میشم مفهوم کد ها رو برام بگین و اینکه آیا کد بالا درست هستش ؟
- 
				مثلا این قسمت چه کاری رو انجام میده : 
 struct node *create(struct node *);
 struct node *insert_s(struct node *,float,int);
 struct node *insert(struct node *,float,int);
 void display(struct node *ptr);
 void poly_add(struct node *,struct node *);
 void poly_mult(struct node *,struct node *);
 
و مفهوم این قسمت چه هستش ؟
 struct node *insert_s(struct node *start,float co,int ex)
 {
 struct node *ptr,*tmp;
 tmp=(struct node *)malloc(sizeof(struct node));
 tmp->coef=co;
 tmp->expo=ex;
 /*list empty or exp greater than first one */
 if(start==NULL || ex > start->expo)
 {
 tmp->next=start;
 start=tmp;
 }
 else
 {
 ptr=start;
 while(ptr->next!=NULL && ptr->next->expo >= ex)
 ptr=ptr->next;
 tmp->next=ptr->next;
 ptr->next=tmp;
 }
 return start;
 }
 خیلی جا مشکل دارم ممنون میشم راهنماییم کنید
- 
				این کد به زبان سی هستش. زبان سی رو بلدید؟
			
- 
				تا حدودی 
 
 و اینکه میشه این کد رو به C++ تبدیل کرد؟
- 
				بله، میشه.
			
- 
				البته میدونم وقتتون با ارزشه اما ممنون میشم زحمتش رو بکشید تبدیلش کنید چون واقعا فردا برای من حیاتیه 
 
 خیلی ممنون
- 
				متاسفم دوست من، این تمرینها یا پروژهها یا تکلیفها برای اینه که خودتون اینکار رو انجام بدید و این موارد رو یاد بگیرید. اگر مشکل خاصی دارید، دقیقا اون رو بگید و سعی میکنم کمکتون کنم.
			
- 
				 ??? ??? ???