You are on page 1of 55

OSNOVE RAUNARSTVA

PRIMJER PRVOG PARCIJALNOG ISPITA


Prezime i ime:______________________
Broj indeksa:_______________________
1. zadatak
a) Pretvorite broj 175 iz
dekadskog u broj u binarnom
brojnom sistemu.

b) Pretvorite broj 155 iz oktalnog


u broj u binarnom brojnom
sistemu.

c) Pretvorite broj A1 iz
heksadecimalnog u broj u
dekadskom brojnom sistemu.

175(10)=

155(8)=

A1(16) =

1 bod

1 bod

1 bod

d) Navedite jedinice funkcionalne blok-sheme Von-Neumannovog modela raunara:


1.
4.

2.
5.

3.

1 bod
e) Upotrebom tablica istinitosti dokaite jednakost (A B C) = A B C
1 bod
2. zadatak
a) Koje vrijednosti poprimaju varijable a, b i c
nakon izvrenog bloka naredbi?

b) ta e ispisati slijedei program:

int a=5, b=2, c;


b+=a++;
b-=a--;
c=a%b;

int i=0;
do
{
printf("A");
i++;
} while (i<=5);

b=
c=
0.5 bodova
c) Koju vrijednost e imati varijabla t nakon
izvoenja bloka naredbi:
Odgovor:

a=

int i, t=0;
for (i=1;i<20;i++)
{
if (i%5==0) continue;
t++;
if (i==10) break;
}

Odgovor:

t=

Odgovor:
0.5 bodova
d) Koje vrijednosti poprimaju varijabla i, j i k
nakon izvrenja programa?
int main()
{
int i=0, j=0, k=0;
while (!(i==5))
{
k++;
j=j+k;
i++;
}
return 0;
}
Odgovor:

1 bod

i=

j=
1 bod

skinuto sa www.etf.ba

k=

e) ta e ispisati slijedei program:

f) Koje vrijednosti imaju varijable x,y i z nakon


izvoenja slijedeeg bloka naredbi:

#include <stdio.h>
int main()
{
char a,b,c,d;
a=B;
b=4;
c=a+3,
d=b+1;
printf(\n %c,%c,%c,%c,a,b,c,d);
printf(\n %d,%d,%d,%d,a,b,c,d);
return 0;
}

int main()
{
int x,y,z;
x=y=z=1;
do
{
do
{
y=z++;
} while (y<5);
x=y++;
} while (x<6);
return 0;
}

Odgovor:
Odgovor:

x=

1 bod

y=
1 bod

z=

3. zadatak
Napisati C-program koji izraunava priblinu vrijednost funkcije ex prema slijedeoj formuli:

e x suma = 1 +

n
x x 2 x3
x
+ + + ...
1! 2! 3!
n!

Realan broj x tipa float i broj n tipa int se unose sa standardnog ulaza. Nakon izraunate sume program treba
izraunati razliku apsolutnu vrijednost d prema formuli:
d=|suma-exp(x)|
gdje je exp(x) vrijednost funkcije ex u taki x izraunata pomou funkcije exp koja se nalazi u biblioteci
funkcija, pri emu je prototip funkcije exp() sadran u datoteci math.h.
Za izraunavanje apsolutne vrijednosti treba koristiti funkciju fabs(). (Prototip funkcije fabs() je takoer
sadran u datoteci math.h).
Nakon izraunate sume, ovisno o vrijednosti d program treba ispisati poruku:
- Ako je d>0.1 program ispisuje poruku VELIKA GRESKA.
- Ako je 0.01<=d<= 0.1 program ispisuje poruku SREDNJA GRESKA
- Ako je d<0.01 program ispisuje poruku MALA GRESKA.
Pri rjeavanju zadatka obavezno koristiti petlju while.
10 bodova

skinuto sa www.etf.ba

OSNOVE RAUNARSTVA
PRIMJER PRVOG PARCIJALNOG ISPITA
Prezime i ime:______________________
Broj indeksa:_______________________
1. zadatak
a) Pretvorite broj 175 iz
dekadskog u broj u binarnom
brojnom sistemu.

b) Pretvorite broj 155 iz oktalnog


u broj u binarnom brojnom
sistemu.

c) Pretvorite broj A1 iz
heksadecimalnog u broj u
dekadskom brojnom sistemu.

175(10)=

155(8)=

A1(16) =

1 bod

1 bod

1 bod

d) Navedite jedinice funkcionalne blok-sheme Von-Neumannovog modela raunara:


1.
4.

2.
5.

3.

1 bod
e) Upotrebom tablica istinitosti dokaite jednakost (A B C) = A B C
1 bod
2. zadatak
a) Koje vrijednosti poprimaju varijable a, b i c
nakon izvrenog bloka naredbi?

b) ta e ispisati slijedei program:

int a=5, b=2, c;


b+=a++;
b-=a--;
c=a%b;

int i=0;
do
{
printf("A");
i++;
} while (i<=5);

b=
c=
0.5 bodova
c) Koju vrijednost e imati varijabla t nakon
izvoenja bloka naredbi:
Odgovor:

a=

int i, t=0;
for (i=1;i<20;i++)
{
if (i%5==0) continue;
t++;
if (i==10) break;
}

Odgovor:

t=

Odgovor:
0.5 bodova
d) Koje vrijednosti poprimaju varijabla i, j i k
nakon izvrenja programa?
int main()
{
int i=0, j=0, k=0;
while (!(i==5))
{
k++;
j=j+k;
i++;
}
return 0;
}
Odgovor:

1 bod

i=

j=
1 bod

skinuto sa www.etf.ba

k=

e) ta e ispisati slijedei program:

f) Koje vrijednosti imaju varijable x,y i z nakon


izvoenja slijedeeg bloka naredbi:

#include <stdio.h>
int main()
{
char a,b,c,d;
a=B;
b=4;
c=a+3,
d=b+1;
printf(\n %c,%c,%c,%c,a,b,c,d);
printf(\n %d,%d,%d,%d,a,b,c,d);
return 0;
}

int main()
{
int x,y,z;
x=y=z=1;
do
{
do
{
y=z++;
} while (y<5);
x=y++;
} while (x<6);
return 0;
}

Odgovor:
Odgovor:

x=

1 bod

y=
1 bod

z=

3. zadatak
Napisati C-program koji izraunava priblinu vrijednost funkcije ex prema slijedeoj formuli:

e x suma = 1 +

n
x x 2 x3
x
+ + + ...
1! 2! 3!
n!

Realan broj x tipa float i broj n tipa int se unose sa standardnog ulaza. Nakon izraunate sume program treba
izraunati razliku apsolutnu vrijednost d prema formuli:
d=|suma-exp(x)|
gdje je exp(x) vrijednost funkcije ex u taki x izraunata pomou funkcije exp koja se nalazi u biblioteci
funkcija, pri emu je prototip funkcije exp() sadran u datoteci math.h.
Za izraunavanje apsolutne vrijednosti treba koristiti funkciju fabs(). (Prototip funkcije fabs() je takoer
sadran u datoteci math.h).
Nakon izraunate sume, ovisno o vrijednosti d program treba ispisati poruku:
- Ako je d>0.1 program ispisuje poruku VELIKA GRESKA.
- Ako je 0.01<=d<= 0.1 program ispisuje poruku SREDNJA GRESKA
- Ako je d<0.01 program ispisuje poruku MALA GRESKA.
Pri rjeavanju zadatka obavezno koristiti petlju while.
10 bodova

skinuto sa www.etf.ba

ELEKTROTEHNIKIFAKULTETSARAJEVO
Predmet:OSNOVERAUNARSTVA

Prviparcijalniispit(09.11.2006)
Varijanta

Imeiprezime(itko):____________________________

Bodova

Grupa:___________Brojindexa:__________________
Potpis:________________________________________

1.Napiitebrojutraenombrojnomsistemu.Procesrjeavanjanapiitenaslobodnim
listovima.
a)(1bod)Pretvoritebrojizdekadskogsistemaubinarni:
198(10)=_____________________________________(2)
b)(1bod)Pretvoritebrojizbinarnogsistemauoktalni:
10110111(2)=__________________________________(8)
c)(1bod)Pretvoritebrojizdekadskogsistemauheksadecimalni:
262(10)=______________________________________(16)

2.Uslobodanprostorispodkodaupiiteizlazdatogblokanaredbi.
a)(1bod)

b)(2boda)

inta=8,b=3;
switch(a%b){
case2:
printf("AA");
case1:
printf("AA");
default:
printf("AA");break;
}

inti,t=1;
for(i=1;i<20;i++){
if(i%4==0)continue;
t++;
if(i==8||i==12||i==16)
break;
}
printf("t=%d",t);

skinuto sa www.etf.ba

c)(2boda)
chara='C',b='A',c='B';
a=a+c;
c=ab;
b=b+c'C';
a=ab;
printf("a=%c,b=%d,c=%c",
a,b,c);

d)(1bod)
inta=8,b=5;
do{
b*=2;
}while(++a<9);
b=b%a;
printf("a=%d,b=%d",a,b);

e)(1bod)
inta=10;
floats;
a+=a++;
s=a/2+1;
printf("s=%.2f",s);

3.Naslobodnimlistovimapapiranapiitetraeneprograme.
a)(4boda)Napiiteprogramkojiizraunavavrijednostsljedeesume:
S=

1
2!
3!
n!
n1

...1
,
2
3
n
x1 x1 x1
x1

n1

Napomena:Zastepenovanjekoristitebibliotenufunkcijupow(b,e)priemujebbazaaeje
eksponent.Funkcijasenalaziubibliotecimath.h.
b)(4boda)Napiiteprogramkojiuitavasatastature5realnihelemenatadvanizaAiBazatim
izraunavaelementetreegnizaC(kojitakoerima5elemenata)priemuseitielementnizaC
dobivapremasljedeojformuli:
2

C i= Ai 3Bi1,

i=0,1 ,2 ,3 ,4

Uprostorispodtekstazadatkaupiitetraenibloknaredbi.Nemoratepisati#include
direktive,deklaracijevarijabliilifunkcijemain().
c)(1bod)Napiitebloknaredbikojinaekranu d)(1bod)Napiitebloknaredbikojinaekranu
ispisujeAAAAA(petslovaA)pomoupetljefor. ispisujesveneparnebrojeveizmeu1i100.
Savjet:Upitanjusu2linijekoda.

Savjet:Upitanjusu23linijekoda.

skinuto sa www.etf.ba

ELEKTROTEHNIKIFAKULTETSARAJEVO
Predmet:OSNOVERAUNARSTVA

Prviparcijalniispit(09.11.2006)
Varijanta

Imeiprezime(itko):____________________________

Bodova

Grupa:___________Brojindexa:__________________
Potpis:________________________________________

1.Napiitebrojutraenombrojnomsistemu.Procesrjeavanjanapiitenaslobodnim
listovima.
a)(1bod)Pretvoritebrojizdekadskogsistemaubinarni:
137(10)=_____________________________________(2)
b)(1bod)Pretvoritebrojizbinarnogsistemauoktalni:
11110101(2)=__________________________________(8)
c)(1bod)Pretvoritebrojizdekadskogsistemauheksadecimalni:
329(10)=______________________________________(16)

