You are on page 1of 5

URI_LV_

/* Zadatak 1:
Napisati C-funkciju sa imenom stepenovanje sa parametrima (x,n) i koja računa x^n
(n-ti stepen broja x). Voditi računa da eksponent n može biti i pozitivan i negativan
broj kao i 0. Napisati glavni program koji za uneseno x uz pomoć navedene funkcije računa
vrijednost izraza: x^7+4*x^3+2*x-5 */

#include<stdio.h>
float stepenovanje(float,int); /*deklaracija funkcije */
main(){
float x,y;
int n;
printf("Unesite realan broj:");
scanf("%f",&x);
y=stepenovanje(x,7)+4*stepenovanje(x,3)+2*x-5;
/* za rješenje izraza pozvali smo funkciju stepenovanje 2 puta sa različitim
parmetrima*/

printf("Vrijednost izraza x^7+4*x^3+2*x-5 za x=%.2f iznosi %.2f",x,y);


system("PAUSE");
}

float stepenovanje(float x, int n)


{
int i;
float y=1;

/* postavjamo y=1 jer nemamo ispitivanja da li je eksponent n==0 već smo ispitivali da li
je n>0 ili n<0
ali ako dva navedena uslova nisu ispunjena neće se odraditi naredbe koje slijede poslije
ovih izraza
već će se vratiti y koje u prvom koraku i ima vrijednost 1 */

if(n>0){
/* za n>0 imamo jedan način traženja stepena nekoga broja a koje se zasniva
na sukcesivnom množenju broja samim sobom ali ograničen broj puta a taj broj
nam određuje eksponent tako da nam je on služio za postavljanje uslova u for
petlji*/

for(i=1; i<=n; i++)


y*=x;
}
else{

/* za n<0 na osnovu matematičkih pravila stepn tražimo primjenom sukcesivnom


dijeljenja broja samim sobom*/

for(i=n; i<=-1; i++)


y/=x;
}
return y;
}
/*Zadatak 2
Napisati funkciju koja će rekurzivno izračunati potenciju broja pri čemu je
n-prirodan broj
n>0 2^n=2*2^(n-1)
n<0 2^n=2^(n+1)/2
n=0 2^0=1
*/

#include<stdio.h>
main(){
float osnova;
int eksponent;
float stepen(float,int);

/* deklaracija funkcije može biti i u main-u, samo je bitno da bude prije poziva
funkcije*/

printf("Unesite vrijednost osnove:");


scanf("%f",&osnova);
printf("Unesite vrijednost stepena:");
scanf("%d",&eksponent);
printf("Broj %.2f na eksponent %d iznosi %.2f", osnova,eksponent,
stepen(osnova,eksponent));

/*poziv funkcije smo postavili u printf naredbi jer tek tada nam je trebao njen
rezultat, poziv funkcije postavljamo kada nam treba njen rezultat za izvršenje drugih
naredbi, također vrijednost funkcije možemo dodjeliti nekoj varijabli (koja prethodno
treba biti deklarisana) pa poslije raditi sa tom varijablom ukoliko ne želimo kao u ovom
primjeru da u printf naredbi pozivamo funkciju*/

system("PAUSE");
}

/*rekurzivno rješenje funkcije stepenovanje, rekurzivno zanči da funkcija poziva samu


sebe sa drugim parametrima. Na predavanju je rađen primjer sa rekurzivnim funkcijama gdje
možete pročitati nešto više*/

