Autor |
Beitrag |
interessierter
      
Beiträge: 75
|
Verfasst: So 06.05.12 14:38
Hallo Zusammen
Ich arbeite an einem recht umfangreichen Übungsprogramm wo es unter anderem um die Berechnung von Dreiecken geht.
Habe ein Problem mit der arcsin (asin oder arcus sinus) Methode. Meine Konsole spuckt immer nur das Ergebnis n. def. Folgend wie ich versuchte die Methode asin anzuwenden.
C#-Quelltext 1: 2: 3: 4: 5: 6:
| float bekannteSeitea = askForFloat("Welche Goresse hat die bekannte Seite a?"); float bekannteSeiteb = askForFloat("Welche Groesse hat die bekannte Seite b?"); float WinkelAlpha = askForFloat("Welchen Wert hat der bekannte Winkel Alpha?"); float x = bekannteSeiteb * WinkelAlpha / bekannteSeitea; Math.Asin(x); Console.WriteLine(x); |
Kurz noch zum allg. Verständnis:
gegeben sind:
seite a, seite b, der der grösseren seite gegenüberliegende winkel
gesucht ist:
den der kleineren seite gegenüberliegende winkel
Von der formel her stimmt. Mein Problem liegt mehr darin wie ich asin formgerecht in meinem Code anwenden kann.
Grüsse
interessierter
|
|
jaenicke
      
Beiträge: 19312
Erhaltene Danke: 1747
W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
|
Verfasst: So 06.05.12 14:44
Erstens wäre es sinnvoll, wenn du das Ergebnis, das dir Asin zurückliefert, nicht einfach wegwerfen würdest.
Denn sonst kannst du die Zeile auch gleich weglassen.
Und zweitens denke dran, dass die internen Funktionen wie asin nicht mit Gradzahlen, sondern im Bogenmaß arbeiten.
|
|
interessierter 
      
Beiträge: 75
|
Verfasst: So 06.05.12 15:19
Oke, somit muss ich die Grad anschliessend in Bogenmass umrechnen. Habe nun den Code umgeschrieben aber es klappt trotzdem nicht. Was mache ich den Falsch? Folgend mein neuer Lösungsversuch mit meinem Gedankenansätzen:
C#-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13:
| float bekannteSeitea = askForFloat("Welche Goresse hat die bekannte Seite a?"); float bekannteSeiteb = askForFloat("Welche Groesse hat die bekannte Seite b?"); float WinkelAlpha = askForFloat("Welchen Wert hat der bekannte Winkel Alpha?");
doublex = Math.Asin(bekannteSeiteb * WinkelAlpha / bekannteSeitea);
double WinkelBeta = (Math.PI / 180) * x);
Console.WriteLine(WinkelBeta); |
Zuletzt bearbeitet von interessierter am So 06.05.12 15:27, insgesamt 1-mal bearbeitet
|
|
Th69
      

Beiträge: 4796
Erhaltene Danke: 1059
Win10
C#, C++ (VS 2017/19/22)
|
Verfasst: So 06.05.12 15:27
Der WinkelAlpha muß im Bogenmaß an die trigonometrische Funktion weitergereicht werden.
P.S: Und das Mal-Zeichen (Multiplikation) solltest du eigentlich auch kennen...
|
|
interessierter 
      
Beiträge: 75
|
Verfasst: So 06.05.12 15:28
hehe, habs grad editiert und das malzeichen * genommen
|
|
jaenicke
      
Beiträge: 19312
Erhaltene Danke: 1747
W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
|
Verfasst: So 06.05.12 15:33
Bist du da sicher?
Schauen wir doch mal:
Gegeben:
a, b, α
Gesucht:
β
Sinussatz:
a / sin(α) = b / sin(β)
--> a = b * sin(α) / sin(β)
--> a * sin(β) = b * sin(α)
--> sin(β) = b * sin(α) / a
--> β = asin(b * sin(α) / a)
Nun vergleiche einmal was du dort einsetzt. Außerdem muss auch der Eingabewert wie Th69 schon geschrieben hat im Bogenmaß sein.
|
|
interessierter 
      
Beiträge: 75
|
Verfasst: So 06.05.12 16:28
Oke, ich danke euch nun ist mir einiges klarer.
Ich habe jetzt ein neues Konsolenprogramm gemacht wo ich nur die Methode (rechne in Bogenmass um) gecodet habe.
Ab static void main will ich nun auf die Methode zugreigen und die gewünschte Ausgabe machen.
Wie kann ich mittels einer Eingabe auf die Methode zugreifen und die entsprechende Aussage machen?
Hier mein Code:
C#-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22:
| using System; using System.Collections.Generic; using System.Linq; using System.Text;
namespace ConsoleApplication1 { class Program { public static double GradZuBogenmass(double Grad) { return (Math.PI / 180.0) * Grad; }
static void Main(string[] args) {
}
} } |
Wenn ich noch erfahre wie man auf die Funktion zugreift, kann ich mein Problem lösen.
|
|
jaenicke
      
Beiträge: 19312
Erhaltene Danke: 1747
W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
|
Verfasst: So 06.05.12 16:45
|
|
interessierter 
      
