Помощь - Поиск - Пользователи - Календарь
Полная версия: деление двух многочленов
Форум «Всё о Паскале» > Pascal, Object Pascal > Задачи
Bard
Нам наш учитель вчера задал такую задачу... unsure.gif
Вводяться коэффиценты 2 многочленов и требуеться разделить их друг на друга
и вывести коэффиценты получившегося многочлена...
помогите составить кратчайший алгоритм... mega_chok.gif
Mind
Вот мой вариант деления многочленов столбиком.
program Vremya_09_03_07;
uses crt;
var k1,k2,k3:array[1..100] of real;
i,kol1,kol2,j,s1,s2:integer;
begin
clrscr;
repeat
write('Vvedite naivysshuu stepen` delimogo: ');
readln(kol1);
until (kol1 > 0) and (kol1 <= 100);
kol1 := kol1 + 1;
repeat
write('Vvedite naivysshuu stepen` delitelya: ');
readln(kol2);
until (kol2 >= 0) and (kol2 <= kol1);
kol2 := kol2 + 1;
writeln('Vvedite koeffichienty delimogo: ');
for i := 1 to kol1 do
read(k1[i]);
writeln('Vvedite koeffichienty delitelya: ');
for i := 1 to kol1 do
if i <= kol1-kol2 then k2[i] := 0 else read(k2[i]);

j := 0;
s1 := 0;
repeat
s2 := 1;
for i := 1 to kol1 do
if k2[i] <> 0 then break else s2 := s2 + 1;
s1 := s1 + 1;
if s2 >= s1 then
begin
j := j + 1;
k3[j] := k1[s1]/k2[s2];
for i := s1 to kol1 do
k1[i] := k1[i] - k2[s2+i-s1]*k3[j];
end;
until s2 < s1;

writeln('Koeffichienty poluchenogo mnogochlena: ');
for i := 1 to s1-1 do
write(k3[i]:4 :2,' ');
writeln;
writeln('Ostatok: ');
for i := s1 to kol1 do
write(k1[i]:4 :2,' ');
readkey;
end.

Протестировал. Вроде работает. Там только небольшой глюк в выводе остатка...
Ну типо несколько нулей написать лишних может... А так нормально.
Главное ответ верный выдаёт. Если найдёшь ошибки сообщи. wink.gif
мисс_граффити
1. Немножко не компилируется...
2. Глюки есть.
Например, если степень делителя больше степени делимого... не дает ввести все коэфф для делителя.
Bard
Цитата(Mind @ 9.03.2007 21:15) *

Вот мой вариант деления многочленов столбиком.
program Vremya_09_03_07;
uses crt;
var k1,k2,k3:array[1..100] of real;
i,kol1,kol2,j,s1,s2:integer;
begin
clrscr;
repeat
write('Vvedite naivysshuu stepen` delimogo: ');
readln(kol1);
until (kol1 > 0) and (kol1 <= 100);
kol1 := kol1 + 1;
repeat
write('Vvedite naivysshuu stepen` delitelya: ');
readln(kol2);
until (kol2 >= 0) and (kol2 <= kol1);
kol2 := kol2 + 1;
writeln('Vvedite koeffichienty delimogo: ');
for i := 1 to kol1 do
read(k1[i]);
writeln('Vvedite koeffichienty delitelya: ');
for i := 1 to kol1 do
if i <= kol1-kol2 then k2[i] := 0 else read(k2[i]);

j := 0;
s1 := 0;
repeat
s2 := 1;
for i := 1 to kol1 do
if k2[i] <> 0 then break else s2 := s2 + 1;
s1 := s1 + 1;
if s2 >= s1 then
begin
j := j + 1;
k3[j] := k1[s1]/k2[s2];
for i := s1 to kol1 do
k1[i] := k1[i] - k2[s2+i-s1]*k3[j];
end;
until s2 < s1;

writeln('Koeffichienty poluchenogo mnogochlena: ');
for i := 1 to s1-1 do
write(k3[i]4.gif2,' ');
writeln;
writeln('Ostatok: ');
for i := s1 to kol1 do
write(k1[i]4.gif2,' ');
readkey;
end.

Протестировал. Вроде работает. Там только небольшой глюк в выводе остатка...
Ну типо несколько нулей написать лишних может... А так нормально.
Главное ответ верный выдаёт. Если найдёшь ошибки сообщи. wink.gif

Bolshoe spasibo good.gif ...da qlyuk yest' no toje ispravim yes2.gif
Mind
Цитата
1. Немножко не компилируется...

Ну вообще программа может только либо компилиться, либо нет. Немножко - это реальный прикол! lol.gif Не в обиду...
Цитата
2. Глюки есть.
Например, если степень делителя больше степени делимого... не дает ввести все коэфф для делителя.
Я не рассматривал этот вариант в своей задаче.
Это каким таким образом степень делителя может быть больше степени делимого елси я поставил на это ограничение:
Код

repeat
write('Vvedite naivysshuu stepen` delitelya: ');
readln(kol2);
until (kol2 >= 0) and [b](kol2 <= kol1) [/b];

Вот то что жирным посмотри.

