Archive

Posts Tagged ‘Generic Classes’

C++ Program to implement Generic Classes for maintaining Linked List – Q27

January 27, 2010 Leave a comment

Q27. Program to implement Generic Classes for maintaining Linked List:

Create a Template class that implements a singly-linked list. The linked list class should include following member functions-
push_front( ), push_back( ), push_at_any( ), remove_first( ), remove_last( ) & remove_at _any( ).
There may be a private data member size to keep track of no. of items remaining at any given point of time.

… from College notes (BCA/MCA assignments):

#include <iostream.h>
#include <stdlib.h>
#include <stdio.h>
#include <conio.h>

template <class T>
class NODE{
	private:
		T elm, key;
		NODE *next;
	public:
		void addNodeBeg(NODE **);
		void addNodeEnd(NODE **);
		void addNodePos(NODE **);
		void deleteNode(NODE **);
		void displayList(NODE *);
	};

template <class T>
void NODE<T> :: addNodeBeg(NODE<T> **node){
	NODE *temp;
	cout<<"\n Enter a Value: ";
	cin>>key;
	if(*node == NULL){	// list is Empty.
		*node = new(NODE);
		(*node)->elm = key;
		(*node)->next = NULL;
		}
	else{				// list is not empty.
		temp = new(NODE);
		temp->elm = key;
		temp->next = *node;
		*node = temp;
		}
	}

template <class T>
void NODE<T> :: addNodeEnd(NODE<T> **node){
	NODE *temp;
	cout<<"\n Enter a Value: ";
	cin>>key;
	if(*node == NULL){	// list is Empty.
		*node = new(NODE);
		(*node)->elm = key;
		(*node)->next = NULL;
		}
	else{				// list is not empty.
		temp = *node;
		while(temp->next != NULL)
			temp = temp->next;
		temp->next = new(NODE);
		temp = temp->next;
		temp->elm = key;
		temp->next = NULL;
		}
	}

template <class T>
void NODE<T> :: addNodePos(NODE<T> **node){
	NODE *temp, *ntemp;
	int pos, i=1;
	cout<<"\n Enter a Position No.: ";
	cin>>pos;
	cout<<"\n Enter a Key: ";
	cin>>key;
	if(*node == NULL){	// list is Empty.
		cout<<"\n List is Empty.";
		return ;
		}
	temp = *node;
	while(1){
		if( (temp->next == NULL) || (i == pos) )
			break;
		temp = temp->next;
		i++;
		}
	ntemp = new(NODE);
	ntemp->elm = key;
	ntemp->next = temp->next;
	temp->next = ntemp;
	}

template <class T>
void NODE<T> :: deleteNode(NODE<T> **node){
	NODE *temp, *prev;
	int i=0;
	cout<<"\n Enter an Element of List to Delete: ";
	cin>>key;
	temp = *node;
	prev = temp;
	while(1){
		if(*node == NULL){	// list is Empty.
			cout<<"\n List is Empty.";
			return;
			}
		else if(temp->elm == key){	// Element Found.
			if(i == 0){	// if Element is First Node.
				(*node) = (*node)->next;
				cout<<"\n First Node Deleted.";
				return;
				}
			else
				break;
			}
		else if(temp->next == NULL){
			cout<<"\n Element not Found.";
			return;
			}
		i++;
		prev = temp;
		temp = temp->next;
		}
	prev->next = temp->next;
	cout<<"\n Element Deleted.";
	}


template <class T>
void NODE<T> :: displayList(NODE<T> *node){
	int i=1;
	cout<<"\n\t List: ";
	if(node == NULL)
		cout<<" List is Empty.";
	while(node != NULL){
		cout<<"\t"<<node->elm;
		node = node->next;
		i++;
		}
	}

int _menu(){
	int _ch;
	cout<<"\n List Type:- \n";
	cout<<"\n 1 -> Integer.";
	cout<<"\n 2 -> Float.";
	cout<<"\n 3 -> Character.";
	cout<<"\n Enter your choice: ";
	cin>>_ch;
	return (_ch);
	}

