Upload
pero-kvrzica
View
212
Download
0
Embed Size (px)
DESCRIPTION
rokovi
Citation preview
7/17/2019 rokovi_20082009
http://slidepdf.com/reader/full/rokovi20082009 1/12
(x1, y1)
(x2, y2)
Programiranje i programsko inženjerstvo1. međuispit
17.10.2008
1. (4 boda) Napisati program kojim se učitavaju cjelobrojne koordinate donjeg lijevog i gornjeg desnog vrhapravokutnika te cjelobrojne koordinate točke T. Pretpostaviti da je korisnik ispravno unio koordinate vrhova
pravokutnika. Odrediti položaj točke T u odnosu na pravokutnik zadan učitanim vrhovima te ispisati samo jednu od sljedećih poruka:
Točka se nalazi na stranici pravokutnika.
Točka se nalazi unutar pravokutnika
Točka se nalazi izvan pravokutnika
2. (4 boda) U cjelobrojnu varijablu bez predznaka učitati pozitivan broj. Ispisati je li broj djeljiv sa svojomnajvećom znamenkom. Pretpostaviti da je korisnik ispravno unio cijeli broj. Primjer.za učitani broj 123 potrebno je ispisati:Broj 123 je djeljiv sa svojom najvecom znamenkom 3
za učitani broj 21 potrebno je ispisati:Broj 21 nije djeljiv sa svojom najvecom znamenkom 2
3. (4 boda) Napisati program koji učitava cijele brojeve koji predstavljaju kalendarske godine. Za svaki učitanibroj provjeriti je li iz intervala <10,3000]. Ako je učitani broj iz zadanog intervala provjeriti je li godina
prijestupna ili nije te ispisati odgovarajuću poruku. U
čitavanje brojeva završiti kad se u
čita negativan broj. Prijestupne godine su godine koje su djeljive s 4 i nisu djeljive sa 100. Kao iznimka opisanom pravilu u
prijestupne godine ubrajaju se one koje su djeljive s 400.
Primjer:za učitani broj 1800 potrebno je ispisati:Godina nije prijestupna.
za učitani broj 1600 potrebno je ispisati:Godina je prijestupna.
za učitane brojeve veće od 3000 ili manje od 11 program ne treba ništa ispisati.
4. (3 boda ) Napisati program kojim se u varijablu tipa int uč itava cijeli broj iz intervala [0-127] (kôd nekogznaka iz ASCII tablice). Ispitati uč itanu vrijednost i ispisati na zaslonu odgovarajuć u poruku: Znak izvan
zadanog intervala, Znamenka:, Malo slovo:, Veliko slovo: , Kontrolni znak. Ako je
uč itan kôd za veliko slovo, iza navedene poruke ispisati isto to slovo ali malo, a ako je uč itan kôd za maloslovo, iza navedene poruke ispisati isto to slovo ali veliko. Ako je uč itan kôd za znamenku iza navedene poruke ispisati znamenku. Ako je uč itan kôd za kontrolni znak ispisati samo navedenu poruku.
Za sve preostale znakove (kao što su na primjer # + , & / i drugi) treba samo ispisati znak bez poruke.
7/17/2019 rokovi_20082009
http://slidepdf.com/reader/full/rokovi20082009 2/12
Rješenja
1. Zadatak
#include <stdio.h>
int main() {
int x1, y1, x2, y2, x3, y3;
printf("Učitajte koordinate donjeg lijevog i gornjeg desnog vrha pravokutnika:\n");scanf("%d %d %d %d", &x1, &y1, &x2, &y2);
printf("Učitajte koordinate točke\n");
scanf("%d %d", &x3, &y3);
if (x3<x1 || x3>x2 || y3<y1 || y3>y2)
printf("Točka se nalazi izvan pravokutnika.");
else if (x3>x1 && x3<x2 && y3>y1 && y3<y2)
printf("Točka se nalazi unutar pravokutnika.");
else
printf("Točka se nalazi na stranici pravokutnika.");
return 0;
}
2. Zadatak
#include <stdio.h>
int main(){
unsigned int br, b, max = 0;
scanf("%d", &br);
b = br;
while (br) {
if ((br % 10) > max) max = br % 10;
br /= 10;
}
if (b % max == 0)
printf ("Broj %d je djeljiv sa svojom najvećom znamenkom %d", b, max);else
printf ("Broj %d NIJE djeljiv sa svojom najvećom znamenkom %d", b, max);
return 0;
}
3. Zadatak
#include <stdio.h>
int main(){
int godina;
scanf("%d", &godina);
while(godina >= 0){if (godina > 10 && godina <= 3000){
if ((godina%4 == 0 && godina%100 != 0) || godina%400 == 0)
printf("Godina je prijestupna.");
else
printf("Godina nije prijestupna");
}
scanf("%d", &godina);
}
return 0;
}
7/17/2019 rokovi_20082009
http://slidepdf.com/reader/full/rokovi20082009 3/12
Drugo rješenje 3.zadatka:
#include <stdio.h>
int main () {
int godina;
do {
scanf("%d", &godina);
if (godina > 10 && godina <= 3000){
if ((godina%4 == 0 && godina%100 != 0) || godina%400 == 0)
printf("Godina je prijestupna.");
else
printf("Godina nije prijestupna");
}
} while (godina>=0);
return 0;
}
4. Zadatak
#include <stdio.h>
int main(){
int i;
scanf("%d", &i);
if (i < 0 || i > 127)
printf("Neispravno zadani znak");
else if (i < 32 || i==127)
printf("Zadan kontrolni znak");
else if (i >= '0' && i <= '9')
printf("Zadana znamenka: %c", i);
else if (i >= 'a' && i <= 'z')
printf("Zadano malo slovo: %c", i - 32);
else if (i >= 'A' && i<= 'Z')
printf("Zadano veliko slovo %c", i + 32);
else
printf("%c", i);
return 0;
}
7/17/2019 rokovi_20082009
http://slidepdf.com/reader/full/rokovi20082009 4/12
Programiranje i programsko inženjerstvo2. međuispit
28.11.2008
1. (6 bodova) Napisati program koji pomoću get s naredbe učitava niz znakova. Možete
pretpostaviti da učitani niz neće imati više od 80 znakova. Ispisati koje se veliko slovo abecedepojavilo najviše puta u učitanom nizu znakova, te ispisati broj pojavljivanja tog slova. Ukoliko suse različita slova pojavila jednak broj puta, ispisati ono slovo koje se nalazi bliže kraju abecede.(Pretpostaviti da će se sigurno pojaviti barem jedno veliko slovo.)
Primjer.za učitani niz: LOTUS 123 j e pr vi Tabl i cni KALKULATORtreba ispisati: Sl ovo T poj avi l o se 3 put a
2. (6 bodova) Napisati funkciju prototipa:
f l oat povr s i na( f l oat a, f l oat b, i nt n) ;
koja vraća aproksimaciju površine područ ja omeđenogparabolom f(x)=x2+3, osi x te pravcima x=a i x=b .Osim parametara a i b funkcija prima i broj koraka n za
izračunavanje površine. Pomo
ću broja koraka n potrebno je izračunati ∆x na x osi. Ukupna površina područ ja
dobije se zbrajanjem površina n pravokutnika sa
stranicama ∆x i f(xi) gdje i=0, …, n-1.
Napisati i glavni program u kojem će se učitati parametria, b i broj koraka n te te u glavnom programu ispisatipovršina zadanog područ ja.
3. (7 bodova) Napisati funkciju skr at i Razl omak koja preko parametara brojnik inazivnik prima razlomak. Funkcija treba skratiti razlomak ukoliko je to moguće. Napisati i
glavni program u kojem će se učitati brojnik i nazivnik, pozvati funkcija skr at i Razl omak te u
glavnom programu ispisati skraćeni brojnik i nazivnik.
4. (6 bodova) Napisati program kojim se učitava dvodimenzionalna matrica cijelih brojevamaksimalnih dimenzija 10 x 15. Pri definiranju dimenzija matrice obavezno koristiti simboličkekonstante. Učitati stvarne dimenzije matrice (broj redaka i broj stupaca), pri čemu postupakučitavanja dimenzija treba ponavljati sve dok se ne učitaju valjane dimenzije. Učitati elemente
matrice. Ukoliko je suma elementa matrice jednaka 0 ispisati: Suma el emenat a mat r i ce j e
0. Inače ispisati koliko elemenata matrice je manje od aritmeti
čke sredine svih elemenatamatrice.
Primjer:
Učitana matrica
1 2 3
4 5 6 Aritmetička sredina je 5 pa program ispisuje:
7 8 9 Br oj el emenat a manj i h od 5. 000000 j e 4
7/17/2019 rokovi_20082009
http://slidepdf.com/reader/full/rokovi20082009 5/12
Rješenja
1. Zadatak#i ncl ude <st di o. h>#def i ne MAXZNAK 80
i nt mai n( ) {char r [ MAXZNAK+1] ;i nt br Vel i ka[ ' Z' - ' A' +1] = {0};i nt i , d, i ndex;
i nt maxVel i koSl ovo = 0;pr i nt f ( "Unesi t e r eceni cu: \ n") ;gets ( r ) ;d = 0;whi l e ( r [d] ){
i f ( r [ d] >= ' A' && r [ d] <= ' Z' ) {i ndex = r [ d] - ' A' ;br Vel i ka[ i ndex]++;
}d++;
}
f or ( i =' Z' ; i >= ' A' ; i - - ){i f ( br Vel i ka[ i - ' A' ] > br Vel i ka[ maxVel i koSl ovo] ) maxVel i koSl ovo = i - ' A' ;
}
pr i nt f ( "Sl ovo %c, poj avi l o se %d put a. \ n",maxVel i koSl ovo + ' A' , br Vel i ka[ maxVel i koSl ovo] ) ;
return 0;}
7/17/2019 rokovi_20082009
http://slidepdf.com/reader/full/rokovi20082009 6/12
2. Zadatak
#i ncl ude <st di o. h>
f l oat povrsi na( f l oat a, f l oat b, i nt n) {f l oat r ez=0, del t aX; i nt i ;
del t aX = ( b- a) / n;
f or ( i =0; i <n; i ++)r ez+= del t aX*( ( a+i *del t aX) *( a+i *del t aX) +3) ;
return rez;}
i nt mai n( ) {f l oat a, b; i nt broj Kor aka;pr i nt f ( "Upi si t e a, b i br oj kor aka: " ) ;
scanf ( "%f %f %d" , &a, &b, &br oj Kor aka) ;
pr i nt f ( "\ nPovr ši na i znosi : %f " , povr si na (a, b, br oj Kor aka) ) ;
return 0;}
3. Zadatak/* u rješenju NIJE bilo potrebno ispitivati jesu li brojnik *//* ili nazivnik negativni brojevi*/
voi d skr at i Razl omak( i nt *broj ni k, i nt *nazi vni k){
i nt maxd, d, i ;i nt br , na;br =( *br oj ni k>0) ?*br oj ni k: - *br oj ni k;na=( *nazi vni k>0) ?*nazi vni k: - *nazi vni k;maxd=br ;
d=1;i f ( br >na){
maxd=na;}for(i=2;i<=maxd;i++) {
i f ( *broj ni k%i ==0 && *nazi vni k%i ==0)d=i ;
}i f ( d>1){
*br oj ni k/ =d;*nazi vni k/ =d;
}
}
i nt mai n( ){
i nt b, n;scanf ( "%d %d" , &b, &n) ;skr at i Razl omak( &b, &n) ;pr i nt f ( " \ n%d %d" ,b ,n ) ;return 0;
}
7/17/2019 rokovi_20082009
http://slidepdf.com/reader/full/rokovi20082009 7/12
Zadatak 4.
#i ncl ude <st di o. h> #def i ne MAXRED 10#def i ne MAXSTUP 15
i nt mai n( ) {
i nt mat [ MAXRED] [ MAXSTUP] ;i nt r , s ;
i nt i , j , k=0, suma=0;f l oat as;
do {pr i nt f ( "Unesi br oj r edaka i br oj st upaca: " ) ;scanf ( "%d %d", &r , &s) ;
}whi l e( r <0 | | s<0 | | r >MAXRED | | s>MAXSTUP) ;
pr i nt f ( "Unesi el ement e mat r i ce: " ) ;
f or ( i =0; i <r ; i ++) {f or ( j =0; j <s; j ++) {
scanf ( "%d" , &mat [ i ] [ j ] ) ;suma=suma+mat [ i ] [ j ] ;}
}
i f ( suma==0) {pr i nt f ( "Suma el ement a mat r i ce j e 0" ) ;
}
el se {as=( f l oat ) suma/ ( r *s) ;
f or ( i =0; i <r ; i ++)f or ( j =0; j <s; j ++)
i f ( mat [ i ] [ j ] <as)k++;
pr i nt f ( "Br oj el emenat a manj i h od %f j e: %d",a s , k ) ;
}
return 0;
7/17/2019 rokovi_20082009
http://slidepdf.com/reader/full/rokovi20082009 8/12
Programiranje i programsko inženjerstvoZavršni ispit
23.01.2009
Napomena za sve zadatke:
Nije dopušteno korištenje goto naredbe, te statičkih i globalnih varijabli.
1. (8 bodova). Napisati funkciju čiji je prototip:void zamijeni (char *nizStari, char *nizNovi);
koja će niz znakova nizStari zadan u formatu "PREZIME, IME" prepisati u niz nizNovi, i to tako
da niz nizNovi bude formata "IME PREZIME". Nije dozvoljeno mijenjanje niza nizStari.
Napisati glavni program u kojem se učitava niz znakova u formatu "PREZIME, IME" (pretpostavite
da će niz biti unesen u tom formatu) te ispisuje u formatu "IME PREZIME".
Primjer: Za učitani niz "ANIC, ANA" potrebno je ispisati "ANA ANIC".
2. (7 bodova)
a) Napisati funkciju statistika_matrice koja za zadanu kvadratnu znakovnu matricu
proizvoljne veličine analizira znakove pohranjene iznad glavne dijagonale. Funkcija vraća broj
znamenki i broj slova.
Npr. za matricu
Funkcija vraća 3 za broj znamenki i 5 za broj slova.
b) U priloženom glavnom programu označeno je mjesto na kojem se treba nalaziti naredba za poziv
funkcije statistika_matrice. Kao rješenje b) dijela zadatka potrebno je napisati poziv
funkcije statistika_matrice (ne treba prepisivati program).
#define MAXM 100
int main() {char mat[MAXM][MAXM] = {{'1', '2', 'Z', '9', 'z'},
{'m', '*', 'a', 'a', '6'},{'0', '0', 'b', 'k', '$'},
{'3', 'H', '0', 'D', '#'},{'p', 'K', 'g', '!', 'D'}};
int broj_znamenki, broj_slova;
***OVDJE DOLAZI POZIV FUNKCIJE statistika_matrice***
printf("Broj znamenki iznad dijagonale je %d, a broj slova je %d",broj_znamenki, broj_slova);
return 0;}
1 2 Z 9 z
m * a a 6
0 0 b k $
3 H 0 D #
p K g ! D
7/17/2019 rokovi_20082009
http://slidepdf.com/reader/full/rokovi20082009 9/12
3. (7 bodova)
a) Napisati funkciju koja će vratiti pseudoslučajni broj u intervalu [-100, 100]. Funkcija treba imati
prototip: int fun1(void);
b) Napisati funkciju koja će testirati ponašanje funkcije iz a) dijela zadatka. Funkciju fun1 treba pozvati
1000 puta te za tako generirane brojeve izračunati aritmetičku sredinu i standardnu devijaciju. Izračunate
vrijednosti vratiti u glavni program. Standardna devijacija računa se po formuli:
∑ , gdje je aritmetička sredina
4. (8 bodova) Studenti procjenjuju kvalitetu nastave iz predmeta odgovaranjem na 20 postavljenih pitanjaocjenama 1 do 5. Studentske procjene spremaju se u neformatiranu datoteku anketa.bin. Jedan zapisneformatirane datoteke anketa.bin sadrži šifru predmeta (int) i 20 ocjena (int).U direktnoj neformatiranoj datoteci predmeti.bin svaki zapis sadrži šifru (long) i naziv predmeta (50+1znak). Redni broj zapisa datoteke predmeti.bin odgovara šifri predmeta. Prazan zapis prepoznaje se po
šifri predmeta 0.
Napišite glavni program u kojem će se učitati šifra predmeta te pomoću podataka iz datotekapredmeti.bin i anketa.bin ispisati tablica učestalosti pojavljivanja pojedinih ocjena za zadani predmet usljedećem formatu(prva dva reda nije potrebno ispisavati i služe za lakše formatiranje ispisa):
2 3 4 5 6 7
1234567890123456789012345678901234567890123456789012345678901234567890
Predmet 1 2 3 4 5
----------------------------------------------------------------
Programiranje i programsko inzenjerstvo xxxx xxxx xxxx xxxx xxxx
Ukoliko je zadana šifra predmeta koja ne postoji u datoteci predmeti.bin ispisati odgovajuću poruku izavršiti s izvođenjem programa.
Nije potrebno provjeravati uspješnost obavljanja operacija nad datotekama.
7/17/2019 rokovi_20082009
http://slidepdf.com/reader/full/rokovi20082009 10/12
Rješenja
1.
void zamijeni (char *nizStari, char *nizNovi) {int duljina;char *p;p = strchr(nizStari, ',');duljina = p - nizStari + 1;
strcpy(nizNovi, nizStari + duljina + 1);strcat(nizNovi, " ");strncat(nizNovi, nizStari, duljina -1);
}
int main() {char nizStari [100], nizNovi [100];gets(nizStari);zamijeni(nizStari, nizNovi);printf("%s %s\n", nizStari, nizNovi);return 0;
}
Rješenje s pomoćnim poljima:
void zamijeni (char *nizStari, char *nizNovi) {char pom1[100], pom2[100];int i = 0, j = 0;
while(nizStari[i] != ',') {pom1[i] = nizStari[i];i++;
}pom1[i] = '\0';
i++;
while(nizStari[i] != '\0') {if (nizStari[i] != ' ') {pom2[j] = nizStari[i];j++;
}i++;
}pom2[j] = '\0';
strcpy(nizNovi, pom2);strcat(nizNovi, " ");strcat(nizNovi, pom1);
}
2.#define MAXN 10
void statistika_matrice(char *matrica, int rang, int max_rang, int* broj_znamenki,int* broj_slova){
int i=0; int j=0; char trenutni_element;*broj_znamenki=0; *broj_slova=0;for(i=0; i<rang; i++){
for(j=0; j<rang; j++){trenutni_element = *(matrica + i*max_rang + j);if(j>i){
if(isdigit(trenutni_element)){
(*broj_znamenki)++;}else if(isalpha(trenutni_element)){
(*broj_slova)++;}
7/17/2019 rokovi_20082009
http://slidepdf.com/reader/full/rokovi20082009 11/12
}}
}}
int main() {char mat[MAXN][MAXN] = {{'1', '2', 'Z', '9', 'z'},
{'m', '*', 'a', 'a', '6'},{'0', '0', 'b', 'k', '$'},
{'3', 'H', '0', 'D', '#'},{'p', 'K', 'g', '!', 'D'}};
int broj_znamenki, broj_slova;statistika_matrice(&mat[0][0], 5, MAXN, &broj_znamenki, &broj_slova);printf("Broj znamenki iznad dijagonale je %d, a broj slova je %d",
broj_znamenki, broj_slova);return 0;
}
3.#include <stdio.h>#include <math.h>
int fun1(void) {
return rand()%201 - 100;}
void fun2(float *as, float *sd) {int i, x;int polje[1000];
*as = *sd = 0;srand(time(NULL));
for (i=0; i<1000; i++) {polje[i] = fun1();*as += polje[i];
}*as /= 1000;
for (i=0; i<1000; i++) {*sd += pow(polje[i] - *as, 2);
}*sd = sqrt(*sd/1000);
}
4.#include <stdio.h>#include <stdlib.h>
int main () {FILE *fPredmet, *fAnketa;int sifPred, i;int ocjena[5] = {0};
struct predmetZapis {long sifPred;char nazPred[50+1];
} predmet;
struct anketaZapis {int sifPred;int ocjena[20];
} anketa;
fAnketa = fopen ("anketa.bin", "rb");fPredmet = fopen ("predmeti.bin", "rb");
7/17/2019 rokovi_20082009
http://slidepdf.com/reader/full/rokovi20082009 12/12
printf ("Upisite sifru predmeta: ");scanf ("%d", &sifPred);fseek (fPredmet, (long) (sifPred-1) * sizeof (predmet), SEEK_SET);fread(&predmet, sizeof (predmet), 1, fPredmet);
if (sifPred != predmet.sifPred) {printf ("Ne postoji predmet: %d \n", sifPred);exit(3);
}
while (fread(&anketa, sizeof (anketa), 1, fAnketa) == 1){if (anketa.sifPred == sifPred)
for (i=0; i<20;i++)ocjena[anketa.ocjena[i]-1]++;
}
printf ("Predmet 1 2 3 4 5 \n");printf ("----------------------------------------------------------------\n" ); printf ("%50s %4d %4d %4d %4d %4d \n", predmet.nazPred, ocjena[0], ocjena[1]
, ocjena[2], ocjena[3], ocjena[4]);
fclose(fAnketa);
fclose(fPredmet);
return 0;}