Or 2 Rokovi Do2007

Embed Size (px)

Citation preview

  • 8/3/2019 Or 2 Rokovi Do2007

    1/64

    A

    1. (ukupno 5 bodova)

    a) (1 bod)

    Izvoenjem naredbe u liniji 33 program e

    ispisati:

    9__________________________

    b) (1 bod)

    Izvoenjem naredbe u liniji 35 program e

    ispisati:

    1,3,4__________________________

    c) (1 bod)

    Izvoenjem naredbe u liniji 37 program e

    ispisati:

    9__________________________

    d) (1 bod)

    Izvoenjem naredbe u liniji 39 program e

    ispisati:

    10__________________________

    e) (1 bod)

    Izvoenjem naredbe u liniji 41 program e

    ispisati:

    ??ljacka__________________________

    00 #include

    01 int f1(int a,int* b)

    02 {

    03 int c=0;

    04 a=2;

    05 *b=3;

    06 c=a+2;

    07 return c ;

    08 }

    09

    10 int f2(int* p1)11 {

    12 int a;

    13 p1=p1+2;

    14 a=(*p1)+2;

    15 return a;

    16 }

    17

    18 void f3(char* p)

    19 {

    20 *p='?';

    21 p++;

    22 *p='?';

    23 }24

    25 int main()

    26 {

    27 int A[5]={2,4,6,8,10};

    28 int B[2][2]={1,3,5,7};

    29 char rijeka[]="Miljacka";

    30 int a=1,b=1,c=0;

    31 int *p1=&B[0][0];

    32 c=*(A+1)+(*(p1+2));

    33 printf("\n%d",c);

    34 c=f1(a,&b);

    35 printf("\n%d,%d,%d",a,b,c);

    36 c=f2(&B[0][0]+1);37 printf("\n%d",c);

    38 c=f2(A+1);

    39 printf("\n%d",c);

    40 f3(rijeka);

    41 printf("\n%s",rijeka);

    42 return 0;

    43 }

    Skinuto sa www.etf.ba

    2005

  • 8/3/2019 Or 2 Rokovi Do2007

    2/64

    A

    2. (5 bodova)

    Napisati u C-u funkciju izbroji() koja kao argument uzima neki string koji se sastoji

    od znakovaz, a vraa broj znakovazza koje vrijediz{0, 1, 2, ... , 9}. Funkcija ne

    ispisuje nita. Prototip funkcije izbroji() treba biti:

    int izbroji(char* p)

    Zatim napravite glavni program koji koristi funkciju izbroji() koji sa standardnog

    ulaza uitava neki string bez praznih mjesta maksimalne duljine 20, te na standardnom

    izlazu ispisuje broj pojavljivanja znakovazza koje vrijediz{0, 1, 2, ... , 9}.

    Primjer 1: za ulaz: Sarajevo funkcija vraa 0

    Primjer 2: za ulaz: Lotus123 funkcija vraa 3

    Primjer 3: za ulaz: zadatak1 funkcija vraa 1

    Primjer 4: za ulaz: 030-A-230 funkcija vraa 6

    Primjer ulaza i izlaza iz glavnog programa:

    Unesite string: 030-A-230

    Uneseni string ima 6 brojeva.

    Napomena: ASCII vrijednosti znakova koji predstavljaju cifre su:

    ASCII vrijednost znaka 0 je 48;

    ASCII vrijednost znaka 1 je 49;

    .....................................................

    ASCII vrijednost znaka 9 je 57.

    Rjeenje:

    #include

    int izbroji(char *p)

    {

    int a=0;

    while(*p!='\0')

    {

    if(*p>=48&&*p

  • 8/3/2019 Or 2 Rokovi Do2007

    3/64

    A

    3. (ukupno 10 bodova)

    a) (4 boda)

    Napisati u C-u funkciju ubaci() koja kao argument uzima neki prirodni broj n i

    jednocifreni broj a , a vraa broj koji bi nastao zamjenom cifri u broju n na parnim

    mjestima cifrom a (gledano s desne strane). Funkcija ne treba nita ispisivati.

    Funkcija ubaci() treba imati prototip:

    int ubaci(int n,int a);

    Pretpostaviti da su n i a valjano unesene vrijednosti koje imaju smisla.

    Primjeri ulaznih argumenata i vraenih vrijednosti:

    Primjer1: za ulazne argumente n=123321, a=2 funkcija vraa broj 122321.

    Primjer 2: za ulazne argumente n=28455, a=3 funkcija vraa broj 23435.

    Primjer3: za ulazne argumente n=21, a=6 funkcija vraa broj 61.

    Primjer 4: za ulazne argumente n=8455, a=9 funkcija vraa broj 9495.

    Rjeenje:

    int ubaci(int n, int a)

    {

    int tk=1,i=1,b=0,z;

    while (n>0)

    {

    z=n%10;

    if(i%2==0)

    b=b+tk*a;

    else

    b=b+tk*z;

    n=n/10;tk=tk*10;

    i++;

    }

    return b;

    }

    Skinuto sa www.etf.ba

  • 8/3/2019 Or 2 Rokovi Do2007

    4/64

    A

    b)(6 bodova)

    Napisati u C-u program koji uitava podatke iz ulazne formatirane tekstualne datoteke

    auto.txt i kreira izlaznu datoteku auto88.txt koja sadri spisak automobila kojima

    registarska oznaka tano na dva mjesta sadri znak 8. Datoteke auto.txt iauto88.txt su slijedeeg formata:

    [prezime] [ime] [reg. oznaka]

    gdje je:

    [prezime] kolona u kojoj su zapisana prezimena vlasnika

    automobila koja zauzima 15 mjesta;

    [imena] kolona u kojoj su zapisana imena vlasnika automobila

    koja zauzima 15 mjesta;

    [reg. oznaka] kolona u kojoj je zapisana registarska oznaka

    automobila koja zauzima 9 mjesta

    Primjer sadraja datoteke auto.txt:

    Majic Maja 230-A-881

    Draganovic Dragan 123-T-238

    Samirovic Samir 845-K-287

    Filipovic Filip 888-J-111

    Muharemovic Muharem 233-A-455

    Primjer sadraja datoteke auto88.txt:

    Majic Maja 230-A-881

    Samirovic Samir 845-K-287

    Za itanje datoteke koristite funkciju fscanf(). Prototip funkcijefscanf() je:

    int fscanf(FILE *fp, const char *format, arg1, arg2, ,arg n)

    Za pisanje u datoteku koristite funkcijufprintf(). Prototip funkcijefprintf() je:

    int fprintf(FILE *fp, const char *format, arg1, arg2, ,arg n)

    Skinuto sa www.etf.ba

  • 8/3/2019 Or 2 Rokovi Do2007

    5/64

    A

    Rjeenje:

    #include

    #include

    int main()

    {char prezime[15],ime[15],reg[10];

    FILE *fUlaz, *fIzlaz;

    if((fUlaz=fopen("auto.txt","r"))==NULL)

    {

    printf("Greska prilikom otvaranja datoteke");

    exit(1);

    }

    if((fIzlaz=fopen("auto88.txt","w"))==NULL)

    {

    fclose(fUlaz);

    printf("Greska prilikom otvaranja datoteke");

    exit(1);

    }while(fscanf(fUlaz,"%15s%15s%9s",prezime,ime,reg)==3)

    {

    int br8=0,i;

    char *preg=reg;

    for(i=0;i

  • 8/3/2019 Or 2 Rokovi Do2007

    6/64

    B

    1. (ukupno 5 bodova)

    a) (1 bod)

    Izvoenjem naredbe u liniji 33 program e

    ispisati:

    13__________________________

    b) (1 bod)

    Izvoenjem naredbe u liniji 35 program e

    ispisati:

    1,3,6__________________________

    c) (1 bod)

    Izvoenjem naredbe u liniji 37 program e

    ispisati:

    9__________________________

    d) (1 bod)

    Izvoenjem naredbe u liniji 39 program e

    ispisati:

    8__________________________

    e) (1 bod)

    Izvoenjem naredbe u liniji 41 program e

    ispisati:

    **RCELONA__________________________

    00 #include

    01 int f1(int a,int* b)

    02 {

    03 int c=0;

    04 a=2;

    05 *b=3;

    06 c=a+4;

    07 return c ;

    08 }

    09

    10 int f2(int* p1)11 {

    12 int a;

    13 p1=p1+1;

    14 a=(*p1)+1;

    15 return a;

    16 }

    17

    18 void f3(char* p)

    19 {

    20 *p='*';

    21 p++;

    22 *p='*';

    23 }24

    25 int main()

    26 {

    27 int A[5]={1,3,5,7,9};

    28 int B[2][2]={2,4,6,8};

    29 char tim[]="BARCELONA";

    30 int a=1,b=1,c=0;

    31 int *p1=&B[0][0];

    32 c=*(A+2)+(*(p1+3));

    33 printf("\n%d",c);

    34 c=f1(a,&b);

    35 printf("\n%d,%d,%d",a,b,c);

    36 c=f2(&B[0][0]+2);37 printf("\n%d",c);

    38 c=f2(A+2);

    39 printf("\n%d",c);

    40 f3(tim);

    41 printf("\n%s",tim);

    42 return 0;

    43 }

    Skinuto sa www.etf.ba

  • 8/3/2019 Or 2 Rokovi Do2007

    7/64

    B

    2. (5 bodova)

    Napisati u C-u funkcijusuma() koja kao argument uzima neki string koji se sastoji od

    znakovaz, a vraa sumu svih znakova za koje vrijediz{0, 1, 2, ... , 9}. Funkcija ne

    ispisuje nita. Prototip funkcijesuma() treba biti:

    int suma(char* p)

    Zatim napravite glavni program koji koristi funkcijusuma() koji sa standardnog

    ulaza uitava neki string bez praznih mjesta maksimalne duljine 20, te na

    standardnom izlazu ispisuje sumu znakovazza koje vrijediz{0, 1, 2, ... , 9}.

    Primjer 1: za ulaz: Sa5r4ajevo funkcija vraa 9

    Primjer 2: za ulaz: Lotus123 funkcija vraa 6

    Primjer 3: za ulaz: zadatak1 funkcija vraa 1

    Primjer 4: za ulaz: 030-A-230 funkcija vraa 8

    Primjer ulaza i izlaza iz glavnog programa:

    Unesite string: 030-A-230

    Suma znakova je 8.

    Napomena: ASCII vrijednosti znakova koji predstavljaju cifre su:

    ASCII vrijednost znaka 0 je 48;

    ASCII vrijednost znaka 1 je 49;

    .....................................................

    ASCII vrijednost znaka 9 je 57.

    Rjeenje:

    #include

    int suma(char *p)

    {

    int s=0;

    while(*p!='\0')

    {

    if(*p>=48&&*p

  • 8/3/2019 Or 2 Rokovi Do2007

    8/64

    B

    3. (ukupno 10 bodova)

    a) (4 boda)

    Napisati u C-u funkciju ubaci() koja kao argument uzima neki prirodni broj n i

    jednocifreni broj a , a vraa broj koji bi nastao zamjenom cifri u broju n na neparnim

    mjestima cifrom a (gledano s desne strane). Funkcija ne treba nita ispisivati.

    Funkcija ubaci() treba imati prototip:

    int ubaci(int n,int a);

    Pretpostaviti da su n i a valjano unesene vrijednosti koje imaju smisla.

    Primjeri ulaznih argumenata i vraenih vrijednosti:

    Primjer1: za ulazne argumente n=123321, a=2 funkcija vraa broj 123222.

    Primjer 2: za ulazne argumente n=28455, a=3 funkcija vraa broj 38353.

    Primjer3: za ulazne argumente n=21, a=6 funkcija vraa broj 26.

    Primjer 4: za ulazne argumente n=8455, a=9 funkcija vraa broj 8959.

    Rjeenje:

    int ubaci(int n, int a){

    int tk=1,i=1,b=0,z;

    while (n>0)

    {

    z=n%10;

    if(i%2!=0)

    b=b+tk*a;

    else

    b=b+tk*z;

    n=n/10;

    tk=tk*10;i++;

    }

    return b;

    }

    Skinuto sa www.etf.ba

  • 8/3/2019 Or 2 Rokovi Do2007

    9/64

    B

    b)(6 bodova)

    Napisati u C-u program koji uitava podatke iz ulazne formatirane tekstualne datoteke

    telefon.txt i kreira izlaznu datoteku tel061.txt koja sadri spisak pretplatnika

    kojima telefonski broj poinje sa 061. Datoteke telefon.txt i tel061.txt su

    slijedeeg formata:

    [prezime] [ime] [tel. broj]

    gdje je:

    [prezime] kolona u kojoj su zapisana prezimena pretplatnika

    koja zauzima 15 mjesta;

    [imena] kolona u kojoj su zapisana imena pretplatnika koja

    zauzima 15 mjesta;

    [tel. broj] kolona u kojoj su zapisani telefonski brojevi kojazauzima 9 mjesta

    Primjer sadraja datoteke telefon.txt:

    Majic Maja 061234567

    Draganovic Dragan 063150200

    Samirovic Samir 061456378

    Filipovic Filip 032456100

    Muharemovic Muharem 033250700

    Primjer sadraja datoteke tel061.txt:

    Majic Maja 061234567

    Samirovic Samir 061456378

    Za itanje datoteke koristite funkciju fscanf(). Prototip funkcijefscanf() je:

    int fscanf(FILE *fp, const char *format, arg1, arg2, ,arg n)

    Za pisanje u datoteku koristite funkcijufprintf(). Prototip funkcijefprintf() je:

    int fprintf(FILE *fp, const char *format, arg1, arg2, ,arg n)

    Skinuto sa www.etf.ba

  • 8/3/2019 Or 2 Rokovi Do2007

    10/64

    B

    Rjeenje:

    #include

    #include

    int main()

    {

    char prezime[15],ime[15],tel[10];

    FILE *fUlaz, *fIzlaz;if((fUlaz=fopen("telefon.txt","r"))==NULL)

    {

    printf("Greska prilikom otvaranja datoteke");

    exit(1);

    }

    if((fIzlaz=fopen("tel061.txt","w"))==NULL)

    {

    fclose(fUlaz);

    printf("Greska prilikom otvaranja datoteke");

    exit(1);

    }

    while(fscanf(fUlaz,"%15s%15s%9s",prezime,ime,tel)!=EOF)

    { if(*tel=='0'&&*(tel+1)=='6'&&*(tel+2)=='1')

    {

    fprintf(fIzlaz,"%-15s%-15s%-9s\n",prezime,ime,tel);

    }

    }

    fclose(fUlaz);

    fclose(fIzlaz);

    return 0;

    }

    Skinuto sa www.etf.ba

  • 8/3/2019 Or 2 Rokovi Do2007

    11/64

    D

    1. (ukupno 5 bodova)

    a) (1 bod)

    Izvoenjem naredbe u liniji 33 program e

    ispisati:

    7__________________________

    b) (1 bod)

    Izvoenjem naredbe u liniji 35 program e

    ispisati:

    1,3,10__________________________

    c) (1 bod)

    Izvoenjem naredbe u liniji 37 program e

    ispisati:

    7__________________________

    d) (1 bod)

    Izvoenjem naredbe u liniji 39 program e

    ispisati:

    6__________________________

    e) (1 bod)

    Izvoenjem naredbe u liniji 41 program e

    ispisati:

    **star__________________________

    00 #include

    01 int f1(int a,int* b)

    02 {

    03 int c=0;

    04 a=2;

    05 *b=3;

    06 c=a+8;

    07 return c ;

    08 }

    09

    10 int f2(int* p1)11 {

    12 int a;

    13 p1=p1+1;

    14 a=(*p1)+1;

    15 return a;

    16 }

    17

    18 void f3(char* p)

    19 {

    20 *p='*';

    21 p++;

    22 *p='*';

    23 }24

    25 int main()

    26 {

    27 int A[5]={1,3,5,7,9};

    28 int B[2][2]={2,4,6,8};

    29 char grad[]="Mostar";

    30 int a=1,b=1,c=0;

    31 int *p1=&B[0][0];

    32 c=*(A+1)+(*(p1+1));

    33 printf("\n%d",c);

    34 c=f1(a,&b);

    35 printf("\n%d,%d,%d",a,b,c);

    36 c=f2(&B[0][0]+1);37 printf("\n%d",c);

    38 c=f2(A+1);

    39 printf("\n%d",c);

    40 f3(grad);

    41 printf("\n%s",grad);

    42 return 0;

    43 }

    Skinuto sa www.etf.ba

  • 8/3/2019 Or 2 Rokovi Do2007

    12/64

    D

    2. (5 bodova)

    Napisati u C-u funkcijuproizvod() koja kao argument uzima neki string koji se sastoji

    od znakovaz, a vraa proizvod znakova za koje vrijediz{0, 1, 2, ... , 9}. Funkcijane ispisuje nita. Prototip funkcijeproizvod() treba biti:

    int proizvod (char* p)

    Zatim napravite glavni program koji koristi funkcijuproizvod() koji sa standardnog

    ulaza uitava neki string bez praznih mjesta maksimalne duljine 20, te na

    standardnom izlazu ispisuje proizvod znakova za koje vrijediz{0, 1, 2, ... , 9}.

    Primjer 1: za ulaz: Sa5r4ajevo funkcija vraa 20

    Primjer 2: za ulaz: Lotus123 funkcija vraa 6

    Primjer 3: za ulaz: zadatak1 funkcija vraa 1

    Primjer 4: za ulaz: 030-A-230 funkcija vraa 0

    Primjer ulaza i izlaza iz glavnog programa:

    Unesite string: Lotus123

    Proizvod znakova je 6.

    Napomena: ASCII vrijednosti znakova koji predstavljaju cifre su:

    ASCII vrijednost znaka 0 je 48;

    ASCII vrijednost znaka 1 je 49;

    .....................................................

    ASCII vrijednost znaka 9 je 57.

    Rjeenje:

    #include

    int proizvod(char *p)

    {

    int a=1;

    while(*p!='\0')

    {

    if(*p>=48&&*p

  • 8/3/2019 Or 2 Rokovi Do2007

    13/64

    D

    3. (ukupno 10 bodova)

    a) (4 boda)

    Napisati u C-u funkciju ubaci() koja kao argument uzima neki prirodni broj n i

    jednocifreni broj a , a vraa broj koji bi nastao zamjenom cifri u broju n na neparnimmjestima cifrom a (gledano s desne strane). Funkcija ne treba nita ispisivati.

    Funkcija ubaci() treba imati prototip:

    int ubaci(int n,int a);

    Pretpostaviti da su n i a valjano unesene vrijednosti koje imaju smisla.

    Primjeri ulaznih argumenata i vraenih vrijednosti:

    Primjer1: za ulazne argumente n=123321, a=2 funkcija vraa broj 123222.

    Primjer 2: za ulazne argumente n=28455, a=3 funkcija vraa broj 38353.

    Primjer3: za ulazne argumente n=21, a=6 funkcija vraa broj 26.

    Primjer 4: za ulazne argumente n=8455, a=9 funkcija vraa broj 8959.

    Rjeenje:

    int ubaci(int n, int a)

    {

    int tk=1,i=1,b=0,z;

    while (n>0)

    {

    z=n%10;

    if(i%2!=0)

    b=b+tk*a;

    else

    b=b+tk*z;

    n=n/10;

    tk=tk*10;

    i++;}

    return b;

    }

    Skinuto sa www.etf.ba

  • 8/3/2019 Or 2 Rokovi Do2007

    14/64

    D

    b)(6 bodova)

    Napisati u C-u program koji uitava podatke iz ulazne formatirane tekstualne datoteke

    telefon.txt i kreira izlaznu datoteku tel00.txt koja sadri spisak pretplatnika

    kojima se broj zavrava sa dvije nule. Datoteke telefon.txt i tel00.txt su slijedeegformata:

    [prezime] [ime] [tel. broj]

    gdje je:

    [prezime] kolona u kojoj su zapisana prezimena pretplatnika

    koja zauzima 15 mjesta;

    [imena] kolona u kojoj su zapisana imena pretplatnika koja

    zauzima 15 mjesta;

    [tel. broj] kolona u kojoj su zapisani telefonski brojevi koja

    zauzima 9 mjesta

    Primjer sadraja datoteke telefon.txt:

    Majic Maja 061234567

    Draganovic Dragan 063150200

    Samirovic Samir 061456378

    Filipovic Filip 032456000

    Muharemovic Muharem 033250700

    Primjer sadraja datoteke tel00.txt:

    Draganovic Dragan 063150200

    Filipovic Filip 032456000

    Muharemovic Muharem 033250700

    Za itanje datoteke koristite funkciju fscanf(). Prototip funkcijefscanf() je:

    int fscanf(FILE *fp, const char *format, arg1, arg2, ,arg n)

    Za pisanje u datoteku koristite funkcijufprintf(). Prototip funkcijefprintf() je:

    int fprintf(FILE *fp, const char *format, arg1, arg2, ,arg n)

    Skinuto sa www.etf.ba

  • 8/3/2019 Or 2 Rokovi Do2007

    15/64

    D

    Rjeenje:

    #include

    #include int main()

    {

    char prezime[15],ime[15],tel[10];

    FILE *fUlaz, *fIzlaz;

    if((fUlaz=fopen("telefon.txt","r"))==NULL)

    {

    printf("Greska prilikom otvaranja datoteke");

    exit(1);

    }

    if((fIzlaz=fopen("tel00.txt","w"))==NULL)

    {

    fclose(fUlaz);

    printf("Greska prilikom otvaranja datoteke");

    exit(1);

    }

    while(fscanf(fUlaz,"%15s%15s%9s",prezime,ime,tel)==3)

    {

    if(*(tel+7)=='0'&&*(tel+8)=='0')

    {

    fprintf(fIzlaz,"%-15s%-15s%-9s\n",prezime,ime,tel);

    }

    }

    fclose(fUlaz);

    fclose(fIzlaz);

    return 0;

    }

    Skinuto sa www.etf.ba

  • 8/3/2019 Or 2 Rokovi Do2007

    16/64

    OSNOVE RAUNARSTVA

    PRIMJER 2. PARCIJALNOG ISPITA

    1. (ukupno 5 bodova)

    00 #include 01 int f1(int a)

    02 {

    03 return a+2;

    04 }

    05

    06 int f2(int* p1)

    07 {

    08 int a;

    09 p1++;

    10 a=*p1;

    11 return a;

    12 }

    13

    14 void f3(char *p)

    15 {

    16 *p++='X';

    17 *p++='X';

    18 p+=2;

    19 *p='X';

    20 }

    21

    22 int main()

    23 {

    24 int B[5]={1,2,3,4,5};

    25 int A[3][3]={1,2,3};

    26 char d[]="Sarajevo";

    27 int c,a=0;

    28 c=A[1][1]+B[2];

    29 printf(%d,c);

    30 c=f1(B[0]);

    31 printf(%d,c);

    32 c=f2(B);

    33 printf(%d,c);

    34 f1(a);

    35 printf(%d,a);

    36 f3(d);

    37 printf("%s",d);

    38 return 0;

    39 }

    a) (1 bod)

    Izvoenjem naredbe u liniji 29

    program e ispisati:

    _________________________

    b) (1 bod)

    Izvoenjem naredbe u liniji 31program e ispisati:

    _________________________

    c) (1 bod)

    Izvoenjem naredbe u liniji 33

    program e ispisati:

    _________________________

    d) (1 bod)

    Izvoenjem naredbe u liniji 35

    program e ispisati:

    _________________________

    e) ( 1 bod)

    Izvoenjem naredbe u liniji 37

    program e ispisati:

    _________________________

    Skinuto sa www.etf.ba

    2005

  • 8/3/2019 Or 2 Rokovi Do2007

    17/64

    2. (5 bodova)

    Napisati funkciju okreni() koja kao argument uzima neki string i okree sadraj tog stringa

    naopako. Prototip funkcije okreni() treba biti:

    void okreni(char* p)

    Zatim napravite glavni program koji sa standardnog ulaza uitava neki string, te ga ispisuje

    naopako.

    Primjer:

    Unesite string: Sarajevo

    Naopako: ovejaraS

    3. (ukupno 10 bodova)

    a) (4 boda)

    Napisati funkciju ubaci5() koja kao argument uzima neki prirodni broj n i dva broja a i b, a

    zatim vraa broj koji bi nastao zamjenom cifri na mjestu a i b cifrom 5 (gledano s desne

    strane). Funkcija ne treba nita ispisivati.

    Funkcija ubaci5() treba imati prototip:

    int ubaci5(int n,int a,int b);

    Pretpostaviti da su a i b valjano unesene vrijednosti koje imaju smisla.

    Primjeri ulaznih argumenata i vraenih vrijednosti:

    Primjer1: za ulazne argumente n=123321, a=2, b=3 funkcija vraa broj 123551.

    Primjer 2: za ulazne argumente n=23455, a=3, b=5 funkcija vraa broj 53555.

    Skinuto sa www.etf.ba

  • 8/3/2019 Or 2 Rokovi Do2007

    18/64

    b)(6 bodova)

    Napisati program koji uitava podatke iz ulazne formatirane tekstualne datoteke

    gradovi.txt i kreira izlaznu datoteku prosjeci.txt koja sadri spisak gradova s

    prosjenom temperaturom za prva tri mjeseca.

    Datoteka gradovi.txtje slijedeeg formata:

    [grad] [JAN] [FEB] [MAR]

    gdje je:

    [grad] kolona u kojoj su zapisani nazivi gradova i koja zauzima 15

    mjesta;

    [JAN], [FEB], [MAR] kolona u kojoj su zapisane cjelobrojne prosjene temperature

    za mjesec januar, februar i mart, respektivno. Ove kolone

    zauzimaju po 10 mjesta

    Datoteka prosjeci.txt je slijedeeg formata:

    [grad] [PRTEMP]

    gdje je:

    [grad] kolona u kojoj su zapisani nazivi gradova i koja zauzima 15

    mjesta;

    [PRTEMP] kolona u kojoj su zapisane prosjene temperature koristei dva

    decimalna mjesta i maksimalno dva mjesta prije decimalne

    take.

    Primjer sadraja datoteke gradovi.txt:

    TRAVNIK 0 1 2

    ZENICA 2 3 4

    TUZLA 2 5 5

    SARAJEVO 0 3 1

    Primjer sadraja datoteke prosjeci.txt:

    TRAVNIK 1.00

    ZENICA 3.00

    TUZLA 4.00

    SARAJEVO 1.33

    Skinuto sa www.etf.ba

  • 8/3/2019 Or 2 Rokovi Do2007

    19/64

    ELEKTROTEHNIKI FAKULTET SARAJEVO

    Predmet: OSNOVE RAUNARSTVA

    Drugi parcijalni ispit (11. 01. 2007)

    Varijanta

    DIme i prezime (itko): ____________________________

    Grupa: ___________ Broj indexa: __________________

    Potpis: ________________________________________

    Bodova

    1. Paljivo pregledajte dati program i upiite odgovore u prostor sa strane.

    (5 bodova)

    00 #include

    01 int f1(int y)

    02 {

    03 return y+5;

    04 }

    05

    06 int f2(int* p1)

    07 {

    08 int y;

    09 y=*p1++;

    10 y+=*p1++;

    11 y++;

    12 return y;

    13 }

    14

    15 void f3(char *p, int z)

    16 {

    17 *++p=z;

    18 *p++='X';

    19 p+=3;

    20 *p=z;

    21 }

    22

    23 int main()

    24 {25 int Y[3][3]={1,2,3,4};

    26 int X[4]={'A','B','C','D'};

    27 char z[12]="Washington";

    28 int x=0,y=1;

    29 y=Y[1][1]+X[2];

    30 printf("%d\n",y);

    31 y=f1(X[0]);

    32 printf("%d\n",y);

    33 y=f2(Y);

    34 printf("%d\n",y);

    35 f1(x);

    36 printf("%d\n",x);

    37 f3(z,X[2]);

    38 printf("%s\n",z);

    39 return 0;

    40 }

    a) 1 bod

    Izvoenjem naredbe u liniji 30

    program e ispisati:

    _________________________

    b) 1 bod

    Izvoenjem naredbe u liniji 32

    program e ispisati:

    _________________________

    c) 1 bod

    Izvoenjem naredbe u liniji 34

    program e ispisati:

    _________________________

    d) 1 bod

    Izvoenjem naredbe u liniji 36program e ispisati:

    _________________________

    e) 1 bod

    Izvoenjem naredbe u liniji 38

    program e ispisati:

    _________________________

    Skinuto sa www.etf.ba

    2006

  • 8/3/2019 Or 2 Rokovi Do2007

    20/64

    2. Na slobodnim listovima napiite itko funkcije koje se trae u zadacima.

    a) 3 boda

    Napisati funkciju koja prima nenegativan cijeli broj i iz njega izbacuje sve cifre djeljive sa 3, npr.:

    Funkcija prima 12345 a vraa 1245

    Funkcija prima 13579 a vraa 157Funkcija prima 6693 a vraa 0 itd.

    b) 4 boda

    Napraviti funkciju sa sljedeim prototipom:int ispravna(char *adresa)

    Funkcija vraa vrijednost 1 ako primljeni string predstavlja ispravnu e-mail adresu iz Bosne i

    Hercegovine, a u suprotnom vraa 0. Radi jednostavnosti, primijenite sljedee testove:

    1. u stringu se nalazi tano jedan znak @

    2. posljednja tri karaktera stringa su ".ba"

    Ukoliko jedan od testova nije zadovoljen, funkcija vraa 0.

    3. Na slobodnim listovima papira napiite traeni program. (6 bodova)

    Dat je sljedei niz struktura:

    struct student {

    char ime[10];

    char prezime[15];

    int predmet;

    int ocjena;

    } studenti[100];

    Program iz datoteke studenti.txt u

    itava sadr

    aj ovog niza, pri

    emu je predmet cijeli broj izme

    u 1i 10 (ukljuujui i ta dva). Treba nai srednju vrijednost ocjene svakog predmeta ukoliko ga je

    polagao bar jedan student (bez obzira da li je student pao ili ne) i u datoteku ispiti.txt upisati:

    broj predmeta (2 karaktera), prosjena ocjena (6 karaktera, 2 decimale)

    Pri otvaranju datoteke provjeriti je li dolo do greke. Ako neki predmet nije sluao niti jedan

    student, taj predmet se ne treba nalaziti u izlaznoj datoteci. Primjer sadraja datoteke studenti.txt:

    ANTE ANTIC 3 6

    BORIS ORUC 4 10

    SULJO SULJIC 8 5

    MILEVA MUJIC 3 5

    MINKA BUGIC 4 6

    Za gore navedene podatke, datoteka rezultati.txte imati sljedei sadraj:3 5.50

    4 8.00

    8 5.00

    4. Na slobodnim listovima papira napiite odgovore na sljedea pitanja. (2 boda)

    Navedite osnovne mrene topologije koje su vam poznate i nacrtajte njihove eme.

    Skinuto sa www.etf.ba

  • 8/3/2019 Or 2 Rokovi Do2007

    21/64

    ELEKTROTEHNIKI FAKULTET SARAJEVO

    Predmet: OSNOVE RAUNARSTVA

    Drugi parcijalni ispit (11. 01. 2007)

    Varijanta

    BIme i prezime (itko): ____________________________

    Grupa: ___________ Broj indexa: __________________

    Potpis: ________________________________________

    Bodova

    1. Paljivo pregledajte dati program i upiite odgovore u prostor sa strane.

    (5 bodova)

    00 #include

    01 int x(int b)

    02 {

    03 return b+2;

    04 }

    05

    06 int y(int* p)

    07 {

    08 int b;

    09 b=*p++;

    10 b++;

    11 b+=*p--;

    12 return b;

    13 }

    14

    15 void z(char *p1, int c)

    16 {

    17 *++p1=c;

    18 *p1++='-';

    19 p1++;

    20 *p1--=c;

    21 }

    22

    23 int main()

    24 {25 int A[2][2]={1,2,3,4};

    26 int B[6]={'A','B','C'};

    27 char c[]="London";

    28 int b,a=1;

    29 b=A[1][1]+B[2];

    30 printf("%d\n",b);

    31 b=x(B[1]);

    32 printf("%d\n",b);

    33 b=y(A);

    34 printf("%d\n",b);

    35 x(a);

    36 printf("%d\n",a);

    37 z(c,B[2]);

    38 printf("%s\n",c);

    39 return 0;

    40 }

    a) 1 bod

    Izvoenjem naredbe u liniji 30

    program e ispisati:

    _________________________

    b) 1 bod

    Izvoenjem naredbe u liniji 32

    program e ispisati:

    _________________________

    c) 1 bod

    Izvoenjem naredbe u liniji 34

    program e ispisati:

    _________________________

    d) 1 bod

    Izvoenjem naredbe u liniji 36program e ispisati:

    _________________________

    e) 1 bod

    Izvoenjem naredbe u liniji 38

    program e ispisati:

    _________________________

    Skinuto sa www.etf.ba

    2006

  • 8/3/2019 Or 2 Rokovi Do2007

    22/64

    2. Na slobodnim listovima napiite itko funkcije koje se trae u zadacima.

    a) 3 boda

    Napisati funkciju koja za parametar ima cijeli nenegativni broj i koja vraa 1 ako broj proitan

    sprijeda i odotraga daje istu vrijednost, a 0 ukoliko to nije sluaj. Na primjer:

    Za broj 123321 funkcija vraa 1Za broj 123456 funkcija vraa 0

    Za broj 83638 funkcija vraa 1

    b) 4 boda

    Napraviti funkciju sa sljedeim prototipom:int ispravna(char *adresa)

    Funkcija vraa vrijednost 1 ako primljeni string predstavlja ispravnu e-mail adresu sa

    Elektrotehnikog fakulteta Univerziteta u Sarajevu, a u suprotnom vraa 0. Radi jednostavnosti,

    implementirajte sljedee testove:

    1. u stringu se nalazi tano jedan znak @

    2. dio iza znaka @ glasi "etf.unsa.ba"Ukoliko jedan od testova nije zadovoljen, funkcija vraa 0.

    3. Na slobodnim listovima papira napiite traeni program. (6 bodova)

    Dat je sljedei niz struktura:

    struct takmicar {

    char ime[10];

    char prezime[15];

    int bodova;

    } takmicari[100];Program iz datoteke takmicari.txt uitava sadraj ovog niza, pri emu je broj bodova cijeli broj

    izmeu 0 i 10 (ukljuujui i ova dva). Treba odrediti broj takmiara koji su osvojili 0,1,2,...,10

    bodova, te u datoteku rezultati.txt upisati:

    broj bodova (2 karaktera), broj takmiar (4 karaktera)

    Pri otvaranju datoteke provjeriti je li dolo do greke. Primjer sadraja datoteke takmicari.txt:

    ANTE ANTIC 3

    BORIS ORUC 6

    SULJO SULJIC 0

    MILEVA MUJIC 6

    MINKA BUGIC 7

    Za gore navedene podatke, datoteka rezultati.txte imati sljedei sadraj:

    0 1

    3 1

    6 2

    7 1

    4. Na slobodnim listovima papira napiite odgovore na sljedea pitanja. (2 bodova)

    Nabrojite sve operativne sisteme koji su vam poznati.

    Skinuto sa www.etf.ba

  • 8/3/2019 Or 2 Rokovi Do2007

    23/64

    ELEKTROTEHNIKI FAKULTET SARAJEVO

    Predmet: OSNOVE RAUNARSTVA

    Drugi parcijalni ispit (11. 01. 2007)

    Varijanta

    CIme i prezime (itko): ____________________________

    Grupa: ___________ Broj indexa: __________________

    Potpis: ________________________________________

    Bodova

    1. Paljivo pregledajte dati program i upiite odgovore u prostor sa strane. (5 bodova)

    00 #include

    01 int a1(int *x, int *y)

    02 {

    03 *y = *x / *y;

    04 return *y;

    05 }

    06

    07 int a2(int* p1)

    08 {

    09 int y;

    10 y=*p1++;

    11 y+=*p1++;

    12 y++;

    13 return y;

    14 }

    15

    16 void a3(char *p)

    17 {

    18 *(p+3)='-';

    19 *p++='-';

    20 p+=3;

    21 *p--='-';

    22 }

    23

    24 int main() {

    25 int X[4]={5,10,15,20};26 int Y[2][2]={1,2,3,4};

    27 char z[]="Sloboda";

    28 int y=1,x=1;

    29 y=*(Y[1]+1)+*(X+3);

    30 printf("%d\n",y);

    31 y=a1(X+1,&x);

    32 printf("%d\n",y);

    33 y=a2(Y);

    34 printf("%d\n",y);

    35 a1(&x,&y);

    36 printf("%d\n",x);

    37 a3(z);

    38 printf("%s\n",z);

    39 return 0;

    40 }

    a) 1 bod

    Izvoenjem naredbe u liniji 30

    program e ispisati:

    _________________________

    b) 1 bod

    Izvoenjem naredbe u liniji 32

    program e ispisati:

    _________________________

    c) 1 bod

    Izvoenjem naredbe u liniji 34

    program e ispisati:

    _________________________

    d) 1 bod

    Izvoenjem naredbe u liniji 36

    program e ispisati:

    _________________________

    e) 1 bod

    Izvoenjem naredbe u liniji 38

    program e ispisati:

    _________________________

    Skinuto sa www.etf.ba

    2006

  • 8/3/2019 Or 2 Rokovi Do2007

    24/64

    2. Na slobodnim listovima napiite itko funkcije koje se trae u zadacima.

    a) 3 boda

    Napravite funkciju koja prima pozitivan cijeli broj, a vraa isti taj broj u kojem su sve cifre manje od

    5 pomnoene sa dva. Primjeri:

    Funkcija prima 13579 a vraa 26579

    Funkcija prima 87263 a vraa 87466 itd.

    b) 4 boda

    Napraviti funkciju sa sljedeim prototipom:int bih(char *url)

    Funkcija vraa vrijednost 1 ako primljeni string predstavlja ispravan URL (adresa web stranice) sa

    prostora Bosne i Hercegovine. Radi jednostavnosti, napravite sljedee testove:

    1. prvih sedam znakova stringa glasi "http://"

    2. prije sljedeeg znaka '/' zadnja tri slova su ".ba"

    Primjeri:

    Za tekst abcdefgh funkcija vraa 0

    Za tekst http://www.nesto.ba funkcija vraa 1Za tekst http://www.google.com/search funkcija vraa 0

    Za tekst http://www.nesto.ba/test/ funkcija vraa 1

    3. Na slobodnim listovima papira napiite traeni program. (6 bodova)

    Dat je sljedei niz struktura:

    struct osoba {

    char ime[10];

    char prezime[15];

    char mjesto[15];int dan;

    int mjesec;

    int godina;

    } osobe[100];

    Program iz datoteke stanovnistvo.txt uitava sadraj ovog niza, pri emu dan, mjesec i godina

    predstavljaju datum roenja. Treba odrediti broj stanovnika koji su roeni svake od datih godina te

    upisati te podatke u datoteku statistika.txtiji je format:

    godina roenja (4 karaktera), broj stanovnika (4 karaktera)

    Pri otvaranju datoteke provjeriti je li dolo do greke. Primjer sadraja datoteke stanovnistvo.txt:

    ANTE ANTIC ZENICA 14 12 1986

    BORIS ORUC VISOKO 18 02 1987SULJO SULJIC SARAJEVO 07 01 1985

    MILEVA MUJIC TUZLA 09 05 1986

    MINKA BUGIC TESANJ 23 01 1985

    Za gore navedene podatke, datoteka statistika.txte imati sljedei sadraj:

    1985 2

    1986 2

    1987 1

    4. Na slobodnim listovima papira napiite odgovore na sljedea pitanja. (2 bodova)

    Nacrtajte blok-emu Von Neumann-ove (Fon Nojmanove) arhitekture.

    Skinuto sa www.etf.ba

  • 8/3/2019 Or 2 Rokovi Do2007

    25/64

    ELEKTROTEHNIKI FAKULTET SARAJEVO

    Predmet: OSNOVE RAUNARSTVA

    Drugi parcijalni ispit (11. 01. 2007)

    Varijanta

    AIme i prezime (itko): ____________________________

    Grupa: ___________ Broj indexa: __________________

    Potpis: ________________________________________

    Bodova

    1. Paljivo pregledajte dati program i upiite odgovore u prostor sa strane.

    (5 bodova)

    00 #include

    01 int f1(int *a, int b)

    02 {

    03 *a = *a / b;

    04 return *a++;

    05 }

    06

    07 int f2(int* p)

    08 {

    09 int b;

    10 b=*p++;

    11 b++;12 b-=*p++;

    13 return b;

    14 }

    15

    16 void f3(char *p)

    17 {

    18 *(p+3)='A';

    19 *p++='A';

    20 p+=3;

    21 *p--='A';

    22 }

    23

    24 int main() {

    25 int A[4]={100,101,102,103};

    26 int B[3][3]={1,2,3,4};

    27 char c[]="Sarajevo";

    28 int b=1,a=1;

    29 b=B[0][2]+*(A+2);

    30 printf("%d\n",b);

    31 b=f1(B+1,b+1);

    32 printf("%d\n",b);

    33 b=f2(B);

    34 printf("%d\n",b);

    35 f1(&a,a);

    36 printf("%d\n",a);

    37 f3(c);

    38 printf("%s\n",c);39 return 0;

    40 }

    a) 1 bod

    Izvoenjem naredbe u liniji 30

    program e ispisati:

    _________________________

    b) 1 bod

    Izvoenjem naredbe u liniji 32

    program e ispisati:

    _________________________

    c) 1 bod

    Izvoenjem naredbe u liniji 34

    program e ispisati:

    _________________________

    d) 1 bod

    Izvoenjem naredbe u liniji 36

    program e ispisati:

    _________________________

    e) 1 bod

    Izvoenjem naredbe u liniji 38

    program e ispisati:

    _________________________

    Skinuto sa www.etf.ba

  • 8/3/2019 Or 2 Rokovi Do2007

    26/64

    2. Na slobodnim listovima napiite itko funkcije koje se trae u zadacima.

    a) 3 boda

    Napravite funkciju koja prima nenegativan cijeli broj i iz njega izbacuje sve neparne cifre, npr.:

    Funkcija prima 12345 a vraa 24

    Funkcija prima 13579 a vraa 0Funkcija prima 2468 a vraa 2468 itd.

    b) 4 boda

    Napravite funkciju sa sljedeim prototipom:int sadrzi(char *string, char *podstring)

    koja vraa koliko puta se niz znakova podstring javlja unutar niza znakova string. U realizaciji ove

    funkcije nije dozvoljeno koristiti bibliotene funkcije. Primjeri:

    string podstring rezultat funkcije

    "babaroga" "ba" 2

    "ararat" "ara" 2

    "Sarajevo" "ara" 1"Banja Luka" "a" 3

    3. Na slobodnim listovima papira napiite traeni program. (6 bodova)

    Dat je sljedei niz struktura:

    struct uposlenik {

    char ime[10];

    char prezime[15];

    int godina_rodjenja;

    float plata;} uposlenici[100];

    Program iz datoteke zaposleni.txt uitava sadraj ovog niza. Treba odrediti koliko zaposlenika je

    imalo platu ispod 500 KM, 500-750 KM, 750-1000 KM, 1000-1250 KM i preko 1250 KM. Zatim ove

    podatke treba upisati u datoteku plate.txtiji je oblik

    raspon plata (15 karaktera), broj uposlenika (2 karaktera)

    Pri otvaranju datoteke provjeriti je li dolo do greke. Primjer sadraja datoteke zaposleni.txt:

    ANTE ANTIC 1974 653

    BORIS ORUC 1968 815

    SULJO SULJIC 1970 1100

    MILEVA MUJIC 1968 1050

    MINKA BUGIC 1974 1200

    Za gore navedene podatke, datoteka statistika.txte imati sljedei sadraj:

    500-750 1

    750-1000 1

    1000-1250 2

    4. Na slobodnim listovima papira napiite odgovore na sljedea pitanja. (2 bodova)

    Objasnite to je krae mogue pojam bistabila.

    Skinuto sa www.etf.ba

  • 8/3/2019 Or 2 Rokovi Do2007

    27/64

    ELEKTROTEHNIKI FAKULTET SARAJEVO

    Predmet: OSNOVE RAUNARSTVA

    Drugi parcijalni ispit (01. 02. 2007)

    Varijanta

    AIme i prezime (itko): ____________________________

    Grupa: ___________ Broj indexa: __________________

    Potpis: ________________________________________

    Bodova

    1. Paljivo pregledajte dati program i upiite odgovore u prostor sa strane.

    (5 bodova)

    00 #include

    01 int a(int x)

    02 {

    03 return x-2;

    04 }

    05

    06 int b(int* p)

    07 {

    08 int x;

    09 x=*p++;

    10 p++;

    11 x++;

    12 return x;

    13 }

    14

    15 void c(char *p, char x)

    16 {

    17 *++p=x;

    18 *p++='X';

    19 p+=2;

    20 *p=x;

    21 }

    22

    23 int main()

    24 {25 int P[2][2]={2,4,6,8};

    26 char Q[4]={'A','E','I','O'};

    27 char z[12]="Mostar";

    28 int x=0,y=1;

    29 y=P[1][1]+Q[0];

    30 printf("%d\n",y);

    31 y=a(Q[1]);

    32 printf("%d\n",y);

    33 y=b(P);

    34 printf("%d\n",y);

    35 a(x);

    36 printf("%d\n",x);

    37 c(z,Q[2]);

    38 printf("%s\n",z);

    39 return 0;

    40 }

    a) 1 bod

    Izvoenjem naredbe u liniji 30

    program e ispisati:

    _________________________

    b) 1 bod

    Izvoenjem naredbe u liniji 32

    program e ispisati:

    _________________________

    c) 1 bod

    Izvoenjem naredbe u liniji 34

    program e ispisati:

    _________________________

    d) 1 bodIzvoenjem naredbe u liniji 36

    program e ispisati:

    _________________________

    e) 1 bod

    Izvoenjem naredbe u liniji 38

    program e ispisati:

    _________________________

    Skinuto sa www.etf.ba

  • 8/3/2019 Or 2 Rokovi Do2007

    28/64

    2. Na slobodnim listovima napiite itko funkcije koje se trae u zadacima.

    a) 3 boda

    Napisati funkciju koja prima dva parametra: pokaziva na prvi element niza cijelih brojeva, i broj

    elemenata niza, a vraa prosjenu vrijednost parnih brojeva u nizu ili 0 ako nijedan element nije

    paran. Primjeri:Niz 2,1,7,8,5 funkcija vraa 5 (prosjek od 2 i 8)

    Niz 1,3,5,7,9 funkcija vraa 0 (nijedan broj nije paran)

    b) 4 boda

    Napraviti funkciju sa sljedeim prototipom:int ispravna(char *tablica)

    Funkcija vraa vrijednost 1 ako primljeni string predstavlja ispravnu registarsku tablicu iz Bosne i

    Hercegovine, a u suprotnom vraa 0. Registarske tablice iz BiH se sastoje od: tri cifre, znaka minus

    '-', velikog slova, znaka minus '-', te ponovo tri cifre. Primjer: 123-A-456, 987-T-432.

    3. Na slobodnim listovima papira napiite traeni program. (6 bodova)

    Dat je sljedei niz struktura:

    struct student {

    char ime[10];

    char prezime[15];

    float prvaparc;

    float drugaparc;

    } studenti[100];

    Program iz datoteke studenti.txt uitava sadraj ovog niza, pri emu su prvaparc i drugaparc broj

    bodova na prvoj odnosno drugoj parcijali. Za svakog studenta treba odrediti sumu bodova na objeparcijale i konanu ocjenu i upisati u datoteku rezultati.txt sljedee podatke:

    ime (10 znakova),prezime (15 znakova), ukupan broj bodova (na 2 decimale), ocjena (2 cifre)

    Ocjena se odreuje po sljedeoj formuli:

  • 8/3/2019 Or 2 Rokovi Do2007

    29/64

    ELEKTROTEHNIKI FAKULTET SARAJEVO

    Predmet: OSNOVE RAUNARSTVA

    Drugi parcijalni ispit (11. 01. 2007)

    Varijanta

    BIme i prezime (itko): ____________________________

    Grupa: ___________ Broj indexa: __________________

    Potpis: ________________________________________

    Bodova

    1. Paljivo pregledajte dati program i upiite odgovore u prostor sa strane.

    (5 bodova)

    00 #include

    01 int fx(int a, int *b)

    02 {

    03 a += *b++;

    04 return a;

    05 }

    06

    07 int fy(int* p)

    08 {

    09 int x;

    10 x=*p++;

    11 x--;

    12 x+=*p++;

    13 return x;

    14 }

    15

    16 void fz(char *p)

    17 {

    18 *p++='A';

    19 *(p+2)='A';

    20 p+=4;

    21 *p--='A';

    22 }

    23

    24 int main() {25 int X[4][4]={1,2,3,4};

    26 int Y[4]={50,60,70,80};

    27 char g[]="Travnik";

    28 int e=0,f=0;

    29 f=X[0][2]+*(Y+2);

    30 printf("%d\n",f);

    31 f=fx(f+1,X+1);

    32 printf("%d\n",f);

    33 f=fy(X);

    34 printf("%d\n",f);

    35 fx(e,&e);

    36 printf("%d\n",e);

    37 fz(g);

    38 printf("%s\n",g);

    39 return 0;

    40 }

    a) 1 bod

    Izvoenjem naredbe u liniji 30

    program e ispisati:

    _________________________

    b) 1 bod

    Izvoenjem naredbe u liniji 32

    program e ispisati:

    _________________________

    c) 1 bod

    Izvoenjem naredbe u liniji 34

    program e ispisati:

    _________________________

    d) 1 bodIzvoenjem naredbe u liniji 36

    program e ispisati:

    _________________________

    e) 1 bod

    Izvoenjem naredbe u liniji 38

    program e ispisati:

    _________________________

    Skinuto sa www.etf.ba

  • 8/3/2019 Or 2 Rokovi Do2007

    30/64

    2. Na slobodnim listovima napiite itko funkcije koje se trae u zadacima.

    a) 3 boda

    Napisati funkciju koja prima dva parametra: pokaziva na prvi element niza cijelih brojeva, i brojelemenata niza, a vraa prosjenu vrijednost elemenata niza na parnim mjestima (drugo, etvto,

    esto mjesto... dakle to su elementi sa indeksom: 1,3,5...), odnosno vra

    a nulu ako niz ima manje oddva elementa. Primjeri:Niz 2,1,7,8,5 funkcija vraa 4.5 (prosjek od 1 i 8)Niz 1 funkcija vraa 0 (niz ima samo jedan element)

    b) 4 boda

    Napraviti funkciju sa sljedeim prototipom:char mreza(char *telefon)

    Primljeni string predstavlja broj telefona iz BiH u obliku: trocifreni pozivni broj, znak slash '/', prvetri cifre broja, znak minus '-', druge tri cifre broja. Primjer: 033/123-456.Funkcija vraa nulu ako:

    1. broj nije u traenom obliku ili

    2. broj nije mobilni (prve dvije cifre trebaju biti 06).Ako su oba uslova zadovoljena, vraa se trei po redu znak koji predstavlja ID mree (npr. '1' zamreu 061 - BH GSM). Primjeri:

    String 123ABC funkcija vraa 0 (broj nije u traenom obliku)String 033/123-456 funkcija vraa 0 (broj nije mobilni)String 063/123-456 funkcija vraa '3' (ID mree 063)

    3. Na slobodnim listovima papira napiite traeni program. (6 bodova)

    Dat je sljedei niz struktura:struct osoba {

    char ime[10];

    char prezime[15];char mjesto[10];int godinarodj;

    } osobe[100];Program iz datoteke stanovnistvo.txt uitava sadraj ovog niza, a zatim u datoteku mladji1980.txtupisuje imena i prezimena onih ija je godina roenja manja ili jednaka 1980. Nakon toga na ekranuse ispisuje koliko procentualno ima u nizu osoba iz gradova: Sarajevo, Tuzla, Zenica, Mostar i ostalihgradova koji nisu na ovom spisku. Primjer sadraja datoteke stanovnistvo.txt:

    ANTE ANTIC SARAJEVO 1981BORIS ORUC ZENICA 1980SULJO SULJIC SARAJEVO 1975MILEVA MUJIC BIHAC 1982MINKA BUGIC TUZLA 1981

    Za gore navedene podatke, datoteka mladji1980.txte imati sljedei sadraj:ANTE ANTICBORIS ORUCMILEVA MUJICMINKA BUGIC

    A program e na ekranu ispisati:SARAJEVO 40%TUZLA 20%ZENICA 20%MOSTAR 0%Ostali 20%

    4. Na slobodnim listovima papira napiite odgovore na sljedea pitanja. (2 bodova)

    Nabrojite sve operativne sisteme koji su vam poznati.

    Skinuto sa www.etf.ba

  • 8/3/2019 Or 2 Rokovi Do2007

    31/64

    ELEKTROTEHNIKI FAKULTET SARAJEVO

    Predmet: OSNOVE RAUNARSTVA

    Prvi parcijalni ispit (01. 02. 2007)

    Varijanta

    AIme i prezime (itko): ____________________________

    Grupa: ___________ Broj indexa: __________________

    Potpis: ________________________________________

    Bodova

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

    listovima.

    a) (1 bod) Pretvorite broj iz binarnog sistema u dekadski:

    11100111(2) = (10)

    b) (1 bod) Pretvorite broj iz oktalnog sistema u binarni:

    542(8) = (2)

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

    491 (10) = (16)

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

    a) (1 bod)

    int k,j=1;for(k=1; k

  • 8/3/2019 Or 2 Rokovi Do2007

    32/64

    c) (2 boda)

    int b=4, k=24;

    do {

    b+=3;

    } while(--k>20);

    k=k/4;

    printf("b=%d,k=%d",b,k);

    d) (1 bod)

    char a='D',b='C',c='A';

    a='D'+c;

    b=a+b-'A';

    c=b-a;

    a=a-b+'C';

    b=b-68;printf("a=%c,b=%c,c=%d",a,b,c);

    e) (1 bod)

    int a=4;

    float s;

    a+=a--;

    s=a/3.+1;

    printf("a=%d, s=%3.2f",a,s);

    3. Na slobodnim listovima papira napiite traene programe.

    a) (4 boda) Napiite program koji izraunava vrijednost sljedee sume:

    S=n !32

    3x1

    33

    3x1

    34

    3x1...1

    n1 3n

    3x1n1, n2,x

    1

    3

    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 7 realnih elemenata dva niza A i B a zatim

    izraunava elemente treeg niza C (koji takoer ima 7 elemenata) pri emu se i-ti element niza C

    dobiva prema sljedeoj formuli:

    ( +B ) / 2, 0..6i i i

    C = A i =

    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 ekranuispisuje sve brojeve izmeu 1 i 20 koji su djeljivi

    sa 3 ili sa 5.

    Savjet: U pitanju su 2-3 linije koda.

    d) (1 bod) Napiite blok naredbi koji na ekranuispisuje srednju vrijednost parnih brojeva izmei

    1 i 10 (koristiti petlju).

    Savjet: U pitanju su 3 linije koda.

    Skinuto sa www.etf.ba

  • 8/3/2019 Or 2 Rokovi Do2007

    33/64

    ELEKTROTEHNIKI FAKULTET SARAJEVO

    Predmet: OSNOVE RAUNARSTVA

    Prvi parcijalni ispit (01. 02. 2007)

    Varijanta

    BIme i prezime (itko): ____________________________

    Grupa: ___________ Broj indexa: __________________

    Potpis: ________________________________________

    Bodova

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

    listovima.

    a) (1 bod) Pretvorite broj iz binarnog sistema u dekadski:

    11001101(2) = (10)

    b) (1 bod) Pretvorite broj iz oktalnog sistema u binarni:

    721(8) = (2)

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

    539 (10) = (16)

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

    a) (1 bod)

    int a=4, b=2;switch(a/b) {

    case 0: a++; b--; break;

    case 1: a--; b++; break;

    case 2: a++; b++;

    case 3: a/=b; b++;

    default: a*=2; b--; break;

    }

    printf("a=%d,b=%d",a,b);

    b) (2 boda)

    int k=2, b=6;do {

    b-=k++;

    } while(k

  • 8/3/2019 Or 2 Rokovi Do2007

    34/64

    c) (2 boda)

    char c='Z',d='C';

    while(c>'A') {

    if(c%10==0)

    printf("%c",d);

    c--;

    }

    d) (1 bod)

    int i,j;

    for(i=0;i

  • 8/3/2019 Or 2 Rokovi Do2007

    35/64

    D9944188

    1. Paljivo pregledajte dati program i upiite odgovore u prostor sa strane. (5 bodova)

    00 #include 01 int a(int y)02 {03 return y-2;04 }

    0506 int b(int* p)07 {08 int y;09 y=*p++;10 y++;11 y+=*p--;12 return y;13 }1415 void c(char *p, int z)16 {17 *++p=z;

    18 *p++='-';19 p++;20 *p--=z;21 }2223 int main()24 {25 int X[2][2]={1,9,17,25};26 char Y[4]={'O','P','Q','R'};27 char z[9]="Sarajevo";28 int y,x=1;29 y=X[1][1]+Y[1];30 printf("%d\n",y);

    31 y=a(Y[1]);32 printf("%d\n",y);33 y=b(X);34 printf("%d\n",y);35 a(x);36 printf("%d\n",x);37 c(z,Y[2]);38 printf("%s\n",z);39 return 0;40 }

    a) 1 bodIzvoenjem naredbe u liniji30 program e ispisati:

    _______________________b) 1 bod

    Izvoenjem naredbe u liniji32 program e ispisati:

    _______________________c) 1 bodIzvoenjem naredbe u liniji

    34 program e ispisati:

    _______________________d) 1 bodIzvoenjem naredbe u liniji36 program e ispisati:

    _______________________

    e) 1 bodIzvoenjem naredbe u liniji38 program e ispisati:

    _______________________

    2. Na slobodnim listovima napiite itko funkcije koje se trae u zadacima.

    a) 4 boda

    Napraviti funkciju koja u datom nizu cijelih brojeva pronalazi srednju vrijednost, a zatim vraa brojlanova niza koji su vei od srednje vrijednosti.

    Primjer:Dat je niz 10 10 10 10 1Srednja vrijednost elemenata niza je 8,2.Funkcija treba vratiti broj 4 jer su 4 lana vea od srednje vrijednosti.

    Skinuto sa www.etf.ba

  • 8/3/2019 Or 2 Rokovi Do2007

    36/64

    b) 5 bodova

    Napraviti funkciju sa sljedeim prototipom:int najcifra(char* s)

    koja pronalazi i vraa cifru izmeu 0 i 9 koja se najvie puta javlja u datom stringu. Funkcija ne trebabrojati znakove osim cifara. Ukoliko se dvije ili vie cifara javljaju podjednak broj puta, funkcija trebavratiti manju cifru.

    Savjet: U ASCII kodnom rasporedu, cifre su poredane redom: '0', '1', '2'... '9'.

    3. Na slobodnim listovima papira napiite traeni program. (6 bodova)

    Dat je sljedei niz struktura:struct grad{

    int kontinent;char ime_grada[20];int br_stanovnika;

    } gradovi[100];Kontinent: 1 - Afrika; 2 - Amerika; 3 - Australija; 4 - Azija; 5 - EvropaProgram iz datoteke gradovi.txt uitava sadraj ovog niza. Treba odrediti koliko koliko ukupno imagradova u Evropi sa 5 000 000 stanovnika i vie te sumu svih stanovnika u tim gradovima. Ispisati ova

    dva podatka na monitor. Sve ove gradove (u Evropi sa 5 000 000 stanovnika i vie) treba prepisati udatoteku nge.txt iji je oblik: ime grada (20 karaktera), broj stanovnika (10 karaktera).

    Pri otvaranju datoteke provjeriti da li je dolo do greke. itati i pisati u datoteku sa naredbom fscanfifprintf. Primjer sadraja datoteke gradovi.txt:1 Grad1 150 0002 Grad2 1 100 0003 Grad3 50 0005 Grad4 6 000 0001 Grad5 10 000 000

    2 Grad6 7 000 0005 Grad7 2 500 000

    Datoteka nge.txt treba izgledati ovako:Grad4 6 000 000

    Ekran:Broj gradova: 1Ukupan broj stanovnika: 6000000

    Napomena: broj stanovnika je u datoteci gradovi.txt upisan bez proreda, ovdje je u ovom obliku radipreglednosti. Pretpostaviti da ne postoji grad ije ime ima dvije ili vie rijei.

    Skinuto sa www.etf.ba

  • 8/3/2019 Or 2 Rokovi Do2007

    37/64

    2a) ZADATAK (4 boda)

    1. Napraviti funkciju koja u datom nizu cijelih brojeva pronalazi drugi po veliini i vraa indeks toglana u nizu.

    Primjer:Za niz 10 5 4 9 8 3 -1 funkcija vraa 3

    Jer se drugi po veliini lan (9) nalazi na 4. mjestu odnosno oznaen je indeksom 3 (prvi lan imaindeks 0, drugi indeks 1 itd.)

    /* U zad at ku n ij e naglaseno s ta r ad it i ako post oj e d va j e dnaka maksimuma. Npr . 10, 10, 9. Ova funkcij a ce vrat it i j edan od nj ih ( index 1) . Rj esenj a koj a vracaj u d rugi po velicini ( index 2 u n asem primjeru ) s mo t akod je u vazavali kao ispravna*/int drugi( int* niz, int vel) {

    int i, max, maxi, drugi, drugii;

    /* Funkcij a nema smisla za manj e od 2 element a. . . * /if ( veldrugi) {

    drugi=niz[i];drugii=i;

    }}return drugii;

    }

    2. Napraviti funkciju koja u datom nizu cijelih brojeva pronalazi lan koji je najblii srednjojvrijednosti i vraa taj lan. Ako postoje dva razliita lana koji su podjednako udaljeni od srednjevrijednosti, funkcija treba vratiti manji.

    Primjer:Dat je niz 10 5 4 9 8 3Srednja vrijednost elemenata niza je 6,5Najblii lanovi u nizu su 5 i 8 (oba se razlikuju za 1,5). Poto je broj 5 manji, funkcija treba

    vratiti broj 5.

    int naj b lizi_sv( in t* n iz, int vel) {/* Od red jivan je s rednje vrijednosti * /int i; float sv=0;

    for ( i=0; i

  • 8/3/2019 Or 2 Rokovi Do2007

    38/64

    /* Trazen je n ajman je r azlike * /float razlika=abs(niz[0] -sv); int indeks=0;for ( i=0; i

  • 8/3/2019 Or 2 Rokovi Do2007

    39/64

    }

    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 (nijepotrebno provjeravati da li je niz dovoljno velik). Broj treba biti poravnat udesno, mjesta s lijevestrane treba popuniti razmacima. Ukoliko broj n ima vie od 5 cifara, u niz treba upisati posljednjeetiri cifre a zatim slovo E.

    void upisi5( char* niz, int n) {/* Prebrojavan je c ifara * /int b rcifara=0, tmp=n;

    while ( t mp>0) {brcifara++;tmp/=10;

    }/* Upisivanj e br oj a * /int k=4;if ( b rcifara>5) {

    niz[k-- ]= 'E ' ;}for ( ; k>=0; k- - ) {

    if ( n>0) {niz[k] =' 0' +n%10;n/=10;

    } else {niz[ k] =' ' ;

    }}niz[5] ='\0';

    }

    2. Napraviti funkciju koja u datom stringu sve rijei duine 10 ili vie slova pretvara u skraenioblik - prva tri slova i znak taka. Primjer:

    Ulaz:Za vrijeme promjena specifikacija moze doci do poremecaja tolerancije izlaznog proizvoda.Izlaz:Za vrijeme promjena spe. moze doci do por. tol. izlaznog proizvoda.

    Radi jednostavnosti, ne trebate posebno tretirati znakove interpunkcije. Rije je svaki dio teksta kojije ogranien sa jednim ili vie razmaka.

    Napomena: Poto funkcije ne smiju vraati pokazivae na varijable i nizove deklarisane unutar

    funkcije, sve izmjene treba napraviti u stringu koji je primljen kao parametar i onda vratitipokaziva na isti taj string zato da bi se funkcije mogle lanano pozivati.

    Skinuto sa www.etf.ba

  • 8/3/2019 Or 2 Rokovi Do2007

    40/64

    #include char* skracenice(char* s ) {

    int brslova=1; /* Pr vo s lovo pr eskacemo pos to j e p++ u while pet lj i * /char*p=s ; /* s ost aj e nepr omij e nj e no, r ad i ret urn * /while ( * p++! =' \0' ) {

    if ( *p == ' ' | | *p == ' \0' ) {

    /* Dosli smo do razmaka * /if (brslova>=10) {/* Rij ec j e duza od 10 slova, skracuj emo * /char*q=p;/* Postavljamo t acku * /*(q-brslova+3)=' . ' ; /* Ova pet lj a pomj e ra s va s lova prema n apr ij e d kako biostatak r ijeci b io ob risan * /while ( * q! =' \0' ) {

    *(q-brslova+4)=*q;*q++;

    }*( q-brslova+4)=' \0' ;/* Var ij ablu p vracamo na r azmak iza t acke * /p=p-brslova+4;

    }brslova=0;

    } else {brslova++;

    }}return s ;

    }

    3. Napraviti funkciju sa sljedeim prototipom:

    char najslovo(char* s)koja pronalazi i vraa slovo koje se najvie puta javlja u datom stringu. Funkcija ne treba brojatiznakove osim slova, takoe ne treba praviti razliku izmeu velikih i malih slova. Ukoliko se dva ilivie slova javljaju podjednak broj puta, funkcija treba vratiti slovo koje dolazi prije po abecednomporetku.

    Primjer:Za string Abeceda funkcija treba vratiti A

    Slova A i E se javljaju po dva puta, ali je A abecedno ispred E, a poto funkcija ne razlikuje velika imala slova, veliko i malo A se ne broje odvojeno.

    char n aj slovo( char * s) {int i, brojac[30] ;for ( i=0; i=' A' && * s=' a' && * s

  • 8/3/2019 Or 2 Rokovi Do2007

    41/64

    maxi=i;}

    }return ' A' +maxi;

    }

    4. Napraviti funkciju sa sljedeim prototipom:int najcifra(char* s)

    koja pronalazi i vraa cifru izmeu 0 i 9 koja se najvie puta javlja u datom stringu. Funkcija netreba brojati znakove osim cifara. Ukoliko se dvije ili vie cifara javljaju podjednak broj puta,funkcija treba vratiti manju cifru.

    Savjet: U ASCII kodnom rasporedu, cifre su poredane redom: '0', '1', '2'... '9'.

    int naj c ifra( char * s) {int i, brojac[10] ;for ( i=0; i=' 0' && * s

  • 8/3/2019 Or 2 Rokovi Do2007

    42/64

    raspon nema grada u datoteku na mjesto rezervisano za broj gradova upisati 0.

    Pri otvaranju datoteke provjeriti da li je dolo do greke. itati i pisati u datoteku sa naredbomfscanf i fprintf. Primjer sadraja datoteke gradovi.txt:

    1 Grad1 150 000

    2 Grad2 1 100 0003 Grad3 50 0005 Grad4 6 000 0001 Grad5 10 000 0002 Grad6 7 000 0005 Grad7 2 500 000

    Datoteka rezultati.txt treba izgledati:

    100000 1100000 500000 1

    500000 1000000 01000000 5000000 25000000 3

    Napomena: broj stanovnika je u datoteci gradovi.txt upisan bez proreda, ovdje je u ovom oblikuradi preglednosti. Pretpostaviti da ne postoji grad ije ime ima dvije ili vie rijei.

    RJEENJE

    #include #include

    struct grad{ int kontinent; char ime_grada[20] ; in t br_stanovnika;} ;

    int main(){ struct grad gradovi[ 100] ; FILE *ulaz, *izlaz; int i=0, j , raspon[ ] ={0, 0 , 0, 0 , 0};

    if( ( ulaz=fopen ( "gradovi. txt " , " r ") )==NULL){ printf( "greska") ; exit( 1) ; }

    if( (izlaz=fopen ( "rezultat . txt " , " w" ) )==NULL){ printf( "greska") ; exit( 1) ; }

    while(fscanf(ulaz , " %3d %20s %10d\n" , &gradovi[i] . kontinent, gradovi[i] . ime_grada, &gradovi[i] . br_stanovnika)! =EOF && i

  • 8/3/2019 Or 2 Rokovi Do2007

    43/64

    for( j =0; j

  • 8/3/2019 Or 2 Rokovi Do2007

    44/64

    RJEENJE

    #include #include

    struct grad{

    int kontinent; char ime_grada[20] ; in t br_stanovnika;} ;

    int main(){ struct grad gradovi[ 100] ; FILE *ulaz, *izlaz; int i=0, j , raspon[ ] ={0, 0 , 0, 0 , 0};

    if( ( ulaz=fopen ( "gradovi. txt " , " r ") )==NULL){ printf( "greska") ;

    exit( 1) ; }

    if( (izlaz=fopen("milionski_gradovi. txt " , "w") )==NULL){ printf( "greska") ; exit( 1) ; }

    while(fscanf(ulaz , " %3d %20s %10d\n" , &gradovi[i] . kontinent, gradovi[i] . ime_grada, &gradovi[i] . br_stanovnika)! =EOF && i1000000) raspon[ 1] ++; break; case 3: if( gradovi[ j] . b r_stanovnika>1000000) raspon[ 2] ++; break; case 4: if( gradovi[ j] . b r_stanovnika>1000000) raspon[ 3] ++; break; case 5: if( gradovi[ j] . b r_stanovnika>1000000) raspon[ 4] ++; break; } }

    if( raspon[ 0] >0) fprintf( izlaz, " Afrika %4d\n" , raspon[ 0] ) ; if( raspon[ 1] >0) fprintf( izlaz, " Amerika %4d\n" , raspon[ 1] ) ; if( raspon[2]>0) fp rintf(izlaz , "Australija%4d\n" , r aspon[2 ] ) ; if( raspon[ 3] >0) fprintf( izlaz, " Azij a %4d\n" , raspon[ 3] ) ; if( raspon[ 4] >0) fprintf( izlaz, " Evropa %4d\n" , raspon[ 4] ) ;

    fclose ( ulaz) ; fclose ( izlaz) ;

    return 0;}

    3 c). Dat je sljedei niz struktura:

    Skinuto sa www.etf.ba

  • 8/3/2019 Or 2 Rokovi Do2007

    45/64

    struct grad{int kontinent;char ime_grada[20];int br_stanovnika;

    } gradovi[100];

    Kontinent: 1 Afrika; 2 Amerika; 3 Australija; 4 Azija; 5 - Evropa

    Program iz datoteke gradovi.txt uitava sadraj ovog niza. Treba odrediti koliko ukupno imagradova sa 5 000 000 stanovnika i vie te sumu svih stanovnika u tim gradovima i ispisati ova dvapodatka na monitor. Sve ove gradove (sa 5 000 000 stanovnika i vie ) treba prepisati u datotekunajveci_gradovi.txt iji je oblik: broj kontinenta(3 karaktera), ime grada (20 karaktera).Pri otvaranju datoteke provjeriti da li je dolo do greke. itati i pisati u datoteku sa naredbomfscanf i fprintf. Primjer sadraja datoteke gradovi.txt:

    1 Grad1 150 000

    2 Grad2 1 100 0003 Grad3 50 0005 Grad4 6 000 0001 Grad5 10 000 0002 Grad6 7 000 0005 Grad7 2 500 000

    Datoteka najveci_gradovi.txt treba izgledati:

    5 Grad41 Grad52 Grad6

    Ekran:Broj gradova: 3Ukupan broj stanovnika: 23000000

    Napomena: broj stanovnika je u datoteci gradovi.txt upisan bez proreda, ovdje je u ovom oblikuradi preglednosti. Pretpostaviti da ne postoji grad ije ime ima dvije ili vie rijei. Ispis na ekranutreba izgledati kao u primjeru.

    RJEENJE#include #include

    struct grad{ int kontinent; char ime_grada[20] ; in t br_stanovnika;} ;

    int main(){

    struct grad gradovi[ 100] ; FILE *ulaz, *izlaz; int i=0, j , br_grad=0, suma_stan=0;

    Skinuto sa www.etf.ba

  • 8/3/2019 Or 2 Rokovi Do2007

    46/64

    if( ( ulaz=fopen ( "gradovi. txt " , " r ") )==NULL){ printf( "greska") ; exit( 1) ; }

    if( (izlaz=fopen("najveci_gradovi. txt " , "w") )==NULL){ printf( "greska") ; exit( 1) ; }

    while(fscanf(ulaz , " %3d %20s %10d\n" , &gradovi[i] . kontinent, gradovi[i] . ime_grada, &gradovi[i] . br_stanovnika)! =EOF && i

  • 8/3/2019 Or 2 Rokovi Do2007

    47/64

    1 Grad1 150 0002 Grad2 1 100 0003 Grad3 50 0005 Grad4 6 000 0001 Grad5 10 000 0002 Grad6 7 000 000

    5 Grad7 2 500 000

    Datoteka najveci_gradovi_evrope.txt treba izgledati:

    Grad4 6 000 000

    Ekran:Broj gradova: 1Ukupan broj stanovnika: 6000000

    Napomena: broj stanovnika je u datoteci gradovi.txt upisan bez proreda, ovdje je u ovom oblikuradi preglednosti. Pretpostaviti da ne postoji grad ije ime ima dvije ili vie rijei. Ispis na ekranutreba izgledati kao u primjeru.

    RJEENJE

    #include #include

    struct grad{ int kontinent; char ime_grada[20] ;

    in t br_stanovnika;} ;

    int main(){ struct grad gradovi[ 100] ; FILE *ulaz, *izlaz; int i=0, j , br_grad=0, suma_stan=0;

    if( ( ulaz=fopen ( "gradovi. txt " , " r ") )==NULL){ printf( "greska") ; exit( 1) ; }

    if(( izlaz=fopen("najveci_gradovi_evrope. txt " , "w")) ==NULL){ printf( "greska") ; exit( 1) ; }

    while(fscanf(ulaz , " %3d %20s %10d\n" , &gradovi[i] . kontinent, gradovi[i] . ime_grada, &gradovi[i] . br_stanovnika)! =EOF && i

  • 8/3/2019 Or 2 Rokovi Do2007

    48/64

    suma_stan+=gradovi[j ] . br_stanovnika; fprintf( izlaz, "%-20s%10d\n", gradovi[j ] . ime_grada, gradovi[j ] . br_stanovnika); } }

    printf( " \n\nBroj gradova: %d" , br_grad) ; pr in tf( " \n Ukupan broj s tanovnika: %d" , su ma_stan ) ;

    fclose ( ulaz) ; fclose ( izlaz) ;

    return 0;}

    Skinuto sa www.etf.ba

  • 8/3/2019 Or 2 Rokovi Do2007

    49/64

    1. Napraviti funkciju koja u datom nizu realnih brojeva pronalazi srednju vrijednost decimalnihdijelova (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.1

    Srednja vrijednost ovih brojeva je 0.622167.

    float max_dec(float * niz , in t vel) {int i;float svdec=0;for ( i=0; i

  • 8/3/2019 Or 2 Rokovi Do2007

    50/64

    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 brojje peti po redu, dakle ima indeks 4.

    int n ajveca_cifra(int* n iz, in t vel) {int max=niz[0];int maxi=0;int i;for ( i=1; imax%10) {max=niz[i];maxi=i;

    } else if ( n iz[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 toglana 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 imaindeks 0, drugi indeks 1 itd.)

    int treci( int* niz, int vel) {

    int i, max, maxi, drugi, drugii, treci, trecii;/* Funkcij a nema smisla za manj e od 3 element a. . . * /if ( veldrugi) {treci=drugi;

    Skinuto sa www.etf.ba

  • 8/3/2019 Or 2 Rokovi Do2007

    51/64

    trecii=drugii;drugi=niz[i];drugii=i;

    } else if ( niz[ i] >t reci) {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 (nijepotrebno provjeravati da li je niz dovoljno velik). Broj treba biti poravnat udesno, mjesta s lijevestrane treba popuniti razmacima. Funkcija mora ispravno rukovati negativnim brojevima, odnosnoupisati znak minus ispred broja ako je broj negativan. Za razliku od redovnog roka, nije potrebnoupisivati slovo E (Funkcija koji bude rjeenje redovnog roka a ne ovog zadatka bie bodovana sa 0bodova).

    char* upisi5( char* niz, int n) {/* Pr ebrojavan je c ifara * /int brcifara=0 , tmp=n;while ( t mp! =0) {

    brcifara++;tmp/=10;

    }/* Upisivanj e br oj a * /int k=4;tmp=n;for ( ; k>=0; k- - ) {

    if ( tmp! = 0) {niz[k] =' 0' +abs(tmp%10);tmp/=10;

    } else {niz[ k] =' ' ;

    }}/* Upisivan je minusa * /if ( n=4) niz[0]= ' - ' ;

    elseniz[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

  • 8/3/2019 Or 2 Rokovi Do2007

    52/64

    koja u datom stringu recenica pronalazi sve rijei due od n znakova i prepisuje ih u stringvelike_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 kojije ogranien sa jednim ili vie razmaka.

    Napomena: Pri rjeavanju zadatka je dozvoljeno (ali ne i nuno) koritenje funkcija iz bibliotekestring.h.

    void d uze_od (char* r ecenica, char * velike_rijeci, in t n ) {int brslova=1; /* Pr vo s lovo pr eskacemo pos to j e p++ u while pet lj i * /char * p=recenica; /* r adi kraceg pisan ja * /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 d uze_od (char* r ecenica, char * velike_rijeci, in t n ) {int brslova=1; /* Pr vo s lovo pr eskacemo pos to j e p++ u while pet lj i * /char * p=recenica; /* r adi kraceg pisan ja * /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 trebapraviti razliku izmeu velikih i malih slova.

    Primjer 1:Za string Abeceda funkcija treba vratiti 2

    Skinuto sa www.etf.ba

  • 8/3/2019 Or 2 Rokovi Do2007

    53/64

    jer slova A i E se javljaju po dva puta, a poto funkcija ne razlikuje velika i mala slova, veliko imalo 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 s lova2puta(char * s) {int i, brojac[30] ;for ( i=0; i=' A' && * s=' a' && * s

  • 8/3/2019 Or 2 Rokovi Do2007

    54/64

    break; /* Izlaz iz petlj e * /}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.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 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 9sati 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

    s tru ct mj e renj a {float u9, u13, u16, u20;

    } sarajevo[731] ;

    int main( ) {FILE * ulaz , * izlaz ;

    int i=0, j , k, brojac1, brojac2;

    ulaz=fopen(" mjerenja- saraj evo. txt", "r" ) ;if ( ulaz==NULL) {

    printf ( "Greska kod o tvaranja datoteke mjerenja-sarajevo. txt . \n") ;return 1;

    }

    /* NAPOMENA: prilikom testiranja mozete staviti %f%f%f%f */while ( f scanf(ulaz , " %5. 1f %5. 1f %5. 1f %5. 1f\n" , &sarajevo[i] . u9,

    &saraj evo[i] . u13, &saraj evo[i] . u16, &sarajevo[i] . u20)==4) i++;

    fclose(ulaz);

    /* Ispis na ekran * /print f ( " I z dat ot eke s u ucit ani pod aci za %d dana. \n" , i) ;

    Skinuto sa www.etf.ba

  • 8/3/2019 Or 2 Rokovi Do2007

    55/64

    brojac1=brojac2=0;for ( j =0; j sarajevo[j ] . u13 | | sarajevo[j ] . u9>sarajevo[j ] . u16

    | | sarajevo[j ] . u9>sarajevo[j ] . u20)brojac1++;

    /* Temperat ura u 13 sati nij e naj veca * /if ( sarajevo[j ] . u13

  • 8/3/2019 Or 2 Rokovi Do2007

    56/64

    Prosjecna temperatura u 20 sati: 12.85

    RJEENJE

    #include

    s tru ct mj e renj a {float u9, u13, u16, u20;

    } sarajevo[731] ;

    int main( ) {FILE * ulaz , * izlaz ;int i=0, j , k, brojac1, brojac2;

    ulaz=fopen(" mjerenja- saraj evo. txt", "r" ) ;

    if ( ulaz==NULL) {printf ( "Greska kod o tvaranja datoteke mjerenja-sarajevo. txt . \n") ;return 1;

    }

    /* NAPOMENA: prilikom testiranja mozete staviti %f%f%f%f */while ( f scanf(ulaz , " %5. 1f %5. 1f %5. 1f %5. 1f\n" , &sarajevo[i] . u9,

    &saraj evo[i] . u13, &saraj evo[i] . u16, &sarajevo[i] . u20)==4) i++;

    fclose(ulaz);

    /* Ispis na ekran * /

    print f ( " I z dat ot eke s u ucit ani pod aci za %d dana. \n" , i) ;float prosjek9, prosjek13, prosjek16, prosjek20;prosjek9=prosjek13=prosjek16=prosjek20=0;for ( j =0; j

  • 8/3/2019 Or 2 Rokovi Do2007

    57/64

    }}

    }for ( j =0; j

  • 8/3/2019 Or 2 Rokovi Do2007

    58/64

    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 o tvaranja 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) {/* Pr ovjera ponavljanja * /for ( j =0; j max_id_studenta)

    max_id_studenta=ispiti[i] . id_studenta;i++;

    }

    fclose(ulaz);

    /* Izracunavanje statistike */

    for ( j =0; j

  • 8/3/2019 Or 2 Rokovi Do2007

    59/64

    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 svakiuneseni predmet i upisati u datoteku prosjeci.txt u obliku: id_predmeta (4 mjesta), prosjek (realanbroj, 4 mjesta prije zareza, 4 mjesta poslije). Ukoliko se u datoteci ponavlja isti student i istipredmet, program treba na ekranu ispisati podatke koji se ponavljaju i nastaviti s radom, neuzimajui u obzir ponovljeni podatak.Primjer sadraja 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) !

    RJEENJE:

    #include

    s tru ct 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] ;/* Post o moze bit i maksimalno 100 ispit a, broj pr ed meta j e t akod j e 100 * /

    ulaz=fopen(" ispiti. txt", "r" ) ;if ( ulaz==NULL) {

    printf ( "Greska kod o tvaranja 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

  • 8/3/2019 Or 2 Rokovi Do2007

    60/64

    &ispiti[i] . id_predmeta, &ispiti[i] . bodovi)==3) {/* Pr ovjera ponavljanja * /for ( j =0; j max_id_predmeta)

    max_id_predmeta=ispiti[i] . id_predmeta;i++;

    }

    fclose(ulaz);

    /* Izracunavanje prosjeka */

    for ( j = 0; j < 100; j + +) pr os j eci[ j ] = 0;/* Pet lj a pr ed meta * /for ( j =1; j

  • 8/3/2019 Or 2 Rokovi Do2007

    61/64

    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, in t vel) {int suma, i;

    Skinuto sa www.etf.ba

    Nastavak na iducoj stranici >>>

  • 8/3/2019 Or 2 Rokovi Do2007

    62/64

    if ( vel==0) ret urn 0; /* I zbj egavamo dij elj enj e s nulom * /

    suma = 0;for ( i=0; i0) {

    brc++;broj/=10;

    }

    suma += br c;}

    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 sesastoji od velikih i malih slova, dakle ukoliko se unutar rijei nalazi neki znak koji nije slovo, upitanju su dvije rijei.

    Npr. rije: Auto-cesta trebate tretirati kao dvije rijei duine 4 i 5 slova.

    Rjeenje:

    int r ijeci_duzine(char* r ecenica, in t n ) {int rezultat=0;char * p = recenica;int brojac=0;

    /* Glavna pet lj a * /while ( *p ! = ' \0' ) {

    if ( ( *p>=' A' && * p=' a' && * p

  • 8/3/2019 Or 2 Rokovi Do2007

    63/64

    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.8

    3.2 9.6 9.0 5.5 5.5

    7.9 8.5 9.8 4.9 8.7Ova 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 sortirano-peking2008.txt. Osim ovoga, treba odrediti prva tri mjesta iz svake od disciplina i ispisati naekranu broj bodova (radi jednostavnosti zadatka, nije dato ime i prezime takmiara).Primjer ispisa na ekranu:

    Prva tri mj est a iz discipline parter: 10, 10, 9. 9Prva tri mj esta iz discipline konj : 9. 8 , 9. 7 , 9. 7. . .

    Rjeenje:

    #include

    struct b odovi {float parter , kon j , pr eskok, r azboj , 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 o tvaranja 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 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;

    }}

    print f ( " Prva t ri mj e st a iz dis cipline part er : %3. 1f, %3. 1f, %3. 1f\n ", max1, max2 , max3) ;

    max1=max2=max3=0;

    Skinuto sa www.etf.ba

  • 8/3/2019 Or 2 Rokovi Do2007

    64/64

    for ( j =0; j 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 ;}

    }print f ( " Prva t ri mj e st a iz dis cipline konj : %3. 1f, %3. 1f, %3. 1f\n ", max1,

    max2, max3) ;

    /* . . . . it d. necemo ponavlj ati isti kod za ostale discipline * /

    /* Sortiranj e i upis u izlaz * /izlaz=fopen(" sortirano-peking2008. txt", "w") ;if (izlaz==NULL) {

    printf ( "Greska kod o tvaranja datoteke sortirano-peking2008. txt. \n") ;

    return 2;

    }for ( j =0; j