void main(){
	int ch1, ch2;

	NODE<int> int_list;
	NODE<float> float_list;
	NODE<char> char_list;

	NODE<int> *int_start = NULL;
	NODE<float> *float_start = NULL;
	NODE<char> *char_start = NULL;

	while(1){
		clrscr();
		cout<<"\n LINK LIST PROGRAM";
		cout<<"\n ~~~~~~~~~~~~~~~~~ \n";
		cout<<"\n 1 -> Add Node at Begining.";
		cout<<"\n 2 -> Add Node at End.";
		cout<<"\n 3 -> Add Node at Position.";
		cout<<"\n 4 -> Delete Node.";
		cout<<"\n 5 -> Display List.";
		cout<<"\n 6 -> Exit.";
		cout<<"\n Enter your choice: ";
		cin>>ch1;
		switch(ch1){
			case 1:		// Add node at Begining.
				ch2 = _menu();
				switch(ch2){
					case 1:
						cout<<"\n Enter an Integer 
  Value: ";
						int_list.addNodeBeg(&int_start);
						break;
					case 2:
						cout<<"\n Enter a Float Value:”;
					float_list.addNodeBeg(&float_start);
						break;
					case 3:
						cout<<"\n Enter a Character: ";
					char_list.addNodeBeg(&char_start);
						break;
					default:
						cout<<"\n Wrong Entry. No 
  operation Done.";
					}
				break;
			case 2:		// Add node at End.
				ch2 = _menu();
				switch(ch2){
					case 1:
						cout<<"\n Enter an Integer 
  Value: ";
						int_list.addNodeEnd(&int_start);
						break;
					case 2:
						cout<<"\n Enter a Float Value:";
					float_list.addNodeEnd(&float_start);
						break;
					case 3:
						cout<<"\n Enter a Character: ";
					char_list.addNodeEnd(&char_start);
						break;
					default:
						cout<<"\n Wrong Entry. No 
  operation Done.";
					}
				break;
			case 3:		// Add node at Position.
				ch2 = _menu();
				switch(ch2){
					case 1:
						cout<<"\n Enter an Integer 
  Value: ";
						int_list.addNodePos(&int_start);
						break;
					case 2:
						cout<<"\n Enter a Float Value:";
					float_list.addNodePos(&float_start);
						break;
					case 3:
						cout<<"\n Enter a Character: ";
					char_list.addNodePos(&char_start);
						break;
					default:
						cout<<"\n Wrong Entry. No 
  operation Done.";
					}
				break;
			case 4:		// Delete Node.
				ch2 = _menu();
				switch(ch2){
					case 1:
						cout<<"\n Enter an Integer 
  Value: ";
						int_list.deleteNode(&int_start);
						break;
					case 2:
						cout<<"\n Enter a Float Value:";
					float_list.deleteNode(&float_start);
						break;
					case 3:
						cout<<"\n Enter a Character: ";
					char_list.deleteNode(&char_start);
						break;
					default:
						cout<<"\n Wrong Entry. No 
  operation Done.";
					}
				break;
			case 5:		// Display List.
				cout<<"\n\n Integer List: - ";
				int_list.displayList(int_start);
				cout<<"\n\n Float List: - ";
				float_list.displayList(float_start);
				cout<<"\n\n Character List: - ";
				char_list.displayList(char_start);
				break;
			default:
				exit(1);
			}
		getch();
		}
	}

 

Output:

LINK LIST PROGRAM

1 -> Add Node at Begining.
2 -> Add Node at End.
3 -> Add Node at Position.
4 -> Delete Node.
5 -> Display List.
6 -> Exit.

Enter your choice: 5

Integer List: –
List: 3 90 44 45 23 45

Float List: –
List: 90.449997 23.440001 12.34

Character List: –
List: e r


Advertisement

C++ Program to implement Generic classes for maintaining Stack – Q26

January 26, 2010 Leave a comment

Q26. Program to implement Generic classes for maintaining Stack:

Implement Stacks using generic classes with member functions PUSH, POP and DISPLAY. The Program should show implementation of Stack class with at least three different objects.

… from College notes (BCA/MCA assignments):

#include <iostream.h>
#include <conio.h>
#include <stdlib.h>

template <class T>
class Cstack{
	private:
		T arr[10];
		int ptr;
	public:
		void init(){
			ptr = -1;
			}
		void push(T, int);
		T pop(int &);
		void clear();
		void display(int);
	};

template <class T>
void Cstack<T> :: push(T elm_push, int t_ptr){
	if(t_ptr >= 9)
		cout<<"\n STACK OVERFLOW.";
	else
		arr[++t_ptr] = elm_push;
	}

