Java :: Aufgabe #8 :: Lösung #6

6 Lösungen Lösungen öffentlich
#8

Euklidischer Algorithmus

Anfänger - Java von Jurom - 23.10.2012 um 11:49 Uhr
Erstellen Sie ein Programm, das den größten gemeinsamen Teiler zweier natürlicher Zahlen zurückgibt.
Benutzen Sie hierzu den euklidischen Algorithmus; sowohl den klassischen, als auch den modernen.
Geben Sie zum Vergleich beide Lösungen aus.
Auf ein Exception-Handling kann verzichtet werden.

Beispiele zum Lösungslayout sind beigefügt.
#6
vote_ok
von kollar (340 Punkte) - 19.12.2019 um 13:13 Uhr
Quellcode ausblenden Java-Code
import java.awt.FlowLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JTextArea;
import javax.swing.JTextField;

public class EuklidischerAlgorithmus {
	public static void main(String[] args) {
		FrEuklidischerAlg frEuklidischerAlg = new FrEuklidischerAlg("Euklidischer Algorithmus");
	}
}

class FrEuklidischerAlg extends JFrame implements ActionListener {

	JLabel lblErsteZahl = new JLabel("erste Zahl: ");
	JTextField tfErsteZahl = new JTextField(15);
	JPanel pErsteZahl = new JPanel();
	JLabel lblZweiteZahl = new JLabel("zweite Zahl: ");
	JTextField tfZweiteZahl = new JTextField(15);
	JPanel pZweiteZahl = new JPanel();
	JButton bModern = new JButton("    Modern    ");
	JButton bKlassisch = new JButton("   Klassisch   ");
	JPanel pButton = new JPanel();
	JTextArea taAusgabe = new JTextArea(20, 30);

	FrEuklidischerAlg(String titel) {
		super(titel);
		setVisible(true);
		setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		setSize(460, 600);
		setLocation(500, 200);
		setLayout(new FlowLayout(FlowLayout.RIGHT, 60, 25));

		tfErsteZahl.setHorizontalAlignment(JTextField.RIGHT);
		tfZweiteZahl.setHorizontalAlignment(JTextField.RIGHT);
		taAusgabe.setEditable(false);
		taAusgabe.setLineWrap(true);
		taAusgabe.setWrapStyleWord(true);

		bModern.addActionListener(this);
		bModern.setActionCommand("modern");
		bKlassisch.addActionListener(this);
		bKlassisch.setActionCommand("klassisch");

		pErsteZahl.add(lblErsteZahl);
		pErsteZahl.add(tfErsteZahl);
		pZweiteZahl.add(lblZweiteZahl);
		pZweiteZahl.add(tfZweiteZahl);
		pButton.add(bModern);
		pButton.add(bKlassisch);

		add(pErsteZahl);
		add(pZweiteZahl);
		add(pButton);
		add(taAusgabe);
	}

	public String berechneModern(String stZahl1, String stZahl2) {
		String stAusgabe;
		StringBuilder sbAusgabe = new StringBuilder();
		int rest = 1;
		int faktor;
		int temp;

		try {
			int zahl1 = Integer.parseInt(stZahl1);
			int zahl2 = Integer.parseInt(stZahl2);

			if (zahl1 == 0 || zahl2 == 0) {
				stAusgabe = "Es gibt keinen gemeinsamen Teiler";
				return stAusgabe;
			}

			if (zahl2 > zahl1) {
				temp = zahl1;
				zahl1 = zahl2;
				zahl2 = temp;
			}

			sbAusgabe.append("ggT (" + zahl1 + ", " + zahl2 + ")" + "\n");

			do {
				faktor = zahl1 / zahl2;
				rest = zahl1 % zahl2;
				sbAusgabe.append(zahl1 + " = " + faktor + "*" + zahl2 + "+" + rest + "\n");
				zahl1 = zahl2;
				zahl2 = rest;
			} while (rest != 0);
			sbAusgabe.append("der größte gemeinsame Teiler: " + zahl1);
			stAusgabe = sbAusgabe.toString();
		} catch (NumberFormatException e) {
			stAusgabe = "Bitte Ganzzahlen eingeben!";
		}
		return stAusgabe;
	}

	public String berechneKlassisch(String stZahl1, String stZahl2) {
		String stAusgabe;
		StringBuilder sbAusgabe = new StringBuilder();
		int differenz = 0;
		int temp;

		try {
			int zahl1 = Integer.parseInt(stZahl1);
			int zahl2 = Integer.parseInt(stZahl2);

			if (zahl1 == 0 || zahl2 == 0) {
				stAusgabe = "Es gibt keinen gemeinsamen Teiler";
				return stAusgabe;
			}

			if (zahl2 > zahl1) {
				temp = zahl1;
				zahl1 = zahl2;
				zahl2 = temp;
			}
			sbAusgabe.append("ggT (" + zahl1 + ", " + zahl2 + ")");

			do {
				sbAusgabe.append("\n" + zahl1);
				differenz = zahl1;
				do {
					sbAusgabe.append("-" + zahl2);
					differenz = differenz - zahl2;
				} while (differenz > zahl2);
				sbAusgabe.append("=" + differenz);
				zahl1 = zahl2;
				zahl2 = differenz;
			} while (differenz != 0);
			sbAusgabe.append("\n" + "der größte gemeinsame Teiler: " + zahl1);
			stAusgabe = sbAusgabe.toString();
		} catch (NumberFormatException e) {
			stAusgabe = "Bitte Ganzzahlen eingeben!";
		}

		return stAusgabe;
	}

	@Override
	public void actionPerformed(ActionEvent evt) {
		if (evt.getActionCommand().equals("modern"))
			taAusgabe.setText(berechneModern(tfErsteZahl.getText(), tfZweiteZahl.getText()));
		if (evt.getActionCommand().equals("klassisch"))
			taAusgabe.setText(berechneKlassisch(tfErsteZahl.getText(), tfZweiteZahl.getText()));
	}
}

Kommentare:

Für diese Lösung gibt es noch keinen Kommentar

Bitte melden Sie sich an um eine Kommentar zu schreiben.
Kommentar schreiben