Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 04.05.2010, 21:46   #1
@Manya@
Пользователь
 
Регистрация: 22.04.2010
Сообщений: 17
По умолчанию Деление многочленов. Нахождение остатка

Добрый вечер!
Вот собственно код.
Код:
#include <stdio.h>
int *remainder(int *a, int &len1, int *b, int len2);
int *remainder(int *p1, int &s1, int *p2, int s2){
	    int *ptr1=p1;
        int del;
        int i;
        int *result = (int *)malloc(sizeof(int)*(s1));
        int sresult =0;
        while (s1>=s2) {
                del = (int)(*ptr1 / *p2);
                result[sresult]=del;
                sresult++;
                for (i=0; i<s2; i++) {
                        *(ptr1+i) -= del * p2[i];
                }
                ptr1++;
                s1--;
        }
		return p1;
}
int main() {
	int s1=9;
	int s2=8;
	int *pol1 = new int [s1];
	int *pol2=new int [s2];
	for (int s=0; s<s1; s++)
	{
		printf("%d ", s);
		printf("coefficient ");
		scanf("%d", &pol1[s]);
	}
	for (int s=0; s<s2; s++)
	{
		printf("%d ", s);
		printf("coefficient ");
		scanf("%d", &pol2[s]);
	}
	printf("\n");
	printf("-> ");
	 int *rem=new int[s1];
	 rem=remainder(pol1, s1, pol2, s2);
	 for (int s=0; s<s1; s++)
		 printf("%d", rem[s]);
        printf("\n");
}
Многочлены вводятся так: например, 1+x^3 будет 1001. Когда коэффициент делителя нулевой, то естественно возникает ошибка деления на 0. Как бы это исправить?
Спасибо

Последний раз редактировалось @Manya@; 04.05.2010 в 23:27.
@Manya@ вне форума Ответить с цитированием
Старый 05.05.2010, 09:57   #2
Sweta
Форумчанин
 
Регистрация: 22.11.2007
Сообщений: 664
По умолчанию

Проверяйте перед делением знаменатель на "0", и выводите соответствующее сообщение с предложением ввести новые коэффициенты или выходите на конец программы.
Неприятности приходят и уходят, а жизнь продолжается!
Sweta вне форума Ответить с цитированием
Старый 05.05.2010, 11:36   #3
@Manya@
Пользователь
 
Регистрация: 22.04.2010
Сообщений: 17
По умолчанию

Если бы это было возможно, то мне не пришлось бы спрашивать
Проблема в том, что это лишь одна функция большой программы, многочлены получаются в результате некоторых матричных операций, а там так не пройдет) Все равно надо поделить. Да и к тому же, там ошибка при делении ненулевых

Вот так на 0 не ругается, но остаток не верен . Обыкновенное деление столбиком ТЫК
ЗЫ многочлен записывается начиная с младшей степени
Периодически даже правильно работает. Но не всегда
Код:
int *remaind(int *p1, int &len1, int *p2, int len2)
{
	int k= len1-1;
	for (int i=0; i<len1/2; i++)
	{
		int temp = p1[i];
		p1[i] = p1[k-i];
		p1[k-i] = temp;
	}
	k= len2-1;
	for (int i=0; i<len2/2; i++)
	{
		int temp = p2[i];
		p2[i] = p2[k-i];
		p2[k-i] = temp;
	}
	int *ptr1;
	ptr1= p1;
	while (len1>=len2)
	{
		int del = (int)(*ptr1/ *p2);
		for (int i=0; i<len2; i++)
			*(ptr1+i) -= del * p2[i];
		len1--;
		ptr1++;
	}
	p1 = ptr1;
	return p1;
}

Последний раз редактировалось @Manya@; 05.05.2010 в 16:03.
@Manya@ вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Деление многочленов pasha.bob Помощь студентам 1 06.03.2010 17:54
Деление двух многочленов, Паскаль r00tus Помощь студентам 3 04.03.2010 19:53
описание классов многочленов Sined121 Помощь студентам 0 03.12.2009 16:23
Нахождение остатка от деления очень больших чисел Pavel_Ine Общие вопросы C/C++ 6 22.11.2009 20:49
деление многочленов oleiiika Паскаль, Turbo Pascal, PascalABC.NET 1 21.06.2008 16:30