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.