Buch Cover Buch Cover Buch Cover Buch Cover

Web-Code: - Webcode Help

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

Bitte melde dich an um einen Kommentar abzugeben

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

Bewertung

Durchschnittliche Bewertung:

Eigene Bewertung:
Bitte zuerst anmelden

Meta

Zeit: 0.5
Schwierigkeit: k.A.
Webcode: y4qj-nv2g
Autor: Philipp G. Freimann (BBW (Berufsbildungsschule Winterthur) https://www.bbw.ch)

Zu Aufgabenblatt hinzufügen