Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Общие вопросы > Деление полиномов на Си,


Автор: Пётр 28.5.2004, 00:59
Мне это для калькулятора Ти 92 надо,
по этому желательно на Си.
Плз.

Автор: Baa 28.5.2004, 03:02
Замечательно, только я вопроса не вижу.

Автор: Пётр 28.5.2004, 04:08
Вопрос в принципе:
Как с помощью получить результат от деления полиномов и/или остаток от этого деления с помошью языка Си?
(А что, не понятно было? Тогда извиняюсь...)

Автор: mr.DUDA 28.5.2004, 00:14
Встречный вопрос:
- а что подразумевается в данном случае под полиномом ? какая-то структура ? массив, содержащий коэффициенты полинома ? полином какого-то конкретного порядка (или порядок хотя бы ограничен) ?

Автор: dargaard 28.5.2004, 01:50
Код
#include <stdlib.h>
#include <stdio.h>

int p1[]={1,1,1,-7,10};
int p2[]={1,-1,2};

int main() {
       int *ptr1=p1;

       int del;
       int i;
       int s1 = sizeof(p1)/4;
       int s2 = sizeof(p2)/4;
       int *result = malloc(sizeof(int)*(s1));
       int sresult =0;

       while (1) {

               del = (int)(*ptr1 / *p2);
               result[sresult]=del;
               sresult++;
               for (i=0; i<s2; i++) {
                       *(ptr1+i) -= del * p2[i];
               }


               ptr1++;
               s1--;
               if (s1<s2) break;

       }

// resultat budet v result[] massive
// ostatok budet v p1[] massive.
//

       //vivod dati
       printf("Delenie: ");
       for (i=0; i<sresult; i++) {
               if (result[i] >= 0 && i != 0) printf(" + ");
               if (sresult-i-1 !=0) {
                       if (sresult-i-1 != 1) {
                               printf(" %d*x^%d ",result[i],sresult-i-1);
                       } else {
                               printf(" %d*x ",result[i]);
                       }
               } else {
                       printf(" %d ",result[i]);
               }
       }

       printf("\n");
       s1=sizeof(p1)/4;
       printf("Ostatok: ");
       for (i=0; i<s1; i++) {
               if (p1[i]!=0) {
                       if (p1[i]>0) printf(" + ");
                       if (s1-i-1 !=0) {
                               printf(" %d*x^%d",p1[i],s1-i-1);
                       } else {
                               printf(" %d ",p1[i]);
                       }
               }
       }
       printf("\n");

}

testit' dolgo ne bilo vremeni - batarei sadiatsa na noute.
nadeius rabotaet.
--------------------

Подумав, надежнее заменить while (1) { ... if (s1<s2) break; } на while (s1<s2) {...}- на случай если первый полиром меньше
---------------------
Прогнал яsmile.gif while (s1>=s2) {...} имелось в виду.

Автор: Guest 28.5.2004, 02:59
Спасибо!
Не только за идею, как представить плиномы, но и за решение!
Протестую и обязательно напишу..

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)