# Taschenrechner mit Bruchrechnung



## rolf.huber (22. Feb 2008)

Hallo Zusammen

Ich muss für eine Prüfungsarbeit am Montag, einen Taschenrechner mit den Grundfunktionen plus Bruchrechnen und Prozentrechnen programmieren.

Die Grundfunktionen habe ich mit Hilfe eines Tutorials erstellt und versteh es soweit auch. Leider komme ich mit dem Bruch- und dem Prozentrechnen überhaupt nicht weiter.

Ich will absolut nicht auf Mitleid oder so machen aber wenn ich die Prüfung nicht schaffe, fall ich aus dem Studium. 

Kann mir bitte jemand Helfen? Von mir aus können wir auch über eine entsprechende Bezahlung reden. Ich weiss, dass es für einen Programmierer eine absolut Einfache Sache ist. Ich bin nun mal keiner.

Vielen, Vielen Dank im Voraus.

Rolf



Hier, dass was ich schon habe:


```
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import java.awt.Font.*;


public class Calculator
{
   public static void main(String[] args)
   {
      CalculatorFrame frame = new CalculatorFrame();
      frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
      frame.setVisible(true);
   }
}
 
 class CalculatorFrame extends JFrame
{
   /**
	 * 
	 */
	private static final long serialVersionUID = 1L;

public CalculatorFrame()
   {
      setTitle("Calculator");
      CalculatorPanel panel = new CalculatorPanel();
      add(panel);
      pack();
   }
}
 
class CalculatorPanel extends JPanel
{
   /**
	 * 
	 */
	private static final long serialVersionUID = 1L;
	
public CalculatorPanel()
   {
      setLayout(new BorderLayout());
 
      result = 0;
      lastCommand = "=";
      start = true;
 
      display = new JTextArea ("0",0,0);
            
      display.setEnabled(false);
      add(display, BorderLayout.NORTH);
      
      
      ActionListener insert = new InsertAction();
      ActionListener command = new CommandAction();
 
      panel = new JPanel();
      panel.setLayout(new GridLayout(4, 5));
 
      addButton("7", insert);
      addButton("8", insert);
      addButton("9", insert);
      addButton("/", command);
      addButton("%", command);
 
      addButton("4", insert);
      addButton("5", insert);
      addButton("6", insert);
      addButton("x", command);
      addButton("X/Y", command);
 
      addButton("1", insert);
      addButton("2", insert);
      addButton("3", insert);
      addButton("-", command);
      addButton("+/-", command);
 
      addButton("0", insert);
      addButton(".", insert);
      addButton("=", command);
      addButton("+", command);
      addButton("C", command);
      
 
      add(panel, BorderLayout.CENTER);
   }
 
   private void addButton(String label, ActionListener listener)
   {
      JButton button = new JButton(label);
      button.addActionListener(listener);
      panel.add(button);
   }
 
   private class InsertAction implements ActionListener
   {
      public void actionPerformed(ActionEvent event)
      {
         String input = event.getActionCommand();
         if (start)
         {
            display.setText("");
            start = false;
         }
         if (input.equals(".") && display.getText().indexOf(".") != -1)
         {
        	 // do nothing
         }
         else
         {
        	 display.setText(display.getText() + input);
         }
      }
   }
 
   /**
    * Diese Aktion führt den mit der Taste verbundenen
    * Befehl aus. 
    */
   private class CommandAction implements ActionListener
   {
      public void actionPerformed(ActionEvent event)
      {
         String command = event.getActionCommand();
 
         // Füge den Präfix "-" an den String an wenn
         // es sich um den ersten Befehl handelt (negative Zahl)
      
         if (command.equals("C"))
         {
         	display.setText("0");
         	result = 0;
         	lastCommand = "=";
         	start = true;
         }
         else 
         {
        	 
	         if (command.equals("+/-"))
	         {
	        	 if (Double.parseDouble(display.getText()) > 0.0)
	        	 {
	        		 display.setText("-" + display.getText());
	        	 }
	        	 else
	        	 {
	        		 display.setText(display.getText().substring(1));
	        	 }
//	             result = -result;
	          }
	         else
	         {

		         if (start)
		         {
		             lastCommand = command;
		             result = Double.parseDouble(display.getText());
		         }
		         else
		         {
		        	// Berechnung ausführen
		            calculate(Double.parseDouble(display.getText()));
		            lastCommand = command;
		            start = true;
		         }
	         }
         }
      }
   }
 
   /**
    * Führt die anstehenden Berechnungen aus.
    * @param x der mit dem vorherigen Ergebnis zu berechnende Wert
    */


   public void calculate(double x)
   
   
   {
	
	   
	  if (lastCommand.equals("+")) result += x;
      
	  else if (lastCommand.equals("-")) result -= x;
    	
      else if (lastCommand.equals("x")) result *= x;
   
	  else if (lastCommand.equals("/")) result /= x;
   
      else if (lastCommand.equals("%")) result = (result * x) /100;
   
      else if (lastCommand.equals("=")) result = x;
    
	  display.setText("" + result);
	  
	  
   }
	    
	  
	  
	  
      
   
 
   private JTextArea display;
   private JPanel panel;
   private double result;
   private String lastCommand;
   private boolean start;
 
 	
}
```


