Программа для вычисления корней кубического уравнения:
reshalka kubicheskyh uravneniy; var n,y,z,f:integer; x,k:longint; begin clrscr; writeln('Vvedite koeffichyenty uravneniya chiala:n,y,z,f'); readln(n,y,z,f); k:=0; for x:=-1000000 to 1000000 do if n*x*x*x+y*x*x+z*x+f=0 then begin k:=k+1; writeln('x',k,'=',x); end; if k=0 then write('Chelyh korney net'); readln; end.
Заранее спасибо, за потраченное на мой вопрос время.
Krjuger
31.03.2012 2:43
Ну полный перебор это конешно мощно.А теперь подумаем, что же делает ваша программа....Во первых,если она и найдет ,то она найдет только целые корни,это связано с тем что у вас цикл по х,и х принимает только целочисленные значения, даже для квадратного уравнения это ооочень малый процент от всех возможных решений,но дело ваше. Теперь почему ваша программа не работает.
reshalka kubicheskyh uravneniy;
писать нельзя, кампилятор не поймет,но можно
program reshalka_kubicheskyh_uravneniy;
Пробелы тут тоже оставлять нельзя,а вот подчеркивания нормально. Затем,вы делаете clrscr;, но ведь надо подключить библиотеку crt где собственно реализована эта функция. затем, у вас цикл 1000000,но простите,а вы подумали что вам в условии придется миллион умножить на миллион и еще раз на миллион, да еще и на коэффициент, это число ни в какой тип данных не влезет.... вот и получаеться,что ваше условие срабатывает всегда. В итоге что мы имеем.
program reshalka_kubicheskyh_uravneniy; uses crt; var n,y,z,f:integer; x,k:longint; begin clrscr; writeln('Vvedite koeffichyenty uravneniya chiala:n,y,z,f'); readln(n,y,z,f); k:=0; for x:=-100 to 100 do begin if n*x*x*x+y*x*x+z*x+f=0 then begin k:=k+1; writeln('x',k,'=',x); end; end; if k=0 then write('Chelyh korney net'); readln; end.
Что же способна сделать эта программа, из всех корней она выведет нам только целые,причем если корни одинаковые ,например уравнения вида (x-a)^3,где х=а будут все три корня, то она вывелет лишь 1 корень.Подобрать числа когда будут все 3 целых корня я не смог. Мой вам совет,хотите сделать нормальную программу,возьмите один из методов и тут вам помогут его реализовать,если вы действительно хотите решить эту задачу.
Lapp
31.03.2012 7:58
Крюгер, судя по строке
if k=0 then write('Chelyh korney net');
- Лизхен интерсесуют ТОЛЬКО целые решения (что, вообще-то, желательно было бы пояснить в условии, а не паззлить всех и не заставлять высмативать намеки в коде), так что метод вполне себе ничего.. )) Далее, тип LongInt действительно переполнится (я только не понял, почему условие якобы выполнится всегда), но тип comp может стправиться с задачей (при не очень больших коэффициентах), так что я советую применять его..
TarasBer
31.03.2012 15:41
> Затем,вы делаете clrscr;, но ведь надо подключить библиотеку crt
Лучше убрать вообще нафиг
Krjuger
31.03.2012 18:47
Lapp,Чесно....Я не знаю почему условия срабатывает,но когда я запустил ее исходную программу,убрав все некомпилирующиеся моменты,я увидел следующее.введя обычное уравнение (х-1)^3 я увидел в интервале от -1000000 до 1000000 порядка 977 решений..... Про тип comp я пока что ничего не знал. Насчет очистки экрана,я лишь сделал так,чтобы оно работало, а уж использовать ли ее или нет,это не мое решение.
IUnknown
31.03.2012 23:22
Цитата
(я только не понял, почему условие якобы выполнится всегда)
Не всегда, но гораздо чаще, чем оно должно выполняться в действительности. Уже при -999423 оно выполняется в первый раз (усечение результата при переполнении творит чудеса. Опять же, почему топикстартер не включает хотя бы контроль целочисленного переполнения в настройках - непонятно, получить аварийный вылет в данном случае намного лучше, чем результат, который заведомо не может быть верным)
lizhen
1.04.2012 3:32
Большое спасибо. Да программа ищет только целые корни, но лишь потому что я действительно не знаю, как бытьь и писать иначе. В Паскале я ноль, но пытаюсь понять и разобраться.
Krjuger
1.04.2012 3:50
Дело не в паскале,для начала нужно найти методы для полноценного решения кубического уравнения,а потом попытаться их реализовать.Например Формула Кардано Согласисть, ничего сложного нет, сначала вычисляешь 2 величины,через них находишь третью,дальше смотри условие, больше нюля,меньше или равно,ну или конкретно одно условие, например, тебе нужны только вещественные корни тогда Q=0, а остальные вообще не рассматриваешь.
lizhen
1.04.2012 3:54
Большое спасибо, пошла реализовывать. Если что то не пойму или на чем то застряну обращусь. Спасибо.
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.