Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Java [игнор отключен] [закрыт для гостей] / Квадратное уравнение / 10 сообщений из 10, страница 1 из 1
12.04.2011, 14:21:15
    #37211917
turtles
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Квадратное уравнение
Подскажите пожалуйста!!!Правильно ли написан код квадратного уравнения работая с консолью или можно его переделать произвести модернизацию кода!!! Можно пример правильного кода квадратного уравнения!!!

Код программы:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
 import  java.io.IOException;
 import  java.util.InputMismatchException;
 import  java.util.Scanner;

 public   class  Test
{
     static   float  a, b, c;
     static   float  d;
     static   double  x1, x2;

     public   static   void  main(String args [])  throws  IOException
    {
     try {
        System.out.println("Решение квадратного уравнения");
        Scanner s =  new  Scanner(System.in);
        System.out.print("Введите значение a -> ");
        a = s.nextFloat();
        System.out.print("Введите значение b -> ");
        b = s.nextFloat();
        System.out.print("Введите значение c -> ");
        c = s.nextFloat();
        System.out.println("a = " + a + " b = " + b + " c = " + c);

        d = (b * b) - ( 4  * a * c);

        System.out.println("Дискриминант = " + d);

         if (d <  0 )
         System.out.print("Уравнение не имеет решений!!!");
         else 
         if (d ==  0 )
          {
            x1 = (-b) / ( 2  * a);
             System.out.println ("x = " + x1);
           }
            else 
           {
              x1 = (-b + Math.sqrt(d)) / ( 2  * a);
              x2 = (-b - Math.sqrt(d)) / ( 2  * a);
                if  (x1 == x2)
                System.out.println ("x1 = x2 " + x1);
                  else 
                  System.out.println ("x1 =  " + x1 + "  x2 = " + x2);
            }
        } catch (InputMismatchException e){System.out.println("!!!Ошибка ввода!!!");}
      }
}
...
Рейтинг: 0 / 0
12.04.2011, 15:26:54
    #37212140
Penkov Vladimir
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Квадратное уравнение
"turtles" <nospam@sql.ru>;> !Правильно ли написан код квадратного уравнения работая с консолью


вы его запускали? работает? решение правильное дает?

Скажи Microsoft'у "Прощай"!

Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
12.04.2011, 15:52:18
    #37212226
carper
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Квадратное уравнение
Несколько придирок:
1. При D<0 я бы не стал писать ""Уравнение не имеет решений!!!"
т.к. оно на самом деле не имеет вещественных корней, что не мешает ему иметь комплексные корни.

2. Разумеется, в квадратным уравнении a!=0, но почему бы не проверить, что не введен 0 (для вещественных чисел проверку на 0
производят с учетом погрешности) ?

3. Зачем вам понадобились static переменные, когда достаточно локальных?
Неохота создавать экземпляр класса?
Для quick and dirty решения годится, но вы же сами спрашиваете как лучше.

4. Не надо рисовать всякие там System.out.println("a = " + a + " b = " + b + " c = " + c);
Т.к. вы после этого отнюдь не ожидаете реакции пользователя.

Если хочется сделать "красиво", напишите уж что-то вроде: System.out.println("Уравнение " + a + "x2" + b + "x" + c + "= 0; D = " + D);

5. Нельзя сравнивать цифры с плавающей точкой без учета погрешности или, к вашему вящему изумлению, иной раз окажется, что
0.01 != 0.01. Реальный пример и почему это происходит приводить не буду - об этом писано - переписано.

6. Не надо каждый раз вычислять одно и то же. Например, Math.sqrt(d) и 2*a, - это дурно пахнет.

7. Ограничьте точность вывода корней на экран, а то иногда получите "километровый" набор цифр.

8. Что-то делать лучше в отдельном методе, а уж его дергать из main.

9. Вместо float лучше использовать double

10. При вводе неверных значений лучше не выходить из программы, а повторно запрашивать пользователя.
Особенно актуально обрабатывать ошибку, когда в качестве десятичного разделителя использован неверный символ.
...
Рейтинг: 0 / 0
12.04.2011, 15:55:16
    #37212236
carper
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Квадратное уравнение
turtles,

Да, и пока не забыл, решение квадратного уравнения это не такая большая беда, чтобы об этом умудриться написать на всех вам известных форумах. :)
...
Рейтинг: 0 / 0
12.04.2011, 16:30:59
    #37212334
IDVsbruck
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Квадратное уравнение
п.5 в данном случае можно не учитывать (сравнение с нулем - это только сравнение с нулем)
Приоритет умножения выше сложения, поэтому скобки в вычислении дискриминанта не нужны.
Выражение (х1 == х2) верно только в случае, когда дискриминанта равна 0 (при валидных вводных параметрах), поэтому дважды делать проверку на единственное решение не нужно.
...
Рейтинг: 0 / 0
12.04.2011, 16:40:24
    #37212363
grasoff.net
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Квадратное уравнение
IDVsbruckдискриминанта равна 0мужской род, есичо )
...
Рейтинг: 0 / 0
12.04.2011, 17:57:09
    #37212608
carper
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Квадратное уравнение
IDVsbruck,
Это почему это не учитывать ошибку при сравнении с нулем?

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
   public   static   void  main(String[] args) {
		 float  b = ( float ) 0 . 1 ;
		 float  a = ( float ) 1 . 0 ;
		 float  c = ( float ) 0 . 0025 ;
		 float  d = (b * b) - ( 4  * a * c);

		System.out.println("d = " + d + "; d == 0? " + (d ==  0 ));
  }

Результат: d =  9 .313226E- 10 ; d ==  0 ? false

Пробуем ручками: 
 0 . 1 * 0 . 1  =  0 . 001 ;
 4 * 1 * 0 . 0025  =  0 . 001 ;

 0 . 001  -  0 . 001  =  0 . 0 

...
Рейтинг: 0 / 0
12.04.2011, 18:18:58
    #37212674
carper
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Квадратное уравнение
carper,

Небольшая поправка:
В там, где "ручкам" вместо 0.001 следует читать 0.01 :(
...
Рейтинг: 0 / 0
12.04.2011, 20:56:03
    #37212920
IDVsbruck
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Квадратное уравнение
carperЭто почему это не учитывать ошибку при сравнении с нулем?
Сорри, d < 0 я увидел, а d == 0 - нет.
Замечание совершенно справедливо.
P.S. Или использовать BigDecimal (что в данном случае неоправданно).
...
Рейтинг: 0 / 0
Период между сообщениями больше года.
17.04.2012, 00:09:29
    #37756298
Denis_m1st
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Квадратное уравнение
Решение этого задания есть тут: /topic/934687&pg=-1
...
Рейтинг: 0 / 0
Форумы / Java [игнор отключен] [закрыт для гостей] / Квадратное уравнение / 10 сообщений из 10, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]