Jak poszeregować liczby od największej do najmniejszej?

0

Witam, chciałem prosić o pomoc w rozwiązaniu takiego zadania w Javie:

Napisz metodę, która jako argument przyjmie trzy liczby. Metoda powinna zwrócić true jeśli z odcinków o długości przekazanych w argumentach można zbudować trójkąt prostokątny.

Wydaje mi się, że rozchodzi się o to, żeby użyć twierdzenie Pitagorasa dla sprawdzenia jak się ma przeciwprostokątna do przyprostokątnych. Zakładając, że ktoś kto będzie wpisywał długości boków, może je sobie wpisać w dowolnej kolejności, wydaje mi się, że początek kodu powinien wyglądać następująco:

import java.util.Scanner;

public class TrojkatProstokatny {

	
	public static void main (String[]args){
	int liczba1, liczba2, liczba3;
	
Scanner pobierzLiczbe1 = new Scanner(System.in);
Scanner pobierzLiczbe2 = new Scanner(System.in);
Scanner pobierzLiczbe3 = new Scanner(System.in);

liczba1 = pobierzLiczbe1.nextInt();
liczba2 = pobierzLiczbe2.nextInt();
liczba3 = pobierzLiczbe3.nextInt();

Nie mam pojęcia natomiast co dalej. Czy wpisywać to do tablicy, a jeśli tak, to co dalej z tym robić. Czy jest może jakaś metoda, która odnajdzie mi z trzech liczb tą największą, najmniejszą i jeszcze jakieś po środku, tak żeby potem je przypisać do innych zmiennych i wykonać na nich działania?

Jeśli ktoś ma chwilę czasu, to byłbym wdzięczny za pomoc.

0

W Javie do sortowania służy Collections.sort(), ale Tobie potrzebne jest po prostu maksimum, czyli (zagnieżdżone) Math.max(). Zagnieżdżone, bo max przyjmuje dwa argumenty, a Ty masz trzy, czyli potrzebujesz zrobić coś w stylu przeciwprostokątna = max(max(a, b), c).

0

Jeśli liczby mają być intami to można tak

static boolean rightTriangle(int a, int b, int c) {
    List<Integer> t = Arrays.asList(a, b, c);
    Collections.sort(t);        
    return t.get(0) * t.get(0) + t. get(1) * t.get(1) - t.get(2) * t.get(2) == 0;
}

public static void main(String args[])
{
    Scanner s = new Scanner(System.in);
    System.out.println(rightTriangle(s.nextInt(), s.nextInt(), s.nextInt()));
}

0

Hehe, jakoś rok temu wrzuciłem takie zadanie na stronie :)

Przykładowe rozwiązanie możesz zobaczyć na githubie

0

Proszę bardzo, profesjonalne rozwiązanie:



// --------------------------------------------------------------------------
import java.util.Arrays;

public class Trojkat {
	double dlugA, dlugB, dlugC;

	Trojkat(double dlugA, double dlugB, double dlugC) {
		this.dlugA = dlugA;
		this.dlugB = dlugB;
		this.dlugC = dlugC;
	}

	public boolean czyTrojkat() {
		double[] dlugosci = new double[3];
		dlugosci[0] = dlugA;
		dlugosci[1] = dlugB;
		dlugosci[2] = dlugC;

		Arrays.sort(dlugosci);

		if (dlugosci[2] < (dlugosci[0] + dlugosci[1])) {
			return true;
		} else {
			return false;
		}
	}

}


// --------------------------------------------------------------------------
import java.util.Arrays;
import java.lang.Math;

public class TrojkatProstokatny extends Trojkat {

	TrojkatProstokatny(double dlugA, double dlugB, double dlugC) {

		super(dlugA, dlugB, dlugC);
	}

	public boolean czyTrojkatProstokatny() {
		double a, b;
		double[] dlugosci = new double[3];
		dlugosci[0] = Math.pow(dlugA, 2);
		dlugosci[1] = Math.pow(dlugB, 2);
		dlugosci[2] = Math.pow(dlugC, 2);

		Arrays.sort(dlugosci);

		a = (double) Math.round(dlugosci[2] * 100000d) / 100000d;  // zaokraglam do 5 miejsca po przecinku
		b = (double) Math.round((dlugosci[0] + dlugosci[1]) * 100000d) / 100000d;  //zaokraglam do 5 miejsca po przecinku

		if (a == b) {
			return true;
		} else {
			return false;
		}
	}

}





// --------------------------------------------------------------------------
public class JedziemyZKoksem {
 
    public static void main(String[] args) {
 
        TrojkatProstokatny t = new TrojkatProstokatny(2,2, Math.sqrt(8));
        System.out.println(t.czyTrojkatProstokatny());
    }
 
}

rozwiązanie w R:


# ---------------------------------------------
czy3Prost <- function(x){
  
  if(length(x) != 3){
    stop("trojkat ma 3 odcinki");
  }
  
  sort(x) -> x
  
  x^2 -> x
  
  if(round(x[3],2) == round(x[2] + x[1],2)){
    T
  }else{
    F
  }
  
}


# --- przyklad -------------------------------
czy3Prost(c(2,2,sqrt(8)))

0

OK. Dzięki wszystkim za pomoc, ale zajmie mi pewnie sporo czasu, przeanalizowanie wszystkiego krok po kroku, czemu to tak, a nie inaczej działa. Póki co chciałem zapytać jeszcze czemu to nie działa. Przyszło mi to chyba tuż po napisaniu posta:

import java.util.Scanner;

public class TrojkatProstokatny {

	
	public static void main (String[]args){
	int liczba1, liczba2, liczba3;
	
Scanner pobierzLiczbe1 = new Scanner(System.in);
Scanner pobierzLiczbe2 = new Scanner(System.in);
Scanner pobierzLiczbe3 = new Scanner(System.in);

liczba1 = pobierzLiczbe1.nextInt();
liczba2 = pobierzLiczbe2.nextInt();
liczba3 = pobierzLiczbe3.nextInt();

boolean prostokatny = Math.sqrt(liczba1) + Math.sqrt(liczba2) == Math.sqrt(liczba3) ||
Math.sqrt(liczba1) + Math.sqrt(liczba3) == Math.sqrt(liczba2) ||
Math.sqrt(liczba2) + Math.sqrt(liczba3) == Math.sqrt(liczba1);

if (prostokatny == true)

	System.out.println("To jest trójkąt prostokątny");
	
	else
		
		System.out.println("To nie jest trójkąt prostokątny");

}
}

Wydaje mi się że operator || jest właściwy, ale przy każdym działaniu wychodzi mi, że trójkąt nie jest prostokątny.

1

Math.sqrt liczy pierwiastek kwadratowy, nie drugą potęgę. Na razie Ty sprawdzasz, czy \sqrt{a} +\sqrt{b} = \sqrt{c}, a powinieneś czy a^2 + b^2 = c^2.

0

Fakt, teraz działa. Dzięki bardzo.

1 użytkowników online, w tym zalogowanych: 0, gości: 1