2.Uslobodanprostorispodkodaupiiteizlazdatogblokanaredbi.
a)(1bod)

inta=7,b=5;
switch(a%b){
case3:
printf("X");
case1:
printf("X");
default:
printf("X");break;
}

b)(2boda)
inti,t=0;
for(i=1;i<50;i++){
if(i%5==0)continue;
t++;
if(i==15||i==20||i==25)
break;
}
printf("t=%d",t);

skinuto sa www.etf.ba

c)(2boda)
chara='B',b='A';
while(a>5){
printf("%c",b);
a=a/2;
}
printf("a=%d",a);

d)(1bod)
inta=5,b=3;
do{
b*=2;
}while(++a<6);
b=b%a;
printf("a=%d,b=%d",a,b);

e)(1bod)
inta=5;
floats;
a+=a++;
s=a/3+1;
printf("s=%.2f",s);

3.Naslobodnimlistovimapapiranapiitetraeneprograme.
a)(4boda)Napiiteprogramkojiizraunavavrijednostsljedeesume:
2

x
x
n1 x
S=x ...1
,
2 ! 3!
n!

n1

Napomena:Zastepenovanjekoristitebibliotenufunkcijupow(b,e)priemujebbazaaeje
eksponent.Funkcijasenalaziubibliotecimath.h.
b)(4boda)Napiiteprogramkojiuitavasatastature5realnihelemenatadvanizaAiBazatim
izraunavaelementetreegnizaC(kojitakoerima5elemenata)priemuseitielementnizaC
dobivapremasljedeojformuli:
C i=2A 2i

Bi
5,
2

i=0,1 ,2 ,3 ,4

Uprostorispodtekstazadatkaupiitetraenibloknaredbi.Nemoratepisati#include
direktive,deklaracijevarijabliilifunkcijemain().
c)(1bod)Napiitebloknaredbikojinaekranu
ispisujeBABABApomoupetljefor.

d)(1bod)Napiitebloknaredbikojinaekranu
ispisujesveparnebrojeveizmeu1i50.

Savjet:Upitanjusu2linijekoda.

Savjet:Upitanjusu23linijekoda.

skinuto sa www.etf.ba

ELEKTROTEHNIKIFAKULTETSARAJEVO
Predmet:OSNOVERAUNARSTVA

Prviparcijalniispit(09.11.2006)
Varijanta

Imeiprezime(itko):____________________________

Bodova

Grupa:___________Brojindexa:__________________
Potpis:________________________________________

1.Napiitebrojutraenombrojnomsistemu.Procesrjeavanjanapiitenaslobodnim
listovima.
a)(1bod)Pretvoritebrojizdekadskogsistemaubinarni:
252(10)=_____________________________________(2)
b)(1bod)Pretvoritebrojizbinarnogsistemauoktalni:
1100010(2)=__________________________________(8)
c)(1bod)Pretvoritebrojizdekadskogsistemauheksadecimalni:
259(10)=______________________________________(16)

2.Uslobodanprostorispodkodaupiiteizlazdatogblokanaredbi.
a)(1bod)

b)(2boda)

inta=5,b=4;
switch(a%b){
case0:
a++;b++;
case1:
a++;b++;break;
case2:
a;b;
case3:
a;b++;break;
}
printf("a=%d,b=%d",a,b);

inta=5,b=6;
do{
b+=a++;
}while(a<5);
b%=a1;
printf("a=%d,b=%d",a,b);

skinuto sa www.etf.ba

c)(2boda)
chara='B',b='C',c='A';
a=a+c;
b=b+'A'a;
a=c+b;
printf("a=%c,b=%d,c=%c",
a,b,c);

d)(1bod)
inti,j;
for(i=1;i<4;i++)
for(j=i;j<3;j++)
printf("A");

e)(1bod)
inta=1;floatb=20;
while(a<4){
b=b/a;
a++;
}
printf("b=%.2f",b);

3.Naslobodnimlistovimapapiranapiitetraeneprograme.
a)(4boda)Napiiteprogramkojiizraunavavrijednostsljedeesume:
2

2
2
2
n1
S=1

...1
,
2x1 2x1
2x1

n2

Napomena:Zastepenovanjekoristitebibliotenufunkcijupow(b,e)priemujebbazaaeje
eksponent.Funkcijasenalaziubibliotecimath.h.
b)(4boda)Napiiteprogramkojiuitavasatastature5realnihelemenatadvanizaAiBazatim
izraunavaelementetreegnizaC(kojitakoerima5elemenata)priemuseitielementnizaC
dobivapremasljedeojformuli:
3

A
C i= i B2i 2 Ai Bi ,
3

i=0,1,2,3 ,4

Uprostorispodtekstazadatkaupiitetraenibloknaredbi.Nemoratepisati#include
direktive,deklaracijevarijabliilifunkcijemain().
c)(1bod)Napiitebloknaredbikojinaekranu
ispisujeabecedu(ABC.....Z).

d)(1bod)Napiitebloknaredbikojiizraunava
sumusvihbrojevaizmeu1i20.

Savjet:Upitanjusu2linijekoda.

Savjet:Upitanjusu23linijekoda.

skinuto sa www.etf.ba

ELEKTROTEHNIKIFAKULTETSARAJEVO
Predmet:OSNOVERAUNARSTVA

Prviparcijalniispit(09.11.2006)
Varijanta

Imeiprezime(itko):______________________

Bodova

Grupa:___________Brojindexa:____________
Potpis:__________________________________

1.Napiitebrojutraenombrojnomsistemu.Procesrjeavanjanapiitenaslobodnim
listovima.
a)(1bod)Pretvoritebrojizdekadskogsistemaubinarni:
198(10)=_____________________________________(2)
b)(1bod)Pretvoritebrojizbinarnogsistemauoktalni:
101101011(2)=__________________________________(8)
c)(1bod)Pretvoritebrojizdekadskogsistemauheksadecimalni:
262(10)=______________________________________(16)

2.Uslobodanprostorispodkodaupiiteizlazdatogblokanaredbi.
a)(1bod)

b)(2boda)

inta=7,b=6;
switch(a%b){
case0:
a;b;
case1:
a;b;break;
case2:
a++;b++;
case3:
a;b++;break;
}
printf("a=%d,b=%d",a,b);

inta=7,b=8;
do{
b+=a++;
}while(a<7);
b%=a1;
printf("a=%d,b=%d",a,b);

skinuto sa www.etf.ba

c)(2boda)
chara='B',b='A';
while(a<'Z'){
if(a%5==0)
printf("%c",b);
a++;
}

d)(1bod)
inti,j;
for(i=0;i<4;i++)
for(j=0;j<i;j++)
printf("A");

e)(1bod)
floatb=40;inti;
for(i=1;i<4;i++)
b=b/i;
printf("b=%.2f",b);

3.Naslobodnimlistovimapapiranapiitetraeneprograme.
a)(4boda)Napiiteprogramkojiizraunavavrijednostsljedeesume:
2

S=1

x 1 x 1
n1 x 1

...1
,
x 1 x2
xn

n2

Napomena:Zastepenovanjekoristitebibliotenufunkcijupow(b,e)priemujebbazaaeje
eksponent.Funkcijasenalaziubibliotecimath.h.
b)(4boda)Napiiteprogramkojiuitavasatastature5realnihelemenatadvanizaAiBazatim
izraunavaelementetreegnizaC(kojitakoerima5elemenata)priemuseitielementnizaC
dobivapremasljedeojformuli:
2

C i= Ai 4 Ai Bi 8 Bi 1,

i=0,1 ,2 ,3,4

Uprostorispodtekstazadatkaupiitetraenibloknaredbi.Nemoratepisati#include
direktive,deklaracijevarijabliilifunkcijemain().
c)(1bod)Napiitebloknaredbikojinaekranu
ispisujesvebrojeveizmeu1i25.

d)(1bod)Napiitebloknaredbikojiizraunava
sumusvihbrojevaizmeu5i55.

Savjet:Upitanjusu2linijekoda.

Savjet:Upitanjusu23linijekoda.

skinuto sa www.etf.ba

ELEKTROTEHNIKI FAKULTET SARAJEVO


Predmet: OSNOVE RAUNARSTVA

Prvi parcijalni ispit (09. 11. 2006)


Varijanta

Bodova
Ime i prezime (itko):
____________________________

Grupa: ___________ Broj indexa:


__________________
Potpis:
________________________________________

1. Napiite broj u traenom brojnom sistemu. Proces rjeavanja napiite na slobodnim


listovima.
a) (1 bod) Pretvorite broj iz dekadskog sistema u binarni:
198(10) =

11000110

(2)

b) (1 bod) Pretvorite broj iz binarnog sistema u oktalni:


10110111(2) =

267

(8)

c) (1 bod) Pretvorite broj iz dekadskog sistema u heksadecimalni:


262 (10) =

106

(16)

2. U slobodan prostor ispod koda upiite izlaz datog bloka naredbi.


a) (1 bod)

b) (2 boda)

int a=8, b=3;


switch (a%b) { a%b == 2
case 2:
<-----printf("AA");
case 1:
printf("AA");
default:
printf("AA"); break;
}

AAAAAA

int i,t=1; <-- pazi na 1!


for (i=1; i<20; i++) {
if (i%4==0) continue;
t++;
if (i==8||i==12||i==16)
break;
} t = 1 + (19 - 4) = 16
printf ("t=%d",t);

t=16

skinuto sa www.etf.ba

c) (2 boda)
char a='C',b='A',c='B';
a=a+c; a='C'+'B'
c=a-b; c='C'+'B''A'='C'+1='D'
b=b+c-'C';
b='A'+'D'-'C'='A'+1='B'
a=a-b; a='C'+'B'-'B'='C'
printf ("a=%c,b=%d,c=%c",
a,b,c);

d) (1 bod)
int a=8, b=5;
do {
b*=2;
b=10
} while (++a<9); a=9
uslov NIJE ispunjen!
b=b%a;
b=10%9=1
printf ("a=%d,b=%d",a,b);

a=C,b=66,c=D

a=9,b=1

e) (1 bod)
int a=10;
float s;
a+=a++; a=21
s=a/2+1; s=10+1=11 int/int!
printf ("s=%.2f",s);

s=11.00
3. Na slobodnim listovima papira napiite traene programe.
a) (4 boda) Napiite program koji izraunava vrijednost sljedee sume:
S=

1
x 1

2!
2
x 1

3!
...
3
x 1

n 1

n!
,
n
x 1

n 1

Napomena: Za stepenovanje koristite bibliotenu funkciju pow(b,e) pri emu je b baza a e je


eksponent. Funkcija se nalazi u biblioteci math.h.
b) (4 boda) Napiite program koji uitava sa tastature 5 realnih elemenata dva niza A i B a zatim
izraunava elemente treeg niza C (koji takoer ima 5 elemenata) pri emu se i-ti element niza C
dobiva prema sljedeoj formuli:
2

