added more code
This commit is contained in:
parent
5a2894ed1b
commit
7dabaef6f6
36
CPE212/Project 1.1/DateType.cpp
Normal file
36
CPE212/Project 1.1/DateType.cpp
Normal file
@ -0,0 +1,36 @@
|
||||
#include <iostream>
|
||||
#include "DateType.h"
|
||||
|
||||
using namespace std;
|
||||
void DateType::Initialize (int newMonth, int newDay, int newYear)
|
||||
{
|
||||
year=newYear;
|
||||
month=newMonth;
|
||||
day=newDay;
|
||||
}
|
||||
|
||||
int DateType::GetMonth() const
|
||||
{
|
||||
return month;
|
||||
}
|
||||
|
||||
int DateType::GetYear() const
|
||||
{
|
||||
return year;
|
||||
}
|
||||
|
||||
int DateType::GetDay() const
|
||||
{
|
||||
return day;
|
||||
}
|
||||
|
||||
int main()
|
||||
{
|
||||
DateType today;
|
||||
DateType anotherDay;
|
||||
today.Initialize(9,24,2003);
|
||||
anotherDay.Initialize(9,25,2003);
|
||||
|
||||
cout << "Today is " << today.GetMonth() << "/" << today.GetDay() << "/" << today.GetYear()<< endl;
|
||||
cout << "Another date is " << anotherDay.GetMonth() << "/" << anotherDay.GetDay() << "/" << anotherDay.GetYear() << endl;
|
||||
}
|
BIN
CPE212/Project 1.1/DateType.exe
Executable file
BIN
CPE212/Project 1.1/DateType.exe
Executable file
Binary file not shown.
12
CPE212/Project 1.1/DateType.h
Normal file
12
CPE212/Project 1.1/DateType.h
Normal file
@ -0,0 +1,12 @@
|
||||
class DateType
|
||||
{
|
||||
private:
|
||||
int year;
|
||||
int month;
|
||||
int day;
|
||||
public:
|
||||
void Initialize(int newMonth, int newDay, int newYear);
|
||||
int GetYear() const;
|
||||
int GetMonth() const;
|
||||
int GetDay() const;
|
||||
};
|
BIN
CPE212/Project 1.1/DateType.o
Normal file
BIN
CPE212/Project 1.1/DateType.o
Normal file
Binary file not shown.
BIN
CPE212/Project 1.1/Project1.1a.png
Normal file
BIN
CPE212/Project 1.1/Project1.1a.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 39 KiB |
BIN
CPE212/Project 1.1/Project1.1b.png
Normal file
BIN
CPE212/Project 1.1/Project1.1b.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 88 KiB |
173
CPE212/Project_01/main.cpp
Normal file
173
CPE212/Project_01/main.cpp
Normal file
@ -0,0 +1,173 @@
|
||||
//
|
||||
// main.cpp -- Project01, CPE212 Fall 2010 -- C++ Review Project
|
||||
//
|
||||
// Driver program for Image Processing Program which is used to test each
|
||||
// image processing operation.
|
||||
//
|
||||
// DO NOT SUBMIT OR SUBMIT THIS FILE
|
||||
//
|
||||
|
||||
// List of allowed include files appear below
|
||||
#include <iostream>
|
||||
#include <fstream>
|
||||
#include <string>
|
||||
|
||||
using namespace std; // Global using declaration
|
||||
|
||||
// Global Constants -- you may use these global constants in your code
|
||||
const int MAXROWS = 10; // Maximum number of rows in image
|
||||
const int MAXCOLS = 10; // Maximum number of columns in image
|
||||
|
||||
// Function Prototypes for functions included at the end of main.cpp
|
||||
void Print(const int image[MAXROWS][MAXCOLS]);
|
||||
void Bars();
|
||||
|
||||
// Function Prototypes for the functions you must implement in project01.cpp
|
||||
void LoadImage(const string imagefile, int image[MAXROWS][MAXCOLS]);
|
||||
void FlipHorizontal(int image[MAXROWS][MAXCOLS]);
|
||||
void FlipVertical(int image[MAXROWS][MAXCOLS]);
|
||||
void RotateCW(int image[MAXROWS][MAXCOLS]);
|
||||
void RotateCCW(int image[MAXROWS][MAXCOLS]);
|
||||
void Transpose(int image[MAXROWS][MAXCOLS]);
|
||||
|
||||
|
||||
// Start of main() function
|
||||
|
||||
int main (int argc, char * const argv[]) // Command-line arguments (more on this later)
|
||||
{
|
||||
ifstream inputs; // Input file stream variable for test file
|
||||
char op, ch; // Hold operation and optional char input from test file
|
||||
string comment; // Holds comment string input from test file
|
||||
int image[MAXROWS][MAXCOLS]; // Array of integers representing image
|
||||
string imagefile; // Name of image file
|
||||
|
||||
|
||||
// Output usage message if test input file name is not provided
|
||||
if (argc != 2)
|
||||
{
|
||||
cout << "Usage:\n project01 <inputfile>\n";
|
||||
return 1;
|
||||
}
|
||||
|
||||
// Attempt to open test input file -- terminate if file does not open
|
||||
inputs.open(argv[1]);
|
||||
if (!inputs)
|
||||
{
|
||||
cout << "Error - unable to open input file" << endl;
|
||||
return 1;
|
||||
}
|
||||
|
||||
// Process comment line from input file
|
||||
getline(inputs, comment); // Input file header comment
|
||||
cout << endl << comment << endl << endl; // Output file header comment
|
||||
|
||||
|
||||
// Below is primary loop that processes each operation appearing within the test file.
|
||||
// Starts with an initial priming read of first operation
|
||||
|
||||
inputs >> op; // Attempt to input first test operation from file
|
||||
|
||||
while (inputs) // While Not-EOF
|
||||
{
|
||||
switch (op) // Process operation input from test file
|
||||
{
|
||||
case '#': // Test file comment
|
||||
getline(inputs, comment); // Input and echo the comment appearing in the test file
|
||||
cout << '#' << comment << endl;
|
||||
break;
|
||||
|
||||
case 'p': // Print Grid
|
||||
Print(image); // Function definition appears at the end of this file
|
||||
break;
|
||||
|
||||
case 'b': // Print Bars
|
||||
Bars(); // Function definition appears at the end of this file
|
||||
break;
|
||||
|
||||
case 'i': // Load Image
|
||||
inputs >> imagefile; // Input name of imagefile from test file
|
||||
LoadImage(imagefile, image); // Implement this function in project01.cpp
|
||||
break;
|
||||
|
||||
case '+': // Rotate Image Clockwise 90 Degrees
|
||||
RotateCW(image); // Implement this function in project01.cpp
|
||||
break;
|
||||
|
||||
case '-': // Rotate Image Counterclockwise 90 Degrees
|
||||
RotateCCW(image); // Implement this function in project01.cpp
|
||||
break;
|
||||
|
||||
case 'v': // Flip Image Vertical
|
||||
FlipVertical(image); // Implement this function in project01.cpp
|
||||
break;
|
||||
|
||||
case 'h': // Flip Image Horizontal
|
||||
FlipHorizontal(image); // Implement this function in project01.cpp
|
||||
break;
|
||||
|
||||
case 't': // Transpose Image Across Major Diagonal
|
||||
Transpose(image); // Implement this function in project01.cpp
|
||||
break;
|
||||
|
||||
default: // Error
|
||||
cout << "Error - unrecognized operation '" << op << "'" << endl;
|
||||
cout << "Terminating now..." << endl;
|
||||
return 1;
|
||||
break;
|
||||
}
|
||||
cout << endl;
|
||||
|
||||
inputs >> op; // Attempt to input next command
|
||||
}
|
||||
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
/************** Implementation of Print() and Bars() functions ********************/
|
||||
|
||||
// DO NOT MODIFY THIS CODE
|
||||
|
||||
void Print(const int image[MAXROWS][MAXCOLS])
|
||||
// Print() -- outputs image row-by-row in desired format substituting
|
||||
// * for 1 and - for 0.
|
||||
{
|
||||
for(int r=0; r < MAXROWS; r++) // Loop to visit each row in image
|
||||
{
|
||||
for(int c=0; c < MAXCOLS; c++) // Loop to output every element on crrent row
|
||||
{
|
||||
if (image[r][c] == 1) // Output appropriate symbol
|
||||
{
|
||||
cout << '*';
|
||||
}
|
||||
else if (image[r][c] == 0)
|
||||
{
|
||||
cout << '-';
|
||||
}
|
||||
else
|
||||
{
|
||||
cout << 'X';
|
||||
}
|
||||
}
|
||||
cout << endl;
|
||||
}
|
||||
|
||||
} // End Print()
|
||||
|
||||
void Bars()
|
||||
// Bars() -- prints two horizontal rows of bars
|
||||
{
|
||||
cout << "#################################################################" << endl;
|
||||
cout << "#################################################################" << endl;
|
||||
} // End Bars()
|
||||
|
||||
/************** DO NOT DELETE *************/
|
||||
// The preprocessor directive below will import the function definitions
|
||||
// from the file project01.cpp and place them at the end of this file creating an
|
||||
// Expanded Source File which is forwarded to the compiler for compilation.
|
||||
|
||||
#include "project01.cpp"
|
||||
|
||||
/************** End of main.cpp ***************/
|
||||
|
||||
|
9
CPE212/Project_01/makefile
Normal file
9
CPE212/Project_01/makefile
Normal file
@ -0,0 +1,9 @@
|
||||
# Project01 -- Fall 2010 CPE212-01
|
||||
|
||||
project01: project01.cpp main.cpp
|
||||
g++ main.cpp -o project01
|
||||
|
||||
clean:
|
||||
rm project01
|
||||
|
||||
|
13
CPE212/Project_01/p01image1.txt
Normal file
13
CPE212/Project_01/p01image1.txt
Normal file
@ -0,0 +1,13 @@
|
||||
# p01image1.txt -- Sample Image #1
|
||||
|
||||
0 0 0 0 0 0 0 0 0 0
|
||||
0 0 0 0 0 0 0 0 0 0
|
||||
0 0 0 0 1 1 0 0 0 0
|
||||
0 0 0 0 1 1 0 0 0 0
|
||||
0 0 1 1 1 1 0 0 0 0
|
||||
0 0 1 1 1 1 0 0 0 0
|
||||
0 0 0 0 0 0 1 1 0 0
|
||||
0 0 0 0 0 0 1 1 0 0
|
||||
0 0 0 0 0 0 0 0 0 0
|
||||
0 0 0 0 0 0 0 0 0 0
|
||||
|
13
CPE212/Project_01/p01image2.txt
Normal file
13
CPE212/Project_01/p01image2.txt
Normal file
@ -0,0 +1,13 @@
|
||||
# p01image2.txt -- Sample Image #2
|
||||
|
||||
0 1 1 1 0 1 0 0 0 1
|
||||
0 0 0 0 0 0 0 0 0 0
|
||||
0 0 0 1 1 0 0 0 0 1
|
||||
0 0 0 1 1 0 0 0 0 0
|
||||
0 0 0 1 1 1 1 0 0 1
|
||||
1 0 0 1 1 1 1 0 0 0
|
||||
1 0 0 1 1 0 0 0 0 0
|
||||
0 0 0 1 1 0 0 0 0 0
|
||||
1 0 0 0 0 0 0 0 0 0
|
||||
1 0 0 0 0 1 1 1 1 0
|
||||
|
13
CPE212/Project_01/p01image3.txt
Normal file
13
CPE212/Project_01/p01image3.txt
Normal file
@ -0,0 +1,13 @@
|
||||
# p01image3.txt -- Sample Image #3
|
||||
|
||||
0 0 0 0 0 0 0 0 0 1
|
||||
0 0 0 0 0 0 0 0 0 0
|
||||
0 0 0 0 0 0 0 0 0 0
|
||||
0 0 0 0 0 0 0 0 0 0
|
||||
0 0 0 0 0 0 0 0 0 0
|
||||
0 0 0 0 0 0 0 0 0 0
|
||||
0 0 0 0 0 0 0 0 0 0
|
||||
0 0 1 0 0 0 0 0 0 0
|
||||
0 1 1 0 0 0 0 0 0 0
|
||||
1 1 1 0 0 0 0 0 0 0
|
||||
|
77
CPE212/Project_01/p01input1.txt
Normal file
77
CPE212/Project_01/p01input1.txt
Normal file
@ -0,0 +1,77 @@
|
||||
# p01input1.txt -- Test of Transpose Image
|
||||
|
||||
# Draw Bars
|
||||
b
|
||||
|
||||
# Load Image1
|
||||
i p01image1.txt
|
||||
|
||||
# Print Image1
|
||||
p
|
||||
|
||||
# Transpose Image1
|
||||
t
|
||||
|
||||
# Print Image1
|
||||
p
|
||||
|
||||
# Transpose Image1
|
||||
t
|
||||
|
||||
# Print Image1
|
||||
p
|
||||
|
||||
|
||||
# Draw Bars
|
||||
b
|
||||
|
||||
|
||||
# Load Image2
|
||||
i p01image2.txt
|
||||
|
||||
# Print Image2
|
||||
p
|
||||
|
||||
# Transpose Image2
|
||||
t
|
||||
|
||||
# Print Image2
|
||||
p
|
||||
|
||||
# Transpose Image2
|
||||
t
|
||||
|
||||
# Print Image2
|
||||
p
|
||||
|
||||
|
||||
# Draw Bars
|
||||
b
|
||||
|
||||
|
||||
# Load Image3
|
||||
i p01image3.txt
|
||||
|
||||
# Print Image3
|
||||
p
|
||||
|
||||
# Transpose Image3
|
||||
t
|
||||
|
||||
# Print Image3
|
||||
p
|
||||
|
||||
# Transpose Image3
|
||||
t
|
||||
|
||||
# Print Image3
|
||||
p
|
||||
|
||||
|
||||
# Draw Bars
|
||||
b
|
||||
|
||||
|
||||
|
||||
|
||||
|
74
CPE212/Project_01/p01input2.txt
Normal file
74
CPE212/Project_01/p01input2.txt
Normal file
@ -0,0 +1,74 @@
|
||||
# p01input2.txt -- Test of Horizontal Flip
|
||||
|
||||
# Draw Bars
|
||||
b
|
||||
|
||||
|
||||
# Load Image1
|
||||
i p01image1.txt
|
||||
|
||||
# Print Image1
|
||||
p
|
||||
|
||||
# Horizontal Flip Image1
|
||||
h
|
||||
|
||||
# Print Flipped Image1
|
||||
p
|
||||
|
||||
# Horizontal Flip Image1
|
||||
h
|
||||
|
||||
# Print Flipped Image1
|
||||
p
|
||||
|
||||
|
||||
# Draw Bars
|
||||
b
|
||||
|
||||
|
||||
# Load Image2
|
||||
i p01image2.txt
|
||||
|
||||
# Print Image2
|
||||
p
|
||||
|
||||
# Horizontal Flip Image2
|
||||
h
|
||||
|
||||
# Print Flipped Image2
|
||||
p
|
||||
|
||||
# Horizontal Flip Image2
|
||||
h
|
||||
|
||||
# Print Flipped Image2
|
||||
p
|
||||
|
||||
|
||||
# Draw Bars
|
||||
b
|
||||
|
||||
# Load Image3
|
||||
i p01image3.txt
|
||||
|
||||
# Print Image3
|
||||
p
|
||||
|
||||
# Horizontal Flip Image3
|
||||
h
|
||||
|
||||
# Print Flipped Image3
|
||||
p
|
||||
|
||||
# Horizontal Flip Image3
|
||||
h
|
||||
|
||||
# Print Flipped Image3
|
||||
p
|
||||
|
||||
|
||||
# Draw Bars
|
||||
b
|
||||
|
||||
|
74
CPE212/Project_01/p01input3.txt
Normal file
74
CPE212/Project_01/p01input3.txt
Normal file
@ -0,0 +1,74 @@
|
||||
# p01input3.txt -- Test of Vertical Flip
|
||||
|
||||
# Draw Bars
|
||||
b
|
||||
|
||||
|
||||
# Load Image1
|
||||
i p01image1.txt
|
||||
|
||||
# Print Image1
|
||||
p
|
||||
|
||||
# Vertical Flip Image1
|
||||
v
|
||||
|
||||
# Print Flipped Image1
|
||||
p
|
||||
|
||||
# Vertical Flip Image1
|
||||
v
|
||||
|
||||
# Print Flipped Image1
|
||||
p
|
||||
|
||||
|
||||
# Draw Bars
|
||||
b
|
||||
|
||||
|
||||
# Load Image2
|
||||
i p01image2.txt
|
||||
|
||||
# Print Image2
|
||||
p
|
||||
|
||||
# Vertical Flip Image2
|
||||
v
|
||||
|
||||
# Print Flipped Image2
|
||||
p
|
||||
|
||||
# Vertical Flip Image2
|
||||
v
|
||||
|
||||
# Print Flipped Image2
|
||||
p
|
||||
|
||||
|
||||
# Draw Bars
|
||||
b
|
||||
|
||||
|
||||
# Load Image3
|
||||
i p01image3.txt
|
||||
|
||||
# Print Image3
|
||||
p
|
||||
|
||||
# Vertical Flip Image3
|
||||
v
|
||||
|
||||
# Print Flipped Image3
|
||||
p
|
||||
|
||||
# Vertical Flip Image3
|
||||
v
|
||||
|
||||
# Print Flipped Image3
|
||||
p
|
||||
|
||||
# Draw Bars
|
||||
b
|
||||
|
||||
|
117
CPE212/Project_01/p01input4.txt
Normal file
117
CPE212/Project_01/p01input4.txt
Normal file
@ -0,0 +1,117 @@
|
||||
# p01input4.txt -- Test of Rotate Clockwise
|
||||
|
||||
# Draw Bars
|
||||
b
|
||||
|
||||
|
||||
# Load Image1
|
||||
i p01image1.txt
|
||||
|
||||
# Print Image1
|
||||
p
|
||||
|
||||
# Rotate Clockwise 90 Degrees Image1
|
||||
+
|
||||
|
||||
# Print Rotated Image1
|
||||
p
|
||||
|
||||
# Rotate Clockwise 90 Degrees Image1
|
||||
+
|
||||
|
||||
# Print Rotated Image1
|
||||
p
|
||||
|
||||
# Rotate Clockwise 90 Degrees Image1
|
||||
+
|
||||
|
||||
# Print Rotated Image1
|
||||
p
|
||||
|
||||
# Rotate Clockwise 90 Degrees Image1
|
||||
+
|
||||
|
||||
# Print Rotated Image1
|
||||
p
|
||||
|
||||
|
||||
# Draw Bars
|
||||
b
|
||||
|
||||
|
||||
# Load Image2
|
||||
i p01image2.txt
|
||||
|
||||
# Print Image2
|
||||
p
|
||||
|
||||
# Rotate Clockwise 90 Degrees Image2
|
||||
+
|
||||
|
||||
# Print Rotated Image2
|
||||
p
|
||||
|
||||
# Rotate Clockwise 90 Degrees Image2
|
||||
+
|
||||
|
||||
# Print Rotated Image2
|
||||
p
|
||||
|
||||
# Rotate Clockwise 90 Degrees Image2
|
||||
+
|
||||
|
||||
# Print Rotated Image2
|
||||
p
|
||||
|
||||
# Rotate Clockwise 90 Degrees Image2
|
||||
+
|
||||
|
||||
# Print Rotated Image2
|
||||
p
|
||||
|
||||
|
||||
# Draw Bars
|
||||
b
|
||||
|
||||
|
||||
|
||||
# Load Image3
|
||||
i p01image3.txt
|
||||
|
||||
# Print Image3
|
||||
p
|
||||
|
||||
# Rotate Clockwise 90 Degrees Image3
|
||||
+
|
||||
|
||||
# Print Rotated Image3
|
||||
p
|
||||
|
||||
# Rotate Clockwise 90 Degrees Image3
|
||||
+
|
||||
|
||||
# Print Rotated Image3
|
||||
p
|
||||
|
||||
# Rotate Clockwise 90 Degrees Image3
|
||||
+
|
||||
|
||||
# Print Rotated Image3
|
||||
p
|
||||
|
||||
# Rotate Clockwise 90 Degrees Image3
|
||||
+
|
||||
|
||||
# Print Rotated Image3
|
||||
p
|
||||
|
||||
|
||||
# Draw Bars
|
||||
b
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
117
CPE212/Project_01/p01input5.txt
Normal file
117
CPE212/Project_01/p01input5.txt
Normal file
@ -0,0 +1,117 @@
|
||||
# p01input5.txt -- Test of Rotate Counter Clockwise
|
||||
|
||||
|
||||
# Draw Bars
|
||||
b
|
||||
|
||||
|
||||
# Load Image1
|
||||
i p01image1.txt
|
||||
|
||||
# Print Image1
|
||||
p
|
||||
|
||||
# Rotate Counter Clockwise 90 Degrees Image1
|
||||
-
|
||||
|
||||
# Print Rotated Image1
|
||||
p
|
||||
|
||||
# Rotate Counter Clockwise 90 Degrees Image1
|
||||
-
|
||||
|
||||
# Print Rotated Image1
|
||||
p
|
||||
|
||||
# Rotate Counter Clockwise 90 Degrees Image1
|
||||
-
|
||||
|
||||
# Print Rotated Image1
|
||||
p
|
||||
|
||||
# Rotate Counter Clockwise 90 Degrees Image1
|
||||
-
|
||||
|
||||
# Print Rotated Image1
|
||||
p
|
||||
|
||||
|
||||
# Draw Bars
|
||||
b
|
||||
|
||||
|
||||
# Load Image2
|
||||
i p01image2.txt
|
||||
|
||||
# Print Image2
|
||||
p
|
||||
|
||||
# Rotate Counter Clockwise 90 Degrees Image2
|
||||
-
|
||||
|
||||
# Print Rotated Image2
|
||||
p
|
||||
|
||||
# Rotate Counter Clockwise 90 Degrees Image2
|
||||
-
|
||||
|
||||
# Print Rotated Image2
|
||||
p
|
||||
|
||||
# Rotate Counter Clockwise 90 Degrees Image2
|
||||
-
|
||||
|
||||
# Print Rotated Image2
|
||||
p
|
||||
|
||||
# Rotate Counter Clockwise 90 Degrees Image2
|
||||
-
|
||||
|
||||
# Print Rotated Image2
|
||||
p
|
||||
|
||||
|
||||
# Draw Bars
|
||||
b
|
||||
|
||||
|
||||
# Load Image3
|
||||
i p01image3.txt
|
||||
|
||||
# Print Image3
|
||||
p
|
||||
|
||||
# Rotate Counter Clockwise 90 Degrees Image3
|
||||
-
|
||||
|
||||
# Print Rotated Image3
|
||||
p
|
||||
|
||||
# Rotate Counter Clockwise 90 Degrees Image3
|
||||
-
|
||||
|
||||
# Print Rotated Image3
|
||||
p
|
||||
|
||||
# Rotate Counter Clockwise 90 Degrees Image3
|
||||
-
|
||||
|
||||
# Print Rotated Image3
|
||||
p
|
||||
|
||||
# Rotate Counter Clockwise 90 Degrees Image3
|
||||
-
|
||||
|
||||
# Print Rotated Image3
|
||||
p
|
||||
|
||||
|
||||
# Draw Bars
|
||||
b
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
BIN
CPE212/Project_01/project01
Normal file
BIN
CPE212/Project_01/project01
Normal file
Binary file not shown.
155
CPE212/Project_01/project01.cpp
Normal file
155
CPE212/Project_01/project01.cpp
Normal file
@ -0,0 +1,155 @@
|
||||
/*
|
||||
Noah Woodlee
|
||||
CPE212-01
|
||||
Project 1, due Sunday, Febuary 21, 2020
|
||||
*/
|
||||
#include <iostream>
|
||||
#include <fstream>
|
||||
#include <string>
|
||||
|
||||
// LoadImage defintion
|
||||
void LoadImage(const string imagefile, int image[MAXROWS][MAXCOLS])
|
||||
{
|
||||
ifstream input;
|
||||
input.open(imagefile.c_str());
|
||||
if (!input)
|
||||
{
|
||||
cout << "Error - File unable to be opened." << endl;
|
||||
return;
|
||||
}
|
||||
int rows, cols, nums;
|
||||
string str;
|
||||
getline(input, str);
|
||||
//cout << str;
|
||||
for (int r = 0; r < MAXROWS ; r++) // iterate number of rows
|
||||
{
|
||||
for (int c = 0; c < MAXCOLS; c++) // iterate number of columns
|
||||
{
|
||||
input >> nums;
|
||||
image[r][c]=nums;
|
||||
}
|
||||
}
|
||||
|
||||
} // End of LoadImage
|
||||
|
||||
// Flip Horozontal defintion
|
||||
void FlipHorizontal(int image[MAXROWS][MAXCOLS])
|
||||
{
|
||||
int temp;
|
||||
for (int r = 0; r < MAXROWS; r++) // loop for columns 1 & 10
|
||||
{
|
||||
temp=image[r][0];
|
||||
image[r][0]=image[r][MAXCOLS-1];
|
||||
image[r][MAXCOLS-1]=temp;
|
||||
}
|
||||
for (int r = 0; r < MAXROWS; r++) // loop for columns 2 & 9
|
||||
{
|
||||
temp=image[r][1];
|
||||
image[r][1]=image[r][MAXCOLS-2];
|
||||
image[r][MAXCOLS-2]=temp;
|
||||
}
|
||||
for (int r = 0; r < MAXROWS; r++) // loop for columns 3 & 8
|
||||
{
|
||||
temp=image[r][2];
|
||||
image[r][2]=image[r][MAXCOLS-3];
|
||||
image[r][MAXCOLS-3]=temp;
|
||||
}
|
||||
for (int r = 0; r < MAXROWS; r++) // loop for column 4 & 7
|
||||
{
|
||||
temp=image[r][3];
|
||||
image[r][3]=image[r][MAXCOLS-4];
|
||||
image[r][MAXCOLS-4]=temp;
|
||||
}
|
||||
for (int r = 0; r < MAXROWS; r++) // loop for column 5 & 6
|
||||
{
|
||||
temp=image[r][4];
|
||||
image[r][4]=image[r][MAXCOLS-5];
|
||||
image[r][MAXCOLS-5]=temp;
|
||||
}
|
||||
} // End of FlipHorizontal function
|
||||
|
||||
// FlipVertical defintion
|
||||
void FlipVertical(int image[MAXROWS][MAXCOLS])
|
||||
{
|
||||
int temp;
|
||||
for (int c = 0; c < MAXCOLS; c++) // loop for rows 1 & 10
|
||||
{
|
||||
temp = image[0][c];
|
||||
image[0][c] = image[MAXROWS-1][c];
|
||||
image[MAXROWS-1][c] = temp;
|
||||
}
|
||||
for (int c = 0; c < MAXCOLS; c++) // loop for rows 2 & 9
|
||||
{
|
||||
temp = image[1][c];
|
||||
image[1][c] = image[MAXROWS-2][c];
|
||||
image[MAXCOLS-2][c] = temp;
|
||||
}
|
||||
for (int c = 0; c < MAXCOLS; c++) // loop for rows 3 & 8
|
||||
{
|
||||
temp = image[2][c];
|
||||
image[2][c] = image[MAXROWS-3][c];
|
||||
image[MAXCOLS-3][c]=temp;
|
||||
}
|
||||
for (int c = 0; c < MAXCOLS; c++) // loop for rows 4 & 7
|
||||
{
|
||||
temp = image[3][c];
|
||||
image[3][c] = image[MAXROWS-4][c];
|
||||
image[MAXCOLS-4][c] = temp;
|
||||
}
|
||||
for (int c = 0; c < MAXCOLS; c++) // loop for rows 5 & 6
|
||||
{
|
||||
temp = image[4][c];
|
||||
image[4][c] = image[MAXROWS-5][c];
|
||||
image[MAXCOLS-5][c] = temp;
|
||||
}
|
||||
}
|
||||
|
||||
// RotateCW defintion
|
||||
void RotateCW(int image[MAXROWS][MAXCOLS])
|
||||
{
|
||||
int n = MAXCOLS;
|
||||
for (int i = 0; i < n/2; i++)
|
||||
{
|
||||
for (int j = i; j < n-i-1; j++)
|
||||
{
|
||||
int temp = image[i][j];
|
||||
image[i][j]=image[n-1-j][i];
|
||||
image[n - 1 - j][i] = image[n - 1 - i][n - 1 - j];
|
||||
image[n - 1 - i][n - 1 - j] = image[j][n - 1 - i];
|
||||
image[j][n - 1 - i] = temp;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
// RotateCCW defintion
|
||||
void RotateCCW(int image[MAXROWS][MAXCOLS])
|
||||
{
|
||||
int n=MAXROWS;
|
||||
for(int i=0;i<n/2;i++)
|
||||
{
|
||||
for(int j=i;j<n-i-1;j++)
|
||||
{
|
||||
int temp=image[i][j];
|
||||
image[i][j]=image[j][n-i-1];
|
||||
image[j][n-i-1]=image[n-i-1][n-j-1];
|
||||
image[n-i-1][n-j-1]=image[n-j-1][i];
|
||||
image[n-j-1][i]=temp;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// Transpose defintion
|
||||
void Transpose(int image[MAXROWS][MAXCOLS])
|
||||
{
|
||||
int temp;
|
||||
for (int r = 0; r < MAXROWS; r++){ // loop to increment rows
|
||||
for (int c = 0; c < r; c++) // loop to increment columns
|
||||
{
|
||||
temp = image[r][c];
|
||||
image[r][c] = image[c][r];
|
||||
image[c][r] = temp;
|
||||
}
|
||||
}
|
||||
}
|
BIN
CPE212/Project_02/Project02.pdf
Normal file
BIN
CPE212/Project_02/Project02.pdf
Normal file
Binary file not shown.
39
CPE212/Project_02/blackcard.cpp
Normal file
39
CPE212/Project_02/blackcard.cpp
Normal file
@ -0,0 +1,39 @@
|
||||
// blackcard.cpp inherits from card
|
||||
#include "blackcard.h"
|
||||
|
||||
BlackCard::BlackCard(int v) : Card::Card(v) // Parameterized constructor that creates a black card with value v and unknown suit
|
||||
{
|
||||
Card::SetColor("black"); // set color to black
|
||||
}
|
||||
|
||||
|
||||
string BlackCard::Description() const // Outputs card characteristics - value and color as a string
|
||||
{
|
||||
int Bval = Card::GetValue();
|
||||
string Bcol = Card::GetColor();
|
||||
string d = "Value = "; // temporary variable used to accumulate result
|
||||
|
||||
switch (Bval) // Append card value to variable's value
|
||||
{
|
||||
case 2: d = d + "2"; break; // Number cards
|
||||
case 3: d = d + "3"; break;
|
||||
case 4: d = d + "4"; break;
|
||||
case 5: d = d + "5"; break;
|
||||
case 6: d = d + "6"; break;
|
||||
case 7: d = d + "7"; break;
|
||||
case 8: d = d + "8"; break;
|
||||
case 9: d = d + "9"; break;
|
||||
case 10: d = d + "10"; break;
|
||||
case 11: d = d + "J"; break; // Face cards
|
||||
case 12: d = d + "Q"; break;
|
||||
case 13: d = d + "K"; break;
|
||||
case 14: d = d + "A"; break;
|
||||
|
||||
default: d = d + "?"; break; // Unknown card
|
||||
}
|
||||
d=d+", Color = "; // adds color to output string
|
||||
if (Bcol=="black") d=d + "black";
|
||||
if (Bcol=="red") d=d + "red";
|
||||
else d=+ "unknown";
|
||||
return d; // Return string describing card value
|
||||
}
|
28
CPE212/Project_02/blackcard.h
Normal file
28
CPE212/Project_02/blackcard.h
Normal file
@ -0,0 +1,28 @@
|
||||
//
|
||||
// blackcard.h -- CPE 212-01, Fall 2010 -- Project02 -- Classes
|
||||
//
|
||||
// DO NOT MODIFY OR SUBMIT THIS FILE!!!
|
||||
//
|
||||
|
||||
#ifndef BLACKCARD_H
|
||||
#define BLACKCARD_H
|
||||
|
||||
#include "card.h"
|
||||
|
||||
class BlackCard : public Card
|
||||
{
|
||||
private:
|
||||
// No additional private members
|
||||
|
||||
public:
|
||||
// Constructors
|
||||
BlackCard(int v); // Creates a black card with value v and unknown suit
|
||||
|
||||
string Description() const; // Outputs card characteristics - value and color as a string
|
||||
// Hint: use base class Description method to generate part of
|
||||
// the description and append the color information at the end
|
||||
|
||||
};
|
||||
|
||||
#endif
|
||||
|
BIN
CPE212/Project_02/blackcard.o
Normal file
BIN
CPE212/Project_02/blackcard.o
Normal file
Binary file not shown.
99
CPE212/Project_02/card.cpp
Normal file
99
CPE212/Project_02/card.cpp
Normal file
@ -0,0 +1,99 @@
|
||||
//
|
||||
// card.cpp -- CPE 212-01, Fall 2010 -- Project02 -- Classes
|
||||
//
|
||||
// Add the missing statements to complete each method below
|
||||
// and SUBMIT this file for grading !!!
|
||||
//
|
||||
|
||||
#include <iostream>
|
||||
#include <cstdlib>
|
||||
#include "card.h"
|
||||
|
||||
Card::Card()
|
||||
// Default Constructor: Initializes value to 0, color to "unknown", and suit to 'U'
|
||||
{
|
||||
value=0;
|
||||
color = "Unknown";
|
||||
suit = 'U';
|
||||
}
|
||||
|
||||
|
||||
Card::Card(int v)
|
||||
// Parameterized Constructor: Initializes value to v, color to "unknown", and suit to 'U'
|
||||
{
|
||||
value=v;
|
||||
color = "Unknown";
|
||||
suit = 'U';
|
||||
}
|
||||
|
||||
|
||||
int Card::GetValue() const
|
||||
// Returns variable value
|
||||
{
|
||||
return value;
|
||||
}
|
||||
|
||||
|
||||
string Card::GetColor() const
|
||||
// Returns variable color
|
||||
{
|
||||
return color;
|
||||
}
|
||||
|
||||
|
||||
char Card::GetSuit() const
|
||||
// Returns variable suit
|
||||
{
|
||||
return suit;
|
||||
}
|
||||
|
||||
|
||||
void Card::SetValue(int v)
|
||||
// Sets value to v
|
||||
{
|
||||
value = v;
|
||||
}
|
||||
|
||||
|
||||
void Card::SetColor(string c)
|
||||
// Sets color to c
|
||||
{
|
||||
color = c;
|
||||
}
|
||||
|
||||
|
||||
void Card::SetSuit(char s)
|
||||
// Sets suit to s
|
||||
{
|
||||
suit = s;
|
||||
}
|
||||
|
||||
|
||||
string Card::Description() const
|
||||
// Outputs card characteristics - value as a string
|
||||
// DO NOT MODIFY THIS METHOD !!!!
|
||||
{
|
||||
string d = "Value = "; // temporary variable used to accumulate result
|
||||
|
||||
switch (value) // Append card value to variable's value
|
||||
{
|
||||
case 2: d = d + "2"; break; // Number cards
|
||||
case 3: d = d + "3"; break;
|
||||
case 4: d = d + "4"; break;
|
||||
case 5: d = d + "5"; break;
|
||||
case 6: d = d + "6"; break;
|
||||
case 7: d = d + "7"; break;
|
||||
case 8: d = d + "8"; break;
|
||||
case 9: d = d + "9"; break;
|
||||
case 10: d = d + "10"; break;
|
||||
case 11: d = d + "J"; break; // Face cards
|
||||
case 12: d = d + "Q"; break;
|
||||
case 13: d = d + "K"; break;
|
||||
case 14: d = d + "A"; break;
|
||||
|
||||
default: d = d + "?"; break; // Unknown card
|
||||
}
|
||||
|
||||
return d; // Return string describing card value
|
||||
}
|
||||
|
48
CPE212/Project_02/card.h
Normal file
48
CPE212/Project_02/card.h
Normal file
@ -0,0 +1,48 @@
|
||||
//
|
||||
// card.h -- CPE 212-01, Fall 2010 -- Project02 -- Classes
|
||||
//
|
||||
// Add the missing statements to complete the class declaration below
|
||||
// and SUBMIT this file for grading !!!
|
||||
//
|
||||
|
||||
#include <string>
|
||||
using namespace std;
|
||||
|
||||
#ifndef CARD_H
|
||||
#define CARD_H
|
||||
|
||||
class Card // Class modeling Card ADT
|
||||
{
|
||||
private:
|
||||
int value; // Card value: 2-10 for number cards, 11-14 for JQKA; 0 for unknown
|
||||
string color; // Card color: "red", "black", or "unknown"
|
||||
char suit; // Card suit: 'H' for hearts, 'D' for diamonds, 'C' for clubs, 'S' for spades or 'U' for unknown
|
||||
|
||||
public:
|
||||
//******** Add Constructor Prototypes Below *********//
|
||||
Card(); // Default constructor prototype: creates card with value v, color unknown, and suit U
|
||||
|
||||
Card(int v); // Parameterized constructor prototype: creates card with value v, color unknown, and suit U
|
||||
|
||||
//******** Add Transformer Prototypes Below *********//
|
||||
void SetValue(int v); // SetValue prototype: Sets card value equal to v
|
||||
|
||||
void SetColor(string c); // SetColor prototype: Sets color value equal to c
|
||||
|
||||
void SetSuit(char s); // SetSuit prototype: Sets suit value equal to s
|
||||
|
||||
//******** Add Observer Prototypes Below *********//
|
||||
int GetValue() const; // GetValue prototype: Returns current value of value
|
||||
|
||||
string GetColor() const; // GetColor prototype: Returns current value of color
|
||||
|
||||
char GetSuit() const; // GetSuit prototype: Returns current value of suit
|
||||
|
||||
virtual string Description() const; // Description prototype: Polymorphic Function!!!
|
||||
// Outputs card characteristics - value as a string (see sample output from p01input1.txt)
|
||||
};
|
||||
|
||||
|
||||
#endif
|
||||
|
||||
|
BIN
CPE212/Project_02/card.o
Normal file
BIN
CPE212/Project_02/card.o
Normal file
Binary file not shown.
51
CPE212/Project_02/club.cpp
Normal file
51
CPE212/Project_02/club.cpp
Normal file
@ -0,0 +1,51 @@
|
||||
// club inherits from blackcard
|
||||
#include "club.h"
|
||||
|
||||
Club::Club(int v) : BlackCard::BlackCard(v) // Parameterized constructor that creates a black card with value v and unknown suit
|
||||
{
|
||||
Club::SetSuit('C'); // sets suit to C
|
||||
BlackCard::SetColor("black");
|
||||
}
|
||||
|
||||
string Club::Description() const // Outputs card characteristics - value and color and suit as a string
|
||||
{
|
||||
int Cval = BlackCard::GetValue();
|
||||
string Ccol = BlackCard::GetColor();
|
||||
char Cst = BlackCard::GetSuit();
|
||||
string d = "Value = "; // temporary variable used to accumulate result
|
||||
|
||||
switch (Cval) // Append card value to variable's value
|
||||
{
|
||||
case 2: d = d + "2"; break; // Number cards
|
||||
case 3: d = d + "3"; break;
|
||||
case 4: d = d + "4"; break;
|
||||
case 5: d = d + "5"; break;
|
||||
case 6: d = d + "6"; break;
|
||||
case 7: d = d + "7"; break;
|
||||
case 8: d = d + "8"; break;
|
||||
case 9: d = d + "9"; break;
|
||||
case 10: d = d + "10"; break;
|
||||
|
||||
case 11: d = d + "J"; break; // Face cards
|
||||
case 12: d = d + "Q"; break;
|
||||
case 13: d = d + "K"; break;
|
||||
case 14: d = d + "A"; break;
|
||||
|
||||
default: d = d + "?"; break; // Unknown card
|
||||
}
|
||||
d = d + ", Color = "; // adds color to output string
|
||||
if (Ccol=="black") d = d + "black";
|
||||
if (Ccol=="red") d = d + "red";
|
||||
else d=+ "unknown";
|
||||
// appends suit to output string
|
||||
d =+ ", Suit = ";
|
||||
switch (Cst)
|
||||
{
|
||||
case 'H': d =+ "H"; break;
|
||||
case 'C': d =+ 'C'; break;
|
||||
case 'D': d =+ 'D'; break;
|
||||
case 'U': d =+ 'U'; break;
|
||||
}
|
||||
|
||||
return d; // Return string describing card value
|
||||
}
|
27
CPE212/Project_02/club.h
Normal file
27
CPE212/Project_02/club.h
Normal file
@ -0,0 +1,27 @@
|
||||
//
|
||||
// club.h -- CPE 212-01, Fall 2010 -- Project02 -- Classes
|
||||
//
|
||||
// DO NOT MODIFY OR SUBMIT THIS FILE!!!
|
||||
//
|
||||
|
||||
#ifndef CLUB_H
|
||||
#define CLUB_H
|
||||
|
||||
#include "blackcard.h"
|
||||
|
||||
class Club : public BlackCard
|
||||
{
|
||||
private:
|
||||
// No additional private members
|
||||
|
||||
public:
|
||||
// Constructors
|
||||
Club(int v); // Creates a black club card with value v
|
||||
|
||||
string Description() const; // Outputs card characteristics - value, color, suit
|
||||
// Hint: use base class Description method to generate part of
|
||||
// the description and append the suit information at the end
|
||||
};
|
||||
|
||||
#endif
|
||||
|
BIN
CPE212/Project_02/club.o
Normal file
BIN
CPE212/Project_02/club.o
Normal file
Binary file not shown.
51
CPE212/Project_02/diamond.cpp
Normal file
51
CPE212/Project_02/diamond.cpp
Normal file
@ -0,0 +1,51 @@
|
||||
// Diamond inherits from redcard
|
||||
#include "diamond.h"
|
||||
|
||||
Diamond::Diamond(int v) : RedCard::RedCard(v) // Parameterized constructor that creates a black card with value v and suit s
|
||||
{
|
||||
Card::SetSuit('D'); // sets suit to D
|
||||
}
|
||||
RedCard::Card di; // allows access to functions in Card
|
||||
|
||||
string Diamond::Description() const // Outputs card characteristics - value and color and suit as a string
|
||||
{
|
||||
int Dval = Card::GetValue();
|
||||
string Dcol = Card::GetColor();
|
||||
char Dst = Card::GetSuit();
|
||||
string d = "Value = "; // temporary variable used to accumulate result
|
||||
|
||||
switch (Dval) // Append card value to variable's value
|
||||
{
|
||||
case 2: d = d + "2"; break; // Number cards
|
||||
case 3: d = d + "3"; break;
|
||||
case 4: d = d + "4"; break;
|
||||
case 5: d = d + "5"; break;
|
||||
case 6: d = d + "6"; break;
|
||||
case 7: d = d + "7"; break;
|
||||
case 8: d = d + "8"; break;
|
||||
case 9: d = d + "9"; break;
|
||||
case 10: d = d + "10"; break;
|
||||
|
||||
case 11: d = d + "J"; break; // Face cards
|
||||
case 12: d = d + "Q"; break;
|
||||
case 13: d = d + "K"; break;
|
||||
case 14: d = d + "A"; break;
|
||||
|
||||
default: d = d + "?"; break; // Unknown card
|
||||
}
|
||||
d = d + ", Color = "; // adds color to output string
|
||||
if (Dcol=="black") d = d + "black";
|
||||
if (Dcol=="red") d = d + "red";
|
||||
else d=+ "unknown";
|
||||
// appends suit to output string
|
||||
d =+ ", Suit = ";
|
||||
switch (Dst)
|
||||
{
|
||||
case 'H': d =+ "H"; break;
|
||||
case 'C': d =+ 'C'; break;
|
||||
case 'D': d =+ 'D'; break;
|
||||
case 'U': d =+ 'U'; break;
|
||||
}
|
||||
|
||||
return d; // Return string describing card value
|
||||
}
|
27
CPE212/Project_02/diamond.h
Normal file
27
CPE212/Project_02/diamond.h
Normal file
@ -0,0 +1,27 @@
|
||||
//
|
||||
// diamond.h -- CPE 212-01, Fall 2010 -- Project02 -- Classes
|
||||
//
|
||||
// DO NOT MODIFY OR SUBMIT THIS FILE!!!
|
||||
//
|
||||
|
||||
#ifndef DIAMOND_H
|
||||
#define DIAMOND_H
|
||||
|
||||
#include "redcard.h"
|
||||
|
||||
class Diamond : public RedCard
|
||||
{
|
||||
private:
|
||||
// No additional private members
|
||||
|
||||
public:
|
||||
// Constructors
|
||||
Diamond(int v); // Creates a red diamond card with value v
|
||||
|
||||
string Description() const; // Outputs card characteristics - value, color, suit
|
||||
// Hint: use base class Description method to generate part of
|
||||
// the description and append the suit information at the end
|
||||
};
|
||||
|
||||
#endif
|
||||
|
BIN
CPE212/Project_02/diamond.o
Normal file
BIN
CPE212/Project_02/diamond.o
Normal file
Binary file not shown.
51
CPE212/Project_02/heart.cpp
Normal file
51
CPE212/Project_02/heart.cpp
Normal file
@ -0,0 +1,51 @@
|
||||
// heart inherits from redcard
|
||||
#include "heart.h"
|
||||
|
||||
Heart::Heart(int v) : RedCard::RedCard(v) // Parameterized constructor that creates a black card with value v and unknown suit
|
||||
{
|
||||
Card::SetSuit('H'); // sets suit to H
|
||||
}
|
||||
RedCard::Card ht; // allows access to functions in Card
|
||||
|
||||
string Heart::Description() const // Outputs card characteristics - value and color and suit as a string
|
||||
{
|
||||
int Hval = Card::GetValue();
|
||||
string Hcol = Card::GetColor();
|
||||
char Hst = Card::GetSuit();
|
||||
string d = "Value = "; // temporary variable used to accumulate result
|
||||
|
||||
switch (Hval) // Append card value to variable's value
|
||||
{
|
||||
case 2: d = d + "2"; break; // Number cards
|
||||
case 3: d = d + "3"; break;
|
||||
case 4: d = d + "4"; break;
|
||||
case 5: d = d + "5"; break;
|
||||
case 6: d = d + "6"; break;
|
||||
case 7: d = d + "7"; break;
|
||||
case 8: d = d + "8"; break;
|
||||
case 9: d = d + "9"; break;
|
||||
case 10: d = d + "10"; break;
|
||||
|
||||
case 11: d = d + "J"; break; // Face cards
|
||||
case 12: d = d + "Q"; break;
|
||||
case 13: d = d + "K"; break;
|
||||
case 14: d = d + "A"; break;
|
||||
|
||||
default: d = d + "?"; break; // Unknown card
|
||||
}
|
||||
d = d + ", Color = "; // adds color to output string
|
||||
if (Hcol=="black") d = d + "black";
|
||||
if (Hcol=="red") d = d + "red";
|
||||
else d=+ "unknown";
|
||||
// appends suit to output string
|
||||
d =+ ", Suit = ";
|
||||
switch (Hst)
|
||||
{
|
||||
case 'H': d =+ "H"; break;
|
||||
case 'C': d =+ 'C'; break;
|
||||
case 'D': d =+ 'D'; break;
|
||||
case 'U': d =+ 'U'; break;
|
||||
}
|
||||
|
||||
return d; // Return string describing card value
|
||||
}
|
28
CPE212/Project_02/heart.h
Normal file
28
CPE212/Project_02/heart.h
Normal file
@ -0,0 +1,28 @@
|
||||
//
|
||||
// heart.h -- CPE 212-01, Fall 2010 -- Project02 -- Classes
|
||||
//
|
||||
// DO NOT MODIFY OR SUBMIT THIS FILE!!!
|
||||
//
|
||||
|
||||
#ifndef HEART_H
|
||||
#define HEART_H
|
||||
|
||||
#include "redcard.h"
|
||||
|
||||
class Heart : public RedCard
|
||||
{
|
||||
private:
|
||||
// No additional private members
|
||||
|
||||
public:
|
||||
// Constructors
|
||||
Heart(int v); // Creates a red heart card with value v
|
||||
|
||||
string Description() const; // Outputs card characteristics - value, color, suit
|
||||
// Hint: use base class Description method to generate part of
|
||||
// the description and append the suit information at the end
|
||||
};
|
||||
|
||||
#endif
|
||||
|
||||
|
BIN
CPE212/Project_02/heart.o
Normal file
BIN
CPE212/Project_02/heart.o
Normal file
Binary file not shown.
148
CPE212/Project_02/main.cpp
Normal file
148
CPE212/Project_02/main.cpp
Normal file
@ -0,0 +1,148 @@
|
||||
//
|
||||
// main.cpp -- Project02, CPE212 Fall 2010 -- Classes
|
||||
//
|
||||
// Driver program for Card program which is used to test each
|
||||
// class member function.
|
||||
//
|
||||
// DO NOT MODIFY OR SUBMIT THIS FILE
|
||||
//
|
||||
|
||||
// List of allowed include files appear below
|
||||
#include <iostream>
|
||||
#include <fstream>
|
||||
#include <string>
|
||||
#include "card.h"
|
||||
#include "heart.h"
|
||||
#include "diamond.h"
|
||||
#include "club.h"
|
||||
#include "spade.h"
|
||||
|
||||
|
||||
using namespace std; // Global using declaration
|
||||
|
||||
void Bar(); // Prototype for Bar function
|
||||
void Print(Card* someCard); // Prototype for Print function
|
||||
|
||||
|
||||
|
||||
// Start of main() function
|
||||
|
||||
int main (int argc, char * const argv[]) // Command-line arguments (more on this later)
|
||||
{
|
||||
ifstream inputs; // Input file stream variable for test file
|
||||
char op, ch; // Hold operation and optional char input from test file
|
||||
string comment; // Holds comment string input from test file
|
||||
Card* ptr = NULL; // Pointer to the current card
|
||||
int v; // Holds card value input from test file
|
||||
|
||||
|
||||
// Output usage message if test input file name is not provided
|
||||
if (argc != 2)
|
||||
{
|
||||
cout << "Usage:\n project02 <inputfile>\n";
|
||||
return 1;
|
||||
}
|
||||
|
||||
// Attempt to open test input file -- terminate if file does not open
|
||||
inputs.open(argv[1]);
|
||||
if (!inputs)
|
||||
{
|
||||
cout << "Error - unable to open input file" << endl;
|
||||
return 1;
|
||||
}
|
||||
|
||||
// Process comment line from input file
|
||||
getline(inputs, comment); // Input file header comment
|
||||
cout << endl << comment << endl << endl; // Output file header comment
|
||||
|
||||
|
||||
// Below is the primary loop that processes each operation appearing within the test file.
|
||||
// Starts with an initial priming read of first operation
|
||||
|
||||
inputs >> op; // Attempt to input first test operation from file
|
||||
|
||||
while (inputs) // While Not-EOF
|
||||
{
|
||||
switch (op) // Process operation input from test file
|
||||
{
|
||||
case '#': // Test file comment
|
||||
getline(inputs, comment); // Input and echo the comment appearing in the test file
|
||||
cout << '#' << comment << endl;
|
||||
break;
|
||||
|
||||
case 'p': // Print Card
|
||||
Print(ptr);
|
||||
cout << endl;
|
||||
break;
|
||||
|
||||
case 'b': // Print Bar
|
||||
Bar(); // Function definition appears at the end of this file
|
||||
break;
|
||||
|
||||
case '+': // Constructor
|
||||
inputs >> op; // Input card type into op
|
||||
|
||||
try
|
||||
{
|
||||
switch (op) // Invoke requested constructor with argument as required
|
||||
{
|
||||
case 'h': inputs >> v; cout << "Heart(" << v << ") -- "; ptr = new Heart(v); break;
|
||||
case 'd': inputs >> v; cout << "Diamond(" << v << ") -- "; ptr = new Diamond(v); break;
|
||||
case 'c': inputs >> v; cout << "Club(" << v << ") -- "; ptr = new Club(v); break;
|
||||
case 's': inputs >> v; cout << "Spade(" << v << ") -- "; ptr = new Spade(v); break;
|
||||
case 'b': inputs >> v; cout << "BlackCard(" << v << ") -- "; ptr = new BlackCard(v); break;
|
||||
case 'r': inputs >> v; cout << "RedCard(" << v << ") -- "; ptr = new RedCard(v); break;
|
||||
case 'x': inputs >> v; cout << "Card(" << v << ") -- "; ptr = new Card(v); break;
|
||||
case 'z': cout << "Card() -- "; ptr = new Card; break;
|
||||
default: cout << "Error: Unknown Card Type"; ptr = NULL; break;
|
||||
}
|
||||
cout << "Successful";
|
||||
}
|
||||
catch ( ... ) // Catch any exception thrown above
|
||||
{
|
||||
cout << "Failed";
|
||||
}
|
||||
|
||||
cout << endl;
|
||||
break;
|
||||
|
||||
case '-': // Destructor
|
||||
delete ptr; // Deallocate card
|
||||
ptr = NULL; // Make sure that ptr is not a dangling pointer
|
||||
break;
|
||||
|
||||
default: // Error
|
||||
cout << "Error - unrecognized operation '" << op << "'" << endl;
|
||||
cout << "Terminating now..." << endl;
|
||||
return 1;
|
||||
break;
|
||||
}
|
||||
//cout << endl;
|
||||
|
||||
inputs >> op; // Attempt to input next command
|
||||
}
|
||||
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
/************** Implementation of Print() and Bar() functions ********************/
|
||||
|
||||
// DO NOT MODIFY THIS CODE
|
||||
|
||||
void Bar()
|
||||
// Bar() -- prints horizontal bar
|
||||
{
|
||||
cout << "#################################################################" << endl;
|
||||
} // End Bar()
|
||||
|
||||
|
||||
void Print(Card* someCard)
|
||||
// Writes description of card to stdout
|
||||
{
|
||||
cout << someCard->Description(); // Hint: Polymorphic function
|
||||
}
|
||||
|
||||
/************** End of main.cpp ***************/
|
||||
|
||||
|
BIN
CPE212/Project_02/main.o
Normal file
BIN
CPE212/Project_02/main.o
Normal file
Binary file not shown.
43
CPE212/Project_02/makefile
Normal file
43
CPE212/Project_02/makefile
Normal file
@ -0,0 +1,43 @@
|
||||
# Project02 Makefile -- CPE 212-01, Fall 2010
|
||||
|
||||
project02: main.o card.o redcard.o blackcard.o heart.o diamond.o club.o spade.o
|
||||
g++ main.o card.o redcard.o blackcard.o heart.o diamond.o club.o spade.o -o project02
|
||||
|
||||
|
||||
main.o: main.cpp card.h redcard.h blackcard.h heart.h diamond.h club.h spade.h
|
||||
g++ -c main.cpp
|
||||
|
||||
|
||||
card.o: card.cpp card.h
|
||||
g++ -c card.cpp
|
||||
|
||||
|
||||
redcard.o: redcard.cpp redcard.h card.h
|
||||
g++ -c redcard.cpp
|
||||
|
||||
|
||||
blackcard.o: blackcard.cpp blackcard.h card.h
|
||||
g++ -c blackcard.cpp
|
||||
|
||||
|
||||
heart.o: heart.cpp heart.h redcard.h card.h
|
||||
g++ -c heart.cpp
|
||||
|
||||
|
||||
diamond.o: diamond.cpp diamond.h redcard.h card.h
|
||||
g++ -c diamond.cpp
|
||||
|
||||
|
||||
club.o: club.cpp club.h blackcard.h card.h
|
||||
g++ -c club.cpp
|
||||
|
||||
|
||||
spade.o: spade.cpp spade.h blackcard.h card.h
|
||||
g++ -c spade.cpp
|
||||
|
||||
|
||||
# Remove executable and all object files if they exist
|
||||
clean:
|
||||
rm *.o project02
|
||||
|
||||
|
67
CPE212/Project_02/p02input1.txt
Normal file
67
CPE212/Project_02/p02input1.txt
Normal file
@ -0,0 +1,67 @@
|
||||
# p02input1.txt - Test Card Class
|
||||
|
||||
b
|
||||
|
||||
# Test of default constructor
|
||||
+ z
|
||||
p
|
||||
-
|
||||
|
||||
b
|
||||
|
||||
# Test of parameterized constructor
|
||||
+ x 2
|
||||
p
|
||||
-
|
||||
|
||||
b
|
||||
|
||||
# Test of parameterized constructor
|
||||
+ x 9
|
||||
p
|
||||
-
|
||||
|
||||
b
|
||||
|
||||
# Test of parameterized constructor
|
||||
+ x 10
|
||||
p
|
||||
-
|
||||
|
||||
b
|
||||
|
||||
# Test of parameterized constructor
|
||||
+ x 11
|
||||
p
|
||||
-
|
||||
|
||||
b
|
||||
|
||||
# Test of parameterized constructor
|
||||
+ x 12
|
||||
p
|
||||
-
|
||||
|
||||
b
|
||||
|
||||
# Test of parameterized constructor
|
||||
+ x 13
|
||||
p
|
||||
-
|
||||
|
||||
b
|
||||
|
||||
# Test of parameterized constructor
|
||||
+ x 14
|
||||
p
|
||||
-
|
||||
|
||||
b
|
||||
|
||||
# Test of parameterized constructor
|
||||
+ x 15
|
||||
p
|
||||
-
|
||||
|
||||
b
|
||||
|
67
CPE212/Project_02/p02input2.txt
Normal file
67
CPE212/Project_02/p02input2.txt
Normal file
@ -0,0 +1,67 @@
|
||||
# p02input2.txt - Test RedCard Class
|
||||
|
||||
b
|
||||
|
||||
# Test of parameterized constructor
|
||||
+ r 1
|
||||
p
|
||||
-
|
||||
|
||||
b
|
||||
|
||||
# Test of parameterized constructor
|
||||
+ r 2
|
||||
p
|
||||
-
|
||||
|
||||
b
|
||||
|
||||
# Test of parameterized constructor
|
||||
+ r 9
|
||||
p
|
||||
-
|
||||
|
||||
b
|
||||
|
||||
# Test of parameterized constructor
|
||||
+ r 10
|
||||
p
|
||||
-
|
||||
|
||||
b
|
||||
|
||||
# Test of parameterized constructor
|
||||
+ r 11
|
||||
p
|
||||
-
|
||||
|
||||
b
|
||||
|
||||
# Test of parameterized constructor
|
||||
+ r 12
|
||||
p
|
||||
-
|
||||
|
||||
b
|
||||
|
||||
# Test of parameterized constructor
|
||||
+ r 13
|
||||
p
|
||||
-
|
||||
|
||||
b
|
||||
|
||||
# Test of parameterized constructor
|
||||
+ r 14
|
||||
p
|
||||
-
|
||||
|
||||
b
|
||||
|
||||
# Test of parameterized constructor
|
||||
+ r 15
|
||||
p
|
||||
-
|
||||
|
||||
b
|
||||
|
68
CPE212/Project_02/p02input3.txt
Normal file
68
CPE212/Project_02/p02input3.txt
Normal file
@ -0,0 +1,68 @@
|
||||
# p02input3.txt - Test BlackCard Class
|
||||
|
||||
b
|
||||
|
||||
# Test of parameterized constructor
|
||||
+ b 1
|
||||
p
|
||||
-
|
||||
|
||||
b
|
||||
|
||||
# Test of parameterized constructor
|
||||
+ b 2
|
||||
p
|
||||
-
|
||||
|
||||
b
|
||||
|
||||
# Test of parameterized constructor
|
||||
+ b 9
|
||||
p
|
||||
-
|
||||
|
||||
b
|
||||
|
||||
# Test of parameterized constructor
|
||||
+ b 10
|
||||
p
|
||||
-
|
||||
|
||||
b
|
||||
|
||||
# Test of parameterized constructor
|
||||
+ b 11
|
||||
p
|
||||
-
|
||||
|
||||
b
|
||||
|
||||
# Test of parameterized constructor
|
||||
+ b 12
|
||||
p
|
||||
-
|
||||
|
||||
b
|
||||
|
||||
# Test of parameterized constructor
|
||||
+ b 13
|
||||
p
|
||||
-
|
||||
|
||||
b
|
||||
|
||||
# Test of parameterized constructor
|
||||
+ b 14
|
||||
p
|
||||
-
|
||||
|
||||
b
|
||||
|
||||
# Test of parameterized constructor
|
||||
+ b 15
|
||||
p
|
||||
-
|
||||
|
||||
b
|
||||
|
||||
|
141
CPE212/Project_02/p02input4.txt
Normal file
141
CPE212/Project_02/p02input4.txt
Normal file
@ -0,0 +1,141 @@
|
||||
# p02input4.txt - Test Heart and Diamond Classes
|
||||
|
||||
b
|
||||
|
||||
# Test of Heart Class
|
||||
|
||||
b
|
||||
|
||||
# Test of parameterized constructor
|
||||
+ h 1
|
||||
p
|
||||
-
|
||||
|
||||
b
|
||||
|
||||
# Test of parameterized constructor
|
||||
+ h 2
|
||||
p
|
||||
-
|
||||
|
||||
b
|
||||
|
||||
# Test of parameterized constructor
|
||||
+ h 9
|
||||
p
|
||||
-
|
||||
|
||||
b
|
||||
|
||||
# Test of parameterized constructor
|
||||
+ h 10
|
||||
p
|
||||
-
|
||||
|
||||
b
|
||||
|
||||
# Test of parameterized constructor
|
||||
+ h 11
|
||||
p
|
||||
-
|
||||
|
||||
b
|
||||
|
||||
# Test of parameterized constructor
|
||||
+ h 12
|
||||
p
|
||||
-
|
||||
|
||||
b
|
||||
|
||||
# Test of parameterized constructor
|
||||
+ h 13
|
||||
p
|
||||
-
|
||||
|
||||
b
|
||||
|
||||
# Test of parameterized constructor
|
||||
+ h 14
|
||||
p
|
||||
-
|
||||
|
||||
b
|
||||
|
||||
# Test of parameterized constructor
|
||||
+ h 15
|
||||
p
|
||||
-
|
||||
|
||||
b
|
||||
b
|
||||
|
||||
|
||||
# Test of Diamond Class
|
||||
|
||||
b
|
||||
|
||||
# Test of parameterized constructor
|
||||
+ d 1
|
||||
p
|
||||
-
|
||||
|
||||
b
|
||||
|
||||
# Test of parameterized constructor
|
||||
+ d 2
|
||||
p
|
||||
-
|
||||
|
||||
b
|
||||
|
||||
# Test of parameterized constructor
|
||||
+ d 9
|
||||
p
|
||||
-
|
||||
|
||||
b
|
||||
|
||||
# Test of parameterized constructor
|
||||
+ d 10
|
||||
p
|
||||
-
|
||||
|
||||
b
|
||||
|
||||
# Test of parameterized constructor
|
||||
+ d 11
|
||||
p
|
||||
-
|
||||
|
||||
b
|
||||
|
||||
# Test of parameterized constructor
|
||||
+ d 12
|
||||
p
|
||||
-
|
||||
|
||||
b
|
||||
|
||||
# Test of parameterized constructor
|
||||
+ d 13
|
||||
p
|
||||
-
|
||||
|
||||
b
|
||||
|
||||
# Test of parameterized constructor
|
||||
+ d 14
|
||||
p
|
||||
-
|
||||
|
||||
b
|
||||
|
||||
# Test of parameterized constructor
|
||||
+ d 15
|
||||
p
|
||||
-
|
||||
|
||||
b
|
||||
|
||||
|
141
CPE212/Project_02/p02input5.txt
Normal file
141
CPE212/Project_02/p02input5.txt
Normal file
@ -0,0 +1,141 @@
|
||||
# p02input5.txt - Test Club and Spade Classes
|
||||
|
||||
b
|
||||
|
||||
# Test of Club Class
|
||||
|
||||
b
|
||||
|
||||
# Test of parameterized constructor
|
||||
+ c 1
|
||||
p
|
||||
-
|
||||
|
||||
b
|
||||
|
||||
# Test of parameterized constructor
|
||||
+ c 2
|
||||
p
|
||||
-
|
||||
|
||||
b
|
||||
|
||||
# Test of parameterized constructor
|
||||
+ c 9
|
||||
p
|
||||
-
|
||||
|
||||
b
|
||||
|
||||
# Test of parameterized constructor
|
||||
+ c 10
|
||||
p
|
||||
-
|
||||
|
||||
b
|
||||
|
||||
# Test of parameterized constructor
|
||||
+ c 11
|
||||
p
|
||||
-
|
||||
|
||||
b
|
||||
|
||||
# Test of parameterized constructor
|
||||
+ c 12
|
||||
p
|
||||
-
|
||||
|
||||
b
|
||||
|
||||
# Test of parameterized constructor
|
||||
+ c 13
|
||||
p
|
||||
-
|
||||
|
||||
b
|
||||
|
||||
# Test of parameterized constructor
|
||||
+ c 14
|
||||
p
|
||||
-
|
||||
|
||||
b
|
||||
|
||||
# Test of parameterized constructor
|
||||
+ c 15
|
||||
p
|
||||
-
|
||||
|
||||
b
|
||||
b
|
||||
|
||||
|
||||
# Test of Spade Class
|
||||
|
||||
b
|
||||
|
||||
# Test of parameterized constructor
|
||||
+ s 1
|
||||
p
|
||||
-
|
||||
|
||||
b
|
||||
|
||||
# Test of parameterized constructor
|
||||
+ s 2
|
||||
p
|
||||
-
|
||||
|
||||
b
|
||||
|
||||
# Test of parameterized constructor
|
||||
+ s 9
|
||||
p
|
||||
-
|
||||
|
||||
b
|
||||
|
||||
# Test of parameterized constructor
|
||||
+ s 10
|
||||
p
|
||||
-
|
||||
|
||||
b
|
||||
|
||||
# Test of parameterized constructor
|
||||
+ s 11
|
||||
p
|
||||
-
|
||||
|
||||
b
|
||||
|
||||
# Test of parameterized constructor
|
||||
+ s 12
|
||||
p
|
||||
-
|
||||
|
||||
b
|
||||
|
||||
# Test of parameterized constructor
|
||||
+ s 13
|
||||
p
|
||||
-
|
||||
|
||||
b
|
||||
|
||||
# Test of parameterized constructor
|
||||
+ s 14
|
||||
p
|
||||
-
|
||||
|
||||
b
|
||||
|
||||
# Test of parameterized constructor
|
||||
+ s 15
|
||||
p
|
||||
-
|
||||
|
||||
b
|
||||
|
||||
|
BIN
CPE212/Project_02/project02
Normal file
BIN
CPE212/Project_02/project02
Normal file
Binary file not shown.
40
CPE212/Project_02/redcard.cpp
Normal file
40
CPE212/Project_02/redcard.cpp
Normal file
@ -0,0 +1,40 @@
|
||||
// redcard inherits from card
|
||||
#include "redcard.h"
|
||||
|
||||
RedCard::RedCard(int v) : Card::Card(v) // Parameterized constructor that creates a red card with value v and unknown suit
|
||||
{
|
||||
Card::SetColor("red");
|
||||
}
|
||||
|
||||
|
||||
|
||||
string RedCard::Description() const // Outputs card characteristics - value and color as a string
|
||||
{
|
||||
int Rval = Card::GetValue();
|
||||
string Rcol = Card::GetColor();
|
||||
string d = "Value = "; // temporary variable used to accumulate result
|
||||
|
||||
switch (Rval) // Append card value to variable's value
|
||||
{
|
||||
case 2: d = d + "2"; break; // Number cards
|
||||
case 3: d = d + "3"; break;
|
||||
case 4: d = d + "4"; break;
|
||||
case 5: d = d + "5"; break;
|
||||
case 6: d = d + "6"; break;
|
||||
case 7: d = d + "7"; break;
|
||||
case 8: d = d + "8"; break;
|
||||
case 9: d = d + "9"; break;
|
||||
case 10: d = d + "10"; break;
|
||||
case 11: d = d + "J"; break; // Face cards
|
||||
case 12: d = d + "Q"; break;
|
||||
case 13: d = d + "K"; break;
|
||||
case 14: d = d + "A"; break;
|
||||
|
||||
default: d = d + "?"; break; // Unknown card
|
||||
}
|
||||
d = d + ", Color = "; // adds color to output string
|
||||
if (Rcol=="black") d = d + "black";
|
||||
if (Rcol=="red") d = d + "red";
|
||||
else d=+ "unknown";
|
||||
return d; // Return string describing card value
|
||||
}
|
27
CPE212/Project_02/redcard.h
Normal file
27
CPE212/Project_02/redcard.h
Normal file
@ -0,0 +1,27 @@
|
||||
//
|
||||
// redcards.h -- CPE 212-01, Fall 2010 -- Project02 -- Classes
|
||||
//
|
||||
// DO NOT MODIFY OR SUBMIT THIS FILE!!!
|
||||
//
|
||||
|
||||
#ifndef REDCARD_H
|
||||
#define REDCARD_H
|
||||
|
||||
#include "card.h"
|
||||
|
||||
class RedCard : public Card
|
||||
{
|
||||
private:
|
||||
// No additional private members
|
||||
|
||||
public:
|
||||
// Constructors
|
||||
RedCard(int v); // Creates a red card with value v and unknown suit
|
||||
|
||||
string Description() const; // Outputs card characteristics - value and color as a string
|
||||
// Hint: use base class Description method to generate part of
|
||||
// the description and append the color information at the end
|
||||
};
|
||||
|
||||
#endif
|
||||
|
BIN
CPE212/Project_02/redcard.o
Normal file
BIN
CPE212/Project_02/redcard.o
Normal file
Binary file not shown.
52
CPE212/Project_02/spade.cpp
Normal file
52
CPE212/Project_02/spade.cpp
Normal file
@ -0,0 +1,52 @@
|
||||
// spade inherits from blackcard
|
||||
#include "spade.h"
|
||||
|
||||
Spade::Spade(int v) : BlackCard::BlackCard(v) // Parameterized constructor that creates a black card with value v and unknown suit
|
||||
{
|
||||
Card::SetSuit('S'); // sets suit to S
|
||||
|
||||
}
|
||||
Spade::Card sp; // allows access to functions in Card
|
||||
|
||||
string Spade::Description() const // Outputs card characteristics - value and color and suit as a string
|
||||
{
|
||||
int Sval = Card::GetValue();
|
||||
string Scol = Card::GetColor();
|
||||
char Sst = Card::GetSuit();
|
||||
string d = "Value = "; // temporary variable used to accumulate result
|
||||
|
||||
switch (Sval) // Append card value to variable's value
|
||||
{
|
||||
case 2: d = d + "2"; break; // Number cards
|
||||
case 3: d = d + "3"; break;
|
||||
case 4: d = d + "4"; break;
|
||||
case 5: d = d + "5"; break;
|
||||
case 6: d = d + "6"; break;
|
||||
case 7: d = d + "7"; break;
|
||||
case 8: d = d + "8"; break;
|
||||
case 9: d = d + "9"; break;
|
||||
case 10: d = d + "10"; break;
|
||||
|
||||
case 11: d = d + "J"; break; // Face cards
|
||||
case 12: d = d + "Q"; break;
|
||||
case 13: d = d + "K"; break;
|
||||
case 14: d = d + "A"; break;
|
||||
|
||||
default: d = d + "?"; break; // Unknown card
|
||||
}
|
||||
d = d + ", Color = "; // adds color to output string
|
||||
if (Scol=="black") d = d + "black";
|
||||
if (Scol=="red") d = d + "red";
|
||||
else d=+ "unknown";
|
||||
// appends suit to output string
|
||||
d =+ ", Suit = ";
|
||||
switch (Sst)
|
||||
{
|
||||
case 'H': d =+ "H"; break;
|
||||
case 'C': d =+ 'C'; break;
|
||||
case 'D': d =+ 'D'; break;
|
||||
case 'U': d =+ 'U'; break;
|
||||
}
|
||||
|
||||
return d; // Return string describing card value
|
||||
}
|
26
CPE212/Project_02/spade.h
Normal file
26
CPE212/Project_02/spade.h
Normal file
@ -0,0 +1,26 @@
|
||||
//
|
||||
// spade.h -- CPE 212-01, Fall 2010 -- Project02 -- Classes
|
||||
//
|
||||
// DO NOT MODIFY OR SUBMIT THIS FILE!!!
|
||||
//
|
||||
|
||||
#ifndef SPADE_H
|
||||
#define SPADE_H
|
||||
|
||||
#include "blackcard.h"
|
||||
|
||||
class Spade : public BlackCard
|
||||
{
|
||||
private:
|
||||
// No additional private members
|
||||
|
||||
public:
|
||||
// Constructors
|
||||
Spade(int v); // Creates a black spade card with value v
|
||||
|
||||
string Description() const; // Outputs card characteristics - value, color, suit
|
||||
// Hint: use base class Description method to generate part of
|
||||
// the description and append the suit information at the end
|
||||
};
|
||||
|
||||
#endif
|
BIN
CPE212/Project_02/spade.o
Normal file
BIN
CPE212/Project_02/spade.o
Normal file
Binary file not shown.
212
CPE212/Project_03/main.cpp
Normal file
212
CPE212/Project_03/main.cpp
Normal file
@ -0,0 +1,212 @@
|
||||
//
|
||||
// main.cpp -- 2010 Fall -- Project03 -- Stacks
|
||||
//
|
||||
// Driver program for Stack ADT -- The text files (read by this code) contain a series of commands
|
||||
// that will help you test your Stack ADT code by triggering various Stack class methods.
|
||||
//
|
||||
// DO NOT MODIFY OR SUBMIT THIS FILE
|
||||
//
|
||||
#include <iostream>
|
||||
#include <fstream>
|
||||
#include <new>
|
||||
#include <cstddef>
|
||||
#include "stack.h"
|
||||
|
||||
using namespace std;
|
||||
|
||||
int main(int argc, char* argv[])
|
||||
{
|
||||
ifstream inputs; // Input file for commands
|
||||
char op; // Hold operation and optional char input
|
||||
int value; // Value input from file
|
||||
string comment; // Holds comment from file
|
||||
Stack* sPtr = NULL; // Will point to TemplateQ object
|
||||
|
||||
// Output usage message if one input file name is not provided
|
||||
if (argc != 2)
|
||||
{
|
||||
cout << "Usage:\n project03 <inputfile>\n";
|
||||
return 1;
|
||||
}
|
||||
|
||||
// Attempt to open input file -- terminate if file does not open
|
||||
inputs.open(argv[1]);
|
||||
if (!inputs)
|
||||
{
|
||||
cout << "Error - unable to open input file" << endl;
|
||||
return 1;
|
||||
}
|
||||
|
||||
// Input and echo header comment from file
|
||||
getline(inputs, comment);
|
||||
cout << endl << '#' << comment << endl;
|
||||
|
||||
// Process commands from input file
|
||||
inputs >> op; // Attempt to input first command
|
||||
while (inputs)
|
||||
{
|
||||
switch (op) // Process operation input from file
|
||||
{
|
||||
case '#': // Test file comment
|
||||
getline(inputs, comment); // Input and echo the comment appearing in the test file
|
||||
cout << '#' << comment << endl;
|
||||
break;
|
||||
|
||||
case 'c': // Parameterized Constructor
|
||||
inputs >> value;
|
||||
cout << endl << "Stack(" << value << ")";
|
||||
try
|
||||
{
|
||||
sPtr = new Stack(value); // Attempt to create a stack object with array size value
|
||||
cout << " -- Successful" << endl;
|
||||
}
|
||||
catch ( std::bad_alloc )
|
||||
{
|
||||
cout << "Failed : Terminating now..." << endl;
|
||||
return 1;
|
||||
}
|
||||
break;
|
||||
|
||||
case '+': // Push
|
||||
inputs >> value;
|
||||
cout << "Push(" << value << ")";
|
||||
try
|
||||
{
|
||||
sPtr->Push(value);
|
||||
cout << " -- successful";
|
||||
}
|
||||
catch (StackFull)
|
||||
{
|
||||
cout << " -- Failed Full Stack";
|
||||
}
|
||||
cout << endl;
|
||||
break;
|
||||
|
||||
case '-': // Pop
|
||||
cout << "Pop() -- ";
|
||||
try
|
||||
{
|
||||
sPtr->Pop();
|
||||
cout << "successful";
|
||||
}
|
||||
catch (StackEmpty)
|
||||
{
|
||||
cout << "Failed Empty Stack";
|
||||
}
|
||||
cout << endl;
|
||||
break;
|
||||
|
||||
case 'f': // IsFull
|
||||
cout << "IsFull() -- ";
|
||||
try
|
||||
{
|
||||
if (sPtr->IsFull())
|
||||
cout << "true";
|
||||
else
|
||||
cout << "false";
|
||||
}
|
||||
catch ( ... )
|
||||
{
|
||||
cout << "operation failed";
|
||||
}
|
||||
cout << endl;
|
||||
break;
|
||||
|
||||
case 'e': // IsEmpty
|
||||
cout << "IsEmpty() -- ";
|
||||
try
|
||||
{
|
||||
if (sPtr->IsEmpty())
|
||||
cout << "true";
|
||||
else
|
||||
cout << "false";
|
||||
}
|
||||
catch ( ... )
|
||||
{
|
||||
cout << "operation failed";
|
||||
}
|
||||
cout << endl;
|
||||
break;
|
||||
|
||||
case 'm': // Make Empty
|
||||
sPtr->MakeEmpty();
|
||||
cout << "MakeEmpty()" << endl;
|
||||
break;
|
||||
|
||||
case 'p': // Print Stack
|
||||
cout << "Print() -- ";
|
||||
sPtr->Print();
|
||||
break;
|
||||
|
||||
case 't': // Top of Stack
|
||||
try
|
||||
{
|
||||
cout << "Top() -- " << sPtr->Top() << endl;
|
||||
}
|
||||
catch (StackEmpty)
|
||||
{
|
||||
cout << "Top() -- Failed Empty Stack" << endl;
|
||||
}
|
||||
break;
|
||||
|
||||
case '>': // Max value within Stack
|
||||
try
|
||||
{
|
||||
cout << "Max() -- " << sPtr->Max() << endl;
|
||||
}
|
||||
catch (StackEmpty)
|
||||
{
|
||||
cout << "Max() -- Failed Empty Stack" << endl;
|
||||
}
|
||||
break;
|
||||
|
||||
case '<': // Min value within Stack
|
||||
try
|
||||
{
|
||||
cout << "Min() -- " << sPtr->Min() << endl;
|
||||
}
|
||||
catch (StackEmpty)
|
||||
{
|
||||
cout << "Min() -- Failed Empty Stack" << endl;
|
||||
}
|
||||
break;
|
||||
|
||||
case '?': // Peek(n) Stack
|
||||
inputs >> value;
|
||||
try
|
||||
{
|
||||
cout << "Peek(" << value << ") -- " << sPtr->Peek(value) << endl;
|
||||
}
|
||||
catch (StackInvalidPeek)
|
||||
{
|
||||
cout << "Peek(" << value << ") -- Failed Invalid Peek" << endl;
|
||||
}
|
||||
break;
|
||||
|
||||
case 's': // Size of Stack
|
||||
cout << "Size() -- " << sPtr->Size() << endl;
|
||||
break;
|
||||
|
||||
case 'z': // Capacity of Stack
|
||||
cout << "Capacity() -- " << sPtr->Capacity() << endl;
|
||||
break;
|
||||
|
||||
case 'd': // Destructor
|
||||
delete sPtr;
|
||||
sPtr = NULL;
|
||||
cout << "~Stack()" << endl << endl;
|
||||
break;
|
||||
|
||||
default: // Error
|
||||
cout << "Error - unrecognized operation '" << op << "'" << endl;
|
||||
cout << "Terminating now..." << endl;
|
||||
return 1;
|
||||
break;
|
||||
}
|
||||
|
||||
inputs >> op; // Attempt to input next command
|
||||
}
|
||||
|
||||
return 0;
|
||||
} // End main()
|
||||
|
BIN
CPE212/Project_03/main.o
Normal file
BIN
CPE212/Project_03/main.o
Normal file
Binary file not shown.
15
CPE212/Project_03/makefile
Normal file
15
CPE212/Project_03/makefile
Normal file
@ -0,0 +1,15 @@
|
||||
# Project03 makefile
|
||||
|
||||
project03: stack.o main.o
|
||||
g++ stack.o main.o -o project03
|
||||
|
||||
stack.o: stack.h stack.cpp
|
||||
g++ -c stack.cpp
|
||||
|
||||
main.o: stack.h main.cpp
|
||||
g++ -c main.cpp
|
||||
|
||||
clean:
|
||||
rm *.o project03
|
||||
|
||||
|
43
CPE212/Project_03/p03input1.txt
Normal file
43
CPE212/Project_03/p03input1.txt
Normal file
@ -0,0 +1,43 @@
|
||||
# p03input1.txt -- Test: Stack(), Push(), Pop(), and Top()
|
||||
|
||||
c 8
|
||||
p
|
||||
t
|
||||
+ 5
|
||||
+ 10
|
||||
+ 15
|
||||
p
|
||||
t
|
||||
+ 20
|
||||
+ 25
|
||||
+ 30
|
||||
p
|
||||
t
|
||||
-
|
||||
-
|
||||
p
|
||||
+ 35
|
||||
+ 40
|
||||
t
|
||||
+ 45
|
||||
t
|
||||
p
|
||||
-
|
||||
-
|
||||
-
|
||||
-
|
||||
-
|
||||
-
|
||||
-
|
||||
-
|
||||
p
|
||||
t
|
||||
d
|
||||
|
||||
|
||||
c 4
|
||||
p
|
||||
-
|
||||
t
|
||||
d
|
||||
|
38
CPE212/Project_03/p03input2.txt
Normal file
38
CPE212/Project_03/p03input2.txt
Normal file
@ -0,0 +1,38 @@
|
||||
# p03input2.txt -- Test IsFull(), IsEmpty(), and MakeEmpty()
|
||||
|
||||
c 8
|
||||
e
|
||||
f
|
||||
+ 5
|
||||
+ 10
|
||||
+ 15
|
||||
+ 20
|
||||
+ 25
|
||||
+ 30
|
||||
p
|
||||
e
|
||||
f
|
||||
m
|
||||
p
|
||||
e
|
||||
f
|
||||
+ 35
|
||||
+ 40
|
||||
+ 45
|
||||
+ 50
|
||||
p
|
||||
e
|
||||
f
|
||||
-
|
||||
-
|
||||
-
|
||||
p
|
||||
e
|
||||
f
|
||||
m
|
||||
p
|
||||
e
|
||||
f
|
||||
d
|
||||
|
||||
|
58
CPE212/Project_03/p03input3.txt
Normal file
58
CPE212/Project_03/p03input3.txt
Normal file
@ -0,0 +1,58 @@
|
||||
# p03input3.txt -- Test Size(), Capacity()
|
||||
|
||||
# Test Size()
|
||||
c 6
|
||||
p
|
||||
s
|
||||
+ 5
|
||||
+ 10
|
||||
p
|
||||
s
|
||||
+ 15
|
||||
+ 20
|
||||
p
|
||||
s
|
||||
+ 25
|
||||
+ 30
|
||||
p
|
||||
s
|
||||
-
|
||||
-
|
||||
-
|
||||
p
|
||||
s
|
||||
-
|
||||
-
|
||||
-
|
||||
p
|
||||
s
|
||||
d
|
||||
|
||||
# Test Capacity()
|
||||
c 2
|
||||
z
|
||||
+ 5
|
||||
z
|
||||
+ 10
|
||||
z
|
||||
+ 15
|
||||
z
|
||||
+ 20
|
||||
z
|
||||
+ 25
|
||||
z
|
||||
+ 30
|
||||
z
|
||||
p
|
||||
-
|
||||
-
|
||||
-
|
||||
z
|
||||
p
|
||||
-
|
||||
-
|
||||
-
|
||||
z
|
||||
p
|
||||
d
|
||||
|
34
CPE212/Project_03/p03input4.txt
Normal file
34
CPE212/Project_03/p03input4.txt
Normal file
@ -0,0 +1,34 @@
|
||||
# p03input4.txt -- Test Min() and Max()
|
||||
|
||||
c 8
|
||||
<
|
||||
>
|
||||
+ 5
|
||||
+ 30
|
||||
+ 15
|
||||
+ 20
|
||||
+ 50
|
||||
+ 10
|
||||
p
|
||||
<
|
||||
>
|
||||
+ 20
|
||||
+ 50
|
||||
+ 5
|
||||
p
|
||||
<
|
||||
>
|
||||
-
|
||||
-
|
||||
-
|
||||
p
|
||||
<
|
||||
>
|
||||
-
|
||||
-
|
||||
-
|
||||
p
|
||||
<
|
||||
>
|
||||
d
|
||||
|
51
CPE212/Project_03/p03input5.txt
Normal file
51
CPE212/Project_03/p03input5.txt
Normal file
@ -0,0 +1,51 @@
|
||||
# p03input5.txt -- Test Peek(n)
|
||||
|
||||
c 8
|
||||
? 0
|
||||
+ 5
|
||||
+ 30
|
||||
+ 15
|
||||
+ 20
|
||||
+ 50
|
||||
+ 10
|
||||
p
|
||||
? 0
|
||||
? 1
|
||||
? 2
|
||||
? 3
|
||||
? 4
|
||||
? 5
|
||||
? 6
|
||||
p
|
||||
-
|
||||
-
|
||||
-
|
||||
p
|
||||
? 0
|
||||
? 1
|
||||
? 2
|
||||
? 5
|
||||
p
|
||||
-
|
||||
-
|
||||
-
|
||||
p
|
||||
? 0
|
||||
? 1
|
||||
? 2
|
||||
? 3
|
||||
? 4
|
||||
? 5
|
||||
+ 25
|
||||
+ 9
|
||||
+ 8
|
||||
p
|
||||
? 0
|
||||
? 1
|
||||
? 2
|
||||
? 3
|
||||
? 4
|
||||
? 5
|
||||
d
|
||||
|
||||
|
BIN
CPE212/Project_03/project03
Normal file
BIN
CPE212/Project_03/project03
Normal file
Binary file not shown.
157
CPE212/Project_03/stack.cpp
Normal file
157
CPE212/Project_03/stack.cpp
Normal file
@ -0,0 +1,157 @@
|
||||
#include <iostream>
|
||||
#include <new>
|
||||
#include "stack.h"
|
||||
|
||||
|
||||
int Max_Stack; // Global variable for stack size
|
||||
Stack::Stack(int n) // Parameterized constructor dynamically allocates an empty stack array
|
||||
{ // that may hold no more than n elements and initializes other private variables
|
||||
Max_Stack=n;
|
||||
array = new int[n];
|
||||
top=-1;
|
||||
num=n;
|
||||
}
|
||||
|
||||
void Stack::Resize(int n) // Attempts to increase size of stack array to 2*num and then push n onto stack
|
||||
{ // If unable to resize, throw StackFull exception
|
||||
try
|
||||
{
|
||||
int largerArry[2*Max_Stack];
|
||||
for (int i = 0; i < num; i++)
|
||||
{
|
||||
largerArry[i]=array[i];
|
||||
}
|
||||
delete [] array;
|
||||
num= num * 2; // num to twice original size
|
||||
Max_Stack=num;
|
||||
array = largerArry;
|
||||
array[top]=n;
|
||||
//top++;
|
||||
}
|
||||
catch( ... )
|
||||
{
|
||||
throw StackFull();
|
||||
//return;
|
||||
}
|
||||
}
|
||||
|
||||
Stack::~Stack()
|
||||
{
|
||||
delete [] array;
|
||||
}
|
||||
|
||||
void Stack::Push(int n)
|
||||
{
|
||||
bool full = IsFull();
|
||||
if (full)
|
||||
{
|
||||
Resize(n);
|
||||
array[top]=n;
|
||||
}
|
||||
//array[top]=n;
|
||||
top++;
|
||||
array[top]=n;
|
||||
}
|
||||
|
||||
void Stack::Pop()
|
||||
{
|
||||
bool empty=IsEmpty();
|
||||
if (empty)
|
||||
{
|
||||
throw StackEmpty();
|
||||
}
|
||||
top--;
|
||||
}
|
||||
|
||||
bool Stack::IsEmpty() const
|
||||
{
|
||||
return (top == -1);
|
||||
}
|
||||
|
||||
bool Stack::IsFull() const
|
||||
{
|
||||
return (top == Max_Stack);
|
||||
}
|
||||
|
||||
void Stack::MakeEmpty()
|
||||
{
|
||||
top = -1;
|
||||
}
|
||||
|
||||
int Stack::Top() const
|
||||
{
|
||||
bool empty=IsEmpty();
|
||||
if (empty)
|
||||
{
|
||||
throw StackEmpty();
|
||||
//return;
|
||||
}
|
||||
return array[top];
|
||||
}
|
||||
|
||||
int Stack::Size() const // Returns number of items on stack WITHOUT modifying the stack
|
||||
{
|
||||
return top;
|
||||
}
|
||||
|
||||
int Stack::Max() const // Returns value of largest integer on stack WITHOUT modifying the stack
|
||||
{ // If stack is empty, throws StackEmpty
|
||||
bool empty=IsEmpty();
|
||||
if (empty)
|
||||
{
|
||||
throw StackEmpty();
|
||||
}
|
||||
|
||||
int i;
|
||||
|
||||
// Initialize maximum element
|
||||
int max = array[0];
|
||||
|
||||
// Traverse array elements
|
||||
// from second and compare
|
||||
// every element with current max
|
||||
for (i = 1; i < top; i++)
|
||||
{
|
||||
if (array[i] > max)
|
||||
max = array[i];
|
||||
}
|
||||
return max;
|
||||
}
|
||||
|
||||
int Stack::Min() const // Returns value of smallest integer on stack WITHOUT modifying the stack
|
||||
{ // If stack is empty, throws StackEmpty
|
||||
bool empty=IsEmpty();
|
||||
if (empty)
|
||||
{
|
||||
throw StackEmpty();
|
||||
}
|
||||
|
||||
int i;
|
||||
|
||||
// Initialize minimum element
|
||||
int min = array[0];
|
||||
|
||||
// Traverse array elements
|
||||
// from second and compare
|
||||
// every element with current min
|
||||
for (i = 1; i < top; i++)
|
||||
{
|
||||
if (array[i] < min)
|
||||
min = array[i];
|
||||
}
|
||||
return min;
|
||||
}
|
||||
|
||||
int Stack::Peek(unsigned int n) const // Returns stack value n levels down from top of stack. Peek(0) = Top()
|
||||
{ // If position n does not exist, throws StackInvalidPeek
|
||||
|
||||
if(!array[top-n])
|
||||
throw StackInvalidPeek();
|
||||
int st=array[top-n];
|
||||
return st;
|
||||
}
|
||||
|
||||
int Stack::Capacity() const // Returns total num of elements that maybe stored in stack array
|
||||
{
|
||||
return Max_Stack;
|
||||
}
|
103
CPE212/Project_03/stack.h
Normal file
103
CPE212/Project_03/stack.h
Normal file
@ -0,0 +1,103 @@
|
||||
//
|
||||
// stack.h 2010 Fall CPE 212 -- Project03 -- Stacks
|
||||
//
|
||||
// The comments have been updated, but there have been no changes to the code.
|
||||
//
|
||||
// Specification file for Stack class, a stack of integers implemented
|
||||
// as a linked list of nodes.
|
||||
//
|
||||
// ***** DO NOT MODIFY OR SUBMIT THIS FILE *****
|
||||
//
|
||||
#include <iostream>
|
||||
using namespace std;
|
||||
|
||||
|
||||
#ifndef STACK_H
|
||||
#define STACK_H
|
||||
|
||||
class StackEmpty
|
||||
{
|
||||
// Exception class - throw an object of this type when stack is empty
|
||||
// Hint: there is no code for exception classes
|
||||
};
|
||||
|
||||
|
||||
class StackFull
|
||||
{
|
||||
// Exception class - throw an object of this type when stack is full
|
||||
};
|
||||
|
||||
class StackInvalidPeek
|
||||
{
|
||||
// Exception class - throw an object of this type when invalid peek position is used
|
||||
};
|
||||
|
||||
|
||||
class Stack // Models stack of integers ADT implemented as a dynamically allocated array
|
||||
{
|
||||
private:
|
||||
int* array; // Points to the stack array
|
||||
int num; // Holds max number of elements that may be stored in stack array
|
||||
int top; // Holds the index of the top data value stored on the stack
|
||||
void Resize(int n); // Attempts to increase size of stack array to 2*num and then push n onto stack
|
||||
// If unable to resize, throw StackFull exception
|
||||
|
||||
public:
|
||||
Stack(int n); // Parameterized constructor dynamically allocates an empty stack array
|
||||
// that may hold no more than n elements and initializes other private variables
|
||||
|
||||
|
||||
~Stack(); // Destructor deallocates all dynamically-allocated memory
|
||||
// associated with the object
|
||||
|
||||
void Push(int n); // Pushes integer n onto top of stack. If stack is full, attempts to
|
||||
// resize stack and then push n. If unable to resize, throws StackFull exception.
|
||||
|
||||
void Pop(); // Removes top integer from stack
|
||||
// If stack is empty, throws StackEmpty exception
|
||||
|
||||
bool IsEmpty() const; // Returns true if stack is empty; false otherwise
|
||||
|
||||
bool IsFull() const; // Returns true if stack is full; false otherwise
|
||||
|
||||
void MakeEmpty(); // Removes all items from stack leaving an empty, but usable stack with capacity num
|
||||
// If stack is already empty, MakeEmpty() does nothing
|
||||
|
||||
int Top() const; // Returns value of top integer on stack WITHOUT modifying the stack
|
||||
// If stack is empty, throws StackEmpty exception
|
||||
|
||||
int Size() const; // Returns number of items on stack WITHOUT modifying the stack
|
||||
|
||||
|
||||
int Max() const; // Returns value of largest integer on stack WITHOUT modifying the stack
|
||||
// If stack is empty, throws StackEmpty
|
||||
|
||||
int Min() const; // Returns value of smallest integer on stack WITHOUT modifying the stack
|
||||
// If stack is empty, throws StackEmpty
|
||||
|
||||
int Peek(unsigned int n) const; // Returns stack value n levels down from top of stack. Peek(0) = Top()
|
||||
// If position n does not exist, throws StackInvalidPeek
|
||||
|
||||
int Capacity() const; // Returns total num of elements that maybe stored in stack array
|
||||
|
||||
/******* DO NOT MODIFY ANY OF THE CODE FOR PRINT() *******/
|
||||
/****** DO NOT PLACE A COPY OF PRINT() CODE IN STACK.CPP!!! *******/
|
||||
|
||||
void Print() const // Writes stack contents to stdout, separated by a space, followed by endl
|
||||
{
|
||||
int index = top;
|
||||
cout << "Top { ";
|
||||
|
||||
while (index != -1) // Loop to output any values stored on stack
|
||||
{
|
||||
cout << array[index] << " ";
|
||||
index--;
|
||||
}
|
||||
cout << "} Bottom" << endl;
|
||||
} // End Print()
|
||||
|
||||
}; // End Class Stack
|
||||
|
||||
#endif
|
||||
|
||||
|
BIN
CPE212/Project_03/stack.o
Normal file
BIN
CPE212/Project_03/stack.o
Normal file
Binary file not shown.
154
CPE212/Project_04/list.cpp
Normal file
154
CPE212/Project_04/list.cpp
Normal file
@ -0,0 +1,154 @@
|
||||
#include <iostream>
|
||||
#include <new>
|
||||
#include "list.h"
|
||||
|
||||
|
||||
Node list;
|
||||
List::List()
|
||||
{
|
||||
head = NULL;
|
||||
num=0;
|
||||
}
|
||||
|
||||
List::~List()
|
||||
{
|
||||
delete head;
|
||||
}
|
||||
|
||||
void List::Append(string newword)
|
||||
{
|
||||
Node* tempPtr=new Node;
|
||||
tempPtr->word= newword;
|
||||
tempPtr->next= NULL;
|
||||
//num++;
|
||||
if (head==NULL)
|
||||
{
|
||||
head=tempPtr;
|
||||
num++;
|
||||
return;
|
||||
//head->next=NULL;
|
||||
}
|
||||
else
|
||||
{
|
||||
Node *current=head;
|
||||
while(current ->next) current=current->next;
|
||||
current->next = tempPtr;
|
||||
}
|
||||
|
||||
num++;
|
||||
}
|
||||
|
||||
void List::InsertAt(int pos, string newword)
|
||||
{
|
||||
Node* prev = new Node();
|
||||
Node* curr = new Node();
|
||||
Node* newNode = new Node();
|
||||
newNode->word = newword;
|
||||
|
||||
int tempPos = 0; // Traverses through the list
|
||||
|
||||
curr = head; // Initialize current to head;
|
||||
if(head != NULL)
|
||||
{
|
||||
while(curr->next != NULL && tempPos != pos)
|
||||
{
|
||||
prev = curr;
|
||||
curr = curr->next;
|
||||
tempPos++;
|
||||
}
|
||||
if(pos==0)
|
||||
{
|
||||
|
||||
}
|
||||
else if(curr->next == NULL && pos == tempPos+1)
|
||||
{
|
||||
Append(newword);
|
||||
// Call function to append
|
||||
}
|
||||
else if(pos > tempPos+1 || pos>num || pos<0) throw ListBadPosition();
|
||||
//Position not valid
|
||||
else
|
||||
{
|
||||
prev->next = newNode;
|
||||
newNode->next = curr;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
head = newNode;
|
||||
newNode->next=NULL;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
void List::Delete(string someword)
|
||||
{
|
||||
Node *prev=head;
|
||||
Node *current=head->next;
|
||||
int wordNotFound=0;
|
||||
while (current != NULL)
|
||||
{
|
||||
// If current word is in list, break out of loop
|
||||
if(current->word == someword) break;
|
||||
else
|
||||
{
|
||||
prev=current;
|
||||
prev=current->next;
|
||||
}
|
||||
}
|
||||
if(current==NULL) throw ListNotFound();
|
||||
// Error handling: if current word is not in list, throw ListNotFound
|
||||
else
|
||||
{
|
||||
prev->next = current ->next;
|
||||
delete current;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
void List::Replace(string oldword, string newword)
|
||||
{
|
||||
Node *current=head;
|
||||
int oldWordNotFound=0;
|
||||
while (current != NULL)
|
||||
{
|
||||
// if oldword is found in list, replace oldword with newword
|
||||
if(current->word==oldword)
|
||||
{
|
||||
current->word = newword;
|
||||
return;
|
||||
}
|
||||
// if oldword not= to current word, increment wordNotFound
|
||||
oldWordNotFound++;
|
||||
current = current -> next;
|
||||
if(oldWordNotFound==num)
|
||||
break;
|
||||
}
|
||||
// if oldWordNotFound==num, throw ListNotFound
|
||||
|
||||
throw ListNotFound();
|
||||
}
|
||||
|
||||
int List::Length() const
|
||||
{
|
||||
return num;
|
||||
}
|
||||
|
||||
bool List::Find(string someword) const
|
||||
{
|
||||
Node *current=head;
|
||||
int wordNotFound=0;
|
||||
while (current != NULL)
|
||||
{
|
||||
// if current word does not equal someword, increment wordNotFound
|
||||
if(current->word != someword)
|
||||
{
|
||||
wordNotFound++;
|
||||
}
|
||||
// If current word is in list, return true
|
||||
if(current->word == someword) return true;
|
||||
current = current->next;
|
||||
}
|
||||
// if wordNotFound == num, return false
|
||||
if(wordNotFound == num) return false;
|
||||
}
|
101
CPE212/Project_04/list.h
Normal file
101
CPE212/Project_04/list.h
Normal file
@ -0,0 +1,101 @@
|
||||
//
|
||||
// list.h -- 2010 Fall CPE 212 -- Project04 -- Lists
|
||||
//
|
||||
// DO NOT MODIFY OR SUBMIT THIS FILE
|
||||
//
|
||||
|
||||
#ifndef LIST_H
|
||||
#define LIST_H
|
||||
|
||||
#include <iostream>
|
||||
using namespace std;
|
||||
|
||||
class ListEmpty { /*** Empty Error Class ***/ };
|
||||
class ListFull { /*** Empty Error Class ***/ };
|
||||
class ListNotFound { /*** Empty Error Class ***/ };
|
||||
class ListBadPosition { /*** Empty Error Class ***/ };
|
||||
|
||||
struct Node
|
||||
{
|
||||
string word; // A word in a phrase
|
||||
Node* next; // Pointer to next node in sequence
|
||||
};
|
||||
|
||||
class List // List ADT used to store words in a phrase
|
||||
{
|
||||
private:
|
||||
Node* head; // Pointer to head of word list
|
||||
int num; // Number of words stored in list
|
||||
|
||||
public:
|
||||
/***** Constructor and Destructor *****/
|
||||
List();
|
||||
// Description of List()
|
||||
// Constructor sets state of list to empty
|
||||
|
||||
~List();
|
||||
// Description of ~List()
|
||||
// Destructor must deallocate all list nodes
|
||||
|
||||
|
||||
/***** Transformer Methods *****/
|
||||
void Append(string newword);
|
||||
// Description of Append(...)
|
||||
// Appends newword to the end of the current phrase
|
||||
// Error Handling: If list is full, throw ListFull object.
|
||||
|
||||
void InsertAt(int pos, string newword);
|
||||
// Description of InsertAt(...)
|
||||
// Inserts newword at position pos.
|
||||
// Positions numbered starting with zero (0 <= pos <= num).
|
||||
// Hint: pos == num ==> append
|
||||
// Word previously at pos should now be at position pos+1
|
||||
// Error Handling: If list is full, throws ListFull object
|
||||
// If pos out of range, throws ListBadPosition object
|
||||
|
||||
void Delete(string someword);
|
||||
// Description of Delete(...)
|
||||
// Deletes the first instance of someword if it is present.
|
||||
// Error Handling: If someword is not in list, throws ListNotFound object
|
||||
|
||||
void Replace(string oldword, string newword);
|
||||
// Description of Replace(...)
|
||||
// Replaces the first instance of oldword with newword.
|
||||
// Error Handling: If oldword not found, throws ListNotFound object
|
||||
|
||||
|
||||
/***** Observer Methods *****/
|
||||
int Length() const;
|
||||
// Description of Length()
|
||||
// Returns number of words in the list
|
||||
// Error Handling: none
|
||||
|
||||
bool Find(string someword) const;
|
||||
// Description of Find(...)
|
||||
// Returns true if someword is in list, false otherwise
|
||||
// Error Handling: none
|
||||
|
||||
|
||||
// DO NOT MODIFY OR SUBMIT Print()
|
||||
void Print() const
|
||||
// Description of Print()
|
||||
// Prints the entire phrase to stdout
|
||||
{
|
||||
Node* temp = head; // Temp variable for scanning through list starting at head
|
||||
|
||||
cout << "Head {"; // Output open brace
|
||||
while (temp != NULL) // While there are words that must be printed...
|
||||
{
|
||||
cout << ' ' << temp->word; // ... print the next word
|
||||
temp = temp->next; // ... and advance to the next node.
|
||||
}
|
||||
|
||||
cout << " }"; // Output close brace
|
||||
}
|
||||
};
|
||||
|
||||
#endif
|
||||
|
||||
|
||||
|
||||
|
BIN
CPE212/Project_04/list.o
Normal file
BIN
CPE212/Project_04/list.o
Normal file
Binary file not shown.
168
CPE212/Project_04/main.cpp
Normal file
168
CPE212/Project_04/main.cpp
Normal file
@ -0,0 +1,168 @@
|
||||
//
|
||||
// main.cpp -- 2010 Fall -- Project04 -- Lists
|
||||
//
|
||||
// Driver program for List ADT -- The text files (read by this code) contain a series of commands
|
||||
// that will help you test your List ADT code by triggering various List class methods.
|
||||
//
|
||||
// DO NOT MODIFY OR SUBMIT THIS FILE
|
||||
//
|
||||
#include <iostream>
|
||||
#include <fstream>
|
||||
#include <new>
|
||||
#include <cstddef>
|
||||
#include "list.h"
|
||||
|
||||
using namespace std;
|
||||
|
||||
int main(int argc, char* argv[])
|
||||
{
|
||||
ifstream inputs; // Input file for commands
|
||||
char op; // Hold operation and optional char input
|
||||
string value, value2; // Values input from file
|
||||
string comment; // Holds comment from file
|
||||
int pos; // Holds position value from file
|
||||
List* ptr = NULL; // Will point to List object
|
||||
|
||||
// Output usage message if one input file name is not provided
|
||||
if (argc != 2)
|
||||
{
|
||||
cout << "Usage:\n project04 <inputfile>\n";
|
||||
return 1;
|
||||
}
|
||||
|
||||
// Attempt to open input file -- terminate if file does not open
|
||||
inputs.open(argv[1]);
|
||||
if (!inputs)
|
||||
{
|
||||
cout << "Error - unable to open input file" << endl;
|
||||
return 1;
|
||||
}
|
||||
|
||||
// Input and echo header comment from file
|
||||
getline(inputs, comment); // Input and echo the comment appearing in the test file
|
||||
cout << endl << '#' << comment << endl << endl;
|
||||
|
||||
// Process commands from input file
|
||||
inputs >> op; // Attempt to input first command
|
||||
while (inputs)
|
||||
{
|
||||
switch (op) // Process operation input from file
|
||||
{
|
||||
case '#': // Test file comment
|
||||
getline(inputs, comment); // Input and echo the comment appearing in the test file
|
||||
cout << '#' << comment << endl;
|
||||
break;
|
||||
|
||||
case 'c': // Parameterized Constructor
|
||||
cout << endl << "List()";
|
||||
try
|
||||
{
|
||||
ptr = new List(); // Attempt to create a List object
|
||||
cout << " -- Successful" << endl;
|
||||
}
|
||||
catch ( std::bad_alloc )
|
||||
{
|
||||
cout << "Failed : Terminating now..." << endl;
|
||||
return 1;
|
||||
}
|
||||
break;
|
||||
|
||||
case 'a': // Append
|
||||
inputs >> value;
|
||||
cout << "Append(" << value << ")";
|
||||
try
|
||||
{
|
||||
ptr->Append(value);
|
||||
cout << " -- successful";
|
||||
}
|
||||
catch (ListFull)
|
||||
{
|
||||
cout << " -- Failed Full List";
|
||||
}
|
||||
cout << endl;
|
||||
break;
|
||||
|
||||
case '-': // Delete word
|
||||
inputs >> value;
|
||||
cout << "Delete(" << value << ") -- ";
|
||||
try
|
||||
{
|
||||
ptr->Delete(value);
|
||||
cout << "successful";
|
||||
}
|
||||
catch (ListNotFound)
|
||||
{
|
||||
cout << "Failed Not In List";
|
||||
}
|
||||
cout << endl;
|
||||
break;
|
||||
|
||||
case '+': // Insert at position
|
||||
inputs >> pos >> value;
|
||||
cout << "InsertAt(" << pos << ", " << value << ") -- ";
|
||||
try
|
||||
{
|
||||
ptr->InsertAt(pos, value);
|
||||
cout << "Successful" << endl;
|
||||
}
|
||||
catch (ListBadPosition)
|
||||
{
|
||||
cout << "Failed Bad Position" << endl;
|
||||
}
|
||||
break;
|
||||
|
||||
case 'p': // Print List
|
||||
cout << "Print() -- ";
|
||||
ptr->Print();
|
||||
cout << endl;
|
||||
break;
|
||||
|
||||
case 'r': // Replace word
|
||||
inputs >> value >> value2;
|
||||
try
|
||||
{
|
||||
cout << "Replace(" << value << ", " << value2 << ") -- ";
|
||||
ptr->Replace(value, value2);
|
||||
cout << "Successful" << endl;
|
||||
}
|
||||
catch (ListNotFound)
|
||||
{
|
||||
cout << "Failed Not Found in List" << endl;
|
||||
}
|
||||
break;
|
||||
|
||||
case '?': // Find in List
|
||||
inputs >> value;
|
||||
if ( ptr->Find(value) )
|
||||
{
|
||||
cout << "Find(" << value << ") -- True" << endl;
|
||||
}
|
||||
else
|
||||
{
|
||||
cout << "Find(" << value << ") -- False" << endl;
|
||||
}
|
||||
break;
|
||||
|
||||
case 'l': // Length of List
|
||||
cout << "Length() -- " << ptr->Length() << endl;
|
||||
break;
|
||||
|
||||
case 'd': // Destructor
|
||||
delete ptr;
|
||||
ptr = NULL;
|
||||
cout << "~List()" << endl << endl;
|
||||
break;
|
||||
|
||||
default: // Error
|
||||
cout << "Error - unrecognized operation '" << op << "'" << endl;
|
||||
cout << "Terminating now..." << endl;
|
||||
return 1;
|
||||
break;
|
||||
}
|
||||
|
||||
inputs >> op; // Attempt to input next command
|
||||
}
|
||||
|
||||
return 0;
|
||||
} // End main()
|
||||
|
BIN
CPE212/Project_04/main.o
Normal file
BIN
CPE212/Project_04/main.o
Normal file
Binary file not shown.
15
CPE212/Project_04/makefile
Normal file
15
CPE212/Project_04/makefile
Normal file
@ -0,0 +1,15 @@
|
||||
# Project04 makefile
|
||||
|
||||
project04: list.o main.o
|
||||
g++ list.o main.o -o project04
|
||||
|
||||
list.o: list.h list.cpp
|
||||
g++ -c list.cpp
|
||||
|
||||
main.o: list.h main.cpp
|
||||
g++ -c main.cpp
|
||||
|
||||
clean:
|
||||
rm *.o project04
|
||||
|
||||
|
38
CPE212/Project_04/p04input1.txt
Normal file
38
CPE212/Project_04/p04input1.txt
Normal file
@ -0,0 +1,38 @@
|
||||
# p04input1.txt -- Test List(), ~List(), Length(), Append()
|
||||
|
||||
# Test Append()
|
||||
c
|
||||
p
|
||||
a See
|
||||
p
|
||||
a Spot
|
||||
p
|
||||
a run
|
||||
p
|
||||
d
|
||||
|
||||
|
||||
# Test Length()
|
||||
c
|
||||
l
|
||||
p
|
||||
a Observe
|
||||
l
|
||||
p
|
||||
a Spot
|
||||
l
|
||||
p
|
||||
a running
|
||||
l
|
||||
p
|
||||
a swiftly
|
||||
l
|
||||
p
|
||||
a away
|
||||
l
|
||||
p
|
||||
d
|
||||
|
||||
|
||||
|
||||
|
44
CPE212/Project_04/p04input2.txt
Normal file
44
CPE212/Project_04/p04input2.txt
Normal file
@ -0,0 +1,44 @@
|
||||
# p04input2.txt -- Test List(), ~List(), Append(), Find()
|
||||
|
||||
# Test successful find
|
||||
c
|
||||
p
|
||||
a See
|
||||
p
|
||||
a Spot
|
||||
p
|
||||
a run
|
||||
p
|
||||
? See
|
||||
p
|
||||
? Spot
|
||||
p
|
||||
? run
|
||||
p
|
||||
d
|
||||
|
||||
|
||||
# Test unsuccessful find
|
||||
c
|
||||
p
|
||||
a Observe
|
||||
p
|
||||
a Spot
|
||||
p
|
||||
a running
|
||||
p
|
||||
a swiftly
|
||||
p
|
||||
a away
|
||||
p
|
||||
? slowly
|
||||
p
|
||||
? run
|
||||
p
|
||||
? spot
|
||||
p
|
||||
d
|
||||
|
||||
|
||||
|
||||
|
51
CPE212/Project_04/p04input3.txt
Normal file
51
CPE212/Project_04/p04input3.txt
Normal file
@ -0,0 +1,51 @@
|
||||
# p04input3.txt -- Test List(), ~List(), Delete()
|
||||
|
||||
# Test successful delete
|
||||
c
|
||||
p
|
||||
a See
|
||||
p
|
||||
a Spot
|
||||
p
|
||||
a run
|
||||
p
|
||||
a swiftly
|
||||
p
|
||||
a away
|
||||
p
|
||||
- run
|
||||
p
|
||||
- Spot
|
||||
p
|
||||
- See
|
||||
p
|
||||
- away
|
||||
p
|
||||
- swiftly
|
||||
p
|
||||
d
|
||||
|
||||
|
||||
|
||||
# Test unsuccessful delete
|
||||
c
|
||||
p
|
||||
a See
|
||||
p
|
||||
a Spot
|
||||
p
|
||||
a run
|
||||
p
|
||||
a slowly
|
||||
p
|
||||
a away
|
||||
p
|
||||
- Observe
|
||||
p
|
||||
- spot
|
||||
p
|
||||
d
|
||||
|
||||
|
||||
|
||||
|
38
CPE212/Project_04/p04input4.txt
Normal file
38
CPE212/Project_04/p04input4.txt
Normal file
@ -0,0 +1,38 @@
|
||||
# p04input4.txt -- Test Replace()
|
||||
|
||||
# Test successful replace
|
||||
c
|
||||
p
|
||||
a See
|
||||
p
|
||||
a Spot
|
||||
p
|
||||
a run
|
||||
p
|
||||
p
|
||||
r run walk
|
||||
p
|
||||
r See Observe
|
||||
p
|
||||
r Spot Dot
|
||||
p
|
||||
d
|
||||
|
||||
|
||||
# Test unsuccessful replace
|
||||
c
|
||||
a See
|
||||
a Spot
|
||||
a run
|
||||
a swiftly
|
||||
a away
|
||||
p
|
||||
r spot goat
|
||||
p
|
||||
r goat boat
|
||||
p
|
||||
d
|
||||
|
||||
|
||||
|
||||
|
31
CPE212/Project_04/p04input5.txt
Normal file
31
CPE212/Project_04/p04input5.txt
Normal file
@ -0,0 +1,31 @@
|
||||
# p04input5.txt -- Test InsertAt()
|
||||
|
||||
# Test successful InsertAt
|
||||
c
|
||||
a See
|
||||
a Spot
|
||||
a run
|
||||
p
|
||||
+ 0 Zero
|
||||
p
|
||||
+ 1 One
|
||||
p
|
||||
+ 4 Four
|
||||
p
|
||||
+ 5 Five
|
||||
p
|
||||
+ 7 Seven
|
||||
p
|
||||
|
||||
# Test unsuccessful InsertAt
|
||||
+ -1 Bad
|
||||
p
|
||||
+ 10 Ten
|
||||
p
|
||||
+ 20 Twenty
|
||||
p
|
||||
d
|
||||
|
||||
|
||||
|
||||
|
BIN
CPE212/Project_04/project04
Normal file
BIN
CPE212/Project_04/project04
Normal file
Binary file not shown.
BIN
CPE212/Project_04/project04_materials.zip
Normal file
BIN
CPE212/Project_04/project04_materials.zip
Normal file
Binary file not shown.
329
CPE212/Project_05/bstree.cpp
Normal file
329
CPE212/Project_05/bstree.cpp
Normal file
@ -0,0 +1,329 @@
|
||||
#include <iostream>
|
||||
#include <new>
|
||||
#include "bstree.h"
|
||||
|
||||
|
||||
template <typename SomeType>
|
||||
BSTree<SomeType>::BSTree()
|
||||
{
|
||||
BSTreeNode<SomeType>* rootPtr = NULL;
|
||||
}
|
||||
|
||||
template <typename SomeType>
|
||||
// start of Delete(...)
|
||||
// Recursive function that traverses the tree starting at treePtr to locate the data value to be removed
|
||||
// Once located, DeleteNode is invoked to remove the value from the tree
|
||||
// If tree is not empty and item is NOT present, throw NotFoundBSTree
|
||||
void BSTree<SomeType>::Delete(BSTreeNode<SomeType>*& treePtr, SomeType& item)
|
||||
{
|
||||
if(item < treePtr->data)
|
||||
Delete(treePtr->leftPtr, item); // Look in left subtree
|
||||
else if(item > treePtr->data)
|
||||
Delete(treePtr->rightPtr, item); // Look in right subtree
|
||||
else if (treePtr->data == item)
|
||||
DeleteNode(treePtr); // Node found; call DeleteNode
|
||||
else
|
||||
NotFoundBSTree();
|
||||
}
|
||||
|
||||
|
||||
template <typename SomeType>
|
||||
void BSTree<SomeType>::DeleteNode(BSTreeNode<SomeType>*& treePtr)
|
||||
// start of DeleteNode()
|
||||
// Removes the node pointed to by treePtr from the tree
|
||||
// Hint: calls GetPredecessor and Delete
|
||||
{
|
||||
SomeType data;
|
||||
BSTreeNode<SomeType>* tempPtr;
|
||||
|
||||
if (treePtr->leftPtr==NULL)
|
||||
{
|
||||
treePtr=treePtr->rightPtr;
|
||||
delete tempPtr;
|
||||
}
|
||||
else if (treePtr->rightPtr==NULL)
|
||||
{
|
||||
treePtr = treePtr->leftPtr;
|
||||
delete tempPtr;
|
||||
}
|
||||
else
|
||||
{
|
||||
GetPredecessor(treePtr->leftPtr);
|
||||
treePtr->data = data;
|
||||
Delete(treePtr->leftPtr, data);
|
||||
}
|
||||
} // end of DeleteNode(...)
|
||||
|
||||
template <typename SomeType>
|
||||
void BSTree<SomeType>::Insert(BSTreeNode<SomeType>*& ptr, SomeType item)
|
||||
// Start of Insert(...)
|
||||
// Recursive function that finds the correct position of item and adds it to the tree
|
||||
// Throws FoundInBSTree if item is already in the tree
|
||||
{
|
||||
if (ptr==NULL)
|
||||
{
|
||||
ptr = new BSTreeNode<SomeType>;
|
||||
ptr->rightPtr = NULL;
|
||||
ptr->leftPtr = NULL;
|
||||
ptr->data = item;
|
||||
}
|
||||
else if (item < ptr->data)
|
||||
Insert(ptr->leftPtr, item);
|
||||
else
|
||||
Insert(ptr->rightPtr, item);
|
||||
//else if (ptr->data == item) FoundInBSTree();
|
||||
}
|
||||
|
||||
template <typename SomeType>
|
||||
void BSTree<SomeType>::Destroy(BSTreeNode<SomeType>*& ptr)
|
||||
// Destroy()
|
||||
// Recursively deallocates every node in the tree pointed to by ptr
|
||||
{
|
||||
if (&ptr==NULL)
|
||||
{
|
||||
Destroy(ptr->leftPtr);
|
||||
Destroy(ptr->rightPtr);
|
||||
delete ptr;
|
||||
}
|
||||
} // end of Destroy()
|
||||
|
||||
template <typename SomeType>
|
||||
void BSTree<SomeType>::CopyTree(BSTreeNode<SomeType>*& copy, const BSTreeNode<SomeType>* originalTree)
|
||||
// CopyTree()
|
||||
// Recursively copies all data from original tree into copy
|
||||
{
|
||||
if (originalTree == NULL)
|
||||
copy = NULL;
|
||||
else
|
||||
{
|
||||
copy = new BSTreeNode<SomeType>;
|
||||
copy->data = originalTree->data;
|
||||
CopyTree(copy->leftPtr, originalTree->leftPtr);
|
||||
CopyTree(copy->rightPtr, originalTree->rightPtr);
|
||||
}
|
||||
}
|
||||
|
||||
template <typename SomeType>
|
||||
SomeType BSTree<SomeType>::GetPredecessor(BSTreeNode<SomeType>* treePtr) const
|
||||
// GetPredecessor()
|
||||
// Finds the largest data value in the tree pointed to by treePtr and returns that data value
|
||||
// as the functions return value
|
||||
{
|
||||
while (treePtr->rightPtr != NULL)
|
||||
treePtr = treePtr->rightPtr;
|
||||
return (treePtr->data);
|
||||
}
|
||||
|
||||
template <typename SomeType>
|
||||
int BSTree<SomeType>::CountNodes(BSTreeNode<SomeType>* treePtr) const
|
||||
// CountNodes()
|
||||
// Recursive function that counts every node in the tree pointed to by treePtr and returns the
|
||||
// count as the function return value
|
||||
{
|
||||
if (&treePtr == NULL)
|
||||
return 0;
|
||||
else
|
||||
return CountNodes(treePtr->leftPtr) + CountNodes(treePtr->rightPtr) + 1;
|
||||
}
|
||||
|
||||
template <typename SomeType>
|
||||
int BSTree<SomeType>::LevelCount(BSTreeNode<SomeType>* treePtr) const
|
||||
// LevelCount()
|
||||
// Recursive function that traverses the entire tree to determine the total number of levels in the tree
|
||||
{
|
||||
if(treePtr->leftPtr == NULL && treePtr->rightPtr == NULL)
|
||||
return 0;
|
||||
|
||||
int left = 0;
|
||||
if (treePtr->leftPtr != NULL)
|
||||
left = LevelCount(treePtr->leftPtr);
|
||||
|
||||
int right = 0;
|
||||
if (treePtr->rightPtr != NULL)
|
||||
right = LevelCount(treePtr->rightPtr);
|
||||
|
||||
return (max(left, right) + 1);
|
||||
}
|
||||
|
||||
template <typename SomeType>
|
||||
int BSTree<SomeType>::FindLevel(BSTreeNode<SomeType>* treePtr, SomeType item) const
|
||||
// FindLevel()
|
||||
// Recursive function that traverses the tree looking for item and returns the level where
|
||||
// item was found
|
||||
{
|
||||
int static level = 0;
|
||||
// if (treePtr == NULL)
|
||||
// return 0;
|
||||
|
||||
// int left = 0;
|
||||
// if (treePtr->leftPtr != NULL && item != treePtr->data)
|
||||
// left = LevelCount(treePtr->leftPtr);
|
||||
|
||||
// int right = 0;
|
||||
// if (treePtr->rightPtr != NULL)
|
||||
// right = LevelCount(treePtr->rightPtr);
|
||||
|
||||
// return (max(left, right));
|
||||
}
|
||||
|
||||
|
||||
|
||||
template <typename SomeType>
|
||||
//start of BSTree(...)
|
||||
BSTree<SomeType>::BSTree(const BSTree<SomeType>& someTree)
|
||||
// BSTree()
|
||||
// Copy constructor for BSTree
|
||||
// Hint: calls CopyTree
|
||||
{
|
||||
if (someTree.rootPtr==NULL)
|
||||
{
|
||||
rootPtr=NULL;
|
||||
}
|
||||
else
|
||||
CopyTree(this->rootPtr, someTree.rootPtr);
|
||||
}
|
||||
|
||||
template <typename SomeType>
|
||||
void BSTree<SomeType>::operator=(const BSTree<SomeType>& originalTree)
|
||||
// operator=()
|
||||
// Overloaded assignment operator for BSTree.
|
||||
// Hint: calls CopyTree
|
||||
{
|
||||
if (&originalTree == this)
|
||||
return;
|
||||
|
||||
Destroy(rootPtr);
|
||||
CopyTree(rootPtr, originalTree.rootPtr);
|
||||
}
|
||||
|
||||
template <typename SomeType>
|
||||
BSTree<SomeType>::~BSTree()
|
||||
// ~BSTree()
|
||||
// Destructor deallocates all tree nodes
|
||||
// Hint: calls the private helper function Destroy
|
||||
{
|
||||
Destroy(rootPtr);
|
||||
}
|
||||
|
||||
template <typename SomeType>
|
||||
void BSTree<SomeType>::InsertItem(SomeType item)
|
||||
// InsertItem()
|
||||
// Inserts item into BSTree; if tree already full, throws FullBSTree exception
|
||||
// If item is already in BSTree, throw FoundInBSTree exception
|
||||
// Hint: calls the private helper function Insert
|
||||
{
|
||||
Insert(rootPtr,item);
|
||||
}
|
||||
|
||||
template <typename SomeType>
|
||||
SomeType BSTree<SomeType>::DeleteItem(SomeType item)
|
||||
// DeleteItem()
|
||||
// Deletes item from BSTree if item is present AND returns object via function return value
|
||||
// If tree is empty, throw the EmptyBSTree exception
|
||||
// If tree is not empty and item is NOT present, throw NotFoundBSTree
|
||||
// Hint: calls the private helper function Delete
|
||||
{
|
||||
//if (&rootPtr == NULL) EmptyBSTree();
|
||||
if (IsEmpty())
|
||||
throw EmptyBSTree();
|
||||
else
|
||||
SomeType itemCopy = item; // Make an copy for item
|
||||
Delete(rootPtr, item); // Delete item in tree
|
||||
// return itemCopy;
|
||||
}
|
||||
|
||||
|
||||
template <typename SomeType>
|
||||
void BSTree<SomeType>::MakeEmpty()
|
||||
// MakeEmpty()
|
||||
// Deallocates all BSTree nodes and sets root pointer to NULL
|
||||
// Hint: calls the private helper function Destroy
|
||||
{
|
||||
Destroy(rootPtr);
|
||||
rootPtr=NULL;
|
||||
}
|
||||
|
||||
template <typename SomeType>
|
||||
int BSTree<SomeType>::Size() const
|
||||
// Size()
|
||||
// Returns total number of data values stored in tree
|
||||
{
|
||||
return CountNodes(rootPtr);
|
||||
}
|
||||
|
||||
template <typename SomeType>
|
||||
bool BSTree<SomeType>::IsFull() const
|
||||
{
|
||||
BSTreeNode<SomeType>* location;
|
||||
try
|
||||
{
|
||||
location = new BSTreeNode<SomeType>;
|
||||
delete location;
|
||||
return false;
|
||||
}
|
||||
catch( bad_alloc )
|
||||
{
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
template <typename SomeType>
|
||||
bool BSTree<SomeType>::IsEmpty() const
|
||||
{
|
||||
if (rootPtr == NULL) return true;
|
||||
return false;
|
||||
}
|
||||
|
||||
template <typename SomeType>
|
||||
SomeType BSTree<SomeType>::Min() const
|
||||
{
|
||||
// if (rootPtr == NULL) EmptyBSTree();
|
||||
|
||||
|
||||
// BSTreeNode<SomeType>* current;
|
||||
// ¤t = rootPtr;
|
||||
// while (current > current->data != NULL)
|
||||
// {
|
||||
// current = current->leftPtr;
|
||||
// }
|
||||
// return(current->leftPtr);
|
||||
}
|
||||
|
||||
template <typename SomeType>
|
||||
SomeType BSTree<SomeType>::Max() const
|
||||
{
|
||||
// if (rootPtr == NULL) EmptyBSTree();
|
||||
|
||||
// BSTreeNode<SomeType>* current;
|
||||
// current = rootPtr;
|
||||
// while (current > current->data != NULL)
|
||||
// {
|
||||
// current = current->rightPtr;
|
||||
// }
|
||||
// return(¤t->rightPtr);
|
||||
}
|
||||
|
||||
template <typename SomeType>
|
||||
int BSTree<SomeType>::TotalLevels() const
|
||||
// TotalLevels()
|
||||
// Returns the maximum level value for current tree contents
|
||||
// Levels are numbered 0, 1, ..., N-1. This function returns N
|
||||
// Throws EmptyBSTree if empty
|
||||
// Hint: calls the private helper function LevelCount
|
||||
{
|
||||
if (&rootPtr == NULL) EmptyBSTree();
|
||||
int level = LevelCount(rootPtr);
|
||||
return level+1;
|
||||
}
|
||||
|
||||
template <typename SomeType>
|
||||
int BSTree<SomeType>::Level(SomeType item) const
|
||||
// Level()
|
||||
// Returns the level within the BSTree at which the value item is found
|
||||
// If tree is empty, throws EmptyBSTree
|
||||
// If tree is not empty and item is not found, throws NotFoundBSTree
|
||||
// Hint: calls the private helper funtion FindLevel
|
||||
{
|
||||
if (rootPtr == NULL) EmptyBSTree();
|
||||
return FindLevel(rootPtr, item);
|
||||
}
|
316
CPE212/Project_05/bstree.cpp.bak
Normal file
316
CPE212/Project_05/bstree.cpp.bak
Normal file
@ -0,0 +1,316 @@
|
||||
#include <iostream>
|
||||
#include <new>
|
||||
#include "bstree.h"
|
||||
|
||||
|
||||
template <typename SomeType>
|
||||
// start of Delete(...)
|
||||
// Recursive function that traverses the tree starting at treePtr to locate the data value to be removed
|
||||
// Once located, DeleteNode is invoked to remove the value from the tree
|
||||
// If tree is not empty and item is NOT present, throw NotFoundBSTree
|
||||
void BSTree<SomeType>::Delete(BSTreeNode<SomeType>*& treePtr, SomeType& item)
|
||||
{
|
||||
if(item < treePtr->data)
|
||||
Delete(treePtr->leftPtr, item); // Look in left subtree
|
||||
else if(item > treePtr->data)
|
||||
Delete(treePtr->rightPtr, item); // Look in right subtree
|
||||
else if (treePtr == item)
|
||||
DeleteNode(treePtr); // Node found; call DeleteNode
|
||||
else
|
||||
NotFoundBSTree();
|
||||
}
|
||||
|
||||
|
||||
template <typename SomeType>
|
||||
void BSTree<SomeType>::DeleteNode(BSTreeNode<SomeType>*& treePtr)
|
||||
// start of DeleteNode()
|
||||
// Removes the node pointed to by treePtr from the tree
|
||||
// Hint: calls GetPredecessor and Delete
|
||||
{
|
||||
SomeType data;
|
||||
BSTreeNode<SomeType>* tempPtr;
|
||||
|
||||
if (treePtr->leftPtr==NULL)
|
||||
{
|
||||
treePtr=treePtr->rightPtr;
|
||||
delete tempPtr;
|
||||
}
|
||||
else if (treePtr->rightPtr==NULL)
|
||||
{
|
||||
treePtr = treePtr->leftPtr;
|
||||
delete tempPtr;
|
||||
}
|
||||
else
|
||||
{
|
||||
GetPredecessor(treePtr->leftPtr, data);
|
||||
treePtr->data = data;
|
||||
Delete(treePtr->leftPtr, data);
|
||||
}
|
||||
} // end of DeleteNode(...)
|
||||
|
||||
template <typename SomeType>
|
||||
void BSTree<SomeType>::Insert(BSTreeNode<SomeType>*& ptr, SomeType item)
|
||||
// Start of Insert(...)
|
||||
// Recursive function that finds the correct position of item and adds it to the tree
|
||||
// Throws FoundInBSTree if item is already in the tree
|
||||
{
|
||||
if (ptr == item) FoundInBSTree();
|
||||
if (ptr==NULL)
|
||||
{
|
||||
ptr = new BSTreeNode<SomeType>;
|
||||
ptr->rightPtr = NULL;
|
||||
ptr->leftPtr = NULL;
|
||||
ptr->data = item;
|
||||
}
|
||||
else if (item < ptr->data)
|
||||
Insert(ptr->leftPtr, item);
|
||||
else
|
||||
Insert(item->rightptr, item);
|
||||
if (ptr ==item) FoundInBSTree();
|
||||
}
|
||||
|
||||
template <typename SomeType>
|
||||
void BSTree<SomeType>::Destroy(BSTreeNode<SomeType>*& ptr)
|
||||
// Destroy()
|
||||
// Recursively deallocates every node in the tree pointed to by ptr
|
||||
{
|
||||
if (ptr==NULL)
|
||||
{
|
||||
Destroy(ptr->leftPtr);
|
||||
Destroy(ptr->rightPtr);
|
||||
delete ptr;
|
||||
}
|
||||
} // end of Destroy()
|
||||
|
||||
template <typename SomeType>
|
||||
void BSTree<SomeType>::CopyTree(BSTreeNode<SomeType>*& copy, const BSTreeNode<SomeType>* originalTree)
|
||||
// CopyTree()
|
||||
// Recursively copies all data from original tree into copy
|
||||
{
|
||||
if (originalTree == NULL)
|
||||
copy = NULL;
|
||||
else
|
||||
{
|
||||
copy = new BSTreeNode<typename SomeType>;
|
||||
copy->data = originalTree->data;
|
||||
CopyTree(copy->leftPtr, originalTree->leftPtr);
|
||||
CopyTree(copy->rightPtr, originalTree->rightPtr);
|
||||
}
|
||||
}
|
||||
|
||||
template <typename SomeType>
|
||||
SomeType BSTree<SomeType>::GetPredecessor(BSTreeNode<SomeType>* treePtr) const
|
||||
// GetPredecessor()
|
||||
// Finds the largest data value in the tree pointed to by treePtr and returns that data value
|
||||
// as the functions return value
|
||||
{
|
||||
while (treePtr->rightPtr != NULL)
|
||||
treePtr = treePtr->rightPtr;
|
||||
data = treePtr->data;
|
||||
}
|
||||
|
||||
template <typename SomeType>
|
||||
int BSTree<SomeType>::CountNodes(BSTreeNode<SomeType>* treePtr) const
|
||||
// CountNodes()
|
||||
// Recursive function that counts every node in the tree pointed to by treePtr and returns the
|
||||
// count as the function return value
|
||||
{
|
||||
if (treePtr == NULL)
|
||||
return 0;
|
||||
else
|
||||
return CountNodes(treePtr->leftPtr) + CountNodes(treePtr->rightPtr) + 1;
|
||||
}
|
||||
|
||||
template <typename SomeType>
|
||||
int BSTree<SomeType>::LevelCount(BSTreeNode<SomeType>* treePtr) const
|
||||
// LevelCount()
|
||||
// Recursive function that traverses the entire tree to determine the total number of levels in the tree
|
||||
{
|
||||
if(treePtr->leftPtr == NULL && treePtr->rightPtr == NULL)
|
||||
return 0;
|
||||
|
||||
int left = 0;
|
||||
if (treePtr->leftPtr != NULL)
|
||||
left = LevelCount(treePtr->leftPtr);
|
||||
|
||||
int right = 0;
|
||||
if (treePtr->rightPtr != NULL)
|
||||
right = LevelCount(treePtr->rightPtr);
|
||||
|
||||
return (max(left, right) + 1);
|
||||
}
|
||||
|
||||
template <typename SomeType>
|
||||
int BSTree<SomeType>::FindLevel(BSTreeNode<SomeType>* treePtr, SomeType item) const
|
||||
// FindLevel()
|
||||
// Recursive function that traverses the tree looking for item and returns the level where
|
||||
// item was found
|
||||
{
|
||||
int static level = 0;
|
||||
if (treePtr == NULL)
|
||||
return 0;
|
||||
|
||||
int left = 0;
|
||||
if (treePtr->leftPtr != NULL && treePtr->data != item)
|
||||
left = LevelCount(treePtr->leftPtr);
|
||||
|
||||
int right = 0;
|
||||
if (treePtr->rightPtr != NULL)
|
||||
right = LevelCount(treePtr->rightPtr);
|
||||
|
||||
return (max(left, right));
|
||||
}
|
||||
|
||||
template <typename SomeType>
|
||||
BSTree<SomeType>::BSTree()
|
||||
{
|
||||
rootPtr=NULL;
|
||||
}
|
||||
|
||||
|
||||
template <typename SomeType>
|
||||
//start of BSTree(...)
|
||||
BSTree<SomeType>::BSTree(const BSTree<SomeType>& someTree)
|
||||
// BSTree()
|
||||
// Copy constructor for BSTree
|
||||
// Hint: calls CopyTree
|
||||
{
|
||||
CopyTree(someTree);
|
||||
}
|
||||
|
||||
template <typename SomeType>
|
||||
void BSTree<SomeType>::operator=(const BSTree<SomeType>& originalTree)
|
||||
// operator=()
|
||||
// Overloaded assignment operator for BSTree.
|
||||
// Hint: calls CopyTree
|
||||
{
|
||||
if (originalTree==this)
|
||||
return;
|
||||
|
||||
Destroy(rootPtr);
|
||||
CopyTree(originalTree);
|
||||
}
|
||||
|
||||
template <typename SomeType>
|
||||
BSTree<SomeType>::~BSTree()
|
||||
// ~BSTree()
|
||||
// Destructor deallocates all tree nodes
|
||||
// Hint: calls the private helper function Destroy
|
||||
{
|
||||
Destroy(rootPtr);
|
||||
}
|
||||
|
||||
template <typename SomeType>
|
||||
void BSTree<SomeType>::InsertItem(SomeType item)
|
||||
// InsertItem()
|
||||
// Inserts item into BSTree; if tree already full, throws FullBSTree exception
|
||||
// If item is already in BSTree, throw FoundInBSTree exception
|
||||
// Hint: calls the private helper function Insert
|
||||
{
|
||||
Insert(item);
|
||||
}
|
||||
|
||||
template <typename SomeType>
|
||||
SomeType BSTree<SomeType>::DeleteItem(SomeType item)
|
||||
// DeleteItem()
|
||||
// Deletes item from BSTree if item is present AND returns object via function return value
|
||||
// If tree is empty, throw the EmptyBSTree exception
|
||||
// If tree is not empty and item is NOT present, throw NotFoundBSTree
|
||||
// Hint: calls the private helper function Delete
|
||||
{
|
||||
if (rootPtr == NULL) EmptyBSTree();
|
||||
Delete(item);
|
||||
}
|
||||
|
||||
template <typename SomeType>
|
||||
void BSTree<SomeType>::MakeEmpty()
|
||||
// MakeEmpty()
|
||||
// Deallocates all BSTree nodes and sets root pointer to NULL
|
||||
// Hint: calls the private helper function Destroy
|
||||
{
|
||||
Delete(rootPtr);
|
||||
rootPtr=NULL;
|
||||
}
|
||||
|
||||
template <typename SomeType>
|
||||
int BSTree<SomeType>::Size() const
|
||||
// Size()
|
||||
// Returns total number of data values stored in tree
|
||||
{
|
||||
return CountNodes(rootPtr);
|
||||
}
|
||||
|
||||
template <typename SomeType>
|
||||
bool BSTree<SomeType>::IsFull() const
|
||||
{
|
||||
BSTreeNode<SomeType>* location;
|
||||
try
|
||||
{
|
||||
location = new BSTreeNode<SomeType>;
|
||||
delete location;
|
||||
return false;
|
||||
}
|
||||
catch( bad_alloc )
|
||||
{
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
template <typename SomeType>
|
||||
bool BSTree<SomeType>::IsEmpty() const
|
||||
{
|
||||
if (rootPtr == NULL) return true;
|
||||
return false;
|
||||
}
|
||||
|
||||
template <typename SomeType>
|
||||
SomeType BSTree<SomeType>::Min() const
|
||||
{
|
||||
if (rootPtr == NULL) EmptyBSTree();
|
||||
|
||||
int res = rootPtr->data;
|
||||
BSTreeNode<SomeType>* current;
|
||||
while (current->leftPtr != NULL)
|
||||
{
|
||||
current = current->leftPtr;
|
||||
}
|
||||
return(current->leftPtr);
|
||||
}
|
||||
|
||||
template <typename SomeType>
|
||||
SomeType BSTree<SomeType>::Max() const
|
||||
{
|
||||
if (rootPtr == NULL) EmptyBSTree();
|
||||
|
||||
BSTreeNode<SomeType>* current;
|
||||
while (current->rightPtr != NULL)
|
||||
{
|
||||
current = current->rightPtr;
|
||||
}
|
||||
return(current->rightPtr);
|
||||
}
|
||||
|
||||
template <typename SomeType>
|
||||
int BSTree<SomeType>::TotalLevels() const
|
||||
// TotalLevels()
|
||||
// Returns the maximum level value for current tree contents
|
||||
// Levels are numbered 0, 1, ..., N-1. This function returns N
|
||||
// Throws EmptyBSTree if empty
|
||||
// Hint: calls the private helper function LevelCount
|
||||
{
|
||||
if (rootPtr == NULL) EmptyBSTree();
|
||||
int level = LevelCount(rootPtr);
|
||||
return level+1;
|
||||
}
|
||||
|
||||
template <typename SomeType>
|
||||
int BSTree<SomeType>::Level(SomeType item) const
|
||||
// Level()
|
||||
// Returns the level within the BSTree at which the value item is found
|
||||
// If tree is empty, throws EmptyBSTree
|
||||
// If tree is not empty and item is not found, throws NotFoundBSTree
|
||||
// Hint: calls the private helper funtion FindLevel
|
||||
{
|
||||
if (rootPtr == NULL) EmptyBSTree();
|
||||
return FindLevel(rootPtr, item);
|
||||
}
|
187
CPE212/Project_05/bstree.h
Normal file
187
CPE212/Project_05/bstree.h
Normal file
@ -0,0 +1,187 @@
|
||||
//
|
||||
// bstree.h 2010 Fall CPE 212 - Project05 - Binary Search Tree Template
|
||||
//
|
||||
// Provides a declaration of the BSTree class template.
|
||||
//
|
||||
// DO NOT MODIFY OR SUBMIT THIS FILE
|
||||
//
|
||||
|
||||
#ifndef BSTREE_H
|
||||
#define BSTREE_H
|
||||
|
||||
#include <cstddef>
|
||||
#include <new>
|
||||
#include <string>
|
||||
|
||||
using namespace std;
|
||||
|
||||
class FullBSTree // Exception class models full BSTree condition
|
||||
{
|
||||
/* No code here */
|
||||
};
|
||||
|
||||
class EmptyBSTree // Exception class models empty BSTree condition
|
||||
{
|
||||
/* No code here */
|
||||
};
|
||||
|
||||
class NotFoundBSTree // Exception class models not found in BSTree condition
|
||||
{
|
||||
/* No code here */
|
||||
};
|
||||
|
||||
class FoundInBSTree // Exception class models found in BSTree condition
|
||||
{
|
||||
/* No code here */
|
||||
};
|
||||
|
||||
template <typename SomeType>
|
||||
struct BSTreeNode // Node of BSTree
|
||||
{
|
||||
SomeType data; // Data stored in node
|
||||
BSTreeNode<SomeType>* leftPtr; // Pointer to left subtree
|
||||
BSTreeNode<SomeType>* rightPtr; // Pointer to right subtree
|
||||
};
|
||||
|
||||
template <typename SomeType>
|
||||
class BSTree // BSTree Abstract Data Type
|
||||
{
|
||||
private:
|
||||
BSTreeNode<SomeType>* rootPtr; // Pointer to root of BSTree
|
||||
|
||||
/************** Start of Private Helper Functions You Must Implement ****************/
|
||||
void Delete(BSTreeNode<SomeType>*& treePtr, SomeType& item);
|
||||
// Delete()
|
||||
// Recursive function that traverses the tree starting at treePtr to locate the data value to be removed
|
||||
// Once located, DeleteNode is invoked to remove the value from the tree
|
||||
// If tree is not empty and item is NOT present, throw NotFoundBSTree
|
||||
|
||||
void DeleteNode(BSTreeNode<SomeType>*& treePtr);
|
||||
// DeleteNode()
|
||||
// Removes the node pointed to by treePtr from the tree
|
||||
// Hint: calls GetPredecessor and Delete
|
||||
|
||||
void Insert(BSTreeNode<SomeType>*& ptr, SomeType item);
|
||||
// Insert()
|
||||
// Recursive function that finds the correct position of item and adds it to the tree
|
||||
// Throws FoundInBSTree if item is already in the tree
|
||||
|
||||
void Destroy(BSTreeNode<SomeType>*& ptr);
|
||||
// Destroy()
|
||||
// Recursively deallocates every node in the tree pointed to by ptr
|
||||
|
||||
void CopyTree(BSTreeNode<SomeType>*& copy, const BSTreeNode<SomeType>* originalTree);
|
||||
// CopyTree()
|
||||
// Recursively copies all data from original tree into copy
|
||||
|
||||
SomeType GetPredecessor(BSTreeNode<SomeType>* treePtr) const;
|
||||
// GetPredecessor()
|
||||
// Finds the largest data value in the tree pointed to by treePtr and returns that data value
|
||||
// as the functions return value
|
||||
|
||||
int CountNodes(BSTreeNode<SomeType>* treePtr) const;
|
||||
// CountNodes()
|
||||
// Recursive function that counts every node in the tree pointed to by treePtr and returns the
|
||||
// count as the function return value
|
||||
|
||||
int LevelCount(BSTreeNode<SomeType>* treePtr) const;
|
||||
// LevelCount()
|
||||
// Recursive function that traverses the entire tree to determine the total number of levels in the tree
|
||||
|
||||
int FindLevel(BSTreeNode<SomeType>* treePtr, SomeType item) const;
|
||||
// FindLevel()
|
||||
// Recursive function that traverses the tree looking for item and returns the level where
|
||||
// item was found
|
||||
|
||||
|
||||
/************** End of Private Helper Functions You Must Implement ****************/
|
||||
|
||||
public:
|
||||
|
||||
/************** Start of Public Interface Functions You Must Implement ****************/
|
||||
|
||||
BSTree();
|
||||
// BSTree()
|
||||
// Default constructor initializes root pointer to NULL
|
||||
|
||||
BSTree(const BSTree<SomeType>& someTree);
|
||||
// BSTree()
|
||||
// Copy constructor for BSTree
|
||||
// Hint: calls CopyTree
|
||||
|
||||
void operator=(const BSTree<SomeType>& originalTree);
|
||||
// operator=()
|
||||
// Overloaded assignment operator for BSTree.
|
||||
// Hint: calls CopyTree
|
||||
|
||||
~BSTree();
|
||||
// ~BSTree()
|
||||
// Destructor deallocates all tree nodes
|
||||
// Hint: calls the private helper function Destroy
|
||||
|
||||
void InsertItem(SomeType item);
|
||||
// InsertItem()
|
||||
// Inserts item into BSTree; if tree already full, throws FullBSTree exception
|
||||
// If item is already in BSTree, throw FoundInBSTree exception
|
||||
// Hint: calls the private helper function Insert
|
||||
|
||||
SomeType DeleteItem(SomeType item);
|
||||
// DeleteItem()
|
||||
// Deletes item from BSTree if item is present AND returns object via function return value
|
||||
// If tree is empty, throw the EmptyBSTree exception
|
||||
// If tree is not empty and item is NOT present, throw NotFoundBSTree
|
||||
// Hint: calls the private helper function Delete
|
||||
|
||||
void MakeEmpty();
|
||||
// MakeEmpty()
|
||||
// Deallocates all BSTree nodes and sets root pointer to NULL
|
||||
// Hint: calls the private helper function Destroy
|
||||
|
||||
int Size() const;
|
||||
// Size()
|
||||
// Returns total number of data values stored in tree
|
||||
|
||||
bool IsFull() const;
|
||||
// IsFull()
|
||||
// Returns true if BSTree is full; returns false otherwise
|
||||
|
||||
bool IsEmpty() const;
|
||||
// IsEmpty()
|
||||
// Returns true if BSTree is empty; returns false otherwise
|
||||
|
||||
SomeType Min() const;
|
||||
// Min()
|
||||
// Returns minimum value in tree; throws EmptyBSTree if tree is empty
|
||||
|
||||
SomeType Max() const;
|
||||
// Max()
|
||||
// Returns maximum value in tree; throws EmptyBSTree if tree is empty
|
||||
|
||||
int TotalLevels() const;
|
||||
// TotalLevels()
|
||||
// Returns the maximum level value for current tree contents
|
||||
// Levels are numbered 0, 1, ..., N-1. This function returns N
|
||||
// Throws EmptyBSTree if empty
|
||||
// Hint: calls the private helper function LevelCount
|
||||
|
||||
int Level(SomeType item) const;
|
||||
// Level()
|
||||
// Returns the level within the BSTree at which the value item is found
|
||||
// If tree is empty, throws EmptyBSTree
|
||||
// If tree is not empty and item is not found, throws NotFoundBSTree
|
||||
// Hint: calls the private helper funtion FindLevel
|
||||
|
||||
/************** End of Functions You Must Implement ****************/
|
||||
|
||||
|
||||
|
||||
void Print() const; // DO NOT WRITE THIS FUNCTION
|
||||
// Print()
|
||||
// Prints binary search tree contents in inorder, preorder, and postorder forms
|
||||
// NOTE: THIS CODE HAS BEEN INCLUDED AT THE END OF main.cpp
|
||||
};
|
||||
|
||||
#include "bstree.cpp" // Note: Template classes cannot be compiled on their own
|
||||
// since the data type argument is found in the client code.
|
||||
|
||||
#endif
|
320
CPE212/Project_05/main.cpp
Normal file
320
CPE212/Project_05/main.cpp
Normal file
@ -0,0 +1,320 @@
|
||||
//
|
||||
// main.cpp 2010 Fall CPE 212 - Project05 - Binary Search Tree Template
|
||||
//
|
||||
// Driver program for BSTree ADT Template -- The text files (read by this code) contain a series
|
||||
// of commands that will help you test your BSTree ADT Template code by triggering various class methods.
|
||||
//
|
||||
// DO NOT SUBMIT THIS FILE
|
||||
//
|
||||
#include <iostream>
|
||||
#include <fstream>
|
||||
#include <string>
|
||||
#include "bstree.h"
|
||||
#include "student.h"
|
||||
|
||||
|
||||
using namespace std;
|
||||
|
||||
|
||||
int main (int argc, char * const argv[])
|
||||
{
|
||||
ifstream inputs; // Input file for commands
|
||||
char op, ch; // Hold operation and optional char input
|
||||
BSTree<Student>* tPtr = NULL; // Will point to BSTree object
|
||||
string comment;
|
||||
|
||||
|
||||
// Output usage message if one input file name is not provided
|
||||
if (argc != 2)
|
||||
{
|
||||
cout << "Usage:\n project05 <inputfile>\n";
|
||||
return 1;
|
||||
}
|
||||
|
||||
// Attempt to open input file -- terminate if file does not open
|
||||
inputs.open(argv[1]);
|
||||
if (!inputs)
|
||||
{
|
||||
cout << "Error - unable to open input file" << endl;
|
||||
return 1;
|
||||
}
|
||||
|
||||
// Process commands from input file
|
||||
getline(inputs, comment);
|
||||
cout << endl << comment << endl << endl; // Output header comment
|
||||
inputs >> op; // Attempt to input first command
|
||||
while (inputs)
|
||||
{
|
||||
// Select and perform operation input from file
|
||||
|
||||
switch (op)
|
||||
{
|
||||
case '#': // Test file comment
|
||||
getline(inputs, comment);
|
||||
cout << '#' << comment;
|
||||
break;
|
||||
|
||||
case 'c': // Constructor
|
||||
cout << endl << "Constructor()";
|
||||
try
|
||||
{
|
||||
tPtr = new BSTree<Student>;
|
||||
cout << endl;
|
||||
}
|
||||
catch ( std::bad_alloc )
|
||||
{
|
||||
cout << "Failed : Terminating now..." << endl;
|
||||
return 1;
|
||||
}
|
||||
break;
|
||||
|
||||
case '!': // Test copy constructor
|
||||
try
|
||||
{
|
||||
cout << endl << "*** Start Copy Constructor Test ***" << endl;
|
||||
BSTree<Student> dummy = *tPtr;
|
||||
Student s;
|
||||
inputs >> s;
|
||||
cout << "Print Copy without new value" << endl;
|
||||
dummy.Print();
|
||||
dummy.InsertItem(s);
|
||||
cout << "Print Copy plus new value" << endl;
|
||||
dummy.Print();
|
||||
cout << "Print Original without new value" << endl;
|
||||
tPtr->Print();
|
||||
cout << "CopyConstructor -- successful" << endl;
|
||||
}
|
||||
catch (...)
|
||||
{
|
||||
cout << "CopyConstructor -- Failed: copy constructor" << endl;
|
||||
}
|
||||
cout << "*** End Copy Constructor Test ***" << endl;
|
||||
break;
|
||||
|
||||
case '=': // Test overloaded assignment operator
|
||||
try
|
||||
{
|
||||
cout << endl << "*** Start Operator= Test ***" << endl;
|
||||
BSTree<Student> dummy;
|
||||
dummy = *tPtr;
|
||||
Student s;
|
||||
inputs >> s;
|
||||
cout << "Print Copy without new value" << endl;
|
||||
dummy.Print();
|
||||
dummy.InsertItem(s);
|
||||
cout << "Print Copy plus new value" << endl;
|
||||
dummy.Print();
|
||||
cout << "Print Original without new value" << endl;
|
||||
tPtr->Print();
|
||||
cout << "Operator= -- successful" << endl;
|
||||
}
|
||||
catch (...)
|
||||
{
|
||||
cout << "Operator= -- Failed: assignment operator" << endl;
|
||||
}
|
||||
cout << "*** End Operator= Test ***" << endl;
|
||||
break;
|
||||
case '+': // InsertItem
|
||||
|
||||
try
|
||||
{
|
||||
Student s; // Create temporary object to hold student info from file
|
||||
inputs >> s; // Use overloaded operator to populate temporary object
|
||||
cout << "InsertItem('";
|
||||
s.Print();
|
||||
cout << "')";
|
||||
tPtr->InsertItem(s);
|
||||
}
|
||||
catch (FullBSTree)
|
||||
{
|
||||
cout << " -- Failed Full BSTree";
|
||||
}
|
||||
catch (FoundInBSTree)
|
||||
{
|
||||
cout << " -- Failed Item Already Found In BSTree";
|
||||
}
|
||||
cout << endl;
|
||||
break;
|
||||
|
||||
case '-': // DeleteItem
|
||||
try
|
||||
{
|
||||
int id;
|
||||
inputs >> id;
|
||||
Student s(id, "NULL", "NULL");
|
||||
cout << "DeleteItem('" << id << "') -- ";
|
||||
s = tPtr->DeleteItem(s);
|
||||
cout << "Deleted ";
|
||||
s.Print();
|
||||
}
|
||||
catch (EmptyBSTree)
|
||||
{
|
||||
cout << " -- Failed Empty BSTree";
|
||||
}
|
||||
catch (NotFoundBSTree)
|
||||
{
|
||||
cout << " -- Failed Not Found in BSTree";
|
||||
}
|
||||
cout << endl;
|
||||
break;
|
||||
|
||||
case 'p': // Print BSTree
|
||||
tPtr->Print();
|
||||
break;
|
||||
|
||||
case 's': // Size of BSTree
|
||||
cout << "Size() -- " << tPtr->Size() << endl;
|
||||
break;
|
||||
|
||||
case 'm': // Make BSTree Empty
|
||||
tPtr->MakeEmpty();
|
||||
cout << "MakeEmpty()"<< endl;
|
||||
break;
|
||||
|
||||
case 'd': // Destructor
|
||||
delete tPtr;
|
||||
tPtr = NULL;
|
||||
cout << "Destructor()" << endl << endl;
|
||||
break;
|
||||
|
||||
case '<': // Minimum
|
||||
cout << "Min() -- ";
|
||||
try
|
||||
{
|
||||
cout << tPtr->Min() << endl;
|
||||
}
|
||||
catch ( EmptyBSTree )
|
||||
{
|
||||
cout << "Failed Empty BSTree" << endl;
|
||||
}
|
||||
break;
|
||||
|
||||
case '>': // Maximum
|
||||
cout << "Max() -- ";
|
||||
try
|
||||
{
|
||||
cout << tPtr->Max() << endl;
|
||||
}
|
||||
catch ( EmptyBSTree )
|
||||
{
|
||||
cout << "Failed Empty BSTree" << endl;
|
||||
}
|
||||
break;
|
||||
|
||||
case 'l': // Size of BSTree
|
||||
try
|
||||
{
|
||||
cout << "TotalLevels() -- " << tPtr->TotalLevels() << endl;
|
||||
}
|
||||
catch ( EmptyBSTree )
|
||||
{
|
||||
cout << "TotalLevels() -- Failed Empty BSTree" << endl;
|
||||
}
|
||||
break;
|
||||
|
||||
case '?': // Size of BSTree
|
||||
try
|
||||
{
|
||||
int id;
|
||||
inputs >> id;
|
||||
Student s(id, "NULL", "NULL");
|
||||
cout << "Level('" << s << "') -- ";
|
||||
cout << tPtr->Level(s) << endl;
|
||||
}
|
||||
catch ( EmptyBSTree )
|
||||
{
|
||||
cout << "Failed Empty BSTree" << endl;
|
||||
}
|
||||
break;
|
||||
|
||||
default: // Error
|
||||
cout << "Error - unrecognized operation '" << op << "'" << endl;
|
||||
cout << "Terminating now..." << endl;
|
||||
return 1;
|
||||
break;
|
||||
}
|
||||
|
||||
inputs >> op; // Attempt to input next command
|
||||
}
|
||||
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
/************** Implementation of Print() function ********************/
|
||||
|
||||
// DO NOT MODIFY THIS CODE
|
||||
|
||||
#include <queue>
|
||||
|
||||
// This code uses the Standard Template Libary queue class, container adapter wrapper
|
||||
// that makes the deque (double-ended queue) look more like a single-ended queue.
|
||||
// Note the different names used for the enqueue and dequeue operations.
|
||||
|
||||
template <typename SomeType>
|
||||
void PreOrder(BSTreeNode<SomeType>* tree, queue<SomeType>& preorder)
|
||||
// Post: preorder contains the tree items in preorder.
|
||||
{
|
||||
if (tree != NULL)
|
||||
{
|
||||
preorder.push(tree->data);
|
||||
PreOrder(tree->leftPtr, preorder);
|
||||
PreOrder(tree->rightPtr, preorder);
|
||||
}
|
||||
}
|
||||
|
||||
template <typename SomeType>
|
||||
void InOrder(BSTreeNode<SomeType>* tree, queue<SomeType>& inorder)
|
||||
// Post: inorder contains the tree items in inorder.
|
||||
{
|
||||
if (tree != NULL)
|
||||
{
|
||||
InOrder(tree->leftPtr, inorder);
|
||||
inorder.push(tree->data);
|
||||
InOrder(tree->rightPtr, inorder);
|
||||
}
|
||||
}
|
||||
|
||||
template <typename SomeType>
|
||||
void PostOrder(BSTreeNode<SomeType>* tree, queue<SomeType>& postorder)
|
||||
// Post: postorder contains the tree items in postorder.
|
||||
{
|
||||
if (tree != NULL)
|
||||
{
|
||||
PostOrder(tree->leftPtr, postorder);
|
||||
PostOrder(tree->rightPtr, postorder);
|
||||
postorder.push(tree->data);
|
||||
}
|
||||
}
|
||||
|
||||
template <typename SomeType>
|
||||
void BSTree<SomeType>::Print() const
|
||||
{
|
||||
queue<SomeType> preorder, inorder, postorder;
|
||||
|
||||
PreOrder(rootPtr, preorder);
|
||||
InOrder(rootPtr, inorder);
|
||||
PostOrder(rootPtr, postorder);
|
||||
|
||||
cout << "Print() \n-- Inorder = { ";
|
||||
while (!inorder.empty())
|
||||
{
|
||||
cout << inorder.front() << " ";
|
||||
inorder.pop();
|
||||
}
|
||||
cout << "} \n-- Preorder = { ";
|
||||
while (!preorder.empty())
|
||||
{
|
||||
cout << preorder.front() << " ";
|
||||
preorder.pop();
|
||||
}
|
||||
cout << "} \n-- Postorder = { ";
|
||||
while (!postorder.empty())
|
||||
{
|
||||
cout << postorder.front() << " ";
|
||||
postorder.pop();
|
||||
}
|
||||
cout << "}" << endl;
|
||||
}
|
||||
|
||||
|
BIN
CPE212/Project_05/main.o
Normal file
BIN
CPE212/Project_05/main.o
Normal file
Binary file not shown.
19
CPE212/Project_05/makefile
Normal file
19
CPE212/Project_05/makefile
Normal file
@ -0,0 +1,19 @@
|
||||
# Project06 makefile
|
||||
# To disable the gcov options use a # to comment out the
|
||||
# following line and uncomment the line below it
|
||||
#CC = g++ -fprofile-arcs -ftest-coverage
|
||||
CC = g++
|
||||
|
||||
project05: main.o student.o
|
||||
$(CC) main.o student.o -o project05
|
||||
|
||||
main.o: main.cpp bstree.h
|
||||
$(CC) -c main.cpp
|
||||
|
||||
student.o: student.cpp student.h
|
||||
$(CC) -c student.cpp
|
||||
|
||||
clean:
|
||||
rm *.o *.gcda *.gcno *.gcov project05
|
||||
|
||||
|
68
CPE212/Project_05/p05input1.txt
Normal file
68
CPE212/Project_05/p05input1.txt
Normal file
@ -0,0 +1,68 @@
|
||||
// p05input1.txt - Test BSTree(), InsertItem(), ~BSTree()
|
||||
|
||||
# Test creating empty binary search tree
|
||||
c
|
||||
p
|
||||
d
|
||||
|
||||
|
||||
# Test adding one student object to binary search tree
|
||||
c
|
||||
+ 5678 Washington George
|
||||
p
|
||||
d
|
||||
|
||||
|
||||
# Test adding student objects pre-sorted highest to lowest id
|
||||
c
|
||||
+ 5678 Washington George
|
||||
p
|
||||
+ 1234 Jefferson Thomas
|
||||
p
|
||||
+ 1000 Madison James
|
||||
p
|
||||
+ 888 Nixon Richard
|
||||
p
|
||||
+ 555 Lincoln Abraham
|
||||
p
|
||||
d
|
||||
|
||||
|
||||
# Test adding student objects pre-sorted lowest to highest id
|
||||
c
|
||||
+ 555 Lincoln Abraham
|
||||
p
|
||||
+ 888 Nixon Richard
|
||||
p
|
||||
+ 1000 Madison James
|
||||
p
|
||||
+ 1234 Jefferson Thomas
|
||||
p
|
||||
+ 5678 Washington George
|
||||
p
|
||||
d
|
||||
|
||||
|
||||
# Test adding an unsorted sequence of student objects
|
||||
c
|
||||
+ 1234 Jefferson Thomas
|
||||
p
|
||||
+ 888 Nixon Richard
|
||||
p
|
||||
+ 5678 Washington George
|
||||
p
|
||||
+ 555 Lincoln Abraham
|
||||
p
|
||||
+ 1000 Madison James
|
||||
p
|
||||
d
|
||||
|
||||
|
||||
# Test adding duplicate student object to tree
|
||||
c
|
||||
+ 1234 Jefferson Thomas
|
||||
p
|
||||
+ 1234 Jefferson Thomas
|
||||
p
|
||||
d
|
||||
|
125
CPE212/Project_05/p05input2.txt
Normal file
125
CPE212/Project_05/p05input2.txt
Normal file
@ -0,0 +1,125 @@
|
||||
// p05input2.txt - Test BSTree(), InsertItem(), DeleteItem(), MakeEmpty(), ~BSTree()
|
||||
|
||||
# Test deleting leaf node that is the left child of its parent
|
||||
c
|
||||
+ 5678 Washington George
|
||||
+ 1234 Jefferson Thomas
|
||||
+ 1000 Madison James
|
||||
+ 555 Lincoln Abraham
|
||||
p
|
||||
- 555
|
||||
p
|
||||
d
|
||||
|
||||
|
||||
# Test deleting leaf node that is the right child of its parent
|
||||
c
|
||||
+ 555 Lincoln Abraham
|
||||
+ 1000 Madison James
|
||||
+ 1234 Jefferson Thomas
|
||||
+ 5678 Washington George
|
||||
p
|
||||
- 5678
|
||||
p
|
||||
d
|
||||
|
||||
|
||||
# Test deleting parent node that has only a left child
|
||||
c
|
||||
+ 5678 Washington George
|
||||
+ 1234 Jefferson Thomas
|
||||
+ 1000 Madison James
|
||||
+ 555 Lincoln Abraham
|
||||
p
|
||||
- 1000
|
||||
p
|
||||
d
|
||||
|
||||
|
||||
# Test deleting parent node that has only a right child
|
||||
c
|
||||
+ 555 Lincoln Abraham
|
||||
+ 1000 Madison James
|
||||
+ 1234 Jefferson Thomas
|
||||
+ 5678 Washington George
|
||||
p
|
||||
- 1234
|
||||
p
|
||||
d
|
||||
|
||||
|
||||
# Test deleting parent node that has two children
|
||||
c
|
||||
+ 555 Lincoln Abraham
|
||||
+ 1000 Madison James
|
||||
+ 1234 Jefferson Thomas
|
||||
+ 5678 Washington George
|
||||
+ 888 Nixon Richard
|
||||
p
|
||||
- 1000
|
||||
p
|
||||
d
|
||||
|
||||
|
||||
# Test deleting root node
|
||||
c
|
||||
+ 1000 Madison James
|
||||
+ 1234 Jefferson Thomas
|
||||
+ 555 Lincoln Abraham
|
||||
p
|
||||
- 1000
|
||||
p
|
||||
d
|
||||
|
||||
|
||||
# Test deleting only node leaving empty tree
|
||||
c
|
||||
+ 888 Nixon Richard
|
||||
p
|
||||
- 888
|
||||
p
|
||||
d
|
||||
|
||||
|
||||
# Test deleting value not in tree
|
||||
c
|
||||
+ 888 Nixon Richard
|
||||
p
|
||||
- 555
|
||||
p
|
||||
d
|
||||
|
||||
|
||||
# Test deleting value from empty tree
|
||||
c
|
||||
- 333
|
||||
p
|
||||
d
|
||||
|
||||
|
||||
|
||||
# Test MakeEmpty deallocating all nodes
|
||||
c
|
||||
+ 1234 Jefferson Thomas
|
||||
+ 888 Nixon Richard
|
||||
+ 5678 Washington George
|
||||
+ 555 Lincoln Abraham
|
||||
+ 1000 Madison James
|
||||
p
|
||||
m
|
||||
p
|
||||
d
|
||||
|
||||
|
||||
# Test MakeEmpty deallocating nodes from empty tree
|
||||
c
|
||||
p
|
||||
m
|
||||
p
|
||||
d
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
28
CPE212/Project_05/p05input3.txt
Normal file
28
CPE212/Project_05/p05input3.txt
Normal file
@ -0,0 +1,28 @@
|
||||
// p05input3.txt - Test BSTree(), CopyConstructor, = , ~BSTree()
|
||||
|
||||
# Test Copy Constructor
|
||||
c
|
||||
+ 1234 Jefferson Thomas
|
||||
+ 888 Nixon Richard
|
||||
+ 5678 Washington George
|
||||
+ 555 Lincoln Abraham
|
||||
+ 1000 Madison James
|
||||
p
|
||||
! 007 Bond James
|
||||
d
|
||||
|
||||
|
||||
# Test Assignment Operator
|
||||
c
|
||||
+ 1234 Jefferson Thomas
|
||||
+ 888 Nixon Richard
|
||||
+ 5678 Washington George
|
||||
+ 555 Lincoln Abraham
|
||||
+ 1000 Madison James
|
||||
p
|
||||
= 007 Bond James
|
||||
d
|
||||
|
||||
|
||||
|
||||
|
83
CPE212/Project_05/p05input4.txt
Normal file
83
CPE212/Project_05/p05input4.txt
Normal file
@ -0,0 +1,83 @@
|
||||
// p05input4.txt - Test Size()
|
||||
|
||||
# Test correctness of size when adding student objects
|
||||
c
|
||||
p
|
||||
s
|
||||
+ 1234 Jefferson Thomas
|
||||
p
|
||||
s
|
||||
+ 888 Nixon Richard
|
||||
p
|
||||
s
|
||||
+ 5678 Washington George
|
||||
p
|
||||
s
|
||||
+ 555 Lincoln Abraham
|
||||
p
|
||||
s
|
||||
+ 1000 Madison James
|
||||
p
|
||||
s
|
||||
d
|
||||
|
||||
|
||||
# Test correctness of size when deleting student objects
|
||||
c
|
||||
s
|
||||
+ 1234 Jefferson Thomas
|
||||
+ 888 Nixon Richard
|
||||
+ 5678 Washington George
|
||||
+ 555 Lincoln Abraham
|
||||
+ 1000 Madison James
|
||||
p
|
||||
s
|
||||
- 555
|
||||
p
|
||||
s
|
||||
- 1234
|
||||
p
|
||||
s
|
||||
- 888
|
||||
p
|
||||
s
|
||||
- 5678
|
||||
p
|
||||
s
|
||||
- 1000
|
||||
p
|
||||
s
|
||||
d
|
||||
|
||||
|
||||
# Test correctness of size when adding and deleting student objects
|
||||
c
|
||||
+ 1234 Jefferson Thomas
|
||||
s
|
||||
+ 888 Nixon Richard
|
||||
s
|
||||
+ 5678 Washington George
|
||||
p
|
||||
s
|
||||
- 888
|
||||
p
|
||||
s
|
||||
+ 555 Lincoln Abraham
|
||||
p
|
||||
s
|
||||
+ 1000 Madison James
|
||||
p
|
||||
s
|
||||
- 1234
|
||||
p
|
||||
s
|
||||
d
|
||||
|
||||
|
||||
|
||||
# Test correctness of size for empty tree
|
||||
c
|
||||
p
|
||||
s
|
||||
d
|
||||
|
132
CPE212/Project_05/p05input5.txt
Normal file
132
CPE212/Project_05/p05input5.txt
Normal file
@ -0,0 +1,132 @@
|
||||
// p05input5.txt - Test Min(), Max()
|
||||
|
||||
# Test when min is a left child
|
||||
c
|
||||
+ 5678 Washington George
|
||||
+ 1234 Jefferson Thomas
|
||||
p
|
||||
<
|
||||
+ 1000 Madison James
|
||||
+ 555 Lincoln Abraham
|
||||
p
|
||||
<
|
||||
d
|
||||
|
||||
|
||||
# Test when min is root
|
||||
c
|
||||
+ 555 Lincoln Abraham
|
||||
+ 1000 Madison James
|
||||
+ 1234 Jefferson Thomas
|
||||
+ 5678 Washington George
|
||||
p
|
||||
<
|
||||
d
|
||||
|
||||
|
||||
# Test deleting parent node that has two children
|
||||
c
|
||||
+ 1234 Jefferson Thomas
|
||||
+ 555 Lincoln Abraham
|
||||
+ 1000 Madison James
|
||||
p
|
||||
<
|
||||
+ 5678 Washington George
|
||||
+ 888 Nixon Richard
|
||||
p
|
||||
<
|
||||
d
|
||||
|
||||
|
||||
# Test when min has a right child
|
||||
c
|
||||
+ 1000 Madison James
|
||||
+ 1234 Jefferson Thomas
|
||||
p
|
||||
<
|
||||
+ 555 Lincoln Abraham
|
||||
+ 888 Nixon Richard
|
||||
p
|
||||
<
|
||||
d
|
||||
|
||||
|
||||
# Test when min is the only value
|
||||
c
|
||||
+ 888 Nixon Richard
|
||||
p
|
||||
<
|
||||
d
|
||||
|
||||
|
||||
# Test min when tree is empty
|
||||
c
|
||||
p
|
||||
<
|
||||
d
|
||||
|
||||
|
||||
# Test when max is a left child
|
||||
c
|
||||
+ 5678 Washington George
|
||||
+ 1234 Jefferson Thomas
|
||||
+ 1000 Madison James
|
||||
+ 555 Lincoln Abraham
|
||||
p
|
||||
>
|
||||
d
|
||||
|
||||
|
||||
# Test when max is root
|
||||
c
|
||||
+ 555 Lincoln Abraham
|
||||
+ 1000 Madison James
|
||||
+ 1234 Jefferson Thomas
|
||||
+ 5678 Washington George
|
||||
p
|
||||
>
|
||||
d
|
||||
|
||||
|
||||
# Test max when parent node that has two children
|
||||
c
|
||||
+ 1234 Jefferson Thomas
|
||||
+ 555 Lincoln Abraham
|
||||
+ 1000 Madison James
|
||||
p
|
||||
>
|
||||
+ 5678 Washington George
|
||||
+ 888 Nixon Richard
|
||||
p
|
||||
>
|
||||
d
|
||||
|
||||
|
||||
# Test when max has a right child
|
||||
c
|
||||
+ 1000 Madison James
|
||||
+ 1234 Jefferson Thomas
|
||||
p
|
||||
>
|
||||
+ 555 Lincoln Abraham
|
||||
+ 888 Nixon Richard
|
||||
p
|
||||
>
|
||||
d
|
||||
|
||||
|
||||
# Test when max is the only value
|
||||
c
|
||||
+ 888 Nixon Richard
|
||||
p
|
||||
>
|
||||
d
|
||||
|
||||
|
||||
# Test max when tree is empty
|
||||
c
|
||||
p
|
||||
>
|
||||
d
|
||||
|
||||
|
46
CPE212/Project_05/p05input6.txt
Normal file
46
CPE212/Project_05/p05input6.txt
Normal file
@ -0,0 +1,46 @@
|
||||
// p05input6.txt - Test TotalLevels()
|
||||
|
||||
# Test totallevels as tree grows level by level
|
||||
c
|
||||
+ 555 Lincoln Abraham
|
||||
p
|
||||
l
|
||||
+ 1000 Madison James
|
||||
p
|
||||
l
|
||||
+ 1234 Jefferson Thomas
|
||||
p
|
||||
l
|
||||
+ 5678 Washington George
|
||||
p
|
||||
l
|
||||
d
|
||||
|
||||
|
||||
# Test totallevels as with a more balance tree
|
||||
c
|
||||
+ 555 Lincoln Abraham
|
||||
+ 1000 Madison James
|
||||
+ 1234 Jefferson Thomas
|
||||
+ 5678 Washington George
|
||||
+ 888 Nixon Richard
|
||||
p
|
||||
l
|
||||
d
|
||||
|
||||
|
||||
# Test totallevels with single node tree
|
||||
c
|
||||
+ 888 Nixon Richard
|
||||
p
|
||||
l
|
||||
d
|
||||
|
||||
|
||||
# Test totallevels with empty tree
|
||||
c
|
||||
p
|
||||
l
|
||||
d
|
||||
|
||||
|
47
CPE212/Project_05/p05input7.txt
Normal file
47
CPE212/Project_05/p05input7.txt
Normal file
@ -0,0 +1,47 @@
|
||||
// p05input7.txt - Test Level()
|
||||
|
||||
# Test level as tree grows level by level
|
||||
c
|
||||
+ 555 Lincoln Abraham
|
||||
+ 1000 Madison James
|
||||
+ 1234 Jefferson Thomas
|
||||
+ 5678 Washington George
|
||||
p
|
||||
? 555
|
||||
? 1000
|
||||
? 1234
|
||||
? 5678
|
||||
d
|
||||
|
||||
|
||||
# Test level as with a more balance tree
|
||||
c
|
||||
+ 555 Lincoln Abraham
|
||||
+ 1000 Madison James
|
||||
+ 1234 Jefferson Thomas
|
||||
+ 5678 Washington George
|
||||
+ 888 Nixon Richard
|
||||
p
|
||||
? 555
|
||||
? 1000
|
||||
? 1234
|
||||
? 5678
|
||||
? 888
|
||||
d
|
||||
|
||||
|
||||
# Test level with single node tree
|
||||
c
|
||||
+ 888 Nixon Richard
|
||||
p
|
||||
? 888
|
||||
d
|
||||
|
||||
|
||||
# Test level with empty tree
|
||||
c
|
||||
p
|
||||
? 888
|
||||
d
|
||||
|
||||
|
BIN
CPE212/Project_05/project05
Normal file
BIN
CPE212/Project_05/project05
Normal file
Binary file not shown.
BIN
CPE212/Project_05/project05_materials.zip
Normal file
BIN
CPE212/Project_05/project05_materials.zip
Normal file
Binary file not shown.
66
CPE212/Project_05/student.cpp
Normal file
66
CPE212/Project_05/student.cpp
Normal file
@ -0,0 +1,66 @@
|
||||
//
|
||||
// student.cpp CPE 212 Fall 2010 -- Project05 - Binary Search Tree Template
|
||||
//
|
||||
// DO NOT MODIFY OR SUBMIT THIS FILE
|
||||
//
|
||||
|
||||
#include "student.h"
|
||||
|
||||
Student::Student()
|
||||
// Constructor initializes sid to -1, lastname and firstname to empty string
|
||||
{
|
||||
sid = -1;
|
||||
lastname = "";
|
||||
firstname = "";
|
||||
} // End Student::Student()
|
||||
|
||||
|
||||
Student::Student(int id, string lname, string fname)
|
||||
// Constructor initializes sid, lastname, firstname to id, lname, and fname respectively
|
||||
{
|
||||
sid = id;
|
||||
lastname = lname;
|
||||
firstname = fname;
|
||||
} // End Student::Student()
|
||||
|
||||
|
||||
Student::Student(const Student& s)
|
||||
// Copy constructor -- copies attributes of s into attribute variables of current object
|
||||
{
|
||||
sid = s.sid;
|
||||
lastname = s.lastname;
|
||||
firstname = s.firstname;
|
||||
}
|
||||
|
||||
|
||||
bool operator==(const Student& leftop, const Student& rightop)
|
||||
// Overloaded SAME AS operator
|
||||
// Returns true if leftop.sid == rightop.sid. Returns false otherwise
|
||||
{
|
||||
return (leftop.sid == rightop.sid);
|
||||
} // End operator== for Student class
|
||||
|
||||
|
||||
bool operator<(const Student& leftop, const Student& rightop)
|
||||
// Overloaded LESS THAN operator
|
||||
// Returns true if leftop.sid < rightop.sid. Returns false otherwise
|
||||
{
|
||||
return (leftop.sid < rightop.sid);
|
||||
} // End operator < for Student class
|
||||
|
||||
|
||||
bool operator>(const Student& leftop, const Student& rightop)
|
||||
// Overloaded GREATER THAN operator
|
||||
// Returns true if leftop.sid > rightop.sid. Returns false otherwise
|
||||
{
|
||||
return (leftop.sid > rightop.sid);
|
||||
} // End operator < for Student class
|
||||
|
||||
|
||||
void Student::operator=(const Student& op) // Overloaded ASSIGNMENT operator
|
||||
// Sets this->sid = op.sid, this->lastname = op.lastname, this->firstname = op.firstname
|
||||
{
|
||||
this->sid = op.sid;
|
||||
this->lastname = op.lastname;
|
||||
this->firstname = op.firstname;
|
||||
} // End Student::operator=()
|
83
CPE212/Project_05/student.h
Normal file
83
CPE212/Project_05/student.h
Normal file
@ -0,0 +1,83 @@
|
||||
//
|
||||
// student.h CPE 212 Fall 2010 -- Project05 - Binary Search Tree Template
|
||||
//
|
||||
// DO NOT MODIFIY OR SUBMIT THIS FILE
|
||||
//
|
||||
|
||||
#include <iostream>
|
||||
using namespace std;
|
||||
|
||||
#ifndef STUDENT_H
|
||||
#define STUDENT_H
|
||||
|
||||
class Student
|
||||
{
|
||||
private:
|
||||
int sid; // Student ID number
|
||||
string lastname; // Student last name
|
||||
string firstname; // Student first name
|
||||
|
||||
public:
|
||||
/**** Start of functions to implement ****/
|
||||
|
||||
Student();
|
||||
// Default constructor initializes sid to -1, firstname and lastname to empty string
|
||||
|
||||
Student(int id, string lname, string fname);
|
||||
// Constructor initializes sid, lastname, firstname to id, lname, and fname respectively
|
||||
|
||||
Student(const Student& s);
|
||||
// Copy constructor -- copies attributes of s into attribute variables of current object
|
||||
|
||||
friend bool operator==(const Student& leftop, const Student& rightop); // Overloaded SAME AS operator
|
||||
// Returns true if leftop.sid == rightop.sid. Returns false otherwise
|
||||
|
||||
friend bool operator<(const Student& leftop, const Student& rightop); // Overloaded LESS THAN operator
|
||||
// Returns true if leftop.sid < rightop.sid. Returns false otherwise
|
||||
|
||||
friend bool operator>(const Student& leftop, const Student& rightop); // Overloaded GREATER THAN operator
|
||||
// Returns true if leftop.sid > rightop.sid. Returns false otherwise
|
||||
|
||||
void operator=(const Student& op); // Overloaded ASSIGNMENT operator
|
||||
// Sets this->sid = op.sid, this->lastname = op.lastname, this->firstname = op.firstname
|
||||
|
||||
/***** End of functions to implement *****/
|
||||
|
||||
/***** Below are additional functions for your Student class -- DO NOT MOVE OR MODIFY THE CODE BELOW *****/
|
||||
|
||||
friend istream& operator>>(istream& leftop, Student& rightop) // Overloaded >> operator
|
||||
// This allows all data associated with a Student object to be input simultaneously from an input stream
|
||||
{
|
||||
leftop >> rightop.sid >> rightop.lastname >> rightop.firstname;
|
||||
|
||||
return leftop;
|
||||
}
|
||||
|
||||
friend ostream& operator<<(ostream& leftop, const Student& rightop) // Overloaded << operator
|
||||
// This allows all data associated with a Student object to be output simultaneously to an output stream
|
||||
{
|
||||
leftop << "(" << rightop.sid << ", " << rightop.firstname << " " << rightop.lastname << ")";
|
||||
|
||||
return leftop;
|
||||
}
|
||||
|
||||
void Print() const // Outputs student information in desired format. DO NOT MOVE OR MODIFY
|
||||
{
|
||||
cout << "SID: " << sid << " Name: ";
|
||||
|
||||
if (lastname == "")
|
||||
cout << "NULL";
|
||||
else
|
||||
cout << lastname;
|
||||
cout << ", ";
|
||||
|
||||
if (firstname == "")
|
||||
cout << "NULL";
|
||||
else
|
||||
cout << firstname;
|
||||
} // End Print()
|
||||
};
|
||||
|
||||
#endif
|
||||
|
||||
|
BIN
CPE212/Project_05/student.o
Normal file
BIN
CPE212/Project_05/student.o
Normal file
Binary file not shown.
164
CPE212/Project_06/graph.cpp
Normal file
164
CPE212/Project_06/graph.cpp
Normal file
@ -0,0 +1,164 @@
|
||||
#include "graph.h"
|
||||
|
||||
|
||||
// Graph
|
||||
Graph::Graph()
|
||||
// Constructor initializes vertices linked list to empty
|
||||
{
|
||||
vertices = NULL;
|
||||
}
|
||||
|
||||
//~Graph()
|
||||
Graph::~Graph()
|
||||
// For each VertexNode in the vertices list, Destructor deallocates all EdgeNodes before
|
||||
// deallocating the VertexNode itself
|
||||
{
|
||||
VertexNode* delV = vertices;
|
||||
EdgeNode* delE = delV->edgePtr;
|
||||
|
||||
|
||||
while (delV != NULL)
|
||||
{
|
||||
while (delE != NULL)
|
||||
{
|
||||
delE = NULL;
|
||||
delE = delE->nextPtr;
|
||||
}
|
||||
delV = NULL;
|
||||
delV = delV->nextVertex;
|
||||
}
|
||||
}
|
||||
|
||||
// Graph::AddVertex() - adds vertex name to vertices array; assumes space is available
|
||||
void Graph::AddVertex(string v)
|
||||
{
|
||||
VertexNode* newVert = new VertexNode; // creates memeory for newVert
|
||||
newVert->vname = v; // assigns the vertex name to v
|
||||
newVert->edgePtr = NULL; // sets edgePtr to NULL
|
||||
newVert->nextVertex = NULL; // Sets nextVertex to NULL
|
||||
}
|
||||
|
||||
// Graph::AddEdge() - adds edge from source to destination vertex with specified weight
|
||||
// assuming source and destination are already in vertices array
|
||||
void Graph::AddEdge(string s, string d, int w)
|
||||
{
|
||||
VertexNode* Vertex_S = WhereIs(s);
|
||||
VertexNode* Vertex_D = WhereIs(d);
|
||||
|
||||
// Initialize newEdge
|
||||
EdgeNode* newEdge = new EdgeNode;
|
||||
newEdge->destination = Vertex_D;
|
||||
newEdge->weight = w;
|
||||
newEdge->nextPtr = NULL;
|
||||
if (Vertex_S->edgePtr == NULL)
|
||||
{
|
||||
Vertex_S->edgePtr = newEdge;
|
||||
}
|
||||
else
|
||||
{
|
||||
// Go the the end of edgePtr and add the newEdge to it
|
||||
while (Vertex_S->edgePtr->nextPtr != NULL)
|
||||
{
|
||||
Vertex_S->edgePtr = Vertex_S->edgePtr->nextPtr;
|
||||
}
|
||||
Vertex_S->edgePtr->nextPtr = newEdge;
|
||||
}
|
||||
}
|
||||
|
||||
// Graph::IsPresent() - returns true if vertex in graph, false otherwise
|
||||
bool Graph::IsPresent(string v)
|
||||
{
|
||||
VertexNode* vertPresent = vertices;
|
||||
|
||||
//Traverse vertices
|
||||
while (vertPresent != NULL)
|
||||
{
|
||||
if (vertPresent->vname == v)
|
||||
return true; // found
|
||||
vertPresent = vertPresent->nextVertex; // advance through graph
|
||||
}
|
||||
|
||||
// not found
|
||||
return false;
|
||||
}
|
||||
|
||||
// WhereIs() - returns pointer to specified vertex, throws exception if vertex not present
|
||||
VertexNode* Graph::WhereIs(string v)
|
||||
{
|
||||
VertexNode* tempVertex = vertices;
|
||||
|
||||
|
||||
// If found
|
||||
while (tempVertex != NULL)
|
||||
{
|
||||
if (tempVertex->vname == v)
|
||||
return tempVertex; // Found
|
||||
tempVertex = tempVertex->nextVertex;
|
||||
}
|
||||
|
||||
// If not found
|
||||
throw GraphVertexNotFound();
|
||||
}
|
||||
|
||||
// Graph::WeightIs() -- returns edge weight if it exists; otherwise, throws GraphEdgeNotFound
|
||||
int Graph::WeightIs(string s, string d)
|
||||
{
|
||||
VertexNode* sourceV = WhereIs(s);
|
||||
VertexNode* destV = WhereIs(d);
|
||||
|
||||
// search through edge nodes
|
||||
while (sourceV->edgePtr != NULL)
|
||||
{
|
||||
if (sourceV->edgePtr->destination == destV)
|
||||
{
|
||||
return sourceV->edgePtr->weight;
|
||||
}
|
||||
sourceV->edgePtr = sourceV->edgePtr;
|
||||
}
|
||||
|
||||
throw GraphEdgeNotFound();
|
||||
}
|
||||
|
||||
void Graph::MarkVertex(string v)
|
||||
{
|
||||
// MarkVertex()
|
||||
// Marks vertex V as visited
|
||||
VertexNode* vistedV = WhereIs(v);
|
||||
vistedV->mark = true;
|
||||
}
|
||||
|
||||
// Graph::IsMarked() - returns mark status of vertex; assumes vertex is present
|
||||
bool Graph::IsMarked(string v)
|
||||
{
|
||||
VertexNode* markedV = WhereIs(v);
|
||||
return markedV->mark;
|
||||
}
|
||||
|
||||
// Graph::GetToVertices() - returns a queue q of vertices adjacent to vertex named s
|
||||
void Graph::GetToVertices(string s, queue<string>& q)
|
||||
{
|
||||
VertexNode* tempV = WhereIs(s);
|
||||
tempV = tempV->nextVertex;
|
||||
|
||||
while (tempV != NULL)
|
||||
{
|
||||
q.push(tempV->vname);
|
||||
tempV = tempV->nextVertex;
|
||||
}
|
||||
}
|
||||
|
||||
// DepthFirstSearch() - Finds path through graph from start vertex to destination vertex
|
||||
void Graph::DepthFirstSearch(string startVertex, string endVertex, queue<string>& path)
|
||||
{
|
||||
stack<string> s;
|
||||
queue<string> q;
|
||||
|
||||
if ( !( IsPresent(startVertex) && IsPresent(endVertex) ) )
|
||||
throw GraphVertexNotFound();
|
||||
|
||||
bool found = false;
|
||||
string vertex;
|
||||
string item;
|
||||
|
||||
// more here if required
|
||||
}
|
154
CPE212/Project_06/graph.h
Normal file
154
CPE212/Project_06/graph.h
Normal file
@ -0,0 +1,154 @@
|
||||
//
|
||||
// graph.h 2010 Fall CPE 212 - Project06 - Graphs and STL
|
||||
//
|
||||
// Specification file for Graph class
|
||||
//
|
||||
// DO NOT MODIFY OR SUBMIT THIS FILE
|
||||
//
|
||||
|
||||
#ifndef GRAPH_H
|
||||
|
||||
#define GRAPH_H
|
||||
|
||||
#include <cstddef>
|
||||
#include <new>
|
||||
#include <iostream>
|
||||
#include <iomanip>
|
||||
#include <stack> // For STL stack
|
||||
#include <queue> // For STL queue
|
||||
#include <string>
|
||||
using namespace std;
|
||||
|
||||
|
||||
class GraphPathNotFound { }; // Exception class represents path-not-found condition
|
||||
|
||||
class GraphEdgeNotFound { }; // Exception class represents edge-not-found condition
|
||||
|
||||
class GraphVertexNotFound { }; // Exception class represents vertex-not-found condition
|
||||
|
||||
class GraphFull { }; // Exception class represents graph-full condition
|
||||
|
||||
struct VertexNode; // Forward declaration of VertexNode type
|
||||
|
||||
struct EdgeNode // Structure representing an edge
|
||||
{
|
||||
VertexNode* destination; // Pointer to destination vertex
|
||||
int weight; // Edge weight
|
||||
EdgeNode* nextPtr; // Pointer to next edge
|
||||
};
|
||||
|
||||
struct VertexNode // Structure representing a vertex
|
||||
{
|
||||
string vname; // Name of vertex
|
||||
bool mark; // Marked flag
|
||||
EdgeNode* edgePtr; // Pointer to list of outgoing edges
|
||||
VertexNode* nextVertex; // Pointer to next vertex in vertices list
|
||||
};
|
||||
|
||||
|
||||
class Graph // Graph ADT using adjacency list representation
|
||||
{
|
||||
private: //***** Private class members below *****//
|
||||
VertexNode* vertices; // Linked list of vertex nodes
|
||||
|
||||
public: //***** Public members below *****//
|
||||
Graph();
|
||||
// Graph()
|
||||
// Constructor initializes vertices linked list to empty
|
||||
|
||||
~Graph();
|
||||
// ~Graph()
|
||||
// For each VertexNode in the vertices list, Destructor deallocates all EdgeNodes before
|
||||
// deallocating the VertexNode itself
|
||||
|
||||
void AddVertex(string v);
|
||||
// AddVertex()
|
||||
// Adds vertex to graph assuming vertex not already present
|
||||
|
||||
void AddEdge(string s, string d, int w);
|
||||
// AddEdge()
|
||||
// Adds edge from source S to destination D with specified weight W.
|
||||
// If there is not enough memory to add the edge, throw the GraphFull exception
|
||||
|
||||
bool IsPresent(string v);
|
||||
// IsPresent()
|
||||
// Returns true if vertex V in graph, false otherwise
|
||||
|
||||
VertexNode* WhereIs(string v); /* Note: This function replaces IndexIs */
|
||||
// WhereIs()
|
||||
// Returns pointer to the vertex node that stores vertex v in the vertices linked list;
|
||||
// Throws GraphVertexNotFound if V is not present in the vertices list
|
||||
|
||||
int WeightIs(string s, string d);
|
||||
// WeightIs()
|
||||
// Returns weight of edge (s,d). Throws GraphEdgeNotFound if edge not present.
|
||||
|
||||
void ClearMarks();
|
||||
// ClearMarks()
|
||||
// Clears all vertex marks
|
||||
|
||||
void MarkVertex(string v);
|
||||
// MarkVertex()
|
||||
// Marks vertex V as visited
|
||||
|
||||
bool IsMarked(string v);
|
||||
// IsMarked()
|
||||
// Returns true if vertex V is marked, false otherwise
|
||||
|
||||
void GetToVertices(string V, queue<string>& q);
|
||||
// GetToVertices()
|
||||
// Returns queue Q of vertex names of those vertices adjacent to vertex V
|
||||
// The queue here is from the Standard Template Library
|
||||
|
||||
void DepthFirstSearch(string startVertex, string endVertex, queue<string>& path);
|
||||
// DepthFirstSearch()
|
||||
// Uses the DFS algorithm from the CPE 212 textbook to determine a path from the
|
||||
// startVertex to the endVertex. If a path is found, the path vertices should
|
||||
// be in the path queue. If no path is found, the path queue should be emptied
|
||||
// as a signal to the client code that no path exists between the start and
|
||||
// end vertices.
|
||||
//
|
||||
// Notes:
|
||||
// (1) This algorithm is flawed in that as it searches for a path, it may
|
||||
// output some additional vertices that it visited but were not part
|
||||
// of the actual path. Implement the algorithm just as it appears in the textbook.
|
||||
//
|
||||
// (2) This algorithm requires use of the stack and queue containers from the
|
||||
// Standard Template Library. The STL stack and queue interfaces may require
|
||||
// minor modifications to the DFS code from the textbook.
|
||||
|
||||
|
||||
// Print -- write graph to stdout. DO NOT MODIFY THIS FUNCTION!!!
|
||||
void Print()
|
||||
{
|
||||
EdgeNode* eptr;
|
||||
VertexNode* vptr = vertices;
|
||||
const int FIELDWIDTH = 6;
|
||||
string STARS = "**********";
|
||||
STARS = STARS + STARS + STARS;
|
||||
|
||||
cout << endl << STARS << endl;
|
||||
|
||||
cout << setw(FIELDWIDTH) << "Vertex" << " : " << "Adjacent Vertices" << endl;
|
||||
cout << "------------------------------" << endl;
|
||||
|
||||
while(vptr != NULL)
|
||||
{
|
||||
cout << setw(FIELDWIDTH) << vptr->vname << " : ";
|
||||
|
||||
eptr = vptr->edgePtr;
|
||||
while (eptr != NULL)
|
||||
{
|
||||
cout << eptr->destination->vname << eptr->weight << " ";
|
||||
eptr = eptr->nextPtr;
|
||||
}
|
||||
cout << endl;
|
||||
vptr = vptr->nextVertex;
|
||||
}
|
||||
cout << STARS << endl << endl;
|
||||
} // Graph::Print()
|
||||
};
|
||||
|
||||
#endif
|
||||
|
||||
|
BIN
CPE212/Project_06/graph.o
Normal file
BIN
CPE212/Project_06/graph.o
Normal file
Binary file not shown.
165
CPE212/Project_06/main.cpp
Normal file
165
CPE212/Project_06/main.cpp
Normal file
@ -0,0 +1,165 @@
|
||||
//
|
||||
// main.cpp 2010 Fall CPE 212 - Project06 - Graphs and STL
|
||||
//
|
||||
// Driver program for Graph class -- The text files (read by this code) contain a series
|
||||
// of commands that will help you test your Graph ADT code by triggering various class methods.
|
||||
//
|
||||
// DO NOT MODIFY OR SUBMIT THIS FILE
|
||||
//
|
||||
#include <iostream>
|
||||
#include <fstream>
|
||||
#include "graph.h"
|
||||
#include <stack> // For STL stack class
|
||||
#include <queue> // For STL queue class
|
||||
|
||||
using namespace std;
|
||||
|
||||
int main(int argc, char* argv[])
|
||||
{
|
||||
ifstream inputs; // Input file for commands
|
||||
char op, ch; // Hold operation and optional char input
|
||||
Graph* gPtr = NULL; // Will point to Graph object
|
||||
int num; // Holds number of graph nodes
|
||||
string v1, v2; // Vertex names input from file
|
||||
int w; // Edge weight input from file
|
||||
queue<string> path; // Computed path
|
||||
string comment; // Comment input from file
|
||||
|
||||
// Output usage message if one input file name is not provided
|
||||
if (argc != 2)
|
||||
{
|
||||
cout << "Usage:\n project07 <inputfile>\n";
|
||||
return 1;
|
||||
}
|
||||
|
||||
// Attempt to open input file -- terminate if file does not open
|
||||
inputs.open(argv[1]);
|
||||
if (!inputs)
|
||||
{
|
||||
cout << "Error - unable to open input file" << endl;
|
||||
return 1;
|
||||
}
|
||||
|
||||
cout << endl;
|
||||
|
||||
// Process commands from input file
|
||||
getline(inputs, comment);
|
||||
cout << comment << endl;
|
||||
|
||||
inputs >> op; // Attempt to input number of vertices
|
||||
while (inputs)
|
||||
{
|
||||
switch (op)
|
||||
{
|
||||
case '#': // Comment
|
||||
getline(inputs, comment);
|
||||
cout << comment << endl;
|
||||
break;
|
||||
|
||||
case 'c': // Add vertex
|
||||
cout << "Constructor()" << endl;
|
||||
gPtr = new Graph();
|
||||
break;
|
||||
|
||||
case 'v': // Add vertex
|
||||
inputs >> v1;
|
||||
cout << "AddVertex(" << v1 << ")" << endl;
|
||||
gPtr->AddVertex(v1);
|
||||
break;
|
||||
|
||||
case 'd': // Add directed edge
|
||||
inputs >> v1 >> v2 >> w;
|
||||
cout << "AddEdge(" << v1 << ", " << v2 << ", " << w << ")" << endl;
|
||||
gPtr->AddEdge(v1, v2, w);
|
||||
break;
|
||||
|
||||
case 'u': // Add undirected edge
|
||||
inputs >> v1 >> v2 >> w;
|
||||
cout << "AddEdge(" << v1 << ", " << v2 << ", " << w << ")" << endl;
|
||||
gPtr->AddEdge(v1, v2, w);
|
||||
cout << "AddEdge(" << v2 << ", " << v1 << ", " << w << ")" << endl;
|
||||
gPtr->AddEdge(v2, v1, w);
|
||||
break;
|
||||
|
||||
case '?': // IsPresent()
|
||||
inputs >> v1;
|
||||
if (gPtr->IsPresent(v1))
|
||||
cout << "IsPresent(" << v1 << ") -- true" << endl;
|
||||
else
|
||||
cout << "IsPresent(" << v1 << ") -- false" << endl;
|
||||
break;
|
||||
|
||||
case 'w': // WeightIs()
|
||||
inputs >> v1 >> v2;
|
||||
try
|
||||
{
|
||||
cout << "WeightIs(" << v1 << ", " << v2 << ") -- ";
|
||||
w = gPtr->WeightIs(v1, v2);
|
||||
cout << w << endl;
|
||||
}
|
||||
catch ( GraphVertexNotFound )
|
||||
{
|
||||
cout << "Error: vertex not found" << endl;
|
||||
}
|
||||
catch ( GraphEdgeNotFound )
|
||||
{
|
||||
cout << "Error: edge not found" << endl;
|
||||
}
|
||||
break;
|
||||
|
||||
case 's': // Perform Depth-First Search
|
||||
inputs >> v1 >> v2; // Input v1-start and v2-end vertices
|
||||
|
||||
cout << "DFS( " << v1 << ", " << v2 << " ) -- ";
|
||||
try
|
||||
{
|
||||
gPtr->DepthFirstSearch(v1, v2, path);
|
||||
|
||||
|
||||
if (path.empty())
|
||||
cout << "No path found" << endl;
|
||||
else
|
||||
{
|
||||
cout << " { ";
|
||||
while (!path.empty())
|
||||
{
|
||||
cout << path.front() << " ";
|
||||
path.pop();
|
||||
}
|
||||
cout << "}" << endl;
|
||||
}
|
||||
}
|
||||
catch ( GraphVertexNotFound )
|
||||
{
|
||||
cout << "Error: vertex not found" << endl;
|
||||
}
|
||||
|
||||
while (!path.empty())
|
||||
path.pop();
|
||||
|
||||
break;
|
||||
|
||||
case 'p': // Print Graph
|
||||
gPtr->Print();
|
||||
break;
|
||||
|
||||
case '~': // Destructor
|
||||
delete gPtr;
|
||||
gPtr = NULL;
|
||||
cout << "Destructor()" << endl << endl;
|
||||
break;
|
||||
|
||||
default: // Error
|
||||
cout << "Error - unrecognized operation '" << op << "'" << endl;
|
||||
cout << "Terminating now..." << endl;
|
||||
return 1;
|
||||
break;
|
||||
}
|
||||
|
||||
inputs >> op; // Attempt to input next command
|
||||
}
|
||||
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
BIN
CPE212/Project_06/main.o
Normal file
BIN
CPE212/Project_06/main.o
Normal file
Binary file not shown.
15
CPE212/Project_06/makefile
Normal file
15
CPE212/Project_06/makefile
Normal file
@ -0,0 +1,15 @@
|
||||
# Project06 makefile
|
||||
|
||||
|
||||
project06: graph.o main.o
|
||||
g++ graph.o main.o -o project06
|
||||
|
||||
graph.o: graph.h graph.cpp
|
||||
g++ -c graph.cpp
|
||||
|
||||
main.o: graph.h main.cpp
|
||||
g++ -c main.cpp
|
||||
|
||||
clean:
|
||||
rm *.o project06
|
||||
|
41
CPE212/Project_06/p06input1.txt
Normal file
41
CPE212/Project_06/p06input1.txt
Normal file
@ -0,0 +1,41 @@
|
||||
# p06input1.txt - Test Graph(), ~Graph(), AddVertex(), AddEdge() with undirected graph
|
||||
|
||||
c
|
||||
v A
|
||||
v B
|
||||
v C
|
||||
v D
|
||||
u A B 5
|
||||
u A C 10
|
||||
u B C 15
|
||||
u B D 25
|
||||
u C D 20
|
||||
p
|
||||
~
|
||||
|
||||
|
||||
c
|
||||
v A
|
||||
v B
|
||||
v C
|
||||
v D
|
||||
v E
|
||||
v F
|
||||
v G
|
||||
v H
|
||||
u A B 25
|
||||
u A C 10
|
||||
u A E 60
|
||||
u B G 75
|
||||
u B H 15
|
||||
u C E 15
|
||||
u D F 25
|
||||
u D H 80
|
||||
u E G 35
|
||||
u E F 5
|
||||
u F H 40
|
||||
p
|
||||
~
|
||||
|
||||
|
||||
|
40
CPE212/Project_06/p06input2.txt
Normal file
40
CPE212/Project_06/p06input2.txt
Normal file
@ -0,0 +1,40 @@
|
||||
# p06input2.txt - Test Graph(), ~Graph(), AddVertex(), AddEdge() with directed graph
|
||||
c
|
||||
v A
|
||||
v B
|
||||
v C
|
||||
v D
|
||||
d A B 5
|
||||
d A C 10
|
||||
d B C 15
|
||||
d B D 25
|
||||
d C D 20
|
||||
p
|
||||
~
|
||||
|
||||
|
||||
c
|
||||
v A
|
||||
v B
|
||||
v C
|
||||
v D
|
||||
v E
|
||||
v F
|
||||
v G
|
||||
v H
|
||||
d A B 25
|
||||
d A C 10
|
||||
d A E 60
|
||||
d B G 75
|
||||
d B H 15
|
||||
d C E 15
|
||||
d D F 25
|
||||
d D H 80
|
||||
d E G 35
|
||||
d E F 5
|
||||
d F H 40
|
||||
p
|
||||
~
|
||||
|
||||
|
||||
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue
Block a user