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

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


Да се напише програма на Java, която съдържа клас PolyPower4,който има член – данни и има статични методи за въвеждане на коефициентите на полином от четвърта степен (с два параметъра – масив с коефициентите и размер на масива), извеждане на коефициентите, намиране на стойността на полинома за зададената стойност на променливата, решаване на биквадратното уравнение в случай, че коефициентите пред третата и първата степен са нули, определяне на действителната степен на полинома, решаване на съответното му квадратно уравнение при нулеви коефициенти пред четвъртата и третата степени. В главния метод да се въведат коефициентите, да се пресметне стойността на полинома за въведена стойност на променлива и да се реши съответното уравнение. Класът да няма член – данни, а само статични методи. Програмата да бъде разработена в процедурен стил.

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

Редактирано от cvetinaa.ivanova (преглед на промените)

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


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

Твърде нахална постройка на тема. Поне да си бяхте направили труда да напишете текстаа на задачата. Просто нямам думи!

Т.е. имам, но четящите тук са 12- нагоре.

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

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


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

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

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


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

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

Проблема не е в това, че сте написала условието, а не е прикачена снимка. Проблема, както колега сподели, е че това отново е тема от типа "Напишете ми домашното". Абсолютно съм наясно какво е състоянието на образователната ни система, но това не е оправдание някой друг да върши нещата. 

Въпреки, че темата "Как правилно да поискаме помощ" е от раздела C/C++, тя важи и за Java подфорума. 

 

Така, нека отново разгледаме условието и да му направим една дисекция:

 

 

 

Да се напише програма на Java, която съдържа клас PolyPower4,който има член – данни и има статични методи за въвеждане на коефициентите на полином от четвърта степен (с два параметъра – масив с коефициентите и размер на масива), извеждане на коефициентите, намиране на стойността на полинома за зададената стойност на променливата, решаване на биквадратното уравнение в случай, че коефициентите пред третата и първата степен са нули, определяне на действителната степен на полинома, решаване на съответното му квадратно уравнение при нулеви коефициенти пред четвъртата и третата степени. В главния метод да се въведат коефициентите, да се пресметне стойността на полинома за въведена стойност на променлива и да се реши съответното уравнение. Класът да няма член – данни, а само статични методи. Програмата да бъде разработена в процедурен стил.

Какво ни става ясно от това:

1) Трябва да напишем клас PolyPower4

2) Този клас ще има член-данни и статични методи за въвеждане на коефициентите. Тука излиза и още едно скрито условие - член - данните също трябва да са статични. 

3) Условието изисква метода за въвеждане да е с два параметъра (масив и неговия размер), но може да се направи и с един. За разлика от С/С++, Java масивите си знаят размера и си го пазят (Array.length). Останалите методи са нормални математически операции. 

4) Последните изречения всъщност много добре описват и познанията на учителя (ако условието е 1 към 1). Първо, главен метод (main) метода може да дефиниран във всяки един клас. Няма как този клас (PolyPower) да изпълни първото изречение, без да наруши 2-рото. Ако "главен метод" означава отделно място от класа PolyPower4, то говорим за нов клас (Примерно Main.class), който да има main метод. Това ще реализира останалата част от условието, защото този Main клас ще бъде единствено извикване на методите от PolyPower4. 

 

Опитайте се да напишете класа PolyPower4 - ако имате проблеми, може отново да пишете и ще Ви помогнем. Но поне направяте скелета - дори и празен да е класа, нека започнем от нещо. И ще надграждаме над това, за да може и Вие да разбирате какво точно се случва :).

 

Поздрави и ще очаквам включването Ви !

 

P.S. "Програмата да бъде разразботена в процедурен стил" :D  :biggrin:  ... Това определено ще си го включа в сборника с бисери ...

До Java 8, функционално не можеше да се програмира, камо ли да се пише в стил логическо програмиране ...

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

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


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

Добре, ще дам малко насоки по задачата:

Въпросния клас може да съдържа следните примерни методи и дефиниции:

public class PolyPower4 {
	
	private static double[] coeficients = new double[5];
	
	public static void setCoeficients(double[] newCoeficients) {
		//Правим нужнуте проверки и слагаме новите коефициенти.
	}
	
	public static void printCoeficients() {
		//Извеждаме в конзолата масива с коефициенти
	}
	
