Kvadratická rovnice s intervaly – Java – Fórum – Programujte.com
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu

Kvadratická rovnice s intervaly – Java – Fórum – Programujte.comKvadratická rovnice s intervaly – Java – Fórum – Programujte.com

 

9. 11. 2022   #1
-
0
-

zdravím,

dostal jsem za úkol napsat kód pro kvadratickou rovnici s intervaly. Zvládl jsem si vypočítat diskriminant a oba kořeny, ale nějak se mi nedaří vyřešit podmínky pro ty intervaly (zůstává mi to vyset v cyklech). Kdyby byl někdo ochotný poradit, budu za to vděčný.


public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
// načítání hodnot od uživatele
System.out.print("Zadej koeficient a: ");//načtení koeficient a
double a = sc.nextDouble();
System.out.print("Zadej koeficient b: ");//načtení koeficient b
double b = sc.nextDouble();
System.out.print("Zadej koeficient c: ");//načtení koeficient c
double c = sc.nextDouble();
System.out.print("Zadej pocatek intervalu x1: ");//načtení intervalu x1
double Ix1 = sc.nextDouble();
System.out.print("Zadej konec intervalu x2: ");//načtení intervalu x1
double Ix2 = sc.nextDouble();
double d = b * b - 4 * (a) * (c); // počítání diskriminantu
double x1 = ((-b) + Math.sqrt(d)) / 2 * a; // počítání x1
double x2 = ((-b) - Math.sqrt(d)) / 2 * a; // počítání x2
if (a == 0 && b == 0 && c == 0) {
System.out.println("reseni: neexistuje");
} else {
if (a == 0) {
if (b == 0) {
System.out.println("reseni: neexistuje");
}
} else {
if (d > 0) {
if ((x1 >= Ix1 && x1 <= Ix2) || (x2 >= Ix1 && x2 <= Ix2)) {
if ((x1 >= Ix1 && x1 <= Ix2) && (x2 >= Ix1 && x2 <= Ix2)) {
System.out.println("reseni: existuji dve");
} else {
System.out.println("reseni: existuje jedno");
}
}
} else {
if (d == 0) {
if ((x1 >= Ix1 && x1 <= Ix2) || (x2 >= Ix1 && x2 <= Ix2)) {
if ((x1 >= Ix1 && x1 <= Ix2) && (x2 >= Ix1 && x2 <= Ix2)) {
System.out.println("reseni: existuji dve");
} else {
System.out.println("reseni: existuje jedno");
}
}
else {
System.out.println("reseni: neexistuje");
}
}
}
}
}
}
}

Nahlásit jako SPAM
IP: 178.255.168.–
9. 11. 2022   #2
-
0
-

   

public static void main(String[] args) {

		Scanner sc = new Scanner(System.in);
		// načítání hodnot od uživatele
		System.out.print("Zadej koeficient a: ");//načtení koeficient a
		double a = sc.nextDouble();
		System.out.print("Zadej koeficient b: ");//načtení koeficient b
		double b = sc.nextDouble();
		System.out.print("Zadej koeficient c: ");//načtení koeficient c
		double c = sc.nextDouble();
		System.out.print("Zadej pocatek intervalu x1: ");//načtení intervalu x1
		double Ix1 = sc.nextDouble();
		System.out.print("Zadej konec intervalu x2: ");//načtení intervalu x1
		double Ix2 = sc.nextDouble();

		double d = b * b - 4 * (a) * (c); // počítání diskriminantu
		double x1 = ((-b) + Math.sqrt(d)) / 2 * a; // počítání x1
		double x2 = ((-b) - Math.sqrt(d)) / 2 * a; // počítání x2

		if (a == 0 && b == 0 && c == 0) {
			System.out.println("reseni: neexistuje");
		} else {
			if (a == 0) {
				if (b == 0) {
					System.out.println("reseni: neexistuje");
				}
			} else {
				if (d > 0) {
					if ((x1 >= Ix1 && x1 <= Ix2) || (x2 >= Ix1 && x2 <= Ix2)) {

						if ((x1 >= Ix1 && x1 <= Ix2) && (x2 >= Ix1 && x2 <= Ix2)) {
							System.out.println("reseni: existuji dve");
						} else {
							System.out.println("reseni: existuje jedno");
						}

					}

				} else {
					if (d == 0) {
						if ((x1 >= Ix1 && x1 <= Ix2) || (x2 >= Ix1 && x2 <= Ix2)) {

							if ((x1 >= Ix1 && x1 <= Ix2) && (x2 >= Ix1 && x2 <= Ix2)) {
								System.out.println("reseni: existuji dve");
							} else {
								System.out.println("reseni: existuje jedno");
							}
							

						}
						else {
							System.out.println("reseni: neexistuje");
						}

					}

				}

			}
		}
	}
}
Nahlásit jako SPAM
IP: 178.255.168.–
10. 11. 2022   #3
-
0
-

