Премини към съдържанието
Tonny Petkova

Относно едно квадратно уравнение..

Препоръчан отговор


Става въпрос за този код:

import java.util.Scanner;

public class QuadraticEquationProject {
    public static void main(String[] args) {
        Scanner input = new Scanner(System.in);
        int a, b, c, D;
        float x1, x2, x;
        System.out.println(discriminant(a, b, c, D));
    }
    public static int discriminant (int a, int b, int c, int D){
        return (b * b) - (4 * a * c);

        if (a == 0)
            if (b == 0) {
                System.out.println("С така въведените данни стигаме до Изродено уравнение");
            } else if (a == 0) {
                x = (-c) / b;
                System.out.println("Уравнението има само един корен (Линейно) Х= " + x);
            } else if (c == 0) {
                x1 = (-b) / a;
                System.out.println("Х1= " + x1);
                x2 = 0;
                System.out.println("Х2= " +0);
            }

        if (D < 0) {
            System.out.println("Дискреминантата е по малка от 0 и няма решение в множеството на реалните числа.");
        } else if (D == 0) {
            x = (b*(-1))/(2*a);
            System.out.println("Дискреминантата e равна на 0 уравнението има 1 решение Х= " +'x');
        } else if (D > 0) {
            x1 = (-b) + Math.sqrt(D)) / (2 * a);
            System.out.println("Х1= " +'x');
            x2 = (-b) - Math.sqrt(D)) / (2 * a);
            System.out.println("Х2= " +x2);
        }
    }
    private static int sqrt(int D) {
        return 0;
    }
}

 

Получавам малко грешки.. малко :D  Някой може ли да ме насочи къде точно греша?

х1 и х2 са в червено.

Редактирано от Tonny Petkova (преглед на промените)

Сподели този отговор


Линк към този отговор
Сподели в други сайтове

Махни ги тея цели числа и работи само с float или double

Сподели този отговор


Линк към този отговор
Сподели в други сайтове
преди 21 минути, ined написа:

Махни ги тея цели числа и работи само с float или double

Демек?

Сподели този отговор


Линк към този отговор
Сподели в други сайтове
 System.out.println("Х1= " + x1);
                x2 = 0;
                System.out.println("Х2= " +0);
 System.out.println("Х1= " +'x');
            x2 = (-b) - Math.sqrt(D)) / (2 * a);
            System.out.println("Х2= " +x2);

а X  в грешкали е

пробвай  x1 r x2  в зелено и май трябва да има растояние  между  +  и х2 

Сподели този отговор


Линк към този отговор
Сподели в други сайтове

Така, виж това, но си оправи сметките, тях няма да ти ги оправям - ти ще си оправиш метода за намиране на променливите:

import java.util.Scanner;

public class tas {
    public static void main(String[] args) {
        Scanner input = new Scanner(System.in);
        System.out.print("Въведи променлива 1: ");
        int a = input.nextInt();
        System.out.print("Въведи променлива 2: ");
        int b = input.nextInt();
        System.out.print("Въведи променлива 3: ");
        int c = input.nextInt();
        System.out.print("Въведи дискриминанта: ");
        int d = input.nextInt();

        System.out.println(discriminant(a, b, c, d));
    }

    public static int discriminant(int a, int b, int c, int d) {
        double x1, x2, x;

        if (a == 0)
            if (b == 0) {
                System.out.println("С така въведените данни стигаме до Изродено уравнение");
            } else if (a == 0) {
                x = (-c) / b;
                System.out.println("Уравнението има само един корен (Линейно) Х= " + x);
            } else if (c == 0) {
                x1 = (-b) / a;
                System.out.println("Х1= " + x1);
                x2 = 0;
                System.out.println("Х2= " + 0);
            }

        if (d < 0) {
            System.out.println("Дискреминантата е по малка от 0 и няма решение в множеството на реалните числа.");
        } else if (d == 0) {
            x = (b * (-1)) / (2 * a);
            System.out.println("Дискреминантата e равна на 0 уравнението има 1 решение Х= " + 'x');
        } else if (d > 0) {
            x1 = ((-b) + Math.sqrt(d)) / (2 * a);
            System.out.println("Х1= " + 'x');
            x2 = ((-b) - Math.sqrt(d)) / (2 * a);
            System.out.println("Х2= " + x2);
        }
        return (b * b) - (4 * a * c);
    }
}

като съответно си оправи името на класа - "QuadraticEquationProject" или там както си си именувала файла.

Редактирано от Радослав Матев (преглед на промените)

Сподели този отговор


Линк към този отговор
Сподели в други сайтове

Здравейте !

Явно Ванката след футбола цъка и квадратни уравнения. 

