#include <stdio.h>
#include <math.h>
typedef struct {
double real;
double imag;
} BilanganKompleks;
void cariAkarKuadrat(double a, double b, double c);
BilanganKompleks tambah(BilanganKompleks c1, BilanganKompleks c2);
BilanganKompleks kurang(BilanganKompleks c1, BilanganKompleks c2);
BilanganKompleks kali(BilanganKompleks c1, BilanganKompleks c2);
BilanganKompleks bagi(BilanganKompleks c1, BilanganKompleks c2);
void cetakKompleks(char *label, BilanganKompleks c);
int main() {
double a, b, c;
scanf("%lf %lf %lf", &a, &b, &c);
cariAkarKuadrat(a, b, c);
BilanganKompleks c1, c2, hasil;
printf("Bilangan kompleks pertama: "); scanf("%lf %lf", &c1.real, &c1.imag);
printf("Bilangan kompleks kedua: "); scanf("%lf %lf", &c2.real, &c2.imag);
hasil = tambah(c1, c2);
cetakKompleks("Hasil Penjumlahan", hasil);
hasil = kurang(c1, c2);
cetakKompleks("Hasil Pengurangan", hasil);
hasil = kali(c1, c2);
cetakKompleks("Hasil Perkalian ", hasil);
hasil = bagi(c1, c2);
cetakKompleks("Hasil Pembagian ", hasil);
return 0;
}
void cariAkarKuadrat(double a, double b, double c) {
double diskriminan, akar1, akar2;
diskriminan = b * b - 4 * a * c;
if (diskriminan < 0) {
BilanganKompleks x1, x2;
x1.real = -b / (2 * a);
x1
.imag
= sqrt(-diskriminan
) / (2 * a
); x2.real = x1.real;
x2.imag = -x1.imag;
cetakKompleks("x1 =", x1);
cetakKompleks("x2 =", x2);
} else if (diskriminan == 0) {
akar1 = -b / (2 * a);
printf("Akar-akarnya kembar: x1 = x2 = %.2lf\n", akar1
); } else {
akar1
= (-b
+ sqrt(diskriminan
)) / (2 * a
); akar2
= (-b
- sqrt(diskriminan
)) / (2 * a
); printf("x1 = %.2lf\n", akar1
); printf("x2 = %.2lf\n", akar2
); }
}
BilanganKompleks tambah(BilanganKompleks c1, BilanganKompleks c2) {
BilanganKompleks hasil = {c1.real + c2.real, c1.imag + c2.imag};
return hasil;
}
BilanganKompleks kurang(BilanganKompleks c1, BilanganKompleks c2) {
BilanganKompleks hasil = {c1.real - c2.real, c1.imag - c2.imag};
return hasil;
}
BilanganKompleks kali(BilanganKompleks c1, BilanganKompleks c2) {
BilanganKompleks hasil;
hasil.real = c1.real * c2.real - c1.imag * c2.imag;
hasil.imag = c1.real * c2.imag + c1.imag * c2.real;
return hasil;
}
BilanganKompleks bagi(BilanganKompleks c1, BilanganKompleks c2) {
BilanganKompleks hasil;
double penyebut = c2.real * c2.real + c2.imag * c2.imag;
if (penyebut == 0) {
printf("Error: Pembagian dengan nol!\n"); BilanganKompleks nol = {0, 0};
return nol;
}
hasil.real = (c1.real * c2.real + c1.imag * c2.imag) / penyebut;
hasil.imag = (c1.imag * c2.real - c1.real * c2.imag) / penyebut;
return hasil;
}
void cetakKompleks(char *label, BilanganKompleks c) {
if (c.imag >= 0) {
printf("%s: %.2lf + %.2lfi\n", label
, c
.real
, c
.imag
); } else {
printf("%s: %.2lf - %.2lfi\n", label
, c
.real
, -c
.imag
); }
}
I2luY2x1ZGUgPHN0ZGlvLmg+CiNpbmNsdWRlIDxtYXRoLmg+Cgp0eXBlZGVmIHN0cnVjdCB7CiAgICBkb3VibGUgcmVhbDsKICAgIGRvdWJsZSBpbWFnOwp9IEJpbGFuZ2FuS29tcGxla3M7Cgp2b2lkIGNhcmlBa2FyS3VhZHJhdChkb3VibGUgYSwgZG91YmxlIGIsIGRvdWJsZSBjKTsKQmlsYW5nYW5Lb21wbGVrcyB0YW1iYWgoQmlsYW5nYW5Lb21wbGVrcyBjMSwgQmlsYW5nYW5Lb21wbGVrcyBjMik7CkJpbGFuZ2FuS29tcGxla3Mga3VyYW5nKEJpbGFuZ2FuS29tcGxla3MgYzEsIEJpbGFuZ2FuS29tcGxla3MgYzIpOwpCaWxhbmdhbktvbXBsZWtzIGthbGkoQmlsYW5nYW5Lb21wbGVrcyBjMSwgQmlsYW5nYW5Lb21wbGVrcyBjMik7CkJpbGFuZ2FuS29tcGxla3MgYmFnaShCaWxhbmdhbktvbXBsZWtzIGMxLCBCaWxhbmdhbktvbXBsZWtzIGMyKTsKdm9pZCBjZXRha0tvbXBsZWtzKGNoYXIgKmxhYmVsLCBCaWxhbmdhbktvbXBsZWtzIGMpOwoKaW50IG1haW4oKSB7CiAgICBkb3VibGUgYSwgYiwgYzsKICAgIHByaW50ZigiSW5wdXQgYSwgYiwgYyA6ICIpOwogICAgc2NhbmYoIiVsZiAlbGYgJWxmIiwgJmEsICZiLCAmYyk7CiAgICBjYXJpQWthckt1YWRyYXQoYSwgYiwgYyk7CgogICAgQmlsYW5nYW5Lb21wbGVrcyBjMSwgYzIsIGhhc2lsOwoKICAgIHByaW50ZigiQmlsYW5nYW4ga29tcGxla3MgcGVydGFtYTogIik7CiAgICBzY2FuZigiJWxmICVsZiIsICZjMS5yZWFsLCAmYzEuaW1hZyk7CiAgICBwcmludGYoIkJpbGFuZ2FuIGtvbXBsZWtzIGtlZHVhOiAiKTsKICAgIHNjYW5mKCIlbGYgJWxmIiwgJmMyLnJlYWwsICZjMi5pbWFnKTsKCiAgICBoYXNpbCA9IHRhbWJhaChjMSwgYzIpOwogICAgY2V0YWtLb21wbGVrcygiSGFzaWwgUGVuanVtbGFoYW4iLCBoYXNpbCk7CgogICAgaGFzaWwgPSBrdXJhbmcoYzEsIGMyKTsKICAgIGNldGFrS29tcGxla3MoIkhhc2lsIFBlbmd1cmFuZ2FuIiwgaGFzaWwpOwoKICAgIGhhc2lsID0ga2FsaShjMSwgYzIpOwogICAgY2V0YWtLb21wbGVrcygiSGFzaWwgUGVya2FsaWFuICAiLCBoYXNpbCk7CgogICAgaGFzaWwgPSBiYWdpKGMxLCBjMik7CiAgICBjZXRha0tvbXBsZWtzKCJIYXNpbCBQZW1iYWdpYW4gICIsIGhhc2lsKTsKICAgIAogICAgcmV0dXJuIDA7Cn0KCnZvaWQgY2FyaUFrYXJLdWFkcmF0KGRvdWJsZSBhLCBkb3VibGUgYiwgZG91YmxlIGMpIHsKICAgIGRvdWJsZSBkaXNrcmltaW5hbiwgYWthcjEsIGFrYXIyOwoKICAgIGRpc2tyaW1pbmFuID0gYiAqIGIgLSA0ICogYSAqIGM7CgogICAgaWYgKGRpc2tyaW1pbmFuIDwgMCkgewogICAgICAgIEJpbGFuZ2FuS29tcGxla3MgeDEsIHgyOwogICAgICAgIHgxLnJlYWwgPSAtYiAvICgyICogYSk7CiAgICAgICAgeDEuaW1hZyA9IHNxcnQoLWRpc2tyaW1pbmFuKSAvICgyICogYSk7CiAgICAgICAgeDIucmVhbCA9IHgxLnJlYWw7CiAgICAgICAgeDIuaW1hZyA9IC14MS5pbWFnOwogICAgICAgIGNldGFrS29tcGxla3MoIngxID0iLCB4MSk7CiAgICAgICAgY2V0YWtLb21wbGVrcygieDIgPSIsIHgyKTsKICAgIH0gZWxzZSBpZiAoZGlza3JpbWluYW4gPT0gMCkgewogICAgICAgIGFrYXIxID0gLWIgLyAoMiAqIGEpOwogICAgICAgIHByaW50ZigiQWthci1ha2FybnlhIGtlbWJhcjogeDEgPSB4MiA9ICUuMmxmXG4iLCBha2FyMSk7CiAgICB9IGVsc2UgewogICAgICAgIGFrYXIxID0gKC1iICsgc3FydChkaXNrcmltaW5hbikpIC8gKDIgKiBhKTsKICAgICAgICBha2FyMiA9ICgtYiAtIHNxcnQoZGlza3JpbWluYW4pKSAvICgyICogYSk7CiAgICAgICAgcHJpbnRmKCJ4MSA9ICUuMmxmXG4iLCBha2FyMSk7CiAgICAgICAgcHJpbnRmKCJ4MiA9ICUuMmxmXG4iLCBha2FyMik7CiAgICB9Cn0KCkJpbGFuZ2FuS29tcGxla3MgdGFtYmFoKEJpbGFuZ2FuS29tcGxla3MgYzEsIEJpbGFuZ2FuS29tcGxla3MgYzIpIHsKICAgIEJpbGFuZ2FuS29tcGxla3MgaGFzaWwgPSB7YzEucmVhbCArIGMyLnJlYWwsIGMxLmltYWcgKyBjMi5pbWFnfTsKICAgIHJldHVybiBoYXNpbDsKfQoKQmlsYW5nYW5Lb21wbGVrcyBrdXJhbmcoQmlsYW5nYW5Lb21wbGVrcyBjMSwgQmlsYW5nYW5Lb21wbGVrcyBjMikgewogICAgQmlsYW5nYW5Lb21wbGVrcyBoYXNpbCA9IHtjMS5yZWFsIC0gYzIucmVhbCwgYzEuaW1hZyAtIGMyLmltYWd9OwogICAgcmV0dXJuIGhhc2lsOwp9CgpCaWxhbmdhbktvbXBsZWtzIGthbGkoQmlsYW5nYW5Lb21wbGVrcyBjMSwgQmlsYW5nYW5Lb21wbGVrcyBjMikgewogICAgQmlsYW5nYW5Lb21wbGVrcyBoYXNpbDsKICAgIGhhc2lsLnJlYWwgPSBjMS5yZWFsICogYzIucmVhbCAtIGMxLmltYWcgKiBjMi5pbWFnOwogICAgaGFzaWwuaW1hZyA9IGMxLnJlYWwgKiBjMi5pbWFnICsgYzEuaW1hZyAqIGMyLnJlYWw7CiAgICByZXR1cm4gaGFzaWw7Cn0KCkJpbGFuZ2FuS29tcGxla3MgYmFnaShCaWxhbmdhbktvbXBsZWtzIGMxLCBCaWxhbmdhbktvbXBsZWtzIGMyKSB7CiAgICBCaWxhbmdhbktvbXBsZWtzIGhhc2lsOwogICAgZG91YmxlIHBlbnllYnV0ID0gYzIucmVhbCAqIGMyLnJlYWwgKyBjMi5pbWFnICogYzIuaW1hZzsKICAgIGlmIChwZW55ZWJ1dCA9PSAwKSB7CiAgICAgICAgcHJpbnRmKCJFcnJvcjogUGVtYmFnaWFuIGRlbmdhbiBub2whXG4iKTsKICAgICAgICBCaWxhbmdhbktvbXBsZWtzIG5vbCA9IHswLCAwfTsKICAgICAgICByZXR1cm4gbm9sOwogICAgfQogICAgaGFzaWwucmVhbCA9IChjMS5yZWFsICogYzIucmVhbCArIGMxLmltYWcgKiBjMi5pbWFnKSAvIHBlbnllYnV0OwogICAgaGFzaWwuaW1hZyA9IChjMS5pbWFnICogYzIucmVhbCAtIGMxLnJlYWwgKiBjMi5pbWFnKSAvIHBlbnllYnV0OwogICAgcmV0dXJuIGhhc2lsOwp9Cgp2b2lkIGNldGFrS29tcGxla3MoY2hhciAqbGFiZWwsIEJpbGFuZ2FuS29tcGxla3MgYykgewogICAgaWYgKGMuaW1hZyA+PSAwKSB7CiAgICAgICAgcHJpbnRmKCIlczogJS4ybGYgKyAlLjJsZmlcbiIsIGxhYmVsLCBjLnJlYWwsIGMuaW1hZyk7CiAgICB9IGVsc2UgewogICAgICAgIHByaW50ZigiJXM6ICUuMmxmIC0gJS4ybGZpXG4iLCBsYWJlbCwgYy5yZWFsLCAtYy5pbWFnKTsKICAgIH0KfQo=
#include <stdio.h>
#include <math.h>
typedef struct {
double real;
double imag;
} BilanganKompleks;
void cariAkarKuadrat(double a, double b, double c);
BilanganKompleks tambah(BilanganKompleks c1, BilanganKompleks c2);
BilanganKompleks kurang(BilanganKompleks c1, BilanganKompleks c2);
BilanganKompleks kali(BilanganKompleks c1, BilanganKompleks c2);
BilanganKompleks bagi(BilanganKompleks c1, BilanganKompleks c2);
void cetakKompleks(char *label, BilanganKompleks c);
int main() {
double a, b, c;
printf("Input a, b, c : ");
scanf("%lf %lf %lf", &a, &b, &c);
cariAkarKuadrat(a, b, c);
BilanganKompleks c1, c2, hasil;
printf("Bilangan kompleks pertama: ");
scanf("%lf %lf", &c1.real, &c1.imag);
printf("Bilangan kompleks kedua: ");
scanf("%lf %lf", &c2.real, &c2.imag);
hasil = tambah(c1, c2);
cetakKompleks("Hasil Penjumlahan", hasil);
hasil = kurang(c1, c2);
cetakKompleks("Hasil Pengurangan", hasil);
hasil = kali(c1, c2);
cetakKompleks("Hasil Perkalian ", hasil);
hasil = bagi(c1, c2);
cetakKompleks("Hasil Pembagian ", hasil);
return 0;
}
void cariAkarKuadrat(double a, double b, double c) {
double diskriminan, akar1, akar2;
diskriminan = b * b - 4 * a * c;
if (diskriminan < 0) {
BilanganKompleks x1, x2;
x1.real = -b / (2 * a);
x1.imag = sqrt(-diskriminan) / (2 * a);
x2.real = x1.real;
x2.imag = -x1.imag;
cetakKompleks("x1 =", x1);
cetakKompleks("x2 =", x2);
} else if (diskriminan == 0) {
akar1 = -b / (2 * a);
printf("Akar-akarnya kembar: x1 = x2 = %.2lf\n", akar1);
} else {
akar1 = (-b + sqrt(diskriminan)) / (2 * a);
akar2 = (-b - sqrt(diskriminan)) / (2 * a);
printf("x1 = %.2lf\n", akar1);
printf("x2 = %.2lf\n", akar2);
}
}
BilanganKompleks tambah(BilanganKompleks c1, BilanganKompleks c2) {
BilanganKompleks hasil = {c1.real + c2.real, c1.imag + c2.imag};
return hasil;
}
BilanganKompleks kurang(BilanganKompleks c1, BilanganKompleks c2) {
BilanganKompleks hasil = {c1.real - c2.real, c1.imag - c2.imag};
return hasil;
}
BilanganKompleks kali(BilanganKompleks c1, BilanganKompleks c2) {
BilanganKompleks hasil;
hasil.real = c1.real * c2.real - c1.imag * c2.imag;
hasil.imag = c1.real * c2.imag + c1.imag * c2.real;
return hasil;
}
BilanganKompleks bagi(BilanganKompleks c1, BilanganKompleks c2) {
BilanganKompleks hasil;
double penyebut = c2.real * c2.real + c2.imag * c2.imag;
if (penyebut == 0) {
printf("Error: Pembagian dengan nol!\n");
BilanganKompleks nol = {0, 0};
return nol;
}
hasil.real = (c1.real * c2.real + c1.imag * c2.imag) / penyebut;
hasil.imag = (c1.imag * c2.real - c1.real * c2.imag) / penyebut;
return hasil;
}
void cetakKompleks(char *label, BilanganKompleks c) {
if (c.imag >= 0) {
printf("%s: %.2lf + %.2lfi\n", label, c.real, c.imag);
} else {
printf("%s: %.2lf - %.2lfi\n", label, c.real, -c.imag);
}
}