# ggT + kgV mit Visual Java



## kurisuutiina (19. Dez 2010)

Hallo Leute, hoffe jemand von euch kann mir helfen. 

In Informatik müssen wir im moment bis etwa mitte Januar ein Programm programmiert haben, als so eine Art "Projekt". Nunja.. wir müssen das Programm Visual Java verwenden. Hab schon gehört, dass das nicht so gut und veraltet sein soll..
Auf jeden Fall meine Gruppe soll ein Programm erstellen, dass den größten gemeinsamen Teiler und das kleinste gemeinsame Vielfache von zwei Zahlen berechnet.. können uns auch für eines von beiden entscheiden. Haben bisher nur mit BlueJ programmiert und wir sind leicht am verzweifeln.
Hat jemand vielleicht eine Idee?

dankeschön

kurisuutiina


----------



## Michael... (19. Dez 2010)

Programmieren kann man auch mit einem simplen Texteditor ;-)
Wo hängt's denn?
Meine Idee:
Mit dem ersten Schritt anfangen und danach erst den zweiten machen.


----------



## Haave (19. Dez 2010)

Es gibt hier im Forum schon einige Themen dazu, z.B. die hier (einfach mal die Suche benutzen):
http://www.java-forum.org/java-basics-anfaenger-themen/76889-ggt-kgv.html
http://www.java-forum.org/hausaufgaben/92007-kgv-berechnen.html

Schließe mich Michael an, woran hängt es denn? An der Mathematik dahinter? Am Umsetzen in Code?


----------



## kurisuutiina (19. Dez 2010)

Dankeschön für die Links, werden uns mal dort durcharbeiten.. und tut mir Leid, ich benutze nächstes Mal die Suche hier. ... dachte nur ich wäre schonmal in meinen verzweifelten Google-Versuchen schon auf dieses Forum gestoßen, hahaha...
an der Mathematik liegts nicht.. haben uns genug informiert, wie man sich da annähert mit dem Euklidischen Algorithmus usw., aber die Umsetzung in den Code, so dass es dann auch in Visual Java funktioniert (ohne Fehlermeldungen)..

Naja unser genaues Problem: Wir gehen von zwei zahlen aus (zahl1 und zahl2) die wollen wir zunächst dividieren, wo bei wir nur eine ganze Zahl angezeigt bekommen wollen( Bsp. 9/2 =4) danach soll das ergebnis mit zahl 2 multipliziert werden und dieses ergebnis wiederum soll von Zahl 1 subtrahiert werden....

zahl1 /zahl2 = Zahl3      Zahl3 *Zahl2 =Zahl 4     Zahl1-Zahl4 = Ergebnis

und das Problem liegt darin, dass es mit dem Abrunden bzw. keine Kommastellen angezeigt bekommen, nicht klappt und auch das Verknüpfen klappt nicht, also wenn wir Zahl3, welche schon angezeigt wird, weiter verwenden wollen


----------



## Haave (19. Dez 2010)

Wenn ihr die Kommastellen einfach abschneiden wollt, reicht es, einfach in int zu casten:

```
double d = 3.7;
int i = (int) d; // i wird danach 3 sein
```
Das rundet nicht, sondern schneidet wie gesagt einfach ab.

Es gibt auch die Funktion Math.round(), hab sie aber zugegebenermaßen noch nie benutzt


----------



## Michael... (19. Dez 2010)

kurisuutiina hat gesagt.:


> und das Problem liegt darin, dass es mit dem Abrunden bzw. keine Kommastellen angezeigt bekommen


??? da kommen keine Nachkommastellen vor, die angezeigt werden könnten?
Im Bsp 9/2  wäre das Ergebnis der Berechung letztendlich 1. Ginge auch kurz und direkt mit 9%2=> 1


----------



## kurisuutiina (19. Dez 2010)

wir haben schon nen  Ansatz für die Division:

double summe;

		summe = (Double.parseDouble(textBox1.get_Text()) / Double.parseDouble(textBox2.get_Text()));
		textBox3.set_Text(String.Format("{0:f}", (System.Double)summe));


integer/int klappt bei visual j irgendwie nicht ...
also ich habs jetzt mit: 
		int i = (int)summe;		 versucht..bekomm aber nur ne Fehlermeldung angezeigt..


