File: Stare vježbe/vjezbe13/80__komandna_linija_2.c

  1. /*
  2.   80__komandna_linija_2.c
  3.   -----
  4.   Program sluzi za rjesavanje kvadratne jednadzbe a*x^2+b*x+c==0.
  5.   Koeficijenti se ucitavaju s komandne linije, a u slucaju da ih se ne
  6.   unese dovoljno na komandnoj liniji, dodatno se ucitavaju s tastature.
  7. */
  8.  
  9. #include <stdio.h>
  10. #include <math.h>
  11. #include <stdlib.h>
  12.  
  13. int kvad_jed(double a, double b, double c,
  14. double *x1, double *x2, double *y1, double *y2) {
  15. double d;
  16.  
  17. d=b*b-4*a*c;
  18. if (d==0) {
  19. *x1 = *x2 = -b / (2*a);
  20. return 1;
  21. }
  22. else if (d>0) {
  23. *x1 = (-b - sqrt(d) ) / (2 * a);
  24. *x2 = (-b + sqrt(d) ) / (2 * a);
  25. return 2;
  26. }
  27. else {
  28. *x1 = *x2 = -b / (2*a);
  29. *y1 = - ( *y2 = (sqrt(-d) / (2*a) ) );
  30. return -2;
  31. }
  32. }
  33.  
  34. int main(int argc, char *argv[]){
  35. double koef[3], re1, im1, re2 , im2;
  36. int i;
  37.  
  38. /* Ucitavamo koeficijente s komandne linije */
  39. for(i=0; i<argc-1; i++) {
  40. koef[i] = atof(argv[i+1]);
  41. }
  42. /* Ukoliko je uneseno manje od tri koeficijenta na komandnoj liniji,
  43.   preostale dodatno ucitavamo s tastature */
  44. for(; i<3; i++) {
  45. printf("Unesite %d. koef. u kvadratnoj jednadzbi: ", i+1);
  46. scanf("%lf", koef+i);
  47. }
  48.  
  49. i = kvad_jed(koef[0], koef[1], koef[2], &re1, &re2, &im1, &im2);
  50.  
  51. printf("\nKvadratna jednadzba %.3fx^2 + %.3fx + %.3f == 0",
  52. koef[0], koef[1], koef[2]);
  53. printf("\nima %d %s rjesenj%c:\n",
  54. abs(i), (i<0 ? "kompleksna" : ""), (i==1 ? 'e' : 'a'));
  55. if(i==1)
  56. printf("\tx=%lf\n", re1);
  57. else if (i==2)
  58. printf("\tx1=%lf,\n\tx2=%lf\n", re1, re2);
  59. else
  60. printf("\tx1=%lf+i*%lf,\n\tx2=%lf+i*%lf\n", re1, im1, re2, im2);
  61.  
  62. return 0;
  63. }
  64.