Programmieren - alles kontrollieren 4.934 Themen, 20.613 Beiträge

Frage zu einer Brechnung (Noob Frage, C++)

Selecta / 17 Antworten / Flachansicht Nickles

Habe mit (Borland C++ Builder 5.0 prof.) folgenden Code geschrieben.
Die Aufgabe war: Ein Bus nimmt pro Person 0.10 Euro und pro gefahrenen Kilometer nochmals 0.10 Euro. Eine Person (Der Leiter) zahlt nur die Hälfte, jede 10. Person fährt Gratis.
Meine Hauptfrage: Wie berechne ich den Gratisbetrag ? Personen / 10 geht ja nicht, da da ein Rest uebrig bleibt, etwa (15/10 = 1.5) und das wäre mehr Freibetrag als es eigentlich sein soll.


#include <iostream>
#include <iomanip>
#include <conio.h>
#include <windows.h>


void main()
{


float person, cost = 0.10, distance, chief, free; // chief soll der Leiter sein, free der Freipreis
cout << "Geben sie die Anzahl der Personen ein: ";
cin >> person;


if (person < 10);   // Dachte ich mach mal mit if, hilft mir nicht, da ich die Berechnung nicht kann, außer person ist < als 10, da die Rechnung wegfiele...
{
cout << endl << "Geben (A) sie die Laenge der Strecke ein: ";
cin >> distance;
cout << endl << "Die Gesamtkosten belaufen sich auf: " <<
((person + distance) * cost) - (cost * 0.5) << " Euro" ;   // Personen und Entfernung * 0.10 und dann fuer eine Person (den leiter) die Haelfte des Peises abziehen
getch();
}


if (person > 10);
{
cout << "Geben (B) sie die Laenge der Strecke ein: ";
cin >> distance;
cout << setprecision(2);
cout << endl << "Die Gesamtkosten belaufen sich auf: " <<
((person * distance) * cost) - (cost * 0.5) - (           ) // so hier weiss ich nicht, was ich da jetzt abziehen soll ... 2 frage; wenn ich nun am anfang mehr als 10 eingebe, kommt trozdem der if < 10 Block ! Warum das?
getch();
}


getch();
}


 


Hoffe ihr versteht mein Problem ... Is bestimmt ganz simpel ... Aber halt schwer zu erklären

GreeTz Selecta

bei Antwort benachrichtigen
mr.escape Selecta „Danke an alle, das Problem hat sich mit floor geloest. Allerdings verstehe ich...“
Optionen
Die Formel lautet: (((distance + person) * cost) - (floor(person/10) - 0.05)
????
Die umstellungen in dieser formel machen aber das verstehen relativ kompliziert. Speziell die 0.05 scheinen kaum erklärbar. Da die ursprüngliche aufgabenstellung wohl aus irgend einem lehrbetrieb kommt sollte auf klarheit geachtet werden. Später macht man ja noch genug falsch! ;)

Nachvollziehbarer und auch flexibler ist doch dieser ansatz:
float summe, fixcost=0.1, distance, kmcost=0.1, durchschnitt;
int person;
//hier eingabe der werte person, distance und evtl. auch fixcost und kmcost
summe=(person-0.5-(float)floor(person/10.0))*(fixcost+distance*kmcost);
durchschnitt=summe/person;

In der ersten klammer befindet sich die netto-anzahl der personen (brutto-anzahl minus 50% rabatt für den leiter minus freifahrerrabatt) und in der zweiten die kosten pro vollperson. Der durchschnittspreis erklärt sich dann selbst.

mr.escape
"The man who trades freedom for security does not deserve nor will he ever receive either." - Benjamin Franklin"Wer seine Freiheit aufgibt, um Sicherheit zu erreichen, wird beides verlieren." - Georg Christoph Lichtenberg
bei Antwort benachrichtigen