template <class T>
T Cstack<T> :: pop(int &t_ptr){
	T elm_pop;
	if(t_ptr <= -1)
		cout<<"\n STACK UNDERFLOW.";
	else{
		elm_pop = arr[t_ptr--];
		cout<<"\n POPPED value is : "<<elm_pop;
		return elm_pop;
		}
	return 0;
	}

template <class T>
void Cstack<T> :: clear(){
	ptr = -1;
	cout<<"\n STACK Cleared.";
	}

template <class T>
void Cstack<T> :: display(int t_ptr){
	cout<<"\n STACK: ";
	if(t_ptr == -1)
		cout<<" Empty";
	else
		for(int i=0; i<=t_ptr; i++)
			cout<<arr[i]<<" ";
	}

int _menu(){
	int _ch;
	cout<<"\n STACK Type:- \n";
	cout<<"\n 1 -> Integer.";
	cout<<"\n 2 -> Float.";
	cout<<"\n 3 -> Character.";
	cout<<"\n Enter your choice: ";
	cin>>_ch;
	return (_ch);
	}

void main(){
	int ch, i_ptr = -1, f_ptr = -1, c_ptr = -1;
	int i_num;
	float f_num;
	char c_num;
	Cstack<int> Oint;
	Cstack<float> Ofloat;
	Cstack<char> Ochar;
	Oint.init();
	while(1){
		clrscr();
		cout<<"\n STACK - OPERATION";
		cout<<"\n ~~~~~~~~~~~~~~~~~ \n";
		cout<<"\n 1 -> PUSH";
		cout<<"\n 2 -> POP";
		cout<<"\n 3 -> CLEAR";
		cout<<"\n 4 -> DISPLAY";
		cout<<"\n 5 -> EXIT";
		cout<<"\n Enter your choice: ";
		cin>>ch;
		switch(ch){
			case 1:	// PUSH
				ch = _menu();
				switch(ch){
					case 1:
						cout<<"\n Enter an Integer Value 
  to push: ";
						cin>>i_num;
						Oint.push(i_num, i_ptr);
						i_ptr++;
						break;
					case 2:
						cout<<"\n Enter a Float Value to 
  push: ";
						cin>>f_num;
						Ofloat.push(f_num, f_ptr);
						f_ptr++;
						break;
					case 3:
						cout<<"\n Enter a Character to 
  push: ";
						cin>>c_num;
						Oint.push(c_num, c_ptr);
						c_ptr++;
						break;
					default:
						cout<<"\n Wrong Choice. No 
  Operation Done.";
					}
				break;
			case 2: // POP
				ch = _menu();
				switch(ch){
					case 1:
						Oint.pop(i_ptr);
						i_ptr--;
						break;
					case 2:
						Ofloat.pop(f_ptr);
						f_ptr--;
						break;
					case 3:
						Ochar.pop(c_ptr);
						c_ptr--;
						break;
					default:
						cout<<"\n Wrong Choice. No 
  Operation Done.";
					}
				break;
			case 3: // CLEAR
				ch = _menu();
				switch(ch){
					case 1:
						Oint.clear();
						i_ptr = -1;
						break;
					case 2:
						Ofloat.clear();
						c_ptr = -1;
						break;
					case 3:
						Ochar.clear();
						c_ptr = -1;
						break;
					default:
						cout<<"\n Wrong Choice. No 
  Operation Done.";
					}
				break;
			case 4: // DISPLAY
				cout<<"\n\n Integer Stack:-";
				Oint.display(i_ptr);
				cout<<"\n\n Float Stack:-";
				Ofloat.display(f_ptr);
				cout<<"\n\n Character Stack:-";
				Ochar.display(c_ptr);
				break;
			case 5: // EXIT
				cout<<"\n\n You chose to EXIT";
				getch();
				exit(1);
			default:
				cout<<"\n\n Enter an appropriate choice.";
			} // end of switch.
		getch();
		} // end of while.
	}// end of main.

 

Output:

STACK – OPERATION

1 -> PUSH
2 -> POP
3 -> CLEAR
4 -> DISPLAY
5 -> EXIT
Enter your choice: 1

STACK Type:-

1 -> Integer.
2 -> Float.
3 -> Character.
Enter your choice: 1

