|
|
|
3ий день ничего не выходит!
|
|||
|---|---|---|---|
|
#18+
Пишу программу для решения квадратных уравнений. Бывают случаи, когда дискриминант иррационален, но чтобы программа не выдавала в ответе длинную десятичную дробь, решил написать отдельный код, который преобразует дискриминант в презентабельный вид. И вот столкнулся с проблемой. Если дискриминант нормально извлекается он пишет целое число (√25=5), если 1 (√1=1), если 0 (√0=0), если число простое то пишет знак корня и число (√13), а вот если число не является квадратом другого (25 квадрат 5и) и не является простым (13), то он не хочет упрощать корень!!! К примеру, если D(дискриминант)=√45, то программа должна выдавать 3√5. Это благо я исправил, выдаёт. Но если число больше 100а, программа не предпринимает ни каких действий (ввожу 335, на выходе 335, а должно быть √335) Вот сам код: package Studing; import java.util.Scanner; public class Root { public static void main (String []args) { double b, hz; int i=1, I=0, q=1; hz=0; b=1; Scanner klava = new Scanner (System.in); double D=klava.nextDouble(); double root=Math.sqrt(D); if (root%2==0 || root%3==0 || root%4==0 || root%5==0 || root%6==0 || root%7==0 || root%8==0 || root%9==0 || root%10==0 || root%11==0 || root%12==0 || root%13==0 || root%14==0 || root%15==0 || root%16==0 || root%17==0 || root%18==0 || root%19==0 || root%20==0 || root%21==0 || root%22==0 || root%23==0 || root%24==0 || root%25==0 || root%26==0 || root%9==0 || root%10==0 || root%11==0 || root%12==0 || root%13==0 || root%14==0 || root%15==0 || root%16==0 || root%17==0 || root%18==0 || root%19==0 || root%20==0 || root%21==0 || root%22==0 || root%23==0 || root%24==0 || root%25==0 || root%26==0 || root%27==0 || root%28==0 || root%29==0 || root%30==0 || root%31==0 || root%32==0 || root%33==0 || root%34==0 || root%35==0 || root%36==0 || root%37==0 || root%38==0 || root%39==0 || root%40==0 || root%41==0 || root%42==0 || root%43==0 || root%44==0 || root%45==0 || root%46==0 || root%48==0 || root%49==0 || root%50==0 || root%51==0 || root%53==0 || root%54==0 || root%55==0 || root%56==0 || root%57==0 || root%58==0 || root%59==0 || root%60==0 || root%61==0 || root%62==0 || root%63==0 || root%64==0 || root%65==0 || root%66==0 || root%67==0 || root%68==0 || root%69==0 || root%70==0 || root%71==0 || root%72==0 || root%73==0 || root%74==0 || root%75==0 || root%76==0 || root%77==0 || root%78==0 || root%79==0 || root%80==0 || root%81==0 || root%82==0 || root%83==0 || root%84==0 || root%85==0 || root%86==0 || root%87==0 || root%88==0 || root%89==0 || root%90==0 || root%91==0 || root%92==0 || root%93==0 || root%94==0 || root%95==0 || root%96==0 || root%97==0 || root%98==0 || root%99==0 || root%100==0) { System.out.print("√"); System.out.print((int)(D)); System.out.print("="); System.out.println((int)(root)); } else if (D==0) { System.out.print("√"); System.out.print((int)(D)); System.out.print("="); System.out.println((int)(0)); } else if (D==1) { System.out.print("√"); System.out.print((int)(D)); System.out.print("="); System.out.println((int)(1)); } else if ((root!=0 && root !=1) && ((root%2==0 || root%3==0 || root%4==0 || root%5==0 || root%6==0 || root%7==0 || root%8==0 || root%9==0 || root%10==0 || root%11==0 || root%12==0 || root%13==0 || root%14==0 || root%15==0 || root%16==0 || root%17==0 || root%18==0 || root%19==0 || root%20==0 || root%21==0 || root%22==0 || root%23==0 || root%24==0 || root%25==0 || root%26==0 || root%9==0 || root%10==0 || root%11==0 || root%12==0 || root%13==0 || root%14==0 || root%15==0 || root%16==0 || root%17==0 || root%18==0 || root%19==0 || root%20==0 || root%21==0 || root%22==0 || root%23==0 || root%24==0 || root%25==0 || root%26==0 || root%27==0 || root%28==0 || root%29==0 || root%30==0 || root%31==0 || root%32==0 || root%33==0 || root%34==0 || root%35==0 || root%36==0 || root%37==0 || root%38==0 || root%39==0 || root%40==0 || root%41==0 || root%42==0 || root%43==0 || root%44==0 || root%45==0 || root%46==0 || root%48==0 || root%49==0 || root%50==0 || root%51==0 || root%53==0 || root%54==0 || root%55==0 || root%56==0 || root%57==0 || root%58==0 || root%59==0 || root%60==0 || root%61==0 || root%62==0 || root%63==0 || root%64==0 || root%65==0 || root%66==0 || root%67==0 || root%68==0 || root%69==0 || root%70==0 || root%71==0 || root%72==0 || root%73==0 || root%74==0 || root%75==0 || root%76==0 || root%77==0 || root%78==0 || root%79==0 || root%80==0 || root%81==0 || root%82==0 || root%83==0 || root%84==0 || root%85==0 || root%86==0 || root%87==0 || root%88==0 || root%89==0 || root%90==0 || root%91==0 || root%92==0 || root%93==0 || root%94==0 || root%95==0 || root%96==0 || root%97==0 || root%98==0 || root%99==0 || root%100==0))==false) { do { b=b+1; hz=D%b; } while (hz!=0); if (D>b) { //Число не простое do { i=i+1; double si=Math.pow(i, 2); if (D%si==0) { System.out.print("√"); System.out.print((int)(D)); System.out.print("="); System.out.print((int)(Math.sqrt(si))); System.out.print("√"); System.out.print((int)(D/si)); } } while (i!=1000); } } else { //Число простое System.out.print("√"); System.out.print((int)(D));} } } У меня уже голова не варит, не могу понять в чём проблема, раз 5 уже код переписывал... Может вы что заметили? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.05.2016, 11:21 |
|
||
|
3ий день ничего не выходит!
|
|||
|---|---|---|---|
|
#18+
String.format ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.05.2016, 11:23 |
|
||
|
3ий день ничего не выходит!
|
|||
|---|---|---|---|
|
#18+
я правильно понял, что нужно упростить корень? тогда нужно просто дискриминант разложить на множители (решето эратосфена) и вывести все парные за корень. в вашем решении на вскидку такого не делается. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.05.2016, 11:31 |
|
||
|
3ий день ничего не выходит!
|
|||
|---|---|---|---|
|
#18+
Dmitry56, Начните с вот этого http://www.sql.ru/forum/rules.aspx Потому замените ваши безобразные условия циклом. И тогда можно будет обсудить. Вас в школе так же учили решать квадратные уравнения. Проверьте что значение при делении на два не имеет остатка, если имеет, то проверьте что значение при делении на три не имеет остатка, если имеет, то проверьте что значение при делении на четыре не имеет остатка, если имеет, то проверьте что значение при делении на пять не имеет остатка, если имеет, то проверьте что значение при делении на шесть не имеет остатка, если имеет, то проверьте что деление значение на семь не имеет остатка и если имеет, тогда все пропало. Это ваш алгоритм? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.05.2016, 11:31 |
|
||
|
3ий день ничего не выходит!
|
|||
|---|---|---|---|
|
#18+
Dmitry56, у тебя очень забавный индусо-стиль. И почему ты остановился на делителе 100 ? Кстати если число делится на 9 то оно автоматом делиться на 3. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.05.2016, 11:38 |
|
||
|
3ий день ничего не выходит!
|
|||
|---|---|---|---|
|
#18+
maytonКстати если число делится на 9 то оно автоматом делиться на 3. Но, он же хитрый. Сначала проверит на 3 и только потом на 9. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.05.2016, 11:44 |
|
||
|
3ий день ничего не выходит!
|
|||
|---|---|---|---|
|
#18+
Dmitry56ввожу 335, на выходе 335, а должно быть √335 На выходе ничего не выдаётся потому, что в цикле //Число не простое do { i=i+1; double si=Math.pow(i, 2); if (D%si==0) { System.out.print("√"); System.out.print((int)(D)); System.out.print("="); System.out.print((int)(Math.sqrt(si))); System.out.print("√"); System.out.print((int)(D/si)); } } while (i!=1000); Условие if никогда не выполняется. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.05.2016, 14:01 |
|
||
|
3ий день ничего не выходит!
|
|||
|---|---|---|---|
|
#18+
Blazkowicz, Теперь код выглядит нормально? Он вполне рабочий! Если что-то можно упростить, подскажите пожалуйста. package SolverMini; import java.util.Scanner; public class Root { public static void main (String[]args) { int b=1, hz=0, q=1, pow, pow1, i=1, y=1 ; boolean end=false, end1=false, end2=false; Scanner klava = new Scanner (System.in); int D=klava.nextInt(); double root=Math.sqrt(D); do { i=i+1; if (root%i==0) { System.out.println("√"+D+"="+(int)(root)); end=true; break;} } while (i!=100000); if (D==0) { System.out.println("√"+D+"="+0); } else if (D==1) { System.out.println("√"+D+"="+1); } do { b=b+1; hz=D%b; } while (hz!=0); if ((D>b) && (D!=0) && (D!=1) && (end!=true)) { do { q=q+1; pow=q*q; if (D%pow==0) { System.out.println("√"+D+"="+(int)(Math.sqrt(pow))+"√"+D/pow); end2=true; break; } }while (q!=100000); if (end2!=true) { do {y=y+1; pow1=y*y; if ((D%pow1!=0) && (end2!=true)) { System.out.println("√"+D); end1=true; break; } } while (y!=100000); } } else if ((end1!=true) && (end2!=true)){ System.out.println("√"+D); } } } ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.05.2016, 16:07 |
|
||
|
3ий день ничего не выходит!
|
|||
|---|---|---|---|
|
#18+
Blazkowicz, Код: java 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. 48. 49. 50. 51. 52. 53. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.05.2016, 16:45 |
|
||
|
3ий день ничего не выходит!
|
|||
|---|---|---|---|
|
#18+
Вместо "√" стоит "√" ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.05.2016, 16:47 |
|
||
|
3ий день ничего не выходит!
|
|||
|---|---|---|---|
|
#18+
"& #8730" = "√" ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.05.2016, 16:48 |
|
||
|
3ий день ничего не выходит!
|
|||
|---|---|---|---|
|
#18+
Blazkowicz, помогите пожалуйста, не могли бы вы объяснить что означает такая ошибка: 10 Exception in thread "main" java.lang.ArithmeticException: / by zero at SolverMini.Root.main(Root.java:20) Она возникает при вводе числа, корень которого нельзя упростить, несмотря на то, что у меня прописано условие для таких случаев: Код: java 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. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.05.2016, 20:37 |
|
||
|
3ий день ничего не выходит!
|
|||
|---|---|---|---|
|
#18+
Изменил while !=10000000... на while !=10000 - ошибка исчезла. Неужели это порог максимального числа? Dmitry56 if (hz==0){ System.out.print("√"+a+"="+q+"√"+a/pow); break; } } while (q!=1000000000) ; ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.05.2016, 20:46 |
|
||
|
3ий день ничего не выходит!
|
|||
|---|---|---|---|
|
#18+
Dmitry56Изменил while !=10000000... на while !=10000 - ошибка исчезла. Неужели это порог максимального числа? голову когда включать будешь? двоечник.. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.05.2016, 21:52 |
|
||
|
3ий день ничего не выходит!
|
|||
|---|---|---|---|
|
#18+
Dmitry56, Код: java 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. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.05.2016, 00:48 |
|
||
|
3ий день ничего не выходит!
|
|||
|---|---|---|---|
|
#18+
P.S. Список первых 10000 простых чисел ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.05.2016, 00:53 |
|
||
|
|

start [/forum/topic.php?fid=59&msg=39235308&tid=2124064]: |
0ms |
get settings: |
11ms |
get forum list: |
16ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
101ms |
get topic data: |
14ms |
get forum data: |
3ms |
get page messages: |
76ms |
get tp. blocked users: |
2ms |
| others: | 249ms |
| total: | 480ms |

| 0 / 0 |
