Budowa trójkąta – wzór Herona

Budowa trójkąta – wzór Herona

Program: pobierający liczby z pliku „input.txt” po czym sprawdza czy da się z nich zbudować trójkąt na podstawie wzoru Herona.

Możliwe trójkąty do zbudowania zapisywane są w pliku „output.txt”.

Wykorzystane dane wejściowe:

3 4 5
51 21 2

Dane wyjściowe:

Bok 1 Bok 2 Bok 3 Pole
3.0 4.0 5.0 6.0
Suma trojkatow 1.0

Kompilator: Eclipse

Kod programu:

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.util.StringTokenizer;
public class glowna {
	//Program pobierający dane z pliku oraz sprawdzający czy z danych 
        //długości da się zbudować trójkąt (wzór Herona)
	//jeśli tak obliczane jest pole i zapis do drugiego pliku.
	public static void main(String[] args) throws IOException {
		File pliko = new File("output.txt");
		pliko.createNewFile();
		FileReader plik=new FileReader("input.txt");
		BufferedReader bufor=new BufferedReader(plik);
        FileWriter plik2 = new FileWriter("output.txt");
        BufferedWriter buforWy = new BufferedWriter(plik2);
		String linia;
		double w1,w2,w3,p=0,i=0,po;
		buforWy.write("Bok 1"+"\t"+"Bok 2"+"\t"+"Bok 3"+"\t"+"Pole"+"\r\n");
		while((linia = bufor.readLine())!=null){
			StringTokenizer token=new StringTokenizer(linia,"\t");
			w1=Double.parseDouble(token.nextToken());
			w2=Double.parseDouble(token.nextToken());
			w3=Double.parseDouble(token.nextToken());
			
			if((w1+w2>w3) && (w2+w3>w1) && (w3+w1>w2)){
				po=(w1+w2+w3)/2;
				p=Math.sqrt(po*(po-w1)*(po-w2)*(po-w3));
				p=(long)Math.rint(p*100)/100;
				i++;
				buforWy.write(w1+"\t"+w2+"\t"+w3+"\t"+p);
				buforWy.newLine();
			}
		}
		buforWy.write("Suma trojkatow "+i);
		bufor.close();
		buforWy.close();
	}
}

Słowniczek pojęć:

Wzór pozwalający obliczyć pole (S) trójkąta, jeśli znane są długości a,b,c jego boków. Wzór znany był już Archimedesowi, a jego nazwa pochodzi od Herona, w którego Metryce jest podany.