C i= Ai

3Bi 1,

i= 0,1 ,2 ,3 ,4

U prostor ispod teksta zadatka upiite traeni blok naredbi. Ne morate pisati #include
direktive, deklaracije varijabli ili funkcije main().
c) (1 bod) Napiite blok naredbi koji na ekranu
ispisuje AAAAA (pet slova A) pomou petlje
for.

d) (1 bod) Napiite blok naredbi koji na ekranu


ispisuje sve neparne brojeve izmeu 1 i 100.
Savjet: U pitanju su 2-3 linije koda.

Savjet: U pitanju su 2 linije koda.


for (i=0;i<5;i++)
printf("A");

for (i=2;i<100;i++)
if( i%2 != 0 )
printf("%d",i);

skinuto sa www.etf.ba

Zadatak 3 a)
#include <stdio.h>
#include <math.h>
int main() {
int i,n,brojnik,nazivnik,predznak;
float x,s;
printf ("Unesite n: ");
scanf ("%d",&n);
printf ("Unesite x: ");
scanf ("%f",&x);
S=0;
brojnik=1; nazivnik = x+1; predznak=1;
for (i=1;i<=n;i++) {
S = S + predznak* (float) brojnik/nazivnik;
brojnik = brojnik*i;
nazivnik = nazivnik*(x+1);
predznak = - predznak;
}
// Alternativno rjeenje
//
f=1;
//
for (i=1;i<=n;i++) {
//
S = S + pow(-1,i-1) * (float) f / pow(x+1,i);
//
f *= i;
//
}
printf ("\nSuma glasi: %.2f",suma);
return 0;
}
Zadatak 3b)
#include <stdio.h>
int main() {
int i;
float A[5],B[5],C[5];
for (i=0;i<5;i++) {
printf ("Unesite %d. clan niza A: ",i+1);
scanf ("%f",A[i]);
printf ("Unesite %d. clan niza B: ",i+1);
scanf ("%f",B[i]);
}
for (i=0;i<5;i++) {
C[i]=A[i]*A[i]+3*B[i]+1;
printf ("\nC[%d] = %.2f",i+1,C[i]);
}
return 0;
}

skinuto sa www.etf.ba

skinuto sa www.etf.ba

ELEKTROTEHNIKI FAKULTET SARAJEVO


Predmet: OSNOVE RAUNARSTVA

Prvi parcijalni ispit (09. 11. 2006)


Varijanta

Bodova
Ime i prezime (itko):
____________________________

Grupa: ___________ Broj indexa:


__________________
Potpis:
________________________________________

1. Napiite broj u traenom brojnom sistemu. Proces rjeavanja napiite na slobodnim


listovima.
a) (1 bod) Pretvorite broj iz dekadskog sistema u binarni:
137(10) =

10001001

(2)

b) (1 bod) Pretvorite broj iz binarnog sistema u oktalni:


11110101(2) =

365

(8)

c) (1 bod) Pretvorite broj iz dekadskog sistema u heksadecimalni:


329 (10) =

149

(16)

2. U slobodan prostor ispod koda upiite izlaz datog bloka naredbi.


a) (1 bod)

b) (2 boda)

int a=7, b=5;


switch (a%b) {
7%5 == 2
case 3:
printf("X");
case 1:
printf("X");
default:
<-----printf("X"); break;
}

int i,t=0;
for (i=1; i<50; i++) {
if (i%5==0) continue;
t++;
if (i==15||i==20||i==25)
break;
} t = 49 - 9 = 40
printf ("t=%d",t);

t=40

skinuto sa www.etf.ba

c) (2 boda)
char a='B',b='A';
while (a>5) {
printf ("%c",b);
a=a/2;
}
printf (" a=%d",a);
a=65 a=32 a=16 a=8 a=4->IZLAZ

d) (1 bod)
int a=5, b=3;
do {
b*=2; b=6
} while (++a<6); a=6
uslov NIJE ispunjen
b=b%a;
b = 6%6 = 0
printf ("a=%d,b=%d",a,b);

AAAA a=4

a=6,b=0

e) (1 bod)
int a=5;
float s;
a+=a++; a=11
s=a/3+1; s=3+1=4 - int/int !
printf ("s=%.2f",s);

s=4.00
3. Na slobodnim listovima papira napiite traene programe.
a) (4 boda) Napiite program koji izraunava vrijednost sljedee sume:
2

S= x

x
2!

x
...
3!

n 1

x
,
n!

n 1

Napomena: Za stepenovanje koristite bibliotenu funkciju pow(b,e) pri emu je b baza a e je


eksponent. Funkcija se nalazi u biblioteci math.h.
b) (4 boda) Napiite program koji uitava sa tastature 5 realnih elemenata dva niza A i B a zatim
izraunava elemente treeg niza C (koji takoer ima 5 elemenata) pri emu se i-ti element niza C
dobiva prema sljedeoj formuli:
C i= 2A 2i

Bi
5,
2

i= 0,1 ,2 ,3 ,4

U prostor ispod teksta zadatka upiite traeni blok naredbi. Ne morate pisati #include
direktive, deklaracije varijabli ili funkcije main().
c) (1 bod) Napiite blok naredbi koji na ekranu
ispisuje BABABA pomou petlje for.

d) (1 bod) Napiite blok naredbi koji na ekranu


ispisuje sve parne brojeve izmeu 1 i 50.

Savjet: U pitanju su 2 linije koda.

Savjet: U pitanju su 2-3 linije koda.

for (i=0;i<3;i++)
printf("BA");

for (i=1;i<50;i++)
if (i%2 == 0)
printf("%d",i);

Zadatak 3a)

skinuto sa www.etf.ba

#include <stdio.h>
#include <math.h>
int main() {
int i,n,brojnik,nazivnik,predznak;
float x,s;
printf ("Unesite n: ");
scanf ("%d",&n);
printf ("Unesite x: ");
scanf ("%f",&x);
S=0;
brojnik=x; nazivnik = 1; predznak=1;
for (i=1;i<=n;i++) {
S = S + predznak * (float) brojnik/nazivnik;
brojnik = brojnik*x;
nazivnik = nazivnik*i;
predznak = - predznak;
}
// Alternativno rjeenje
//
f=1;
//
for (i=1;i<=n;i++) {
//
S = S + pow(-1,i-1) * (float) pow(x,i) / f;
//
f *= i;
//
}
printf ("\nSuma glasi: %.2f",suma);
return 0;
}
Zadatak 3b)
#include <stdio.h>
int main() {
int i;
float A[5],B[5],C[5];
for (i=0;i<5;i++) {
printf ("Unesite %d. clan niza A: ",i+1);
scanf ("%f",A[i]);
printf ("Unesite %d. clan niza B: ",i+1);
scanf ("%f",B[i]);
}
for (i=0;i<5;i++) {
C[i]=2*A[i]*A[i]-B[i]/2+5;
printf ("\nC[%d] = %.2f",i+1,C[i]);
}
return 0;
}

skinuto sa www.etf.ba

ELEKTROTEHNIKI FAKULTET SARAJEVO


Predmet: OSNOVE RAUNARSTVA

Prvi parcijalni ispit (09. 11. 2006)


Varijanta

Bodova
Ime i prezime (itko):
____________________________

Grupa: ___________ Broj indexa:


__________________
Potpis:
________________________________________

1. Napiite broj u traenom brojnom sistemu. Proces rjeavanja napiite na slobodnim


listovima.
a) (1 bod) Pretvorite broj iz dekadskog sistema u binarni:
252(10) =

11111100

(2)

b) (1 bod) Pretvorite broj iz binarnog sistema u oktalni:


1100010(2) =

142

(8)

c) (1 bod) Pretvorite broj iz dekadskog sistema u heksadecimalni:


259 (10) =

103

(16)

2. U slobodan prostor ispod koda upiite izlaz datog bloka naredbi.


a) (1 bod)

b) (2 boda)

int a=5, b=4;


switch (a%b) { a%b == 1
case 0:
a++; b++;
case 1:
<------a++; b++; break;
case 2:
a--; b--;
case 3:
a--; b++; break;
}
printf ("a=%d,b=%d",a,b);

a=6,b=5

int a=5, b=6;


do {
b+=a++; b=11 a=6
} while (a<5);
uslov NIJE ispunjen
b%=a-1; b = 11 % (6-1) = 1
printf("a=%d,b=%d",a,b);
priznavali smo i
b = 11 % 6 - 1 = 5 - 1 = 4
jer nekima ovo nije objanjeno

a=6,b=1 ili a=6,b=4

skinuto sa www.etf.ba

c) (2 boda)
char a='B',b='C',c='A';
a=a+c; a='B'+'A'
b=b+'A'-a;
b='C'+'A'-('B'+'A')='C'-'B' = 1
a=c+b; a='A'+1 = 'B'
printf ("a=%c,b=%d,c=%c",
a,b,c);

d) (1 bod)
int i,j;
for (i=1; i<4; i++)
for (j=i; j<3; j++)
printf ("A");
i=1: j=1, j=2
i=2: j=2
i=3: /

a=B,b=1,c=A

AAA

e) (1 bod)
int a=1; float b=20;
while (a<4) {
b=b/a;
a++;
}
printf("b=%.2f",b);
b=20/1=20 b=20/2=10 b=10/3=3.33

b=3.33
3. Na slobodnim listovima papira napiite traene programe.
a) (4 boda) Napiite program koji izraunava vrijednost sljedee sume:
2

2
S= 1
2x 1

2
...
2x 1

n 1

2
,
2x 1

n 2

Napomena: Za stepenovanje koristite bibliotenu funkciju pow(b,e) pri emu je b baza a e je


eksponent. Funkcija se nalazi u biblioteci math.h.
b) (4 boda) Napiite program koji uitava sa tastature 5 realnih elemenata dva niza A i B a zatim
izraunava elemente treeg niza C (koji takoer ima 5 elemenata) pri emu se i-ti element niza C
dobiva prema sljedeoj formuli:
3

C i=

Ai
3

B2i 2 Ai Bi ,

i= 0,1,2,3,4

U prostor ispod teksta zadatka upiite traeni blok naredbi. Ne morate pisati #include
direktive, deklaracije varijabli ili funkcije main().
c) (1 bod) Napiite blok naredbi koji na ekranu
ispisuje abecedu (ABC.....Z).

d) (1 bod) Napiite blok naredbi koji izraunava


sumu svih brojeva izmeu 1 i 20.

Savjet: U pitanju su 2 linije koda.

Savjet: U pitanju su 2-3 linije koda.

for (i='A';i<='Z';i++)
printf("%c",i);

S=0;
for (i=2;i<20;i++)
S=S+i;

Zadatak 3a)
#include <stdio.h>

skinuto sa www.etf.ba

