![]() |
1. Пользуйтесь тегами кода. - [code] ... [/code]
2. Точно указывайте язык, название и версию компилятора (интерпретатора).
3. Название темы должно быть информативным.
В описании темы указываем язык!!!
![]() ![]() |
![]() |
Bo2nik |
![]()
Сообщение
#1
|
![]() Новичок ![]() Группа: Пользователи Сообщений: 30 Пол: Мужской Реальное имя: Никита Репутация: ![]() ![]() ![]() |
Умножение многочленов. Проблема такая: не могу задать степень второго многочлена и вообщем то реализовать сам алгоритм перемножения. Может кто-нибудь кинет идею.
Код #include "stdafx.h" #include <stdio.h> struct list { int inf1,inf2; // коэфициенты int st1,st2; // степени struct list *ref1,*ref2; }; main() { FILE *fp,*fp2; struct list *p1,*p2,*beg1 = NULL,*beg2 = NULL,*end1 = NULL,*end2 = NULL; fp = fopen ("spisok.txt","r"); fp2= fopen ("spisok2.txt","r"); printf("MNOGOCHLENI\n"); int i,k; i = -1; // степень первого многочлена k = -1; //степень второго многочлена while ( !feof(fp) && !feof(fp2) ) { p1 = p2 = (struct list*)malloc(sizeof(struct list)); fscanf (fp,"%d",&p1->inf1); fscanf (fp2,"%d",&p2->inf2); i++; //увеличиваем степень первого многочлена, степени идут с головы списка if (feof(fp) && feof(fp2)) { free(p1); free(p2); break; } end1 = p1; end2 = p2; end1->ref1 = end2->ref2 = NULL; while (p1!=NULL) // вывод на экран первого списка { p1->st1 = i; printf("k = %d, st = %d\n",p1->inf1,p1->st1); p1=p1->ref1; } while (p2!=NULL) // вывод на экран второго списка { printf("k2 = %d\n",p2->inf2); p2=p2->ref2; } } } Вот набрасал алгоритм: 1) Начинаем обходить 1ый список 2) Считываем степень 3) Перемножаем элементы 1-го списка с элем. 2-го списка, если степени равны 4) Если степени не равны, то (?????????) - тута че-то не доходит 5) Результат записываем в третий список. Сообщение отредактировано: Bo2nik - 9.04.2008 18:46 |
volvo |
![]()
Сообщение
#2
|
Гость ![]() |
"Разделяй и властвуй"... Не надо в одной структуре хранить данные обоих многочленов, если ты разделишь это на 2 структуры, будет гораздо проще:
#include <stdio.h> А теперь - просто пройди по двум спискам, и перемножь их (причем, если один из списков кончился, то перемножение можно тоже завершить)... Сообщение отредактировано: volvo - 9.04.2008 20:03 |
Bo2nik |
![]()
Сообщение
#3
|
![]() Новичок ![]() Группа: Пользователи Сообщений: 30 Пол: Мужской Реальное имя: Никита Репутация: ![]() ![]() ![]() |
Объясните пожалуйста вот это:
#include <stdio.h> А теперь - просто пройди по двум спискам, и перемножь их (причем, если один из списков кончился, то перемножение можно тоже завершить)... Вот так что-ли(сильно не ругайте, я знаю что этот код никогда не заработает): Код void pr_list(struct list *p, *p2) // это указатель на второй полином) { for(; p; p = p->ref) { p2 = (struct list*)malloc(sizeof(struct list)); p->st = k; p2->st = k2; if k == k2 { p3 = (struct list*)malloc(sizeof(struct list)); // какой-то третий список??? x = p->inf; y = p2->inf; pr = x*y; p3->inf = pr; } } } |
volvo |
![]()
Сообщение
#4
|
Гость ![]() |
Комментарии добавлены выше...
Цитата Вот так что-ли Все проще гораздо, у тебя списки упорядочены по полю st, так что достаточно:void pr_list(struct list *p, struct list *p2) |
Bo2nik |
![]()
Сообщение
#5
|
![]() Новичок ![]() Группа: Пользователи Сообщений: 30 Пол: Мужской Реальное имя: Никита Репутация: ![]() ![]() ![]() |
Всё заработало. Спасибо. Только там еще надо дописать, если в одном многочлене больше коэфициентов чем в другом, прога не будет работать.
Цитата причем, если один из списков кончился, то перемножение можно тоже завершить Вот это как раз мне не надо делать, т.е. завершать умножение(если я правильно понял алгоритм умножения многочленов в линейной алгебре). Сообщение отредактировано: Bo2nik - 9.04.2008 20:39 |
volvo |
![]()
Сообщение
#6
|
Гость ![]() |
Цитата прога не будет работать Опять не разобрался... Будет она работать, просто перемножать будет столько элементов, сколько есть в более коротком многочлене. Для этого и условие:while(p && p2) ... |
Bo2nik |
![]()
Сообщение
#7
|
![]() Новичок ![]() Группа: Пользователи Сообщений: 30 Пол: Мужской Реальное имя: Никита Репутация: ![]() ![]() ![]() |
|
volvo |
![]()
Сообщение
#8
|
Гость ![]() |
Погоди...
Нет, при умножении надо делать по другому... Там надо вложенный цикл... Сейчас покажу. |
volvo |
![]()
Сообщение
#9
|
Гость ![]() |
Вот, посмотри:
#include <stdio.h> |
![]() ![]() |
![]() |
Текстовая версия | 14.08.2025 6:50 |