[ create a new paste ] login | about

Link: http://codepad.org/QEV9vHUq    [ raw code | output | fork ]

C++, pasted on Sep 11:
#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


Output:
1
2
3
4
5
6
7
8
9
10
11
12
cc1plus: warnings being treated as errors
In function 'int main(int, char**)':
Line 48: warning: comparison between signed and unsigned integer expressions
Line 66: warning: comparison between signed and unsigned integer expressions
In function 'int ProcessInput(int, int, char*, int)':
Line 88: warning: converting to 'int' from 'double'
Line 90: warning: converting to 'int' from 'double'
Line 92: warning: converting to 'int' from 'double'
Line 94: warning: converting to 'int' from 'double'
Line 96: warning: converting to 'int' from 'double'
Line 98: warning: converting to 'int' from 'double'
Line 100: warning: converting to 'int' from 'double'


Create a new paste based on this one


Comments: