Programmieren - alles kontrollieren 4.935 Themen, 20.621 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 „Wie berechne ich nun den Gesampreis ??? So kommt seltsamerweise was falsches...“
Optionen
((person-0.5-(float)floor(person/10.0))*(fixcost+distance*kmcost) / person)
Diese formel sieht korrekt aus, die äußere klammer ist aber überflüssig. Ggf. könnte man, um sicher zu gehen, den preis klammern und die personen explizit als float ausweisen:
durchschnitt =((person-0.5-(float)floor(person/10.0))*(fixcost+distance*kmcost)) / (float)person;

gesamt = =(person-0.5-(float)floor(person/10.0))*(fixcost+distance*kmcost)
Dieser ausdruck ist ein vergleich und somit überhaupt nicht das gewünschte.

Wenn in einem programm nicht das raus kommt, was raus kommen soll, bemüht man den debugger. Selbst ohne debugger helfen einfache testausgabe von zwischenergebnissen um die fehlfunktion einzugrenzen. Man gibt sich bestimmte testgrößen vor (besonders an interessanten stellen), rechnet die sollwerte manuell aus und vergleicht die testausgaben.
Z.b. (nach der abfrage der daten):
cout cout cout
Man kann teilergebnisse auch in eigene variablen reinpacken, das macht die berechnung übersichtlicher und das debuggen einfacher.
Also z.b.:
nettopersonen=(person-0.5-(float)floor(person/10.0));
gesamt=nettopersonen*(fixcost+distance*kmcost);
durchschnitt =gesamt/(float)person;

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