#include <math.h>
int main() {
int i,n,brojnik,nazivnik,predznak;
float x,s;
printf ("Unesite n: ");
scanf ("%d",&n);
printf ("Unesite x: ");
scanf ("%f",&x);
S=1; // prvi lan sume je dat
brojnik=4; nazivnik = 2*x+1; predznak=-1;
for (i=2;i<=n;i++) {
S = S + predznak * (float) brojnik/nazivnik;
brojnik = brojnik*2;
// nazivnik ostaje isti
predznak = - predznak;
}
// Alternativno rjeenje
//
for (i=2;i<=n;i++)
//
S = S + pow(-1,i-1) * (float) pow(2,i) / (2*x+1);
printf ("\nSuma glasi: %.2f",suma);
return 0;
}
Zadatak 3b)
#include <stdio.h>
int main() {
int i;
float A[5],B[5],C[5];
for (i=0;i<5;i++) {
printf ("Unesite %d. clan niza A: ",i+1);
scanf ("%f",A[i]);
printf ("Unesite %d. clan niza B: ",i+1);
scanf ("%f",B[i]);
}
for (i=0;i<5;i++) {
C[i]=A[i]*A[i]*A[i]/3+B[i]*B[i]-2*A[i]*B[i];
printf ("\nC[%d] = %.2f",i+1,C[i]);
}
return 0;
}

skinuto sa www.etf.ba

ELEKTROTEHNIKI FAKULTET SARAJEVO


Predmet: OSNOVE RAUNARSTVA

Prvi parcijalni ispit (09. 11. 2006)


Varijanta

Bodova
Ime i prezime (itko): ______________________

Grupa: ___________ Broj indexa: ____________


Potpis: __________________________________

1. Napiite broj u traenom brojnom sistemu. Proces rjeavanja napiite na slobodnim


listovima.
a) (1 bod) Pretvorite broj iz dekadskog sistema u binarni:
198(10) =

11000110

(2)

b) (1 bod) Pretvorite broj iz binarnog sistema u oktalni:


101101011(2) =

267

(8)

c) (1 bod) Pretvorite broj iz dekadskog sistema u heksadecimalni:


262 (10) =

106

(16)

2. U slobodan prostor ispod koda upiite izlaz datog bloka naredbi.


a) (1 bod)

b) (2 boda)

int a=7, b=6;


switch (a%b) { a%b == 1
case 0:
a--; b--;
case 1:
<------a--; b--; break;
case 2:
a++; b++;
case 3:
a--; b++; break;
}
printf ("a=%d,b=%d",a,b);

int a=7, b=8;


do {
b+=a++; b=15 a=8
} while (a<7);
uslov NIJE ispunjen
b%=a-1; b = 15 % (8-1) = 1
printf("a=%d,b=%d",a,b);
priznavali smo i
b = 15 % 8 - 1 = 7 - 1 = 6
jer nekima ovo nije objanjeno

a=6,b=5

a=8,b=1 ili a=8,b=6

c) (2 boda)
char a='B',b='A';

d) (1 bod)
int i,j;

skinuto sa www.etf.ba

while (a<'Z') {
if (a%5==0)
printf("%c",b);
a++;
}
'B'==66 'Z'==90 :
a=70 a=75 a=80 a=85

for (i=0; i<4; i++)


for (j=0; j<i; j++)
printf ("A");
i=0: /
i=1: j=0
i=2: j=0 j=1
i=3: j=0 j=1 j=2

AAAA

AAAAAA

e) (1 bod)
float b=40; int i;
for (i=1; i<4; i++)
b=b/i;
printf("b=%.2f",b);
40/1=40 40/2=20 20/3=6.666...

b=6.67
3. Na slobodnim listovima papira napiite traene programe.
a) (4 boda) Napiite program koji izraunava vrijednost sljedee sume:
2

x1
S= 1
x 1

x 1
...
x 2

n 1

x 1
,
x n

n 2

Napomena: Za stepenovanje koristite bibliotenu funkciju pow(b,e) pri emu je b baza a e je


eksponent. Funkcija se nalazi u biblioteci math.h.
b) (4 boda) Napiite program koji uitava sa tastature 5 realnih elemenata dva niza A i B a zatim
izraunava elemente treeg niza C (koji takoer ima 5 elemenata) pri emu se i-ti element niza C
dobiva prema sljedeoj formuli:
2

C i= Ai

4 Ai Bi 8 Bi

1,

i= 0,1 ,2 ,3,4

U prostor ispod teksta zadatka upiite traeni blok naredbi. Ne morate pisati #include
direktive, deklaracije varijabli ili funkcije main().
c) (1 bod) Napiite blok naredbi koji na ekranu
ispisuje sve brojeve izmeu 1 i 25.

d) (1 bod) Napiite blok naredbi koji izraunava


sumu svih brojeva izmeu 5 i 55.

Savjet: U pitanju su 2 linije koda.

Savjet: U pitanju su 2-3 linije koda.

for (i=2;i<25;i++)
printf("%d",i);

S=0;
for (i=6;i<55;i++)
S=S+i;

Zadatak 3a)
#include <stdio.h>

skinuto sa www.etf.ba

#include <math.h>
int main() {
int i,n,brojnik,nazivnik,predznak;
float x,s;
printf ("Unesite n: ");
scanf ("%d",&n);
printf ("Unesite x: ");
scanf ("%f",&x);
S=1; // prvi lan sume je dat
brojnik=x*x+1; nazivnik = x+1; predznak=-1;
for (i=2;i<=n;i++) {
S = S + predznak* (float) brojnik/nazivnik;
brojnik = pow(x,i+1)+1;
nazivnik = nazivnik + 1;
predznak = - predznak;
}
// Alternativno rjeenje
//
for (i=2;i<=n;i++)
//
S = S + pow(-1,i-1) * (float) (pow(x,i)+1) / (x+i-1);
printf ("\nSuma glasi: %.2f",suma);
return 0;
}
Zadatak 3b)
#include <stdio.h>
int main() {
int i;
float A[5],B[5],C[5];
for (i=0;i<5;i++) {
printf ("Unesite %d. clan niza A: ",i+1);
scanf ("%f",A[i]);
printf ("Unesite %d. clan niza B: ",i+1);
scanf ("%f",B[i]);
}
for (i=0;i<5;i++) {
C[i]=A[i]*A[i]+4*A[i]*B[i]+8*B[i]*B[i]+1;
printf ("\nC[%d] = %.2f",i+1,C[i]);
}
return 0;
}

skinuto sa www.etf.ba

A0829705
1. Napiite broj u traenom brojnom sistemu. Proces rjeavanja napiite na slobodnim listovima.
a) (1 bod) Pretvorite broj iz dekadskog sistema u binarni:
151(10) = _________________________________________ (2)
b) (1 bod) Pretvorite broj iz binarnog sistema u oktalni:
11110010(2) = _________________________________________ (8)
c) (1 bod) Pretvorite broj iz dekadskog sistema u heksadecimalni:
467(10) = _________________________________________ (16)

2. U slobodan prostor ispod koda upiite izlaz datog bloka naredbi.


(ASCII vrijednost slova A je 65. Za svako sljedee slovo engleskog alfabeta vrijednost se poveava za
jedan, pa je tako B = 66, C = 67, D = 68..., Q = 81 ...)

int x=13, y=4;


switch(++x%y) {
case 0:
x++; y--;
case 1:
x++; y++; break;
case 2:
x--; y--;
case 3:
x--; y++; break;
}
printf ("x=%d,y=%d",x,y);

int i,j=1;
for(i=1;i<=30;i++) {
if(i%4==1) continue;
j++;
if (i==5||i==10||i==15)
break;
}
printf("j=%d",j);

int i=6, j=2;


do {
j += i--;
} while(i-->5);
j%=i-2;
printf("i=%d,j=%d",i,j);

int h=18; float v;


h+=h--;
v=h/2+2;
printf("h=%d,v=%.2f",h,v);

char s='T',t='S';
while(s>1) {
printf("%c",t);
s=s/2;
}

skinuto sa www.etf.ba

3. Na slobodnim listovima papira napiite traene programe.


a) (4 boda) Napraviti program koji, za uneseni broj n, na ekranu iscrtava sljedei oblik (na slici je n=7):
n
n
+-----+-----+
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
+-----+-----+

(Ukupna irina: 2n-1)

n redova

Onemoguiti da korisnik unese paran broj n.


b) (4 boda) Napraviti program u kojem korisnik sa tastature unosi niz od 10 cijelih brojeva, a zatim se u
unesenom nizu pronalazi i na ekranu ispisuje minimum parnih brojeva.
Primjer: 10,7,8,6,3,1,2,2,5,4. Rjeenje je 2 (jer 1 nije paran broj).

U prostor ispod teksta upiite traeni blok


deklaracije varijabli ili funkcije main().
c) (1 bod) Napiite blok naredbi koji na ekranu
ispisuje AAAAAA (est slova A) pomou petlje
while.

naredbi. Ne morate pisati #include direktive,


d) (1 bod) Napiite blok naredbi koji na ekranu
ispisuje sve brojeve izmeu 1 i 50 koji su djeljivi
sa 5 a nisu djeljivi sa 2.

skinuto sa www.etf.ba

3. a) zadatak
Napraviti program koji, za uneseni broj n, na ekranu iscrtava sljedei oblik (na slici je n=7):
Onemoguiti da korisnik unese paran broj n.
Grupa A):
n
n
+-----+-----+
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
+-----+-----+

(Ukupna irina: 2n-1)

n redova

#include <stdio.h>
int main() {
int i,j,n;
do {
printf ("Unesite broj n: ");
scanf ("%d", &n);
} while (n%2==0);
/* prvi red */
for (i=0; i<2*n-1; i++) {
if (i==0 || i==n-1 || i==2*n-2)
printf ("+");
else
printf ("-");
}
printf ("\n");
/* sredina */
for (j=0; j<n-2; j++) {
for (i=0; i<2*n-1; i++) {
if (i==0 || i==n-1 || i==2*n-2)
printf ("+");
else
printf ("-");
}
printf ("\n");
}
/* zadnji red */
for (i=0; i<2*n-1; i++) {
if (i==0 || i==n-1 || i==2*n-2)
printf ("+");
else
printf ("-");

skinuto sa www.etf.ba

}
printf ("\n");
return 0;

Grupa B):
* * * * * * *
* * * * * * *
* * * * * * *
* * * * * * *
* * * * * * *
* * * * * * *
* * * * * * *
#include <stdio.h>
int main() {
int i,j,n;
do {
printf ("Unesite broj n: ");
scanf ("%d", &n);
} while (n%2==0);
for (i=0; i<n; i++) {
if (i%3==0)
printf (" ");
for (j=0; j<n; j++)
printf ("* ");
printf ("\n");
}
return 0;
}