----------



## kurisuutiina (19. Dez 2010)

bei unserem Ansatz für die Division, werden auch Kommastellen angezeigt.....mhm bei mir wird bei 9/2 das exakte Ergebnis (4,5) angezeigt ...


----------



## dehlen (19. Dez 2010)

das wäre der ggt:


```
/* Methode die den grössten gemeinsamen Teiler ermittelt*/ 

        private int ggt() 
        { 
                int y = zahl1;  
                int a = zahl2;  
                int rest;  
 
                while(a!=0)           // Solange a nicht 0 ist....
                { 
                        rest = y%a;  // Falls y ohne Rest durch a teilbar ist, ist a der gesuchte ggT
                        y = a;       //Falls ein Rest bei der Division von y und a bleibt, 
                        a = rest;    //ist der ggT von y und a gleich dem ggT von a und Rest
            } 
 
           return y; 
        }
```

so kannst du mir auch erklären wieso der code so aussehen muss?

wieso benutze ich 3 variablen?
Stelle dir mal die Fragen und beantworte sie dir


ZU der Divison:
Wieso macht ihr es nicht einfach so:

```
public Zweizahlen dividieren(Zweizahlen x)       //mit zweiZahlen x dividieren
  {
      return new Zweizahlen(zahl1*x.zahl2,x.zahl1*zahl2);
    }
```
... denn man dividiert indem man mit dem kehrwert multipliziert ;-)

dann könnt ihr gemütlich die werte der textboxen in die ihr die zahlen schreibt auslesen mit Integer.parseInt und per getter methode und dann einfach die ausgelesenen werte einfach eure methode durchlaufen lassen also ca so:


```
Zahl ergebnisZahl = eineZahl.dividieren(zweiteZahl);
```

Verstanden ?
wenn nicht poste doch mal ein bisschen code wie ihr jetzt versucht habt euer problem zu lösen oder male es dir auf ein blatt papier auf... meistens hilft das schon


----------



## XHelp (19. Dez 2010)

dehlen hat gesagt.:


> das wäre der ggt



Naja, da fehlen noch paar Sachen


----------



## dehlen (19. Dez 2010)

ja natürlich muss nun auch noch eine methode geschrieben werden die dann damit kürzt


```
public Bruch kuerzen() 
        { 
                int ggteilen = ggt(); 
                zahl2 = zahl2/ggteilen; 
                zahl1 = zahl1/ggteilen; 
                {return new zweiZahlen(zahl1,zahl2);}
        }
```

dachte aber das wäre klar bzw hätten sie sich das ja selber zusammenreimen können... spätestens wenn sie nur den code oben genommen hätten und gemerkt hätten bei 4/3 und 3/4 das der ggt 1 wäre =)


----------



## XHelp (19. Dez 2010)

Naja, das eher nicht. Sinnvoller weise hat ggT 2 Parameter, das sind die Zahlen für die man eben ggT ausrechnen will. Dann sollte man vllt noch darauf achten, wenn beide Zahlen 0 sind.


----------



## dehlen (19. Dez 2010)

achso ok daran hatte ich jetzt sofort nicht gedacht... hatte den code auch nicht getestet ... =)
aber ich denke für den ansatz ist es ja in ordung man muss ja ersteinmal wissen das man den dreieckstausch benötigt usw 
anhand dieser grundlage könnt ihr (threadhersteller) ja nun weiterarbeiten und den code berichtigen (mit xhelps) tipps
;-)


----------



## Landei (19. Dez 2010)

```
public static ggt(int a, int b) {
   return ggtHelper(Math.max(a,b), Math.min(a,b));
}

private static ggtHelper(int a, int b) {
   int c = a % b;
   return c == 0 ? b : ggtHelper(b, c);
}

public static kgv(int a, int b) {
   return a*b/ggt(a,b);
}
```


----------



## kurisuutiina (20. Dez 2010)

also schon mal danke 
aber bei uns klappt das irgendwie nicht....ich glaube das liegt daran, dass wir visual j# benutzen....

bei uns sieht der Quelltext folgendermaßen aus: (also der schon vom Programm her, vorgegebene Quelltext), das einzige, was wir hinzugefügt haben ist das mit dem double...



