amir-shakh
12-01-2010, 12:50
سلام دوستان من این برنامه رو میخواستم بنویسم
و نیاز به راهنمایی دارم
(ضرب چند جمله اي ها)
برنامه باید بتواند دو چند جمله اي که در فایل به نام in.txt نوشته شده است بخواند و حاصل ضرب آنها را در فایل دیگري (با نام out.txt ) بنویسد.
ساختار فایل:
فایل ورودي به صورت متنی است و در خط اول چند جمله اي اول و در خط دوم چند جمله اي نوشته شده
است. یک نمونه ورودي به صورت زیر است.
2x + 3x^2 + 6x^5 + 4x^3
3x^2 + 5x + 6x^3
توضیح اینکه تعداد جملات هر سطر نامعلوم است، بنابراین
"باید" از لیست پیوندي استفاده شود. جملات هر
سطر هم ترتیب خاصی ندارد و ممکن است به هر ترتیبی وارد شوند.
(چند جمله اي خروجی ترتیب خاصی ندارد ولی مرتب کردن آن شامل نمره اضافه می شود)
1: کسی این برنامه رو نوشته شده نداره یا یه چیزی شبیه این که بشه تغیراتی داد و به این رسید ؟
2: از دوستان استاد خواهش میکنم در مورد شروع کار بهم کمک کنید تا بنویسم!
3: استادان خسته:31: شما اگه لطف کنید و بنویسید چقدر میشه؟
Arman_BM
12-01-2010, 13:20
دوست من این که کاری نداره یه همت میخواد بشین بنویس!
الان موقع امتحانات و تحویل پروژه هاست! الان وقت همه کمه!
من که پروژه خودم رو هنوز ننوشتم.
فقظ محض همکاری یه چند تا موضوع رو بهت بگم.:
فکر کنم خودت بدونی که اجباری در استفاده از لیست پیوندی نیست. با آرایه هم خیلی راحت میشه حلش کرد.
یکبار تا آخرش میری و ماکسیمم درجه رو پیدا میکنی و ضریبش رو تو خونه ی اول و توانش رو تو خونه ی بعدی میزاری.
یعنی آرایت دوتا دوتا هست ، اولی ضریب دومی توان.
بعد از اینکه این عمل ذخیره رو انجام دادی با حلقه ی تو در تو جملات رو تو یک آرایه ی جدید بنویس.
اگرم مجبوری از لیست پیوندی استفاده کنی باز فرق خاصی نمیکنه. قسمت value در لیست پیوندیت رو دوقسمتی بکن یکیش میشه ضریب یکی دیگش توان.
موفق و برنامه نویس باشی!
یا حق
amir-shakh
12-01-2010, 13:35
سلام آرمان جان
من الان ترم 1 کارشناسیم
و 2 سال میگذره که C کار نکردم میخواستم ببینم اگه این برنامه رو بنویسی چقدر میشه ؟
مچکرم از راهنماییت
amir-shakh
12-01-2010, 14:14
#include<stdio.h>
#include<malloc.h>
struct polynode
{
float coeff;
int exp;
struct polynode *link;
};
void poly_append(struct polynode **,float,int);
void display_poly(struct polynode *);
void poly_multiply(struct polynode *, struct polynode *, struct polynode **);
void padd(float, int, struct polynode **);
main()
{
struct polynode *first, *second, *mult;
int i,coeff,exp,high;
first = second = mult = NULL;
printf("Enter the highest power of polynomial 1: \n");
scanf("%d",&high);
for(i=high;i>0;i--)
{
printf("Enter value for coeff for X^%d : ",i);
scanf("%d",&coeff);
poly_append(&first, coeff,i);
}
printf("\nEnter the highest power of polynomial 2: \n");
scanf("%d",&high);
for(i=high;i>0;i--)
{
printf("Enter value for coeff for X^%d : ",i);
scanf("%d",&coeff);
poly_append(&second, coeff,i);
}
printf("\n\n");
display_poly(&first);
printf("\n");
display_poly(second);
printf("\n");
for(i=1;i<=79;i++)
printf("-");
poly_multiply(first, second, &mult);
printf("\n");
display_poly(mult);
}
/* adds a term to a polynomial */
poly_append(struct polynode **q, float x, int y)
{
struct polynode *temp;
temp = *q;
/* create a new node if the list is empty */
if(*q == NULL)
{
*q = malloc(sizeof(struct polynode));
temp = *q;
}
else
{
/* traverse the entire linked list */
while(temp -> link != NULL)
temp = temp -> link;
/* create new nodes at intermediate stages */
temp -> link = malloc ( sizeof ( struct polynode ) ) ;
temp = temp -> link;
}
/* assign coefficient and exponent */
temp -> coeff = x;
temp -> exp = y;
temp -> link = NULL;
}
/* displays the contents of linked list representing a polynomial */
display_poly(struct polynode *q)
{
/* traverse till the end of the linked list */
while(q != NULL)
{
printf("%.1f x^%d : ", q -> coeff, q -> exp);
q = q -> link;
}
printf("\b\b\b"); /* erases the last colon( */
}
/* multiplies the two polynomials */
poly_multiply(struct polynode *x, struct polynode *y, struct polynode **m)
{
struct polynode *y1;
float coeff1, exp1;
y1 = y; /* point to the starting of the second linked list */
if(x == NULL && y == NULL)
return;
/* if one of the list is empty */
if(x == NULL)
*m = y;
else
{
if(y == NULL)
*m = x;
else /* if both linked lists exist */
{
/* for each term of the first list */
while(x != NULL)
{
/* multiply each term of the second linked list with a
term of the first linked list */
while(y != NULL)
{
coeff1 = x -> coeff * y -> coeff;
exp1 = x -> exp + y -> exp;
y = y -> link;
/* add the new term to the resultant polynomial */
padd(coeff1, exp1, m);
}
y = y1; /* reposition the pointer to the starting of
the second linked list */
x = x -> link; /* go to the next node */
}
}
}
}
/* adds a term to the polynomial in the descending order of the exponent */
padd(float c, int e, struct polynode **s)
{
struct polynode *r, *temp = *s;
/* if list is empty or if the node is to be inserted before the first node */
if(*s == NULL || e > ( *s ) -> exp)
{
*s = r = malloc(sizeof(struct polynode));
( *s ) -> coeff = c;
( *s ) -> exp = e;
( *s ) -> link = temp;
}
else
{
/* traverse the entire linked list to search the position to insert a new node */
while(temp != NULL)
{
if ( temp -> exp == e )
{
temp -> coeff += c;
return;
}
if ( temp -> exp > e && ( temp -> link -> exp < e || temp -> link == NULL ) )
{
r = malloc ( sizeof ( struct polynode ) );
r -> coeff = c;
r -> exp = e;
r -> link = temp -> link;
temp -> link = r;
return;
}
temp = temp -> link; /* go to next node */
}
r -> link = NULL;
temp -> link = r;
}
}
amir-shakh
12-01-2010, 14:17
موضوع برنامه : ضرب چند جمله ای
[ برای مشاهده لینک ، لطفا با نام کاربری خود وارد شوید یا ثبت نام کنید ]
سلام دوباره دوستان این کد همون کد بالاس که مرتب کردم یه اشکالای داره ! میشه برای رفع اشکالش کمک کنید!
vBulletin , Copyright ©2000-2025, Jelsoft Enterprises Ltd.