Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 07.10.2018, 14:19   #1
Necker
Пользователь
 
Регистрация: 23.09.2018
Сообщений: 23
По умолчанию Для квадратного уравнения с целыми коэффициентами определить все различные возможные их значения в диапазоне от -N до N (N задает пользователь)

Для квадратного Уравнение с целыми коефициентами визначити все Различные Возможны их значение в диапазоне от -N до N (N задает пользователь), для которых Корни является мелко-рациональними числами.
program Project2;

Код:
{$APPTYPE CONSOLE}

uses
  SysUtils;

var
  ans: char;
  S: integer;
  N: integer;
  a,b,c: integer;
  d: real;
  x1,x2: real;
  Label Input;
Begin
  Writeln('Program for');
  Writeln('Program by ');
Input:
  Repeat
    Write('Diapazon ');
    Readln(N);
  if (N < 0) then
    begin
      Write('Input count not +');
      Goto Input;
    end
  else
    for a := -N to N do
    begin
      if (a = 0) then continue;
      for b := -N to N do
      for c := -N to N do
    begin
      d:= b*b - 4*a*c;
    if (d = 0) then continue;
    if (d > 0) then
      begin
        x1 := (-b + sqrt(d))/(2*a);
        x2 := (-b - sqrt(d))/(2*a);
      Writeln ('a=',a:3,'b=',b:3,'c=',c:3, ' x1=',x1:4:3,' x2=',x2:4:3);
      S:=S+1;
      end;
    if (d = 0) then
      begin
      x1:=(-b)/(2*a);
      Writeln ('a=',a:3,' b=',b:3,' c=',c:3, ' x1=',x1:4:3);
      S:=S+1;
      end ;
    end ;
  end ;
  Writeln('Korni ', S);
  Write('Continue y/n');
  Readln(ans);
  Until (ans = 'N')or(ans = 'n');
end.
Вывод:Program for
Program by
Diapazon 1
a=-1b=-1c= 0 x1=-1.000 x2=-0.000
a=-1b=-1c= 1 x1=-1.618 x2=0.618
a=-1b= 0c= 1 x1=-1.000 x2=1.000
a=-1b= 1c= 0 x1=-0.000 x2=1.000
a=-1b= 1c= 1 x1=-0.618 x2=1.618
a= 1b=-1c=-1 x1=1.618 x2=-0.618
a= 1b=-1c= 0 x1=1.000 x2=0.000
a= 1b= 0c=-1 x1=1.000 x2=-1.000
a= 1b= 1c=-1 x1=0.618 x2=-1.618
a= 1b= 1c= 0 x1=0.000 x2=-1.000
Korni10
Continue y/n,
Можете объяснить/помочь отредактировать код чтоб, выодило в ответ только дробные числа и без подобных уровней

Пожалуйста, оформляйте Ваш код согласно правилам.

Последний раз редактировалось Вадим Мошев; 07.10.2018 в 14:51.
Necker вне форума Ответить с цитированием
Старый 07.10.2018, 17:02   #2
Necker
Пользователь
 
Регистрация: 23.09.2018
Сообщений: 23
По умолчанию Для квадратного уравнения с целыми коэффициентами определить все различные возможные их значения в диапазоне от -N до N (N задает пользователь)

Для квадратного уравнения с целыми коэффициентами определить все различные возможные их значения в диапазоне от -N до N (N задает пользователь).Для которых Корни является мелко-рациональными числами:conf used:
Мной был написан этот код, но я не понимаю как вывести только дробные числа. Может кто-то объяснить. Заранее спасибо.
Мой код
Код:
program Project2;

{$APPTYPE CONSOLE}

uses
  SysUtils;

var
  ans: char;
  S: int64;
  N: int64;
  a,b,c: integer;
  d: real;
  x1,x2: real;
  Label Input;
Begin
  Writeln('Program for');
  Writeln('Program by ');
Input:
  Repeat
    Write('Diapazon ');
    Readln(N);
  if (N < 0) then
    begin
      Write('Input count not +');
      Goto Input;
    end
  else
    for a := -N to N do
    begin
      if (a = 0) then continue;
      for b := -N to N do
      for c := -N to N do
    begin
      d:= b*b - 4*a*c;
    if (d = 0) then continue;
    if (d > 0) then
      begin
        x1 := (-b + sqrt(d))/(2*a);
        x2 := (-b - sqrt(d))/(2*a);
      Writeln ('a=',a:2,'b=',b:2,'c=',c:2, ' x1=',x1:4:3,' x2=',x2:4:3);
      S:=S+1;
      end;
    if (d = 0) then
      begin
      x1:=(-b)/(2*a);
      Writeln ('a=',a:2,' b=',b:2,' c=',c:2, ' x1=',x1:4:3);
      S:=S+1;
      end ;
    end ;
  end ;
  Writeln('Korni', S);
  Write('Continue y/n');
  Readln(ans);
  Until (ans = 'N')or(ans = 'n');
end.
Пожалуйста, оформляйте Ваш код согласно правилам.
Вивод программы:
Program for
Program by
Diapazon 1
a=-1b=-1c= 0 x1=-1.000 x2=-0.000
a=-1b=-1c= 1 x1=-1.618 x2=0.618
a=-1b= 0c= 1 x1=-1.000 x2=1.000
a=-1b= 1c= 0 x1=-0.000 x2=1.000
a=-1b= 1c= 1 x1=-0.618 x2=1.618
a= 1b=-1c=-1 x1=1.618 x2=-0.618
a= 1b=-1c= 0 x1=1.000 x2=0.000
a= 1b= 0c=-1 x1=1.000 x2=-1.000
a= 1b= 1c=-1 x1=0.618 x2=-1.618
a= 1b= 1c= 0 x1=0.000 x2=-1.000
Korni10
Continue y/n

