Flugweite berechnen
Hi!
Wir haben in Programmieren folgende Hausaufgabe bekommen:
Der Benutzer gibt den Abschusswinkel und die Geschwindigkeit einer Kanonenkugel ein und muss so ein bestimmtes Ziel treffen.
Die Entfernung des Ziels ist eine Zufallszahl, und es liegt am Boden.
Die Ausgabe ist dann wie weit man vom Ziel entfernt ist.
Aber irgendwie kapier ich das leider nicht
Kann mir wer ein bisschen mit ein paar Formeln helfen?
lg Sebian
Wir haben in Programmieren folgende Hausaufgabe bekommen:
Der Benutzer gibt den Abschusswinkel und die Geschwindigkeit einer Kanonenkugel ein und muss so ein bestimmtes Ziel treffen.
Die Entfernung des Ziels ist eine Zufallszahl, und es liegt am Boden.
Die Ausgabe ist dann wie weit man vom Ziel entfernt ist.
Aber irgendwie kapier ich das leider nicht
Kann mir wer ein bisschen mit ein paar Formeln helfen?lg Sebian
Geht es dir um eine Mathematische Formel? Oder musst du ein Programmierschnipsel haben?
Wenn ja, welche Sprache.
Gruß
Seven
Wenn ja, welche Sprache.
Gruß
Seven
Bevor du hier Fragen stellst, lese alle Dokumentationen und klicke die folgenden Links um mehr zu erfahren
WMW Forensuche,
WMW F.A.Q. und/oder
Allgemeine suche
WMW Forensuche,
WMW F.A.Q. und/oder
Allgemeine suche
Sorry, aber ich kenn mich nicht wirklich aus, was jetzt oder x sein soll.
In der Hauptschule haben wir in Physik fast ncihts gelernt und in der neuen Schule hab ich in Physik noch nix kapiert
und wie oft muss ich diese Formel aufrufen? Ich hätte mir gedacht man muss das in eine Schleife packen, die solange läuft bis das Geschoß am Boden ankommt.
In der Hauptschule haben wir in Physik fast ncihts gelernt und in der neuen Schule hab ich in Physik noch nix kapiert