----------



## Noar (22. Feb 2008)

Hi,

was genau ist denn dein Problem?
Was genau verstehst du nicht/kannst du nicht umsetzen?

Gruß,
Noar


----------



## Ariol (22. Feb 2008)

Ich versteh dein Problem nicht...

Bruch- und Prozent geht doch.

Allerdings solltest du noch eine Prüfung eintragen, damit du nicht durch 0 teilst.
EDIT: Kommt Infinity raus, ist also doch korrekt


----------



## Guest (22. Feb 2008)

Hallo 

Vielen Dank für die rasche Antwort:

Villeicht muss ich mich ein bisschen genauer ausdrücken 

Bruchrechnen sollte folgendermassen funktionieren:

1/2 + 2/3 =? -> Am Schluss sollte folgendes Resultat rauskommen: 3/6 + 4/6 = 1 1/6


Prozentrechnen sollte eigentlich gehen aber wenn ich eingebe: 20 + 10% (das wären ja 2) dann bekomme ich 30 und nicht 22.

Ich habe keine Ahnung wie man so was programmiert. Könnt Ih mir da helfen?

Merci im Voraus.


Rolf


----------



## Ariol (22. Feb 2008)

Das Bruchrechnen ist etwas komplizierter, aber gib für Prozentrechnen mal 20%10 ein, dann bekommst du 2 raus


----------



## Wildcard (22. Feb 2008)

Ariol hat gesagt.:
			
		

> Allerdings solltest du noch eine Prüfung eintragen, damit du nicht durch 0 teilst.
> EDIT: Kommt Infinity raus, ist also doch korrekt


x/0 ist aber nicht Infinite, sondern not defined


----------



## HLX (22. Feb 2008)

Beim Addieren und Subtrahieren von Brüchen brauchst du das KGV des Nenners. Dividiere das KGV durch den jeweiligen Nenner und du hast den Faktor für den entsprechenden Zähler. Anschließend kannst du die Rechenoperation durchführen.


----------



## 0x7F800000 (22. Feb 2008)

Wildcard hat gesagt.:
			
		

> x/0 ist aber nicht Infinite, sondern not defined


wirklich? 
ich meine dass es in der IEEE 754 eher so stehen würde:
[sei x>0]
x/(+0)=+∞
x/(-0)=-∞
x*(+∞)=+∞
x*(-∞)=-∞
x/(+∞)=+0
usw. solche sachen sind alle ganz gut definiert, aber:
∞/∞=NaN
0/0=NaN
∞*0=NaN
und ähnliche sachen, die sind alle undefiniert. Aber das ist doch egal, schreibt halt der Taschenrechner "NaN" hin, dann ist doch klar was gemeint ist...  :wink:


Für die addition, subtraktion, multiplikation usw. von rationalen zahlen solltest du dir gleich eine ganze klasse zusammenbasteln, die das alles beherrescht, und ordentlich kGV und ggT ausrechnen kann usw, das kann evtl schon etwas aufwendiger werden, aber ist eine gute übung  :toll:  hast ja noch ewig zeit bis montag...


----------



## Quaxli (22. Feb 2008)

> Wildcard hat folgendes geschrieben::
> 
> x/0 ist aber nicht Infinite, sondern not defined
> 
> ...



Aber schön, daß Ihr sonst keine Probleme habt


----------



## Wildcard (22. Feb 2008)

Die IEEE ist aber ein keine mathematische Instanz. Die dahinterliegende Technik interessiert den Anwender des Taschenrechners eher wenig und eine +0 will er auch nicht sehen müssen  :wink:


----------



## 0x7F800000 (22. Feb 2008)

Der Anwender des Taschenrechners wird sich nicht einmal für den taschenrechner selbst interessieren^^ Höchstens wird man da versuchen ein paar brüche zu multiplizieren und schauen ob die addition halbwegs funktioniert... kein Mensch wird da stundenlang rumsitzen, und diesen taschenrechner auf alle möglichen bugs überprüfen... Das gesamte Ding wird doch eh nur zu übungszwecken geschrieben => da drückt man drei mal auf 'ne taste und vergisst es für immer und ewig...  :bae:


----------



## Gast (28. Mrz 2008)

KGV wird beim Bruchrechnen eigentlich nicht benötigt.
Ein GV (Gemeinsames Vielfaches) reicht aus.

Addition zb.
(a/b)+(c/d) = ((a*d)+(c*b))/(b*d)

Ergebnis dann kürzen lassen.


----------



## maki (28. Mrz 2008)

^^^

:shock: 

 :autsch:


----------



## Gast (28. Mrz 2008)

@maki 

Das Posting von HLX behauptet es werde beim Bruchrechnen der KGV benötigt. Dem ist nicht so.


----------



## dumidum (16. Okt 2011)

ja finde ich auch


----------



## njans (16. Okt 2011)

Warum schreibst du in einen Thread, bei dem der letzte Post 2008 war? ???:L


----------

