Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Java [игнор отключен] [закрыт для гостей] / 3ий день ничего не выходит! / 18 сообщений из 18, страница 1 из 1
10.05.2016, 11:21
    #39232179
Dmitry56
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
3ий день ничего не выходит!
Пишу программу для решения квадратных уравнений. Бывают случаи, когда дискриминант иррационален, но чтобы программа не выдавала в ответе длинную десятичную дробь, решил написать отдельный код, который преобразует дискриминант в презентабельный вид. И вот столкнулся с проблемой. Если дискриминант нормально извлекается он пишет целое число (√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 уже код переписывал...
Может вы что заметили?
...
Рейтинг: 0 / 0
10.05.2016, 11:23
    #39232183
Penkov Vladimir
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
3ий день ничего не выходит!
String.format
...
Рейтинг: 0 / 0
10.05.2016, 11:31
    #39232193
Penkov Vladimir
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
3ий день ничего не выходит!
я правильно понял, что нужно упростить корень? тогда нужно просто дискриминант разложить на множители (решето эратосфена) и вывести все парные за корень.

в вашем решении на вскидку такого не делается.
...
Рейтинг: 0 / 0
10.05.2016, 11:31
    #39232194
Blazkowicz
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
3ий день ничего не выходит!
Dmitry56,

Начните с вот этого
http://www.sql.ru/forum/rules.aspx
Потому замените ваши безобразные условия циклом.
И тогда можно будет обсудить.
Вас в школе так же учили решать квадратные уравнения. Проверьте что значение при делении на два не имеет остатка, если имеет, то проверьте что значение при делении на три не имеет остатка, если имеет, то проверьте что значение при делении на четыре не имеет остатка, если имеет, то проверьте что значение при делении на пять не имеет остатка, если имеет, то проверьте что значение при делении на шесть не имеет остатка, если имеет, то проверьте что деление значение на семь не имеет остатка и если имеет, тогда все пропало. Это ваш алгоритм?
...
Рейтинг: 0 / 0
10.05.2016, 11:38
    #39232212
mayton
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
3ий день ничего не выходит!
Dmitry56, у тебя очень забавный индусо-стиль. И почему ты остановился на делителе 100 ?

Кстати если число делится на 9 то оно автоматом делиться на 3.
...
Рейтинг: 0 / 0
10.05.2016, 11:44
    #39232225
Blazkowicz
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
3ий день ничего не выходит!
maytonКстати если число делится на 9 то оно автоматом делиться на 3.
Но, он же хитрый. Сначала проверит на 3 и только потом на 9.
...
Рейтинг: 0 / 0
10.05.2016, 14:01
    #39232407
Partisan M
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
3ий день ничего не выходит!
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 никогда не выполняется.
...
Рейтинг: 0 / 0
13.05.2016, 16:07
    #39235304
Dmitry56
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
3ий день ничего не выходит!
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);
}

}

}
...
Рейтинг: 0 / 0
13.05.2016, 16:09
    #39235306
Blazkowicz
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
3ий день ничего не выходит!
...
Рейтинг: 0 / 0
13.05.2016, 16:11
    #39235308
Blazkowicz
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
3ий день ничего не выходит!
...
Рейтинг: 0 / 0
13.05.2016, 16:45
    #39235380
Dmitry56
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
3ий день ничего не выходит!
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.
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);	
}

}

}
...
Рейтинг: 0 / 0
13.05.2016, 16:47
    #39235384
Dmitry56
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
3ий день ничего не выходит!
Вместо "√" стоит "√"
...
Рейтинг: 0 / 0
13.05.2016, 16:48
    #39235390
Dmitry56
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
3ий день ничего не выходит!
"& #8730" = "√"
...
Рейтинг: 0 / 0
14.05.2016, 20:37
    #39235832
Dmitry56
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
3ий день ничего не выходит!
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.
package SolverMini;
import java.util.Scanner;
public class Root 
{
public static void main (String []args)
	{
		int hz=0, q=1, pow; boolean w; 
		Scanner klava = new Scanner(System.in);
		int a=klava.nextInt();
		double root=Math.sqrt(a);
	
		if (root==(int)root){ //Проверят корень на наличие дробной части
					System.out.print("√"+a+"="+(int)root);
			
					} else  { 
							do { //Проверяет делиться ли дискриминант на квадрат какого-нибудь числа
								q=q+1;
								pow=q*q;
								hz=a%pow;
								if (hz==0){
										System.out.print("√"+a+"="+q+"√"+a/pow);
										break;
										}
							     } while (q!=1000000000);
						}
		if ((hz!=0) && (root!=(int)root)) {//Выводит символ корня и введённое число при невозможности упростить корень
								System.out.print("√"+a);}	
	                                                    }
}
...
Рейтинг: 0 / 0
14.05.2016, 20:46
    #39235837
Dmitry56
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
3ий день ничего не выходит!
Изменил while !=10000000... на while !=10000 - ошибка исчезла. Неужели это порог максимального числа?




Dmitry56

if (hz==0){
System.out.print("√"+a+"="+q+"√"+a/pow);
break;
}
} while (q!=1000000000) ;
...
Рейтинг: 0 / 0
14.05.2016, 21:52
    #39235862
вадя
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
3ий день ничего не выходит!
Dmitry56Изменил while !=10000000... на while !=10000 - ошибка исчезла. Неужели это порог максимального числа?


голову когда включать будешь? двоечник..
...
Рейтинг: 0 / 0
16.05.2016, 00:48
    #39236204
Usman
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
3ий день ничего не выходит!
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.
public static String factorization(int n) {
    java.util.Map<Integer, Integer> map;
    map = new java.util.LinkedHashMap<>();
    boolean prime; 
next:
    for (int p = 2; p <= n; p++) {
        prime = true;
        for (int i = p + 1; --i > 1;) {
            if (p != i && p % i == 0) {
                prime = false;
                continue next;
            }
        }
        if (prime) {
            for (int e = 1; (n % p) == 0; e++) {
                map.put(p, e);
                n /= p;
            }
        }
    }
    
    int before = 1;
    int after = 1;
    for (int p: map.keySet()) {
        int e = map.get(p);
        if (e % 2 != 0) {
            after *= p;
        }
        before *= Math.pow(p, e / 2);
    }
    
    StringBuilder sb = new StringBuilder();
    if (before > 1) {
        sb.append(before);
        if (after > 1) {
            sb.append(" * ");
        }
    }
    if (after > 1) {
        sb.append('\u221A');
        sb.append(after);
    }
    return sb.toString();
}
...
Рейтинг: 0 / 0
16.05.2016, 00:53
    #39236205
Usman
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
3ий день ничего не выходит!
P.S.
Список первых 10000 простых чисел
...
Рейтинг: 0 / 0
Форумы / Java [игнор отключен] [закрыт для гостей] / 3ий день ничего не выходит! / 18 сообщений из 18, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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