package ggt;

import System.Collections.Generic.*;
import System.Data.*;
import System.Drawing.*;
import System.ComponentModel.*;
import System.Windows.Forms.*;

/**
 * Summary description for Form1.
 */
public class Form1 extends System.Windows.Forms.Form
{
	private TextBox textBox1;
	private TextBox textBox2;
	private TextBox textBox3;
	private Button button1;
	private TextBox textBox4;
	private Button button2;
	private TextBox textBox5;
	private TextBox textBox6;
	private TextBox textBox7;
	/**
	 * Required designer variable.
	 */
	private System.ComponentModel.IContainer components;

	public Form1()
	{
		//
		// Required for Windows Form Designer support
		//
		InitializeComponent();

		//
		// TODO: Add any constructor code after InitializeComponent call
		//
	}

	#region Windows Form Designer generated code
	/**
     * Clean up any resources being used.
     */
	protected void Dispose(boolean disposing)
	{
		if (disposing)
		{
			if (components != null)
			{
				components.Dispose();
			}
		}
		super.Dispose(disposing);
	}

	/**
	 * Required method for Designer support - do not modify
	 * the contents of this method with the code editor.
	 */
	private void InitializeComponent()
	{
		this.textBox1 = new System.Windows.Forms.TextBox();
		this.textBox2 = new System.Windows.Forms.TextBox();
		this.textBox3 = new System.Windows.Forms.TextBox();
		this.button1 = new System.Windows.Forms.Button();
		this.textBox4 = new System.Windows.Forms.TextBox();
		this.button2 = new System.Windows.Forms.Button();
		this.textBox5 = new System.Windows.Forms.TextBox();
		this.textBox6 = new System.Windows.Forms.TextBox();
		this.textBox7 = new System.Windows.Forms.TextBox();
		this.SuspendLayout();
		// 
		// textBox1
		// 
		this.textBox1.set_Location(new System.Drawing.Point(12, 29));
		this.textBox1.set_Name("textBox1");
		this.textBox1.set_Size(new System.Drawing.Size(100, 20));
		this.textBox1.set_TabIndex(0);
		this.textBox1.add_TextChanged(new System.EventHandler(this.textBox1_TextChanged));
		// 
		// textBox2
		// 
		this.textBox2.set_Location(new System.Drawing.Point(12, 79));
		this.textBox2.set_Name("textBox2");
		this.textBox2.set_Size(new System.Drawing.Size(100, 20));
		this.textBox2.set_TabIndex(1);
		this.textBox2.add_TextChanged(new System.EventHandler(this.textBox2_TextChanged));
		// 
		// textBox3
		// 
		this.textBox3.set_Location(new System.Drawing.Point(12, 118));
		this.textBox3.set_Name("textBox3");
		this.textBox3.set_Size(new System.Drawing.Size(100, 20));
		this.textBox3.set_TabIndex(2);
		this.textBox3.add_TextChanged(new System.EventHandler(this.textBox3_TextChanged));
		// 
		// button1
		// 
		this.button1.set_Location(new System.Drawing.Point(12, 164));
		this.button1.set_Name("button1");
		this.button1.set_Size(new System.Drawing.Size(75, 23));
		this.button1.set_TabIndex(3);
		this.button1.set_Text("button1");
		this.button1.set_UseVisualStyleBackColor(true);
		this.button1.add_Click(new System.EventHandler(this.button1_Click));
		// 
		// textBox4
		// 
		this.textBox4.set_Location(new System.Drawing.Point(180, 118));
		this.textBox4.set_Name("textBox4");
		this.textBox4.set_Size(new System.Drawing.Size(100, 20));
		this.textBox4.set_TabIndex(4);
		this.textBox4.add_TextChanged(new System.EventHandler(this.textBox4_TextChanged));
		// 
		// button2
		// 
		this.button2.set_Location(new System.Drawing.Point(216, 180));
		this.button2.set_Name("button2");
		this.button2.set_Size(new System.Drawing.Size(53, 36));
		this.button2.set_TabIndex(5);
		this.button2.set_Text("button2");
		this.button2.set_UseVisualStyleBackColor(true);
		this.button2.add_Click(new System.EventHandler(this.button2_Click));
		// 
		// textBox5
		// 
		this.textBox5.set_Location(new System.Drawing.Point(180, 79));
		this.textBox5.set_Name("textBox5");
		this.textBox5.set_Size(new System.Drawing.Size(100, 20));
		this.textBox5.set_TabIndex(6);
		// 
		// textBox6
		// 
		this.textBox6.set_Location(new System.Drawing.Point(180, 29));
		this.textBox6.set_Name("textBox6");
		this.textBox6.set_Size(new System.Drawing.Size(100, 20));
		this.textBox6.set_TabIndex(7);
		// 
		// textBox7
		// 
		this.textBox7.set_Location(new System.Drawing.Point(180, 154));
		this.textBox7.set_Name("textBox7");
		this.textBox7.set_Size(new System.Drawing.Size(100, 20));
		this.textBox7.set_TabIndex(8);
		// 
		// Form1
		// 
		this.set_AutoScaleDimensions(new System.Drawing.SizeF(6F, 13F));
		this.set_AutoScaleMode(System.Windows.Forms.AutoScaleMode.Font);
		this.set_ClientSize(new System.Drawing.Size(292, 266));
		this.get_Controls().Add(this.textBox7);
		this.get_Controls().Add(this.textBox6);
		this.get_Controls().Add(this.textBox5);
		this.get_Controls().Add(this.button2);
		this.get_Controls().Add(this.textBox4);
		this.get_Controls().Add(this.button1);
		this.get_Controls().Add(this.textBox3);
		this.get_Controls().Add(this.textBox2);
		this.get_Controls().Add(this.textBox1);
		this.set_Name("Form1");
		this.set_Text("Form1");
		this.ResumeLayout(false);
		this.PerformLayout();

	}
	#endregion

