Treść zadania:
Zadanie 5. (23 pkt)
Na nośniku DANE znajduje się plik tekstowy o nazwie trojkaty.txt.
W pliku tym zapisane są w oddzielnych liniach wspÛłrzędne wierzchołkÛw kilku trÛjkątÛw.
W każdej linii zapisano 6 wspÛłrzędnych odpowiadających kolejno wspÛłrzędnym wierzchołkÛw
A, B, C (xa, ya, xb, yb, xc, yc).
WspÛłrzędne wierzchołkÛw oddzielone są od siebie za pomocą co najmniej jednej spacji.
Wykonaj następujące polecenia, posługując się wybranym językiem programowania:
a) UtwÛrz funkcję obliczającą długość odcinka na bazie podanych wspÛłrzędnych.
b) UtwÛrz funkcję określającą, czy można zbudować trÛjkąt o obliczonych długościach
bokÛw.
c) UtwÛrz funkcję określającą typ tego trÛjkąta (rÛwnoboczny, rÛwnoramienny,
rÛżnoboczny).
d) UtwÛrz funkcję pozwalającą obliczyć pole dowolnego trÛjkąta.
e) Napisz program, ktÛry wczyta dane z pliku trojkaty.txt i, wykorzystując napisane
wcześniej funkcje, obliczy długości bokÛw, sprawdzi możliwość zbudowania trÛjkąta
o takich długościach bokÛw, określi rodzaj każdego trÛjkąta oraz obliczy jego pole,
a wyniki tych obliczeń wyprowadzi na ekranie oraz zapisze do pliku rezultaty.txt.
Przykład zapisu do pliku:
rÛwnoboczny Pole=16
nie można zbudować trÛjkąta
rÛżnoboczny Pole=26,25
rÛwnoramienny Pole=30.56
Pamiętaj, że ocenie podlega rÛwnież styl programowania (odpowiednie nazwy zmiennych,
stosowanie komentarzy oraz wcięć w zapisie kodu).
Do oceny oddajesz plik ............................... zawierający kompletny program (z procedurami
i funkcjami) napisanymi w wybranym przez Ciebie języku programowania oraz plik rezultaty.txt.

Mój kod:

 
/**
 * 
 * Matura 2004 zadanie 5 - Trójkąty
 *
 */
import java.io.BufferedReader;
import java.io.File;
import java.io.FileReader;
import java.io.IOException;
import java.io.PrintStream;
import java.util.ArrayList;
import java.util.StringTokenizer;

public class Trojkaty {
	public static void main(String[] args) {
		// Lista współrzędnych
		ArrayList<Double> AL = new ArrayList<Double>();
		// Lista trójkątów
		ArrayList<Trojkat> TL = new ArrayList<Trojkat>();
		try {
		    // Plik do odczytu 
			FileReader FR = new FileReader(new File("trojkaty.txt"));
			BufferedReader BF = new BufferedReader(FR);
			// Plik do zapisu
			PrintStream PS = new PrintStream("rezultaty.txt");
			String linia;
		    // Dopóki są nowe linie	
			while((linia = BF.readLine()) != null) {
		        //Rozkład lini 		
				StringTokenizer ST = new StringTokenizer(linia, " ");
				while(ST.hasMoreTokens()) {
		            // Pojedyńcza współrzedna 			
					double l = Double.parseDouble(ST.nextToken());
					AL.add(l);
				}
				// Dodanie trójkąta do listy
				TL.add(new Trojkat(AL));
				// Czyszcenie listy współrzędnych
				AL.clear();
			}
			// Zamknięcie pliku
			FR.close();
			// Wypisanie wszystkich wsłaśnosci trójkąta
			for(int i = 0; i < TL.size(); i++) {
				System.out.println("Długosci boków: "   + "\n" 
						+ "|AB|  = " + TL.get(i).DlAB   + "\n"  
						+ "|AC|  = " + TL.get(i).DlAC   + "\n"  
						+ "|CB|  = " + TL.get(i).DlBC   + "\n" 
				        + "jest  = " + TL.get(i).typ    + "\n" 
				        + "Pole: = " + TL.get(i).Pole   + "\n" 
				        + TL.get(i).CMozna              + "\n"
				        );
				// Zapis do pliku
				PS.print("|AB|  = " + TL.get(i).DlAB);
				PS.println();
				PS.print("|AC|  = " + TL.get(i).DlAC);
				PS.println();
				PS.print("|CB|  = " + TL.get(i).DlBC);
				PS.println();
				PS.print("jest  = " + TL.get(i).typ);
				PS.println();
				PS.print("Pole: = " + TL.get(i).Pole);
				PS.println();
				PS.print(TL.get(i).CMozna);
				PS.println();
				PS.println();
			}
			// Zamknięcie pliku
			PS.close();
		}
		catch(IOException e) {
			
		}
	}
}

class Trojkat {
	public Trojkat(ArrayList<Double> x) {
		// Przypisanie wartości do pól
		Xa = x.get(0);
		Ya = x.get(1);
		Xb = x.get(2);
		Yb = x.get(3);
		Xc = x.get(4);
		Yc = x.get(5);
		// Obliczanie długość odcinka |AB|
		AB();
		// Obliczanie długość odcinka |AC|
		AC();
		// Obliczanie długość odcinka |BC|
		BC();
		// Określenie typu trójkąta
		Typ();	
		// Obliczanie pla trójkąta
		Pole();
		// Sprawdzenie czy możliwe jest zbudowanie trójkąta
		CzyMozna();
	}
	
	// długość odinka ze wzoru: |AB| = sqrt((Xb-Xa)2 + (Yb-Ya)) 
	public void AB() {
		this.DlAB = Math.sqrt(Math.pow((Xb-Xa), 2) + Math.pow((Yb-Ya), 2));
	}
	public void AC() {
		this.DlAC = Math.sqrt(Math.pow((Xc-Xa), 2) + Math.pow((Yc-Ya), 2));
	}
	public void BC() {
		this.DlBC = Math.sqrt(Math.pow((Xc-Xb), 2) + Math.pow((Yc-Yb), 2));
	}
	public void Typ() {
		if(DlAB == DlAC && DlBC == DlAB) this.typ = "rownoboczny";
		else if(DlAB == DlAC || DlAB == DlBC) this.typ = "rownoramienny";
		else if(DlAB != DlAC && DlBC != DlAB) this.typ = "roznoboczny";
	}
	public void Pole() {
		if(this.typ.equalsIgnoreCase("rownoboczny")) this.Pole = (Math.pow(DlAB, 2) * Math.sqrt(3)) / 2;
		else if(this.typ.equalsIgnoreCase("roznoboczny")) this.Pole = DlAB + DlAC + DlBC / 2;
		else if(this.typ.equalsIgnoreCase("rownoramienny")) {
			double podstawa = DlAB;
			if(podstawa == DlAC) podstawa = DlBC;
			else podstawa = DlAB;
			this.Pole = (podstawa * (podstawa/2)) / 2;
		}
	}
	public void CzyMozna() {
		if(DlAB + DlAC > DlBC && DlAB + DlBC > DlAC && DlBC + DlAC > DlBC) CMozna= "Można"; 
		else CMozna = "Nie można";
	}
	public String CMozna;
	public String typ;
	public double Pole;
	public double DlAB, DlAC, DlBC;
	public double Xa, Ya, Xb, Yb, Xc, Yc;
}