C++ [Anfänger] Fährenpreisberechnung Programm

sLgFiRE

Lieutenant
Registriert
März 2013
Beiträge
852
Hallo Leute,
ich habe eine Ausbildung zum Fachinformatiker / Systemintegration angefangen und in der Schule fangen wir jetzt an zu programmieren mit C++

Im Anhang habe ich die Aufgabenstellung und mein Programm.
Dabei macht mir das Beispiel zu schaffen.
Ich bekomme nicht hin, das er dann den günstigeren Preis davon nimmt.

Hoffe mir kann da einer helfen.

MfG FiRE
 

Anhänge

  • faehrenprogramm_aufgabenstellung.txt
    1 KB · Aufrufe: 236
  • faehrenprogramm_c++.txt
    1 KB · Aufrufe: 233
ich weiss nicht wie in c++ das minimum von zwei zahlen implementiert ist, aber bestimmt etwas derart: min(a,b)

dann ersetz doch einfach

ges = preis + (2 * person);

durch

ges = min(preis + (2 * person),(preis+2*10)*(1-rabatt));
 
Ich verstehe nicht ganz wieso bei 9 Fahrgästen der Preis günstiger wird und bei 2 Fahrgästen keine 20% Rabatt angenommen werden? Oder bezieht sich der Rabatt nur auf Typ 5 und deren Personen?

Meiner Meinung nach rechnest du schon richtig. Code - Optimierungen mal ausgenommen.

kleiner Fehler: bei dir ist Typ 2 und 3 vertauscht (in der ersten Abfrage)
 
Zuletzt bearbeitet: (Fehler gefunden:)
hm also das thema ist bei mir schon n bischen her aber mir sind da ein paar dinge aufgefallen:

1. wieso berechnest du grundsätzlich den preis für beide Fälle und nicht in abhängigkeit von der Personenzahl?
2. Man kann doch auch statt gesr=ges-ges*0.2 auch gesr=ges*0.8 rechnen (oder vertue ich mich da gerade).
demnach hätte ich statt:

Code:
ges = preis + (2 * person);
gesr = preis + (2 * person) - ((preis + (2 * person)) * rabatt);

if (person < 10)
   cout << "Ihre Ueberfahrt kostet: " << ges << " EUR";
else
   cout << "Ihre Ueberfahrt kostet (Rabatt): " << gesr << " EUR" << endl;

hätte ich es so in der art gemacht:

Code:
if (person < 10)
   ges = preis + (2 * person);
   cout << "Ihre Ueberfahrt kostet: " << ges << " EUR";
else
   ges = (preis + (2 * person)) * rabatt;
   cout << "Ihre Ueberfahrt kostet (Rabatt): " << ges << " EUR" << endl;

wobei rabatt hier natürlich nichtmehr 0.2 sondern 0.8 entspricht.

Bitte steinigen...
 
Zuletzt bearbeitet:
Du hast aber vergessen, dass man bei weniger als 10 Personen nicht mehr bezahlen soll als mit 10 Personen mit Rabatt.
 
NeUs schrieb:
Ich verstehe nicht ganz wieso bei 9 Fahrgästen der Preis günstiger wird und bei 2 Fahrgästen keine 20% Rabatt angenommen werden? Oder bezieht sich der Rabatt nur auf Typ 5 und deren Personen?

Meiner Meinung nach rechnest du schon richtig. Code - Optimierungen mal ausgenommen.

kleiner Fehler: bei dir ist Typ 2 und 3 vertauscht (in der ersten Abfrage)

ich versteh das so, das man wenn man neun oder 8 personen mitnimmt ja ein höherer preis raus kommt als wenn man mit 10 personen fährt. und das soll nicht sein. also wenn man neun personen mitnimmt soll man auch nicht mehr bezahlen als der rabattiere betrag von 10 personen.
und danke für den fehler :D habs korrigiert.

@st0rax, ja das is wohl keine schlechte idee, aber rechnerisch kommt das gleiche raus.

wegen der code optimierung :D hab wie gesagt erst frisch angefangen :) kann da noch nicht so viel.
aber schonmal vielen dank für eure hilfe!

mfg
 
hätte ich nen compiler zur hand würde ich n bischen rumprobieren.
Und ob das nun "optimiert" ist kann ich auch nicht beurteilen.
Bin kein programmierer, das letzte mal C++ ist auch schon 3 Jahre her.

Ansonsten kann ich da so eigentlich keine Fehler erkennen.
Lösung würde mich trotzdem intressieren.

Vielleicht kannst du nochmal genau erklären was nicht funktioniert:

1. Welche Werte übergibst du?
2. Welches Ergebnis erwartest du?
3. Welches Ergebnis wird ausgegeben?
 
du rechnest 3 preise aus:
p1 für person >= 10 (mit rabatt)
p2 für person = 10 (mit rabatt)
p3 für person < 10 (ohne rabatt)

