Rambler's Top100

Исходный файл CUPCalc.java (все изменения выделены):
P.S. Это довольно-таки жульническое решение этой задачи. Те, кто поняли, что я имею в виду молодцы, а кто не понял, то вам лучше и не понимать.

/**
 * Calculator of ariphmetic expressions
 * Uses CUP (Java version of YACC) technology
 */
import java.awt.*;
import java.awt.event.*;
import java.applet.Applet;
import java_cup.runtime.*;  // CUP runtime environment
import parser;  // Parser generated by CUP from the file "CUPCalc.cup"
public class CUPCalc extends Applet {
//
//----------------------------------------------------------------------
    Button derivativeButton;
//----------------------------------------------------------------------
//
    TextField expression;
    TextField result;
//
//-----------------------------------------------------------------------------
    TextField point;
//-----------------------------------------------------------------------------
//
    // Layout constants
    static final int margin         = 5;
    static final int headlineHeight = 30;
    static final int vertSkip       = 5;
    static final int horSkip        = 5;
    static final int labelWidth     = 80;
    static final int textWidth      = 300;
    static final int buttonWidth    = 80;
    static final int buttonHeight   = 30;
    public static void main(String[] args) {
        Frame f = new Frame("CUP Calculator");
        WindowAdapter wa = new WindowAdapter() {
            public void windowClosing(WindowEvent e) {
                System.exit(0);
            }
        };
        f.addWindowListener(wa);
        f.setFont(new Font("Helvetica", Font.PLAIN, 14));
        // Add menu bar
        final MenuBar mb = new MenuBar();
        f.setMenuBar(mb);
        final Menu fileMenu = new Menu("File");
        final MenuItem quitItem = new MenuItem("Quit");
        fileMenu.add(quitItem);
        mb.add(fileMenu);
        ActionListener al = new ActionListener() {
            public void actionPerformed(ActionEvent e) {
                // System.out.println("Action " + e);
                if (e.getActionCommand().equals("Quit")) {
                    System.exit(0);
                }
            }
        };
        fileMenu.addActionListener(al);
        CUPCalc cc = new CUPCalc();
        f.add("Center", cc);
//         f.pack();
        f.setSize(
            2*margin + labelWidth + horSkip + textWidth + 10+100,
            2*margin + headlineHeight + 3*buttonHeight + 3*vertSkip + 50+100
        );
        cc.init();
        cc.start();
        f.setVisible(true);
    }
    public void init() {
        setLayout(null);
        setFont(new Font("Helvetica", Font.PLAIN, 14));
        setBackground(Color.lightGray);
//
//-----------------------------------------------------------------
        Label headline = new Label("Calculates the Derivative in Point");
//-----------------------------------------------------------------
//
        headline.setFont(new Font("TimesRoman", Font.BOLD, 18));
        add(headline);
        int x = margin;
        int y = margin;
        headline.setBounds(x, y, 300, 30);
        y += headlineHeight + vertSkip;
        Label l = new Label("Expression:");
        add(l);
        l.setBounds(x, y, labelWidth, buttonHeight);
        x += labelWidth + horSkip;
        expression = new TextField();
        add(expression);
        expression.setBounds(x, y, textWidth, buttonHeight);
        y += buttonHeight + vertSkip;
        x = margin;
//
//-----------------------------------------------------------------------------
        Label p = new Label("Point");
        add(p);
        p.setBounds(x, y, labelWidth, buttonHeight);
        x += labelWidth + horSkip;
        point = new TextField();
        add(point);
        point.setBounds(x, y, textWidth, buttonHeight);
        y += buttonHeight + vertSkip;
        derivativeButton = new Button("Derivative");
        add(derivativeButton);
        x += (textWidth - buttonWidth);
        derivativeButton.setBounds(x, y, buttonWidth, buttonHeight);
        y += buttonHeight + vertSkip;
        x = margin;
//----------------------------------------------------------------
//
        l = new Label("Result:");
        add(l);
        l.setBounds(x, y, labelWidth, buttonHeight);
        x += labelWidth + horSkip;
        result = new TextField();
        result.setEditable(false);
        add(result);
        result.setBounds(x, y, textWidth, buttonHeight);
        result.setForeground(Color.blue);
        // Add action listener for "Expression" text field
        // (for processing of the "Enter" button) and "Derivative" button
        ActionListener al = new ActionListener() {
            public void actionPerformed(ActionEvent e) {
                Object source = e.getSource();
                if (source == derivativeButton){
                    onDerivative();
                }
            }
        };
        expression.addActionListener(al);
        derivativeButton.addActionListener(al);
    }
//
//-----------------------------------------------------------------------------
    void onDerivative() {
        double c = 0.000001;
	double point2 = 0;
        double x2 = (double)onEvaluate(point.getText());
	point2 = Double.valueOf(point.getText()).doubleValue()+c;
        double x1 = (double)onEvaluate(""+point2);
        result.setText(""+((x1-x2)/c) );
    }
    // Evaluate an expression
    double onEvaluate(String po) {
        parser parser_obj = new parser();
        int k = 0;
        try {
            double x = Double.valueOf(po).doubleValue();
        }  catch (NumberFormatException e) {
            return 0.;
        }
        String str = expression.getText();
        String str2 = "";
        String result = "";
        while (k<str.length()) {
            if (str.charAt(k) != 'x') {
		str2 += str.charAt(k);
            } else {
		str2 += po;
	    }
            k++;
        }
        parser_obj.setParsingLine(str2);
        try {
            // Parse a line
            Symbol s = parser_obj.parse();
            if (s != null && s.value != null) {
                result=""+s.value;
                return Double.valueOf(result).doubleValue();
            } else {
                expression.setText("Syntax error");
		return 0.;
            }
        } catch (Exception e) {
            //... System.err.println("" + e);
            expression.setText("Syntax error");
	    return 0.;
        }
    }
//---------------------------------------------------------------
//
}
Хостинг от uCoz