Grupa C):
n kolona
+-----+
|\
|
| \
|
| \ |
n redova
|
\ |
|
\|
+-----+
#include <stdio.h>
int main() {
int i,j,n;
do {

printf ("Unesite broj n: ");

skinuto sa www.etf.ba

scanf ("%d", &n);


} while (n%2==0);
/* prvi red */
printf ("+");
for (i=0; i<n-2; i++) {
printf ("-");
}
printf ("+\n");
/* sredina */
for (j=0; j<n-2; j++) {
printf ("|");
for (i=0; i<n-2; i++) {
if (i==j)
printf ("\\");
else
printf (" ");
}
printf ("|\n");
}

/* zadnji red */
printf ("+");
for (i=0; i<n-2; i++) {
printf ("-");
}
printf ("+\n");
return 0;

Grupa D):
n kolona
+--+--+
| | |
| | |
| | |
| | |
| | |
+--+--+

n redova

#include <stdio.h>
int main() {
int i,j,n;
do {
printf ("Unesite broj n: ");
scanf ("%d", &n);
} while (n%2==0);
/* prvi red */
for (i=0; i<n; i++) {
if (i==0 || i==n-1 || i==n/2)
printf ("+");
else

skinuto sa www.etf.ba

printf ("-");
}
printf ("\n");
/* sredina */
for (j=0; j<n-2; j++) {
for (i=0; i<n; i++) {
if (i==0 || i==n-1 || i==n/2)
printf ("+");
else
printf ("-");
}
printf ("\n");
}
/* zadnji red */
for (i=0; i<n; i++) {
if (i==0 || i==n-1 || i==n/2)
printf ("+");
else
printf ("-");
}
printf ("\n");
return 0;
}

3. b) zadatak
Napraviti program u kojem korisnik sa tastature unosi niz od 10 cijelih brojeva, a zatim se u
unesenom nizu pronalazi i na ekranu ispisuje
Grupa A) minimum parnih brojeva.
Primjer: 10,7,8,6,3,1,2,2,5,4. Rjeenje je 2 (jer 1 nije paran broj).
Grupa A):
#include <stdio.h>
int main() {
int niz[10],i,min;
for (i=0; i<10; i++) {
printf ("Unesite %d. clan niza: ", i+1);
scanf ("%d",&niz[i]);
}
/* Pocetna vrijednost za min */
for (i=0; i<10; i++) {
if (niz[i]%2==0) { min=niz[i]; break; }
}
if (i==10) {
printf ("\nNema parnih brojeva!\n");
} else {
for (i=0; i<10; i++) {
if (niz[i]%2==0 && niz[i]<min) min=niz[i];
}
printf ("\nNajmanji parni clan je: %d\n", min);

skinuto sa www.etf.ba

Grupa B) srednju vrijednost brojeva na parnim pozicijama.


Primjer: 10,7,8,6,3,1,2,2,5,4. Na parnim pozicijama se nalaze: 7,6,1,2,4. Srednja vrijednost ovih
brojeva je (7+6+1+2+4)/5 = 20/5 = 4
Grupa B):
#include <stdio.h>
int main() {
int niz[10],i,suma;
float sv;
suma=0;
for (i=0; i<10; i++) {
printf ("Unesite %d. clan niza: ",i+1);
scanf ("%d",&niz[i]);
if ((i+1)%2==0)
suma += niz[i];
}
sv = (float)suma/5;
printf ("Srednja vrijednost brojeva na parnim pozicijama glasi: %.3f\n",
sv);

return 0;

Grupa C) razliku sume parnih i sume neparnih brojeva.


Primjer: 10,7,8,6,3,1,2,2,5,4. Suma parnih je 10+8+6+2+2+4 = 32. Suma neparnih je 7+3+1+5 =
16. Rezultat je 32 - 16 = 16.
Grupa C):
#include <stdio.h>
int main() {
int niz[10],i,sumap,suman;
sumap=suman=0;
for (i=0; i<10; i++) {
printf ("Unesite %d. clan niza: ",i+1);
scanf ("%d",&niz[i]);
if (niz[i]%2==0)
sumap += niz[i];
else
suman += niz[i];
}
printf ("Razlika suma parnih i neparnih je %d\n", sumap-suman);
return 0;
}

skinuto sa www.etf.ba

Grupa D) korijen proizvoda najveeg i najmanjeg elementa (

maxmin )

Primjer: 10,7,8,6,3,1,2,2,5,4. Najvei element je 10 a najmanji je 1. Rjeenje je


101= 10=3.162

Grupa D):
#include <stdio.h>
#include <math.h>
int main() {
int niz[10],i,max,min;
float korijen;
for (i=0; i<10; i++) {
printf ("Unesite %d. clan niza: ",i+1);
scanf ("%d",&niz[i]);
}
max=niz[0];
min=niz[0];
for (i=1; i<10; i++) {
if (niz[i]>max)
max = niz[i];
if (niz[i]<min)
min = niz[i];
}
korijen = sqrt(max*min);
printf ("Korijen proizvoda maksimuma i minimuma je %.3f\n", korijen);
return 0;
}

skinuto sa www.etf.ba

I PARCIJALNI ISPIT
3a) ZADATAK (4 boda)
1. Napraviti program koji, za uneseni broj n, na ekranu iscrtava sljedei oblik (na slici je n=7):
+-----+
|\
/|
| \ / |
| X |
| / \ |
|/
\|
+-----+
Onemoguiti da korisnik unese paran broj n.
#include <stdio.h>
int main()
{
int i, j, n;
do {
printf ("Unesite broj n: ");
scanf ("%d", &n);
} while (n%2==0);
printf("+");
for(i=0; i<n-2; i++)
printf("-");
printf("+\n");
for(i=1; i<n-1; i++){
printf("|");
for(j=1; j<n-1; j++)
if(i==n/2 && j==n/2) printf("X");
else if(i==j ) printf("\\");
else if(i==n-1-j ) printf("/");
else printf(" ");
printf("|\n");
}
printf("+");
for(i=0; i<n-2; i++)
printf("-");
printf("+\n");
}

return 0;

2. Napraviti program koji, za uneseni broj n, na ekranu iscrtava sljedei oblik (na slici je n=7):
+-----+
| | |
| | |

skinuto sa www.etf.ba

|--+--|
| | |
| | |
+-----+
Onemoguiti da korisnik unese paran broj n.
#include <stdio.h>
int main()
{
int i, j, n;
do {
printf ("Unesite broj n: ");
scanf ("%d", &n);
} while (n%2==0);
printf("+");
for(i=0; i<n-2; i++)
printf("-");
printf("+\n");
for(i=1; i<n-1; i++){
printf("|");
for(j=1; j<n-1; j++)
if(i==n/2 && j==n/2) printf("+");
else if(j==n/2 ) printf("|");
else if(i==n/2 ) printf("-");
else printf(" ");
printf("|\n");
}
printf("+");
for(i=0; i<n-2; i++)
printf("-");
printf("+\n");
}

return 0;

3. Napraviti program koji, za uneseni broj n, na ekranu iscrtava sljedei oblik (na slici je n=7):
* * * * * * *
* * * * * * *
* * * * * * *
* * * * * * *
* * * * * * *
* * * * * * *
* * * * * * *
Onemoguiti da korisnik unese paran broj n.
#include <stdio.h>
int main()
{
int i, j, n;
do {
printf ("Unesite broj n: ");

skinuto sa www.etf.ba

scanf ("%d", &n);


} while (n%2==0);
for(i=1; i<=n; i++){
if(i%2==0) printf(" ");
if(i%4==3) printf(" ");
for(j=1; j<=n; j++)
printf("* ");
printf("\n");
}
return 0;
}

4. Napraviti program koji, za uneseni broj n, na ekranu iscrtava sljedei oblik (na slici je n=7):
* * * * * * *
* * * * * * *
* * * * * * *
* * * * * * *
* * * * * * *
* * * * * * *
* * * * * * *
Onemoguiti da korisnik unese paran broj n.
#include <stdio.h>
int main()
{
int i, j, n;
do {

printf ("Unesite broj n: ");


scanf ("%d", &n);
} while (n%2==0);
for(i=1; i<=n; i++){
if(i%2!=0) printf(" ");
if(i%4==0) printf(" ");
for(j=1; j<=n; j++)
printf("* ");
printf("\n");
}
return 0;
}

3b) ZADATAK (4 boda)


1. Napraviti program u kojem korisnik sa tastature unosi niz od 10 cijelih brojeva, a zatim se u
unesenom nizu pronalazi i na ekranu ispisuje maksimalni element brojeva na parnim pozicijama.
Npr. za niz: 3, 2, 5, 4, 1, 2, 8, 9, 5, 2
Rjeenje je 9. Na parnim pozicijama se nalaze 2,4,2,9,2, od kojih je najvei 9.
#include <stdio.h>

skinuto sa www.etf.ba

int main()
{
int niz[10],i,max;
for (i=0; i<10; i++) {
printf ("Unesite %d. clan niza: ", i+1);
scanf ("%d",&niz[i]);
}
max=niz[1];
for(i=0; i<10; i++)
if(i%2!=0 && niz[i]>max) max=niz[i];
printf("\nmax= %d", max);
return 0;
}

2. Napraviti program u kojem korisnik sa tastature unosi niz od 10 cijelih brojeva, a zatim u
unesenom nizu pronalazi i na ekranu ispisuje sumu svih brojeva koji su djeljivi sa 3, a nisu djeljivi
sa 9.
Npr. za niz: 3, 2, 5, 4, 3, 2, 8, 9, 6, 2
Rjeenje je 12. Brojevi koji su djeljivi sa 3 a nisu sa 9 su: 3, 3, 6.
#include <stdio.h>
int main()
{
int niz[10],i,suma=0;
for (i=0; i<10; i++) {
printf ("Unesite %d. clan niza: ", i+1);
scanf ("%d",&niz[i]);
}
for(i=0; i<10; i++)
if(niz[i]%3==0 && niz[i]%9!=0) suma+=niz[i];
printf("\nsuma= %d", suma);
return 0;
}

