示例#1
0
int main()
{
	int t,n,i,res,q,l1,l2,p,s;
 
	t=get_int();
	while(t--){
		n=get_int();
		q=get_int();
		for(i=0;i<n;i++)
			a[i]=get_int();
		while(q--)
		{
			p=s=0;
			l1=get_int();
			l2=get_int();
			for(i=0;i<l1-1;i++)
				p=findGCD(p,a[i]);
			for(i=l2;i<n;i++)
				s=findGCD(s,a[i]);	
			writeInt(findGCD(p,s));
		}
	}
	return 0;
	
}
示例#2
0
//main function
int main(void){

//variables for main function
char *yes = "y";
char *no = "n";
int progcontinue = 0;
int continuetest = 0;	

printf("Brian Sator, masc0916\n\n");//output program setup information

	for(;;){
		//at the beginning of each cycle we check to see if we need to run the main routine again
		if(progcontinue != 0){
			break;//exit loop
		}
		printf("Please enter a fraction to reduce: ");//prompt user
		scanf("%25s",buffer1);//read from input
		flushinstream();//flush the input stream
		if(in_validate(buffer1) == 1){//the input string is a valid fraction proceed with reduction
			int numtest = atoi(num);
			int denomtest = atoi(denom);
			negative = is_negative(numtest, denomtest);
			commondivisor = abs(findGCD(numtest,denomtest));
			numtest = abs(numtest/commondivisor);
			denomtest = abs(denomtest/commondivisor);
			if(negative == 0){//check if negative
				printf("The reduced fraction is: %d/%d\n\n",numtest, denomtest);
			}else{
				printf("The reduced fraction is: -%d/%d\n\n",numtest, denomtest);
			}
			numtest = 0;
			numtest = 0;
			
		}
		else{//the input string is not valid, start routine over to prompt for new input
			continue;
		}
		
		while(continuetest == 0){//here we check to see if user wants to reduce another fraction
			printf("Do you want to reduce another fraction(y/n)? ");
			scanf("%25s",buffer1);
			flushinstream();
			if(buffer1[0] == *no){//end program
				progcontinue = 1;
				continuetest = 1;
			}else if(buffer1[0] == *yes){//new fraction
				continuetest = 1;
			}
			else{//invalid input
				printf("Sorry, invalid input\n\n");
			}
		}
		continuetest = 0;
		memset(num,0,30);
		memset(denom,0,30);
	}
	
printf("Program Terminated\n");
return 0;//exit program
}
示例#3
0
int findGCD(int a, int b)
{
if (b)
return findGCD(b, a % b);
else
return a;
}
示例#4
0
//find the GCD of the fraction, this is a recursive method
int findGCD(int a, int b){
	if(b == 0){
		return a;
	}
	else{
		return findGCD(b, a%b);
	}
}
示例#5
0
 int findGCD(int a, int b) {
 	a = abs(a);
 	b = abs(b);
 	if (b == 0){
 		return a;
 	} 
 	else {
 		findGCD(b, a % b);
 	}
 }
示例#6
0
  	void Rational (int n, int d) {
  		if(d < 0) {
  			n = (n * -1);
  			d = (d * -1);
  		}
  		int gcd = findGCD(n, d);

  		n = n / gcd;
  		d = d / gcd;
  	}