Beiträge: 75
|
Verfasst: So 06.05.12 17:50
Ich habe hier einen weiteren Lösungsansatz, wo ich den bekannten Winkel zuerst in Bogenmass umrechne und mittels der gegebeben Formel für den fehlenden Winkel weiterverwende.
In meinem neuen Code müsste die WriteLine den Wert des fehlenden Winkels ausgeben, was nicht klappt. Hier der Code:
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31: 32: 33: 34: 35: 36:
| using System; using System.Collections.Generic; using System.Linq; using System.Text;
namespace ConsoleApplication1 { class Program { public static double GradZuBogenmass(double Grad) { return (Math.PI / 180.0) * Grad; }
static void Main(string[] args) { Console.WriteLine("wieviel grad misst der bekannte Winkel?"); string text = Console.ReadLine(); double Eingabe = double.Parse(text); double Winkel = Eingabe; double Winkelmass = GradZuBogenmass(Winkel);
Console.WriteLine("bekannte seite a?"); string x = Console.ReadLine(); float bsa = float.Parse(x); Console.WriteLine("bekannte seite b?"); string y = Console.ReadLine(); float bsb = float.Parse(y); double WinkelBeta = Math.Asin(bsb * Winkelmass / bsa); Console.WriteLine(WinkelBeta); }
} } |
|
|
jaenicke
      
Beiträge: 19312
Erhaltene Danke: 1747
W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
|
Verfasst: So 06.05.12 18:05
Den Fehler in der Formel hatte ich ja oben schon angemerkt.
Zudem fehlt die Rückwandlung von Bogenmaß in Grad beim Ergebnis.
|
|
interessierter 
      
Beiträge: 75
|
Verfasst: Mi 09.05.12 21:03
Ich bastle nun schon seit Tagen an dieser Sache rum, aber es will nicht klappen. Ich verstehe auch nicht wo der Fehler in der Formel liegt. Ich habe nun noch einen Lösungsansatz wo ich meiner Meinung nach alles berücksichitige. Wo liegt denn Mein Fehler?
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31: 32: 33: 34: 35:
| using System; using System.Collections.Generic; using System.Linq; using System.Text;
namespace ConsoleApplication1 { class Program { static void Main(string[] args) { Console.WriteLine("wieviel grad misst der bekannte Winkel?"); string Winkel = Console.ReadLine(); double bekannterWinkel = double.Parse(Winkel); double WinkelAlpha = bekannterWinkel / 180 * Math.PI; Console.WriteLine(WinkelAlpha); Console.WriteLine("bekannte seite a?"); string x = Console.ReadLine(); float bsa = float.Parse(x); Console.WriteLine("bekannte seite b?"); string y = Console.ReadLine(); float bsb = float.Parse(y); double WinkelBeta = bsb * WinkelAlpha / bsa;
WinkelBeta= WinkelBeta * 180 / Math.PI; Console.WriteLine(WinkelBeta);
}
} } |
|
|
jaenicke
      
Beiträge: 19312
Erhaltene Danke: 1747
W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
|
Verfasst: Mi 09.05.12 21:31
Für diesen Beitrag haben gedankt: interessierter
|
|
interessierter 
      
Beiträge: 75
|
Verfasst: Mi 09.05.12 22:18
Vielen Dank.
Das Ergebnis von
C#-Quelltext 1:
| double WinkelBeta = Math.Asin(bsb * Math.Sin(WinkelAlpha) / bsa); |
habe ich anschliessend wieder in Grad umgerechnet und siehe da, ich hatte das richtige Ergebnis in der WriteLine
Jetzt ist mir auch der Fehler in der Formel klar. Ich habe nur den Wert von WinkelAlpha für die Berechnung benutzt, ohne zu definieren dass der Wert von WinkelAlpha ein Winkel (Sin) ist.
Ich möchte folgend noch den Codeblock posten. Vielleicht hat ja wiedermal jemand Probleme bei dieser Aufgabenstellung.
Die Aufgabe:
Bekannt sind zwei Seiten eines Dreiecks und der der grösseren Seite gegenüberliegende Winkel. Nun muss der der kleineren Seite gegenüberliegende Winkel berechnet werden.
Hier der Code dazu:
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31: 32: 33: 34: 35: 36: 37:
| using System; using System.Collections.Generic; using System.Linq; using System.Text;
namespace ConsoleApplication1 { class Program { static void Main(string[] args) {
Console.WriteLine("wieviel grad misst der bekannte Winkel?"); string Winkel = Console.ReadLine(); double bekannterWinkel = double.Parse(Winkel); double WinkelAlpha = bekannterWinkel / 180 * Math.PI; Console.WriteLine(WinkelAlpha); Console.WriteLine("bekannte seite a?"); string x = Console.ReadLine(); float bsa = float.Parse(x); Console.WriteLine("bekannte seite b?"); string y = Console.ReadLine(); float bsb = float.Parse(y); double WinkelBeta = Math.Asin(bsb * Math.Sin(WinkelAlpha) / bsa);
WinkelBeta = WinkelBeta * 180 / Math.PI; Console.WriteLine(WinkelBeta); }
} } |
Grüsse
interessierter
|
|