// если не удалось прочитать число - создаем исключение
if (st.ttype != st.TT_NUMBER)
throw new Exception();
// возвращаем прочитанное число
return st.nval;
}
public ab5(){
// Создаем окно с размещенными на нем элементами меню...
super("Quadratic. (c) 2006. Ivan Khramkov.");
// Устанавливает цвет фона для апплета
super.setBackground(new Color(120,181,202));
// Устанавливаем абсолютное позицирование компонентов внутри апплета
super.setLayout(null);
MenuBar mbar;
MenuItem exit,open,help;
mbar = new MenuBar();
super.setMenuBar(mbar);
// Устанавливаем размер и расположение окна
super.setSize(599,153);
super.setLocation(233,233);
// Создаем меню File с пунктами Open, Help, Quit
Menu file = new Menu("File");
open=new MenuItem("Open");
help=new MenuItem("Help");
exit=new MenuItem("Quit...");
// Открываем прослушиватель
open.addActionListener(this);
// Добавляем прослушиватель
exit.addActionListener(this);
// событий для
help.addActionListener(this);
// каждого пункта меню...
file.add(open);
file.add(help);
file.add("-");
file.add(exit);
mbar.add(file);
// Добавляем прослушиватель событий окна для нашего окна...
addWindowListener(this);
setVisible(true);
}
public static void main(String[] args)
{ab5 f=new ab5(); //Создаем объект-окно...
}
// Событие при попытке закрыть окно...
public void windowClosing(WindowEvent we){
dispose(); System.exit(0); }
// Метод для вывода графики в окне
public void paint(Graphics g){
// Установка цвета
g.setColor(new Color(120,181,202));
// Заполнение прямоугольника
g.fillRect(0,0,533,333);
// Установка черного цвета
g.setColor(Color.black);
// Вывод строки
g.drawString(Sa,9,53); }
//
public void actionPerformed(ActionEvent ae){
Graphics g=getGraphics();;
String str=(String)ae.getActionCommand();
if (str.equals("Open")){
//Если выбрали пункт меню "Open"...
i=0; opener=new FileDialog(this);
// Вызываем окно
opener.setVisible(true);
// для открытия файла...
String what;
if(opener.getFile()!=null)
{
what=opener.getDirectory()+
opener.getFile();
// Фиксируем путь и имя выбранного файла.../
try {data(what,0);}
catch (Exception re){
Sa="Your output Error is: "+re.getMessage();
System.out.println("Your input Error is: "+
re.getMessage());
}
what=opener.getDirectory()+"Score.txt";
try{data(what,1);}
catch (Exception re){
Sa="Your output Error is: "+re.getMessage();
System.out.println("Your output Error is: "+
re.getMessage());
}
}
}
else
if(str.equals("Help")){
//Если выбрали пункт меню "Help"...
g.setColor(new Color(120,181,202));
g.fillRect(0,0,533,333);
g.setColor(Color.black);
g.drawString("Click on OPEN menu item and choose file, where constants a,b,c should be.",33,53);
g.drawString("After that, you will see the solution of quadratic, you needed to solve.",33,73);
g.drawString("If you want to save results, you can open text file,",33,93);
g.drawString(" named Score.txt, situated in such directory as this program.",33,113);
}
else {dispose(); System.exit(0);}
}
// Функция data(String path,int mode) - служит для записи
// и чтения информации из определенных файлов...
// Здесь: path - путь и имя файла, mode - сущность работы.
//Принимает 2 значения:
// 0 - если нужно считать информацию...
// 1 - если записать информацию...
public void data(String path,int mode) throws Exception {
if (mode==0) {
try
{
// Открываем поток для чтения из файла
DataInputStream dis = new DataInputStream(new FileInputStream(path));
// инициализируем символьный поток
Reader r = new BufferedReader(new InputStreamReader(dis));
// создаем объект, разбирающий числа в открытом потоке
StreamTokenizer strt = new StreamTokenizer(r);
// указываем, что будем читать числа
strt.parseNumbers();
// считываем коэффициент A
a = readDouble(strt);
// считываем коэффициент B
b = readDouble(strt);
// считываем коэффициент C
c = readDouble(strt);
}
catch (Exception e)
{
// выдаем сообщение об ошибке
Sa="Your output Error is: "+e.getMessage();
System.out.println("Your output Error is: "+
e.getMessage());
}
}
else
{
// Объявление файловой переменной для записи в файл...
Writer outp=new FileWriter(path);
int j;
getVal(a,b,c);
try{
for(j=0;j<Sa.length();j++)
outp.write(Sa.charAt(j));
outp.write("\n");
outp.close();
}
catch(Exception e){
// выдаем сообщение об ошибке
Sa="Your output Error is: "+e.getMessage();
System.out.println("Your output Error is: "+
e.getMessage());
}
}
}
// Решение уравнения ax2+bx+c=0
// Ответ присваивается строковой переменной Sa, которая потом
// пишется в файл и выводится на отображение в окне...
public void getVal (double a,double b,double c){
double d, m, eps = 1e-8;
int i;
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);
}
}
}
// Функции обработки событий окна...
public void windowOpened(WindowEvent we){}
public void windowClosed(WindowEvent we){}
public void windowActivated(WindowEvent we){}
public void windowIconified(WindowEvent we){}
public void windowDeactivated(WindowEvent we){}
public void windowDeiconified(WindowEvent we){}
}
При запуске программы ab5 появляется окошко с опцией File, в которой выбрав Open и выбрав имя заранее подготовленного файла с данными (например, ab5.data cо строкой 1 –5 6) получаем указанный выше результат.