und wie oft muss ich diese Formel aufrufen? Ich hätte mir gedacht man muss das in eine Schleife packen, die solange läuft bis das Geschoß am Boden ankommt.
Hey Sebian,
dein Lehrer ist ja echt nett. Der hat dir die Lösung ja schon fast gegeben.
Würd dir jetzt gerne die Lösung hier posten, muss aber jetzt zur Uni.
Daher hier mal ein Ansatz für dich. Hoffe der hilft dir schon mal weiter.
Also:
Die Formeln für die x und y-Werte hat er dir ja schon aufgeschrieben.
Die ist immer gleich, wobei im ersten Fall das x, das du aufsummiert ja NULL ist.
Und die Schrittweite ist mit t=1s gegeben.
Daher auch die Schleife.
Also nimmst du jetzt die x und y-Formeln und lässt die in der Schleife durchlaufen, bis y = 0 (Achtung!: Anfangswert ist auch 0 -> Vor der Schleife die Variablen auf 0 setzen.)
Als Startwerte nimmst du den Cosinus des Winkels, der vom User eingegeben wird und die Geschwindigkeit.
In der Schleife errechnest du diese Werte dann immer wieder neu.
Hierzu schaust du dir die Zeichnung mal genauer an.
Da siehst du dann, das das neue v immer aus der Hypothenuse aus den Werten x und y besteht.
Der Cosinus des Winkels errechnet sich ja aus der Ankathete durch die Hypothenuse, also dann (x-x(alt)/v.
Wenn dann y = 0 ist, nimmste den Zufallswert, auf den die Kugel fliegen sollte und ziehst davon den x-Wert aus der Schleife ab. Dann hast du ja die Differenz zwischen dem tatsächlichen Wert und dem Zufallswert.
Hoffe du hast das jetzt verstanden, muss jetzt mal los.
Denke die anderen werden dir da dann auch weiterhelfen können.
Gruß,
tommy
dein Lehrer ist ja echt nett. Der hat dir die Lösung ja schon fast gegeben.
Würd dir jetzt gerne die Lösung hier posten, muss aber jetzt zur Uni.
Daher hier mal ein Ansatz für dich. Hoffe der hilft dir schon mal weiter.
Also:
Die Formeln für die x und y-Werte hat er dir ja schon aufgeschrieben.
Die ist immer gleich, wobei im ersten Fall das x, das du aufsummiert ja NULL ist.
Und die Schrittweite ist mit t=1s gegeben.
Daher auch die Schleife.
Also nimmst du jetzt die x und y-Formeln und lässt die in der Schleife durchlaufen, bis y = 0 (Achtung!: Anfangswert ist auch 0 -> Vor der Schleife die Variablen auf 0 setzen.)
Als Startwerte nimmst du den Cosinus des Winkels, der vom User eingegeben wird und die Geschwindigkeit.
In der Schleife errechnest du diese Werte dann immer wieder neu.
Hierzu schaust du dir die Zeichnung mal genauer an.
Da siehst du dann, das das neue v immer aus der Hypothenuse aus den Werten x und y besteht.
Der Cosinus des Winkels errechnet sich ja aus der Ankathete durch die Hypothenuse, also dann (x-x(alt)/v.
Wenn dann y = 0 ist, nimmste den Zufallswert, auf den die Kugel fliegen sollte und ziehst davon den x-Wert aus der Schleife ab. Dann hast du ja die Differenz zwischen dem tatsächlichen Wert und dem Zufallswert.
Hoffe du hast das jetzt verstanden, muss jetzt mal los.
Denke die anderen werden dir da dann auch weiterhelfen können.
Gruß,
tommy
|
|
Quellcode |
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 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 |
using System;
namespace Kanone {
class Kanone {
public static void Main(string[] args) {
double winkel,
geschw,
weite,
hoehe,
zufall,
j;
const double g = 9.8; // m/s²
int i;
i=0;
j=0;
weite=0;
hoehe=0;
zufall=ZufZa(200);
Console.WriteLine("Zufallszahl: " + zufall);
while (j<10) { // maximal 10 Versuche
Console.Write("Abschusswinkel (in Grad): ");
winkel=Convert.ToDouble(Console.ReadLine());
do {
if (winkel>=90) {
Console.WriteLine("Ungültiger Abschusswinkel!");
Console.Write("Abschusswinkel (in Grad): ");
winkel=Convert.ToDouble(Console.ReadLine());
}
} while(winkel>=90);
winkel = winkel*180/Math.PI; // Umrechnung auf Radianden
Console.Write("Geschwindigkeit (in m/s): ");
geschw=Convert.ToDouble(Console.ReadLine());
do { // bis Ziel erreicht
weite=weite + geschw * Math.Cos(winkel); // rofl
hoehe=hoehe + geschw * Math.Sin(hoehe) - g/2; // lol
i++;
Console.WriteLine("Entfernung vom Ziel: " + (zufall-weite) + "m");
}
while(hoehe > 0);
Console.WriteLine();
}
j++;
Console.WriteLine("Geschafft!");
Console.WriteLine("Versuche: " + j);
}
static Random random = new Random();
public static int ZufZa(int Limit){
return random.Next(Limit);
}
}
}
|
Kann das stimmen? Also es kommt ein Ergebnis raus, aber ob das stimmt kann ich leider nicht kontrollieren.
@Basti: Deine Lösung ist ja richtig, aber es sollte ja laut Aufgabe durch eine Schleife realisiert werden. Und dann muss das nun mal so gemacht werden.
@Sebian: Sorry, leider kann ich dir bei C nicht so sehr weiterhelfen. Rechne das Ergebnis doch einfach mal mit der Formel von Basti nach. Dann kannste selbst kontrollieren ob es stimmt. (Geringe Abweichungen sin dabei möglich, da das halt mit der Schleife ne feste Schrittweite hat.)
Gruß,
tommy
@Sebian: Sorry, leider kann ich dir bei C nicht so sehr weiterhelfen. Rechne das Ergebnis doch einfach mal mit der Formel von Basti nach. Dann kannste selbst kontrollieren ob es stimmt. (Geringe Abweichungen sin dabei möglich, da das halt mit der Schleife ne feste Schrittweite hat.)
Gruß,
tommy
Hey Sebian,
hab grad auch mal meinen Codeansatz in PHP umgesetzt.
Wenn ich den jetzt durchlaufen lasse, komme ich auch nicht auf den gewünschten Wert.
Beispiel:
Winkel=25°
Anfangsgeschwindigkeit = 40 Einheiten
Dann bekomme ich eine Weite von 145 Einheiten heraus.
Bei dieser liegt allerdings der y-Wert schon bei -10,86 Einheiten.
Die Schleife ist also zu ungenau.
Du könntest dir ja nun den genauen Wert ausrechnen.
Frag deinen Lehrer nochmal, ob ihr das wirklich mit der Schleife oder auch mit Bastis Formel machen könnt, die definitiv richtig ist.
Setz mal die Werte bei dir ein.
Wenn dasselbe herauskommt, dann hast du auf jeden Fall den Code richtig
Gruß,
tommy
hab grad auch mal meinen Codeansatz in PHP umgesetzt.
Wenn ich den jetzt durchlaufen lasse, komme ich auch nicht auf den gewünschten Wert.
Beispiel:
Winkel=25°
Anfangsgeschwindigkeit = 40 Einheiten
Dann bekomme ich eine Weite von 145 Einheiten heraus.
Bei dieser liegt allerdings der y-Wert schon bei -10,86 Einheiten.
Die Schleife ist also zu ungenau.
Du könntest dir ja nun den genauen Wert ausrechnen.
Frag deinen Lehrer nochmal, ob ihr das wirklich mit der Schleife oder auch mit Bastis Formel machen könnt, die definitiv richtig ist.
Setz mal die Werte bei dir ein.
Wenn dasselbe herauskommt, dann hast du auf jeden Fall den Code richtig

Gruß,
tommy
Hi,
genau so hab ich das gemeint.
Der vorletzte Schritt ist bei 108,75 und 6,57 Einheiten und der letzte dann bei den 145 und -10,86 Einheiten.
Also liegt der eigentliche y-Wert dazwischen.
Kannst du natürlich auch noch berechnen, aber wenn ihr das nur mit der Schleife machen sollt, wird das ziemlich ungenau.
Ach ja, hier kannst du dir die Ausgabe und den Code mal ansehen.
Vielleicht hab ich ja auch noch nen Fehler drin.
Hab ich gestern Abend ja fix zusammengebastelt.
Gruß,
tommy
genau so hab ich das gemeint.
Der vorletzte Schritt ist bei 108,75 und 6,57 Einheiten und der letzte dann bei den 145 und -10,86 Einheiten.
Also liegt der eigentliche y-Wert dazwischen.
Kannst du natürlich auch noch berechnen, aber wenn ihr das nur mit der Schleife machen sollt, wird das ziemlich ungenau.
Ach ja, hier kannst du dir die Ausgabe und den Code mal ansehen.
Vielleicht hab ich ja auch noch nen Fehler drin.
Hab ich gestern Abend ja fix zusammengebastelt.

Gruß,
tommy
Hi,
kein Problem.
Hoffe das ich da keinen Fehler eingebaut habe.
Zu dem <br>:
Ist mir klar, dass das nicht richtig ist, aber der hat die <br>s bei der Ausgabe des Codes trotzdem umgewandelt und den Code zerissen.
Deshalb hab ich dann die Backslashes eingebaut, damit die <br>s nicht mehr geparst werden.
Viel Erfolg mit dem script!!!
Gruß,
tommy
kein Problem.
Hoffe das ich da keinen Fehler eingebaut habe.
Zu dem <br>:
Ist mir klar, dass das nicht richtig ist, aber der hat die <br>s bei der Ausgabe des Codes trotzdem umgewandelt und den Code zerissen.
Deshalb hab ich dann die Backslashes eingebaut, damit die <br>s nicht mehr geparst werden.
Viel Erfolg mit dem script!!!
Gruß,
tommy