Последний раз редактировалось Вадим Мошев; 08.10.2018 в 13:26.
Necker вне форума Ответить с цитированием
Старый 07.10.2018, 18:27   #3
ViktorR
Старожил
 
Регистрация: 23.10.2010
Сообщений: 2,304
По умолчанию

Рациональные числа - это числа, которые можно представить в виде отношения целых чисел: M/N, где M и N целое число.
Доказано, что квадратный корень из натурального числа является рациональным числом только в тех случаях, когда под корнем находится число, являющееся полным квадратом некоторого натурального числа.
Поскольку в твоём случае коэффициенты уравнения целые числа, то необходимо, перебирая все значения для a, b и c в заданном диапазоне, искать дискриминант: D = b^2 - 4*a*c и извлекать из него корень sqrt(D). Предварительно следует проверить, что D >=0.
Результат, после извлечения корня приводишь к целому типу, возводишь в квадрат и сравниваешь с выражением под корнем. Если есть равенство, то можно считать, что корень - целое число.
При выводе результата выводишь отдельно числитель и знаменатель.
Например так: a/b.

PS: Мне так же непонятно, что такое за
Цитата:
мелко-рациональными числами
Как-то так, ...
ViktorR вне форума Ответить с цитированием
Старый 08.10.2018, 13:21   #4
Necker
Пользователь
 
Регистрация: 23.09.2018
Сообщений: 23
По умолчанию

Можешь помочь это выразить кодом?
Necker вне форума Ответить с цитированием
Старый 08.10.2018, 13:46   #5
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,238
По умолчанию

Цитата:
Сообщение от Necker Посмотреть сообщение
для которых Корни является мелко-рациональними числами
сдаётся мне, что тут перевод кривой.
как это было в задании? в оригинале?
"дрібно раціональні числа" ?

я думаю, что тут в задании важно только то, что корни являются действительными

нужно сделать цикл по a от -N до N
внутри нужно сделать цикл по b от -N до N
и внутри нужно сделать цикл по с от -N до N
если уравнение имеет дискриминант положительных, значит, есть действительные корни, => коэффициенты являются допустимыми и их надо выдать.

p.s. это мои предположения, может быть, я и заблуждаюсь насчёт того, что требуется в задании.
Serge_Bliznykov вне форума Ответить с цитированием
Старый 08.10.2018, 20:31   #6
ViktorR
Старожил
 
Регистрация: 23.10.2010
Сообщений: 2,304
По умолчанию

Necker
Цитата:
Можешь помочь это выразить кодом?
Нет. Тут уже есть решальщики
Более того, если представленный тобой код написан тобой, то предложенный мной алгоритм тебе реализовать не составит труда.
Serge_Bliznykov
Цитата:
я думаю, что тут в задании важно только то, что корни являются действительными
Действительный - это и, например, sqrt(2), но это иррациональный корень, а нужен вроде как рациональный.
Но это к ТС, ему видней.
Как-то так, ...
ViktorR вне форума Ответить с цитированием
Старый 13.10.2018, 13:07   #7
Necker
Пользователь
 
Регистрация: 23.09.2018
Сообщений: 23
Печаль

Да, сам, но у меня бывают приколы, что в голове я придумал как, но кодом не получается выразить, как в этом случае, вот и прошу помощи.
Necker вне форума Ответить с цитированием
Старый 13.10.2018, 21:20   #8
ViktorR
Старожил
 
Регистрация: 23.10.2010
Сообщений: 2,304
По умолчанию

Например так:
Код:
D := sqr(b) - 4*a*c;
if D < 0 then
   Break; {Корней нет}
else
begin
   iD = int(sqrt(D));
   if sqr(iD) <> D then Break; {Выходим из цикла на следующий шаг}
   writeln('a = ', a, '  b = ', b, 'c = ',c);
   writeln('   x1 = ', -b - iD, '/',2*a, '  x2 = -b + iD, '/', 2*a);
end;
или
Код:
D := sqr(b) - 4*a*c;
if D < 0 then
   Break; {Корней нет}
else
begin
   iD = sqrt(D);
   if frac(iD) <> 0 then Break; {Выходим из цикла на следующий шаг}
   writeln('a = ', a, '  b = ', b, 'c = ',c);
   writeln('   x1 = ', -b - iD, '/',2*a, '  x2 = -b +iD, '/', 2*a);
end;
Параметры форматирования выходных данных расставь сам.

PS: Код не проверял.
Как-то так, ...
ViktorR вне форума Ответить с цитированием
Старый 14.10.2018, 19:10   #9
Necker
Пользователь
 
Регистрация: 23.09.2018
Сообщений: 23
По умолчанию

Спасибо, я так понимаю надо больше практики, чтоб не возникали такие проблемы как у меня .
Necker вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
дан двумерный массив пользователь вводит натуральные числа,массив размером N на M .Все числа из которых можно извлечь корень извлекаются все числа меньше нуля заменяются их модулем qqq`` Паскаль, Turbo Pascal, PascalABC.NET 9 02.10.2017 17:11
Удалить все строки, сумма элементов которых является двузначным числом. ggjgj Общие вопросы C/C++ 1 24.11.2016 18:51
Дано линейный целочисленный массив. Заменить в нем все элементы, значение которых меньше некоторог числа К на значение К. Подсчита PASKAL12 Помощь студентам 2 04.12.2013 19:30
Срочно! Помогите построить СДНФ на Паскале число переменных задает пользователь stscolt Помощь студентам 1 21.04.2008 22:20