Mondlandung (Schleifen)
Für ein Computerspiel (Mondlandung) wird die Höhe einer fallenden Rakete nach folgender vereinfachter Formel (Annäherung mit endlich vielen Zeitschritten) berechnet:
Gegeben sind die Geschwindigkeit v [in Pixeln pro Zeiteinheit] und eine Höhe h über der
Mondoberfläche [in Pixeln]. Nach jeder Zeiteinheit verändern sich v und h nach den folgenden Formeln:
- v := v + 1.5
- h := h - v
Starten Sie das Programm mit der Starthöhe h0 = 800 [Pixel] und der Startgeschwindigkeit v0 = 0. Wie viele Zeiteinheiten dauert die Landung? Geben Sie für jede Zeiteinheit v und h aus. Wie groß ist v beim Aufprall?
0 Kommentare
5 Lösung(en)
public class Mondlandung {
public static void main(String[] args) {
new Mondlandung() . top(); }
void top() {
double v = 0;
double h = 800;
while(h > 0) {
ausgabe(v, h);
v = v + 1.5;
h = h - v; }
System.out.println("Endgeschwindigkeit = " + v);
}
void ausgabe(double v, double h) {
System.out.println("v = " + v + ", h = " + h);
}
} // end of class Mondlandung
def main():
v = 0
h = 800
while h > 0:
ausgabe(v, h)
v = v + 1.5
h = h - v
print("Endgeschwindigkeit =", v)
def ausgabe(v, h):
print("v = {0:4.1f}, h = {1:5.1f}".format(v,h))
main()
Lösung von: Alex Groeg (Freies Lernen)
function landingSpeed(height, speed) {
height = height || 800;
speed = speed || 0;
while (height > 0) {
speed += 1.5;
height -= speed;
console.table([height, speed]);
}
return speed;
}
console.log(landingSpeed());
Lösung von: Lisa Salander (Heidi-Klum-Gymnasium Bottrop)
// NET 6.x | C# 10.x | VS-2022
static IEnumerable<(double speed, double height)> MoonLanding(double speed = 0, double height = 800) {
while (height >= 0) {
speed += 1.5;
height -= speed;
yield return (speed, height);
}
}
static double ImpactSpeed(IList<(double speed, double height)> l) =>
Math.Abs(l[^2].speed - l[^1].speed) / Math.Abs(l[^2].height - l[^1].height) * l[^2].height + l[^2].speed;
var l = MoonLanding().ToList();
l.ForEach(x => Console.WriteLine($"Geschw.: {x.speed,4:f1}\tHoehe: {x.height,5:f1}"));
Console.WriteLine($"\nAufprallgeschw. auf Bodenhoehe: {ImpactSpeed(l):f2}");
Lösung von: Jens Kelm (@JKooP)
// C++ 14 | VS-2022
#include <iostream>
#include <vector>
#include <iomanip>
struct Params {
double speed{ 0 };
double height{ 800 };
};
std::vector<Params> moon_landing(Params p) {
std::vector<Params> out;
while (p.height >= 0) {
p.speed += 1.5;
p.height -= p.speed;
out.push_back(p);
}
return out;
}
double get_impact_speed(std::vector<Params> p) {
auto s{ p.size() - 2 };
return abs(p[s].speed - p.back().speed) / abs(p[s].height - p.back().height) * p[s].height + p[s].speed;
}
int main() {
Params p;
auto ml{ moon_landing(p) };
for (const auto& m : ml)
std::cout << std::fixed << std::setprecision(1) << "Geschw.: " << m.speed << "\tHoehe: " << m.height << "\n";
std::cout << "\nAufprallgeschw. am Boden: " << std::setprecision(2) << get_impact_speed(ml) << "\n";
}
Lösung von: Jens Kelm (@JKooP)
Verifikation/Checksumme:
Bei der Landung beträgt die "Geschwindigkeit" 49.5 Pixel pro Zeiteinheit.
Aktionen
Neue Lösung hinzufügen
Bewertung
Durchschnittliche Bewertung:
Meta
Zeit: | 0.5 |
Schwierigkeit: | k.A. |
Webcode: | y4qj-nv2g |
Autor: | Philipp G. Freimann (BBW (Berufsbildungsschule Winterthur) https://www.bbw.ch) |