3. Napraviti program u kojem korisnik sa tastature unosi niz od 10 cijelih brojeva, a zatim se u
unesenom nizu pronalazi i na ekranu ispisuje srednja vrijednost neparnih brojeva.
Npr. za niz: 3, 2, 5, 4, 3, 2, 8, 9, 6, 2
Sv=(3+5+3+9)/4
program treba ispisati 5.00.
#include <stdio.h>
int main()
{
int niz[10],i,suma =0, brojac=0;
float sv;
for (i=0; i<10; i++) {
printf ("Unesite %d. clan niza: ", i+1);

skinuto sa www.etf.ba

scanf ("%d",&niz[i]);

for(i=0; i<10; i++){


if(niz[i]%2!=0 ){
suma+=niz[i];
brojac++;
}
}
sv=(float)suma/brojac;
printf("\nsv= %.2f", sv);
return 0;
}

4. Napraviti program u kojem korisnik sa tastature unosi niz od 10 cijelih brojeva, a zatim se u
unesenom nizu pronalazi i na ekranu ispisuje vea od dvije vrijednosti Sp i Sn, pri emu je Sp suma
parnih elemenata (brojeva), a Sn suma neparnih elemenata.
Npr. za niz: 3, 2, 5, 4, 3, 2, 8, 9, 6, 2
Sp=2+4+2+8+6+2 = 24
Sn=3+5+3+9 = 20
program treba ispisati 24.
#include <stdio.h>
int main()
{
int niz[5],i,sp =0,sn=0 ;
for (i=0; i<5; i++) {
printf ("Unesite %d. clan niza: ", i+1);
scanf ("%d",&niz[i]);
}
for(i=0; i<5; i++){
if(niz[i]%2==0) sp+=niz[i];
else sn+=niz[i];
}

if(sp>sn)
printf("\nsp= %d", sp);
else
printf("\nsn= %d", sn);
return 0;

II PARCIJALNI ISPIT
2a) ZADATAK (4 boda)

skinuto sa www.etf.ba

1. Napraviti funkciju koja u datom nizu realnih brojeva pronalazi srednju vrijednost decimalnih
dijelova (dio iza zareza) tih brojeva.
Primjer:
Dat je niz
3.21 5.853 1.95 5.92 8.7 3.1
Decimalni dijelovi su
0.21 0.853 0.95 0.92 0.7 0.1
Srednja vrijednost ovih brojeva je 0.622167.
float max_dec(float *niz, int vel) {
int i;
float svdec=0;
for (i=0; i<vel; i++) {
svdec += niz[i] - (int)niz[i];
}
svdec /= vel;
return svdec;
}

2. Napraviti funkciju koja u datom nizu cijelih brojeva pronalazi lan koji je najdalji od srednje
vrijednosti i vraa taj lan. Ako postoje dva razliita lana koji su podjednako udaljeni od srednje
vrijednosti, funkcija treba vratiti vei.
Primjer:
Dat je niz
10 5 4 9 8 3
Srednja vrijednost elemenata niza je 6,5
Najdalji lanovi u nizu su 10 i 3 (oba se razlikuju za 3,5). Poto je broj 10 vei, funkcija
treba vratiti broj 10.

int najblizi_sv(int* niz, int vel) {


/* Odredjivanje srednje vrijednosti */
int i; float sv=0;
for (i=0; i<vel; i++) {
sv += niz[i];
}
sv /= vel;
/* Trazenje najvece razlike */
float razlika=abs(niz[0]-sv);
int indeks=0;
for (i=0; i<vel; i++) {
if ((abs(niz[i]-sv)>razlika) || (abs(niz[i]-sv)==razlika &&
niz[i]>niz[indeks])) {
razlika=abs(niz[i]-sv);
indeks=i;
}
}
return niz[indeks];
}

3. Napraviti funkciju koja u datom nizu cijelih brojeva pronalazi broj ija je posljednja cifra najvea
i vraa njegov indeks. Ukoliko dva broja imaju jednaku posljednju cifru, poredi se pretposljednja,
zatim trea zdesna itd.

skinuto sa www.etf.ba

Primjer:
Dat je niz

321 5853 195 5 87 31 127

funkcija treba vratiti 4

Najveu posljednju cifru imaju brojevi 87 i 127, ali kako je 8 vee od 2, traeni broj je 87. Ovaj broj
je peti po redu, dakle ima indeks 4.
int najveca_cifra(int* niz, int vel) {
int max=niz[0];
int maxi=0;
int i;
for (i=1; i<vel; i++) {
if (niz[i]%10>max%10) {
max=niz[i];
maxi=i;
} else if (niz[i]%10==max%10) {
int k=niz[i]/10;
int j=max/10;
while (k%10==j%10 && (k!=0 || j!=0)) {
k /= 10;
j /= 10;
}
if (k%10>j%10) {
max=niz[i];
maxi=i;
}
}
}
return maxi;
}

4. Napraviti funkciju koja u datom nizu cijelih brojeva pronalazi trei po veliini i vraa indeks tog
lana u nizu.
Primjer:
Za niz
10 5 4 9 8 3 -1
funkcija vraa
4
Jer se trei po veliini lan (8) nalazi na 5. mjestu odnosno oznaen je indeksom 4 (prvi lan ima
indeks 0, drugi indeks 1 itd.)
int treci(int* niz, int vel) {
int i,max,maxi,drugi,drugii,treci,trecii;
/* Funkcija nema smisla za manje od 3 elementa... */
if (vel<3) return 0;
/* Pocetne vrijednosti */
max=niz[0]; maxi=0; drugi=niz[1]; drugii=1; treci=niz[2]; trecii=2;
for (i=1; i<vel; i++) {
if (niz[i]>max) {
treci=drugi;
trecii=drugii;
drugi=max;
drugii=maxi;
max=niz[i];
maxi=i;
} else if (niz[i]>drugi) {
treci=drugi;

skinuto sa www.etf.ba

trecii=drugii;
drugi=niz[i];
drugii=i;
} else if (niz[i]>treci) {
treci=niz[i];
trecii=i;
}
return drugii;
}

2b) ZADATAK (5 bodova)


1. Napraviti funkciju koja simulira naredbu
printf ("%5d", n);
Dakle, funkcija prima cijeli broj n a zatim ga upisuje u niz tipa char od minimalno 5 elemenata (nije
potrebno provjeravati da li je niz dovoljno velik). Broj treba biti poravnat udesno, mjesta s lijeve
strane treba popuniti razmacima. Funkcija mora ispravno rukovati negativnim brojevima, odnosno
upisati znak minus ispred broja ako je broj negativan. Za razliku od redovnog roka, nije potrebno
upisivati slovo E (Funkcija koji bude rjeenje redovnog roka a ne ovog zadatka bie bodovana sa 0
bodova).
char* upisi5(char* niz, int n) {
/* Prebrojavanje cifara */
int brcifara=0, tmp=n;
while (tmp!=0) {
brcifara++;
tmp/=10;
}
/* Upisivanje broja */
int k=4;
tmp=n;
for (;k>=0;k--) {
if (tmp!=0) {
niz[k]='0'+abs(tmp%10);
tmp/=10;
} else {
niz[k]=' ';
}
}
/* Upisivanje minusa */
if (n<0) {
if (brcifara>=4)
niz[0]='-';
else
niz[5-brcifara-1]='-';
}
niz[5]='\0';
return niz;
}

2. Napraviti funkciju sa sljedecim prototipom:

void duze_od(char* recenica, char* velike_rijeci, int n)

skinuto sa www.etf.ba

koja u datom stringu recenica pronalazi sve rijei due od n znakova i prepisuje ih u string
velike_rijeci. Pretpostaviti da je duina niza velike_rijeci vea ili jednaka od duine niza recenica.
Radi jednostavnosti, ne trebate posebno tretirati znakove interpunkcije. Rije je svaki dio teksta koji
je ogranien sa jednim ili vie razmaka.
Napomena: Pri rjeavanju zadatka je dozvoljeno (ali ne i nuno) koritenje funkcija iz biblioteke
string.h.

void duze_od(char* recenica, char* velike_rijeci, int n) {


int brslova=1; /* Prvo slovo preskacemo posto je p++ u while petlji */
char *p=recenica; /* radi kraceg pisanja */
char *q=velike_rijeci;
while (*p++!='\0') {
if (*p==' ' || *p=='\0') {
if (brslova>n) {
/* +1 osigurava da se kopira i razmak */
strncpy(q,p-brslova,brslova+1);
q+=brslova+1;
}
brslova=0;
} else {
brslova++;
}
}
*q='\0';
}

VARIJANTA 2 (bez koritenja string.h)


void duze_od(char* recenica, char* velike_rijeci, int n) {
int brslova=1; /* Prvo slovo preskacemo posto je p++ u while petlji */
char *p=recenica; /* radi kraceg pisanja */
char *q=velike_rijeci;
while (*p++!='\0') {
if (*p==' ' || *p=='\0') {
if (brslova>n) {
char*r = p-brslova;
while (r != p)
*q++=*r++;
*q++=' '; /* razmak */
}
brslova=0;
} else {
brslova++;
}
}
*q='\0';
}

3. Napraviti funkciju sa sljedeim prototipom:


int slova2puta(char* s)
koja u datom stringu pronalazi koliko ima slova koja se javljaju tano dva puta. Funkcija ne treba
praviti razliku izmeu velikih i malih slova.
Primjer 1:
Za string

Abeceda

funkcija treba vratiti

skinuto sa www.etf.ba

jer slova A i E se javljaju po dva puta, a poto funkcija ne razlikuje velika i mala slova, veliko i
malo A se ne broje odvojeno.
Primjer 2:
Za string
Ovo je neki primjer
Po dva puta javljaju se slova O, I, J i R.

funkcija treba vratiti

int slova2puta(char *s) {


int i,brojac[30];
for (i=0; i<30; i++) brojac[i]=0;
/* Prebrojavanje */
while (*s!='\0') {
if (*s>='A' && *s<='Z') brojac[*s-'A']++;
if (*s>='a' && *s<='z') brojac[*s-'a']++;
*s++;
}
/* Koliko ih se javlja 2 puta */
int dva_puta=0;
for (i=0; i<30; i++) {
if (brojac[i]==2) dva_puta++;
}
return dva_puta;
}

4. Napraviti funkciju sa sljedeim prototipom:


int trocifreni(char* s)
koja pronalazi i vraa prvi trocifreni broj koji se javlja u datom stringu s. Pri tome paziti da funkcija
ne vraa etverocifrene, petocifrene itd. brojeve. Ukoliko se u stringu ne javlja nijedan trocifren
broj, funkcija treba vratiti -1. Ne morate obraati panju na negativne brojeve.
Primjer:
Za string
Za string

A1b2C123
A1b2C1234

funkcija vraa
funkcija vraa

123
-1 (jer je 1234 etverocifren)

int trocifreni(char *s) {


int rezultat=-1;
int cifre=0;
/* Posto petlja preskace prvi znak, moramo ga provjeriti */
if (*s>='0' && *s<='9') cifre++;
/* Trazimo trocifren broj */
while (*s++!='\0') {
if (*s>='0' && *s<='9')
/* Trenutni znak je cifra */
cifre++;
else {
/* Znak nije cifra */
/* Da li je ispred trocifren broj? */
if (cifre==3) {
rezultat=(*(s-3)-'0')*100 + (*(s-2)-'0')*10 +
(*(s-1)-'0');

skinuto sa www.etf.ba

break; /* Izlaz iz petlje */


}
cifre=0;

}
}

return rezultat;

3) ZADATAK (6 bodova)
1. U gradu Sarajevu tokom dvije godine vrena su svakodnevna mjerenja temperatura i to u 9, 13,
16 i 20 sati. Ta mjerenja zapisana su u datoteku mjerenja-sarajevo.txt i to u obliku:
9.2 16.4 15.2 10.5
12.7 21.1 20.5 15.6
13.2 21.6 21.0 15.5
11.9 20.5 19.8 14.9
itd. Ova mjerenja potrebno je uitati u niz struktura oblika:
struct mjerenja {
float u9, u13, u16, u20;
} sarajevo[731];
Ovaj niz treba sortirati po mjerenju u 13 sati i zatim upisati u datoteku sortirano13-sarajevo.txt.
Takoe na ekranu treba ispisati ukupan broj uitanih mjerenja, broj dana u kojima temperatura u 9
sati nije bila najmanja te broj dana u kojima temperatura u 13 sati nije bila najvea. Primjer:
Iz datoteke su ucitani podaci za 730 dana.
Od toga, ima 25 dana u kojima temperatura u 9 nije najmanja,
a 27 dana u kojima temperatura u 13 nije najveca.
RJEENJE
#include <stdio.h>
struct mjerenja {
float u9, u13, u16, u20;
} sarajevo[731];
int main() {
FILE *ulaz, *izlaz;
int i=0,j,k,brojac1,brojac2;
ulaz=fopen("mjerenja-sarajevo.txt","r");
if (ulaz==NULL) {
printf ("Greska kod otvaranja datoteke mjerenja-sarajevo.txt.\n");
return 1;
}
/* NAPOMENA: prilikom testiranja mozete staviti %f%f%f%f */
while (fscanf(ulaz, "%5.1f %5.1f %5.1f %5.1f\n", &sarajevo[i].u9,
&sarajevo[i].u13, &sarajevo[i].u16, &sarajevo[i].u20)==4)
i++;
fclose(ulaz);
/* Ispis na ekran */
printf ("Iz datoteke su ucitani podaci za %d dana.\n",i);

skinuto sa www.etf.ba

brojac1=brojac2=0;
for (j=0; j<i; j++) {
/* Temperatura u 9 sati nije najmanja */
if (sarajevo[j].u9>sarajevo[j].u13 || sarajevo[j].u9>sarajevo[j].u16
|| sarajevo[j].u9>sarajevo[j].u20)
brojac1++;
/* Temperatura u 13 sati nije najveca */
if (sarajevo[j].u13<sarajevo[j].u9 ||
sarajevo[j].u13<sarajevo[j].u16 || sarajevo[j].u13<sarajevo[j].u20)
brojac2++;
}
printf ("Od toga, ima %d dana u kojima temperatura u 9 nije najmanja,\na
%d dana u kojima temperatura u 13 nije najveca.\n",brojac1,brojac2);
/* Sortiranje i upis u izlaz */
izlaz=fopen("sortirano13-sarajevo.txt","w");
if (izlaz==NULL) {
printf ("Greska kod otvaranja datoteke sortirano13sarajevo.txt.\n");
return 2;
}
for (j=0; j<i; j++) {
for (k=j+1; k<i; k++) {
if (sarajevo[j].u13>sarajevo[k].u13) {
struct mjerenja temp = sarajevo[j];
sarajevo[j] = sarajevo[k];
sarajevo[k] = temp;
}
}
}
for (j=0; j<i; j++)
fprintf (izlaz,"%5.1f %5.1f %5.1f %5.1f\n", sarajevo[j].u9,
sarajevo[j].u13, sarajevo[j].u16, sarajevo[j].u20);
fclose(izlaz);
}

return 0;

3 b). U gradu Sarajevu tokom dvije godine vrena su svakodnevna mjerenja temperatura i to u 9,
13, 16 i 20 sati. Ta mjerenja zapisana su u datoteku mjerenja-sarajevo.txt i to u obliku:
9.2 16.4 15.2 10.5
12.7 21.1 20.5 15.6
13.2 21.6 21.0 15.5
11.9 20.5 19.8 14.9
itd. Ova mjerenja potrebno je uitati u niz struktura oblika:
struct mjerenja {
float u9, u13, u16, u20;
} sarajevo[731];
Ovaj niz treba sortirati po mjerenju u 16 sati i zatim upisati u datoteku sortirano16-sarajevo.txt.
Takoe na ekranu treba ispisati ukupan broj uitanih mjerenja, te prosjene vrijednosti za sva etiri
mjerenja. Primjer:
Iz datoteke su ucitani podaci za 730 dana.
Prosjecna temperatura u 9 sati: 11.77
Prosjecna temperatura u 13 sati: 19.10
Prosjecna temperatura u 16 sati: 17.81

skinuto sa www.etf.ba

Prosjecna temperatura u 20 sati: 12.85

RJEENJE
#include <stdio.h>
struct mjerenja {
float u9, u13, u16, u20;
} sarajevo[731];
int main() {
FILE *ulaz, *izlaz;
int i=0,j,k,brojac1,brojac2;
ulaz=fopen("mjerenja-sarajevo.txt","r");
if (ulaz==NULL) {
printf ("Greska kod otvaranja datoteke mjerenja-sarajevo.txt.\n");
return 1;
}
/* NAPOMENA: prilikom testiranja mozete staviti %f%f%f%f */
while (fscanf(ulaz, "%5.1f %5.1f %5.1f %5.1f\n", &sarajevo[i].u9,
&sarajevo[i].u13, &sarajevo[i].u16, &sarajevo[i].u20)==4)
i++;
fclose(ulaz);
/* Ispis na ekran */
printf ("Iz datoteke su ucitani podaci za %d dana.\n",i);
float prosjek9,prosjek13,prosjek16,prosjek20;
prosjek9=prosjek13=prosjek16=prosjek20=0;
for (j=0; j<i; j++) {
prosjek9 += sarajevo[j].u9;
prosjek13 += sarajevo[j].u13;
prosjek16 += sarajevo[j].u16;
prosjek20 += sarajevo[j].u20;
}
prosjek9 /= i;
prosjek13 /= i;
prosjek16 /= i;
prosjek20 /= i;
printf ("Prosjecna temperatura u 9 sati: %2.2f\nProsjecna temperatura u 13
sati: %2.2f\nProsjecna temperatura u 16 sati: %2.2f\nProsjecna temperatura u 20
sati: %2.2f\n",prosjek9,prosjek13,prosjek16,prosjek20);
/* Sortiranje i upis u izlaz */
izlaz=fopen("sortirano16-sarajevo.txt","w");
if (izlaz==NULL) {
printf ("Greska kod otvaranja datoteke sortirano16sarajevo.txt.\n");
return 2;
}
for (j=0; j<i; j++) {
for (k=j+1; k<i; k++) {
if (sarajevo[j].u16>sarajevo[k].u16) {
struct mjerenja temp = sarajevo[j];
sarajevo[j] = sarajevo[k];
sarajevo[k] = temp;

skinuto sa www.etf.ba

}
for (j=0; j<i; j++)
fprintf (izlaz,"%5.1f %5.1f %5.1f %5.1f\n", sarajevo[j].u9,
sarajevo[j].u13, sarajevo[j].u16, sarajevo[j].u20);
fclose(izlaz);
return 0;
}

3 c). Dat je sljedei niz struktura:


struct ispit {
int id_studenta;
int id_predmeta;
float bodovi;
} ispiti[100];
Program iz datoteke ispiti.txt uitava sadraj ovog niza. Treba odrediti koliko ukupno ima
studenata koji su poloili 0 ispita, 1 ispit, 2 ispita itd. i to upisati u datoteku statistike.txt. Ispit je
poloen ukoliko je student na njemu ostvario najmanje 10 bodova. Ukoliko se u datoteci ponavlja
isti student i isti predmet, program treba na ekranu ispisati podatke koji se ponavljaju i nastaviti s
radom, ne uzimajui u obzir ponovljeni podatak.
Primjer sadraja datoteke ispiti.txt:
1 1 15
1 2 10
139
1 4 11
2 1 19
2 1 18
227
230
Datoteka statistike.txt treba izgledati ovako:
Polozilo 0 ispita: 0 studenata
Polozilo 1 ispit: 1 student
Polozilo 2 ispita: 0 studenata
Polozilo 3 ispita: 1 student
Na ekranu treba ispisati:
Podaci se ponavljaju za studenta 2, ispit 1 (18 bodova) !
RJEENJE
#include <stdio.h>
struct ispit {
int id_studenta;
int id_predmeta;
float bodovi;
} ispiti[100];

skinuto sa www.etf.ba

int main() {
FILE *ulaz, *izlaz;
int i=0,j,k,max_broj_polozenih,broj_polozenih,max_id_studenta;
int brojaci[100];
ulaz=fopen("ispiti.txt","r");
if (ulaz==NULL) {
printf ("Greska kod otvaranja datoteke ispiti.txt.\n");
return 1;
}
max_id_studenta=0;
while (fscanf(ulaz, "%2d%2d%2f\n", &ispiti[i].id_studenta,
&ispiti[i].id_predmeta, &ispiti[i].bodovi)==3) {
/* Provjera ponavljanja */
for (j=0; j<i; j++) {
if (ispiti[j].id_studenta==ispiti[i].id_studenta &&
ispiti[j].id_predmeta==ispiti[i].id_predmeta) {
printf ("Podaci se ponavljaju za studenta %d, ispit %d
(%.0f bodova) !\n", ispiti[i].id_studenta, ispiti[i].id_predmeta,
ispiti[i].bodovi);
i--; /* Ne uzimamo ovaj ispit u obzir */
break;
}
}
/* max_id_studenta nam treba malo kasnije */
if (ispiti[i].id_studenta > max_id_studenta)
max_id_studenta=ispiti[i].id_studenta;
i++;
}
fclose(ulaz);
/* Izracunavanje statistike */
for (j=0; j<100; j++) brojaci[j]=0;
max_broj_polozenih=0;
/* Petlja studenata */
for (j=1; j<=max_id_studenta; j++) {
/* Koliko ispita je polozio student sa IDom j ? */
broj_polozenih=0;
for (k=0; k<i; k++) {
if (ispiti[k].id_studenta==j && ispiti[k].bodovi>=10)
broj_polozenih++;
}
if (broj_polozenih>max_broj_polozenih)
max_broj_polozenih=broj_polozenih;
/* Niz brojaci oznacava koliko ima studenata koji su polozili n
ispita */
brojaci[broj_polozenih]++;
}
/* Ispis u datoteku */
izlaz=fopen("statistike.txt","w");
if (izlaz==NULL) {
printf ("Greska kod otvaranja datoteke statistike.txt.\n");
return 2;
}
for (j=0; j<=max_broj_polozenih; j++)
fprintf (izlaz,"Polozilo %d ispita: %d studenata\n", j, brojaci[j]);
fclose(izlaz);
}

return 0;

skinuto sa www.etf.ba

3 d). Dat je sljedei niz struktura:


struct ispit {
int id_studenta;
int id_predmeta;
float bodovi;
} ispiti[100];
Program iz datoteke ispiti.txt uitava sadraj ovog niza. Treba odrediti prosjenu ocjenu za svaki
uneseni predmet i upisati u datoteku prosjeci.txt u obliku: id_predmeta (4 mjesta), prosjek (realan
broj, 4 mjesta prije zareza, 4 mjesta poslije). Ukoliko se u datoteci ponavlja isti student i isti
predmet, program treba na ekranu ispisati podatke koji se ponavljaju i nastaviti s radom, ne
uzimajui u obzir ponovljeni podatak.
Primjer sadraja datoteke ispiti.txt:
1 1 15
1 2 10
139
1 4 11
2 1 19
2 1 18
227
230
Datoteka prosjeci.txt treba izgledati ovako:
1 11,25
2 8,3333
Na ekranu treba ispisati:
Podaci se ponavljaju za studenta 2, ispit 1 (18 bodova) !
RJEENJE:
#include <stdio.h>
struct ispit {
int id_studenta;
int id_predmeta;
float bodovi;
} ispiti[100];
int main() {
FILE *ulaz, *izlaz;
int i=0,j,k,max_id_predmeta,broj_ispita;
float prosjeci[100];
/* Posto moze biti maksimalno 100 ispita, broj predmeta je takodje 100 */
ulaz=fopen("ispiti.txt","r");
if (ulaz==NULL) {
printf ("Greska kod otvaranja datoteke ispiti.txt.\n");
return 1;
}
max_id_predmeta=0;
while (fscanf(ulaz, "%2d%2d%2f\n", &ispiti[i].id_studenta,

skinuto sa www.etf.ba

&ispiti[i].id_predmeta, &ispiti[i].bodovi)==3) {
/* Provjera ponavljanja */
for (j=0; j<i; j++) {
if (ispiti[j].id_studenta==ispiti[i].id_studenta &&
ispiti[j].id_predmeta==ispiti[i].id_predmeta) {
printf ("Podaci se ponavljaju za studenta %d, ispit %d
(%.0f bodova) !\n", ispiti[i].id_studenta, ispiti[i].id_predmeta,
ispiti[i].bodovi);
i--; /* Ne uzimamo ovaj ispit u obzir */
break;
}
}
/* max_id_predmeta nam treba malo kasnije */
if (ispiti[i].id_predmeta > max_id_predmeta)
max_id_predmeta=ispiti[i].id_predmeta;
i++;
}
fclose(ulaz);
/* Izracunavanje prosjeka */
for (j=0; j<100; j++) prosjeci[j]=0;
/* Petlja predmeta */
for (j=1; j<=max_id_predmeta; j++) {
/* Koji je prosjek za predmet sa IDom j ? */
broj_ispita=0;
for (k=0; k<i; k++) {
if (ispiti[k].id_predmeta==j) {
broj_ispita++;
prosjeci[j] += ispiti[k].bodovi;
}
}
prosjeci[j] /= broj_ispita;
}
/* Ispis u datoteku */
izlaz=fopen("prosjeci.txt","w");
if (izlaz==NULL) {
printf ("Greska kod otvaranja datoteke prosjeci.txt.\n");
return 2;
}
for (j=1; j<=max_id_predmeta; j++)
fprintf (izlaz,"%4d %4.4f\n", j, prosjeci[j]);
fclose(izlaz);
}

return 0;

skinuto sa www.etf.ba

Rjeenja zadataka sa ispitnog roka (22. 08. 2008)


Napomena: Zadaci 1 i 2 sa I parcijalnog i zadatak 1 sa II parcijalnog ne razlikuju se od slinih
zadataka sa redovnih rokova.

I parcijalni, 3a) zadatak


Napraviti program koji, za uneseni broj n, na ekranu iscrtava sljedei oblik (na slici je n=9):
* * * * * * * * *
* * * * * * * * *
* * * * * * * * *
* * * * * * * * *
* * * * * * * * *
* * * * * * * * *
* * * * * * * * *
* * * * * * * * *
* * * * * * * * *
Onemoguiti da korisnik unese paran broj n.
Rjeenje:
#include <stdio.h>
int main() {
int i,j,n;
do {
printf ("Unesite broj n: ");
scanf ("%d", &n);
} while (n%2==0);
for (i=0; i<n; i++) {
if (i%6==1 || i%6==5) printf(" ");
if (i%6==2 || i%6==4) printf(" ");
if (i%6==3) printf("
");
/* Druga varijanta:
if (i%2==1 && i%3!=0) printf(" ");
if (i%2==0 && i%6!=0) printf(" ");
if (i%3==0 && i%6!=0) printf("
");
*/
for (j=0; j<n; j++)
printf("* ");
printf("\n");
}
return 0;

skinuto sa www.etf.ba

I parcijalni, 3b) zadatak


Napraviti program u kojem korisnik sa tastature unosi niz od 10 cijelih brojeva, a zatim nalazi
srednju vrijednost svih brojeva djeljivih sa 3. Pri tome paziti da ne doe do dijeljenja sa nulom.
Primjer: 10,7,8,6,3,1,2,2,5,4. Rjeenje je 4,5 (brojevi djeljivi sa 3 su 6 i 3).
#include <stdio.h>
int main() {
int niz[10],i,suma,broj;
float sv;
broj=0;
suma=0;
for (i=0; i<10; i++) {
printf ("Unesite %d. clan niza: ", i+1);
scanf ("%d",&niz[i]);
/* Ovo je moglo i u posebnoj petlji: */
if (niz[i]%3==0) {
suma += niz[i];
broj++;
}
}
/* Izbjegavamo dijeljenje s nulom */
if (broj>0) {
sv = (float)suma / broj;
printf ("Srednja vrijednost brojeva djeljivih sa 3 je: %.3f\n", sv);
} else {
printf ("Nije unesen nijedan broj djeljiv sa 3!\n");
}
return 0;
}

II parcijalni, 2a) ZADATAK (4 boda)


Napraviti funkciju koja u datom nizu cijelih brojeva pronalazi srednju vrijednost broja cifara u
broju. Napomena: pazite da se vrijednosti brojeva u nizu ne promijene!
Primjer:
Dat je niz
10 (dvije cifre) 100 (tri cifre) 10000 (pet cifara)
Funkcija treba vratiti (2+3+5)/3 = 3,3333...
Rjeenje:
float sv_cifara(int *niz, int vel) {
int suma, i;

skinuto sa www.etf.ba

if (vel==0) return 0; /* Izbjegavamo dijeljenje s nulom */


suma = 0;
for (i=0; i<vel; i++) {
/* brc je broj cifara u broju "niz[i]" */
/* broj je pomocna varijabla kako vrijednost niz[i] ne bi bila
izgubljena */
int broj=niz[i], brc=0;
while (broj>0) {
brc++;
broj/=10;
}
suma += brc;
}
}

return (float)suma / vel;

2b) ZADATAK (5 bodova)


