CSE 1002 PPS4
11-Mar-2017 00:00
Total time : 600 mins
Challenges : 5
Question 1
The area is the two-dimensional amount of space that an object occupies. Area is measured along the surface of an object and has dimensions of length squared; for example, square feet of material, or centimetres squared.
The area of a rectangle is equal to the height h times the base b; A = h * b
The equation for the area of a trapezoid is one half the sum of the top t and bottom b times the height h; A = h * [ t + b ] / 2
The area of a circle is A = pi * r2, where pi = 3.14 and r = radius.
Develop a program in C++ using function overloading for computing the area of a rectangle, a trapezoid and a circle by a common function name ComputeArea() with different signature. Assume pi = 3.14. Print only two decimal places for all areas.
Note:
To print only two decimal places of a variable ‘a’, do the following:
#include
cout<<fixed<<setprecision(2)<<a;
The area of a rectangle is equal to the height h times the base b; A = h * b
The equation for the area of a trapezoid is one half the sum of the top t and bottom b times the height h; A = h * [ t + b ] / 2
The area of a circle is A = pi * r2, where pi = 3.14 and r = radius.
Develop a program in C++ using function overloading for computing the area of a rectangle, a trapezoid and a circle by a common function name ComputeArea() with different signature. Assume pi = 3.14. Print only two decimal places for all areas.
Note:
To print only two decimal places of a variable ‘a’, do the following:
#include
cout<<fixed<<setprecision(2)<<a;
Input Format:
Read the base and height of a rectangle.
Read the top, bottom and height of a trapezoid.
Read the radius of a circle.
Read the base and height of a rectangle.
Read the top, bottom and height of a trapezoid.
Read the radius of a circle.
Output Format:
Display the area of a rectangle, trapezoid and circle each in one line
Boundary Conditions:
You can give any valid integer or float values for inputs.
Display the area of a rectangle, trapezoid and circle each in one line
Boundary Conditions:
You can give any valid integer or float values for inputs.
Solution
#include < iostream > #include < iomanip > using namespace std; float area(int l,int b) { return(l*b); } float area(int t,int b,int h) { return(h*(t+b)/2); } float area(int r) { return(3.14*r*r); }
int main()
{
float len,bre,top,bottom,height,radius;
double a;
cin>>len>>bre;
a = area(len,bre);
cout<<fixed<<setprecision(2)<<a<<endl; cin>>top>>bottom>>height;
a = area(top,bottom,height);
cout<<fixed<<setprecision(2)<<a<<endl; cin>>radius;
a = area(radius);
cout<<fixed<<setprecision(2)<<a<<endl;
}
Input
INPUT : area function overloaded with various inputs
Output
OUTPUT : cout<<setprecision(2)<<area(#inputs);
Processing
float area(int l,int b) { return(l*b); } float area(int t,int b,int h) { return(h*(t+b)/2); } float area(int r) { return(3.14*r*r); }
Pseudocode
BEGIN Read inputs float area(int l,int b); float area(int t,int b,int h); float area(int r); Output END
Question 2
Generate boarding pass for the passengers of a ship which starts from Chennai to Andaman. The boarding pass must be generated automatically with a pass number that begins with “CA” and followed by a number that is automatically incremented from value ‘x’, details like passenger name, age, mobile number, address, date of journey and fare. There is a seasonal discount based on the age of the passengers. Write a non member function called discount which calculates the discount in the fare for the passenger with the following discounts. For the age group `between 12 and 58, both inclusive’ there is 20% discount in the fare, for the age group ‘above 58’, there is 40% discount and for the children (age under 12), 50% discount. Write a C++ program to generate pass for ‘n’ users.
Input Format:
Passenger name
Passenger name
Value of ‘x’
Age
Address
date_of_Journey
mobile number
Original Fare
Address
date_of_Journey
mobile number
Original Fare
Output Format:
passenger name
Boarding pass number
age
date_of_Journey
mobile number
Total fare after discount based on age
age
date_of_Journey
mobile number
Total fare after discount based on age
Boundary Conditions:
>=1
>=1
Solution
#include < iostream >
using namespace std;
float discount(float init_price,int age)
{
if(age < 12)
init_price-=(init_price*0.5);
else if(age < = 58)
init_price-=(init_price*0.2);
else
init_price-=(init_price*0.4);
return(init_price);
}
class passenger
{
char name[20],add[30],date[20],number[20];
int age,x;
float init_price,final_price;
public :
passenger(){}
void get()
{
cin>>name>>x>>age>>add>>date>>number>>init_price;
final_price=discount(init_price,age);
}
~passenger()
{
cout<<name<<"\nCA"<<x<<"\n"<<age<<"\n"<<date<<"\n"<<number<<"\n"<<final_price<<"\n";
}
};
int main()
{
passenger pas;
pas.get();
return(0);
}
Input
INPUT : void get() { cin>>name>>x>>age>>add>>date>>number>>init_price; final_price=discount(init_price,age); }
Output
OUTPUT : cout<<name<<"\nCA"<<x<<"\n"<<age<<"\n"<<date<<"\n"<<number<<"\n"<<final_price<<"\n";
Processing
float discount(float init_price,int age) { if(age < 12) init_price-=(init_price*0.5); else if(age < = 58) init_price-=(init_price*0.2); else init_price-=(init_price*0.4); return(init_price); }
Pseudocode
BEGIN Read input p.get(); float discount(float init_price,int age) { if(age < 12) init_price-=(init_price*0.5); else if(age < = 58) init_price-=(init_price*0.2); else init_price-=(init_price*0.4); return(init_price); } cout<<name<<"\nCA"<<x<<"\n"<<age<<"\n"<<date<<"\n"<<number<<"\n"<<final_price<<"\n"; END
Question 3
Design a class vector to perform the operations like retrieving value for i-th component from a vector, add two vectors and subtract a vector from another if they are of same dimension. A vector of n-dimension is represented by an n-tuple (a sequence of n numbers). Addition of two vectors of same dimension, is got by adding the corresponding components of the two vectors. Similarly, subtraction of the two vectors, v1-v2, is got by the subtracting the respective components of v2 from the corresponding components of v1. Overload subscript ([]) operator for retrieving the i-th element from a vector, ‘+’ and ‘-‘ for addition and subtraction, << and >> for I/O operations. If the vectors are of different dimension, throw an exception stating “Vectors of different dimension cannot be added”.
Input format:
Dimension of first vector, ‘n1’
First element of first vector
Second element of first vector
…
n1-th element of first vector
Dimension of second vector, ‘n2’
First element of second vector
Second element of second vector
…
n2-th element of first vector
value of i
value of j
Dimension of first vector, ‘n1’
First element of first vector
Second element of first vector
…
n1-th element of first vector
Dimension of second vector, ‘n2’
First element of second vector
Second element of second vector
…
n2-th element of first vector
value of i
value of j
Output Format
i-th element of vector1
j-th element of vector2
sum of vectors
vector1-vector2
i-th element of vector1
j-th element of vector2
sum of vectors
vector1-vector2
Solution
#include
using namespace std;
class vector
{
int num;
int ele[20];
public:
friend istream& operator>>(istream&,vector&);
friend ostream& operator<<(ostream&,vector&);
vector operator+(vector&);
vector operator-(vector&);
int operator[](int);
};
int vector :: operator [] (int n) { return(ele[n-1]); } istream& operator >> (istream& input,vector& vec) { input>>vec.num; for(int i=0;i < vec.num;i++) input>>vec.ele[i]; return(input); } ostream& operator << (ostream& output,vector& vec) { for(int i=0;i < vec.num;i++) output<<vec.ele[i]<<"\n"; return(output); } vector vector :: operator + (vector& vec) { vector v=vec; for(int i=0;i < num;i++) v.ele[i]+=ele[i]; return(v); } vector vector :: operator - (vector& vec) { vector v; for(int i=0;i < num;i++) v.ele[i]=ele[i]-vec.ele[i]; return(v); }
int main()
{
vector v1,v2,v3;
int i,j;
cin>>v1;
cin>>v2;
cin>>i;
cin>>j;
cout<<v1[i]<<endl;
cout<<v2[j]<<endl;
v3 = v1+v2;
cout<<v3;
v3 = v1 – v2;
cout<<v3;
}
Input
INPUT : istream& operator >> (istream& input,vector& vec) { input>>vec.num; for(int i=0;i < vec.num;i++) input>>vec.ele[i]; return(input); }
Output
OUTPUT : ostream& operator << (ostream& output,vector& vec) { for(int i=0;i < vec.num;i++) output<<vec.ele[i]<<"\n"; return(output); }
Processing
vector vector :: operator + (vector& vec)
{
vector v=vec;
for(int i=0;i < num;i++)
v.ele[i]+=ele[i];
return(v);
}
vector vector :: operator - (vector& vec)
{
vector v;
for(int i=0;i < num;i++)
v.ele[i]=ele[i]-vec.ele[i];
return(v);
}
Pseudocode
BEGIN Read input vector vector :: operator + (vector& vec) vector vector :: operator - (vector& vec) Output END
Question 4
Design a OOP model to represent a point in a two dimensional space and overload the operators >>,<<, > and ==. Given ‘n’ points, design an algorithm and write a C++ code to sort them in descending order. While sorting, a point is said to be greater than the other based on their x-coordinate value. If value of x-coordinate is same for both the points then make a decision based on their value of y-coordinate.
Input Format
Number of points ‘n’
value of X- coordinate of point1
value of Y- coordinate of point1
….
value of X- coordinate of point-n
value of Y- coordinate of point-n
Output Format
Print ‘n’ points in sorted order
value of X- coordinate and Y- coordinate of point1 separated by tab
value of X- coordinate and Y- coordinate of point2 separated by tab
….
value of X- coordinate and Y- coordinate of point-n separated by tab
Solution
#include
using namespace std;
class point
{
int x,y;
public:
friend istream& operator>>(istream&,point&);
friend ostream& operator<<(ostream&,point&); bool operator == (point&); bool operator > (point&);
};
void sort_Points(point*,int);
istream& operator >> (istream& input,point& poi) { input>>poi.x>>poi.y; return(input); } ostream& operator << (ostream& output,point& poi) { output<<poi.x<<"\t"<<poi.y<<"\n"; return(output); } bool point :: operator == (point& poi) { if(poi.x==x && poi.y > y) { int temp=poi.y; poi.y=y; y=temp; return(true); } return(false); } bool point :: operator > (point& poi) { if(poi.x > x) { point temp=poi; poi.x=x; poi.y=y; x=temp.x; y=temp.y; return(true); } return(false); } void sort_Points(point* poi,int n) { for(int i=0;i < n;i++) for(int j=0;j < n;j++) { if(poi[j] > poi[i]) continue; if(poi[j]==poi[i]); } }
main()
{
point p[20];
int i,n;
cin>>n;
for(i=0;i<n;i++) cin>>p[i];
sort_Points(p,n);
for(i=0;i<n;i++)
cout<<p[i];
}
Input
INTPUT : istream& operator >> (istream& input,point& poi) { input>>poi.x>>poi.y; return(input); }
Output
OUTPUT : ostream& operator << (ostream& output,point& poi) { output<<poi.x<<"\t"<<poi.y<<"\n"; return(output); }
Processing
bool point :: operator == (point& poi) { if(poi.x==x && poi.y > y) { int temp=poi.y; poi.y=y; y=temp; return(true); } return(false); } bool point :: operator > (point& poi) { if(poi.x > x) { point temp=poi; poi.x=x; poi.y=y; x=temp.x; y=temp.y; return(true); } return(false); }
Pseudocode
BEGIN Read input void sort_Points(point* poi,int n) { for(int i=0;i < n;i++) for(int j=0;j < n;j++) { if(poi[j] > poi[i]) continue; if(poi[j]==poi[i]); } } Output END
Question 5
Design a class stringpos to perform the operations like retrieving the letter in the i-th position (i-th symbol) of a string, rotation of a string, oddfirst of a string, evenfirst of a string, spin of two strings, oddevenswap of two strings, evenoddswap of two strings. Here the terms : rotation, oddfirst, evenfirst, are the operations performed on one string. The terms : spin, oddevenswap, evenoddswap are the operations performed on two strings. With the string S and integer n
Oddevenswap(S1,S2) produces a string such that the letters occurring in the odd positions of S1 are replaced by the letters occurring in the corresponding even positions of S2 and the letters occurring in the even position of S1 are left unchanged. In the above example, after a certain stage, If there are no even-position letters in S2 to replace the odd-position letters in S1, those odd-position letters are left unreplaced. For Example, oddevenswap(abcd, efgh)= fbhd, oddevenswap(ab,efgh)=fb, oddevenswap(abcd,fg)= gbcd. Here also, oddevenswap(S1, S2) need not be same as that of oddevenswap(S2,S1).
Similarly, evenoddwap(S1,S2) produces a string such that the letters occurring in the even positions of S1 are replaced by the letters occurring in the corresponding odd positions of S2 and the letters occurring in the odd position of S1 are left unchanged. For Example, evenoddswap(abcd, efgh)= aecg, evenoddswap(ab,efgh)=ae, evenoddswap(abcd,fg)= afcd Here also, evenoddswap(S1, S2) need not be same as that of evenoddswap(S2,S1).
Overload shift left operator for rotation, prefix ++ for oddfirst, postfix ++ for evenfirst, ‘*’ for spin,’+’ operator for Oddevenswap, ‘-‘ operator for Evenoddswap, << and >> for I/O operations.
Input format:
First line contains the first string, S1
First line contains the first string, S1
Next line contains the second string, S2
Rotation index n
Output Format
rotation(S1,n)
oddfirst(S2)
Output Format
rotation(S1,n)
oddfirst(S2)
evenfirst(S1)
Spin(S1,S2)
Oddevenswap(S1,S2)
Evenoddswap(S1,S2)
Solution
#include
#include
using namespace std;
class stringops
{
char str[50];
public:
friend istream& operator>>(istream&,stringops&);
friend ostream& operator<<(ostream&,stringops&); //Return a new string with letters rotated stringops operator>>(int);
//Return a new string with odd letters first
stringops operator++();
//Return a new string with even letters first
stringops operator++(int);
//Return a new string after Oddevenswap
stringops operator + (stringops&);
//Return a new string after Evenoddswap
stringops operator – (stringops&);
//Return a new string after spin
stringops operator * (stringops&);
};
istream& operator >> (istream& input,stringops& string) { input>>string.str; return(input); } ostream& operator << (ostream& output,stringops& string) { output<<string.str; return(output); } stringops stringops :: operator >> (int num) { num--; stringops new_string; for(int i=0;i < strlen(str)+1;i++) { if(num > -1) new_string.str[i]=str[num--]; else new_string.str[i]=str[i]; } return(new_string); } stringops stringops :: operator ++ () { stringops new_string; int len=0; for(int i=0;i < strlen(str);i+=2) new_string.str[len++]=str[i]; for(int i=1;i < strlen(str);i+=2) new_string.str[len++]=str[i]; new_string.str[len]='\0'; return(new_string); } stringops stringops :: operator ++(int) { stringops new_string; int len=0; for(int i=1;i < strlen(str);i+=2) new_string.str[len++]=str[i]; for(int i=0;i < strlen(str);i+=2) new_string.str[len++]=str[i]; new_string.str[len]='\0'; return(new_string); } stringops stringops :: operator + (stringops& string) { stringops new_string; for(int i=0;i < strlen(str);i++) { if((i+1)%2==1 and i+1 < strlen(string.str)) new_string.str[i]=string.str[i+1]; else new_string.str[i]=str[i]; } new_string.str[strlen(str)]='\0'; return(new_string); } stringops stringops :: operator - (stringops& string) { stringops new_string; for(int i=0;i < strlen(str);i++) { if((i+1)%2==0 && i-1 < strlen(string.str)) new_string.str[i]=string.str[i-1]; else new_string.str[i]=str[i]; } new_string.str[strlen(new_string.str)]='\0'; return(new_string); } stringops stringops :: operator * (stringops& string) { stringops new_string; int s1=0,s2=0,s3=0; while(s1 < strlen(str) && s2 < strlen(string.str)) { new_string.str[s3++]=str[s1++]; new_string.str[s3++]=string.str[s2++]; } while(s1 < strlen(str)) new_string.str[s3++]=str[s1++]; while(s2 < strlen(string.str)) new_string.str[s3++]=string.str[s2++]; new_string.str[s3]='\0'; return(new_string); }
int main()
{
stringops s1,s2,s3;
int n;
cin>>s1>>s2;
cin>>n;
//rotate
s3= s1>>n;
cout<<s3<<endl;
//oddfirst
s3 = ++s2;
cout<<s3<<endl;
//evenfirst
s3 = s1++;
cout<<s3<<endl;
//spin
s3 = s1*s2;
cout<<s3<<endl;
//Oddeven swap
s3 = s1+s2;
cout<<s3<<endl;
//Evenodd swap
s3 = s1-s2;
cout<<s3<<endl;
}
Input
INPUT :
istream& operator >> (istream& input,stringops& string)
{
input>>string.str;
return(input);
}
Output
OUTPUT :
ostream& operator << (ostream& output,stringops& string)
{
output<<string.str;
return(output);
}
Processing
stringops stringops :: operator >> (int num) stringops stringops :: operator ++ () stringops stringops :: operator ++(int) stringops stringops :: operator + (stringops& string) stringops stringops :: operator - (stringops& string) stringops stringops :: operator * (stringops& string)
Pseudocode
BEGIN Read input stringops stringops :: operator >> (int num) stringops stringops :: operator ++ () stringops stringops :: operator ++(int) stringops stringops :: operator + (stringops& string) stringops stringops :: operator - (stringops& string) stringops stringops :: operator * (stringops& string) Output END
0 comments:
Post a Comment