	public static double calculateFor(double input) {
		//Изчисляваме стойността на полинома при дадено Х (input)
	}
	
	public static void calculateBiquadratic() {
		//Проверяваме и изчисляваме биквадратното уравнение, ако коефициентите са правилни.
	}
	
	public static void calculateQuadratic() {
		//Проверяваме и изчисляваме квадратното уравнение, ако коефициентите са правилни.
	}
	
	public static int getRealPolynomialDegree() {
		//Намираме коя е истинската степен на полинома. Все пак можем да имаме и нулеви стойности за коефициентите.
	}
	
	private static boolean isBiquadratic() {
		//Помощна функция за проверка дали според коефициентите, уравнението е биквадратно.
	}
	
	private static boolean isQuadratic() {
		//Помощна функция за проверка дали според коефициентите, уравнението е квадратно.
	}
	
	private static void resolvePseudoQuadratic(double a, double b, double c, boolean isBiquadratic) {
		//Помощна фунцкия за решаването на доста голяма част от сметките по биквадратното/квадратното уравнение. Тъй като и на двете места ще имаме общи сметки,
                //те могат да се изнесат в отделен метод.
	}
}

Както се вижда и по самата структура, локално при мен съм реализирал нещата. Но е време, ако изобщо има интерес, запитващия да се включи в дискусията. Повече код от това, за момента няма да приложа към темата, докато не се изяви поне малко желание нещата да се схванат/разберат. 

 

Надявам се искрено, темата да премине в дискусия. 

Отново, поздрави и очаквам включването и на запитващия !

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

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


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

Сърдечно Ви благодаря за помощта и вниманието, което сте отделил за глупостите ми. В крайна сметка се получи нещо ей такова:

 

public final class Polinom


public class Polinom.java 
    private final int[] coef;  
    private int deg;    
    
    public Polinom(int a, int b) {
        coef = new int[b+1];
        coef[b] = a;
        deg = degree();
    }


    public int degree() {
        int d = 0;
        for (int i = 0; i < coef.length; i++)
            if (coef[i] != 0) d = i;
        return d;
    }


    public Polinom plus(Polinom b) {
        Polinom a = this;
        Polinom c = new Polinom(0, Math.max(a.deg, b.deg));
        for (int i = 0; i <= a.deg; i++) c.coef[i] += a.coef[i];
        for (int i = 0; i <= b.deg; i++) c.coef[i] += b.coef[i];
        c.deg = c.degree();
        return c;
    }


    public Polinom minus(Polinom b) {
        Polinom a = this;
        Polinom c = new Polinom(0, Math.max(a.deg, b.deg));
        for (int i = 0; i <= a.deg; i++) c.coef[i] += a.coef[i];
        for (int i = 0; i <= b.deg; i++) c.coef[i] -= b.coef[i];
        c.deg = c.degree();
        return c;
    }


    public Polinom times(Polinom b) {
        Polinom a = this;
        Polinom c = new Polinom(0, a.deg + b.deg);
        for (int i = 0; i <= a.deg; i++)
            for (int j = 0; j <= b.deg; j++)
                c.coef[i+j] += (a.coef[i] * b.coef[j]);
        c.deg = c.degree();
        return c;
    }


    public Polinom compose(Polinom b) {
        Polinom a = this;
        Polinom c = new Polinom(0, 0);
        for (int i = a.deg; i >= 0; i--) {
            Polinom term = new Polinom(a.coef[i], 0);
            c = term.plus(b.times(c));
        }
        return c;
    }


    public boolean eq(Polinom b) {
        Polinom a = this;
        if (a.deg != b.deg) return false;
        for (int i = a.deg; i >= 0; i--)
            if (a.coef[i] != b.coef[i]) return false;
        return true;
    }




    public int evaluate(int x) {
        int p = 0;
        for (int i = deg; i >= 0; i--)
            p = coef[i] + (x * p);
        return p;
    }


    public Polinom differentiate() {
        if (deg == 0) return new Polinom(0, 0);
        Polinom deriv = new Polinom(0, deg - 1);
        deriv.deg = deg - 1;
        for (int i = 0; i < deg; i++)
            deriv.coef[i] = (i + 1) * coef[i + 1];
        return deriv;
    }


    public String toString() {
        if (deg ==  0) return "" + coef[0];
        if (deg ==  1) return coef[1] + "x + " + coef[0];
        String s = coef[deg] + "x^" + deg;
        for (int i = deg-1; i >= 0; i--) {
            if      (coef[i] == 0) continue;
            else if (coef[i]  > 0) s = s + " + " + ( coef[i]);
            else if (coef[i]  < 0) s = s + " - " + (-coef[i]);
            if      (i == 1) s = s + "x";
            else if (i >  1) s = s + "x^" + i;
        }
        return s;
    }


    public static void main(String[] args) { 
        Polinom zero = new Polinom(0, 0);


        Polinom p1   = new Polinom(4, 3);
        Polinom p2   = new Polinom(3, 2);
        Polinom p3   = new Polinom(1, 0);
        Polinom p4   = new Polinom(2, 1);
        Polinom p    = p1.plus(p2).plus(p3).plus(p4);   


        Polinom q1   = new Polinom(3, 2);
        Polinom q2   = new Polinom(5, 0);
        Polinom q    = q1.plus(q2);                    




        Polinom r    = p.plus(q);
        Polinom s    = p.times(q);
        Polinom t    = p.compose(q);


        System.out.println("zero(x) =     " + zero);
        System.out.println("p(x) =        " + p);
        System.out.println("q(x) =        " + q);
        System.out.println("p(x) + q(x) = " + r);
        System.out.println("p(x) * q(x) = " + s);
        System.out.println("p(q(x))     = " + t);
        System.out.println("0 - p(x)    = " + zero.minus(p));
        System.out.println("p(3)        = " + p.evaluate(3));
        System.out.println("p'(x)       = " + p.differentiate());
        System.out.println("p''(x)      = " + p.differentiate().differentiate());
   }


}

 

 

