Листинг 4 Abcfile.java - решение уравнения ax2+bx+c=0 с вводом данных из файла
----------------------------------------------------------------
import java.io.*; // подключаем библиотеку ввода/вывода
import java.math.*; // математическая библиотека
public class Abcfile {
// Метод, читающий вещественные числа.
// Создает исключение, если не удалось прочитать число.
private static double readDouble(StreamTokenizer st) throws Exception
{
// читаем следующую лексему из файла
st.nextToken();
// если не удалось прочитать число - создаем исключение
if (st.ttype != st.TT_NUMBER)
throw new Exception();
// возвращаем прочитанное число
return st.nval;
}
public static void main(String[] args) {
try
{
// Открываем поток для чтения из файла
DataInputStream dis = new DataInputStream(new FileInputStream(args[0]));
// инициализируем символьный поток
Reader r = new BufferedReader(new InputStreamReader(dis));
// создаем объект, разбирающий числа в открытом потоке
StreamTokenizer strt = new StreamTokenizer(r);
// указываем, что будем читать числа
strt.parseNumbers();
// считываем первое число из файла
double a = readDouble(strt);
// считываем второе число из файла
double b = readDouble(strt);
// считываем третье число из файла
double c = readDouble(strt);
double d, m, eps = 1e-8;
String Sa;
// рассматриваем различные случаи при решении уравнения
if (Math.abs(a) < eps)
if (Math.abs(b) < eps)
if (Math.abs(c) < eps)
Sa = "any solution";
else
Sa = "no solution";
else
Sa = "x1 = x2 = " + (-c / b);
else
{
if((d = b * b - 4 * a * c) < 0)
{
d = 0.5 * Math.sqrt(-d) / a;
a = -0.5 * b / a;
Sa = "x1 =" + a + " + i" + d + ", x2= " + a + " - i" + d;
}
else
{
d = 0.5 * Math.sqrt(d) / a;
a = -0.5 * b / a;
Sa = "x1 = " + (a + d) + ", x2 = " + (a - d);
}
}
System.out.println(Sa);
}
catch (Exception e)
{
System.out.println(e.toString());
return;
}
}
}