endpreis ep berechnet sich dann:

if person >= 10
ep = p1
else if p3 > p2
ep = p2
else
ep = p3
 
omg, danke :D soweit gehts jetzt :D
muss ich mir merken :D
Code:
        p1 = (preis + (2 * person)) * rabatt;   // Berechnung Preis Rabatt
        p2 = (preis + (2 * 10)) * rabatt;       // Berechnung Preis Rabatt bei 10 Personen
        p3 = preis + (2 * person);              // Berechnung Preis normal
    cout << endl << endl;



    if (person >= 10)
    cout << "(P1)Der Preis fuer die Ueberfuehrung betraegt: " << p1 << " EUR" << endl;       // Ausgabe Preis Rabatt
    else if (p3 > p2)
    cout << "(P2)Der Preis fuer die Ueberfuehrung betraegt: " << p2 << " EUR" << endl;      // Ausgabe Preis Rabatt bei 10 Personen
    else
    cout << "(P3)Der Preis fuer die Ueberfuehrung betraegt: " << p3 << " EUR"<< endl;       // Ausgabe Preis normal
Ergänzung ()

kann geclosed werden :)
 
Zuletzt bearbeitet:
Hier mal das ganze ein wenig optimiert mit ein paar Anmerkungen
Code:
#include <iostream>

using namespace std;

int main()
{
    cout << "Geben Sie einen Fahrzeugtyp ein. (Fahrraeder = 1,PKWs mit Anhaenger = 2,PKWs ohne Anhaenger = 3, LKWs = 4, alles andere = 5): " << endl;
    int typ; // Variablen/Objekte am besten erst dann anlegen wenn sie benötigt werden
    cin >> typ;
    cout << endl << endl;
    unsigned int fahrzeugkosten;
    switch (typ)
    {
    case 1:
        fahrzeugkosten = 2;
        break;
    case 2:
        fahrzeugkosten = 5;
        break;
    case 3:
        fahrzeugkosten = 7;
        break;
    case 4:
        fahrzeugkosten = 10;
        break;
    default:
        fahrzeugkosten = 15;
        break;
    }
    size_t anzahl_personen; //Verwendung von size_t da hier eine Größe gemeint ist. Kann nur Positiv sein. 
    cout << "Wie viele Personen sind Sie in Ihrem Fahrzeug?" << endl;
    cin >> anzahl_personen;
    cout << endl << endl;
    const double rabatt = 0.2;
    const unsigned int preis_pro_person = 2;
    unsigned int personenkosten = anzahl_personen * preis_pro_person;
    double fälliger_betrag = fahrzeugkosten + personenkosten; //Ausgangswert ist Preis ohne Rabatt
    if(anzahl_personen > 9) //Abfrage entspricht >=10, ist aber schneller.(Falls Kompilier es nicht selber optimieren sollte)
    {
        fälliger_betrag *= rabatt;
    }
    else
    {
        double preis_fuer_zehn = (fahrzeugkosten + 10 * preis_pro_person) * rabatt; //Berechnung wird nur ausgeführt wenn nötig.
        if(preis_ohne_rabatt > preis_fuer_zehn)
        {
            fälliger_betrag = preis_fuer_zehn;
        }
    }
    cout << "Ihre Ueberfahrt kostet: " << fälliger_betrag << " EUR"; //Durch meinen Code nur noch eine Ausgabe des Betrags nötig.
    return 0; //wenn ein aktueller Compiler mit C++11 unterstützung verwendet wird, dann kann das "return 0" in der main() Funktion auch weggelassen werden
}
 
Fonce schrieb:
Code:
if(anzahl_personen > 9) //Abfrage entspricht >=10, ist aber schneller.(Falls Kompilier es nicht selber optimieren sollte)
Sorry, aber wie kommst du bitte auf die Idee?

Fonce schrieb:
Code:
return 0; //wenn ein aktueller Compiler mit C++11 unterstützung verwendet wird, dann kann das "return 0" in der main() Funktion auch weggelassen werden
Ergänzung ()

Fonce schrieb:
Code:
    size_t anzahl_personen; //Verwendung von size_t da hier eine Größe gemeint ist. Kann nur Positiv sein.
Würde ich nicht machen: Der Nutzer kann immer noch negative Zahlen eingeben, die dann aber als sehr große Zahl interpretiert werden. Nimm besser ein normales int, prüfe ob die eingegebene Zahl positiv ist und gib ansonsten ne Fehlermeldung aus.

Außerdem würde ich die Konstanten (Inklusive Fahrzeugpreise) and den Anfang setzen. Der Hinweis Variablen erst dann anzulegen, wenn sie gebracuht werden ist zwar richtig, aber Programmparameter gehören gesammelt an den Anfang.
 
Zuletzt bearbeitet:
Zurück
Oben