Пример #1
0
int main(void)
{
    int turn = 1;
    int opponent;
    
    printf("************************************\nWelcome to Rodney's guessing game !\n************************************\n\n");
    
    printf("Enter a range of numbers from low to high \n");
    printf("Low: ");
    scanf("%d", &low);
    printf("High: ");
    scanf("%d", &high);
    
    bigNum(); // checks which number is bigger 
    int guess = (low + high)/2;// starts the guess in the middle 
    
    printf("I will guess your number in %d turns or less\n\n", logBase2(high - low, 2));// teslls how many turns at max needed logbase2(n)
    
    printf("Choose a number between %d and %d\n\n", low, high);
    
    
    do {
        printf("#%d) Is your number %d (1)yes (2)Higher (3)Lower ? ", turn, guess);
        scanf("%d", &opponent);
        
       
                   
                    
                    if(opponent == 2) // if higher
                    {
                                 low = guess;
                                 double x = (((double)guess + (double)high)/2.0);
                                 guess = x;
                                 
                                 if(x > guess)// if (double)x is a number higher than integer guess round up
                                { guess +=1; }
                                 
                                 
                    }
                    else if(opponent == 3) // if lower
                    {
                                  high = guess;
                                  guess = ((low + guess)/2);// always round down
                    }
                    
        
        
        turn++;
    }while(opponent != 1 );
    
    printf("\n\nYeah I guessed it right, I'm a computer that guessed your number in %d turns !!\n", turn-1);
    system("pause");    
}
BigNum<T> operator*(BigNum<T>& bigNum1, BigNum<T>& bigNum2)
{
	std::vector<T> vec;
	T sz = bigNum1.vec().size()+bigNum2.vec().size()-1;
	vec.reserve(sz);
	//initialize
	for (T i = 0; i < sz; ++i)
	{
		vec.push_back(0);
	}

	for (T i=0; i < bigNum2.vec().size(); ++i)
	{
		for (T j=0; j < bigNum1.vec().size(); ++j)
		{
			T val = bigNum2.vec()[i] * bigNum1.vec()[j];
			vec[i+j] += val;
		}
	}

	T carry = 0;
	for (T i = 0; i < sz; ++i)
	{
		vec[i] += carry;
		carry = vec[i]/10;
		vec[i] = vec[i]%10;
	}
	while (carry > 0)
	{
		vec.push_back(carry%10);
		carry = carry/10;
	}
	
	BigNum<T> bigNum(vec);
	return bigNum;
}
Point* HitProtein::fetchSubjectAlignedPart3DPointsForQuery(int queryStart,
		int queryEnd, string queryPart, int subjectStart, int subjectEnd,
		string subjectPart) {

	int sizeOfAlignment = subjectPart.size();
	//cout << "align size" << sizeOfAlignment << endl;
	Point* subjectPoints = (Point*) malloc(sizeof(Point) * sizeOfAlignment);

	int numOfGapsInSubjectPart = 0;
	for (int i = 0; i < sizeOfAlignment; i++) {
		if (subjectPart[i] == '-') {
			Point bigNum(10000, 10000, 10000);
			subjectPoints[i] = bigNum;

			numOfGapsInSubjectPart++;
		} else {

			subjectPoints[i] = CAlpha_XYZ[subjectStart + i
					- numOfGapsInSubjectPart - 1];

		}

	}
	/*
	cout << "subjectPoints:" << endl;
	for (int i = 0; i < sizeOfAlignment; i++) {
		if (i % 10 == 0) {
			cout << endl;
		}
		cout << subjectPoints[i].getX() << " ";
	}
	cout << endl;
	for (int i = 0; i < sizeOfAlignment; i++) {
		if (i % 10 == 0) {
			cout << endl;
		}
		cout << subjectPoints[i].getY() << " ";
	}
	cout << endl;
	for (int i = 0; i < sizeOfAlignment; i++) {
		if (i % 10 == 0) {
			cout << endl;
		}
		cout << subjectPoints[i].getZ() << " ";
	}

	cout << endl;*/
	int numOfGapsInQueryPart = 0;
	for (int i = 0; i < queryPart.size(); i++) {
		if (queryPart[i] == '-') {
			numOfGapsInQueryPart++;
		}
	}

	int candidateQueryAlignedPartLength = queryEnd - queryStart + 1;
	Point* candidateQueryAlignedPart3DCoords = (Point*) malloc(
			sizeof(Point) * candidateQueryAlignedPartLength);

	int gapOffset = 0;
	for (int i = 0; i < queryPart.size(); i++) {
		if (queryPart[i] == '-') {
			gapOffset++;
		} else {
			candidateQueryAlignedPart3DCoords[i - gapOffset] = subjectPoints[i];
		}

	}
/*
	cout<<"query Part All XYZs:"<<endl;
	for (int i = 0; i < sizeOfAlignment - numOfGapsInQueryPart; i++) {
		if (i % 10 == 0) {
			cout << endl;
		}
		cout << candidateQueryAlignedPart3DCoords[i].getX() << " ";

	}
	cout << endl;

	for (int i = 0; i < sizeOfAlignment - numOfGapsInQueryPart; i++) {
		if (i % 10 == 0) {
			cout << endl;
		}
		cout << candidateQueryAlignedPart3DCoords[i].getY() << " ";

	}
	cout << endl;
	for (int i = 0; i < sizeOfAlignment - numOfGapsInQueryPart; i++) {
		if (i % 10 == 0) {
			cout << endl;
		}
		cout << candidateQueryAlignedPart3DCoords[i].getZ() << " ";

	}

	cout << endl;
*/
	return candidateQueryAlignedPart3DCoords;

}