You are on page 1of 3

ALGORITMI I STRUKTURE PODATAKA

17. 5. 2006.
A

Napomene:
 Svaki ispravno riješen zadatak donosi 5 bodova.
 U svakom zadatku u kojem se koristi struktura, potrebno ju je definirati
 Nije dopušteno korištenje globalnih, niti statičkih varijabli

1. Zadana je jednostruko povezana lista čiji zapis sadrži šifru artikla (long), naziv artikla
(50+1 znak) i količinu na skladištu(int). Potrebno je napisati funkciju koja će vratiti količinu
zapisanu u predzadnjem elementu liste. Ako je lista prazna funkcija vraća -1. Prototip je:

int kol_predzadnji(cvor *glava)

___________________________________________________________________________

2. Napisati funkciju koja će kao rezultat vratiti popunjenost reda u postotcima (funkcija treba
vratiti realni broj između 0 i 100)

float popunjenost(int ulaz, int izlaz, int velicinaReda)

___________________________________________________________________________

3. Na stog realiziran poljem spremaju se podaci cjelobrojnog tipa (int). Već su napisane
funkcije za skidanje sa stoga i stavljanje na stog. Napisati dodatnu funkciju koja će svim
elementima stoga upisati vrijednost 0. Stog na kraju obavljanja funkcije treba imati jednak
broj elemenata kao i na početku. Ta funkcija stogu smije pristupati samo preko funkcija za rad
sa stogom (ne smije direktno pristupati elementima polja). Prototipi funkcija su:

int stog_nule(int stog[], int n, int *vrh);


int dodaj(int zapis, int stog[], int n, int *vrh);
int skini(int *zapis, int stog[], int *vrh);

___________________________________________________________________________

4. Napisati rekurzivnu funkciju koja će obaviti operaciju cijelobrojnog dijeljenja integera a


sa integerom b koristeći se samo operacijom oduzimanja (-). Prototip je

int podijeli (int a, int b)

5. Zadana je jednostruko povezana lista čiji zapis sadrži šifru artikla (int) i količinu na
skladištu (int). Potrebno je napisati funkciju koja će dodati dva elementa sa podacima iz
argumenta na pocetak liste. Ukoliko je dodavanje uspjelo funkcija vraca 1 a inace 0. Prototip
je:

void dodaj_dva(cvor **glava, int sif1, int kol1, int sif2, int kol2)

//1. Zadatak
struct cv{
long sif;
char naziv[50+1];
int kolArtikla;
struct cv *sljed;
};
typedef struct cv cvor;
int kol_zadnji(cvor *glava){
if (!glava) return -1;
while(glava->sljed->sljed)
glava=glava->sljed;
return glava->sljed->kolArtikla;
}

//2. Zadatak
float omjer(int ulaz, int izlaz, int velicinaReda){
int brElemenata;
if(ulaz >= izlaz) {
brElemenata = ulaz – izlaz;
} else {
brElemenata = velicinaReda – (izlaz – ulaz);
}
return (float)brElemenata/velicinaReda*100;
}

//3. Zadatak
int stog_nule(int stog[], int n, int *vrh){
int brojac=0;
int element;
while (skini(&element, stog, vrh)){
brojac++;
}
while (brojac>=0){
dodaj(0, stog, n, vrh);
brojac--;
}
}

//4. Zadatak
int podijeli (int a, int b)
if (b>a) return 0;
return 1+podijeli(a-b,b);
}

//5. Zadatak
struct cv{
int sif;
int kol;
struct cv *sljed;
};
typedef struct cv cvor;
void dodaj_dva(cvor **glava, int sif1, int kol1, int sif2, int kol2){
cvor *novi1;
cvor *novi2;
if (novi1=(cvor *) malloc(sizeof(cvor))==NULL) return 0;
if (novi2=(cvor *) malloc(sizeof(cvor))==NULL) return 0;
novi1->sif = sif1;
novi1->kol = kol1;
novi1->sljed = novi2;
novi2->sif = sif2;
novi2->kol = kol2;
novi2->sljed = *glava;
*glava = novi1;
return 1;
}

You might also like