fork download
  1. #include <stdio.h>
  2. #include <math.h>
  3.  
  4. typedef struct {
  5. double real;
  6. double imag;
  7. } BilanganKompleks;
  8.  
  9. void akarKuadrat(double a, double b, double c);
  10. BilanganKompleks tambah(BilanganKompleks c1, BilanganKompleks c2);
  11. BilanganKompleks kurang(BilanganKompleks c1, BilanganKompleks c2);
  12. BilanganKompleks kali(BilanganKompleks c1, BilanganKompleks c2);
  13. BilanganKompleks bagi(BilanganKompleks c1, BilanganKompleks c2);
  14. void cetakKompleks(char *label, BilanganKompleks c);
  15.  
  16. int main() {
  17. double a, b, c;
  18. printf("Input a, b, c : ");
  19. scanf("%lf %lf %lf", &a, &b, &c);
  20. akarKuadrat(a, b, c);
  21.  
  22. BilanganKompleks c1, c2, hasil;
  23.  
  24. printf("Bilangan kompleks pertama: ");
  25. scanf("%lf %lf", &c1.real, &c1.imag);
  26. printf("Bilangan kompleks kedua: ");
  27. scanf("%lf %lf", &c2.real, &c2.imag);
  28.  
  29. hasil = tambah(c1, c2);
  30. cetakKompleks("Hasil Penjumlahan", hasil);
  31.  
  32. hasil = kurang(c1, c2);
  33. cetakKompleks("Hasil Pengurangan", hasil);
  34.  
  35. hasil = kali(c1, c2);
  36. cetakKompleks("Hasil Perkalian ", hasil);
  37.  
  38. hasil = bagi(c1, c2);
  39. cetakKompleks("Hasil Pembagian ", hasil);
  40.  
  41. return 0;
  42. }
  43.  
  44. void akarKuadrat(double a, double b, double c) {
  45. double diskriminan, akar1, akar2;
  46.  
  47. diskriminan = b * b - 4 * a * c;
  48.  
  49. if (diskriminan < 0) {
  50. BilanganKompleks x1, x2;
  51. x1.real = -b / (2 * a);
  52. x1.imag = sqrt(-diskriminan) / (2 * a);
  53. x2.real = x1.real;
  54. x2.imag = -x1.imag;
  55. cetakKompleks("x1 =", x1);
  56. cetakKompleks("x2 =", x2);
  57. } else if (diskriminan == 0) {
  58. akar1 = -b / (2 * a);
  59. printf("x1 = %.2lf , x2 = %.2lf\n", akar1);
  60. } else {
  61. akar1 = (-b + sqrt(diskriminan)) / (2 * a);
  62. akar2 = (-b - sqrt(diskriminan)) / (2 * a);
  63. printf("x1 = %.2lf\n", akar1);
  64. printf("x2 = %.2lf\n", akar2);
  65. }
  66. }
  67.  
  68. BilanganKompleks tambah(BilanganKompleks c1, BilanganKompleks c2) {
  69. BilanganKompleks hasil = {c1.real + c2.real, c1.imag + c2.imag};
  70. return hasil;
  71. }
  72.  
  73. BilanganKompleks kurang(BilanganKompleks c1, BilanganKompleks c2) {
  74. BilanganKompleks hasil = {c1.real - c2.real, c1.imag - c2.imag};
  75. return hasil;
  76. }
  77.  
  78. BilanganKompleks kali(BilanganKompleks c1, BilanganKompleks c2) {
  79. BilanganKompleks hasil;
  80. hasil.real = c1.real * c2.real - c1.imag * c2.imag;
  81. hasil.imag = c1.real * c2.imag + c1.imag * c2.real;
  82. return hasil;
  83. }
  84.  
  85. BilanganKompleks bagi(BilanganKompleks c1, BilanganKompleks c2) {
  86. BilanganKompleks hasil;
  87. double penyebut = c2.real * c2.real + c2.imag * c2.imag;
  88. if (penyebut == 0) {
  89. printf("Error!\n");
  90. BilanganKompleks nol = {0, 0};
  91. return nol;
  92. }
  93. hasil.real = (c1.real * c2.real + c1.imag * c2.imag) / penyebut;
  94. hasil.imag = (c1.imag * c2.real - c1.real * c2.imag) / penyebut;
  95. return hasil;
  96. }
  97.  
  98. void cetakKompleks(char *label, BilanganKompleks c) {
  99. if (c.imag >= 0) {
  100. printf("%s: %.2lf + %.2lfi\n", label, c.real, c.imag);
  101. } else {
  102. printf("%s: %.2lf - %.2lfi\n", label, c.real, -c.imag);
  103. }
  104. }
  105.  
Success #stdin #stdout 0.01s 5296KB
stdin
Standard input is empty
stdout
Input a, b, c : x1 = -0.00 , x2 = 0.00
Bilangan kompleks pertama: Bilangan kompleks kedua: Hasil Penjumlahan: 0.00 + 0.00i
Hasil Pengurangan: -0.00 - 0.00i
Hasil Perkalian  : 0.00 + 0.00i
Error!
Hasil Pembagian  : 0.00 + 0.00i