Сигурна съм, че има нещо грешно, но се опитах да направя нещата.Извинявам се за забавилия се отговор нямах много време тези дни. Поздрави и отново Ви благодаря.

Редактирано от cvetinaa.ivanova (преглед на промените)

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


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

Здравейте !

 

Ще публикувам коментарите си направо в кода Ви:

 

public final class Polinom  <-- Този ред е излишен


public class Polinom.java  <-- трябва да се махне ".java" частта от името на класа. Също така трябва да се добави и '{' (начало на клас) 
    private final int[] coef;  
    private int deg;    
    
    ...

Останалото е както логически, така и синтактично издържано. Но и също така много далеч от зададеното условие в началото:

Да се напише програма на Java, която съдържа клас PolyPower4,който има член – данни и има статични методи за въвеждане на коефициентите на полином от четвърта степен (с два параметъра – масив с коефициентите и размер на масива), извеждане на коефициентите, намиране на стойността на полинома за зададената стойност на променливата, решаване на биквадратното уравнение в случай, че коефициентите пред третата и първата степен са нули, определяне на действителната степен на полинома, решаване на съответното му квадратно уравнение при нулеви коефициенти пред четвъртата и третата степени. В главния метод да се въведат коефициентите, да се пресметне стойността на полинома за въведена стойност на променлива и да се реши съответното уравнение. Класът да няма член – данни, а само статични методи. Програмата да бъде разработена в процедурен стил.

Подчертал съм в bold-нат шрифт това, което не се вижда в приложената имплементация. Похвално е, че сте разработила метод за намиране на производната на полинома, както и методи за събиране/изваждане и умножение. Но пак липсват неща. 

 

Имам няколко въпроса и коментара към момента:

1) С коя дефиниция да се работи - тази, която сте приложила в последния си пост или тази, която трябва да бъде според условието ?

2) Приложения клас дава много повече, отколкото се иска. Възможно ли е първоначалното условие да е само част от задачата ?

3) Внимавайте с модификатора final. В Java, един final клас не може да бъде наследен, final метод не може да бъде предефиниран а променлива/член-променлива не може да промени първоначално зададената ѝ стойност !

4) Има малко разминаване в концепциите и в приложената реализация. Принципно, това, което създавате с конструктора е частен вид полином (моном). Въпреки, че е абсолютно математически и логически издържано, член-променливите (поне според типове и имена) са по - скоро във формата на нетривиален (не частен вид) полином. Т.е. резонно е да смятаме, че масива от коефициенти е смислено да бъде с размер повече от две, когато имаме по-скоро ненулеви данни, които да пазим. В случая, ако реша да създавам полином от степен 65536, масива ще задели 65537 елемента, като само един е ненулев. А останалото ще са празни (нулеви) елементи. Но тъй като това доста специфичен случай, ако текущата Ваша реализация Ви е по - лесна за осъзнаване, ще работим с нея. И отново - проверете дали не се отдалечаваме много от условието, което бяхте дали в началото.

 

Ще приложа и примерна, лична реализация, която се доближава до първоначалното задание:

import java.util.Arrays;

public class PolyPower4 {
	
	private static double[] coeficients = new double[5];
	
	public static void setCoeficients(double[] newCoeficients) {
		coeficients = new double[newCoeficients.length];
		if (newCoeficients.length >= 5) {
			coeficients = Arrays.copyOfRange(newCoeficients, 0, 5);
		} else if (newCoeficients.length < 5) {
			System.out.println("Too few coeficients. Will not set !!!");
		}
	}
	
	public static void printCoeficients() {
		System.out.println(Arrays.toString(coeficients));
	}
	
	public static double calculateFor(double input) {
		double result = 0;
		for (int i = 0; i < coeficients.length; i++) {
			if (coeficients[i] == 0) {
				continue;
			} else {
				result += coeficients[i]*Math.pow(input, i);
			}
		}
		return result;
	}
	
	public static void calculateBiquadratic() {
		if (isBiquadratic()) {
			System.out.println("Calculating Buquadratic equation ... ");
			double a = coeficients[4];
			double b = coeficients[2];
			double c = coeficients[0];
			resolvePseudoQuadratic(a, b, c, true);
		} else {
			System.out.println("Not a Biquadratic equation !");
		}
	}
	
	public static void calculateQuadratic() {
		if (isQuadratic()) {
			System.out.println("Calculating Quadratic equation ... ");
			double a = coeficients[2];
			double b = coeficients[1];
			double c = coeficients[0];
			resolvePseudoQuadratic(a, b, c, false);
		} else {
			System.out.println("Not a Quadratic equation !");
		}
	}
	
	public static int getRealPolynomialDegree() {
		for (int i = coeficients.length-1; i >= 0; i--) {
			if (coeficients[i] != 0) {
				return i;
			}
		}
		return 0;
	}
	
	private static boolean isBiquadratic() {
		return (coeficients[1] == 0 && coeficients[3] == 0) && (coeficients[4] != 0);
	}
	
	private static boolean isQuadratic() {
		return (coeficients[4] == 0 && coeficients[3] == 0) && (coeficients[2] != 0);
	}
	
	private static void resolvePseudoQuadratic(double a, double b, double c, boolean isBiquadratic) {
		double D = b*b - 4*a*c;
		if (D < 0) {
			System.out.println("D < 0 - no solution");
		} else {
			double x1 = (-b + Math.sqrt(D))/(2*a);
			double x2 = (-b - Math.sqrt(D))/(2*a);
			int solutionNumber = 1;
			if (isBiquadratic) {
				if (x1 == 0) {
					System.out.printf("Solution x%d: 0\n", solutionNumber++);
				} else if (x1 > 0) {
					System.out.printf("Solution x%d: %f\n", solutionNumber++, Math.sqrt(x1));
					System.out.printf("Solution x%d: -%f\n", solutionNumber++, Math.sqrt(x1));
				}
				if (x2 == 0) {
					System.out.printf("Solution x%d: 0\n", solutionNumber++);
				} else if (x2 > 0) {
					System.out.printf("Solution x%d: %f\n", solutionNumber++, Math.sqrt(x2));
					System.out.printf("Solution x%d: -%f\n", solutionNumber++, Math.sqrt(x2));
				}
				if (x1 < 0 && x2 < 0) {
					System.out.println("No real solution for Biquadratic equation !");
				}
			} else {
				System.out.printf("Solution x%d: %f\n", solutionNumber++, x1);
				System.out.printf("Solution x%d: %f\n", solutionNumber++, x2);
			}
		}
	}
}

import static PolyPower4.*;

public class Main {
	
	public static void main(String[] args) {
		setCoeficients(new double [] {-4,0,3,0,1});
		printCoeficients();
		System.out.println("Real degree is " + getRealPolynomialDegree());
		calculateBiquadratic();
		calculateQuadratic();
		System.out.println("For x=2: " + calculateFor(2));
	}
}

  • Харесва ми 1

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


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

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

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

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

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

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

