Fakultet elektrotehnike, strojarstva i brodogradnje Sveucilista u Splitu Studij racunarstva Kolegij: Programiranje 1 Sk.god. 2004/2005 Student/ica: _____________________________ DOMACI RAD - VJEZBA 5 1. Kratko opisite a) Svrhu funkcija b) Sto su to argumenti c) Razliku izmedju stvarnih (engl. actual) i nacelnih (engl. formal) argumenata d) Prototip funkcije i njegovu svrhu. Sastavni dijelovi prototipa. e) Rekurziju funkcija 2. Odgovorite na sljedeca pitanja: a) Mogu li imena nacelnih argumenata unutar funkcije biti jednaka imenima drugih varijabli, odredjenih izvan promatrane funkcije. Obrazlozi. b) Mogu li imena nacelnih argumenata unutar funkcije biti jednaka imenima drugih varijabli, odredjenih unutar iste promatrane funkcije. Obrazlozi. c) Moze li se neka funkcija pozvati vise puta unutar istoga programa. 3. Objasni sljedece prototipove funkcija: a) int Fun1 ( int ); b) double a_na_b ( double, int ); c) char Pismo ( void ); 4. Napisite prototipove za sljedece funkcije: a) Funkcija Korijen prihvaca dva cjelobrojna argumenta i vraca float rezultat b) Funkcija Povrat_poreza prihvaca znakovni niz, cjelobrojni argument i dva double argumenta, a ne vraca nikakvu vrijednost c) Funkcija RR_11 ne prihvaca nikakav argument, a vraca rezultat vrste char 5. Izradite funkciju Korijeni koja izracunava i na zaslon racunala ispisuje korijene kvadratne jednadzbe a*x2 + b*x + c = 0. Predvidjeti mogucnost da diskriminanta bude veca, jednaka ili manja od nule. Ako je diskriminanta manja od nule, odvojeno izracunati realni i imaginarni dio rjesenja. Svi podaci neka budu vrste double. Glavna funkcija neka iskljucivo vrsi unos podataka i poziv funkcije Korijeni. 6. Izradite program koji ce potencirati realnu osnovku na cjelobrojni eksponent (Pozor: bez funkcije pow!). Potenciranje neka se vrsi u funkciji Pot, a glavna funkcija neka sluzi za unos podataka, poziv funkcije Pot i ispis rezultata. ---------------------------------------------------------------------- ODGOVORI / RJESENJA ------------------------------------------------------------- 1) a) Funkcije sluze za jednostavnije i preglednije pisanje koda,tako sto osnovni kod razbijemo u niz logicno povezanih djelova jednostavnijih za koristenje. b) Argumenti funkcije sluze za prenosenje podataka u funkciju.Te tako komuniciraju funkcija i njezina okolina. c) Argumenti u definiciji funkcije nazivaju se formalni(nacelni) argumenti ,a argumenti u pozivu funkcije nazivaju se stvarni (aktualni)argumenti. d) Prototip funkcije je nacin deklaracije funkcije koji se navodi na pocetku koda i on omogucava pravilnu pretvorbu podataka,ali i otkrivanje gresaka koje nastaju zbog eventualne razlike tipova podataka u pozivu, i tipova podataka koji su deklarirani kao argumenti funkcije. Prototip funkcije mora se sastojati od tipa podatka naziva funkcije i liste argumenata.Na kraju obavezno mora postojati granicnik. 2) a) Mogu,zato jer deklaracija varijabli unutar funkcije je zasebno mjesto u memoriji racunala koje ne ovisi o varijablama drugih funkcija. b) Ne mogu,jer bi doslo do konflikta izmedju imena varijabli u istoj funkciji. c) Moze,programski jezikC to dopusta 3) a) Funkcija nazvana:"Fun1" uzima i vraca 1 cjelobrojnu vrijednost. b) Funkcija nazvana:"a_na_b" uzima 2 vrijednost i vraca vrijednosti double. c) Funkcija tipa char koja se zove Pismo,ne prihvaca nikakvu vrijednost. 4) a) float Korijen (int a,int b ); b) void Povrat_poreza (char a[],int b,double c,double d ); c) char RR_11 (void) 5) #include #include double Korijeni1 (double a,double b,double c) { double X1,imag; X1=(-b+sqrt(b*b-4*a*c))/2*a; imag=(b*b)-4*a*c; if((b*b-4*a*c)>=0) return(X1); else return(((-b+sqrt(imag*(-1)))/2*a)); } double Korijeni2 (double a,double b,double c) { double X2,imag; X2=(-b-sqrt(b*b-4*a*c))/2*a; imag=(b*b)-4*a*c; if((b*b-4*a*c)>=0) return(X2); else return(((-b+sqrt(imag*(-1)))/2*a)); } main() { double a,b,c,X1,X2,rezultat1,rezultat2; printf("\n***************************************************"); printf("\n\t Program za rjesavnje kvadratne jednadzbe"); printf("\n***************************************************"); printf("\n Unesite realan broj a u kvadratnoj jednadzbi :\n"); scanf("%lf",&a); printf("\n Unesite realan broj b u kvadratnoj jednadzbi :\n"); scanf("%lf",&b); printf("\n Unesite realan broj c u kvadratnoj jednadzbi :\n"); scanf("%lf",&c); printf("----------------------------------------------------------------"); rezultat1=Korijeni1(a,b,c); printf("\n\tAko se povise ovog ispisa pojavi greska --sqrt DOMAIN error-- znaci da prikazano rjesenje X1 nije iz realnog skupa brojeva\n"); printf("\n\n\tRezultat je X1 : %lf", rezultat1); printf("\n----------------------------------------------------------------"); printf("\n\n\n----------------------------------------------------------------\n"); printf("\n\n\tAko se povise ovog ispisa pojavi greska --sqrt DOMAIN error-- znaci da prikazano rjesenje X2 nije iz realnog skupa brojeva\n"); rezultat2=Korijeni2(a,b,c); printf("\n\tRezultat je X2 : %lf", rezultat2); printf("\n----------------------------------------------------------------"); } 6) #include double pot (float a,int b) { int n,z; float k; n=b-1; k=a; for(int i=0;i