Няколко неща на prima vista:

1) Квадратното уравнение е широко известно и е по-добре при "подканване" на потребителя да въведе нещо, да му се изписва "Въведете А, въведете B, въведете C". В противен случай, не става ясно 1, 2 и 3 кои всъщност параметри на уравнението са.

2) Защо се подава дискриминанта като входен параметър ?! Дискриминантата има строго определена зависимост спрямо A, B и C (която дори изразявате в кода си) като D = b*b - 4*ac.

3) Някакси, за втори път игнорирате постовете на @ined и не разбирам защо - първо, A, B и C по математическа дефиниция са реални числа (беля, даже и комплексни могат да са, ама айде ...). Т.е. int-а е меко казано неуместен тип за A,B и C, да не говорим за дискриминантата и корените. Второ, float-а е с малка прецизност - от тази гледна точка, версията на @Радослав Матев е по-добра, защото поне използва double.

4) Именуване на методи - търсим дискриминанта, ама наред с нея вземаме, че намираме и корените ... това е като да си направя чай, като междувременно завъртя една баница, 3 порции шопска салата и 1 чеверме ... 

Наред идва и кода. Прилагам коментари, които са директно в последната приложена версия от постовете над моя:

     if (a == 0)
        if (b == 0) {
            System.out.println("С така въведените данни стигаме до Изродено уравнение");
        } else if (a == 0) {   // ?! Това има ли начин някога да не е вярно ?! При положение, че вече сме тук защото a==0 е вярно ...
            x = (-c) / b;
            System.out.println("Уравнението има само един корен (Линейно) Х= " + x);
        } else if (c == 0) { // Отгатнете дали тука някога изобщо ще се влезе, при положение, че горния if е винаги true ...
            x1 = (-b) / a;
            System.out.println("Х1= " + x1);
            x2 = 0;
            System.out.println("Х2= " + 0);
        }
		//Тук се изчислява дискриминантата - d изобщо се изхвърля като потребителско въвеждане//double d = (b * b) - (4 * a * c);
        if (d < 0) { 
            System.out.println("Дискреминантата е по малка от 0 и няма решение в множеството на реалните числа.");
        } else if (d == 0) {
            x = (b * (-1)) / (2 * a);
            System.out.println("Дискреминантата e равна на 0 уравнението има 1 решение Х= " + 'x');
        } else if (d > 0) {
            x1 = ((-b) + Math.sqrt(d)) / (2 * a); // И защо два пъти изчисляваме Math.sqrt(d)-може спокойно да се кешира в някаква променлива
            System.out.println("Х1= " + 'x');
            x2 = ((-b) - Math.sqrt(d)) / (2 * a);
            System.out.println("Х2= " + x2);
        }
        return (b * b) - (4 * a * c); //Та да се върнем на темата за чевермето и 3-те салати ...
    }

Ако все още има проблеми, утре ще направя една версия и за това.

Поздрави !

Редактирано от soundtracker (преглед на промените)
  • Любов 1

Сподели този отговор


Линк към този отговор
Сподели в други сайтове

Не ми се занимаваше да си припомням как се смятат уравнения и затова реших да оставя на каката да си напъне малко мозъка. Докарах и задачата до компилиране и стартиране без грешки, на теб като ти се занимава я реши цялата. То и в интернет има много примери за решаване на това нещо, само трябва да се пита чичко гугъл!

  • Тъжен 1

Сподели този отговор


Линк към този отговор
Сподели в други сайтове
преди 9 минути, Радослав Матев написа:

Не ми се занимаваше да си припомням как се смятат уравнения и затова реших да оставя на каката да си напъне малко мозъка. Докарах и задачата до компилиране и стартиране без грешки, на теб като ти се занимава я реши цялата. То и в интернет има много примери за решаване на това нещо, само трябва да се пита чичко гугъл!

Коментарите ми нямат за цел да нападат някого, нито пък да се интерпретират като вид насмешка или подигравка. 

Споделям мнението, че помощта е по-скоро побутване, отколкото решаване на проблема директно. И се надявам, че наистина в темата ще получим отговор по задачата от запитващия. Но винаги трябва да се внимава с това, което се дава като насока - да, промените ще оправят компилационните проблеми, кода ще се компилира и ще се изпълни, но самия алгоритъм има грешки в логиката. От опита си, мога да споделя, че първите неща, които трябва да се поправят в дадено примерно решение е логическата консистентност - още повече, че в случая запитващия вече има нещо, което е дал и то не е правилно. По-добре е първо да се оправи самата логическа последователност, защото оттам насетне, запитващ и помагащ ще имат едно и също възприятие върху проблема и съответно върху решението му :). Както казваше един от доцентите ми по програмиране - "Кодът е просто аналитична репрезентация на действията и логиката ви".

