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

Opgaveløsning:
Dynamisk allokering og qsort


Her er min løsning:

#include <stdio.h>
#include <stdlib.h>
#include <time.h>

#define N 100

int element_compare(const void *ip1, const void *ip2);
double double_compare(const double d1, const double d2);

int main(void) {
  srand(time(NULL));
  double *store = malloc(N * sizeof(double));
  int i;

  if (store == NULL){
    printf("Cannot allocate sufficient memory. Bye\n");
    exit(EXIT_FAILURE);
  }

  for(i = 0; i < N; ++i)
    store[i] = (double)(rand())/3.0;

  for(i = 0; i < N; ++i){
    printf("%8.3f  ", store[i]);
    if (i%5 == 0) printf("\n");
  }

  qsort(store, N, sizeof(double), element_compare);  

  printf("\n");
  for(i = 0; i < N; ++i){
    printf("%8.3f  ", store[i]);
    if (i%5 == 0) printf("\n");
  }

  free(store);

  return 0;
}

int element_compare(const void *ip1, const void *ip2){
  double *ipi1 = (double *)ip1,       
         *ipi2 = (double *)ip2;

  return double_compare(*ipi1, *ipi2);
}

double double_compare(const double d1, const double d2){
  if (d1 < d2)
    return -1;
  else if (d1 > d2)
    return 1;
  else 
    return 0;
}