/*******************************************************************
********************************************************************
*                                                                  *
*  Nathan Balon                                                    *
*  SN# 3210 1717                                                   *
*  CIS 310                                                         *
*  Created on 1/13/03                                              *
*  Assignment #0                                                   *
*                                                                  *
********************************************************************
********************************************************************/

// The program is used to convert decimal numbers from 0 to 255 
// into binary, hex and BCD format.  The program then prints the 
// results to the user on standard output.


#include <iostream>
#include <iomanip>
using namespace std;

void printBinary(int);
void printHex(int);
void printBCD(int);

int main(){
	cout << "DECIMAL        BINARY              HEXIDECIMAL       BCD\n";
	for(int i =0; i < 256; i++){
		cout.setf(ios::left, ios::adjustfield);
		cout << setw(3) << i << "            "; 
		printBinary(i);
		cout << "           ";
		printHex(i);
		cout << "                ";
		printBCD(i);
		cout <<"\n";
	}

	return 0;
}

// converts a decimal number into binary and displays the result
void printBinary(int decimal){
	char bin_number[8];
	char bin_char[] = {'0' , '1'};
	int remainder = 0;

	for(int i = 0; i < 8; i++){
		remainder = decimal % 2;
		decimal /= 2;
		bin_number[i] = bin_char[remainder];
	}
	for(i = 7; i >= 0; i--){
		if(i == 3)
			cout << " ";
		cout << bin_number[i];
	}
}

// converts a decimal number into hex and dispalys the result
void printHex(int decimal){
	char hex_number [2];
	char hex_char[] = {'0', '1', '2', '3', '4', '5', '6', '7',
		               '8', '9', 'A', 'B', 'C', 'D', 'E', 'F'};
	int remainder =0;
	
	for(int i = 0; i < 2; i ++){
		remainder = decimal % 16;
		decimal /= 16;
		hex_number[i] = hex_char[remainder];
	}
	for(i = 1; i >= 0; i --)
		cout << hex_number[i];
}

// converts a deciaml number into BCD and displays the result
void printBCD(int decimal){
	char * bcd_number[4];
	char * bcd_char[] = {"0000", "0001", "0010", "0011", "0100",
		                 "0101", "0110", "0111", "1000", "1001"};
	int remainder = 0;

	for(int i = 0; i < 3; i ++){
		remainder = decimal % 10;
		decimal /= 10;
		bcd_number[i] = bcd_char[remainder];
	}
	for(i = 2; i >= 0; i --){
		cout << bcd_number[i] << " ";
	}
}

