"Napisz algorytm, który wyznacza taką parę liczb (x,y), dla których funkcja f(x,y)=Sin(x+y) osiąga maximum,przy czym liczby x,y należą do zbioru {1...10}."
Czy ktoś mi może wytłumaczyć o co chodzi w tym zadaniu bo nie za bardzo rozumie?
"Napisz algorytm, który wyznacza taką parę liczb (x,y), dla których funkcja f(x,y)=Sin(x+y) osiąga maximum,przy czym liczby x,y należą do zbioru {1...10}."
Czy ktoś mi może wytłumaczyć o co chodzi w tym zadaniu bo nie za bardzo rozumie?
Ale kto nie rozumie zadania?
Dla każdej pary liczb całkowitych x, y takich, że 1<=x,y<=10 (jest 100 możliwości) masz obliczyć sin(x+y) i wśród otrzymanych 100 liczb masz znaleźć największą.
public class sin {
public static void main(String[] args) {
for(float x=1;x<=10;x++){
for(float y=1;y<=10;y++){
if((Math.sin(x+y))>((Math.sin(x+y)-1))){
System.out.println(Math.sin(x+y));
}}
}
}
Napisałem coś takiego ,ale to nie dziala tak jak ma dzialać co mam poprawic?
Masz poprawić prawie wszystko . Dla jakich liczb nie zachodzi nierówność?
Math.sin(x+y)>Math.sin(x+y)-1
W tej chwili oprócz pętli to nie masz nic co ma związek z rozwiązaniem. De facto masz dla wszystkich możłiwych par liczb sprawdzić czy sin(x + y) ma wartość maksymalną i wypisać tę parę. Tych par liczb spełniających ten warunek może być więcej niż jedna (a na pewno będą przynajmniej dwie, bo przecież sin(1 + 2) == sin(2 + 1)). Więc musisz wyznaczyć zatem tę maksymalną wartość wyrażenia i podać/zapamiętać dla niej pary liczb dla których jest to spełnione.
Najpierw wyliczasz jaka liczba z zakresu 2-20 ma największą wartość sin() - wyjdzie ci 14 - wg mnie precomputing - to często stosowana technika.
Zostaje ci wyświetlić wszystkie pary suma których wynosi 14:
for(int x=1;x<14;++x) System.out.println(x+" "+(14-x));
jeżeli nie chcesz mieć (1,13)
oraz (13,1)
to zwyczajnie wystartuj w tej pętli od 7
_13th_Dragon napisał(a):
wyjdzie ci 14 - wg mnie precomputing - to często stosowana technika.
Co akurat w tym przypadku jest rozwiązaniem brzydkim i sztywnym, a podając jeszcze tak rozpisane rozwiązanie wątpię czy "edukacyjnie" poprawnym, zakładając, że miało go czegoś wiecej z programowania nauczyć. Nie chodzi o to konkretne rozwiązanie, ale o użyty algorytm, który trzeba przerabiać w momencie kiedy do zrobienia zostanie podana inna funkcja np. f(x,y)=cos(x+y).