Napisati funkciju sa sljedeim prototipom:
int rijeci_duzine(char* recenica, int n)

koja vraa broj rijei u stringu recenica ija je duina tano n slova. Rije je niz znakova koji se
sastoji od velikih i malih slova, dakle ukoliko se unutar rijei nalazi neki znak koji nije slovo, u
pitanju su dvije rijei.
Npr. rije:
Auto-cesta
trebate tretirati kao dvije rijei duine 4 i 5 slova.
Rjeenje:
int rijeci_duzine(char* recenica, int n) {
int rezultat=0;
char *p = recenica;
int brojac=0;
/* Glavna petlja */
while (*p != '\0') {
if ((*p>='A' && *p<='Z') || (*p>='a' && *p<='z'))
brojac++;
else {
if (brojac==n) rezultat++;
brojac=0;
}
*p++;
}
}

return rezultat;

3) ZADATAK (6 bodova)
Na Olimpijadi u Pekingu gimnastiari se takmie u pet disciplina: parter, konj, preskok, razboj i
karike. Iz svake od ovih disciplina takmiar dobija odreeni broj bodova izmeu 0 i 10 koji moe

skinuto sa www.etf.ba

biti i decimalan broj. Bodovi su zapisani u datoteku peking2008.txt i to u obliku:


