// Takes the range of some data and outputs the value of each axis gradation (in terms of big squares on a graph)
#include <cstdlib>
#include <iostream>
#include <cmath>
int toGraphNum( double x)
{
if ( x < 1 ) { return 1 ; }
if ( x < 2 ) { return 2 ; }
if ( x < 5 ) { return 5 ; }
if ( x > 5 ) { return 10 ; }
}
int graphScaler( double largest, double smallest, int squares) ;
int graphScaler( double difference, int squares) ;
int main( )
{
double largest;
double smallest;
int bigSquares;
std:: cout << "Please enter the largest number:" ;
std:: cin >> largest;
std:: cout << "Please enter the smallest number:" ;
std:: cin >> smallest;
double difference = abs ( largest - smallest) ;
std:: cout << "Please enter the number of big squares:" ;
std:: cin >> bigSquares;
int bigSquareVal = graphScaler( difference, bigSquares) ;
//IDEOne input newline fix:
std:: cout << std:: endl ;
std:: cout << "Each big square is worth: " << bigSquareVal << std:: endl ;
//Utilisation = {plotted data range}/{total axis range = amount per square * count(squares)}
std:: cout << "Graph utilisation percentage = " << difference / ( bigSquareVal * bigSquares) * 100 << std:: endl ;
std:: cout << "Press enter to continue..." ;
std:: cin .get ( ) ;
return 0 ;
}
int graphScaler( double largest, double smallest, int squares)
{
graphScaler( ( double ) abs ( largest - smallest) , squares) ;
}
int graphScaler( double difference, int squares)
{
double nastyGradation = ( difference/ squares) ;
int ngOrder = pow ( 10 ,floor ( log10 ( nastyGradation) ) ) ;
return toGraphNum( nastyGradation/ ngOrder) * ngOrder;
}
Ly8gVGFrZXMgdGhlIHJhbmdlIG9mIHNvbWUgZGF0YSBhbmQgb3V0cHV0cyB0aGUgdmFsdWUgb2YgZWFjaCBheGlzIGdyYWRhdGlvbiAoaW4gdGVybXMgb2YgYmlnIHNxdWFyZXMgb24gYSBncmFwaCkKCiNpbmNsdWRlIDxjc3RkbGliPgojaW5jbHVkZSA8aW9zdHJlYW0+CiNpbmNsdWRlIDxjbWF0aD4KCmludCB0b0dyYXBoTnVtKGRvdWJsZSB4KQp7CglpZih4IDwgMSkgeyByZXR1cm4gMTsgIH0KCWlmKHggPCAyKSB7IHJldHVybiAyOyAgfQoJaWYoeCA8IDUpIHsgcmV0dXJuIDU7ICB9CglpZih4ID4gNSkgeyByZXR1cm4gMTA7IH0KfQoKaW50IGdyYXBoU2NhbGVyKGRvdWJsZSBsYXJnZXN0LCBkb3VibGUgc21hbGxlc3QsIGludCBzcXVhcmVzKTsKaW50IGdyYXBoU2NhbGVyKGRvdWJsZSBkaWZmZXJlbmNlLCBpbnQgc3F1YXJlcyk7CgppbnQgbWFpbigpCnsKCWRvdWJsZSBsYXJnZXN0OwoJZG91YmxlIHNtYWxsZXN0OwoJaW50IGJpZ1NxdWFyZXM7CgkKCXN0ZDo6Y291dCA8PCAiUGxlYXNlIGVudGVyIHRoZSBsYXJnZXN0IG51bWJlcjoiOwoJc3RkOjpjaW4gPj4gbGFyZ2VzdDsKCXN0ZDo6Y291dCA8PCAiUGxlYXNlIGVudGVyIHRoZSBzbWFsbGVzdCBudW1iZXI6IjsKCXN0ZDo6Y2luID4+IHNtYWxsZXN0OwoJCglkb3VibGUgZGlmZmVyZW5jZSA9IGFicyhsYXJnZXN0IC0gc21hbGxlc3QpOwoJCglzdGQ6OmNvdXQgPDwgIlBsZWFzZSBlbnRlciB0aGUgbnVtYmVyIG9mIGJpZyBzcXVhcmVzOiI7CglzdGQ6OmNpbiA+PiBiaWdTcXVhcmVzOwoJCglpbnQgYmlnU3F1YXJlVmFsID0gZ3JhcGhTY2FsZXIoZGlmZmVyZW5jZSwgYmlnU3F1YXJlcyk7CgkKCS8vSURFT25lIGlucHV0IG5ld2xpbmUgZml4OgoJc3RkOjpjb3V0IDw8IHN0ZDo6ZW5kbDsKCglzdGQ6OmNvdXQgPDwgIkVhY2ggYmlnIHNxdWFyZSBpcyB3b3J0aDogIiA8PCBiaWdTcXVhcmVWYWwgPDwgc3RkOjplbmRsOwoJLy9VdGlsaXNhdGlvbiA9IHtwbG90dGVkIGRhdGEgcmFuZ2V9L3t0b3RhbCBheGlzIHJhbmdlID0gYW1vdW50IHBlciBzcXVhcmUgKiBjb3VudChzcXVhcmVzKX0KCXN0ZDo6Y291dCA8PCAiR3JhcGggdXRpbGlzYXRpb24gcGVyY2VudGFnZSA9ICIgPDwgZGlmZmVyZW5jZSAvIChiaWdTcXVhcmVWYWwgKiBiaWdTcXVhcmVzKSAqIDEwMCA8PCBzdGQ6OmVuZGw7CgkKCXN0ZDo6Y291dCA8PCAiUHJlc3MgZW50ZXIgdG8gY29udGludWUuLi4iOwoJc3RkOjpjaW4uZ2V0KCk7CglyZXR1cm4gMDsKfQoKaW50IGdyYXBoU2NhbGVyKGRvdWJsZSBsYXJnZXN0LCBkb3VibGUgc21hbGxlc3QsIGludCBzcXVhcmVzKQp7CglncmFwaFNjYWxlcigoZG91YmxlKWFicyhsYXJnZXN0IC0gc21hbGxlc3QpLCBzcXVhcmVzKTsKfQppbnQgZ3JhcGhTY2FsZXIoZG91YmxlIGRpZmZlcmVuY2UsIGludCBzcXVhcmVzKQp7Cglkb3VibGUgbmFzdHlHcmFkYXRpb24gPSAoZGlmZmVyZW5jZS9zcXVhcmVzKTsKCWludCAgICBuZ09yZGVyCQkgID0gcG93KDEwLGZsb29yKGxvZzEwKG5hc3R5R3JhZGF0aW9uKSkpOwoJcmV0dXJuIHRvR3JhcGhOdW0obmFzdHlHcmFkYXRpb24vbmdPcmRlcikgKiBuZ09yZGVyOwp9