Všiml jsem si jen drobnosti: měl bys ošetřit situaci, kdy diskriminant d vyjde záporný nebo 0. V dalším kroku by pak nešla stanovit jeho druhá odmocnina.

Jinak náznak cyklu jsem nenašel.

Algoritmus bych upravil. Už po zadání koeficientů mohou nastat tyto 4 situace:
1. a != 0 - rovnice je kvadratická, spočítám diskriminant atd
2. a == 0, b != 0 - rovnice je lineární, najdu její řešení
3. a == 0, b == 0, c == 0 - rovnost nastala, řešením jsou všechna reálná čísla
4. a == 0, b == 0, c != 0 - rovnost nemůže nastat, rovnice nemá řešení

Podmínky (budou to 3 bloky if - else), které to ošetřují bych umístil před jakýkoliv výpočet. Pak bych v případě viz bod 1 spočítal diskriminant d, vzniknou 3 situace:
1. d < 0 - rovnice nemá řešení
2. d == 0 - rovnice má jeden kořen, provedu jeho výpočet a kontrolu, zda se nachází v intervalu
3. d > 0 - rovnice má dva kořeny, provedu jejich výpočet a kontrolu, zda se nacházejí v intervalu

Kvůli přehlednosti kódu bych použil funkce.

hu

Nahlásit jako SPAM
IP: 195.178.67.–
Zjistit počet nových příspěvků

Přidej příspěvek

Toto téma je starší jak čtvrt roku – přidej svůj příspěvek jen tehdy, máš-li k tématu opravdu co říct!

Ano, opravdu chci reagovat → zobrazí formulář pro přidání příspěvku

×Vložení zdrojáku

×Vložení obrázku

Vložit URL obrázku Vybrat obrázek na disku
Vlož URL adresu obrázku:
Klikni a vyber obrázek z počítače:

×Vložení videa

Aktuálně jsou podporována videa ze serverů YouTube, Vimeo a Dailymotion.
×
 
Podporujeme Gravatara.
Zadej URL adresu Avatara (40 x 40 px) nebo emailovou adresu pro použití Gravatara.
Email nikam neukládáme, po získání Gravatara je zahozen.
-
Pravidla pro psaní příspěvků, používej diakritiku. ENTER pro nový odstavec, SHIFT + ENTER pro nový řádek.
Sledovat nové příspěvky (pouze pro přihlášené)
Sleduj vlákno a v případě přidání nového příspěvku o tom budeš vědět mezi prvními.
Reaguješ na příspěvek:

Uživatelé prohlížející si toto vlákno

Uživatelé on-line: 0 registrovaných, 11 hostů

Podobná vlákna

Kvadratická rovnice — založil Patrik Hlobil

Kvadratická rovnice — založil rdckONE

Kvadratická rovnice — založil Kolis

Kvadratická rovnice — založil pazdy

Kvadraticka rovnice — založil Yurda

Moderátoři diskuze

 

Hostujeme u Českého hostingu       ISSN 1801-1586       ⇡ Nahoru Webtea.cz logo © 20032024 Programujte.com
Zasadilo a pěstuje Webtea.cz, šéfredaktor Lukáš Churý