Implement a class Sequence to store a sequence of non-negative integer values, and the length of the sequence. The class has the following private data members:
1. int length
2. int *pseq
The class shall provide the following public methods:
1. Sequence() – default constructor
2. Sequence(int lengthVal, int n1=0,int n2=0,int n3=0, int n4=0, int n5=0, int n6=0, int n7=0, int n8=0, int n9=0, int n10=0) – parameterized constructor should initialize the
length and array to sequence values passed in the arguments.
3. Sequence(Sequence &s)
4. int getLength()
5. int* getSeq()
6. void Sort(int n)
7. int RemoveDuplicates()
Return n after placing the final result in the first k elements of the array.
8. void Rotate(int steps) – a method that rotates the sequence elements clockwise for the
given steps
9. ~Sequence()
#include <iostream>
#include <cstdlib>
using namespace std;
class Sequence {
private:
int length;
int *pseq;
public:
Sequence();
Sequence(int lengthVal, int n1=0,int n2=0,int n3=0, int n4=0, int n5=0, int n6=0, int n7=0,
int n8=0, int n9=0, int n10=0);
Sequence(Sequence &s);
~Sequence();
int getLength() { return length; }
int* getSeq() {return pseq; }
void Sort(int n);
int RemoveDuplicates();
void Rotate(int steps);
};
Sequence::Sequence()
{
length = 10;
pseq = new int[length];
for (int i=0; i<length; i++) {
pseq[i] = 0;
}
}
Sequence::Sequence(int lengthVal, int n1,int n2,int n3, int n4, int n5, int n6, int n7,
int n8, int n9, int n10)
{
length = lengthVal;
if (length < 0) {
cerr << "Error: length is negative" << endl;
exit(1);
}
pseq = new int[length];
for (int i=0; i<length; i++) {
pseq[i] = 0;
}
if (length > 0)
pseq[0] = n1;
if (length > 1)
pseq[1] = n2;
if (length > 2)
pseq[2] = n3;
if (length > 3)
pseq[3] = n4;
if (length > 4)
pseq[4] = n5;
if (length > 5)
pseq[5] = n6;
if (length > 6)
pseq[6] = n6;
if (length > 6)
pseq[6] = n7;
if (length > 7)
pseq[7] = n8;
if (length > 8)
pseq[8] = n9;
if (length > 9)
pseq[9] = n10;
}
Sequence::Sequence(Sequence &s)
{
length = s.length;
pseq = new int[length];
for (int i=0; i<length; i++) {
pseq[i] = s.pseq[i];
}
}
Sequence::~Sequence() {
delete [] pseq;
}
void Sequence::Sort(int n) {
int i_min;
for (int i=0; i<n-1; i++) {
i_min = i;
for (int j=i+1; j<n; j++) {
if (pseq[j] < pseq[i_min]) {
i_min = j;
}
}
if (i_min != i) {
int tmp = pseq[i];
pseq[i] = pseq[i_min];
pseq[i_min] = tmp;
}
}
}
int Sequence::RemoveDuplicates()
{
Sort(length);
int j = 0;
for (int i=1; i<length; i++) {
if (pseq[i-1] != pseq[i]) {
j++;
if (i != j) {
int tmp = pseq[j];
pseq[j] = pseq[i];
pseq[i] = tmp;
}
}
}
return j;
}
void Sequence::Rotate(int steps) {
int *tmp = new int[steps];
for (int i=0; i<steps; i++) {
tmp[steps-1-i] = pseq[length-1-i];
}
for (int i=length-1; i>=steps; i--) {
pseq[i] = pseq[i-steps];
}
for (int i=0; i<steps; i++) {
pseq[i] = tmp[i];
}
delete [] tmp;
}
void print(const char* msg, Sequence& s) {
int *p = s.getSeq();
cout << msg;
for (int i=0; i<s.getLength(); i++) {
cout << p[i] << " ";
}
cout << endl;
}
int main() {
int n1=10, n2=4, n3=8, n4=3, n5=12;
Sequence s(8, n1, n2, n3, n4, n5);
print("Initial sequence: ", s);
s.Sort(6);
print("After Sort(6): ", s);
int n = s.RemoveDuplicates();
cout << "RemoveDuplicates() = " << n << endl;
print("RemoveDuplicates(): ", s);
s.Rotate(3);
print("After Rotate(3): ", s);
return 0;
}
Comments
Leave a comment