З.Ы. Чё в коде жирным выделять нельзя что ли? Я вот имел ввиду вот это: kol2 <= kol1
Bard
Спасибо огромное...я пожправил некоторые пробелы в проге(их было не так уж и много)... good.gif
Mind
Цитата
Спасибо огромное...я пожправил некоторые пробелы в проге(их было не так уж и много)...

Да не за что! wink.gif Мне самому было интересно эту программу сделать, чтобы проверять правильность своего деления многочленов... А какие там ещё были проблемы кроме как вывод остатка парил чуток? Просто самому интересно... smile.gif
volvo
Цитата
чтобы проверять правильность своего деления многочленов
Для этого надо программу тестировать САМОМУ, а не давать ее как решение для того, чтобы ее тестировали другие...
мисс_граффити
Цитата
Ну вообще программа может только либо компилиться, либо нет. Немножко - это реальный прикол!

Спасибо за пояснение. Я даже не догадывалась!
Hint: вообще-то, это цитата была.
Цитата
Это каким таким образом степень делителя может быть больше степени делимого елси я поставил на это ограничение

1. А с какой стати ты отбрасываешь этот случай? Что, правильные дроби не имеют права на существование?
2. Пользователя хоть как-то предупредить - не судьба? Откуда он должен знать, что его вариант ввода степени не прошел? Начинает вводить коэффициенты.... Программа не ругается, все принимает...

volvo, компания Майкрософт тоже так любит делать smile.gif "Ищите, пользователи, глюки... Сообщайте в суппорт... А мы сервиспаков наделаем..."
Mind
Цитата
Для этого надо программу тестировать САМОМУ, а не давать ее как решение для того, чтобы ее тестировали другие...

Я тестировал сам! Всё работает. Я наверно имею право иногда сомневаться... wink.gif
Я просто так на всякий случай написал. Мало ли какие глюки найдутся... Никто ведь не застрахован от ошибок.
Цитата
. Пользователя хоть как-то предупредить - не судьба? Откуда он должен знать, что его вариант ввода степени не прошел? Начинает вводить коэффициенты.... Программа не ругается, все принимает...

Ну, вообще я думаю это уже оформление... Я не углублялся в оформление. Точнее говоря его там нет вообще. yes2.gif В этом плане там ещё много чё подправить можно. Он ведь алгоритм просил. Ну а уж такие мелкие погрешности можно и самому доработать.
Цитата
1. А с какой стати ты отбрасываешь этот случай? Что, правильные дроби не имеют права на существование?

Конечно правильные дроби имеют право на существование. Я просто не рассматривал этот вариант. Судя по ответу он остался доволен. А это уже более расширенный вариант этой задачи. Может этого вообще не надо было ему? (ну это я так уже просто догадываюсь)
Цитата
volvo, компания Майкрософт тоже так любит делать "Ищите, пользователи, глюки... Сообщайте в суппорт... А мы сервиспаков наделаем..."

lol.gif Ох, насмешила. А правда ведь. Но я ни такой на самом деле... Так получилось. Не убивайте меня... wink.gif
Perfez
Буду выступать в виде заключителя smile.gif (или может злоключителя) smile.gif
Вот прекрасно работающий исправлённый вариант кода Mind-a(Спасибо!):

var ar1,ar2,ar3:array[1..100] of real;
i,kol1,kol2,j,k,l:integer;

begin

write('Vvedite naivysshuyu stepen` delimogo: ');
readln(kol1);
inc(kol1);

write('Vvedite naivysshuyu stepen` delitelya: ');
readln(kol2);
inc(kol2);

writeln('Vvedite koeffichienty delimogo: ');
for i:=1 to kol1 do read(ar1);

writeln('Vvedite koeffichienty delitelya: ');
for i:=1 to kol1 do read(ar2[i]);

l:=kol1-kol2;
repeat
inc(k);
if l>=k then
begin
inc(j);
ar3[j]:=ar1[k]/ar2[l];
for i:=k to kol1 do ar1[i]:=ar1[i]-ar2[l+i-k]*ar3[j];
end;
until l<k;

writeln('Koeffichienty poluchenogo mnogochlena: ');
for i:=1 to k-1 do write(ar3[i],' ');

writeln;
writeln('Ostatok: ');
for i:=k to kol1 do write(ar1[i],' ');

end.


Цитата

P.S.:
1.[i]Конец всему делу венец

yes2.gif
2.Лучше поздно чем никогда

volvo
Цитата
Вот прекрасно работающий
Понимаешь, в чем дело... Если меня пытаются уверить в том, что что-то прекрасно и безошибочно работает, у меня... Как бы это сказать помягче... Почему-то возникают сомнения... Смотри:
Цитата
writeln('Vvedite koeffichienty delitelya: ');
for i:=1 to kol1 do read(ar2[i]);
То есть ты даже не соизволил ЭТО протестировать... А если вот тут
Цитата
ar3[j]:=ar1[k]/ar2[l];

в знаменателе будет 0, это что, ТОЖЕ будет считаться "безошибочной работой", или что?

Ну, и закончить хочется вопросом: Как ты думаешь, при делении
6x2 - 8x на 2x , что должно получиться в результате, и что в остатке? А теперь проверь своей программой...
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.