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

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

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

Кстати если число делится на 9 то оно автоматом делиться на 3.
...
Рейтинг: 0 / 0
3ий день ничего не выходит!
    #39232225
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maytonКстати если число делится на 9 то оно автоматом делиться на 3.
Но, он же хитрый. Сначала проверит на 3 и только потом на 9.
...
Рейтинг: 0 / 0
3ий день ничего не выходит!
    #39232407
Partisan M
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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
3ий день ничего не выходит!
    #39235304
Dmitry56
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
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
3ий день ничего не выходит!
    #39235306
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
...
Рейтинг: 0 / 0
3ий день ничего не выходит!
    #39235308
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
...
Рейтинг: 0 / 0
3ий день ничего не выходит!
    #39235380
Dmitry56
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
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
3ий день ничего не выходит!
    #39235384
Dmitry56
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Вместо "√" стоит "√"
...
Рейтинг: 0 / 0
3ий день ничего не выходит!
    #39235390
Dmitry56
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
"& #8730" = "√"
...
Рейтинг: 0 / 0
3ий день ничего не выходит!
    #39235832
Dmitry56
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
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
3ий день ничего не выходит!
    #39235837
Dmitry56
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Изменил while !=10000000... на while !=10000 - ошибка исчезла. Неужели это порог максимального числа?




Dmitry56

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


голову когда включать будешь? двоечник..
...
Рейтинг: 0 / 0
3ий день ничего не выходит!
    #39236204
Фотография Usman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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
3ий день ничего не выходит!
    #39236205
Фотография Usman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
P.S.
Список первых 10000 простых чисел
...
Рейтинг: 0 / 0
18 сообщений из 18, страница 1 из 1
Форумы / Java [игнор отключен] [закрыт для гостей] / 3ий день ничего не выходит!
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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