#include <stdio.h>
#include <math.h>
typedef struct {
double real;
double imag;
} BilanganKompleks;
void akarKuadrat( 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
) ; akarKuadrat( 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 akarKuadrat( 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 ( "x1 = %.2lf , 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 ) {
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+Cgp0eXBlZGVmIHN0cnVjdCB7CiAgICBkb3VibGUgcmVhbDsKICAgIGRvdWJsZSBpbWFnOwp9IEJpbGFuZ2FuS29tcGxla3M7Cgp2b2lkIGFrYXJLdWFkcmF0KGRvdWJsZSBhLCBkb3VibGUgYiwgZG91YmxlIGMpOwpCaWxhbmdhbktvbXBsZWtzIHRhbWJhaChCaWxhbmdhbktvbXBsZWtzIGMxLCBCaWxhbmdhbktvbXBsZWtzIGMyKTsKQmlsYW5nYW5Lb21wbGVrcyBrdXJhbmcoQmlsYW5nYW5Lb21wbGVrcyBjMSwgQmlsYW5nYW5Lb21wbGVrcyBjMik7CkJpbGFuZ2FuS29tcGxla3Mga2FsaShCaWxhbmdhbktvbXBsZWtzIGMxLCBCaWxhbmdhbktvbXBsZWtzIGMyKTsKQmlsYW5nYW5Lb21wbGVrcyBiYWdpKEJpbGFuZ2FuS29tcGxla3MgYzEsIEJpbGFuZ2FuS29tcGxla3MgYzIpOwp2b2lkIGNldGFrS29tcGxla3MoY2hhciAqbGFiZWwsIEJpbGFuZ2FuS29tcGxla3MgYyk7CgppbnQgbWFpbigpIHsKICAgIGRvdWJsZSBhLCBiLCBjOwogICAgcHJpbnRmKCJJbnB1dCBhLCBiLCBjIDogIik7CiAgICBzY2FuZigiJWxmICVsZiAlbGYiLCAmYSwgJmIsICZjKTsKICAgIGFrYXJLdWFkcmF0KGEsIGIsIGMpOwoKICAgIEJpbGFuZ2FuS29tcGxla3MgYzEsIGMyLCBoYXNpbDsKCiAgICBwcmludGYoIkJpbGFuZ2FuIGtvbXBsZWtzIHBlcnRhbWE6ICIpOwogICAgc2NhbmYoIiVsZiAlbGYiLCAmYzEucmVhbCwgJmMxLmltYWcpOwogICAgcHJpbnRmKCJCaWxhbmdhbiBrb21wbGVrcyBrZWR1YTogIik7CiAgICBzY2FuZigiJWxmICVsZiIsICZjMi5yZWFsLCAmYzIuaW1hZyk7CgogICAgaGFzaWwgPSB0YW1iYWgoYzEsIGMyKTsKICAgIGNldGFrS29tcGxla3MoIkhhc2lsIFBlbmp1bWxhaGFuIiwgaGFzaWwpOwoKICAgIGhhc2lsID0ga3VyYW5nKGMxLCBjMik7CiAgICBjZXRha0tvbXBsZWtzKCJIYXNpbCBQZW5ndXJhbmdhbiIsIGhhc2lsKTsKCiAgICBoYXNpbCA9IGthbGkoYzEsIGMyKTsKICAgIGNldGFrS29tcGxla3MoIkhhc2lsIFBlcmthbGlhbiAgIiwgaGFzaWwpOwoKICAgIGhhc2lsID0gYmFnaShjMSwgYzIpOwogICAgY2V0YWtLb21wbGVrcygiSGFzaWwgUGVtYmFnaWFuICAiLCBoYXNpbCk7CiAgICAKICAgIHJldHVybiAwOwp9Cgp2b2lkIGFrYXJLdWFkcmF0KGRvdWJsZSBhLCBkb3VibGUgYiwgZG91YmxlIGMpIHsKICAgIGRvdWJsZSBkaXNrcmltaW5hbiwgYWthcjEsIGFrYXIyOwoKICAgIGRpc2tyaW1pbmFuID0gYiAqIGIgLSA0ICogYSAqIGM7CgogICAgaWYgKGRpc2tyaW1pbmFuIDwgMCkgewogICAgICAgIEJpbGFuZ2FuS29tcGxla3MgeDEsIHgyOwogICAgICAgIHgxLnJlYWwgPSAtYiAvICgyICogYSk7CiAgICAgICAgeDEuaW1hZyA9IHNxcnQoLWRpc2tyaW1pbmFuKSAvICgyICogYSk7CiAgICAgICAgeDIucmVhbCA9IHgxLnJlYWw7CiAgICAgICAgeDIuaW1hZyA9IC14MS5pbWFnOwogICAgICAgIGNldGFrS29tcGxla3MoIngxID0iLCB4MSk7CiAgICAgICAgY2V0YWtLb21wbGVrcygieDIgPSIsIHgyKTsKICAgIH0gZWxzZSBpZiAoZGlza3JpbWluYW4gPT0gMCkgewogICAgICAgIGFrYXIxID0gLWIgLyAoMiAqIGEpOwogICAgICAgIHByaW50ZigieDEgPSAlLjJsZiAsIHgyID0gJS4ybGZcbiIsIGFrYXIxKTsKICAgIH0gZWxzZSB7CiAgICAgICAgYWthcjEgPSAoLWIgKyBzcXJ0KGRpc2tyaW1pbmFuKSkgLyAoMiAqIGEpOwogICAgICAgIGFrYXIyID0gKC1iIC0gc3FydChkaXNrcmltaW5hbikpIC8gKDIgKiBhKTsKICAgICAgICBwcmludGYoIngxID0gJS4ybGZcbiIsIGFrYXIxKTsKICAgICAgICBwcmludGYoIngyID0gJS4ybGZcbiIsIGFrYXIyKTsKICAgIH0KfQoKQmlsYW5nYW5Lb21wbGVrcyB0YW1iYWgoQmlsYW5nYW5Lb21wbGVrcyBjMSwgQmlsYW5nYW5Lb21wbGVrcyBjMikgewogICAgQmlsYW5nYW5Lb21wbGVrcyBoYXNpbCA9IHtjMS5yZWFsICsgYzIucmVhbCwgYzEuaW1hZyArIGMyLmltYWd9OwogICAgcmV0dXJuIGhhc2lsOwp9CgpCaWxhbmdhbktvbXBsZWtzIGt1cmFuZyhCaWxhbmdhbktvbXBsZWtzIGMxLCBCaWxhbmdhbktvbXBsZWtzIGMyKSB7CiAgICBCaWxhbmdhbktvbXBsZWtzIGhhc2lsID0ge2MxLnJlYWwgLSBjMi5yZWFsLCBjMS5pbWFnIC0gYzIuaW1hZ307CiAgICByZXR1cm4gaGFzaWw7Cn0KCkJpbGFuZ2FuS29tcGxla3Mga2FsaShCaWxhbmdhbktvbXBsZWtzIGMxLCBCaWxhbmdhbktvbXBsZWtzIGMyKSB7CiAgICBCaWxhbmdhbktvbXBsZWtzIGhhc2lsOwogICAgaGFzaWwucmVhbCA9IGMxLnJlYWwgKiBjMi5yZWFsIC0gYzEuaW1hZyAqIGMyLmltYWc7CiAgICBoYXNpbC5pbWFnID0gYzEucmVhbCAqIGMyLmltYWcgKyBjMS5pbWFnICogYzIucmVhbDsKICAgIHJldHVybiBoYXNpbDsKfQoKQmlsYW5nYW5Lb21wbGVrcyBiYWdpKEJpbGFuZ2FuS29tcGxla3MgYzEsIEJpbGFuZ2FuS29tcGxla3MgYzIpIHsKICAgIEJpbGFuZ2FuS29tcGxla3MgaGFzaWw7CiAgICBkb3VibGUgcGVueWVidXQgPSBjMi5yZWFsICogYzIucmVhbCArIGMyLmltYWcgKiBjMi5pbWFnOwogICAgaWYgKHBlbnllYnV0ID09IDApIHsKICAgICAgICBwcmludGYoIkVycm9yIVxuIik7CiAgICAgICAgQmlsYW5nYW5Lb21wbGVrcyBub2wgPSB7MCwgMH07CiAgICAgICAgcmV0dXJuIG5vbDsKICAgIH0KICAgIGhhc2lsLnJlYWwgPSAoYzEucmVhbCAqIGMyLnJlYWwgKyBjMS5pbWFnICogYzIuaW1hZykgLyBwZW55ZWJ1dDsKICAgIGhhc2lsLmltYWcgPSAoYzEuaW1hZyAqIGMyLnJlYWwgLSBjMS5yZWFsICogYzIuaW1hZykgLyBwZW55ZWJ1dDsKICAgIHJldHVybiBoYXNpbDsKfQoKdm9pZCBjZXRha0tvbXBsZWtzKGNoYXIgKmxhYmVsLCBCaWxhbmdhbktvbXBsZWtzIGMpIHsKICAgIGlmIChjLmltYWcgPj0gMCkgewogICAgICAgIHByaW50ZigiJXM6ICUuMmxmICsgJS4ybGZpXG4iLCBsYWJlbCwgYy5yZWFsLCBjLmltYWcpOwogICAgfSBlbHNlIHsKICAgICAgICBwcmludGYoIiVzOiAlLjJsZiAtICUuMmxmaVxuIiwgbGFiZWwsIGMucmVhbCwgLWMuaW1hZyk7CiAgICB9Cn0K