#include #include /* Primjer: kompleksni brojevi i operacije. Sve deklaracije i funkcije su ovdje. */ typedef struct { double re; /* ili x */ double im; /* ili y */ } complex; /* Napomena: cabs vec postoji u ! */ double zabs(complex a) { return sqrt( a.re * a.re + a.im * a.im ); } complex conjug(complex a) { a.im = -a.im; return a; } complex cadd(complex a, complex b) { complex c; c.re = a.re + b.re; c.im = a.im + b.im; return c; } complex csub(complex a, complex b) { complex c; c.re = a.re - b.re; c.im = a.im - b.im; return c; } complex cmul(complex a, complex b) { complex c; c.re = a.re * b.re - a.im * b.im; c.im = a.im * b.re + a.re * b.im; return c; } complex cdiv(complex a, complex b) { complex c; double naz = zabs(b); naz *= naz; /* Kvadriraj! */ c.re = (a.re * b.re + a.im * b.im) / naz; c.im = (a.im * b.re - a.re * b.im) / naz; return c; /* Moze i ovako: c = cmul(a, conjug(b)) / naz; */ } void cprint(complex a) { printf("(%g, %g)\n", a.re, a.im); return; } int main(void) { complex z1 = { 1.0, 2.0 }, z2 = { 1.0, 1.0 }; printf(" z1 = "); cprint(z1); printf(" z2 = "); cprint(z2); printf(" cabs(z1) = %g\n", zabs(z1)); printf(" cabs(z2) = %g\n", zabs(z2)); printf(" conjug(z1) = "); cprint(conjug(z1)); printf(" conjug(z2) = "); cprint(conjug(z2)); printf(" z1 + z2 = "); cprint(cadd(z1, z2)); printf(" z1 - z2 = "); cprint(csub(z1, z2)); printf(" z1 * z2 = "); cprint(cmul(z1, z2)); printf(" z1 / z2 = "); cprint(cdiv(z1, z2)); return 0; }