You are on page 1of 4

Zadaci za vježbu na predavanjima za 1.

 blic 
 
ZADACI: 
 
Datoteke – ponavljanje 
Ako je sadržaj formatirane datoteke ʺulazʺ 012012 što će ispisati sljedeći programski 
odječak: 
 
char c; int s=0;
FILE *in = fopen ("ulaz", "r");
while (fscanf(in, "%c", &c)) {
s+=c-'1';
}
printf("%d\n", s);
 
Pokazivači – ponavljanje 
Ukoliko funkcija f treba izračunati sumu svih elemenata u matrici koju naredbu treba 
umetnuti na mjesto označeno s ??? i zašto ? 
 
int f(int *p, int m, int n, int maxstup){
int i,j,suma=0;
for(i=0; i<m ; i++){
for(j=0; j<n; j++){
suma += *p;
p++;
}
???
}
return suma;
}
 
Alociranje memorijskog prostora 
Napisati program koji s tipkovnice učitava znakovni niz maksimalne dužina 80 
karaktera, sve dok se ne unese neki specijalni znak (<ENTER>, <ESC>, <BS>..).  
Znakovi se spremaju u memoriju koja se dinamički alocira prilikom unošenja 
znakova. Na kraju je potrebno ispisati uneseni niz znakova. 
 
Složenost 
Koliko je asimptotsko vrijeme izvođenja, te vremena izvođenja po notaciji  O, Ω i Θ   
funkcije koja sortira cjelobrojno polje sljedećim algoritmom? 
 
void sort(int * polje, int brojelem){
int i, j, minindex, pom;
for (i=0;i<brojelem-1; i++){
minindex=i;
for (j=i+1;j<brojelem; j++){
if (polje[j]<polje[minindex]) minindex=j;
}
if (i!=minindex){
pom=polje[i];
polje[i]=polje[minindex];
polje[minindex]=pom;
}
}
}
 
Tehnike adresiranja 
U datoteku organiziranu po načelu raspršenog adresiranja pohranjuju se zapisi koji 
sadrže šifru iz intervala [100000, 500000] i naziv (19 +1 znak). Fizički blok na disku je 
veličine 512 okteta. Broj zapisa koje treba pohraniti je 10000, a kao metoda 
transformacije ključa uzima se metoda dijeljenja s prim. brojem približno jednakim 
broju pretinaca u kojem je ostatak dijeljenja adresa pretinca. Broj pretinaca je zbog 
očekivanog preljeva veći za 30%. Izračunajte broj pretinaca, gustoću pakiranja, max. 
broj zapisa po pretincu, te adresu pretinca u koji će se smjestiti zapis s ključem 
220000. 
 
Pozivi funkcije, stack 
Koliko je elemenata dodano na sistemski stog prilikom poziva i izvršavanja funkcije 
funkc (okvir stoga ne treba uzeti u obzir): 
 
int funkc (int a,int b,int c)
{
int r1,r2;
r1=a+b;
r2=b-c;
return r1/r2;
}
 
Funkcija je pozvana na sljedeći način: 
//poziv
funkc(10,20,30);
 
RJEŠENJA: 
 
Datoteke – ponavljanje 
Ispisat će se 0. 
 
Pokazivači – ponavljanje 
p += maxstup-n;
 
Da bi suma koja se računa na sljedeći način 
suma += *p; ispravno računala potrebno je da p za prvi korak j petlje pokazuje na 
prvi element i‐tog retka. Kako se p u j petlji povećava naredbom p++; potrebno ga je 
za sljedeći korak petlje staviti na novi redak. To znači oduzeti za koliko se povećao, a 
to je za n stupaca, i dodati max. broj stupaca tj.maxstup jer tu počinje sljedeći redak. 
 
Alociranje memorijskog prostora 
int main()
{
char *niz=NULL, znak;
int n=0;
printf("Unesite niz: ");
do{
znak=getch();
niz = (char *) realloc (niz, (n+1) * sizeof(char) );
if (niz == NULL) break;
if ( (znak < 32) || (n > 80) ){
*(niz+n) = 0;
break;
}
*(niz+n++) = znak;
printf("%c", znak);
}while(1);
printf("\nUneseni niz je: %s\n", niz);
return 0;
}
 
Složenost 
Npr. za brojelem = 5, 
za 1. korak vanjske petlje (i=0), nutarnja pelja se izvrti 4 puta, tj (brojelem ‐1) puta 
za 2. korak vanjske petlje (i=1), nutarnja pelja se izvrti 3 puta, tj (brojelem ‐2) puta 
za 3. korak vanjske petlje (i=2), nutarnja pelja se izvrti 2 puta, tj (brojelem ‐3) puta 
za 4. korak vanjske petlje (i=3), nutarnja pelja se izvrti 2 puta, tj (brojelem ‐4) puta 
 
Ukupni broj koraka = (brojelem ‐1)+ (brojelem ‐2)+ (brojelem ‐3)+ (brojelem ‐4)=4+3+2+1 
Kada brojelem teži u beskonačno onda je to suma 1+2+3+..+ brojelem ‐1. Ukupan broj 
(brelem − 1) * brelem brelem 2 brelem
koraka je onda  = − .   
2 2 2
brelem 2
Iz toga prozlazi da je asimptotsko vrijeme izvođenja  , vrijeme izvođenja je 
2
( ) ( ) ( )
Ο brelem 2 , donja granica je  Ω brelem 2  pa je prema tome i  Θ brelem 2 . 
 
Tehnike adresiranja 
‐veličina pretinca=512/24=21,33, pretinac će sadržavati max. 21 zapis 
‐broj pretinaca=(10000/21)*1,3~620 pretinaca 
 
‐prim. broj manji od 620 je 619 
‐gustoća pakiranja=10000/(619*21) = 0,769 
‐adrese pretinaca su iz intervala [0, 618] 
‐zapis s ključem 220000 će se smjestiti u pretinac s adresom 335 
220000 % 619=335 
 
Pozivi funkcije, stack 
Na sistemski stog je dodano 6 elemenata 
 

You might also like