C++ :: Aufgabe #281
2 Lösungen

Überholen: benötigte Strecke und Dauer berechnen
Anfänger - C++
von Waldgeist
- 22.04.2020 um 10:55 Uhr
Es soll ein Programm für die Berechnung von Überhol-weg und Überhol-zeit (bei angenommener konstanten Geschwindigkeit) erstellt werden.
Dazu werden die Länge der beiden Fahrzeuge (l1 und l2) und deren Geschwindigkeit (v1 und v2) angegeben.
Aus diesen Daten ermitteln wir den Sicherheitsabstand (a).
Dieser soll der halben Geschwindigkeit entsprechen. Also bei 100 km/h sind 60 m Sicherheitsabstand einzuhalten.
Die benötigte Strecke berechnen wir dann nach folgender Formel:
s = v1 / (v1−v2) * (l1+l2+2*a)
Weitere Information findet ihr hier: Video
Viel Spaß!
Dazu werden die Länge der beiden Fahrzeuge (l1 und l2) und deren Geschwindigkeit (v1 und v2) angegeben.
Aus diesen Daten ermitteln wir den Sicherheitsabstand (a).
Dieser soll der halben Geschwindigkeit entsprechen. Also bei 100 km/h sind 60 m Sicherheitsabstand einzuhalten.
Die benötigte Strecke berechnen wir dann nach folgender Formel:
s = v1 / (v1−v2) * (l1+l2+2*a)
Weitere Information findet ihr hier: Video
Viel Spaß!
Lösungen:
Das hier klappt einwandfrei.
MfG
C-Code
MfG

#include <iostream> using namespace std; int main(){ int v1, v2, l1, l2, a, s; cout << "Überholweg berechnen bei 2 Fahrzeugen" << endl; cout << "Geschwindigkeit Fahrzeug 1 in km/h : "; cin >> v1; cout << "Geschwindigkeit Fahrzeug 2 in km/h : "; cin >> v2; cout << "Länge Fahrzeug 1 in m : "; cin >> l1; cout << "Länge Fahrzeug 2 in m : "; cin >> l2; /* s = v1 / (v1−v2) * (l1+l2+2*a) */ a = v2/2; s = v1 / (v1-v2) * (l1+l2+2*a); cout << "Überholweg: " << s << " m." << endl; }
C++ 17
Habe kurze Berechnungen, die nicht unbedingt einer eigenen Funktion bedürfen,
direkt in den privaten bzw. öffentlichen Feldern in .h durchführen lassen.
Das entspricht zwar nicht ganz den Konventionen, spart aber Schreibarbeit in der .cpp ;).
main
C-Code
Fahrzeug.h
C-Code
Fahrzeug.cpp
C-Code
Ueberholvorgang.h
C-Code
Ueberholvorgang.cpp
C-Code
Habe kurze Berechnungen, die nicht unbedingt einer eigenen Funktion bedürfen,
direkt in den privaten bzw. öffentlichen Feldern in .h durchführen lassen.
Das entspricht zwar nicht ganz den Konventionen, spart aber Schreibarbeit in der .cpp ;).
main

#include "Fahrzeug.h" #include "Ueberholvorgang.h" #include <iostream> int main() { Fahrzeug f1{ "Audi", 4.25 , 80, TypSicherheitsabstand::ausserorts }; Fahrzeug f2{ "BMW", 4.75, 100, TypSicherheitsabstand::ausserorts }; Ueberholvorgang uv{ f1, f2 }; f1.ausgabe(); f2.ausgabe(); uv.ausgabe(); }
Fahrzeug.h

#pragma once #include <string> using namespace std; enum class TypSicherheitsabstand { innerorts = 1, ausserorts }; class Fahrzeug { private: TypSicherheitsabstand _typ_sicherheitsabstand; string _bezeichnung; double _laenge; int _geschwindigkeit; string _typ_str_sicherheitsabstand{ _typ_sicherheitsabstand == TypSicherheitsabstand::innerorts ? "innerorts" : "ausserorts" }; public: Fahrzeug(string bezeichnung, double laenge, int geschwindigkeit, TypSicherheitsabstand typ_sicherheitsabstand) : _bezeichnung(bezeichnung), _laenge(laenge), _geschwindigkeit(geschwindigkeit), _typ_sicherheitsabstand(typ_sicherheitsabstand) {}; string Bezeichnung = _bezeichnung; double Laenge = _laenge; int Geschwindigkeit = _geschwindigkeit; int Sicherheitsabstand{ (int)ceil(_geschwindigkeit / 3.6 * (int)_typ_sicherheitsabstand / 5) * 5 }; int Bremsweg{ (int)ceil((pow(_geschwindigkeit, 2) / 100) / 5) * 5 }; int Reaktionsweg{ (int)ceil((_geschwindigkeit / 10.0 * 3.0) / 5) * 5 }; int Anhalteweg{ Bremsweg + Reaktionsweg }; void ausgabe(); };
Fahrzeug.cpp

#include "Fahrzeug.h" #include <iostream> using namespace std; void Fahrzeug::ausgabe() { cout << _bezeichnung << " (" << _typ_str_sicherheitsabstand << ")" << "\nGeschwindigkeit: " << _geschwindigkeit << "\nSicherheitsabstand: " << Sicherheitsabstand << "\nAnhalteweg: " << Anhalteweg << "\n\n"; }
Ueberholvorgang.h

#pragma once #include "Fahrzeug.h" class Ueberholvorgang { private: Fahrzeug& _langsames_fz; Fahrzeug& _schnelles_fz; int get_ueberholstrecke(); int get_ueberholzeit(); public: Ueberholvorgang(Fahrzeug& langsames_fz, Fahrzeug& schnelles_fz) :_langsames_fz(langsames_fz), _schnelles_fz(schnelles_fz) {}; int Ueberholstrecke{ get_ueberholstrecke() }; int Ueberholzeit{ get_ueberholzeit() }; void ausgabe(); };
Ueberholvorgang.cpp

#include "Ueberholvorgang.h" #include <iostream> using namespace std; int Ueberholvorgang::get_ueberholstrecke() { if (_schnelles_fz.Geschwindigkeit <= _langsames_fz.Geschwindigkeit) return 0; else return (int)(_schnelles_fz.Geschwindigkeit / (_schnelles_fz.Geschwindigkeit - _langsames_fz.Geschwindigkeit) * (_schnelles_fz.Laenge + _langsames_fz.Laenge + _schnelles_fz.Sicherheitsabstand + _langsames_fz.Sicherheitsabstand)); } int Ueberholvorgang::get_ueberholzeit() { if (_schnelles_fz.Geschwindigkeit == 0 || Ueberholstrecke == 0) return 0; else return (int)(Ueberholstrecke / (_schnelles_fz.Geschwindigkeit / 3.6)); } void Ueberholvorgang::ausgabe() { cout << "Das Fahrzeug " << _schnelles_fz.Bezeichnung << " ben\x94tigt f\x81r den \x9A \bberholvorgang " << Ueberholstrecke << "m sowie " << Ueberholzeit << "s.\n"; }