+ 3

Transportation C++

/* How to calculate the number of buses i need to transport people? if I enter the number 165, it outputs 3 although it should be 4 */ #include <iostream> using namespace std; int main() { int bus_max = 50; int passengers; int last_bus; int buses; int free_places; cout << "Enter the number of passengers: "; cin >> passengers; last_bus = passengers % bus_max; cout << "Last bus will take " << last_bus << " passengers." << endl; free_places = bus_max - last_bus; cout << free_places << " free seats will remain." << endl; buses = passengers / bus_max; cout << "It will take " << buses << " buses to transport " << passengers << " people." << endl; system("PAUSE"); return 0; }

25th Jul 2021, 11:14 PM
avantgarde
avantgarde - avatar
3 Réponses
+ 3
That is because C++ rounds down by default when you divide. You can use functions such as round() and ceil() in <cmath> and <math.h> relatively, to round up, but a simple if statement will also work: if(last_bus > 0) buses++; So this code works fine: #include <iostream> using namespace std; int main() { int bus_max = 50; int passengers; int last_bus; int buses; int free_places; cout << "Enter the number of passengers: "; cin >> passengers; last_bus = passengers % bus_max; cout << "Last bus will take " << last_bus << " passengers." << endl; free_places = bus_max - last_bus; cout << free_places << " free seats will remain." << endl; buses = passengers/bus_max; if(last_bus > 0) buses++; cout << "It will take " << buses << " buses to transport " << passengers << " people." << endl; system("PAUSE"); return 0; }
26th Jul 2021, 12:09 AM
Aleksei Radchenkov
Aleksei Radchenkov - avatar
+ 3
many thanks!
26th Jul 2021, 12:14 AM
avantgarde
avantgarde - avatar
+ 1
Aleksei Radchenkov explained it well, but I want to dig a little deeper, because C++ doesn't actually round down the result of the division (of integers): Every CPU (or at least most of them) can deal with 2 kind of numbers: those written in "binary" (integers) and those written in "scientific notation" (floating-point numbers) When doing operations on integers it gives an integer; when doing operations with floating-point numbers it gives a floating-point number So, when doing a division of integers, it performes the Euclidean division (the one with quotient and reminder) which result tells how many times does A fit in B, never the "real" division (A times the multiplicative inverse of B) which is performed only on floating-point numbers
26th Jul 2021, 1:20 AM
Angelo
Angelo - avatar