COMP128 Labs Fall 2012 Professor Werner

advertisement
Comp 128 Labs
Fall 2012
COMP128 Labs
Fall 2012
Professor Werner
Table of Contents
COMP128 Labs ................................................................................................ Fall 2012 Professor Werner
......................................................................................................................................................... 1
Lab Submission Rules .......................................................................................................................... 1
Model Lab Submission (as a word doc) ............................................................................................... 2
Lab 0. Simple arithmetic with integers -due Sep 7 (no credit for this lab) ......................................... 5
Lab 1 Using arithmetic operators -due Sep 14 .................................................................................. 6
Lab 2 Numeric calculations including averages and quadratic formula -due Sep 21 ........................ 6
Lab 3 Pay raise, area of a triangle -due Sep 28 .................................................................................... 7
Lab 4 Horoscopes and banners -due Oct 5 ........................................................................................... 7
Lab 5 Approximating ex, statistics from a set of numbers -due Oct 12 ................................................ 8
Lab 6 Generate a yearly calendar -due Oct 19 ..................................................................................... 8
Lab 7 Program to do arithmetic with fractions -due Oct 26 ................................................................. 9
Lab 8 Streaming numbers from a file -due Nov 2 .............................................................................. 10
Lab 9 Student billing program due Nov 9 .......................................................................................... 10
Lab 10 Analyzing a text file -due Nov 16 .......................................................................................... 11
Lab 11 Define a Fraction data type (class) -due Nov 30 .................................................................... 11
Lab 12 More analysis of text files -due Dec 4 .................................................................................... 11
Lab 13 Extra Credit– Large integers due Dec 6 ................................................................................. 12
Lab 14 Extra Credit - Strings due Dec 6 ............................................................................................ 12
Lab 15 Extra Credit - Reading XML due Dec 6. P.491 #14............................................................. 12
Lab Submission Rules
1.
Lab grades are 0 .. 10, with 10 representing a correct lab turned in on time.
2.
Labs lose 2 points for each week late.
3.
Submit source files (.cpp and .h extensions), design chart and sample test runs.
4.
Source files must have a heading clearly identifying the lab assignment, your name, the
submission date, and a brief description of the problem including inputs, processing and
outputs.
5.
Labs are preferably submitted through Blackboard. If that fails they may be submitted by
e-mail to wernerm@wit.edu. Submit each assignment as a single word document. Do
not submit executables or other unreadable files. See the model problem below.
6.
Labs are to be done individually.
7.
Lab Grades:
Analysis
3/20/2016
Identify requirements (usually outputs),
1
Points
2
Prof. M Werner
Comp 128 Labs
Fall 2012
Design
Correctness
Programming style
inputs and processing
Include a correct chart as specified. Your
code must conform to the chart.
Include test runs verifying that the
program produces correct outputs
Is the code straight-forward, terse,
readable, properly indented?
2
4
2
Model Lab Submission (as a word doc)
/*********************************************************************
*
Lab 8 Problem 1
*
Melissa Mooney
*
COMP128-01
*
Nov 2, 2007
**********************************************************************
*
Problem: Some languages such as German use more capitalization
*
than other languages which share the same alphabet. To check
*
this, a program is needed to read through a text file and
*
calculate the percentage of letters that are capitalized.
***********************************************************************
*
Analysis
*
*
Inputs: A pre-existing text file
*
The name of the file (including the path)
*
Output: The percentage of letters that are capitalized
*
Error message if the named file cannot be opened
***********************************************************************
*
Design
*
*
Get file name from user
*
Open the file. If this fails give error message and die
*
Zero CapsCount, LowersCount
*
Scan the file char-by-char
*
if capital capsCount++
*
if lower lowersCount++
*
Divide CapsCount by (LowersCount+CapsCount)
*
Output result as a percent
*
*
See attached structure chart for functional decomposition
**********************************************************************/
3/20/2016
2
Prof. M Werner
Comp 128 Labs
Fall 2012
Structure Chart for Lab 8 Problem 1
main
Gets file name
Opens file
Prints answer
In : ifstream
processFile
Scans chars from file
Increments counts
Returns ratio
c : char
c : char
Returns true if
c is lower
case
isLower
isCap
Returns true if
c is a cap
#include <iostream>
#include <fstream>
using namespace std;
double processFile(ifstream& in);
bool isCap(char c);
bool isLower(char c);
int main(){
char filename[128];
ifstream in;
cout << "Enter filename: ";
cin >> filename;
in.open(filename);
if(!in.is_open()){
cout << "Failed to open " << filename << endl;
cout << "Now exiting\n";
exit(-1);
}
double ratio = processFile(in);
cout << "The percentage of letters that are capitalized is "
<< ratio*100 << '%'<< endl;
return 0;
}
double processFile(ifstream& in){
char c;
int capsCount = 0;
int lowersCount = 0;
while(in >> c){ //skips white space
if(isCap(c))
3/20/2016
3
Prof. M Werner
Comp 128 Labs
Fall 2012
capsCount++;
else if(isLower(c))
lowersCount++;
//non-letters are ignored
}
return static_cast<double>(capsCount)/(lowersCount + capsCount);
}
bool isCap(char c){
return c >= 'A' && c <= 'Z';
}
bool isLower(char c){
return c >= 'a' && c <= 'z';
}
/* Sample run
Enter filename: C:\Temp\Jabberwocky.txt
The percentage of letters that are capitalized is 5.84046%
Press any key to continue . . .
*/
Jabberwocky by Lewis Carroll
3/20/2016
4
Prof. M Werner
COMP128 Lab Assignments
Fall 2009
'Twas brillig, and the slithy toves
Did gyre and gimble in the wabe:
All mimsy were the borogoves,
And the mome raths outgrabe.
"Beware the Jabberwock, my son!
The jaws that bite, the claws that catch!
Beware the Jubjub bird, and shun
The frumious Bandersnatch!"
He took his vorpal sword in hand:
Long time the manxome foe he sought—
So rested he by the Tumtum tree,
And stood awhile in thought.
And, as in uffish thought he stood,
The Jabberwock, with eyes of flame,
Came whiffling through the tulgey wood,
And burbled as it came!
One, two! One, two! And through and through
The vorpal blade went snicker-snack!
He left it dead, and with its head
He went galumphing back.
"And hast thou slain the Jabberwock?
Come to my arms, my beamish boy!
O frabjous day! Callooh! Callay!"
He chortled in his joy.
'Twas brillig, and the slithy toves
Did gyre and gimble in the wabe:
All mimsy were the borogoves,
And the mome raths outgrabe.
Lab 0. Simple arithmetic with integers -due Sep 7 (no credit for this lab)
Savitch p. 35 Programming Projects 1 – 5. Optional Project 10.
Project 1 is to enter and run the following program in Visual Studio.
#include <iostream>
using namespace std;
int main( )
{
int number_of_pods, peas_per_pod, total_peas;
cout << "Press return after entering a number.\n";
M Werner
5
03/20/16
COMP128 Lab Assignments
Fall 2009
cout << "Enter the number of pods:\n";
cin >> number_of_pods;
cout << "Enter the number of peas in a pod:\n";
cin >> peas_per_pod;
total_peas = number_of_pods * peas_per_pod;
cout << "If you have ";
cout << number_of_pods;
cout << " pea pods\n";
cout << "and ";
cout << peas_per_pod;
cout << " peas in each pod, then\n";
cout << "you have ";
cout << total_peas;
cout << " peas in all the pods.\n";
return 0;
}
Project 5 is to write a program which reads 2 integers and outputs their sum and product.
Lab 1 Using arithmetic operators -due Sep 14
1.
Write a program to help carpenters. Sometimes measurements are given in terms of
yards, feet and inches. Your program will convert to all inches. When running, it will
prompt the user first for the yards, then the feet, then the inches. Assume all numbers are
whole. Your program will print out the length in inches.
(1 yard = 3 feet, 1 foot = 12 inches)
2.
Write a program to do the reverse of program 1. It asks the user for a length in inches,
and breaks it up into yards, feet and inches.
3.
(Pro-challenge instead of problems 1 and 2) The user types in a length in feet and inches
such as 8’5” and the program types back 101”. Or if the user types 80” the program
types back 6’8”.
Lab 2 Numeric calculations including averages and quadratic formula -due Sep
21
1.
Chapter 2 Programming Projects 10 and 11 on p.105 dealing with various sums and
averages. (Submit as one program)
2.
Write a program to solve a quadratic equation in the form:
M Werner
6
03/20/16
COMP128 Lab Assignments
Fall 2009
ax2 + bx + c = 0
using the quadratic formula. First find the discriminant:
d = b2 – 4ac
If the discriminant is negative, print out a message saying the roots are imaginary and stop.
If the discriminant is zero, print a message saying there is one real root, and then give the answer,
namely –b/2a.
If the discriminant is positive, print a message saying there are two real roots and then give their
values, namely:
r1 = (-b + √d)/(2a)
r2 = (-b - √d)/(2a)
3. (Pro-challenge) Extend Part 2 so that if the discriminant is negative the program prints out 2
complex roots in the form a+bi.
Lab 3 Pay raise, area of a triangle -due Sep 28
1.
Chapter 2 Programming Project 3 on p.103 (retroactive pay raise).
2.
Write a program to evaluate the area of a triangle, given the lengths of its sides.
Use the formula: a = √(s(s-a)(s-b)(s-c)) where s = (a+b+c)/2
Your program first gets the 3 sides from the user. It then checks to make sure it is a
triangle, namely it checks that the sum of any 2 sides is larger than the third side.
It then evaluates s and a, and outputs the area a.
3. (Pro-challenge) Find the area of a triangle given 2 sides and the included angle)
Lab 4 Horoscopes and banners -due Oct 5
1.
Chapter 3 Programming Project 3 on p. 170 (Horoscopes)
M Werner
7
03/20/16
COMP128 Lab Assignments
2.
Fall 2009
Write a program which prints your name as a banner going from top to bottom. Choose
either your first or last name but it must have at least 5 letters. Write the code to print
each letter in a separate function. If a letter appears more than once in your name only
write the function for that letter once. The main() function will simply call the letter
functions one after the other to spell out your name.
For example, the function bannerL to print out the letter L could be coded as follows:
void bannerL()
{
cout << endl;
cout << “*************\n”;
cout << “*\n”;
cout << “*\n”;
cout << “*\n”;
cout << endl;
}
3. (Pro-Challenge) Extend part 2 so that instead of always printing '*' the user is asked to enter the
symbol to print. The main() function passes the symbol as a parameter to the functions
which print each letter.
Lab 5 Approximating ex, statistics from a set of numbers -due Oct 12
1.
Chapter 3 Programming Project 11 on p. 173 (Approximating ex)
2.
Write a program that allows a user to input a stream of numbers and computes their
average. The user can enter as many numbers as she wants, signaling the end of the
stream by pressing <CTRL> X. Use main() to instruct the user, print the answer and
inquire if the user would like to do it again. Use a function to take in the user inputs,
keep a running total and a count, compute the average and return it.
3. (optional) Extend part 2 to also compute the standard deviation of the numbers.
Lab 6 Generate a yearly calendar -due Oct 19
1.
Write a program to generate a calendar for a year. The program should accept the year
and the day of the week for January 1 of that year (0 = Sunday, 1 = Monday, etc.). The
calendar should be printed in the following form:
January
1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
M Werner
8
03/20/16
COMP128 Lab Assignments
Fall 2009
23 24 25 26 27 28 29
30 31
February
1
2
3
4
5
2. (Pro-Challenge) Modify your program so that the user need not type in the day of week for Jan
1. The user simply types in the year. Do a search on the Internet to find out how a
perpetual calendar works.
Lab 7 Program to do arithmetic with fractions -due Oct 26
1.
Write a function to compute the greatest common divisor of two integers using Euclid’s
algorithm. Write a driver to test the function.
Euclidean algorithm from Wikipedia
The Euclidean algorithm (also called Euclid's algorithm) is an extremely efficient algorithm to
determine the greatest common divisor (GCD) of two integers. It is the oldest algorithm known. It
is described in Euclid's Elements. The algorithm does not require factoring.
Given two natural numbers a and b, first check if b is zero. If yes, then the GCD is a. If no,
calculate c, the remainder after the division of a by b. Replace a with b, b with c, and start the
process again.
For example, the GCD of 1071 and 1029 is computed by this algorithm to be 21 with the
following steps:
a
b
c
1071 1029 42
1029 42
21
42 21
0
21 0
The algorithm can be formulated in the Python programming language as follows:
def gcd(a,b):
while b != 0:
c = a%b
a=b
b=c
return abs(a)
M Werner
9
03/20/16
COMP128 Lab Assignments
2.
Fall 2009
Write a program to manipulate fractions. The program allows for the addition,
subtraction, multiplication and division of fractions. You need to submit a structure chart
in addition to the program code and sample runs.
Lab 8 Streaming numbers from a file -due Nov 2
1.
Write a program which reads a stream of numbers from a file, and writes only the
positive ones to a second file. The user enters the names of the input and output files.
Use a function named process which is passed the two opened streams, and reads the
numbers one at a time, writing only the positive ones to the output.
Write a program which reads a stream of numbers from a file, and prints to the screen the
highest and lowest numbers found.
2.
Lab 9 Student billing program due Nov 9
Write a student billing program. Student information is kept in an input file. The file has 3
fields, last name, first name, hours. Here is an example:
Smith Alice 15 Jones Fred 10 Wang Phil 20
The billing system is as follows:



A regular load is from 12.0 to 18.0 hours. The bill is $7,000.
An overload is more than 18.0 hours. The student is billed $7,000 for a regular load plus
$400 for each excess hour over 18.0.
An underload is less than 12 hours. The student is billed $450 per hour.
Output is to be written to an output file. It will be in the form of a report with fields for:









last name, first name Example: Smith, Alice
hours
regular hours
regular bill
overload hours
overload bill
underload hours
underload bill
total bill
The report should be properly formatted. Plan it on a sheet of paper first to get a good layout.
The paper has a width of 80 columns. Hours should always be printed with one decimal place,
M Werner
10
03/20/16
COMP128 Lab Assignments
Fall 2009
and dollar amounts with two. Columns should line up. Note: To make this work when printing,
you need to use a fixed width font such as Courier.
Lab 10 Analyzing a text file -due Nov 16
1.
Write a program that analyzes a text file by counting the number of times each of the 26
letters in the alphabet is used. How many a’s, how many b’s, etc. Count capital and
lower case versions of the same letter as one.
2.
Write a function which is passed an array of int and its size, and prints out only the
numbers that are above average.
3.
Extra Credit (2 pts) – Repeat Part 1, but print out the letter counts in order of decreasing
frequency, i.e. E 20, T 18, S 15, etc.
Lab 11 Define a Fraction data type (class) -due Nov 30
1.
Write a class definition for a Fraction class. Its member fields are num and den, both of
type int. The constructor builds the default fraction 1/1. It has the following operations:
void plusEquals(Fraction second); //Adds the second fraction to this fraction like the operator +=
void minusEquals (Fraction second); //Subtracts the second fraction from this fraction
void timesEquals (Fraction second); //Divides this fraction by the second fraction
void dividesEquals (Fraction second); // Divides this fraction by the second fraction
void reduce(); // Reduces this fraction to lowest terms
double todecimal(); //returns the decimal value of this fraction
void scan(istream&); //scans a fraction written with a slash as in ¾
void print(ostream&); //prints a fraction using a slash
Fraction(); //constructs a default fraction with denominator 1, numerator 0
Fraction(int n, int d); //constructs a fraction given value for num and den
2.
Write a menu-driven driver program designed to allow thorough testing of your Fraction
class.
Lab 12 More analysis of text files -due Dec 4
1.
Write a program which scans a file and counts the number of characters, the number of
lines, and the number of alphabetic characters in the file. Have main() open the file and
pass the file pointer to a function named count. Count passes back the number of
characters and the number of alphabetic characters. main() prints the answers and closes
the file.
M Werner
11
03/20/16
COMP128 Lab Assignments
2.
Fall 2009
Write a function named is_vowel, which is passed a char, and returns 1 if it is a vowel, 0,
otherwise. Write a main() to test it. The user types some input, ends by pressing <ctrl> z
on its own line, and the program prints out the numbers of vowels and consonants typed.
Lab 13 Extra Credit– Large integers due Dec 6
Chapter 7 Programming Project 7 on p. 433. It involves storing and adding large integers using
arrays of int.
Lab 14 Extra Credit - Strings due Dec 6
1.
p. 488 #6 (replace digits by x’s)
2.
p. 489 #11 (converts words to pig latin)
Lab 15 Extra Credit - Reading XML due Dec 6. P.491 #14
M Werner
12
03/20/16
Download