55
OSNOVE RAČUNARSTVA 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 računara: 1. 2. 3. 4. 5. 1 bod e) Upotrebom tablica istinitosti dokažite jednakost ¬(A B C) = ¬A ¬B ¬C 1 bod 2. zadatak a) Koje vrijednosti poprimaju varijable a, b i c nakon izvršenog bloka naredbi? int a=5, b=2, c; b+=a++; b-=a--; c=a%b; b) Šta će ispisati slijedeći program: int i=0; do { printf("A"); i++; } while (i<=5); Odgovor: a= b= c= Odgovor: 0.5 bodova 0.5 bodova c) Koju vrijednost će imati varijabla t nakon izvođenja bloka naredbi: int i, t=0; for (i=1;i<20;i++) { if (i%5==0) continue; t++; if (i==10) break; } d) Koje vrijednosti poprimaju varijabla i, j i k nakon izvršenja programa? int main() { int i=0, j=0, k=0; while (!(i==5)) { k++; j=j+k; i++; } return 0; } Odgovor: t= Odgovor: i= j= k= 1 bod 1 bod skinuto sa www.etf.ba

Or Scripta Rokovi Svi

Embed Size (px)

Citation preview

Page 1: Or Scripta Rokovi Svi

OSNOVE RAČUNARSTVA 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 računara: 1. 2. 3. 4. 5.

1 bod e) Upotrebom tablica istinitosti dokažite jednakost ¬(A ∧ B ∧ C) = ¬A ∨ ¬B ∨ ¬C

1 bod 2. zadatak a) Koje vrijednosti poprimaju varijable a, b i c nakon izvršenog bloka naredbi? int a=5, b=2, c; b+=a++; b-=a--; c=a%b;

b) Šta će ispisati slijedeći program: int i=0; do { printf("A"); i++; } while (i<=5);

Odgovor: a= b= c= Odgovor: 0.5 bodova 0.5 bodova

c) Koju vrijednost će imati varijabla t nakon izvođenja bloka naredbi: int i, t=0; for (i=1;i<20;i++) { if (i%5==0) continue; t++; if (i==10) break; }

d) Koje vrijednosti poprimaju varijabla i, j i k nakon izvršenja programa? int main() { int i=0, j=0, k=0; while (!(i==5)) { k++; j=j+k; i++; } return 0; }

Odgovor: t= Odgovor: i= j= k= 1 bod 1 bod

skinuto sa www.etf.ba

Page 2: Or Scripta Rokovi Svi

e) Šta će ispisati slijedeći program: #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; }

f) Koje vrijednosti imaju varijable x,y i z nakon izvođenja slijedećeg bloka naredbi: 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=

y=

z=

1 bod 1 bod 3. zadatak Napisati C-program koji izračunava približnu vrijednost funkcije ex prema slijedećoj formuli:

!...

!3!2!11

32

nxxxxsumae

nx ++++=≈

Realan broj x tipa float i broj n tipa int se unose sa standardnog ulaza. Nakon izračunate sume program treba izračunati razliku apsolutnu vrijednost d prema formuli:

d=|suma-exp(x)|

gdje je exp(x) vrijednost funkcije ex u tački x izračunata pomoću funkcije exp koja se nalazi u biblioteci funkcija, pri čemu je prototip funkcije exp() sadržan u datoteci math.h. Za izračunavanje apsolutne vrijednosti treba koristiti funkciju fabs(). (Prototip funkcije fabs() je također sadržan u datoteci math.h). Nakon izračunate 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 rješavanju zadatka obavezno koristiti petlju while.

10 bodova

skinuto sa www.etf.ba

Page 3: Or Scripta Rokovi Svi

OSNOVE RAČUNARSTVA 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 računara: 1. 2. 3. 4. 5.

1 bod e) Upotrebom tablica istinitosti dokažite jednakost ¬(A ∧ B ∧ C) = ¬A ∨ ¬B ∨ ¬C

1 bod 2. zadatak a) Koje vrijednosti poprimaju varijable a, b i c nakon izvršenog bloka naredbi? int a=5, b=2, c; b+=a++; b-=a--; c=a%b;

b) Šta će ispisati slijedeći program: int i=0; do { printf("A"); i++; } while (i<=5);

Odgovor: a= b= c= Odgovor: 0.5 bodova 0.5 bodova

c) Koju vrijednost će imati varijabla t nakon izvođenja bloka naredbi: int i, t=0; for (i=1;i<20;i++) { if (i%5==0) continue; t++; if (i==10) break; }

d) Koje vrijednosti poprimaju varijabla i, j i k nakon izvršenja programa? int main() { int i=0, j=0, k=0; while (!(i==5)) { k++; j=j+k; i++; } return 0; }

Odgovor: t= Odgovor: i= j= k= 1 bod 1 bod

