Need C++ coding for this lab exercise given below
:)
4. Lab Exercise — Templates
Exercise 1 - Function Templating
For this part of the lab make a template out of
the myMax function and test it on different data
types.
Copy maxTemplate.cpp to
your Hercules account space. Do that by:
Entering the command:cp
/net/data/ftp/pub/class/115/ftp/cpp/Templates/maxTemplate.cpp
maxTemplate.cpp
Compile and run the program to see how it
works.
Make a template out of myMax. Don't forget
the return type.
Modify the prototype appropriately.
Test your myMax template on int, double, and
string types.
When you are done your output should resemble this:The max of 3 and
5 is 5 The max of 5.6 and 7.3 is 7.3 The max of donkey and apple is
donkey
Exercise 2 - Class Templating
For this part of the lab you will make a template out of
the Matrix class, test it on different data types, and
add a generic sort member function.
Transfer matrix.cpp, matrix.h, tempMain.cpp,
andMakefile your
lab directory. Do that by changing into your directory
and:
Entering these commands:cp
/net/data/ftp/pub/class/115/ftp/cpp/Templates/matrix.cpp
matrix.cpp cp
/net/data/ftp/pub/class/115/ftp/cpp/Templates/matrix.h matrix.h
cp /net/data/ftp/pub/class/115/ftp/cpp/Templates/tempMain.cpp
tempMain.cpp cp
/net/data/ftp/pub/class/115/ftp/cpp/Templates/Makefile
Makefile
Part 1: Setup
Add the template
types to matrix.cpp
Template the definition of the Matrix class
in matrix.h.
Template the member functions
in matrix.cpp.
Hint: You may find Emacs query-replace M-%, cut
line C-a C-k C-k and
paste C-y helpful.
The Makefile is set up for you. Use it to compile and
run the program to make sure everything is working.
Part 2: Extend
Add two more 2D arrays to tempMain.cpp that
hold a new data type.
Create an instances of Matrix that can hold
that data type and use the
templated demoTemplate function to show that your
templated class works.
Test your changes.
Your completed exercise should resemble
this:
Demonstrating with string matrix: Matrix set to first
array Congra y ar alm don La Matrix incremented by second array
Congratulations you are almost done the Lab! Demonstrating with int
matrix: Matrix set to first array 1 2 3 4 5 6 Matrix incremented by
second array 7 7 7 7 7 7 Demonstrating with float matrix: Matrix
set to first array 1.6 2.5 3.4 4.3 5.2 6.1 Matrix incremented by
second array 7.7 7.7 7.7 7.7 7.7 7.7
maxTemplate.cpp
/****************************************************
* * FileName: /net/data/ftp/pub/class/170/ftp/cpp/maxTemplate.cpp *
Purpose: Demonstrate the use of function templates *
********************************************************/ #include
<iostream> #include <string>
using namespace std;
//Make a template out of the prototype int myMax(int one, int
two);
int main() {
int i_one = 3, i_two = 5;
cout << "The max of " << i_one << " and "
<< i_two << " is " << myMax(i_one, i_two)
<< endl; //Test your template on float and string types
return 0;
}
//Make a template out of this function. Don't forget the return
type. int myMax(int one, int two) { int biggest; if (one < two)
{ biggest = two; } else { biggest = one; } return biggest;
}
matrix.cpp
#include "matrix.h"
#include <iostream>
using namespace std;
Matrix::Matrix() {
rows = MAXROWS; cols = MAXCOLS;
for (int i=0; i< rows; i++) {
for(int j=0; j< cols; j++) {
doubleArray[i][j] = '\0'; } } } void Matrix::printMatrix()
{
for (int i=0; i< rows; i++)
{ for(int j=0; j< cols; j++) {
cout << doubleArray[i][j] << " "; }
cout << endl;
}
}
void Matrix::setMatrix(int otherArray[][MAXCOLS]) {
for (int i=0; i< rows; i++)
{ for(int j=0; j< cols; j++) {
doubleArray[i][j] = otherArray[i][j];
}
}
}
void Matrix::addMatrix(int otherArray[][MAXCOLS])
{
for (int i=0; i< rows; i++)
{
for(int j=0; j< cols; j++)
{
doubleArray[i][j] += otherArray[i][j];
}
}
} void Matrix::addMatrix(Matrix otherMatrix) {
addMatrix(otherMatrix.doubleArray);
}
matrix.h
const int MAXROWS=2;
const int MAXCOLS=3;
class Matrix
{
private: int doubleArray[MAXROWS][MAXCOLS];
int rows;
int cols;
public: //Constructor Matrix();
//Set rows to MAXROWS and cols to MAXCOLS
//Initialize all the values of doubleArray to zero
//Getter Functions void printMatrix();
//Setter Functions void setMatrix(int [][MAXCOLS]);
//set the doubleArray to what is sent void addMatrix(int
[][MAXCOLS]);
//add an array to doubleArray void addMatrix(Matrix
otherMatrix);
//No destructor needed
};
tempMain.cpp
#include <iostream>
#include <string>
#include "matrix.h"
using namespace std;
template <typename T1> void
demoTemplate(Matrix<T1>& M, T1 array1[][MAXCOLS], T1
array2[][MAXCOLS]);
int main()
{
string str1[MAXROWS][MAXCOLS] = { {"Congra", "y", "ar"}, {"alm",
"don", "La"} }; string str2[MAXROWS][MAXCOLS] = { {"tulations",
"ou", "e"}, {"ost", "e the", "b!"} }; int num1[MAXROWS][MAXCOLS] =
{ {1,2,3}, {4,5,6} };
int num2[MAXROWS][MAXCOLS] = { {6,5,4}, {3,2,1} };
Matrix<string> stringMatrix;
Matrix<int> intMatrix;
cout << "\nDemonstrating with string matrix:" << endl;
demoTemplate(stringMatrix, str1, str2); cout <<
"\nDemonstrating with int matrix:" << endl;
demoTemplate(intMatrix, num1, num2); cout << "\n" <<
endl;
return 0;
}
template <typename T1> void
demoTemplate(Matrix<T1>& M, T1 array1[][MAXCOLS], T1
array2[][MAXCOLS]) { M.setMatrix(array1);
cout << "\nMatrix set to first array" << endl;
M.printMatrix();
M.addMatrix(array2);
cout << "\nMatrix incremented by second array" <<
endl;
M.printMatrix();
}
Makefile
COMPILER = g++ # or CC if you prefer it on
Hercules
DRIVER = tempMain
FILE = matrix
$(DRIVER) : $(FILE).o $(DRIVER).o #the first character on the next
line is a tab
$(COMPILER) -o $(DRIVER) $(FILE).o
$(DRIVER).o
$(DRIVER).o : $(DRIVER).cpp $(FILE).cpp $(FILE).h
$(COMPILER) -c $(DRIVER).cpp -o
$(DRIVER).o
$(FILE).o : $(FILE).cpp $(FILE).h $(COMPILER) -c $(FILE).cpp
-o
$(FILE).o
clean: @ /bin/rm -f *.o
template types
Overview:
If you try to define templates in multiple files, it
is likely that you will come across a linker error in Visual C++.
The error might be something like the following:error LNK2019:
unresolved external symbol "public: __thiscall my_class
::my_class(int,int)" (??0?$my_class@H@@QAE@HH@Z)
To get rid of this error, you need to add the
following at the end of .cpp file, so at the end of the
swapper.cpp, add the following:template class my_class <int>;
template class my_class <char>; template class my_class
<double>;
Complete comments which are needed in the lab exercise for the correct output.
Code Implemented in C++
Note: Comments are written for code explanation
Filename: maxTemplate.cpp
/****************************************************
*
* FileName:
/net/data/ftp/pub/class/170/ftp/cpp/maxTemplate.cpp
* Purpose: Demonstrate the use of function templates
*
********************************************************/
#include <iostream>
#include <string>
using namespace std;
template <class T>//Make a template out of the
prototype
T myMax(T one, T two);
int main()
{
int i_one = 3, i_two = 5;
double d_one = 5.6, d_two = 7.3;
string s_one = "donkey", s_two = "apple";
cout << "The max of " << i_one << " and "
<< i_two << " is "
<< myMax(i_one, i_two) << endl;
//Test your template on float and string types
cout << "The max of " << d_one << " and "
<< d_two << " is "
<< myMax(d_one, d_two) << endl;
cout << "The max of " << s_one << " and "
<< s_two << " is "
<< myMax(s_one, s_two) << endl;
return 0;
}
template <class T>//Make a template out of this function.
Don't forget the return type.
T myMax(T one, T two)
{
T bigger;
if (one < two)
{
bigger = two;
}
else
{
bigger = one;
}
return bigger;
}
Filename: matrix.cpp
#ifndef __MATRIX_CPP__
#define __MATRIX_CPP__
#include "matrix.h"
#include <iostream>
using namespace std;
template <class M_type>
Matrix<M_type>::Matrix()
{
rows = MAXROWS;
cols = MAXCOLS;
for (int i=0; i< rows; i++)
{
for(int j=0; j< cols; j++)
{
doubleArray[i][j] = '\0';
}
}
}
template <class M_type>
void Matrix<M_type>::printMatrix()
{
for (int i=0; i< rows; i++)
{
for(int j=0; j< cols; j++)
{
cout << doubleArray[i][j] << " ";
}
cout << endl;
}
}
template <class M_type>
void Matrix<M_type>::setMatrix(M_type
otherArray[][MAXCOLS])
{
for (int i=0; i< rows; i++)
{
for(int j=0; j< cols; j++)
{
doubleArray[i][j] = otherArray[i][j];
}
}
}
template <class M_type>
void Matrix<M_type>::addMatrix(M_type
otherArray[][MAXCOLS])
{
for (int i=0; i< rows; i++)
{
for(int j=0; j< cols; j++)
{
doubleArray[i][j] += otherArray[i][j];
}
}
}
template <class M_type>
void Matrix<M_type>::addMatrix(Matrix otherMatrix)
{
addMatrix(otherMatrix.doubleArray);
}
#endif
Filename: matrix.h
#ifndef __MATRIX_H__
#define __MATRIX_H__
const int MAXROWS=2;
const int MAXCOLS=3;
template <class M_type>
class Matrix
{
private:
M_type doubleArray[MAXROWS][MAXCOLS];
int rows;
int cols;
public:
//Constructor
Matrix(); //Set rows to MAXROWS and cols to MAXCOLS
//Initialize all the values of doubleArray to
zero
//Getter Functions
void printMatrix();
//Setter Functions
void setMatrix(M_type [][MAXCOLS]); //set the doubleArray to what
is sent
void addMatrix(M_type [][MAXCOLS]); //add an array to
doubleArray
void addMatrix(Matrix otherMatrix);
//No destructor needed
};
#endif
#include "matrix.cpp"
Filename: tempMain.cpp
#include <iostream>
#include <string>
#include "matrix.h"
using namespace std;
template <class T1>
void demoTemplate(Matrix<T1>& M, T1 array1[][MAXCOLS], T1
array2[][MAXCOLS]);
int main()
{
string Str1[MAXROWS][MAXCOLS] =
{
{"Congra", "y", "ar"},
{"alm", "don", "La"}
};
string Str2[MAXROWS][MAXCOLS] =
{
{"tulations", "ou", "e"},
{"ost", "e the", "b!"}
};
int Num1[MAXROWS][MAXCOLS] =
{
{1,2,3},
{4,5,6}
};
int Num2[MAXROWS][MAXCOLS] =
{
{6,5,4},
{3,2,1}
};
double d1[MAXROWS][MAXCOLS] =
{
{1.5, 2.5, 3.4},
{4.3, 5.2, 6.1}
};
double d2[MAXROWS][MAXCOLS] =
{
{6.2, 5.2, 4.3},
{3.4, 2.5, 1.6}
};
Matrix<string> stringMatrix;
Matrix<int> intMatrix;
Matrix<double> doubleMatrix;
cout << "\nDemonstrating with string matrix:" <<
endl;
demoTemplate(stringMatrix, Str1, Str2);
cout << "\nDemonstrating with int matrix:" <<
endl;
demoTemplate(intMatrix, Num1, Num2);
cout << "\nDemonstrating with float matrix:" <<
endl;
demoTemplate(doubleMatrix, d1, d2);
cout << "\n" << endl;
return 0;
}
template <class T1>
void demoTemplate(Matrix<T1>& M, T1 array1[][MAXCOLS], T1
array2[][MAXCOLS])
{
M.setMatrix(array1);
cout << "\nMatrix set to first array" << endl;
M.printMatrix();
M.addMatrix(array2);
cout << "\nMatrix incremented by second array" <<
endl;
M.printMatrix();
}
Filename: Makefile
COMPILER = g++ # or CC if you prefer it on Hercules
DRIVER = tempMain
FILE = matrix
$(DRIVER) : $(FILE).o $(DRIVER).o #the first character on the
next line is a tab
$(COMPILER) -o $(DRIVER) $(FILE).o $(DRIVER).o
$(DRIVER).o : $(DRIVER).cpp $(FILE).cpp $(FILE).h
$(COMPILER) -c $(DRIVER).cpp -o $(DRIVER).o
$(FILE).o : $(FILE).cpp $(FILE).h
$(COMPILER) -c $(FILE).cpp -o $(FILE).o
clean:
@ /bin/rm -f *.o
Working code output screenshot:
If you like my answer, hit thumbs up. Thank you.
Need C++ coding for this lab exercise given below :) 4. Lab Exercise — Templates Exercise...
I need help modifying this program. How would I make sure that the methods is being called and checked in my main method? Here is what the program needs to run as: GDVEGTA GVCEKST The LCS has length 4 The LCS is GVET This is the error that I'm getting: The LCS has length 4 // I got this right The LCS is //the backtrace is not being called for some reason c++ code: the cpp class: /** * calculate...
Program is in C++, program is called airplane reservation. It is suppose to display a screen of seating chart in the format 1 A B C D E F through 10. I had a hard time giving the seats a letter value. It displays a correct screen but when I reserve a new seat the string seats[][] doesn't update to having a X for that seat. Also there is a file for the struct called systemUser.txt it has 4 users...
Submissions) Part A Type and run the Array class template discussed in lecture (Templates notes). Modify the class by adding sort member function (refer to Algorithm Analysis notes for sorting algorithms) Sample usage: a. sort(); Add the needed code in main to test your function. template <class T> 1/you can use keyword typename instead of class class Array { private: T *ptr; int size; public: Array(T arr[], int s); void print(); template <class T> Array<T>:: Array (T arr[], int s)...
Given a matrix, clockwise-rotate elements in it. Please add code to problem3.cpp and the makefile. I have also given the main_problem3.cpp and problem3.h to test. problem3.cpp::: #include "problem3.h" // A function to rotate a matrix mat[][MAX] void rotatematrix(int m, int n, int mat[][MAX]) { // your code here } Makefile::: all : problem3.o g++ -o mainp3 # your code here problem3.o : problem3.h problem3.cpp # your code here clean: rm -f *.o mainp3 main_problem3.cpp::: #include <iostream>...
Directions: Develop a C++ program that can solve any matrix, up to 15 equations with 15 unknowns. Put the result on the screen as well as write the results to a text file This is what we were given as a hint: /* how to read matrix data file in rows and colloms written by tom tucker 03/26/2018 it uses a string array to read in the first line and then a nested for statement to read in the matrix...
C++ how can I fix these errors this is my code main.cpp #include "SpecialArray.h" #include <iostream> #include <fstream> #include <string> using namespace std; int measureElementsPerLine(ifstream& inFile) { // Add your code here. string line; getline(inFile, line); int sp = 0; for (int i = 0; i < line.size(); i++) { if (line[i] == ' ') sp++; } sp++; return sp; } int measureLines(ifstream& inFile) { // Add your code here. string line; int n = 0; while (!inFile.eof()) { getline(inFile,...
Study the c++ code below and answer the question on templates after // A polymorphic swap function for any type of object (an example) template<typename T> void MySwap( T& x, T& y) { T temp; temp = x; x = y; y = temp; } // A polymorphic class holding an [x,y] position of any type template<class T> class Position { public: Position(T x=0, T y=0) : x_(x), y_(y) {} friend std::ostream& operator<<(std::ostream& os, const Position& p) { return os...
please Code in c++ Create a new Library class. You will need both a header file and a source file for this class. The class will contain two data members: an array of Book objects the current number of books in the array Since the book array is moving from the main.cc file, you will also move the constant array size definition (MAX_ARR_SIZE) into the Library header file. Write the following functions for the Library class: a constructor that initializes...
How do I compile c++ code in terminal. Below i have some code to apply Gaussian Filter on an image using OpenCV. I have tried compling using the code g++ Project2.cpp -o Project2 `pkg-config --cflags --libs opencv` && ./Project2 and it gives me a whole list of errors saying directory not found. --------------------------------------------------------------------------------------------------------- #include "opencv2/highgui/highgui.hpp" #include "opencv2/imgproc/imgproc.hpp" #include <opencv2/core/core.hpp> #include <iostream> using namespace cv; using namespace std; int main() { Mat image = imread("//u//oowens//First.jpg"); int rows=image.rows; int cols=image.cols; if (image.empty())...