//Dione Torrevillas CS1A Chapter 8, P. 487, #4
/**********************************************************
* Class: CS1A
* Chapter 8 Homework - Programming Challenge #4
* Title: Charge Account Validation Modification
*
* Description:
* This program uses selection sort to arrange charge account
* numbers, then binary search to check whether one is valid.
*
* INPUT:
* A charge account number entered by the user.
*
* OUTPUT:
* A message saying whether the number is valid.
**********************************************************/
#include <iostream>
using namespace std;
// Put the integer array in ascending order using selection sort.
void selectionSort(int values[], int size)
{
for (int start = 0; start < size - 1; start++)
{
int minIndex = start;
// Find the smallest value in the unsorted part.
for (int i = start + 1; i < size; i++)
{
if (values[i] < values[minIndex])
minIndex = i;
}
// Put that value at the start of the unsorted part.
int temp = values[start];
values[start] = values[minIndex];
values[minIndex] = temp;
}
}
// Return true when target is in the sorted array.
bool binarySearch(const int values[], int size, int target)
{
int first = 0;
int last = size - 1;
while (first <= last)
{
int middle = (first + last) / 2;
if (values[middle] == target)
return true;
else if (values[middle] > target)
last = middle - 1;
else
first = middle + 1;
}
return false;
}
int main()
{
const int SIZE = 18;
int accounts[SIZE] = {
5658845, 4520125, 7895122, 8777541, 8451277, 1302850,
8080152, 4562555, 5552012, 5050552, 7825877, 1250255,
1005231, 6545231, 3852085, 7576651, 7881200, 4581002
};
int accountNumber; //INPUT - Charge account number from user
// The array must be sorted before binary search can work.
selectionSort(accounts, SIZE);
cout << "Enter a charge account number: ";
cin >> accountNumber;
//OUTPUT - Display whether the account number is valid.
if (binarySearch(accounts, SIZE, accountNumber))
cout << "The charge account number is valid." << endl;
else
cout << "The charge account number is invalid." << endl;
return 0;
}
Ci8vRGlvbmUgVG9ycmV2aWxsYXMgICAgICAgICAgICAgICAgIENTMUEgICAgICAgICAgICAgICAgIENoYXB0ZXIgOCwgUC4gNDg3LCAjNAoKLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICogQ2xhc3M6IENTMUEKICogQ2hhcHRlciA4IEhvbWV3b3JrIC0gUHJvZ3JhbW1pbmcgQ2hhbGxlbmdlICM0CiAqIFRpdGxlOiBDaGFyZ2UgQWNjb3VudCBWYWxpZGF0aW9uIE1vZGlmaWNhdGlvbgogKgogKiBEZXNjcmlwdGlvbjoKICogVGhpcyBwcm9ncmFtIHVzZXMgc2VsZWN0aW9uIHNvcnQgdG8gYXJyYW5nZSBjaGFyZ2UgYWNjb3VudAogKiBudW1iZXJzLCB0aGVuIGJpbmFyeSBzZWFyY2ggdG8gY2hlY2sgd2hldGhlciBvbmUgaXMgdmFsaWQuCiAqCiAqIElOUFVUOgogKiBBIGNoYXJnZSBhY2NvdW50IG51bWJlciBlbnRlcmVkIGJ5IHRoZSB1c2VyLgogKgogKiBPVVRQVVQ6CiAqIEEgbWVzc2FnZSBzYXlpbmcgd2hldGhlciB0aGUgbnVtYmVyIGlzIHZhbGlkLgogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KCiNpbmNsdWRlIDxpb3N0cmVhbT4KdXNpbmcgbmFtZXNwYWNlIHN0ZDsKCi8vIFB1dCB0aGUgaW50ZWdlciBhcnJheSBpbiBhc2NlbmRpbmcgb3JkZXIgdXNpbmcgc2VsZWN0aW9uIHNvcnQuCnZvaWQgc2VsZWN0aW9uU29ydChpbnQgdmFsdWVzW10sIGludCBzaXplKQp7CiAgICBmb3IgKGludCBzdGFydCA9IDA7IHN0YXJ0IDwgc2l6ZSAtIDE7IHN0YXJ0KyspCiAgICB7CiAgICAgICAgaW50IG1pbkluZGV4ID0gc3RhcnQ7CgogICAgICAgIC8vIEZpbmQgdGhlIHNtYWxsZXN0IHZhbHVlIGluIHRoZSB1bnNvcnRlZCBwYXJ0LgogICAgICAgIGZvciAoaW50IGkgPSBzdGFydCArIDE7IGkgPCBzaXplOyBpKyspCiAgICAgICAgewogICAgICAgICAgICBpZiAodmFsdWVzW2ldIDwgdmFsdWVzW21pbkluZGV4XSkKICAgICAgICAgICAgICAgIG1pbkluZGV4ID0gaTsKICAgICAgICB9CgogICAgICAgIC8vIFB1dCB0aGF0IHZhbHVlIGF0IHRoZSBzdGFydCBvZiB0aGUgdW5zb3J0ZWQgcGFydC4KICAgICAgICBpbnQgdGVtcCA9IHZhbHVlc1tzdGFydF07CiAgICAgICAgdmFsdWVzW3N0YXJ0XSA9IHZhbHVlc1ttaW5JbmRleF07CiAgICAgICAgdmFsdWVzW21pbkluZGV4XSA9IHRlbXA7CiAgICB9Cn0KCi8vIFJldHVybiB0cnVlIHdoZW4gdGFyZ2V0IGlzIGluIHRoZSBzb3J0ZWQgYXJyYXkuCmJvb2wgYmluYXJ5U2VhcmNoKGNvbnN0IGludCB2YWx1ZXNbXSwgaW50IHNpemUsIGludCB0YXJnZXQpCnsKICAgIGludCBmaXJzdCA9IDA7CiAgICBpbnQgbGFzdCA9IHNpemUgLSAxOwoKICAgIHdoaWxlIChmaXJzdCA8PSBsYXN0KQogICAgewogICAgICAgIGludCBtaWRkbGUgPSAoZmlyc3QgKyBsYXN0KSAvIDI7CgogICAgICAgIGlmICh2YWx1ZXNbbWlkZGxlXSA9PSB0YXJnZXQpCiAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgIGVsc2UgaWYgKHZhbHVlc1ttaWRkbGVdID4gdGFyZ2V0KQogICAgICAgICAgICBsYXN0ID0gbWlkZGxlIC0gMTsKICAgICAgICBlbHNlCiAgICAgICAgICAgIGZpcnN0ID0gbWlkZGxlICsgMTsKICAgIH0KCiAgICByZXR1cm4gZmFsc2U7Cn0KCmludCBtYWluKCkKewogICAgY29uc3QgaW50IFNJWkUgPSAxODsKICAgIGludCBhY2NvdW50c1tTSVpFXSA9IHsKICAgICAgICA1NjU4ODQ1LCA0NTIwMTI1LCA3ODk1MTIyLCA4Nzc3NTQxLCA4NDUxMjc3LCAxMzAyODUwLAogICAgICAgIDgwODAxNTIsIDQ1NjI1NTUsIDU1NTIwMTIsIDUwNTA1NTIsIDc4MjU4NzcsIDEyNTAyNTUsCiAgICAgICAgMTAwNTIzMSwgNjU0NTIzMSwgMzg1MjA4NSwgNzU3NjY1MSwgNzg4MTIwMCwgNDU4MTAwMgogICAgfTsKCiAgICBpbnQgYWNjb3VudE51bWJlcjsgIC8vSU5QVVQgLSBDaGFyZ2UgYWNjb3VudCBudW1iZXIgZnJvbSB1c2VyCgogICAgLy8gVGhlIGFycmF5IG11c3QgYmUgc29ydGVkIGJlZm9yZSBiaW5hcnkgc2VhcmNoIGNhbiB3b3JrLgogICAgc2VsZWN0aW9uU29ydChhY2NvdW50cywgU0laRSk7CgogICAgY291dCA8PCAiRW50ZXIgYSBjaGFyZ2UgYWNjb3VudCBudW1iZXI6ICI7CiAgICBjaW4gPj4gYWNjb3VudE51bWJlcjsKCiAgICAvL09VVFBVVCAtIERpc3BsYXkgd2hldGhlciB0aGUgYWNjb3VudCBudW1iZXIgaXMgdmFsaWQuCiAgICBpZiAoYmluYXJ5U2VhcmNoKGFjY291bnRzLCBTSVpFLCBhY2NvdW50TnVtYmVyKSkKICAgICAgICBjb3V0IDw8ICJUaGUgY2hhcmdlIGFjY291bnQgbnVtYmVyIGlzIHZhbGlkLiIgPDwgZW5kbDsKICAgIGVsc2UKICAgICAgICBjb3V0IDw8ICJUaGUgY2hhcmdlIGFjY291bnQgbnVtYmVyIGlzIGludmFsaWQuIiA8PCBlbmRsOwoKICAgIHJldHVybiAwOwp9Cg==