/* atk1 h5t1 -- aliohjelmia */ #include /* kirjoitetaan funktioiden esittelyt ennen pääohjelmaa */ /* print_message tulostaa viestin. tulostettava viesti 'luodaan' funktiossa. funktio ei palauta arvoa */ void print_message(); /* enter_integer kysyy käyttäjältä kokonaisluvun ja palauttaa tämän luvun pääohjelmalle. tämäkään funktio ei tarvitse argumentteja */ int enter_integer(); /* f ottaa argumentikseen reaaliluvun x ja palauttaa lausekkeen x/(1-x) arvon */ /* huom. esittelyssä ei tarvi antaa argumenteille nimiä */ double f(double); /* max ottaa argumenteikseen kaksi reaalilukua ja palauttaa niistä suuremman */ double max(double,double); main() { /* n kysytään käyttäjältä, x on funktion f argumentti, y:stä ja z:sta lasketaan suurempi funktiolla max */ int n; double x,y,z; /* funktioita kutsuttaessa ei tarvitse enää kirjoittaa funktion palautusarvon tai argumenttien tyyppejä näkyviin */ print_message(); n=enter_integer(); printf("You entered %d\n",n); x=1.2; printf("If x = %.2lf, then x/(1-x) = %.2lf\n",x,f(x)); y=13.54; z=332.881; printf("The larger one of %.2lf and %.2lf is %.2lf\n",y,z,max(y,z)); } /* aliohjelmien rungot, ts. määrittelyt */ void print_message() { printf("Harjoitellaan aliohjelmien kirjoitusta!\n"); } int enter_integer() { /* luodaan paikallinen muuttuja n */ int n; printf("Enter integer n: "); scanf("%d",&n); /* return-käsky palauttaa argumenttinsa pääohjelmalle. huom. jos pääohjelmassa halutaan käyttää tätä arvoa, on siellä luotava oma muuttujansa, johon tämän funktion palauttama arvo sijoitetaan */ return n; } double f(double x) { /* huom. lauseketta x/(1-x) ei ole määritelty kun x=1. jos funktion argumentiksi annetaan 1, tulostetaan virhe- ilmoitus ja palautetaan esim. */ if(x!=1.0) return (x/(1-x)); else { printf("Invalid argument! Zero returned.\n"); return 0; } } double max(double x,double y) { if(x>=y) return x; else return y; }