示例#7
0
文件: workshop5.c 项目: sorash/ipc144
// finds the greatest common denominator with 2 given numbers
int findGCD(int a, int b)
{
	
	// variable for remainder of the two numbers
	int remainder;

	// if the remainder is zero, the 2nd number is the gcd
	if((remainder = b % a) == 0)
		return a;
	else	// else try to find the gcd with the remainder
		findGCD(remainder, b);
}
示例#8
0
文件: workshop5.c 项目: sorash/ipc144
// simplifies a given fraction
void simplify(int *num, int *denom)
{

	// vairalbes for simplified numerator and denominator, and greatest common denominator
	int simpNum, simpDenom, gcd;

	// if numbers are the same, return 1
	if(*num == *denom)
		*num = 1, *denom = 1;
	else	// else find the greatest common denominator
	{

		gcd = findGCD(*num, *denom);
		*num /= gcd;
		*denom /= gcd;
	}		
}
void BigRational::init(const BigInt &numerator, const BigInt &denominator) {
  DEFINEMETHODNAME;
  if(denominator.isZero()) {
    throwInvalidArgumentException(method, _T("Denominator is zero"));
  }

  DigitPool *pool = getDigitPool();
  if(numerator.isZero()) { // zero always 0/1
    m_numerator   = pool->get0();
    m_denominator = pool->get1();
  } else {
    const BigInt gcd = findGCD(BigInt(fabs(numerator)),BigInt(fabs(denominator)));
    m_numerator   = numerator / gcd;
    m_denominator = denominator / gcd;
    if(denominator.isNegative()) { // Negative numbers are represented with negative numerator and positive denominator
      m_numerator   = -m_numerator;
      m_denominator = -m_denominator;
    }
  }
}
示例#10
0
int main(void)
{
	DDRA = 0xFF; PORTA = 0x00;
	DDRB = 0xFF; PORTB = 0x00;
	DDRC = 0xF0; PORTC = 0x0F;
	DDRD = 0xFF; PORTD = 0x00;
	
	//period for the tasks
	unsigned long int GameTask_per = 50;
	unsigned long int Keypad_per = 50;
	unsigned long int GameOfSnakeEasy_per = 400;
	unsigned long int UpdateMatrix_per = 1;
	unsigned long int GenerateFruit_per = 50;
	unsigned long int GameOfSnakeNormal_per = 200;
	unsigned long int GameOfSnakeHard_per = 200;
	unsigned long int SpeakerTick_per = 3;
	
	//Calculating GCD
	unsigned long int tmpGCD;
	tmpGCD = findGCD(Keypad_per,GameOfSnakeEasy_per);
	tmpGCD = findGCD(tmpGCD,UpdateMatrix_per);
	tmpGCD = findGCD(tmpGCD,GenerateFruit_per);
	tmpGCD = findGCD(tmpGCD,GameTask_per);
	tmpGCD = findGCD(tmpGCD,GameOfSnakeNormal_per);
	tmpGCD = findGCD(tmpGCD,GameOfSnakeHard_per);
	
	//Greatest common divisor for all tasks or smallest time unit for tasks.
	unsigned long int GCD = tmpGCD;
	
	//Recalculate GCd periods for scheduler
	unsigned long int GameTask_period = GameTask_per/GCD;
	unsigned long int Keypad_period = Keypad_per/GCD;
	unsigned long int GameOfSnakeEasy_period = GameOfSnakeEasy_per/GCD;
	unsigned long int UpdateMatrix_period = UpdateMatrix_per/GCD;
	unsigned long int GenerateFruit_period = GenerateFruit_per/GCD;
	unsigned long int GameOfSnakeNormal_period = GameOfSnakeNormal_per/GCD;
	unsigned long int GameOfSnakeHard_period = GameOfSnakeHard_per/GCD;
	long double SpeakerTick_period = SpeakerTick_per/GCD;
	
	//Declare an array of tasks
	static task task0, task1, task2, task3, task4, task5, task6, task7;
	task *tasks[] = {&task0, &task1, &task2, &task3, &task4, &task5, &task6, &task7};
	const unsigned short numTasks = sizeof(tasks)/sizeof(task*);

	//Task 0
	task0.state = -1;
	task0.period = GameTask_period;
	task0.elapsedTime = GameTask_period;
	task0.TickFct = &GameTask;

	//Task 1
	task1.state = -1;
	task1.period = Keypad_period;
	task1.elapsedTime = Keypad_period;
	task1.TickFct = &GetKeyPress;

	//Task 2
	task2.state = -1;
	task2.period = GameOfSnakeEasy_period;
	task2.elapsedTime = GameOfSnakeEasy_period;
	task2.TickFct = &GameOfSnakeEasy;

	//Task 3
	task3.state = -1;
	task3.period = UpdateMatrix_period;
	task3.elapsedTime = UpdateMatrix_period;
	task3.TickFct = &UpdateMatrix;
	
	//Task 4
	task4.state = -1;
	task4.period = UpdateMatrix_period;
	task4.elapsedTime = UpdateMatrix_period;
	task4.TickFct = &GenerateFruit;
	
	//Task 5
	task5.state = -1;
	task5.period = GameOfSnakeNormal_period;
	task5.elapsedTime = GameOfSnakeNormal_period;
	task5.TickFct = &GameOfSnakeNormal;
	
	//Task 6
	task6.state = -1;
	task6.period = GameOfSnakeHard_period;
	task6.elapsedTime = GameOfSnakeHard_period;
	task6.TickFct = &GameOfSnakeHard;
	
	//Task 7
	task7.state = -1;
	task7.period = SpeakerTick_period;
	task7.elapsedTime = SpeakerTick_period;
	task7.TickFct = &Speaker_Func;

	TimerSet(GCD);
	TimerOn();

	unsigned short i;
	gameTaskState = -1;
	KeyState = -1;
	GameStateEasy = -1;
	GameStateNormal = -1;
	GameStateHard = -1;
	UpdateState = -1;
	Fruit_Status = -1;
	dir = -1;

	while(1)
	{
		for (i=0; i < numTasks; i++)
		{
			if (tasks[i]->elapsedTime == tasks[i]->period)
			{
				tasks[i]->state = tasks[i]->TickFct(tasks[i]->state);
				tasks[i]->elapsedTime = 0;
			}
			tasks[i]->elapsedTime += 1;
		}
		while(!TimerFlag);
		TimerFlag = 0;
	}

	return 0;
}
示例#11
0
int main(void)
{
	DDRA = 0xFF; PORTA = 0x00;
	DDRB = 0xFF; PORTB = 0x00;
	DDRC = 0x00; PORTC = 0xFF;
	DDRD = 0xFF; PORTD = 0x00;
	//DDRD = 0xFF; PORTD = 0x00;
	
	//period for the tasks
	unsigned long int LI_per = 4;
	unsigned long int LT_per = 2;
	unsigned long int ScoreTask_per = 5;
	unsigned long int ResetTask_per = 5;
	unsigned long int StartTask_per = 5;
	unsigned long int EasyTask_per = 5;
	unsigned long int NormalTask_per = 5;
	unsigned long int HardTask_per = 5;
	unsigned long int LoseTask_per = 5;
		
	//Calculating GCD
	unsigned long int tmpGCD = 1;
	tmpGCD = findGCD(LI_per,LT_per);
	tmpGCD = findGCD(tmpGCD,ScoreTask_per);
	
	//Greatest common divisor for all tasks or smallest time unit for tasks.
	unsigned long int GCD = tmpGCD;
	
	//Recalculate GCd periods for scheduler
	unsigned long int LI_period = LI_per/GCD;
	unsigned long int LT_period = LT_per/GCD;
	unsigned long int ScoreTask_period = ScoreTask_per/GCD;
	unsigned long int ResetTask_period = ResetTask_per/GCD;
	unsigned long int StartTask_period = StartTask_per/GCD;
	unsigned long int EasyTask_period = EasyTask_per/GCD;
	unsigned long int NormalTask_period = NormalTask_per/GCD;
	unsigned long int HardTask_period = HardTask_per/GCD;
	unsigned long int LoseTask_period = LoseTask_per/GCD;
	
	//Declare an array of tasks
	static task task1, task2, task3, task4, task5, task6, task7, task8, task9;
	task *tasks[] = {&task1, &task2, &task3, &task4, &task5, &task6, &task7, &task8, &task9};
	const unsigned short numTasks = sizeof(tasks)/sizeof(task*);

	//Task 1
	task1.state = -1;
	task1.period = LI_period;
	task1.elapsedTime = LI_period;
	task1.TickFct = &LI_Tick;

	//Task 2
	task2.state = -1;
	task2.period = LT_period;
	task2.elapsedTime = LT_period;
	task2.TickFct = &LT_Tick;

	//Task3
	task3.state = -1;
	task3.period = ScoreTask_period;
	task3.elapsedTime = ScoreTask_period;
	task3.TickFct = &ScoreTask;
	
	//Task4
	task4.state = -1;
	task4.period = ResetTask_period;
	task4.elapsedTime = ResetTask_period;
	task4.TickFct = &ResetTask;
	
	//Task5
	task5.state = -1;
	task5.period = StartTask_period;
	task5.elapsedTime = StartTask_period;
	task5.TickFct = &StartTask;
	
	//Task6
	task6.state = -1;
	task6.period = EasyTask_period;
	task6.elapsedTime = EasyTask_period;
	task6.TickFct = &EasyTask;
	
	//Task7
	task7.state = -1;
	task7.period = NormalTask_period;
	task7.elapsedTime = NormalTask_period;
	task7.TickFct = &NormalTask;
	
	//Task8
	task8.state = -1;
	task8.period = HardTask_period;
	task8.elapsedTime = HardTask_period;
	task8.TickFct = &HardTask;
	
	//Task9
	task9.state = -1;
	task9.period = LoseTask_period;
	task9.elapsedTime = LoseTask_period;
	task9.TickFct = &LoseTask;
	
	TimerSet(GCD);
	TimerOn();

	unsigned short i;
	LI_State = -1;
	LT_State = -1;
	ScoreState = -1;
	ResetState = -1;
	StartState = -1;
	EasyState = -1;
	NormalState = -1;
	HardState = -1;
	LoseState = -1;

	while(1)
	{
		for (i=0; i < numTasks; i++) 
		{
			if (tasks[i]->elapsedTime == tasks[i]->period)
			{
				tasks[i]->state = tasks[i]->TickFct(tasks[i]->state);
				tasks[i]->elapsedTime = 0;
			}
			tasks[i]->elapsedTime += 1;
		}
		while(!TimerFlag);
		TimerFlag = 0;
	}

	return 0;
}
int main(void)
{
	DDRA = 0xF0; PORTA = 0x0F; // PORTA[3:0]: IN -- KP rows
							   // PORTA[7:4]: OUT -- select KP Columns
	DDRB = 0xFF; PORTB = 0x00; // PORTB: out -- LEDs
	DDRC = 0xFF; PORTC = 0x00;	
	DDRD = 0xFF; PORTD = 0x00; // PORTD[0:3] LEDs
							   // PORTD[4:5] Unused
							   // PORTD[6:7] LCD
	
	
	// Period for the tasks
	unsigned long int ReadKeypadSM_calc = 50;
	unsigned long int displayKPInputSM_calc = 100;
	
	//Calculating GCD
	unsigned long int GCD = 1;
	GCD = findGCD(ReadKeypadSM_calc, displayKPInputSM_calc);
	
	//recalculate GCD periods for scheduler
	unsigned long ReadKeypadSM_period = ReadKeypadSM_calc/GCD;
	unsigned long displayKPInputSM_period = displayKPInputSM_calc/GCD;
	
	// Declare an array of tasks
	static task task1, task2;
	task *tasks[] = {&task1, &task2};
	const unsigned short numTasks = sizeof(tasks)/sizeof(task*);
	
	//Task 1
	task1.state = -1;
	task1.period = ReadKeypadSM_period;
	task1.elapsedTime = ReadKeypadSM_period;
	task1.TickFct = &ReadKeypadSMtick;

	//Task 2
	task2.state = -1;
	task2.period = displayKPInputSM_period;
	task2.elapsedTime = displayKPInputSM_period;
	task2.TickFct = &displayKPInputSMtick;
	
	//Set Timer and turn on
	TimerSet(GCD);
	TimerOn();
	
	//Init LCD
	LCD_init();
	LCD_DisplayString(1, "Welcome to the  breadboard!");
	//scheduler for loop iterator
	unsigned short i;
    while(1)
    {
		for(i = 0; i < numTasks; i++){
			// task is ready to tick
			if(tasks[i]->elapsedTime == tasks[i]->period){
				// Setting next state for task
				tasks[i]->state = tasks[i]->TickFct(tasks[i]->state);	
				// Reset elapsed time for next tick.
				tasks[i]->elapsedTime = 0;
			}
			tasks[i]->elapsedTime += 1;
		}
		while(!TimerFlag);
		TimerFlag = 0;
    }
	return 0;
}