/*
Author : Ravi K Srivastava
Date: 05/22/2001 Tuesday
Purpose: this program is created to use single subscripted array to store 20 different numbers
in the range from 10..100 inclusive. if at any point user enters duplicate value, then
a warning will be displayed about the duplicate number.
Note: I have used integer array of 3 elements to do this.
*/
#include
#include
#define MINRANGE 10
#define MAXRANGE 100
#define FIRST_SLOT 32
#define SECOND_SLOT 64
int rvCheckNum(unsigned int rvSource, unsigned int rvNum);
unsigned int rvAddNum(unsigned int rvSource, unsigned int rvNum);
void main()
{
unsigned int rvArray[3] = {0, 0, 0};
unsigned int rvNum;
unsigned int rvRelativeOffset;
int rvFlag;
for (int i = 0; i<20; i++)
{
cout << "Enter the number (10..100 inclusive) :";
cin >> rvNum;
if(rvNum < MINRANGE || rvNum > MAXRANGE)
{
cout << "Number Out of Bound" << endl;
continue;
}
if(rvNum - MINRANGE < FIRST_SLOT )
{
rvRelativeOffset = rvNum - MINRANGE;
rvFlag = rvCheckNum(rvArray[0], rvRelativeOffset);
if(!rvFlag)
{
cout << rvNum << " already Present"<< endl;
}
else
{
rvArray[0] = rvAddNum(rvArray[0], rvRelativeOffset);
}
}
else if(rvNum - 10 < SECOND_SLOT)
{
rvRelativeOffset = rvNum - FIRST_SLOT - MINRANGE;
rvFlag = rvCheckNum(rvArray[1], rvRelativeOffset);
if(!rvFlag)
{
cout << rvNum << " already Present"<< endl;
}
else
{
rvArray[1] = rvAddNum(rvArray[1], rvRelativeOffset);
}
}
else
{
rvRelativeOffset = rvNum - SECOND_SLOT - MINRANGE;
rvFlag = rvCheckNum(rvArray[2], rvRelativeOffset);
if(!rvFlag)
{
cout << rvNum << " already Present"<< endl;
}
else
{
rvArray[2] = rvAddNum(rvArray[2], rvRelativeOffset);
}
}
}
}
int rvCheckNum(unsigned int rvSource, unsigned int rvNum)
{
unsigned int rvTemp;
unsigned int rvComp = (unsigned int)pow(2, sizeof(int)*8 - 1);
rvTemp = rvSource << rvNum ;
if(rvTemp >= rvComp)
return 0;
return 1;
}
unsigned int rvAddNum(unsigned int rvSource, unsigned int rvNum)
{
unsigned int rvMask = (unsigned int)pow(2,(sizeof(unsigned int)*8 - rvNum -1));
rvSource = rvSource | rvMask;
return rvSource;
}