Помощь - Поиск - Пользователи - Календарь
Полная версия: нахождение рациональных корней многочлена с целым коэффициентом
Форум «Всё о Паскале» > Pascal, Object Pascal > Задачи
krofik
program abc;
var
A1,X1n,A2,X2n,A3,X3n,s:real;
begin
writeln('нахождение рациональных корней многочлена с целым коэффициентом');
writeln('Введите первый коэффициент и степень Х при нем');
read(A1);
read(X1n);
writeln('Введите второй коэффициент и степень Х при нем');
read(A2);
read(X2n);
writeln('Введите третий коэффициент и степень Х при нем');
read(A3);
read(X3n);
writeln('Введите своббодный коэффициент');
read(n);
for del:=1 to n do
if (i mod del)=0 then
write(делители свободного члена,' ');
for del:=1 to A1 do
if (i mod del)=0 then
write(делители первого коэффициента,' ');
Type
Age=n/A1;
while s=0 do


вот что-то написал. сам толком не знаю, что, но охота дописать. но в этом случаи можно сказать"выше головы..".
Взял самую сложную задачу в тетради и решил решить ее через паскаль. и в итоге остановился почти сразу... я сам толком не могу объяснить, что это, но думаю вы разберетесь и поможет. хотя если что то обойдусь.
Lapp
Цитата(krofik @ 27.11.2010 0:25) *
вот что-то написал. сам толком не знаю, что, но охота дописать. но в этом случаи можно сказать"выше головы..".
...
я сам толком не могу объяснить, что это, но думаю вы разберетесь и поможет.

Чуть ли не впервые встречаю тут совершенно адекватное описание сделанного! Это заслуживает по крайней мере ответа )).

Во-первых, krofik, поставь задачу точнее. Какие многочлены? Какой степени? Почему именно рациональные? Какой ты собираешься применить алгоритм?
Все эти вопросы нужно четко себе уяснить ДО начала написания проги. Если есть малейшая неясность - плохо, надо избавиться.
И, пожалуйста, дублируй текст задания в теле темы, даже если он есть в заголовке.

Пока я вижу, что у тебя непонятки с постановкой задачи. Зачем вводить степени? Что ты этим хотел сказать? Попробуй словами промоделировать прогу. Типа так:
1. собираемся решить КВАДРАТНОЕ уравнение;
2. вводим а0, а1, а2;
....
krofik
1. Решаем (я точно не уверен) или находим рациональные корни уравнения 3х(в 4степ)-8х(в 3)-2х²+7x-2=0 (ЛОЛ!)

2. Считываем значения коэффициентов первого, второго, третьего, четвертого и свободного члена (остатка).

3. находи p-делители(для свободного члена) and q-делители( для первого коэффициента)

4. Делим каждый p-делитель на все q-делители т.е. например здесь у нас должны получиться p: -+1 и -+2, а для q: -+1 и-+ 3 т.е получаем -+1/1, -+1/3, -+2/1, -+2/3.

5. Берем из предыдущего действия только целые числа (-+1, -+2). Приравниваем х равным -+1 -+2. (верным ответом будет х=-1)

6. Затем я не знаю, как это описать но попытаюсь нарисовать таблицу
3 -8 -2 7 -2

х=1 3 -5 -7 0 -2 (число для того чтобы быть ответом должно под -2 быть нулем)

х=-1 3 -11 9 -2 0 (х=-1 является ответом т.е. тут остаток равен 0, а нам это и надо)

х=2 3 и считаем...... тут тоже остаток не равен нулю он нам не подходит. Так как мы считаем? - 3 всегда просто сноситься, затем х умножаем на 3 и прибавляем следующие число из верхнего ряд т.е -8 и тд.

х=-2 также не равен нулю... не подходит
(на этом этапе у меня возникла сложность поскольку я не разобрался, как заставить прогу повторять этот цикл умножения и прибавления следующего числа до тех пор пока не получим над -1 ноль.)

7. И потом надо каким то образом получить уравнение (x+1)(3x(в третей)-11x²+9x-2)=0 то есть мы выносим за скобки х+1 и из-за этого степени сдвигаются на одну т.е 4ая становиться 3ей и тд.

а дальше я ещё просто как я понял на уроке не успел пример с доски переписать Т_Т , но думаю тут уже достаточно чтобы подумать.
Krjuger
Решить уравнение,это найти все корни,а они могут быть и комплексными.Еще поясни,тебе надо найти рациональные корни,для именно этого уравнения или для уравнения такого вида?
Цитата
число для того чтобы быть ответом должно под -2 быть нулем)

