Компьютерный форум
Правила
Вернуться   Компьютерный форум > Форум программистов > Программирование под Windows > Delphi
Перезагрузить страницу Все целые корни уравнения ax3+bx2+cx+d=0
Ответ
 
Опции темы Опции просмотра
  (#1 (permalink)) Старый
ASD_Ch ASD_Ch вне форума
Member
 
Сообщений: 16
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Регистрация: 07.01.2005
По умолчанию Все целые корни уравнения ax3+bx2+cx+d=0 - 07.01.2005, 02:39

Вводятся целые числа a, b, c, d. Нужна найти все целые корни уравнения ax3+bx2+cx+d=0

Выход.
В первую строку выхода напечатать все целые решения указанного уравнения в порядке возрастания через пробел. Если корней нет, напечатать no roots.

Все как бы написал но найти корни, ни как

Моя писанина
Код:
uses
  SysUtils;
var a,b,c,e,x1,x2,x3,D:integer;
begin
  ReadLn(a,b,c,e);
  D:=0;
   x1:= ?
   X2:= ?
   x3:= ?
  D:=a*(Sqr(x1)*x1)+b*(Sqr(x2))+c*x3+e;
if (D=0) then WriteLn(x1,' ',x2,' ',x3)
         else WriteLn('no roots.');
     ReadLn
end.
Help
Ответить с цитированием
  (#2 (permalink)) Старый
Fuud Fuud вне форума
Member
 
Сообщений: 4,076
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Регистрация: 03.09.2004
По умолчанию 07.01.2005, 03:27

В чем именно проблемы? Что формулу не написать?

Я вижу два способа решить задачу:[list]
1. в лоб - ищем корни по формуле, проверяем какие из них целые, сортируем
2. пользуемся тем, что целые решения, если они есть, являются делителем свободного члена (d). Разлогаем d на множители и поочередно проверяем подстановкой. При небольших d может оказаться быстрей способа 1.[list]

Все вышенаписанное есть в школьном учебнике. Может быть, задавая вопрос Вы имели в виду что-нибудь другое?
Ответить с цитированием
  (#3 (permalink)) Старый
ASD_Ch ASD_Ch вне форума
Member
 
Сообщений: 16
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Регистрация: 07.01.2005
По умолчанию 07.01.2005, 04:34

Цитата:
1. в лоб - ищем корни по формуле, проверяем какие из них целые, сортируем
Fuun не мог бы уточнить, какие формулы?
Ответить с цитированием
  (#4 (permalink)) Старый
Rocky Rocky вне форума
Member
 
Сообщений: 1,405
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Регистрация: 24.10.2004
По умолчанию 07.01.2005, 06:09

Возьмите любой учебник/справочник/методичку по Численным Методам Алгебры. Там этого добра (способов решения уравнений) навалом!
Ответить с цитированием
  (#5 (permalink)) Старый
ASD_Ch ASD_Ch вне форума
Member
 
Сообщений: 16
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Регистрация: 07.01.2005
По умолчанию 07.01.2005, 07:02

Я уже пробывал несколько вариантов но ни как

Например я вожу в формулы
-2 -4 2 4
Выход должен быть:
-2 -1 1
но никак.
Придумать формулы можно к этим корням, но это только для этих чисел и корней.
Ответить с цитированием
Ads.
  (#6 (permalink)) Старый
Fuud Fuud вне форума
Member
 
Сообщений: 4,076
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Регистрация: 03.09.2004
По умолчанию 07.01.2005, 12:57

Мда... Уж коли нет учебника в yandex запрос бы набрал.

На вот, держи статейку:
http://algolist.manual.ru/maths/findroot/cubic.php
Ответить с цитированием
  (#7 (permalink)) Старый
Fuud Fuud вне форума
Member
 
Сообщений: 4,076
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Регистрация: 03.09.2004
По умолчанию 07.01.2005, 13:31

Или вообще как-то так:
Код:
procedure TForm1.ButtonCountClick(Sender: TObject);
var
  x:integer;
  a,b,c,d:double;
  count:integer;
begin
  a:=strtofloat(Form1.Edit1.text);
  b:=strtofloat(Form1.Edit2.text);
  c:=strtofloat(Form1.Edit3.text);
  d:=strtofloat(Form1.Edit4.text);

  count:=0;

  memo1.Clear;

  for   x:=-10000000 to 10000000
    do
      begin
        if a*x*x*x+b*x*x+c*x+d=0
          then
            begin
              inc(count);
              Form1.Memo1.Lines.Add(inttostr(x));
            end;
        if count=3 then exit;

      end;

  if count=0 then Form1.Memo1.Lines.add(' корней нет ');
end;
Подойдет, если препод исходник смотреть не будет...
Ответить с цитированием
  (#8 (permalink)) Старый
ASD_Ch ASD_Ch вне форума
Member
 
Сообщений: 16
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Регистрация: 07.01.2005
По умолчанию 08.01.2005, 18:20

Извини Fuun но мне нужно найти 3 корня и в консоле.
Мож я ошибаюсь, но ты нашол только X.

Я тут еще что то на колякал
Код:
var a,b,c,e,x1,x2,x3,x:integer;
begin ReadLn(a,b,c,e);
for x:=-10000 to 10000
do if (x1=x) and (x2=x) and (x3=x) then 
if a*(Sqr(x1)*x1)+b*(Sqr(x2))+c*x3+e=0 
then WriteLn(x1,' ',x2,' ',x3)
else WriteLn('no roots.');
ReadLn
end.
Но три корня соровно не находит
Вот такоя я чайник
Ответить с цитированием
  (#9 (permalink)) Старый
Fuud Fuud вне форума
Member
 
Сообщений: 4,076
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Регистрация: 03.09.2004
По умолчанию 08.01.2005, 18:57

Цитата:
Originally posted by ASD_Ch
[b]Извини Fuun но мне нужно найти 3 корня и в консоле.
Мож я ошибаюсь, но ты нашол только X.
В мемо выводятся все целые решения из просматриваемого интервала. Замени Form1.memo1.lines.add(inttostr(x)); на WriteLn(x+inttostr(count,' ',x2,' ',x3);

Но это решение в лоб. Посмотри формулы и все будет совсем OK.

Ps Мой ник Fuud а не Fuun. Будьте внимательней!
Ответить с цитированием
  (#10 (permalink)) Старый
ASD_Ch ASD_Ch вне форума
Member
 
Сообщений: 16
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Регистрация: 07.01.2005
По умолчанию 09.01.2005, 05:00

Цитата:
Ps Мой ник Fuud а не Fuun. Будьте внимательней!
Буду внимательней.

А как можно зделать цыкл для 3 корней.
Формула та прежня: a*(Sqr(x1)*x1)+b*(Sqr(x2))+c*x3+e=0
Ответить с цитированием
  (#11 (permalink)) Старый
Fuud Fuud вне форума
Member
 
Сообщений: 4,076
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Регистрация: 03.09.2004
По умолчанию 09.01.2005, 11:33

Я чего-то не понимаю. Мы ищем целые корни кубического уравнения. Причем пытаемся их найти методом перебора.

Начну с определений:
Корень уравнения - число, при подстановке которого вместо аргумента, уравнение обращается в верное равенство.
т.е. в уравнение мы должны подставить один из x'ов, а не все сразу.

В общем, держи прогу:
Код:
program Project2;

{$APPTYPE CONSOLE}

uses
  SysUtils;

var
  x:integer;// переменная для перебора корней
  a,b,c,d:double;// коефициенты
  mas:array[1..3] of string;// массив искомых решений
  count:integer;// количество этих самых решений

label mtk;

begin
  Readln(a,b,c,d); вводим коефициенты

  count:=0;обнуляем счетчик решений

    for   x:=-10000000 to 10000000
    do
      begin
        if a*x*x*x+b*x*x+c*x+d=0 // 
            { если выполняется определение корня уравнения}
          then
            begin
              inc(count);
              mas[count]:=inttostr(x);
            end;

        if count=3 then goto mtk;

      end;

mtk:
  if count=0
    then
      WriteLn('no roots ')
    else
      Writeln(mas[1]+' ',mas[2]+' ',mas[3]+' ');


  ReadLn; // ждем пока пользователь просмотрит решения
end.
А вообще советую разобраться с формулами.
Ответить с цитированием
  (#12 (permalink)) Старый
ASD_Ch ASD_Ch вне форума
Member
 
Сообщений: 16
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Регистрация: 07.01.2005
По умолчанию 11.01.2005, 02:39

Fuud, большое!!! спасибо :!:

Надеюсь теперь правельно написал твой ник
Ответить с цитированием
Ads
  (#13 (permalink)) Старый
ASD_Ch ASD_Ch вне форума
Member
 
Сообщений: 16
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Регистрация: 07.01.2005
По умолчанию 11.01.2005, 05:23

Fuud Снова я
Вел тваю прогу в (Тестирование программ) и выдает такое:

Error in line 8: warning: missing string capacity - assuming 255
Error in line In main program:
Error in line 26: undeclared identifier `Inttostr' (first use in this routine)
Error in line 26: (Each undeclared identifier is reported only once
Error in line 26: for each routine it appears in.)

Твая прога работает правильно, тут спору нет.
Но сирвак с этим тестированьем, не рас меня даставал.
Ответить с цитированием
  (#14 (permalink)) Старый
Fuud Fuud вне форума
Member
 
Сообщений: 4,076
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Регистрация: 03.09.2004
По умолчанию 11.01.2005, 08:27

Что за Тестирование программ? Я думал ты под Delphi пишешь.
Перевожу на русский язык:

Цитата:
Error in line 8: warning: missing string capacity - assuming 255
Дело в том, что тип string это массив элементов char. И компилятор считает, что надо бы указать его размерность. К примеру: mas:array[1..3] of string[9]; - по наибольшему кол-ву знаков в ответе.


Цитата:
Error in line 26: undeclared identifier `Inttostr' (first use in this routine)
Не описана функция Inttostr. Вот так она выглядит:
Код:
function IntToStr(Value: Integer): string;
asm
        PUSH    ESI
        MOV     ESI, ESP
        SUB     ESP, 16
        XOR     ECX, ECX      
        PUSH    EDX           
        XOR     EDX, EDX      
        CALL    CvtInt
        MOV     EDX, ESI
        POP     EAX          
        CALL    System.@LStrFromPCharLen
        ADD     ESP, 16
        POP     ESI
end;
Ответить с цитированием
Ads
Ответ

Опции темы
Опции просмотра

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Trackbacks are Вкл.
Pingbacks are Вкл.
Refbacks are Выкл.


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
корни уравнения 457613786 Prolog 3 15.05.2011 13:59
Написать программу, которая создает файл, содержащий целые числа ILoveMyWorld Lisp 0 30.05.2010 02:27
Задача состоит в том, чтобы выести на экран корни левого и правого поддеревьев Betty Lisp 0 16.05.2010 22:12
Определить вещественные корни уравнений Petrovih Visual C++ 2 31.03.2009 13:56
Найти целые числа по определению от 3 до 5 Razie1 Вопросы начинающих программистов 3 31.10.2008 15:33
Распечать целые чисел в обратном порядке. apus Prolog 4 16.11.2007 03:31
Даны коэффициенты уравнения ах3-bx. Вычислить его корни costa Lisp 0 20.11.2006 20:49
Написать программу, отыскивающую во входном файле целые числа девушка vs программирование Вопросы начинающих программистов 2 07.11.2006 18:49
Преобразование типов данных на целые числа BabyBear Visual C++ 20 18.12.2005 00:25
Комплексные корни полинома Fuud Алгоритмы 7 05.12.2005 17:36
Как создать целые большие числа deniska С/С++ 1 09.11.2005 02:18
Как найти все целые корни уравнения a*x^3+b*x^2+c*x+d=0 MadMan|x Вопросы начинающих программистов 1 10.12.2003 03:08



Powered by vBulletin® Version 3.8.7
Copyright ©2000 - 2017, Jelsoft Enterprises Ltd.
Нardforum.ru - компьютерный форум и программирование, форум программистов