Версия для печати темы

Нажмите сюда для просмотра этой темы в обычном формате

Форум «Всё о Паскале» _ Задачи _ деление двух многочленов

Автор: arximed 6.03.2007 11:52

Нам наш учитель вчера задал такую задачу... unsure.gif
Вводяться коэффиценты 2 многочленов и требуеться разделить их друг на друга
и вывести коэффиценты получившегося многочлена...
помогите составить кратчайший алгоритм... mega_chok.gif

Автор: Mind 10.03.2007 0: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 :2,' ');
writeln;
writeln('Ostatok: ');
for i := s1 to kol1 do
write(k1[i]:4 :2,' ');
readkey;
end.

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

Автор: мисс_граффити 10.03.2007 1:50

1. Немножко не компилируется...
2. Глюки есть.
Например, если степень делителя больше степени делимого... не дает ввести все коэфф для делителя.

Автор: arximed 10.03.2007 16:19

Цитата(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 11.03.2007 3:17

Цитата
1. Немножко не компилируется...

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

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

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

З.Ы. Чё в коде жирным выделять нельзя что ли? Я вот имел ввиду вот это: kol2 <= kol1

Автор: arximed 11.03.2007 3:41

Спасибо огромное...я пожправил некоторые пробелы в проге(их было не так уж и много)... good.gif

Автор: Mind 11.03.2007 3:52

Цитата
Спасибо огромное...я пожправил некоторые пробелы в проге(их было не так уж и много)...

Да не за что! wink.gif Мне самому было интересно эту программу сделать, чтобы проверять правильность своего деления многочленов... А какие там ещё были проблемы кроме как вывод остатка парил чуток? Просто самому интересно... smile.gif

Автор: volvo 11.03.2007 4:02

Цитата
чтобы проверять правильность своего деления многочленов
Для этого надо программу тестировать САМОМУ, а не давать ее как решение для того, чтобы ее тестировали другие...

Автор: мисс_граффити 11.03.2007 4:07

Цитата
Ну вообще программа может только либо компилиться, либо нет. Немножко - это реальный прикол!

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

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

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

Автор: Mind 11.03.2007 4:34

Цитата
Для этого надо программу тестировать САМОМУ, а не давать ее как решение для того, чтобы ее тестировали другие...

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

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

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

lol.gif Ох, насмешила. А правда ведь. Но я ни такой на самом деле... Так получилось. Не убивайте меня... wink.gif

Автор: Perfez 17.03.2007 10:00

Буду выступать в виде заключителя 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 17.03.2007 17:24

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

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

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