C++ :: Aufgabe #281

2 Lösungen Lösungen öffentlich

Ü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ß!

Lösungen:

vote_ok
von D3us3x (100 Punkte) - 30.09.2020 um 20:19 Uhr
Das hier klappt einwandfrei.
MfG

Quellcode ausblenden C-Code
#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;
}
vote_ok
von JKooP (18090 Punkte) - 08.01.2021 um 12:45 Uhr
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
Quellcode ausblenden C-Code
#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
Quellcode ausblenden C-Code
#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
Quellcode ausblenden C-Code
#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
Quellcode ausblenden C-Code
#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
Quellcode ausblenden C-Code
#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";
}