Denne opgaver tager udgangspunkt i følgende udgave af Euclids algoritme, som vi har studeret nøje i denne lektion:
/* General condition loop - Euclid again*/ #include <stdio.h> int main(void) { int i, j, small, large, remainder; printf("Enter two positive integers: "); scanf("%d %d", &i, &j); small = i <= j ? i : j; large = i <= j ? j : i; while (small > 0){ remainder = large % small; large = small; small = remainder; } printf("GCD of %d and %d is %d\n\n", i, j, large); return 0; }
Hvad sker der hvis vi dropper ombytningen af i og j, og således risikerer at small bliver større end large i while-løkken? Her er en sådan version af programmet:
#include <stdio.h> int main(void) { int a, b, i, j, remainder; printf("Enter two non-negative integers: "); scanf("%d %d", &a, &b); i = a; j = b; /* We don't know if i > j */ while (j > 0){ remainder = i % j; i = j; j = remainder; } printf("GCD of %d and %d is %d\n\n", a, b, i); return 0; }
Virker dette - hvorfor, eller hvorfor ikke?
Løsningen til denne opgave er pt. ikke frigivet