skinuto sa www.etf.ba

Page 4: Or Scripta Rokovi Svi

e) Šta će ispisati slijedeći program: #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; }

f) Koje vrijednosti imaju varijable x,y i z nakon izvođenja slijedećeg bloka naredbi: 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=

y=

z=

1 bod 1 bod 3. zadatak Napisati C-program koji izračunava približnu vrijednost funkcije ex prema slijedećoj formuli:

!...

!3!2!11

32

nxxxxsumae

nx ++++=≈

Realan broj x tipa float i broj n tipa int se unose sa standardnog ulaza. Nakon izračunate sume program treba izračunati razliku apsolutnu vrijednost d prema formuli:

d=|suma-exp(x)|

gdje je exp(x) vrijednost funkcije ex u tački x izračunata pomoću funkcije exp koja se nalazi u biblioteci funkcija, pri čemu je prototip funkcije exp() sadržan u datoteci math.h. Za izračunavanje apsolutne vrijednosti treba koristiti funkciju fabs(). (Prototip funkcije fabs() je također sadržan u datoteci math.h). Nakon izračunate 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 rješavanju zadatka obavezno koristiti petlju while.

10 bodova

skinuto sa www.etf.ba

Page 5: Or Scripta Rokovi Svi

ELEKTROTEHNIČKI FAKULTET SARAJEVOPredmet: OSNOVE RAČUNARSTVA

Prvi parcijalni ispit (09. 11. 2006)Varijanta

AIme i prezime (čitko):  ____________________________

Grupa:  ___________ Broj indexa: __________________

Potpis:  ________________________________________

Bodova

1. Napišite broj u traženom brojnom sistemu. Proces rješavanja napišite na slobodnim listovima.

a) (1 bod) Pretvorite broj iz dekadskog sistema u binarni:

    198(10) =    _____________________________________ (2)

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

    10110111(2) =  __________________________________ (8)

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

    262 (10) = ______________________________________ (16)

2. U slobodan prostor ispod koda upišite izlaz datog bloka naredbi.

a) (1 bod)

    int a=8, b=3;    switch (a%b) {        case 2:            printf("AA");        case 1:            printf("AA");         default:            printf("AA"); break;    }

b) (2 boda)

    int i,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

Page 6: Or Scripta Rokovi Svi

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

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

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

3. Na slobodnim listovima papira napišite tražene programe.

a) (4 boda) Napišite program koji izračunava vrijednost sljedeće sume:

S=1

x1−

2!

x12

3!

x13− ...−1n−1

n!

x1n, n1

Napomena: Za stepenovanje koristite bibliotečnu funkciju pow(b,e) pri čemu je b baza a e je eksponent. Funkcija se nalazi u biblioteci math.h.

b) (4 boda) Napišite program koji učitava sa tastature 5 realnih elemenata dva niza A i B a zatim izračunava elemente trećeg niza C (koji također ima 5 elemenata) pri čemu se i­ti element niza C dobiva prema sljedećoj formuli:

Ci=Ai23Bi1, i=0,1,2,3,4

U prostor ispod teksta zadatka upišite traženi blok naredbi. Ne morate pisati #include direktive, deklaracije varijabli ili funkcije main().

c) (1 bod) Napišite blok naredbi koji na ekranu ispisuje AAAAA (pet slova A) pomoću petlje for.

Savjet: U pitanju su 2 linije koda.

d) (1 bod) Napišite blok naredbi koji na ekranu ispisuje sve neparne brojeve između 1 i 100.

Savjet: U pitanju su 2­3 linije koda.

skinuto sa www.etf.ba

Page 7: Or Scripta Rokovi Svi

ELEKTROTEHNIČKI FAKULTET SARAJEVOPredmet: OSNOVE RAČUNARSTVA

Prvi parcijalni ispit (09. 11. 2006)Varijanta

BIme i prezime (čitko):  ____________________________

Grupa:  ___________ Broj indexa: __________________

Potpis:  ________________________________________

Bodova

1. Napišite broj u traženom brojnom sistemu. Proces rješavanja napišite na slobodnim listovima.

a) (1 bod) Pretvorite broj iz dekadskog sistema u binarni:

    137(10) =    _____________________________________ (2)

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

    11110101(2) =  __________________________________ (8)

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

    329 (10) = ______________________________________ (16)

2. U slobodan prostor ispod koda upišite izlaz datog bloka naredbi.

a) (1 bod)        int a=7, b=5;    switch (a%b) {        case 3:            printf("X");        case 1:            printf("X");         default:            printf("X"); break;    }

b) (2 boda)

    int i,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

Page 8: Or Scripta Rokovi Svi

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

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

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

3. Na slobodnim listovima papira napišite tražene programe.

a) (4 boda) Napišite program koji izračunava vrijednost sljedeće sume:

