//Ryan Robateau CSC5 Chapter 8, P. 487, #4
/******************************************************************************
* Validate Charge Number
* ____________________________________________________________________________
* This program accepts user input in the form of an Account Number and then
* compares it to each value in an array to determine its validity.
* ____________________________________________________________________________
*****************************************************************************/
#include <iostream>
using namespace std;
void selectionSort(int ChargeNum[]);
int binarySearch(int ChargeNum[], int chargeNumber);
const int SIZE = 18;
int main() {
int positionFound;
int chargeNumber;
int ChargeNum[SIZE] = {5658845, 4520125, 7895122,
8777541, 8451277, 1302850,
8080152, 4562555, 5552012,
5050552, 7825877, 1250255,
1005231, 6545231, 3852085,
7576651, 7881200, 4581002};
cout << "Please Enter your account number: ";
cin >> chargeNumber;
selectionSort(ChargeNum);
positionFound = binarySearch(ChargeNum, chargeNumber);
if (positionFound == -1)
cout << "\nSorry! The number is invalid.";
else
cout << "\nThe number is valid!";
return 0;
}
void selectionSort(int ChargeNum[])
{
int startScan;
int minIndex;
int minValue;
for(startScan = 0; startScan < (SIZE - 1); startScan++){
minIndex = startScan;
minValue = ChargeNum[startScan];
for (int index = startScan + 1; index < SIZE; index++){
if (ChargeNum[index] < minValue){
minValue = ChargeNum[index];
minIndex = index;
}
}
ChargeNum[minIndex] = ChargeNum[startScan];
ChargeNum[startScan] = minValue;
}
}
int binarySearch(int ChargeNum[], int chargeNumber){
int first = 0;
int last = SIZE - 1;
int middle;
int position = -1;
bool found = false;
while (!found && first <= last){
middle = (first + last) / 2;
if (ChargeNum[middle] == chargeNumber){
found = true;
position = middle;
}
else if (ChargeNum[middle] > chargeNumber)
last = middle - 1;
else
first = middle + 1;
}
return position;
}
Ly9SeWFuIFJvYmF0ZWF1ICAgICAgICAgICAgICAgICAgICBDU0M1ICAgICAgICAgICAgICAgICAgICBDaGFwdGVyIDgsIFAuIDQ4NywgIzQKLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogKiBWYWxpZGF0ZSBDaGFyZ2UgTnVtYmVyCiAqIF9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KICogVGhpcyBwcm9ncmFtIGFjY2VwdHMgdXNlciBpbnB1dCBpbiB0aGUgZm9ybSBvZiBhbiBBY2NvdW50IE51bWJlciBhbmQgdGhlbgogKiBjb21wYXJlcyBpdCB0byBlYWNoIHZhbHVlIGluIGFuIGFycmF5IHRvIGRldGVybWluZSBpdHMgdmFsaWRpdHkuCiAqIF9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwojaW5jbHVkZSA8aW9zdHJlYW0+CnVzaW5nIG5hbWVzcGFjZSBzdGQ7Cgp2b2lkIHNlbGVjdGlvblNvcnQoaW50IENoYXJnZU51bVtdKTsKaW50IGJpbmFyeVNlYXJjaChpbnQgQ2hhcmdlTnVtW10sIGludCBjaGFyZ2VOdW1iZXIpOwoKY29uc3QgaW50IFNJWkUgPSAxODsKaW50IG1haW4oKSB7CglpbnQgcG9zaXRpb25Gb3VuZDsKCWludCBjaGFyZ2VOdW1iZXI7CglpbnQgQ2hhcmdlTnVtW1NJWkVdID0gezU2NTg4NDUsIDQ1MjAxMjUsIDc4OTUxMjIsIAoJCQkJCQkJODc3NzU0MSwgODQ1MTI3NywgMTMwMjg1MCwKCQkJCQkJCTgwODAxNTIsIDQ1NjI1NTUsIDU1NTIwMTIsCgkJCQkJCQk1MDUwNTUyLCA3ODI1ODc3LCAxMjUwMjU1LAoJCQkJCQkJMTAwNTIzMSwgNjU0NTIzMSwgMzg1MjA4NSwKCQkJCQkJCTc1NzY2NTEsIDc4ODEyMDAsIDQ1ODEwMDJ9OwoKCWNvdXQgPDwgIlBsZWFzZSBFbnRlciB5b3VyIGFjY291bnQgbnVtYmVyOiAiOwoJY2luID4+IGNoYXJnZU51bWJlcjsKCglzZWxlY3Rpb25Tb3J0KENoYXJnZU51bSk7CgoJcG9zaXRpb25Gb3VuZCA9IGJpbmFyeVNlYXJjaChDaGFyZ2VOdW0sIGNoYXJnZU51bWJlcik7CgoJaWYgKHBvc2l0aW9uRm91bmQgPT0gLTEpCgkJY291dCA8PCAiXG5Tb3JyeSEgVGhlIG51bWJlciBpcyBpbnZhbGlkLiI7CgllbHNlCgkJY291dCA8PCAiXG5UaGUgbnVtYmVyIGlzIHZhbGlkISI7CglyZXR1cm4gMDsKfQp2b2lkIHNlbGVjdGlvblNvcnQoaW50IENoYXJnZU51bVtdKQp7CglpbnQgc3RhcnRTY2FuOwoJaW50IG1pbkluZGV4OwoJaW50IG1pblZhbHVlOwoKCWZvcihzdGFydFNjYW4gPSAwOyBzdGFydFNjYW4gPCAoU0laRSAtIDEpOyBzdGFydFNjYW4rKyl7CgkJbWluSW5kZXggPSBzdGFydFNjYW47CgkJbWluVmFsdWUgPSBDaGFyZ2VOdW1bc3RhcnRTY2FuXTsKCQlmb3IgKGludCBpbmRleCA9IHN0YXJ0U2NhbiArIDE7IGluZGV4IDwgU0laRTsgaW5kZXgrKyl7CgkJCWlmIChDaGFyZ2VOdW1baW5kZXhdIDwgbWluVmFsdWUpewoJCQkJbWluVmFsdWUgPSBDaGFyZ2VOdW1baW5kZXhdOwoJCQkJbWluSW5kZXggPSBpbmRleDsKCQkJfQoJCX0KCQlDaGFyZ2VOdW1bbWluSW5kZXhdID0gQ2hhcmdlTnVtW3N0YXJ0U2Nhbl07CgkJQ2hhcmdlTnVtW3N0YXJ0U2Nhbl0gPSBtaW5WYWx1ZTsKCX0KfQoKaW50IGJpbmFyeVNlYXJjaChpbnQgQ2hhcmdlTnVtW10sIGludCBjaGFyZ2VOdW1iZXIpewoJaW50IGZpcnN0ID0gMDsJCQoJaW50IGxhc3QgPSBTSVpFIC0gMTsJCglpbnQgbWlkZGxlOwkJCQkKCWludCBwb3NpdGlvbiA9IC0xOwoJYm9vbCBmb3VuZCA9IGZhbHNlOwoJd2hpbGUgKCFmb3VuZCAmJiBmaXJzdCA8PSBsYXN0KXsKCQltaWRkbGUgPSAoZmlyc3QgKyBsYXN0KSAvIDI7CgkJaWYgKENoYXJnZU51bVttaWRkbGVdID09IGNoYXJnZU51bWJlcil7CgkJCWZvdW5kID0gdHJ1ZTsKCQkJcG9zaXRpb24gPSBtaWRkbGU7CgkJfQoJCWVsc2UgaWYgKENoYXJnZU51bVttaWRkbGVdID4gY2hhcmdlTnVtYmVyKQoJCQlsYXN0ID0gbWlkZGxlIC0gMTsKCQllbHNlCgkJCWZpcnN0ID0gbWlkZGxlICsgMTsKCX0KCXJldHVybiBwb3NpdGlvbjsKfQ==