import javax.swing.*; import java.awt.*; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.io.*; public class Program extends JFrame { public Program() { super("Kalkulator liczb zespolonych"); setSize(400, 700); setLayout(new GridLayout(13, 1)); setDefaultCloseOperation(EXIT_ON_CLOSE); setVisible(true); JPanel rez1 = new JPanel(); rez1.setLayout(new GridLayout(1, 2)); JLabel rzecz1 = new JLabel("Część rzeczywista z1: "); rez1.add(rzecz1); JTextField rzecz1Pole = new JTextField(); rez1.add(rzecz1Pole); add(rez1); JPanel imz1 = new JPanel(); imz1.setLayout(new GridLayout(1, 2)); JLabel uro1 = new JLabel("Część urojona z1: "); imz1.add(uro1); JTextField uro1Pole = new JTextField(); imz1.add(uro1Pole); add(imz1); JPanel rez2 = new JPanel(); rez2.setLayout(new GridLayout(1, 2)); JLabel rzecz2 = new JLabel("Część rzeczywista z2: "); rez2.add(rzecz2); JTextField rzecz2Pole = new JTextField(); rez2.add(rzecz2Pole); add(rez2); JPanel imz2 = new JPanel(); imz2.setLayout(new GridLayout(1, 2)); JLabel uro2 = new JLabel("Część urojona z2: "); imz2.add(uro2); JTextField uro2Pole = new JTextField(); imz2.add(uro2Pole); add(imz2); JLabel info = new JLabel("Obliczenia dla jednej liczby zespolonej wykonywane są dla z1"); add(info); JPanel operacje1 = new JPanel(); operacje1.setLayout(new GridLayout(1, 4)); JButton dodawanie = new JButton("+"); operacje1.add(dodawanie); JButton odejmowanie = new JButton("-"); operacje1.add(odejmowanie); JButton mnozenie = new JButton("*"); operacje1.add(mnozenie); JButton dzielenie = new JButton("/"); operacje1.add(dzielenie); add(operacje1); JPanel operacje2 = new JPanel(); operacje2.setLayout(new GridLayout(1, 4)); JButton mod = new JButton("MOD"); operacje2.add(mod); JButton arg = new JButton("ARG"); operacje2.add(arg); JButton pt = new JButton("PT"); operacje2.add(pt); JButton pw = new JButton("PW"); operacje2.add(pw); add(operacje2); JPanel pierwiastek = new JPanel(); pierwiastek.setLayout(new GridLayout(1,3)); JButton przycisk = new JButton("Pierwiastek"); JLabel napis = new JLabel(" stopnia "); JTextField stopienPierwiastka = new JTextField(); pierwiastek.add(przycisk); pierwiastek.add(napis); pierwiastek.add(stopienPierwiastka); add(pierwiastek); JPanel potega = new JPanel(); potega.setLayout(new GridLayout(1,3)); JButton przycisk1 = new JButton("Potęga"); JLabel napis1 = new JLabel(" o wykładniku "); JTextField wykladnikPotegi = new JTextField(); potega.add(przycisk1); potega.add(napis1); potega.add(wykladnikPotegi); add(potega); add(new JLabel("MOD - moduł liczby zespolonej")); add(new JLabel("ARG - argument liczby zespolonej")); add(new JLabel("PT - postać trygonometryczna")); add(new JLabel("PW - postać wykładnicza")); dodawanie.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { String real1 = rzecz1Pole.getText(); String imag1 = uro1Pole.getText(); String real2 = rzecz2Pole.getText(); String imag2 = uro2Pole.getText(); try { double a = Double.parseDouble(real1); double b = Double.parseDouble(imag1); double c = Double.parseDouble(real2); double d = Double.parseDouble(imag2); double rzeczWyniku = a + c; double uroWyniku = b + d; if (uroWyniku < 0.0) { JOptionPane.showMessageDialog(null, "" + rzeczWyniku + uroWyniku + "i"); } else { JOptionPane.showMessageDialog(null, "" + rzeczWyniku + "+" + uroWyniku + "i"); } } catch (NumberFormatException ex) { JOptionPane.showMessageDialog(null, "Któryś z podanych argumentów nie jest liczbą"); } } }); odejmowanie.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { String real1 = rzecz1Pole.getText(); String imag1 = uro1Pole.getText(); String real2 = rzecz2Pole.getText(); String imag2 = uro2Pole.getText(); try { double a = Double.parseDouble(real1); double b = Double.parseDouble(imag1); double c = Double.parseDouble(real2); double d = Double.parseDouble(imag2); double rzeczWyniku = a - c; double uroWyniku = b - d; if (uroWyniku < 0.0) { JOptionPane.showMessageDialog(null, "" + rzeczWyniku + uroWyniku + "i"); } else { JOptionPane.showMessageDialog(null, "" + rzeczWyniku + "+" + uroWyniku + "i"); } } catch (NumberFormatException ex) { JOptionPane.showMessageDialog(null, "Któryś z podanych argumentów nie jest liczbą"); } } }); mnozenie.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { String real1 = rzecz1Pole.getText(); String imag1 = uro1Pole.getText(); String real2 = rzecz2Pole.getText(); String imag2 = uro2Pole.getText(); try { double a = Double.parseDouble(real1); double b = Double.parseDouble(imag1); double c = Double.parseDouble(real2); double d = Double.parseDouble(imag2); double rzeczWyniku = a * c - b * d; double uroWyniku = b * c + a * d; if (uroWyniku < 0.0) { JOptionPane.showMessageDialog(null, "" + rzeczWyniku + uroWyniku + "i"); } else { JOptionPane.showMessageDialog(null, "" + rzeczWyniku + "+" + uroWyniku + "i"); } } catch (NumberFormatException ex) { JOptionPane.showMessageDialog(null, "Któryś z podanych argumentów nie jest liczbą"); } } }); dzielenie.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { String real1 = rzecz1Pole.getText(); String imag1 = uro1Pole.getText(); String real2 = rzecz2Pole.getText(); String imag2 = uro2Pole.getText(); try { double a = Double.parseDouble(real1); double b = Double.parseDouble(imag1); double c = Double.parseDouble(real2); double d = Double.parseDouble(imag2); if(!(c==0.0 && d==0)){ double rzeczWyniku = (a * c + b * d) / (c * c + d * d); double uroWyniku = (b * c - a * d) / (c * c + d * d); if (uroWyniku < 0.0) { JOptionPane.showMessageDialog(null, "" + rzeczWyniku + uroWyniku + "i"); } else { JOptionPane.showMessageDialog(null, "" + rzeczWyniku + "+" + uroWyniku + "i"); }} else { JOptionPane.showMessageDialog(null, "Nie można dzielić przez 0"); } } catch (NumberFormatException ex) { JOptionPane.showMessageDialog(null, "Któryś z podanych argumentów nie jest liczbą"); } } }); mod.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { String real = rzecz1Pole.getText(); String imag = uro1Pole.getText(); try { double a = Double.parseDouble(real); double b = Double.parseDouble(imag); JOptionPane.showMessageDialog(null, (a * a + b * b)); } catch (NumberFormatException ex) { JOptionPane.showMessageDialog(null, "Któryś z podanych argumentów nie jest liczbą"); } } }); arg.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { String real = rzecz1Pole.getText(); String imag = uro1Pole.getText(); try { double a = Double.parseDouble(real); double b = Double.parseDouble(imag); if (!(a == 0.0 && b == 0.0)) { JOptionPane.showMessageDialog(null, Math.asin(b / (a * a + b * b))); } else { JOptionPane.showMessageDialog(null, "Nie można wyznaczyć argumentu dla 0"); } } catch (NumberFormatException ex) { JOptionPane.showMessageDialog(null, "Któryś z podanych argumentów nie jest liczbą"); } }}); pt.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { String real = rzecz1Pole.getText(); String imag = uro1Pole.getText(); try { double a = Double.parseDouble(real); double b = Double.parseDouble(imag); if(!(a==0.0 && b==0.0)) { double mod = a*a + b*b; double arg = b/(a*a + b*b); JOptionPane.showMessageDialog(null, mod+"(cos"+arg+" " + "+" + " " + "i*sin" + arg + ")"); } else { JOptionPane.showMessageDialog(null, "Nie jest możliwe wyznaczenie postaci trygonometrycznej"); } } catch (NumberFormatException ex) { JOptionPane.showMessageDialog(null, "Któryś z podanych argumentów nie jest liczbą"); } } }); pw.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { String real = rzecz1Pole.getText(); String imag = uro1Pole.getText(); try { double a = Double.parseDouble(real); double b = Double.parseDouble(imag); if(!(a==0.0 && b==0.0)) { double mod = a*a + b*b; double arg = b/(a*a + b*b); JOptionPane.showMessageDialog(null, mod+"*"+"e^(i*"+arg+")"); } else { JOptionPane.showMessageDialog(null, "Nie jest możliwe wyznaczenie postaci wykładniczej"); } } catch (NumberFormatException ex) { JOptionPane.showMessageDialog(null, "Któryś z podanych argumentów nie jest liczbą"); } } }); przycisk.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { String real = rzecz1Pole.getText(); String imag = uro1Pole.getText(); try { double a = Double.parseDouble(real); double b = Double.parseDouble(imag); int st = Integer.parseInt(stopienPierwiastka.getText()); if(st <= 0) { throw new NumberFormatException(); } else if (a==0 && b==0) { JOptionPane.showMessageDialog(null, "0.0"); } else { File plik = new File("wynik.txt"); boolean x = plik.createNewFile(); PrintWriter strumien = new PrintWriter("wynik.txt"); plik.deleteOnExit(); JOptionPane.showMessageDialog(null,"Sprawdź plik wynik.txt przed zamknięciem kalkulatora"); double arg = Math.asin(b/(a*a+b*b)); double pierwZMod = Math.pow(a*a+b*b, (double)1/st); double czescRzecz; double czescUro; for (int i = 0; i < st; i++) { czescRzecz = pierwZMod*Math.cos((arg+2*i*Math.PI)/st); czescUro = pierwZMod*Math.sin((arg+2*i*Math.PI)/st); if(czescUro < 0.0) { strumien.println(czescRzecz + czescUro + "i\n\n"); } else { strumien.println(czescRzecz + "+" + czescUro + "i\n\n"); } } strumien.close(); } } catch (NumberFormatException ex) { JOptionPane.showMessageDialog(null, "Któryś z podanych argumentów nie jest liczbą \nlub stopień pierwiastka nie jest liczbą naturalną"); } catch (IOException ex1) { JOptionPane.showMessageDialog(null, "Nie można utworzyć pliku"); } } }); przycisk1.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { String real = rzecz1Pole.getText(); String imag = uro1Pole.getText(); try { double a = Double.parseDouble(real); double b = Double.parseDouble(imag); int st = Integer.parseInt(wykladnikPotegi.getText()); if(st < 0) { throw new NumberFormatException(); } else if (st==0) { JOptionPane.showMessageDialog(null, "1.0"); } else if (a==0 && b==0) { JOptionPane.showMessageDialog(null, "0.0"); } else { double arg = Math.asin(b/(a*a+b*b)); double potZMod = Math.pow(a*a+b*b, (double)st); double czescRzecz = potZMod*Math.cos((double)st*arg); double czescUro = potZMod*Math.sin((double)st*arg); if(czescUro < 0.0) { JOptionPane.showMessageDialog(null,czescRzecz + czescUro + "i"); } else { JOptionPane.showMessageDialog(null,czescRzecz + "+" + czescUro + "i"); } } } catch (NumberFormatException ex) { JOptionPane.showMessageDialog(null, "Któryś z podanych argumentów nie jest liczbą \nlub wykładnik potęgi nie jest liczbą całkowitą dodatnią"); } } }); } public static void main(String[] args) { EventQueue.invokeLater(new Runnable() { @Override public void run() { new Program(); } }); } }