Знам, че това звучи все едно е излязал даскала по география и раздава акъл навред - дори на работа се получават подобни изпълнения и то с хора, които отдавна не са в училище или университет. 

Та, като заключение - с дълбоко уважение приемам мнението на всеки, като си позволявам кометнари от моя страна, само ако съм уверен, че мога да внеса подобрение и надграждане. 

P.S. Последното е като извод от няколко ключови елемента на Programming Code Of Ethics, който е в подписа ми :)

Поздрави !

  • Харесва ми 1

Сподели този отговор


Линк към този отговор
Сподели в други сайтове

:D   задачата е тролска - понякога  трненира и се напива  може да значи всичко -винаги- никога- 1 път в седмицата-

  • Ха-ха 1

Сподели този отговор


Линк към този отговор
Сподели в други сайтове

Да, лошо няма, както казах, това си е мое решение и аз съм написал в началото преди кода, който съм дал, че трябва да се оправят грешките. Това го правя с цел авторката на темата да помисли малк, евентуално да пробва да даде някакво решение, макар и то грешно, ако не знае как се решават задачи по математика, а не да чака всичко наготово. Аз може да съм ги забравил тези уравнения как се смятат, но ако се хвана мога да намеря правилното решение - има толкова много теми в интернет, само трябва малко да се почете. Пак казвам, това е мое мнение по темата, някой друг ако иска да пише цялостното решение. Това все пак е форум и всеки има право на мнение :) Реално кода може да се оправи за минути, стига да се помисли малко.

Редактирано от Радослав Матев (преглед на промените)
  • Харесва ми 2

Сподели този отговор


Линк към този отговор
Сподели в други сайтове

Така, мисля и аз да кажа нещо по темата. Първо моля тук за помощ защото отскоро се занимавам с програмиране. Не знам толкова много неща, като вас (очевидно). Повярвайте ми, чета наляво-надясно, търса информация, обаче не ми се получават нещата. Да полагам толкова много усилия за нещо и постоянно да ми свети в червено ме изкарва извън равновесие. Старая се, но то просто не иска. За разлика от предишната задача, сега качих някакво решение, което бях скалъпила и просто помолих да ми се каже къде евентуално ми е грешката, за да ми подчертава в червено. Мога да реша едно квадратно уравнение, не се притеснявай. ;)  Това, което не мога да направя е да го напиша този код последователно и да е изпълним. Знам какво точно трябва да направя, за да ми извежда корените, но не знам как да го запиша, за да не подчертава нищо и да тръгне. Не знам дали ме разбрахте и сигурно ще скочите сега срещу мен, но просто исках да знам какво да направя с "х", за да не е в червено.

Благодаря все пак.

Редактирано от Tonny Petkova (преглед на промените)

Сподели този отговор


Линк към този отговор
Сподели в други сайтове

https://www.matematika.bg/algebra/quadratic-equation.html

Уравненията се решават по този начин, не мисля, че има друг. Вече с програмното решение може да има различни подходи, но въпроса е резултата да се получи. Дал съм работеща програма, както казах, въпроса е, че не решава квадратни уравнения - това е твоят код, направен да се компилира и работи без да дава грешки. Ако имаш представа от java ще разбереш къде какво да оправиш. При програмирането е задължително и да се знае английски език и то на ниво над средното, за думи, които не можеш да си преведеш, ползвай Google Translate. Ето ти и примери за твоята задача, готови и написани, вече ти трябва да разбереш как стават и защо, ако искаш да се научиш да програмираш:

https://www.google.bg/search?q=square+equation+solution+java&spell=1&sa=X&ved=0ahUKEwinn6fpsO3XAhWB0RQKHUv0BVMQvwUIJSgA&biw=1379&bih=903

Може да започнеш с книгата на Наков за джава и изобщо за програмиране:

http://www.introprogramming.info/wp-content/uploads/2014/04/Introduction-to-Programing-with-Java-Book-v2014.pdf

Редактирано от Радослав Матев (преглед на промените)

Сподели този отговор


Линк към този отговор
Сподели в други сайтове

Регистрирайте се или влезете в профила си за да коментирате

Трябва да имате регистрация за да може да коментирате това

Регистрирайте се

Създайте нова регистрация в нашия форум. Лесно е!

Нова регистрация

Вход

Имате регистрация? Влезте от тук.

Вход

×

Информация

Поставихме бисквитки на устройството ви за най-добро потребителско изживяване. Можете да промените настройките си за бисквитки, или в противен случай приемаме, че сте съгласни с нашите условия за ползване.