S=x−x2

2!x3

3!−...−1n−1 x

n

n!, n1

Napomena: Za stepenovanje koristite bibliotečnu funkciju pow(b,e) pri čemu je b baza a e je eksponent. Funkcija se nalazi u biblioteci math.h.

b) (4 boda) Napišite program koji učitava sa tastature 5 realnih elemenata dva niza A i B a zatim izračunava elemente trećeg niza C (koji također ima 5 elemenata) pri čemu se i­ti element niza C dobiva prema sljedećoj formuli:

Ci=2A i2−

Bi

25, i=0,1,2 ,3 ,4

U prostor ispod teksta zadatka upišite traženi blok naredbi. Ne morate pisati #include direktive, deklaracije varijabli ili funkcije main().

c) (1 bod) Napišite blok naredbi koji na ekranu ispisuje BABABA pomoću petlje for.

Savjet: U pitanju su 2 linije koda.

d) (1 bod) Napišite blok naredbi koji na ekranu ispisuje sve parne brojeve između 1 i 50.

Savjet: U pitanju su 2­3 linije koda.

skinuto sa www.etf.ba

Page 9: Or Scripta Rokovi Svi

ELEKTROTEHNIČKI FAKULTET SARAJEVOPredmet: OSNOVE RAČUNARSTVA

Prvi parcijalni ispit (09. 11. 2006)Varijanta

CIme i prezime (čitko):  ____________________________

Grupa:  ___________ Broj indexa: __________________

Potpis:  ________________________________________

Bodova

1. Napišite broj u traženom brojnom sistemu. Proces rješavanja napišite na slobodnim listovima.

a) (1 bod) Pretvorite broj iz dekadskog sistema u binarni:

    252(10) =    _____________________________________ (2)

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

    1100010(2) =  __________________________________ (8)

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

    259 (10) = ______________________________________ (16)

2. U slobodan prostor ispod koda upišite izlaz datog bloka naredbi.

a) (1 bod)

    int a=5, b=4;    switch (a%b) {        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);

b) (2 boda)

    int a=5, b=6;    do {        b+=a++;    } while (a<5);    b%=a­1;    printf("a=%d,b=%d",a,b);

  

skinuto sa www.etf.ba

Page 10: Or Scripta Rokovi Svi

c) (2 boda)    char a='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) (1 bod)    int i,j;    for (i=1; i<4; i++)        for (j=i; j<3; j++)             printf ("A");

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

3. Na slobodnim listovima papira napišite tražene programe.

a) (4 boda) Napišite program koji izračunava vrijednost sljedeće sume:

S=1−22

2x1

23

2x1−...−1 n−1

2n

2x1, n2

Napomena: Za stepenovanje koristite bibliotečnu funkciju pow(b,e) pri čemu je b baza a e je eksponent. Funkcija se nalazi u biblioteci math.h.

b) (4 boda) Napišite program koji učitava sa tastature 5 realnih elemenata dva niza A i B a zatim izračunava elemente trećeg niza C (koji također ima 5 elemenata) pri čemu se i­ti element niza C dobiva prema sljedećoj formuli:

Ci=Ai

3

3Bi

2−2AiBi , i=0,1,2,3,4

U prostor ispod teksta zadatka upišite traženi blok naredbi. Ne morate pisati #include direktive, deklaracije varijabli ili funkcije main().

c) (1 bod) Napišite blok naredbi koji na ekranu ispisuje abecedu (ABC.....Z).

Savjet: U pitanju su 2 linije koda.

d) (1 bod) Napišite blok naredbi koji izračunava sumu svih brojeva između 1 i 20.

Savjet: U pitanju su 2­3 linije koda.

skinuto sa www.etf.ba

Page 11: Or Scripta Rokovi Svi

ELEKTROTEHNIČKI FAKULTET SARAJEVOPredmet: OSNOVE RAČUNARSTVA

Prvi parcijalni ispit (09. 11. 2006)Varijanta

DIme i prezime (čitko):  ______________________

Grupa:  ___________ Broj indexa: ____________

Potpis:  __________________________________

Bodova

1. Napišite broj u traženom brojnom sistemu. Proces rješavanja napišite na slobodnim listovima.

a) (1 bod) Pretvorite broj iz dekadskog sistema u binarni:

    198(10) =    _____________________________________ (2)

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

    101101011(2) =  __________________________________ (8)

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

    262 (10) = ______________________________________ (16)

2. U slobodan prostor ispod koda upišite izlaz datog bloka naredbi.

a) (1 bod)

    int a=7, b=6;    switch (a%b) {        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);

b) (2 boda)

    int a=7, b=8;    do {        b+=a++;    } while (a<7);    b%=a­1;    printf("a=%d,b=%d",a,b);

  

skinuto sa www.etf.ba