float stepen (float baza,int eksponent){


if(eksponent==0) return 1; /*ispitivanje da li je eksponent 0 ako da rezultat koji
se vraća je 1*/

if(eksponent>0) return baza*stepen(baza,eksponent -1);


/* rekurzivno rješenje za slučaj n>0, umjesto for petlje koristimo ponovni poziv
funkcije sa umanjanim eksponentom */

if(eksponent<0) return stepen(baza,eksponent +1)/baza;

/* Zadatak 3
Napisati funkciju koja kao rezultat daje apsolutnu vrijednost broja. */

#include<stdio.h>
double apsolutno(double); /* delaracija funkcije*/
main(){
double i;
printf("Unesite broj ciju apsolutnu vrijednost trazite:");
scanf("%lf",&i);
printf("Apsolutna vrijednost broja %.2lf je %.2lf",i ,apsolutno(i));
system("PAUSE");
}

double apsolutno (double x)


{
if (x>0)
return x;
/* ako je broj pozitivan vraćamo nepromjenjenu vrijedenost*/
else

return -x;
/* u suprotnom imamo - ispred x ali x je već negativano pa imamo -(-x)->x */
}

/* Zadatak 4
Napisati funkciju koja uzima tri argumenta: karakter i dva cijela broja. Karakter
predstavlja znak koji treba biti odštampan. Prvi cio broj određuje koliko će puta
taj karakter biti odštampan u liniji,a drugi određuje broj linija koje treba odštampati
na taj način. Napisati program koji koristi ovu funkciju
*/
#include<stdio.h>
void ispis_znaka(char znak,int kolona,int red);/*deklaracoija funkcije*/
main(){
char znak;
int kolona,red;

printf("Unesite znak(# za kraj):");


while((znak=getchar())!='#')

/* unešeni znak dodjeljujemo vrijabli znak preko funkcije getchar() i ispitujemo


da li je unešeni znak različit od # jer smo # uzeli kao znak za kraj programa*/

{
/*sljdeći blok naredni se izvrašava ukoliko je unešeni znak različit od #*/
if(znak=='\n')
continue;

/* za slučaj unusa enter ponovo neće nam ponditi unos broja redova i kolona
jer čeka znak*/

printf("Unesite broj redova i broj kolona:");


if(scanf("%d%d",&red,&kolona)!=2)
break;

/*ukoliko se unese znak umjesto broja ili neki rugi nedefinisani broj
parametara iskače se iz while petlje*/

ispis_znaka(znak,kolona,red);
printf("\nUnesite naredni znak(# za kraj):");
}
printf("Kraj!\n");
system("PAUSE");
}
void ispis_znaka(char znak,int kolona,int red)
{
int kol,r;

/*uvode se nove 2 varijable tipa int koje će nam biti brojači za naše dvije petlje
koje su nam potrebne za rješavanje problema*/

for(r=0; r<red; r++)

/*vanjska petlja za čiju jednu iteraciju treba da se izvrše sve iteracije unutrašnje
petlje tj. za prvi red treba da se ispise unešeni znak onoliko koliko smo odabrali kolona
to radimo preko unutrašnje petlje koja ima brojač kol i koja će se izvršavati sve dok je
kol manje od broja kolona, nakon čega će se preskočiti naredba putchar(znak); i odraditi
putchar('\n') jer nakon ispisa znaka onoliko puta koliko je kolona potrebno je enterom
preći u novi red,povećati brojač vanjske petlje(r) ispituje uslov r<red ukoliko je
ispunjen ponovo idemo u unutrašnju petlju*/

{
for(kol=0; kol<kolona; kol++)
putchar(znak);

putchar('\n'); /* za ispis entera na kraju svakog ispisanog reda*/


}

/* Zadatak5
Napisati ekurzivnu funkciju čiji je prototip sumanep(int), koja izračunava sumu
neparnih brojeva do zadanog (u glavnoj funkciji) prirodnog broja n. U glavnoj
funkciji napisati rezultat.
*/
#include<stdio.h>
int sumanep(int); /*deklaracija funkcija*/
main(){
int broj,suma;
printf("\nUnesite prirodan broj:");
scanf("%d",&broj);
if(broj%2==0) /*ispitivanje da li je unešeni broj parn*/
broj--; /*ukoliko jeste umanjujemo ga za 1 i dobivamo neparn broj*/
suma=sumanep(broj); /*poziv funkcije kojoj prosljeđujemo neparan broj*/
printf("\nSuma neparnih brojeva do%d je %d!",broj,suma);
system("PAUSE");
}

/*rekurzivno rješenje funkcije*/

int sumanep(int n){


if(n==1) return 1; /*ukoliko je broj =1 onda je i suma samo */
return n+sumanep(n-2); /*sumu neparnih brojeva računamo jednostavno zbirom
unešenog broja i svakog sljedećeg umanjenog za 2 i na ovaj način je zapisan u rješenju
preko sukcesivnog poziva iste funkcije samo sa parametrom svaki put umanjenim za 2*/
}

You might also like