codepad
[
create a new paste
]
login
|
about
Language:
C
C++
D
Haskell
Lua
OCaml
PHP
Perl
Plain Text
Python
Ruby
Scheme
Tcl
#include <iostream> #include <vector> using namespace std; // descriptions of declared functions listed with implementation int ProcessInput(const int fromBase, const int toBase, char inputValue[], const int length); void ConvertToBase(int decimal, const int inBase, char outPut[]); double Exponent(const int number, const int exponent); int main(int argsc, char** argsv) { int fromBase(0), toBase(0); // set bases and initialize vector for storing output until end of input fromBase = atoi(argsv[1]); toBase = atoi(argsv[2]); vector <char *> outPutValues; int count(0); while (!cin.eof()) { // array to hold input value char inputValue[8] = {' '}; // receive input from keyboard and convert input to decimal and new base while (cin >> inputValue) { int length(strlen(inputValue)); // using dynamic arrays in vector allows for multiple input // with no output until all input received outPutValues.push_back(new char[8]); int decimalValue = ProcessInput(fromBase, toBase, inputValue, length); // if the new base is decimal, simply output decimalValue; // else process the new base and store in an output array; ConvertToBase(decimalValue, toBase, outPutValues[count]); count++; } for (int c = 0; c < outPutValues.size(); c++) { int k(0); // display only set values of the output array while ((outPutValues[c][k] == '\0') || (outPutValues[c][k] == '0')) k++; while (k < 8) { cout << outPutValues[c][k]; k++; } cout << endl; } } // free up dynamic arrays for (int d = 0; d < outPutValues.size(); d++) delete outPutValues[d]; return 0; } // end main // ProcessInput receives the input array and translates the char values // into a decimal value to be returned to calling function int ProcessInput(const int fromBase, const int toBase, char inputValue[], const int length) { int exponent(0), decimalValue(0); for (int j = 0; j < length; j++) { exponent = (length - j - 1); // convert inputValue from char to int to be processed into decimal; // negative signs are ignored switch (inputValue[j]) { case 'a': case 'A': decimalValue += (10 * Exponent(fromBase, exponent)); break; case 'b': case 'B': decimalValue += (11 * Exponent(fromBase, exponent)); break; case 'c': case 'C': decimalValue += (12 * Exponent(fromBase, exponent)); break; case 'd': case 'D': decimalValue += (13 * Exponent(fromBase, exponent)); break; case 'e': case 'E': decimalValue += (14 * Exponent(fromBase, exponent)); break; case 'f': case 'F': decimalValue += (15 * Exponent(fromBase, exponent)); break; case '-': cout << "Negative Number Received. Converted to unsigned int.\n"; break; default: decimalValue += ((inputValue[j] - '0') * Exponent(fromBase, exponent)); break; } } return decimalValue; } // end ProcessInput // ConvertToBase converts the decimal form of a number into // a new base by dividing the decimal until 0 and // storing the remainders in the output array void ConvertToBase(int decimal, const int inBase, char outPut[]) { int remainder(0); // char variable used to convert int back into char // for output char intToChar('0'); for (int i = 7; i >= 0; i--) { remainder = decimal % inBase; decimal /= inBase; // account for hex and if remainder is an int, // store as char in output array using char intToChar switch (remainder) { case 10: outPut[i] = 'A'; break; case 11: outPut[i] = 'B'; break; case 12: outPut[i] = 'C'; break; case 13: outPut[i] = 'D'; break; case 14: outPut[i] = 'E'; break; case 15: outPut[i] = 'F'; break; default: for (int j = 0; j < remainder; j++) {intToChar++;} outPut[i] = intToChar; intToChar = '0'; break; } } } // end ConvertToBase // converts input to decimal form by multiplying // each number place by its base and exponent double Exponent(const int number, const int exponent) { double value(1); for (int i = 1; i <= exponent; i++) value *= number; return value; } // end Exponent
Private
[
?
]
Run code
Submit