1. Заголовок темы должен быть информативным. В противном случае тема удаляется ... 2. Все тексты программ должны помещаться в теги [code=pas] ... [/code], либо быть опубликованы на нашем PasteBin в режиме вечного хранения. 3. Прежде чем задавать вопрос, см. "FAQ", если там не нашли ответа, воспользуйтесь ПОИСКОМ, возможно такую задачу уже решали! 4. Не предлагайте свои решения на других языках, кроме Паскаля (исключение - только с согласия модератора). 5. НЕ используйте форум для личного общения, все что не относится к обсуждению темы - на PM! 6. Одна тема - один вопрос (задача) 7.Проверяйте программы перед тем, как разместить их на форуме!!! 8.Спрашивайте и отвечайте четко и по существу!!!
Решалка кубических уравнений, Задача-то детская, но я не понимаю что не так. Помогите, вразумите.
Программа для вычисления корней кубического уравнения:
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.
Заранее спасибо, за потраченное на мой вопрос время.
Ну полный перебор это конешно мощно.А теперь подумаем, что же делает ваша программа....Во первых,если она и найдет ,то она найдет только целые корни,это связано с тем что у вас цикл по х,и х принимает только целочисленные значения, даже для квадратного уравнения это ооочень малый процент от всех возможных решений,но дело ваше. Теперь почему ваша программа не работает.
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 целых корня я не смог. Мой вам совет,хотите сделать нормальную программу,возьмите один из методов и тут вам помогут его реализовать,если вы действительно хотите решить эту задачу.
- Лизхен интерсесуют ТОЛЬКО целые решения (что, вообще-то, желательно было бы пояснить в условии, а не паззлить всех и не заставлять высмативать намеки в коде), так что метод вполне себе ничего.. )) Далее, тип LongInt действительно переполнится (я только не понял, почему условие якобы выполнится всегда), но тип comp может стправиться с задачей (при не очень больших коэффициентах), так что я советую применять его..
--------------------
я - ветер, я северный холодный ветер я час расставанья, я год возвращенья домой
Lapp,Чесно....Я не знаю почему условия срабатывает,но когда я запустил ее исходную программу,убрав все некомпилирующиеся моменты,я увидел следующее.введя обычное уравнение (х-1)^3 я увидел в интервале от -1000000 до 1000000 порядка 977 решений..... Про тип comp я пока что ничего не знал. Насчет очистки экрана,я лишь сделал так,чтобы оно работало, а уж использовать ли ее или нет,это не мое решение.
(я только не понял, почему условие якобы выполнится всегда)
Не всегда, но гораздо чаще, чем оно должно выполняться в действительности. Уже при -999423 оно выполняется в первый раз (усечение результата при переполнении творит чудеса. Опять же, почему топикстартер не включает хотя бы контроль целочисленного переполнения в настройках - непонятно, получить аварийный вылет в данном случае намного лучше, чем результат, который заведомо не может быть верным)
Большое спасибо. Да программа ищет только целые корни, но лишь потому что я действительно не знаю, как бытьь и писать иначе. В Паскале я ноль, но пытаюсь понять и разобраться.
Дело не в паскале,для начала нужно найти методы для полноценного решения кубического уравнения,а потом попытаться их реализовать.Например Формула Кардано Согласисть, ничего сложного нет, сначала вычисляешь 2 величины,через них находишь третью,дальше смотри условие, больше нюля,меньше или равно,ну или конкретно одно условие, например, тебе нужны только вещественные корни тогда Q=0, а остальные вообще не рассматриваешь.