Enter an Integer Value to push: 43

STACK – OPERATION

1 -> PUSH
2 -> POP
3 -> CLEAR
4 -> DISPLAY
5 -> EXIT
Enter your choice: 4

Integer Stack:-
STACK: 43 119 23

Float Stack:-
STACK: 34.549999 78.900002

Character Stack:-
STACK: a n r


C++ Program to implement Generic Classes for user defined maths library – Q25

January 25, 2010 Leave a comment

Q25. Program to implement Generic Classes for user defined maths library:

Create a user defined maths class for implementing following functions using the concept of generic classes – SUM, N_ROOT, PRODUCT, POWER

… from College notes (BCA/MCA assignments):

#include <iostream.h>
#include <stdlib.h>
#include <conio.h>
#include <math.h>

template <class T>
class Cmath{
	private:
		T n1, n2, n3;
	public:
		void getData();
		void Sum();
		void nRoot();
		void Product();
		void Power();
	};

template <class T>
void Cmath<T> :: getData(){
	cout<<"\n Enter 1st Number : ";
	cin>>n1;
	cout<<"\n Enter 2nd Number : ";
	cin>>n2;
	}

template <class T>
void Cmath<T> :: Sum(){
	n3 = n1 + n2;
	cout<<"\n Sum = "<<n3;
	}

template <class T>
void Cmath<T> :: nRoot(){
	n3 = sqrt(n1);
	cout<<"\n Sq Root of "<<n1<<" = "<<n3;
	n3 = sqrt(n2);
	cout<<"\n Sq Root of "<<n2<<" = "<<n3;
	}

template <class T>
void Cmath<T> :: Product(){
	n3  = n1 * n2;
	cout<<"\n Product = "<<n3;
	}

template <class T>
void Cmath<T> :: Power(){
	n3 = pow(n1, n2);
	cout<<"\n Power = "<<n3;
	}

void main(){
	int ch;
	Cmath<int> Obj_i;
	Cmath<float> Obj_f;
	while(1){
		clrscr();
		cout<<"\n Generic Classes";
		cout<<"\n ~~~~~~~~~~~~~~~\n";
		cout<<"\n 1 -> Sum.";
		cout<<"\n 2 -> Root.";
		cout<<"\n 3 -> Product.";
		cout<<"\n 4 -> Power.";
		cout<<"\n 5 -> Exit.";
		cout<<"\n\n Enter your choice: ";
		cin>>ch;
		switch(ch){
			case 1:	// Sum.
				cout<<"\n Integer:- ";
				Obj_i.getData();
				Obj_i.Sum();
				cout<<"\n Floating:- ";
				Obj_f.getData();
				Obj_f.Sum();
				break;
			case 2:	// Root.
				cout<<"\n Integer:- ";
				Obj_i.getData();
				Obj_i.nRoot();
				cout<<"\n Floating:- ";
				Obj_f.getData();
				Obj_f.nRoot();
				break;
			case 3:	// Root.
				cout<<"\n Integer:- ";
				Obj_i.getData();
				Obj_i.Product();
				cout<<"\n Floating:-";
				Obj_f.getData();
				Obj_f.Product();
				break;
			case 4:	// Power.
				cout<<"\n Integer:- ";
				Obj_i.getData();
				Obj_i.Power();
				cout<<"\n Floating:-";
				Obj_f.getData();
				Obj_f.Power();
				break;
			case 5:	// Exit.
				exit(1);
			} // end of switch.
		getch();
		} // end of while.
	} // end of main.

 

Output:

Generic Classes

1 -> Sum.
2 -> Root.
3 -> Product.
4 -> Power.
5 -> Exit.

Enter your choice: 1

Integer:-
Enter 1st Number : 23
Enter 2nd Number : 32

Sum = 55

Floating:-
Enter 1st Number : 23.22
Enter 2nd Number : 32.45

Sum = 55.669998

Generic Classes

1 -> Sum.
2 -> Root.
3 -> Product.
4 -> Power.
5 -> Exit.

Enter your choice: 4

Integer:-
Enter 1st Number : 2
Enter 2nd Number : 5

Power = 32

Floating:-
Enter 1st Number : 23.44
Enter 2nd Number : 4.5

Power = 1461535.25


Categories: Cpp Tags: , ,