واضح آرشیو وب فارسی:سایت ریسک: amir-shakh12-01-2010, 12:50 PMسلام دوستان من این برنامه رو میخواستم بنویسم و نیاز به راهنمایی دارم (ضرب چند جمله اي ها) برنامه باید بتواند دو چند جمله اي که در فایل به نام in.txt نوشته شده است بخواند و حاصل ضرب آنها را در فایل دیگري (با نام out.txt ) بنویسد. ساختار فایل: فایل ورودي به صورت متنی است و در خط اول چند جمله اي اول و در خط دوم چند جمله اي نوشته شده است. یک نمونه ورودي به صورت زیر است. 2x + 3x^2 + 6x^5 + 4x^3 3x^2 + 5x + 6x^3 توضیح اینکه تعداد جملات هر سطر نامعلوم است، بنابراین "باید" از لیست پیوندي استفاده شود. جملات هر سطر هم ترتیب خاصی ندارد و ممکن است به هر ترتیبی وارد شوند. (چند جمله اي خروجی ترتیب خاصی ندارد ولی مرتب کردن آن شامل نمره اضافه می شود) 1: کسی این برنامه رو نوشته شده نداره یا یه چیزی شبیه این که بشه تغیراتی داد و به این رسید ؟ 2: از دوستان استاد خواهش میکنم در مورد شروع کار بهم کمک کنید تا بنویسم! 3: استادان خسته:31: شما اگه لطف کنید و بنویسید چقدر میشه؟ Arman_BM12-01-2010, 01:20 PMدوست من این که کاری نداره یه همت میخواد بشین بنویس! الان موقع امتحانات و تحویل پروژه هاست! الان وقت همه کمه! من که پروژه خودم رو هنوز ننوشتم. فقظ محض همکاری یه چند تا موضوع رو بهت بگم.: فکر کنم خودت بدونی که اجباری در استفاده از لیست پیوندی نیست. با آرایه هم خیلی راحت میشه حلش کرد. یکبار تا آخرش میری و ماکسیمم درجه رو پیدا میکنی و ضریبش رو تو خونه ی اول و توانش رو تو خونه ی بعدی میزاری. یعنی آرایت دوتا دوتا هست ، اولی ضریب دومی توان. بعد از اینکه این عمل ذخیره رو انجام دادی با حلقه ی تو در تو جملات رو تو یک آرایه ی جدید بنویس. اگرم مجبوری از لیست پیوندی استفاده کنی باز فرق خاصی نمیکنه. قسمت value در لیست پیوندیت رو دوقسمتی بکن یکیش میشه ضریب یکی دیگش توان. موفق و برنامه نویس باشی! یا حق amir-shakh12-01-2010, 01:35 PMسلام آرمان جان من الان ترم 1 کارشناسیم و 2 سال میگذره که C کار نکردم میخواستم ببینم اگه این برنامه رو بنویسی چقدر میشه ؟ مچکرم از راهنماییت amir-shakh12-01-2010, 02:14 PM#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: "); 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(" Enter the highest power of polynomial 2: "); 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(" "); display_poly(&first); printf(" "); display_poly(second); printf(" "); for(i=1;i<=79;i++) printf("-"); poly_multiply(first, second, &mult); printf(" "); 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(""); /* 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-shakh12-01-2010, 02:17 PMموضوع برنامه : ضرب چند جمله ای http://www.2shared.com/file/10618808/b 315b 923/New_Text_Document.html سلام دوباره دوستان این کد همون کد بالاس که مرتب کردم یه اشکالای داره ! میشه برای رفع اشکالش کمک کنید! سایت ما را در گوگل محبوب کنید با کلیک روی دکمه ای که در سمت چپ این منو با عنوان +1 قرار داده شده شما به این سایت مهر تأیید میزنید و به دوستانتان در صفحه جستجوی گوگل دیدن این سایت را پیشنهاد میکنید که این امر خود باعث افزایش رتبه سایت در گوگل میشود
این صفحه را در گوگل محبوب کنید
[ارسال شده از: سایت ریسک]
[مشاهده در: www.ri3k.eu]
[تعداد بازديد از اين مطلب: 2055]