Премини към съдържанието
Форумът в приложение

По-лесно сърфиране. Научи повече.

Kaldata.com - Форуми

Приложение на форума на цял екран с push известия, значки и други.

За да инсталирате това приложение на iOS и iPadOS
  1. Докоснете Иконата за споделяне в Safari
  2. Превъртете менюто и докоснете Добавяне към началния екран.
  3. Докоснете Добавяне в горния десен ъгъл.
За да инсталирате това приложение на Android
  1. Докоснете менюто с 3 точки (⋮) в горния десен ъгъл на браузъра.
  2. Докоснете Добавяне към началния екран или Инсталиране на приложение.
  3. Потвърдете, като докоснете Инсталиране.

Добре дошли!

Добре дошли в нашите форуми, пълни с полезна информация. Имате проблем с компютъра или телефона си? Публикувайте нова тема и ще намерите решение на всичките си проблеми. Общувайте свободно и открийте безброй нови приятели.

Моля, регистрирайте се за да публикувате тема и да получите пълен достъп до всички функции.

 

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

Featured Replies

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

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 (преглед на промените)

  • Автор
преди 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 (преглед на промените)

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

преди 9 минути, Радослав Матев написа:

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

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

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

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

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

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

Поздрави !

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

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

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

  • Автор

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

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

Редактирано от 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

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

Архивирана тема

Темата е твърде стара и е архивирана. Не можете да добавяте нови отговори в нея, но винаги можете да публикувате нова тема, в която да продължи дискусията. Регистрирайте се или влезте във вашия профил за да публикувате нова тема.

Разглеждащи това в момента 0

  • Няма регистрирани потребители разглеждащи тази страница.

Дарение

  • Подкрепи съществуването на форума - направи дарение
    25%
    Дарени 252.69 EUR от нужните 1,000.00 EUR

Бюлетин

Получавайте известие, когато има важна промяна или новина свързана с форума.

Профил

Навигация

Търсене

Търсене

Конфигуриране на push известия в браузъра

Chrome (Android)
  1. Докоснете иконата на катинар до адресната лента.
  2. Докоснете Разрешения → Известия.
  3. Променете предпочитанията си.
Chrome (Desktop)
  1. Кликнете върху иконата на катинар в адресната лента.
  2. Изберете Настройки на сайта.
  3. Намерете Известия и коригирайте предпочитанията си.