Opgaver i denne lektion   Gå til annoteret slide, hvor denne opgave er tilknyttet -- Tastaturgenvej: 'u'   Alfabetisk indeks   Kursets hjemmeside   

Opgaveløsning:
Iterativ løsning af 'uger, dage, timer, minutter og sekunder' opgaven


Her er min løsning:

#include <stdio.h>
#define SECONDS_PER_MINUTE 60
#define SECONDS_PER_HOUR (SECONDS_PER_MINUTE * 60)
#define SECONDS_PER_DAY (SECONDS_PER_HOUR* 24)
#define SECONDS_PER_WEEK (SECONDS_PER_DAY * 7)
#define UNIT_COUNT 5

void decompose_seconds_to_units(int input_seconds, int result_units[]);

int second_amount[] = {SECONDS_PER_WEEK, SECONDS_PER_DAY, SECONDS_PER_HOUR, SECONDS_PER_MINUTE};
char *units[] = {"weeks", "days", "hours", "minutes", "seconds"}; 

int main(void){
  int input_seconds, i;
  int result_units[UNIT_COUNT];

  /* Prompt for input: */
  printf("Read a non-negative number of seconds: ");
  scanf("%d", &input_seconds);

  decompose_seconds_to_units(input_seconds, result_units);

  /* Print the calculated units */
  for(i = 0; i < UNIT_COUNT; ++i)
    printf("%d %s   ", result_units[i], units[i]);

  return 0;
}

/* Decompose the seconds in input_seconds to the units enumerated in the global array units */
void decompose_seconds_to_units(int input_seconds, int result_units[]){
  int i = 0,
      rest_seconds = input_seconds,
      parts = sizeof(second_amount) / sizeof(int);

  while (i < parts){
    result_units[i] = rest_seconds / second_amount[i];
    rest_seconds = rest_seconds % second_amount[i];
    ++i;
  }
  result_units[i] = rest_seconds;
}

Det viser sig at være lidt omstændeligt at introducere en løkke, der beregner quotient og rest. Jeg tror faktisk ikke at det kan betale sig. Hvis der var endnu flere tidsdele, ville jeg dog klart overveje ideen (igen).