Вход

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

Вход

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

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

  • Горещи теми в момента

  • Подобни теми

    • от Kristian Krastev
      Здравейте,
      искам да попитам ако имам това:
      JLabel time = new JLabel();
      JLabel time1 = new JLabel();
              Thread clock = new Thread() {
                  public void run() {
                      for (;;) {
                      Date date = new Date();
                      SimpleDateFormat format = new SimpleDateFormat("HH:mm:ss");
                      
                      time.setText(format.format(date));
                      time1.setText(format.format(date));
                      try {
                          sleep(1000);
                      } catch (InterruptedException e) {
                          e.printStackTrace();
                      }
                  }
              }
          };
          clock.start();
       
      как да направя на time и time1 int едното минус другото, за да ми даде разликата примерно ако time е 14:00 а time1 е 14:01 
      да ми изведе времетраене 00:01 една минута.
       
      time ще е когато се натисне един бутон а time1 когато се натисне друг бутон,и
      целта е да даде разликата в времето на натискането на бутоните.
      Благодаря предварително!
    • от Kristian Krastev
      Здравейте,
      искам да попитам ако една JTextArea чете от три файла:
      файл "A" файл "B" и файл "C"
      Имали как JTextArea примерно като прочете реда от файл "A"  реда да бъде с червен цвят,
      реда от файл "B" да бъде със син цвят а реда от файл "C" да бъде с зелен цвят.
    • от Kristian Krastev
      ако int = 0;
      и после му зададеш да дава по едно число отгоре след натискане на бутон с i++;
      как мога да запазя последното дадено число от i след рестарт на програмата?
      Примерно i++; System.out.println(i); натиснал съм 50 пъти бутона и стигнало до 50 но след рестарт пак ще започне
      от 0.
      Въпроса ми е как да продължи от 50? 
    • от Магдаленаг
      Please guys if u have time to spare I'd be extremely and beyond greatful
      Да се разработи уеб сайт по тема музикални изпълнители. 
      Сайтът трябва да съдържа поне 4 страници, всяка от които да отговаря на:
      Задължително трябва да се предвиди версия за ниска разделителна способност на екрана (800 x 600 пиксела) и реализирана с CSS; за този случай може да се използва свободно избрана и 
      независима схема за разположение, като единственото изискване е за запазване на 
      използваемостта.
      Сайтът трябва да включва всички технологии - HTML/XHTML, 
      CSS, DOM, JavaScript.
      Всички страници трябва да се валидират по HTML5. Допустимо е да има минимален брой 
      грешки от валидацията.
      Сайтът трябва да бъде придружен от документация, която да включва:
      1. Заглавна страница.
      2. Задание с посочените варианти:
      /списък на елементите :
      1. Меню, съдържащо rollover бутони, реализирано чрез JavaScript. При посочване на бутон да 
      се променят неговите цвят на фона и цвят на текста. Използването на изображения за 
      бутоните е по желание на студента.
      3. Номериран списък с римски цифри и форматиран със CSS, така че всички нечетни редове 
      да бъдат в курсив (наклонени).
      4. Неномериран списък, използващ собствено изображение подредба на елементите по 
      хоризонтал (т.е. елементите да не са на нов ред).
      6. Формуляр, съдържащ текстови полета за въвеждане на собствено име, фамилно име, email, 
      голямо поле за съобщение, избор чрез радио бутони на приоритета на съобщението –
      „нисък”, „среден” или „висок” и два бутона – „Изпрати” и „Изчисти”. Чрез CSS на 
      текстовите полета и бутоните да се зададе цвят на фона и цвят на текста./
      3. Използваните HTML и CSS код, с които е реализирана зададената схема на 
      разположение:
                            header
                        навигация
                Осн                              За
      съдържание               контакти
      4. Използваният или собствен JavaScript код. 
      5. Резултати от валидацията на отделните страници.
      6. Списък на източниците, от където е заимстван готов код, текст или снимки.
    • от Frozen11
      Здравейте,
      Имам следната задача:
      Единственото, което успях да направо дотук е страницата за вход/регистрация с две взаимно изключващи се форми. При регистрация успях да направя създаването на XML файл, но всеки път се създава нов с името на потребителя, а ми трябва един. Ще се радвам някой да откликне. Благодаря.
  • Дарение

×

Информация

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