Computer Science 2610
Spring 2000
Self-test exercises 1
Solutions
Savitch, page 164, problem 6
#include <iostream.h>
// gravity(d,m1,m2) returns the gravitational force
// between two objects of masses m1 and m2, separated
// by a distance of d. Masses m1 and m2 should be in grams,
// and distance d should be in cemtimeters. The
// result is a number of dynes. (A dyne is unit f force.)
double gravity(double d, double m1, double m2)
{
double G = 6.673E-8;
return (G*m1*m2)/(d*d);
}
// Interact with the user, repeatedly asking for two
// masses and a distance, and telling the force of
// gravity between the two masses.
//
// Stop when a negavite distance is given. (When to stop
// was not specified in the problem.)
int main()
{
double d, m1, m2;
do {
cout << "Give a distance in centimeters and two masses in grams.\n"
"I will tell you the gravitational force between two objects\n"
"with those masses, separated by that distance.\n"
"Type a negative number to quit.\n";
cin >> d;
if(d >= 0) {
cin >> m1 >> m2;
cout << "The force is " << gravity(d,m1,m2) << " dynes\n\n";
}
} while(d >= 0);
return 0;
}
Savitch, page 210, problem 2.
#include <iostream.h>
// average(x1,x2,x3,x4) returns the average of x1,
// x2, x3 and x4.
double average(double x1, double x2, double x3, double x4)
{
return (x1 + x2 + x3 + x4)/4;
}
// avg_stddev(s1,s2,s3,s4,avg,stddev)
// sets avg to the average of s1, s2, s3 and s4, and sets
// stddev to the standard deviation of s1, s2, s3 and s4.
void avg_stddev(double s1, double s2, double s3, double s4,
double& avg, double& stddev)
{
avg = average(s1,s2,s3,s4);
double v1 = s1 - avg;
double v2 = s2 - avg;
double v3 = s3 - avg;
double v4 = s4 - avg;
stddev = sqrt(average(v1*v1, v2*v2, v3*v3, v4*v4));
}
// Repeatedly ask the user for four numbers, and compute
// their average and standard deviation. Stop when
// the first score is negative.
int main()
{
double s1,s2,s3,s4,avg,stddev;
do {
cout << "What are the four scores?\n"
"(Type a negative number to stop.)\n";
cin >> s1;
if(s1 >= 0) {
cin >> s2 >> s3 >> s4;
avg_stddev(s1, s2, s3, s4, avg, stddev);
cout << "The average is " << avg << endl;
cout << "The standard deviation is " << stddev << endl;
}
} while(s1 >= 0);
return 0;
}
Savitch, page 211, problem 4.
#include <iostream.h>
// get_feet_and_inches(feet,inches) prompts the user
// for a length in feet and inches, reads them, and
// sets variables feet and inches to the values read.
void get_feet_and_inches(int& feet, int& inches)
{
cout << "Please type a number of feet and a number of inches.\n";
cin >> feet >> inches;
}
// show_meters_and_centimeters(meters,centimeters) prints
// a length in meters and centimeters.
void show_meters_and_centimeters(int meters, double centimeters)
{
cout << meters << " meters and " << centimeters << " centimeters\n";
}
// convert_to_meters(feet,inches,meters,centimeters) converts
// a length in feet and inches (give by variables feet and
// inches) into meters and centimeters. It sets veriables
// meters and centimeters to the results.
void convert_to_meters(int feet, int inches,
int& meters, double& centimeters)
{
double length_in_feet = feet + inches/12.0;
double length_in_meters = 0.3048*length_in_feet;
meters = (int) length_in_meters;
centimeters = 100*(length_in_meters - meters);
}
// Repeatedly get feet and inches and report the length
// in meters and centimeters. Stop at a negative number.
int main()
{
int feet,inches,meters;
double centimeters;
do {
get_feet_and_inches(feet,inches);
if(feet >= 0) {
convert_to_meters(feet,inches,meters,centimeters);
show_meters_and_centimeters(meters,centimeters);
}
} while(feet >= 0);
return 0;
}
Savitch, page 213, problem 11.
Here is the function. Use your imagination for a program that
uses it.
// get_area_and_perimeter(a,b,c,area,perimeter) computes
// the area and perimeter of a triangle whose sides
// have lengths a, b and c.
//
// Out: Variables area and perimeter are set to the area
// and perimeter.
//
// The side lengths should be possible side lengths of
// a triangle. If not, area and perimeter are set to
// some values, but the values have no meaning.
void get_area_and_perimeter(double a, double b, double c,
double& area, double& perimeter)
{
// The area is sqrt(s(s-a)(s-b)(s-c)), where s is
// half the perimeter of the triangle. But be careful:
// if the side lengths are nonsense, it is possible that
// this tries to compute the square root of a negative
// number.
double s,v;
perimeter = a + b + c;
s = perimeter/2;
v = s*(s-a)*(s-b)*(s-c);
if(v >= 0) area = sqrt(v);
else area = 0;
}
Savitch, page 213, problem 12.
// windchill(t,v) returns the wind chill index for
// a temperature of t degrees celsius and a wind
// speed of v meters per second.
//
// Require: t <= 10. If t > 10, then the temperature
// t is returned.
double windchill(double t, double v)
{
if(t > 10) return t;
else return 33 - (10*sqrt(v) - v + 10.5)*(33 - t)/23.1;
}