# Kosinussatz-Rechner



## Jats (2. Okt 2010)

Hallo Community 

Ich habe mich heute mal hingesetzt und einfach mal drauflosprobiert ein Programm zu schreiben, das den Kosinussatz berechnen kann.

Ich hab noch nicht viel Ahnung davon, also bitte nicht hauen .
Hier sind mal meine Ansäte:


```
Import java.util.Scanner;

public class 3{

public static void main(String [] args){

System.out.println("Hallo Benutzer !");
System.out.println("Bitte geben sie ein, welcher Wert gesucht wird";
System.out.println(" und bestaetigen sie mit Enter ! (1 = a^2, 2 = b^2 und 3 = c^2) ");

    Scanner G = new Scanner(System.in);
    double gesucht = G.nextDouble();

System.out.println("Legen sie einen Wert fuer a fest:");
    Scanner A = new Scanner(System.in);
    double a = A.nextDouble();

System.out.println("Legen sie einen Wert fuer b fest:");

    Scanner B = new Scanner(System.in);
    double b = B.nextDouble();          //double radius = sc.nextDouble();

System.out.println("Legen sie einen Wert fuer c fest:");
    
    Scanner C = new Scanner(System.in);
    double c = C.nextDouble();

System.out.println("Legen sie einen Wert fuer Alpha fest:");

    Scanner D = new Scanner(System.in);
    int alpha = D.nextInt();

System.out.println("Legen sie einen Wert fuer Beta fest:");

    Scanner E = new Scanner(System.in);
    int beta = E.nextInt();

System.out.println("Legen sie einen Wert fuer Gamma fest:");

    Scanner F = newScanner(System.in);
    int gamma = F.nextInt();


double ergebnis1 = Math.pow(a,2)+Math.pow(b,2)-2*a*b*Math.cos(gamma);
double ergebnis2 = Math.pow(a,2)+Math.pow(c,2)-2*a*c*Math.cos(beta);
double ergebnis3 = Math.pow(b,2)+Math.pow(c,2)-2*b*c*Math.cos(alpha);


System.out.println("Der Cosinus-Satz mit ihren Variablen lautet:");

    if( gesucht == 3 )

{    
    
    System.out.println("c^2 = " + ergebnis1);

}

    else 

{

    System.out.println("b^2 = " + ergebnis2);
    System.out.println("b^2 = " + ergebnis3);

}


}

}

}
```

Was mir von Anfang an klar war, war, dass ich die Ausgabe am Ende nicht mit if machen kann, weil ich ja 3 Möglichkeiten habe und wenn eine nicht zutrifft, mit else ja nur nihct die richtige erkannt werden kann, sondern ich entweder beide oder gar keine Ausgeben müsste.

Ich hab es zumindest mal geschafft, die Datei von 27 auf 6 Fehler zu verbessern, aber jetzt komm ich grad nicht weiter und wüsste auch ganz gerne mal, zu was das führt ^^

Wäre nett, wenn da mal jemand drübergucken könnte 

Hier mal die Fehler:


----------



## Gast2 (2. Okt 2010)

```
public class 3 {
```
So darfst du deine Klasse nicht nennen.
Mach daraus z.b. Drei. Außerdem schreibt man variablen klein.


----------



## Jats (2. Okt 2010)

EikeB hat gesagt.:


> ```
> public class 3 {
> ```
> So darfst du deine Klasse nicht nennen.
> Mach daraus z.b. Drei. Außerdem schreibt man variablen klein.



Aah, okay 
Ich hatte die Variablen erst klein, dann dachte ich "Fuck, die Dinger werden die ganze Zeit als Fehler markiert .. ob ich als Variable keine Zahlen nehmen darf ? Nehm ich mal die Buchstaben in Groß ^^".
Gut, danke, dann probier ich das mal aus 

EDIT: Außerdem sollte man den import-Befehl klein schreiben und die Leertaste in Zeile 42 zwischen "new" und "Scanner" muss weg.


----------



## Jats (2. Okt 2010)

Gut, das Programm läuft soweit, aber ich habe ein "kleines" Problem ^^

Und zwar akzeptiert der Scanner es natürlich nicht, wenn der User bei einer unbekannten Variable nichts eingibt.
Wie bekomme ich das anders hin, sodass der merkt, wenn bei z.B. c nichts eingegeben wird, dass er auch dann automatisch den richtigen Kosinus-Satz nimmt ?
Muss ich dafür noch ein paar weitere classes schreiben, auf die dann, je nach Bedingung zurückgegriffen wird ?

*Entschuldigt bitte den Doppelpost*


----------



## JadeNinja (2. Okt 2010)