Page 12: Or Scripta Rokovi Svi

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

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

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

3. Na slobodnim listovima papira napišite tražene programe.

a) (4 boda) Napišite program koji izračunava vrijednost sljedeće sume:

S=1−x2−1

x1x3

−1x2

−...−1n−1xn

−1xn

, n2

Napomena: Za stepenovanje koristite bibliotečnu funkciju pow(b,e) pri čemu je b baza a e je eksponent. Funkcija se nalazi u biblioteci math.h.

b) (4 boda) Napišite program koji učitava sa tastature 5 realnih elemenata dva niza A i B a zatim izračunava elemente trećeg niza C (koji također ima 5 elemenata) pri čemu se i­ti element niza C dobiva prema sljedećoj formuli:

Ci=Ai24 AiBi8Bi

21, i=0,1,2 ,3,4

U prostor ispod teksta zadatka upišite traženi blok naredbi. Ne morate pisati #include direktive, deklaracije varijabli ili funkcije main().

c) (1 bod) Napišite blok naredbi koji na ekranu ispisuje sve brojeve između 1 i 25.

Savjet: U pitanju su 2 linije koda.

d) (1 bod) Napišite blok naredbi koji izračunava sumu svih brojeva između 5 i 55.

Savjet: U pitanju su 2­3 linije koda.

skinuto sa www.etf.ba

Page 13: Or Scripta Rokovi Svi

ELEKTROTEHNIČKI FAKULTET SARAJEVO

Predmet: OSNOVE RAČUNARSTVA

Prvi parcijalni ispit (09. 11. 2006)

Varijanta

A Ime i prezime (čitko): ____________________________ Grupa: ___________ Broj indexa: __________________ Potpis: ________________________________________

Bodova

1. Napišite broj u traženom brojnom sistemu. Proces rješavanja napišite na slobodnim

listovima.

a) (1 bod) Pretvorite broj iz dekadskog sistema u binarni: 198(10) = U 11000110 U (2) b) (1 bod) Pretvorite broj iz binarnog sistema u oktalni: 10110111(2) = U 267 U (8) c) (1 bod) Pretvorite broj iz dekadskog sistema u heksadecimalni: 262 (10) = U 106 U (16)

2. U slobodan prostor ispod koda upišite izlaz datog bloka naredbi. a) (1 bod) int a=8, b=3; switch (a%b) { a%b == 2 case 2: <------ printf("AA"); case 1: printf("AA"); default: printf("AA"); break; }

b) (2 boda) 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);

AAAAAA t=16

skinuto sa www.etf.ba

Page 14: Or Scripta Rokovi Svi

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 napišite tražene programe. a) (4 boda) Napišite program koji izračunava vrijednost sljedeće sume:

S= 1x�1 − 2!

�x�1�2� 3!�x�1�3

− ...��−1�n− 1 n!�x�1�n

, n�1

Napomena: Za stepenovanje koristite bibliotečnu funkciju pow(b,e) pri čemu je b baza a e je eksponent. Funkcija se nalazi u biblioteci math.h. b) (4 boda) Napišite program koji učitava sa tastature 5 realnih elemenata dva niza A i B a zatim izračunava elemente trećeg niza C (koji također ima 5 elemenata) pri čemu se i-ti element niza C dobiva prema sljedećoj formuli:

Ci= Ai2�3Bi�1, i= 0,1,2,3,4

U prostor ispod teksta zadatka upišite traženi blok naredbi. Ne morate pisati #include direktive, deklaracije varijabli ili funkcije main(). c) (1 bod) Napišite blok naredbi koji na ekranu ispisuje AAAAA (pet slova A) pomoću petlje for. Savjet: U pitanju su 2 linije koda.

d) (1 bod) Napišite blok naredbi koji na ekranu ispisuje sve neparne brojeve između 1 i 100. Savjet: U pitanju su 2-3 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

Page 15: Or Scripta Rokovi Svi

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 rješenje // 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

Page 16: Or Scripta Rokovi Svi

skinuto sa www.etf.ba

Page 17: Or Scripta Rokovi Svi

ELEKTROTEHNIČKI FAKULTET SARAJEVO

Predmet: OSNOVE RAČUNARSTVA

Prvi parcijalni ispit (09. 11. 2006)

Varijanta

B Ime i prezime (čitko): ____________________________ Grupa: ___________ Broj indexa: __________________ Potpis: ________________________________________

Bodova

1. Napišite broj u traženom brojnom sistemu. Proces rješavanja napišite na slobodnim

listovima.

a) (1 bod) Pretvorite broj iz dekadskog sistema u binarni: 137(10) = U 10001001 U(2) b) (1 bod) Pretvorite broj iz binarnog sistema u oktalni: 11110101(2) = U 365 U (8) c) (1 bod) Pretvorite broj iz dekadskog sistema u heksadecimalni: 329 (10) = U 149 U(16)