Оно не должно быть нулем,а будет нулем,потому что -1 является корнем твоего уравнения.Тобиш твое уравнение можно будет сократить на x+1.Что у тебя будет. первые 2 коэффициента будут 3 и -8 ,значит коэффциент первый будет 3 дальше ты смотриш,а что с -8 ты так же отнимаеш 3,получаеш -11,затем ты уже рассматриваеш 3 коэффициент и измененный второй,они у тебя -11 и -2,новый коээфициент многочлена будет
-11 теперь ты отнимаеш от -2 - (-11) получаеш 9,дальше береш новый третий и старый 4 коэффициенты они у тебя 9 и 7,новый коэффициент многочлена 9 ,отнимаеш 7-9,получаеш -2 и наконец то у тебя коэффициенты -2 и -2,новый коэффициент -2 и от последнего отнимаеш -2-(-2) получаеш 0 следовательно преобразование закончено.Мне кажется то,что я написал более наглядно показывает алгоритм который тебе надо выполнять.Далее у тебя уже есть новые,запомненные коэффициенты. 3 -11 9 -2,опять для них находиш корень и понижаеш степерь аналогично описанному выше и в итоге ты придеш к виду ( x....)(x...)(x...)(x....)=0 вот ты нашел все корни.
Lapp
Цитата(krofik @ 27.11.2010 17:32) *
думаю тут уже достаточно чтобы подумать.
Да, тут достаточно.
Задача интересная. Начни с простого. Сделай нормальный ввод начальных данных. Нпример, сначала запрашиваешь максимальную степень (то есть степень уравнения). А потом делаешь ввод коэффициентов по одному на строку, начиная со старшего. Нумеруй их по степеням:

a4x4+a3x3+a2x2+a1x1+a0 = 0

Потом сделай процедурку (или функцию) для разложения числа на множители.

А потом обсудим, как сделать общий цикл (хорошо бы нарисовать блок-схемку, она тут точно была бы не лишней).
krofik
Цитата(Krjuger @ 28.11.2010 17:11) *

Решить уравнение,это найти все корни,а они могут быть и комплексными.Еще поясни,тебе надо найти рациональные корни,для именно этого уравнения или для уравнения такого вида?

Оно не должно быть нулем,а будет нулем,потому что -1 является корнем твоего уравнения.Тобиш твое уравнение можно будет сократить на x+1.Что у тебя будет. первые 2 коэффициента будут 3 и -8 ,значит коэффциент первый будет 3 дальше ты смотриш,а что с -8 ты так же отнимаеш 3,получаеш -11,затем ты уже рассматриваеш 3 коэффициент и измененный второй,они у тебя -11 и -2,новый коээфициент многочлена будет
-11 теперь ты отнимаеш от -2 - (-11) получаеш 9,дальше береш новый третий и старый 4 коэффициенты они у тебя 9 и 7,новый коэффициент многочлена 9 ,отнимаеш 7-9,получаеш -2 и наконец то у тебя коэффициенты -2 и -2,новый коэффициент -2 и от последнего отнимаеш -2-(-2) получаеш 0 следовательно преобразование закончено.Мне кажется то,что я написал более наглядно показывает алгоритм который тебе надо выполнять.Далее у тебя уже есть новые,запомненные коэффициенты. 3 -11 9 -2,опять для них находиш корень и понижаеш степерь аналогично описанному выше и в итоге ты придеш к виду ( x....)(x...)(x...)(x....)=0 вот ты нашел все корни.


Соглашусь что ваша версия объяснения намного белее ясно излагает суть дела.
Я бы первоначально хотел сделать программу которая "просто" будет решать любые уравнения такого типа, но сейчас я понимаю, что для моего уровня я слишком многого хочу. Т.е. как вы спросили для уравнения такого вида, да.

Добавлено через 5 мин.
Цитата(Lapp @ 29.11.2010 2:32) *


Потом сделай процедурку (или функцию) для разложения числа на множители.

А потом обсудим, как сделать общий цикл (хорошо бы нарисовать блок-схемку, она тут точно была бы не лишней).

А вот этот момент я не понял, извиняюсь, но это, как? (блок схема)
Krjuger
Вбей в гугл и там тебе все скажут.Если в кратце,то блок схема,это визуальное изображение алгоритма решения задачи.В блок смеже есть четкие правила о том,как изображаются те или иные действия(циклы,условия,вводимые выводимые данные).Для чего нужна блок схема....Ну когда задачу делает несколько человек и она достаточно обширна,то это помогает каждому пишущему ее понимать что вообще происходит откуда что берется и как что получается.Для новичков ,решающих начальные задачи,блок схема,это некая последовательность элементарных действий которые надо сделать,чтобы получить желаемый результат.Блок схема не имеет никакой привязки к языку программирования,она зависит только от задачи.Короче,чтобы решить задачу,нужно придумать алгоритм,тобиш последовательность действий которые дадут желаемый результат.Первый этам это создание алгоритма.Его можно описать вербально.Затем.надо его как то перенести на блок схему,потому что на ней более наглядно можно увидеть и проработать то,как связываются те или иные части задачи.И наконецто когда у тебя есть блок схема,ты приступиш к реализации ее непосредственно на языке программирования,учитывая все особенности выбранного тобой языка.Когда ты научишся решать более сложные задачи,ты можеш перестать рилосать блок схемы и начнеш держать алгоритм в голове.Но когда задачи станут серьезными.то надобность в блок схемах сново появится,поэтому научитсья их рисовать лишним не будет.
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.