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
2116384

Du scheinst einen AdBlocker zu nutzen. Ich würde mich freuen, wenn du ihn auf dieser Seite deaktivierst und dich davon überzeugst, dass die Werbung hier nicht störend ist.