9.2 6.4 5.2 10 9.9
2.7 9.1 8.5 5.6 9.8
3.2 9.6 9.0 5.5 5.5
7.9 8.5 9.8 4.9 8.7
Ova mjerenja potrebno je uitati u niz struktura sljedeeg oblika:
struct bodovi {
float parter, konj, preskok, razboj, karike;
} peking[731];
Dati niz treba sortirati po zbiru bodova iz svih pet disciplina i ispisati u datoteku sortiranopeking2008.txt. Osim ovoga, treba odrediti prva tri mjesta iz svake od disciplina i ispisati na
ekranu broj bodova (radi jednostavnosti zadatka, nije dato ime i prezime takmiara).
Primjer ispisa na ekranu:
Prva tri mjesta iz discipline parter: 10, 10, 9.9
Prva tri mjesta iz discipline konj: 9.8, 9.7, 9.7
...

Rjeenje:
#include <stdio.h>
struct bodovi {
float parter, konj, preskok, razboj, karike;
};
int main() {
FILE *ulaz, *izlaz;
int i=0,j,k,brojac1,brojac2;
struct bodovi peking[731];
ulaz=fopen("peking2008.txt","r");
if (ulaz==NULL) {
printf ("Greska kod otvaranja datoteke peking2008.txt.\n");
return 1;
}
/* NAPOMENA: prilikom testiranja mozete staviti %f%f%f%f%f */
while (fscanf(ulaz, "%5.1f %5.1f %5.1f %5.1f %5.1f\n", &peking[i].parter,
&peking[i].konj, &peking[i].preskok, &peking[i].razboj, &peking[i].karike)==5)
i++;
fclose(ulaz);
/* Ispis na ekran */
float max1=0, max2=0, max3=0;
for (j=0; j<i; j++) {
if (peking[j].parter > max1) {
max3=max2; max2=max1; max1=peking[j].parter;
} else if (peking[j].parter > max2) {
max3=max2; max2=peking[j].parter;
} else if (peking[j].parter > max3) {
max3=peking[j].parter;
}
}
printf ("Prva tri mjesta iz discipline parter: %3.1f, %3.1f, %3.1f\n",
max1, max2, max3);
max1=max2=max3=0;

skinuto sa www.etf.ba

for (j=0; j<i; j++) {


if (peking[j].konj > max1) {
max3=max2; max2=max1; max1=peking[j].konj;
} else if (peking[j].konj > max2) {
max3=max2; max2=peking[j].konj;
} else if (peking[j].konj > max3) {
max3=peking[j].konj;
}
}
printf ("Prva tri mjesta iz discipline konj: %3.1f, %3.1f, %3.1f\n", max1,
max2, max3);
/* .... itd. necemo ponavljati isti kod za ostale discipline */
/* Sortiranje i upis u izlaz */
izlaz=fopen("sortirano-peking2008.txt","w");
if (izlaz==NULL) {
printf ("Greska kod otvaranja datoteke sortiranopeking2008.txt.\n");
return 2;
}
for (j=0; j<i; j++) {
for (k=j+1; k<i; k++) {
float sumaj = peking[j].parter + peking[j].konj +
peking[j].preskok + peking[j].razboj + peking[j].karike;
float sumak = peking[k].parter + peking[k].konj +
peking[k].preskok + peking[k].razboj + peking[k].karike;
if (sumaj>sumak) {
struct bodovi temp = peking[j];
peking[j] = peking[k];
peking[k] = temp;
}
}
}
for (j=0; j<i; j++)
fprintf (izlaz,"%5.1f %5.1f %5.1f %5.1f\n", peking[j].parter,
peking[j].konj, peking[j].preskok, peking[j].razboj, peking[j].karike);
fclose(izlaz);
}

return 0;

skinuto sa www.etf.ba

You might also like