Du kannst das am ende mit den 3 fällen mit einem switch machen.
schau dir das einfach mal an:

```
switch (gesucht) { 
	case 1:
		System.out.println("c^2 = " + ergebnis1);
                break;
			
	case 2:
		System.out.println("b^2 = " + ergebnis2);
                break;
			
	case 3:
		System.out.println("b^2 = " + ergebnis3);
                break;
							
	default:
		System.out.println("Invalid Argument");
			}
```
Funktioniert eigentlich ja ganz einfach. Probiers mal aus =)


----------



## Jats (2. Okt 2010)

Alles klar, ich werd mir das gleich mal ansehen und mich dann später nochmal melden :toll:


----------



## Jats (2. Okt 2010)

K, das Prinzip ist gut, aber wenn ich jetzt erreichen will, dass das Programm automatisch dadurch, welche Variable nicht eingegeben wurde erkennt, welchen Cos-Satz es benutzen soll, wie mache ich das ?
Muss ich dann den letzten Teil mit dem switchen benutzen oder wieder mit if arbeiten ?
Kann ich das Problem lösen, indem ich hinter jede Variable, die mit einem Scanner-Befehl versehen wurde mit if eine Bedingung schreibe, sodass er dann weiß, ob und wie er weiter machen soll ?
Würde das funktionieren ?

EDIT: Hab mal was ausprobiert..


```
import java.util.Scanner;

public class Drei{

public static void main(String [] args){

System.out.println("Hallo Benutzer !");
System.out.println("Bitte geben sie ein, welcher Wert gesucht wird");
System.out.println(" und bestaetigen sie mit Enter !");

    Scanner ge = new Scanner(System.in);
    int gesucht = ge.nextInt();

if( ge == 1 )

{

System.out.println("Legen sie einen Wert fuer a fest:");
    Scanner aa = new Scanner(System.in);
    double a = aa.nextDouble();

System.out.println("Legen sie einen Wert fuer b fest:");

    Scanner bb = new Scanner(System.in);
    double b = bb.nextDouble();          

//System.out.println("Legen sie einen Wert fuer c fest:");
    
    Scanner cc = new Scanner(System.in);
    double c = cc.nextDouble();

//System.out.println("Legen sie einen Wert fuer Alpha fest:");

    Scanner dd = new Scanner(System.in);
    double alpha = dd.nextDouble();

//System.out.println("Legen sie einen Wert fuer Beta fest:");

    Scanner ee = new Scanner(System.in);
    double beta = ee.nextDouble();

System.out.println("Legen sie einen Wert fuer Gamma fest:");

    Scanner ff = new Scanner(System.in);
    double gamma = ff.nextDouble();

double ergebnis1 = Math.pow(a,2)+Math.pow(b,2)-2*a*b*Math.cos(gamma);
double ergebnis2 = Math.pow(a,2)+Math.pow(c,2)-2*a*c*Math.cos(beta);
double ergebnis3 = Math.pow(b,2)+Math.pow(c,2)-2*b*c*Math.cos(alpha);

System.out.println("Der Cosinus-Satz mit ihren Variablen lautet:");
System.out.println("c^2 = " + ergebnis1);
   
}


else

{


System.out.println("Bitte geben sie zur Ueberpruefung 2 fuer b^2 oder 3 fuer a^2 ein !");
Scanner shit = new Scanner(System.in);
int shit1 = shit.nextInt();

}

if( shit1 == 2 )

{

System.out.println("Legen sie einen Wert fuer a fest:");
    Scanner aa = new Scanner(System.in);
    double a = aa.nextDouble();

//System.out.println("Legen sie einen Wert fuer b fest:");

    Scanner bb = new Scanner(System.in);
    double b = bb.nextDouble();          

System.out.println("Legen sie einen Wert fuer c fest:");
    
    Scanner cc = new Scanner(System.in);
    double c = cc.nextDouble();

//System.out.println("Legen sie einen Wert fuer Alpha fest:");

    Scanner dd = new Scanner(System.in);
    double alpha = dd.nextDouble();

System.out.println("Legen sie einen Wert fuer Beta fest:");

    Scanner ee = new Scanner(System.in);
    double beta = ee.nextDouble();

//System.out.println("Legen sie einen Wert fuer Gamma fest:");

    Scanner ff = new Scanner(System.in);
    double gamma = ff.nextDouble();
        
System.out.println("Der Cosinus-Satz mit ihren Variablen lautet:");
System.out.println("b^2 = " + ergebnis2);

}

else 

{

//System.out.println("Legen sie einen Wert fuer a fest:");
    Scanner aa = new Scanner(System.in);
    double a = aa.nextDouble();

System.out.println("Legen sie einen Wert fuer b fest:");

    Scanner bb = new Scanner(System.in);
    double b = bb.nextDouble();          

System.out.println("Legen sie einen Wert fuer c fest:");
    
    Scanner cc = new Scanner(System.in);
    double c = cc.nextDouble();

System.out.println("Legen sie einen Wert fuer Alpha fest:");

    Scanner dd = new Scanner(System.in);
    double alpha = dd.nextDouble();

//System.out.println("Legen sie einen Wert fuer Beta fest:");

    Scanner ee = new Scanner(System.in);
    double beta = ee.nextDouble();

//System.out.println("Legen sie einen Wert fuer Gamma fest:");

    Scanner ff = new Scanner(System.in);
    double gamma = ff.nextDouble();
        
System.out.println("Der Cosinus-Satz mit ihren Variablen lautet:");
System.out.println("a^2 = " + ergebnis3);

}


}

}
```