	private void textBox1_TextChanged(Object sender, System.EventArgs e)
	{

	}

	private void textBox2_TextChanged(Object sender, System.EventArgs e)
	{

	}

	private void textBox3_TextChanged(Object sender, System.EventArgs e)
	{

	}

	private void button1_Click(Object sender, System.EventArgs e)
	{
		double summe;
		int i = (int) summe  ;		
		summe = (Double.parseDouble(textBox1.get_Text()) / Double.parseDouble(textBox2.get_Text()));
		textBox3.set_Text(String.Format("{0:f}", (System.Double)summe));
		Math.floor((summe));
		double summe1;
		summe1 = summe * Double.parseDouble(textBox2.get_Text()); ; textBox3.set_Text(String.Format("{0:f}", (System.Double)summe));


}

	private void textBox4_TextChanged (Object sender, System.EventArgs e)
	{

	}

	private void button2_Click(Object sender, System.EventArgs e)
	{

	}
}



und wenn ich da jetzt irgendwo, private oder public hinzufüge, bekomme ich ne Fehlermeldung: "Unexpected private/public", "Syntax error" ....
Wir haben schon sooo vieles ausprobiert und nichts klapppttt ! Vor allem int erkennt dieses Programm komischerweise nicht bzw. erscheinen immer wieder Fehlermeldungen.


----------



## Haave (20. Dez 2010)

Moment mal… J#? Visual J Sharp?
Das ist nicht Java, sondern eine Programmiersprache von Microsoft (die eingestellt wurde, soweit ich weiß).

EDIT:
Ne, J++ war die Microsoft-Sprache, die eingestellt wurde, J# gibt's weiterhin. Dennoch gilt: J# ist nicht Java, sondern lediglich davon inspiriert.
Irgendwie ergibt das aber alles keinen Sinn, wenn ihr vorher mit BlueJ programmiert habt (was ja afaik für Java gedacht ist), jetzt aber J# macht… ???:L


----------



## Landei (20. Dez 2010)

Übrigens: Code wird mit Java-Tags viel hypscher...


----------



## kurisuutiina (20. Dez 2010)

ich weiß auch nicht, wir haben zu erst mit BlueJ gearbeitet, sind dann aber auf J# umgestiegen, weil es anscheinend objektivorientierter ist (also mit buttons und so)...

ja das doofe ist halt, dass wir im i-net nur Sachen zu Jave finden, die bei visual j# aber nicht funktionieren, daher sind wir auch so am Verzweifeln....


----------