2. U slobodan prostor ispod koda upišite izlaz datog bloka naredbi. a) (1 bod) int a=7, b=5; switch (a%b) { 7%5 == 2 case 3: printf("X"); case 1: printf("X"); default: <------ printf("X"); break; }

b) (2 boda) 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);

X t=40

skinuto sa www.etf.ba

Page 18: Or Scripta Rokovi Svi

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 napišite tražene programe. a) (4 boda) Napišite program koji izračunava vrijednost sljedeće sume:

S= x− x2

2!�x3

3!− ...��− 1�n− 1 xn

n! , n�1

Napomena: Za stepenovanje koristite bibliotečnu funkciju pow(b,e) pri čemu je b baza a e je eksponent. Funkcija se nalazi u biblioteci math.h. b) (4 boda) Napišite program koji učitava sa tastature 5 realnih elemenata dva niza A i B a zatim izračunava elemente trećeg niza C (koji također ima 5 elemenata) pri čemu se i-ti element niza C dobiva prema sljedećoj formuli:

Ci= 2A i2−

Bi

2 �5, i= 0,1,2,3,4

U prostor ispod teksta zadatka upišite traženi blok naredbi. Ne morate pisati #include direktive, deklaracije varijabli ili funkcije main(). c) (1 bod) Napišite blok naredbi koji na ekranu ispisuje BABABA pomoću petlje for. Savjet: U pitanju su 2 linije koda.

d) (1 bod) Napišite blok naredbi koji na ekranu ispisuje sve parne brojeve između 1 i 50. 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

Page 19: Or Scripta Rokovi Svi

#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 rješenje // 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

Page 20: Or Scripta Rokovi Svi

ELEKTROTEHNIČKI FAKULTET SARAJEVO

Predmet: OSNOVE RAČUNARSTVA

Prvi parcijalni ispit (09. 11. 2006)

Varijanta

C Ime i prezime (čitko): ____________________________ Grupa: ___________ Broj indexa: __________________ Potpis: ________________________________________

Bodova

1. Napišite broj u traženom brojnom sistemu. Proces rješavanja napišite na slobodnim

listovima.

a) (1 bod) Pretvorite broj iz dekadskog sistema u binarni: 252(10) = U 11111100 U (2) b) (1 bod) Pretvorite broj iz binarnog sistema u oktalni: 1100010(2) = U 142 U (8) c) (1 bod) Pretvorite broj iz dekadskog sistema u heksadecimalni: 259 (10) = U 103 U (16)

2. U slobodan prostor ispod koda upišite izlaz datog bloka naredbi. a) (1 bod) 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);

b) (2 boda) 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 objašnjeno

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

skinuto sa www.etf.ba

Page 21: Or Scripta Rokovi Svi

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 napišite tražene programe. a) (4 boda) Napišite program koji izračunava vrijednost sljedeće sume:

S= 1− 22

2x�1�23

2x�1− ...��−1�n− 1 2n

2x�1 , n�2

Napomena: Za stepenovanje koristite bibliotečnu funkciju pow(b,e) pri čemu je b baza a e je eksponent. Funkcija se nalazi u biblioteci math.h. b) (4 boda) Napišite program koji učitava sa tastature 5 realnih elemenata dva niza A i B a zatim izračunava elemente trećeg niza C (koji također ima 5 elemenata) pri čemu se i-ti element niza C dobiva prema sljedećoj formuli:

Ci=Ai

3

3 �Bi2− 2AiBi , i= 0,1,2,3,4

U prostor ispod teksta zadatka upišite traženi blok naredbi. Ne morate pisati #include direktive, deklaracije varijabli ili funkcije main(). c) (1 bod) Napišite blok naredbi koji na ekranu ispisuje abecedu (ABC.....Z). Savjet: U pitanju su 2 linije koda.

d) (1 bod) Napišite blok naredbi koji izračunava sumu svih brojeva između 1 i 20. 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

Page 22: Or Scripta Rokovi Svi

#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 rješenje // 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

Page 23: Or Scripta Rokovi Svi

ELEKTROTEHNIČKI FAKULTET SARAJEVO

Predmet: OSNOVE RAČUNARSTVA

Prvi parcijalni ispit (09. 11. 2006)

Varijanta

D Ime i prezime (čitko): ______________________ Grupa: ___________ Broj indexa: ____________ Potpis: __________________________________

Bodova

1. Napišite broj u traženom brojnom sistemu. Proces rješavanja napišite na slobodnim

listovima.

a) (1 bod) Pretvorite broj iz dekadskog sistema u binarni: 198(10) = U 11000110 U (2) b) (1 bod) Pretvorite broj iz binarnog sistema u oktalni: 101101011(2) = U 267 U (8) c) (1 bod) Pretvorite broj iz dekadskog sistema u heksadecimalni: 262 (10) = U 106 U (16)