Die Fehler sehen wie folgt aus:


----------



## Landei (2. Okt 2010)

Du kann doch immer vorher den Nutzer fragen, ob ein Wert bekannt ist...
 "Ist a bekannt (j/n)?"
... und nur bei Antwort j den Wert a abfragt.

Am elegantesten wäre wahrscheinlich eine Swing-Oberfläche mit sechs Textfeldern (a,b,c und Winkel) und einem Berechne-Button, der die leeren Felder anhand der vollen Felder auszufüllen versucht.

Nebenbei: Mit dem Kosinussatz kann man auch alle drei Winkel ausrechnen, wenn man die drei Seiten kennt.


----------



## Jats (2. Okt 2010)

Landei hat gesagt.:


> Du kann doch immer vorher den Nutzer fragen, ob ein Wert bekannt ist...
> "Ist a bekannt (j/n)?"
> ... und nur bei Antwort j den Wert a abfragt.



Stimmt .. das kann ich machen .. aber wäre halt mit noch mehr Eingaben verbunden .

"Am elegantesten wäre wahrscheinlich eine Swing-Oberfläche mit sechs Textfeldern (a,b,c und Winkel) und einem Berechne-Button, der die leeren Felder anhand der vollen Felder auszufüllen versucht."

Stimme ich zu, wobei ich noch nicht weiß, wie ich grafische Benutzeroberflächen erstelle.
Denkst du, das wäre einigermaßen machbar, oder sollte ich doch lieber weiter mit dem cmd rumprobieren ?



Landei hat gesagt.:


> Nebenbei: Mit dem Kosinussatz kann man auch alle drei Winkel ausrechnen, wenn man die drei Seiten kennt.



Ich weiß, aber ich mache das Teil für den Physikunterricht, wo wir im Moment mit Vektoren rechnen.
Da sehen die Ausgaben bei uns so aus, dass wir eben nicht immer jeden Winkel kennen.
Und ich habe um ehrlich zu sein auch keine Lust, eine nach Alpha, Beta oder Gamma umgeformte Formel des Kosinussatzes da mit einzubauen 

Aber das mit dem swing interessiert mich .. denkst du, dass ich das realisieren kann ?


----------



## Jats (2. Okt 2010)

Alles klar, ich hab hinbekommen 
Danke an alle, wart echt ne klasse Hilfe !

Für allle, die noch Probleme damit haben sollten .. 

```
import java.util.Scanner;						

public class CSC 							

{

public static void main(String [] args)

{

System.out.println("Hallo Benutzer !");
System.out.println("Bitte geben sie ein, welcher Wert gesucht wird");
System.out.println("und bestaetigen sie mit Enter !");
System.out.println("1 fuer c, 2 fuer b, 3 fuer a");
Scanner ge = new Scanner(System.in);
int gesucht = ge.nextInt();

if(gesucht == 1)

{

System.out.println("Legen sie einen Wert fuer a fest:");
	Scanner aa = new Scanner(System.in);
	double a = aa.nextDouble();

System.out.println("Legen sie einen Wert fuer b fest:");

	Scanner bb = new Scanner(System.in);
	double b = bb.nextDouble();  		

System.out.println("Legen sie einen Wert fuer Gamma fest:");

	Scanner ff = new Scanner(System.in);
	double gamma = ff.nextDouble();
        
System.out.println("Der Cosinus-Satz mit ihren Variablen lautet:");
double ergebnis1 = Math.pow(a,2)+Math.pow(b,2)-2*a*b*Math.cos(gamma);
double ergebnisc = Math.sqrt(ergebnis1);
System.out.println(ergebnisc + "cm");

}
```

und dann immer so weiter, bis ihr alle eure Bedingungen deklariert habt.


----------

