Ive been stuck on this question since yesterday and I keep getting away from the
ID: 638173 • Letter: I
Question
Ive been stuck on this question since yesterday and I keep getting away from the orignal code. The question and code is down below.
Write a program that accepts input like the program in Display 7.8and that outputs a bar graph like the one in that display exceptthat your program will output the bars vertically rather than horizontally. A two-dimensional array may be useful.
Thats the question and here is what Display 7.8 looks like
#include <iostream>
#include <cmath>
const int NUMBER_OF_PLANTS = 4;
void input_data(int a[], int last_plant_number);
void scale(int a[], int size);
void graph(const int asterisk_count[], int last_plant_number);
void get_total(int& sum);
int round(double number);
void print_asterisks(int n);
int main()
{
using namespace std;
int production[NUMBER_OF_PLANTS];
cout << "This program displays agraph showing "
<< "production foreach plant in the company. ";
input_data(production,NUMBER_OF_PLANTS);
scale(production, NUMBER_OF_PLANTS);
graph(production, NUMBER_OF_PLANTS);
return 0;
}
void input_data(int a[], int last_plant_number)
void get_total(int& sum)
void scale(int a[], int size)
int round(double number)
void graph(const int asterisk_count[], int last_plant_number)
{
using namespace std;
cout << " Units produced inthousands of units: ";
for (int plant_number = 1;
plant_number <= last_plant_number; plant_number++)
{
cout << "Plant #"<< plant_number << " ";
print_asterisks (asterisk_count[plant_number - 1]);
cout << endl;
}
}
void print_asterisks(int n)
{
using namespace std;
for (int count = 1; count <= n;count++)
cout << "*";
}
I guess the problem is, that I cant even get this to work. I have typed it in several times and was wondering if there is something obvious I am missing.
Explanation / Answer
//Reads data and displays a bar graph showing productivity for eachplant.
#include <iostream>
#include <cmath>
#include <iomanip>
const int NUMBER_OF_PLANTS = 4;
void input_data(int a[], int last_plant_number);
//Precondition: last_plant_number is the declared size of the arraya.
//Postcondition: For plant_number = 1 throughlast_plant_number:
//a[plant_number-1] equals the total production for plant numberplant_number.
void scale(int a[], int size);
//Precondition: a[0] through a[size-1] each has a nonnegativevalue.
//Postcondition: a[i] has been changed to the number of 1000s(rounded to
//an integer) that were originally in a[i], for all i such that 0<= i <= size -1.
void graph(const int asterisk_count[], int last_plant_number);
//Precondition: asterisk_count[0] throughasterisk_count[last_plant_number-1]
//have nonnegative values.
//Postcondition: A bar graph has been displayed saying thatplant
//number N has produced asterisk_count[N-1] 1000s of units, foreach N such that
//1 <= N <= last_plant_number
void get_total(int& sum);
//Reads nonnegative integers from the keyboard and
//places their total in sum.
int roundd(double number);
//Precondition: number >= 0.
//Returns number rounded to the nearest integer.
int main( )
{
using namespace std;
int production[NUMBER_OF_PLANTS];
cout << "This program displays a graphshowing "
<<"production for each plant in the company. ";
input_data(production, NUMBER_OF_PLANTS);
scale(production, NUMBER_OF_PLANTS);
graph(production, NUMBER_OF_PLANTS);
system("pause");
return 0;
}
//Uses iostream:
void input_data(int a[], int last_plant_number)
//The rest of the definition of input_data is given in Display7.6.
{
using namespace std;
for (int plant_number = 1;
plant_number <= last_plant_number; plant_number++)
{
cout << endl
<< "Enter production data for plant number "
<< plant_number << endl;
get_total(a[plant_number- 1]);
//cout<<plant_number-1<<""<<a[plant_number-1]<<endl;
}
}
//Uses iostream:
void get_total(int& sum)
//The rest of the definition of get_total is given in Display7.6.
{
using namespace std;
cout << "Enter number of units produced byeach department. "
<< "Append anegative number to the end of the list. ";
sum = 0;
int next;
cin >> next;
while (next >= 0)
{
sum = sum + next;
cin >> next;
}
cout << "Total = " << sum <<endl;
}
//The rest of the definition of scale is given in Display 7.7.
void scale(int a[], int size)
{
for (int index = 0; index < size;index++)
a[index] =roundd(a[index]/1000.0);
}
//Uses cmath:
//The rest of the definition of round is given in Display 7.7.
//Uses iostream:
int roundd(double number)
{
using namespace std;
return static_cast<int>(floor(number +0.5));
}
/*void graph(const int asterisk_count[], int last_plant_number)
{
using namespace std;
cout << " Units produced in thousands ofunits: ";
for (int plant_number = 1;
plant_number <= last_plant_number; plant_number++)
{
cout << "Plant #"<< plant_number << " ";
print_asterisks(asterisk_count[plant_number - 1]);
cout << endl;
}
}
*/
void graph(const int a[], int n)
{
using namespace std;
int i,j,max=a[0];
for(i=1;i<n;i++)
if(a[i]>max)
max=a[i];
char graph[max][n];
for(i=0;i<max;i++)
for(j=0;j<n;j++)
graph[i][j]=' ';
for(i=0;i<n;i++)
for(j=0;j<a[i];j++)
graph[j][i]='*';
cout << " Units produced in thousands ofunits: ";
for(i=max-1;i>=0;i--)
{cout<<setw(3)<<i<<" ";
for(j=0;j<n;j++)
cout<<graph[i][j]<<" ";
cout<<endl;
}
for(i=0;i<n;i++)
{if(i==0)
cout<<" ";
cout<<" plant ";
}
cout<<endl;
for(i=0;i<n;i++)
{if(i==0)
cout<<" ";
cout<<" "<<i+1<<" ";
}
cout<<endl;
}
//Uses iostream:
Related Questions
Navigate
Integrity-first tutoring: explanations and feedback only — we do not complete graded work. Learn more.