2. U slobodan prostor ispod koda upišite izlaz datog bloka naredbi. a) (1 bod) 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);

b) (2 boda) 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 objašnjeno

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

Page 24: Or Scripta Rokovi Svi

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 napišite tražene programe. a) (4 boda) Napišite program koji izračunava vrijednost sljedeće sume:

S= 1− x2− 1x�1 �

x3− 1x�2 − ...��− 1�n−1 x

n− 1x�n , n�2

Napomena: Za stepenovanje koristite bibliotečnu funkciju pow(b,e) pri čemu je b baza a e je eksponent. Funkcija se nalazi u biblioteci math.h. b) (4 boda) Napišite program koji učitava sa tastature 5 realnih elemenata dva niza A i B a zatim izračunava elemente trećeg niza C (koji također ima 5 elemenata) pri čemu se i-ti element niza C dobiva prema sljedećoj formuli:

Ci= Ai2�4 Ai Bi�8Bi

2�1, i= 0,1,2,3,4 U prostor ispod teksta zadatka upišite traženi blok naredbi. Ne morate pisati #include direktive, deklaracije varijabli ili funkcije main(). c) (1 bod) Napišite blok naredbi koji na ekranu ispisuje sve brojeve između 1 i 25. Savjet: U pitanju su 2 linije koda.

d) (1 bod) Napišite blok naredbi koji izračunava sumu svih brojeva između 5 i 55. 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

Page 25: Or Scripta Rokovi Svi

#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 rješenje // 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

Page 26: Or Scripta Rokovi Svi

A0829705

1. Napišite broj u traženom brojnom sistemu. Proces rješavanja napišite 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 upišite izlaz datog bloka naredbi.(ASCII vrijednost slova A je 65. Za svako sljedeće slovo engleskog alfabeta vrijednost se povećava zajedan, 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

Page 27: Or Scripta Rokovi Svi

3. Na slobodnim listovima papira napišite tražene programe.

a) (4 boda) Napraviti program koji, za uneseni broj n, na ekranu iscrtava sljedeći oblik (na slici je n=7):

n n (Ukupna širina: 2n-1) +-----+-----+ | | | | | | | | | n redova | | | | | | +-----+-----+

Onemogućiti 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 uunesenom nizu pronalazi i na ekranu ispisuje minimum parnih brojeva.

Primjer: 10,7,8,6,3,1,2,2,5,4. Rješenje je 2 (jer 1 nije paran broj).

U prostor ispod teksta upišite traženi blok naredbi. Ne morate pisati #include direktive,deklaracije varijabli ili funkcije main().c) (1 bod) Napišite blok naredbi koji na ekranuispisuje AAAAAA (šest slova A) pomoću petljewhile.

d) (1 bod) Napišite blok naredbi koji na ekranuispisuje sve brojeve između 1 i 50 koji su djeljivisa 5 a nisu djeljivi sa 2.

skinuto sa www.etf.ba

Page 28: Or Scripta Rokovi Svi

3. a) zadatak

Napraviti program koji, za uneseni broj n, na ekranu iscrtava sljedeći oblik (na slici je n=7):

Onemogućiti 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 ("+");

elseprintf ("-");

}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 ("+");

elseprintf ("-");

skinuto sa www.etf.ba

Page 29: Or Scripta Rokovi Svi

}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

Page 30: Or Scripta Rokovi Svi

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

Page 31: Or Scripta Rokovi Svi

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 ("+");

elseprintf ("-");

}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. Rješenje 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

Page 32: Or Scripta Rokovi Svi

}}

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

Page 33: Or Scripta Rokovi Svi

Grupa D) korijen proizvoda najvećeg i najmanjeg elementa ( max⋅min )

Primjer: 10,7,8,6,3,1,2,2,5,4. Najveći element je 10 a najmanji je 1. Rješenje je 10⋅1=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

Page 34: Or Scripta Rokovi Svi

I PARCIJALNI ISPIT

3a) ZADATAK (4 boda)

1. Napraviti program koji, za uneseni broj n, na ekranu iscrtava sljedeći oblik (na slici je n=7):

+-----+ |\ /| | \ / | | X | | / \ | |/ \| +-----+

Onemogućiti 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 sljedeći oblik (na slici je n=7):

+-----+ | | | | | |

skinuto sa www.etf.ba

Page 35: Or Scripta Rokovi Svi

|--+--| | | | | | | +-----+

Onemogućiti 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 sljedeći oblik (na slici je n=7):

* * * * * * * * * * * * * * * * * * * * * * * * * * * ** * * * * * * * * * * * * * * * * * * * *

Onemogućiti 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

Page 36: Or Scripta Rokovi Svi

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 sljedeći oblik (na slici je n=7):

* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *

Onemogućiti 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, 2Rješenje je 9. Na parnim pozicijama se nalaze 2,4,2,9,2, od kojih je najveći 9.

#include <stdio.h>

skinuto sa www.etf.ba

Page 37: Or Scripta Rokovi Svi

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, 2Rješenje 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, 2Sv=(3+5+3+9)/4program 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

Page 38: Or Scripta Rokovi Svi

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 veća 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, 2Sp=2+4+2+8+6+2 = 24Sn=3+5+3+9 = 20program 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);

elseprintf("\nsn= %d", sn);

return 0;}

II PARCIJALNI ISPIT

2a) ZADATAK (4 boda)

skinuto sa www.etf.ba

Page 39: Or Scripta Rokovi Svi

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.1Decimalni dijelovi su 0.21 0.853 0.95 0.92 0.7 0.1Srednja 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 vraća taj član. Ako postoje dva različita člana koji su podjednako udaljeni od srednje vrijednosti, funkcija treba vratiti veći.

Primjer:Dat je niz 10 5 4 9 8 3Srednja vrijednost elemenata niza je 6,5Najdalji članovi u nizu su 10 i 3 (oba se razlikuju za 3,5). Pošto je broj 10 veći, 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 najveća i vraća njegov indeks. Ukoliko dva broja imaju jednaku posljednju cifru, poredi se pretposljednja, zatim treća zdesna itd.

skinuto sa www.etf.ba

Page 40: Or Scripta Rokovi Svi

Primjer:Dat je niz 321 5853 195 5 87 31 127 funkcija treba vratiti 4

Najveću posljednju cifru imaju brojevi 87 i 127, ali kako je 8 veće od 2, traženi 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 treći po veličini i vraća indeks tog člana u nizu.

Primjer:Za niz 10 5 4 9 8 3 -1 funkcija vraća 4

Jer se treći po veličini član (8) nalazi na 5. mjestu odnosno označen 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

Page 41: Or Scripta Rokovi Svi

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 naredbuprintf ("%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 rješenje redovnog roka a ne ovog zadatka biće 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

Page 42: Or Scripta Rokovi Svi

koja u datom stringu recenica pronalazi sve riječi duže od n znakova i prepisuje ih u string velike_rijeci. Pretpostaviti da je dužina niza velike_rijeci veća ili jednaka od dužine niza recenica.

Radi jednostavnosti, ne trebate posebno tretirati znakove interpunkcije. Riječ je svaki dio teksta koji je ograničen sa jednim ili više razmaka.

Napomena: Pri rješavanju zadatka je dozvoljeno (ali ne i nužno) korištenje 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 korištenja 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 sljedećim prototipom:int slova2puta(char* s)

koja u datom stringu pronalazi koliko ima slova koja se javljaju tačno dva puta. Funkcija ne treba praviti razliku između velikih i malih slova.

Primjer 1:Za string Abeceda funkcija treba vratiti 2

skinuto sa www.etf.ba

Page 43: Or Scripta Rokovi Svi

jer slova A i E se javljaju po dva puta, a pošto funkcija ne razlikuje velika i mala slova, veliko i malo A se ne broje odvojeno.

Primjer 2:Za string Ovo je neki primjer funkcija treba vratiti 4

Po dva puta javljaju se slova O, I, J i R.

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 sljedećim prototipom:int trocifreni(char* s)

koja pronalazi i vraća prvi trocifreni broj koji se javlja u datom stringu s. Pri tome paziti da funkcija ne vraća četverocifrene, petocifrene itd. brojeve. Ukoliko se u stringu ne javlja nijedan trocifren broj, funkcija treba vratiti -1. Ne morate obraćati pažnju na negativne brojeve.

Primjer:Za string A1b2C123 funkcija vraća 123Za string A1b2C1234 funkcija vraća -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

Page 44: Or Scripta Rokovi Svi

break; /* Izlaz iz petlje */}cifre=0;

}}

return rezultat;}

3) ZADATAK (6 bodova)

1. U gradu Sarajevu tokom dvije godine vršena 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.512.7 21.1 20.5 15.613.2 21.6 21.0 15.511.9 20.5 19.8 14.9

itd. Ova mjerenja potrebno je učitati 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. Takođe na ekranu treba ispisati ukupan broj učitanih mjerenja, broj dana u kojima temperatura u 9 sati nije bila najmanja te broj dana u kojima temperatura u 13 sati nije bila najveća. 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.

RJEŠENJE

#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

Page 45: Or Scripta Rokovi Svi

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 sortirano13-sarajevo.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 vršena 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.512.7 21.1 20.5 15.613.2 21.6 21.0 15.511.9 20.5 19.8 14.9

