All pastes #33842 Raw Edit

Someone

public text v1 · immutable
#33842 ·published 2005-12-16 01:27 UTC
rendered paste body
/* main.cc
*******************
* Author: Thomas Karpiniec
* Last Modified: 16 Dec 2005
*/

#include <iostream>

void numberCycle(int totalNum, int currentNum, double* selectFrom, double* addTo);
void operatorCycle(int totalNum, int currentNum, int* addTo, double* numbers);
void orderCycle(int totalNum, int currentNum, double* numbers, int* operators, int* order);

int main(int nArgs, char* pszArgs[])
{
	double numbers[4] = {1.0,3.0,4.0,6.0};
	numberCycle(4,1,numbers,NULL);
	return 0;
}

void numberCycle(int totalNum, int currentNum, double* selectFrom, double* addTo)
{
	if (addTo == NULL)
		addTo = new double[totalNum];
	for (int i = 0; i < (totalNum-currentNum + 1); i++)
	{
		addTo[currentNum - 1] = selectFrom[i];
		if (totalNum - currentNum == 0)
		{
			std::cout << addTo[0] << addTo[1] << addTo[2] << addTo[3] << std::endl;
			// AddTo now points to an array of integers - pass it off.
			operatorCycle(3, 1, NULL, addTo);
		}
		else
		{	
			double newSelectFrom[totalNum];
			for (int j = 0; j < totalNum; j++)
				newSelectFrom[j] = selectFrom[j];
			newSelectFrom[i] = newSelectFrom[totalNum-currentNum];
			numberCycle(totalNum, currentNum + 1, newSelectFrom, addTo);
		}
	}
	
}

void operatorCycle(int totalNum, int currentNum, int* addTo, double* numbers)
{
	if (addTo == NULL)
		addTo = new int[totalNum];
	for (int i = 0; i < 4; i++)
	{
		addTo[currentNum-1] = i;
		if (currentNum == totalNum)
		{
			std::cout << addTo[0] << addTo[1] << addTo[2] << std::endl;
			// AddTo now points to an array of operators represented as integers
			// Grab it and the existing "numbers" array, and pass it off
			orderCycle(3,1,numbers,addTo,NULL);
		}
		else
		{
			operatorCycle(totalNum, currentNum + 1, addTo, numbers);
		}
	}
}

void orderCycle(int totalNum, int currentNum, double* numbers, int* operators, int* addTo)
{
	if (addTo == NULL)
		addTo = new int[totalNum];
	for (int i = 0; i < (totalNum - currentNum + 1); i++)
	{
		double current;
		switch (operators[currentNum - 1])
		{
			case 0:
				current = (double)(numbers[currentNum + i] + numbers[currentNum - 1 + i]);
				break;
			case 1:
				current = (double)(numbers[currentNum + i] - numbers[currentNum - 1 + i]);
				break;
			case 2:
				current = (double)(numbers[currentNum + i] * numbers[currentNum - 1 + i]);
				break;
			case 3:
				current = (double)(numbers[currentNum + i] / numbers[currentNum - 1 + i]);
				break;
			default:
				current = 0;
		}
		double newNumbers[totalNum + 1];
		int newOperators[totalNum];
		for (int j = 0; j < (totalNum + 1); j++)
		{
			newNumbers[j] = numbers[j];
			newOperators[j] = operators[i];
		}
		newNumbers[currentNum - 1] = current;
		for (int j = i; j < (totalNum - 1); j++)
		{
			newNumbers[j] = newNumbers[j+1];
			newOperators[j] = newOperators[j+1];
		}
		addTo[currentNum - 1] = i;
		orderCycle(totalNum, currentNum + 1, newNumbers, newOperators, addTo);
	}
}

void displayResult()
{
	
}