/* teht 3 */ #include /* protot: */ void kplus(double rea, double ima, double reb, double imb, double *res, double *ims); void kmiinus(double rea, double ima, double reb, double imb, double *res, double *ims); void ktulo(double rea, double ima, double reb, double imb, double *res, double *ims); /* pääfunktio */ main() { /* c-kielessä ei ole sisäänrakennettua kompleksilukutyyppiä, joten jokaista kompleksi lukua kohti meidän on määriteltävä kaksi double- (tai float-) lukua: yksi luvun reaaliosalle ja toinen imaginaariosalle. */ /* huomaa, että tuloksia varten esitellään tavalliset doublet, pointteri muuttujia ei pääfunktiossa tarvita! */ double rea, ima, reb, imb, res, ims; /* alustetaan operandit a ja b, a = 1 + 2i, b = -1 - i */ rea = 1; /* = Re{a} */ ima = 2; /* = Im{a} */ reb = -1; /* = Re{b} */ imb = -1; /* = Im{b} */ /* tulostetaan a ja b */ /* plus-merkki muotoilussa prosentin perässä tarkoittaa, että tulostetaan myös luvun etumerkki, oli se plus tai miinus. */ printf("a = %3.1lf%+3.1lfi\n", rea, ima); printf("b = %3.1lf%+3.1lfi\n", reb, imb); /* lasketaan summa - kaksi viimeistä argumenttiä on _osoitteet_ muuttujiin, jonne tulokset sijoitetaan. */ kplus(rea, ima, reb, imb, &res, &ims); printf("a + b = %3.1lf%+3.1lfi\n", res, ims); /* lasketaan erotus */ kmiinus(rea, ima, reb, imb, &res, &ims); printf("a - b = %3.1lf%+3.1lfi\n", res, ims); /* lasketaan tulo */ ktulo(rea, ima, reb, imb, &res, &ims); printf("a * b = %3.1lf%+3.1lfi\n", res, ims); } void kplus(double rea, double ima, double reb, double imb, double *res, double *ims) { /* kun sijoitetaan, tarvitaa *-operaattoria, koska kohde on pointterin (res tai ims) kertoma muuttuja. */ *res = rea + reb; *ims = ima + imb; } void kmiinus(double rea, double ima, double reb, double imb, double *res, double *ims) { *res = rea - reb; *ims = ima - imb; } void ktulo(double rea, double ima, double reb, double imb, double *res, double *ims) { *res = rea * reb - ima * imb; *ims = rea * imb + ima * reb; }