itd. Ova mjerenja potrebno je učitati 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. Takođe na ekranu treba ispisati ukupan broj učitanih mjerenja, te prosječne vrijednosti za sva četiri mjerenja. Primjer:

Iz datoteke su ucitani podaci za 730 dana.Prosjecna temperatura u 9 sati: 11.77Prosjecna temperatura u 13 sati: 19.10Prosjecna temperatura u 16 sati: 17.81

skinuto sa www.etf.ba

Page 46: Or Scripta Rokovi Svi

Prosjecna temperatura u 20 sati: 12.85

RJEŠENJE

#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 sortirano16-sarajevo.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

Page 47: Or Scripta Rokovi Svi

}}

}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 sljedeći niz struktura:struct ispit { int id_studenta; int id_predmeta; float bodovi;} ispiti[100];

Program iz datoteke ispiti.txt učitava sadržaj ovog niza. Treba odrediti koliko ukupno ima studenata koji su položili 0 ispita, 1 ispit, 2 ispita itd. i to upisati u datoteku statistike.txt. Ispit je položen 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 uzimajući u obzir ponovljeni podatak.Primjer sadržaja datoteke ispiti.txt:

1 1 151 2 101 3 91 4 112 1 192 1 182 2 72 3 0

Datoteka statistike.txt treba izgledati ovako:Polozilo 0 ispita: 0 studenataPolozilo 1 ispit: 1 studentPolozilo 2 ispita: 0 studenataPolozilo 3 ispita: 1 student

Na ekranu treba ispisati:Podaci se ponavljaju za studenta 2, ispit 1 (18 bodova) !

RJEŠENJE

#include <stdio.h>

struct ispit {int id_studenta;int id_predmeta;float bodovi;

} ispiti[100];

skinuto sa www.etf.ba

Page 48: Or Scripta Rokovi Svi

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

Page 49: Or Scripta Rokovi Svi

3 d). Dat je sljedeći niz struktura:struct ispit { int id_studenta; int id_predmeta; float bodovi;} ispiti[100];

Program iz datoteke ispiti.txt učitava sadržaj ovog niza. Treba odrediti prosječnu 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 uzimajući u obzir ponovljeni podatak.Primjer sadržaja datoteke ispiti.txt:

1 1 151 2 101 3 91 4 112 1 192 1 182 2 72 3 0

Datoteka prosjeci.txt treba izgledati ovako:1 11,252 8,3333

Na ekranu treba ispisati:Podaci se ponavljaju za studenta 2, ispit 1 (18 bodova) !

RJEŠENJE:

#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

Page 50: Or Scripta Rokovi Svi

&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

Page 51: Or Scripta Rokovi Svi

Rješenja 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 sličnih zadataka sa redovnih rokova.

I parcijalni, 3a) zadatak

Napraviti program koji, za uneseni broj n, na ekranu iscrtava sljedeći oblik (na slici je n=9):

* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * ** * * * * * * * * * * * * * * * * * * * * * * * * * *

Onemogućiti da korisnik unese paran broj n.

Rješenje:

#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

Page 52: Or Scripta Rokovi Svi

}

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 dođe do dijeljenja sa nulom.

Primjer: 10,7,8,6,3,1,2,2,5,4. Rješenje 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...

Rješenje:

float sv_cifara(int *niz, int vel) {int suma, i;

skinuto sa www.etf.ba

Page 53: Or Scripta Rokovi Svi

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 sljedećim prototipom:int rijeci_duzine(char* recenica, int n)

koja vraća broj riječi u stringu recenica čija je dužina tačno n slova. Riječ je niz znakova koji se sastoji od velikih i malih slova, dakle ukoliko se unutar riječi nalazi neki znak koji nije slovo, u pitanju su dvije riječi.

Npr. riječ: Auto-cesta trebate tretirati kao dvije riječi dužine 4 i 5 slova.

Rješenje:

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 gimnastičari se takmiče u pet disciplina: parter, konj, preskok, razboj i karike. Iz svake od ovih disciplina takmičar dobija određeni broj bodova između 0 i 10 koji može

skinuto sa www.etf.ba

Page 54: Or Scripta Rokovi Svi

biti i decimalan broj. Bodovi su zapisani u datoteku peking2008.txt i to u obliku:9.2 6.4 5.2 10 9.92.7 9.1 8.5 5.6 9.83.2 9.6 9.0 5.5 5.57.9 8.5 9.8 4.9 8.7

Ova mjerenja potrebno je učitati u niz struktura sljedećeg 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 sortirano-peking2008.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 takmičara).Primjer ispisa na ekranu:

Prva tri mjesta iz discipline parter: 10, 10, 9.9Prva tri mjesta iz discipline konj: 9.8, 9.7, 9.7...

Rješenje:

#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

Page 55: Or Scripta Rokovi Svi

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 sortirano-peking2008.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