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

Opgaveløsning:
Trinvis forfinelse af solveQuadraticEquation


Her er et bud på den ønskede, trinvise forfinelse af solveQuadraticEquation:

#include <stdio.h>
#include <math.h>

void solveQuadraticEquation(double a, double b, double c);
double discriminant(double a, double b, double c);
double root1(double a, double b, double discr);
double root2(double a, double b, double discr);

int main(void) {
  double a, b, c;
  printf("Enter coeficients a, b, and c: ");
  scanf("%lf %lf %lf", &a, &b, &c);
  while (!((a == 0) && (b == 0) && (c == 0))){
    if (a != 0)
      solveQuadraticEquation(a, b, c);  
    else
      printf("Coeficent a is not allowed to be 0\n");

    printf("Enter coeficients a, b, and c: ");
    scanf("%lf %lf %lf", &a, &b, &c);
  }

  return 0;
}

void solveQuadraticEquation(double a, double b, double c){
  double d;

  d = discriminant(a, b, c); 

  if (d < 0)
    printf("No roots\n");
  else if (d == 0)
    printf("One root: %f\n", root1(a, b, d));
  else 
    printf("Two roots: %f and %f\n",
           root1(a, b, d), root2(a, b, d));
}   

double discriminant(double a, double b, double c){
  return b * b - 4 * a * c;
}

double root1(double a, double b, double discr){
  return  (-b + sqrt(discr))/(2*a);
}

double root2(double a, double b, double discr){
  return  (-b - sqrt(discr))/(2*a);
}