You are on page 1of 22

PROGRAMIRANJE II

A12 – Stabla (2. dio)

dr Dražen Brđanin (bdrazen@etfbl.net)


Goran Banjac (goran.banjac@etfbl.net)
Danijela Banjac (danijela.banjac@etfbl.net)
Aleksandar Keleč (aleksandar.kelec@etfbl.net)

2016.
A12 STABLA BINARNOG PRETRAŽIVANJA
Napisati program u kojem treba:
• definisati tip CVOR kojim se reprezentuje čvor stabla binarnog pretraživanja
(informacioni sadržaj treba da bude cijeli broj),
• definisati funkciju koja dodaje novi čvor u stablo,
• definisati funkciju koja omogućava pretraživanje stabla,
• definisati funkciju koja pronalazi najmanji čvor u stablu,
• definisati funkciju koja pronalazi najveći čvor u stablu,
• definisati funkciju koja briše zadati čvor iz stabla,
• definisati funkciju koja briše stablo,
• definisati funkciju koja ispisuje sadržaj stabla u preorder redoslijedu obilaska,
• definisati funkciju koja ispisuje sadržaj stabla u inorder redoslijedu obilaska,
• definisati funkciju koja ispisuje sadržaj stabla u postorder redoslijedu obilaska,
• u glavnom programu ilustrovati rad sa stablom binarnog pretraživanja tj. definisanim
funkcijama.

Stabla (1. dio) 2


A12 STABLA BINARNOG PRETRAŽIVANJA
#include <stdio.h>
#include <stdlib.h>

typedef struct cvor { int info; struct cvor *lijevi, *desni; } CVOR;

// formiranje novog cvora - pomocna funkcija void brisi_stablo(CVOR *korijen)


CVOR* novi_cvor(int info) {
{ if (korijen != 0)
CVOR *novi = (CVOR*)malloc(sizeof(CVOR)); {
novi->lijevi = novi->desni = 0; brisi_stablo(korijen->lijevi);
novi->info = info; brisi_stablo(korijen->desni);
return novi; free(korijen);
} }
}
CVOR* dodaj_cvor(CVOR *korijen, int info)
{
if (korijen == 0)
return novi_cvor(info);
if (info < korijen->info)
korijen->lijevi = dodaj_cvor(korijen->lijevi, info);
else if (info > korijen->info)
korijen->desni = dodaj_cvor(korijen->desni, info);
return korijen;
}

Stabla (1. dio) 3


A12 STABLA BINARNOG PRETRAŽIVANJA
CVOR* trazi(CVOR *korijen, int info) void pisi_preorder(CVOR *korijen)
{ {
if (korijen == 0 || info == korijen->info) if (korijen != 0) {
return korijen; printf(" %d", korijen->info);
else if (info < korijen->info) pisi_preorder(korijen->lijevi);
return trazi(korijen->lijevi, info); pisi_preorder(korijen->desni);
else }
return trazi(korijen->desni, info); }
}
void pisi_inorder(CVOR *korijen)
{
if (korijen != 0) {
CVOR* trazi_najmanji(CVOR *korijen)
{ pisi_inorder(korijen->lijevi);
while (korijen->lijevi != 0) printf(" %d", korijen->info);
pisi_inorder(korijen->desni);
korijen = korijen->lijevi;
return korijen; }
} }
void pisi_postorder(CVOR *korijen)
{
CVOR* trazi_najveci(CVOR *korijen) if (korijen != 0) {
{ pisi_postorder(korijen->lijevi);
while (korijen->desni != 0) pisi_postorder(korijen->desni);
korijen = korijen->desni; printf(" %d", korijen->info);
return korijen; }
} }
Stabla (1. dio) 4
A12 STABLA BINARNOG PRETRAŽIVANJA
CVOR* brisi_cvor(CVOR *korijen, int info) {
if (korijen == 0) return 0;
else if (info < korijen->info)
korijen->lijevi = brisi_cvor(korijen->lijevi, info);
else if (info > korijen->info)
korijen->desni = brisi_cvor(korijen->desni, info);
else if (korijen->lijevi == 0)
{
CVOR *p = korijen->desni;
free(korijen);
return p;
}
else if (korijen->desni == 0)
{
CVOR *p = korijen->lijevi;
free(korijen);
return p;
}
else {
CVOR *p = trazi_najveci(korijen->lijevi);
korijen->info = p->info;
korijen->lijevi = brisi_cvor(korijen->lijevi, korijen->info);
}
return korijen;
}
Stabla (1. dio) 5
A12 STABLA BINARNOG PRETRAŽIVANJA
int main()
{
CVOR *korijen = 0;
int br, i;
int niz[] = { 50, 30, 40, 20, 10, 70, 60, 80, 90 };
for (i = 0; i < 9; i++)
korijen = dodaj_cvor(korijen, niz[i]);

printf("Preorder:"); pisi_preorder(korijen);
printf("\nInorder:"); pisi_inorder(korijen);
printf("\nPostorder:"); pisi_postorder(korijen);

printf("\nUnesite broj za pretragu: ");


scanf("%d", &br);
printf("Broj %d %spostoji u stablu.\n", br, trazi(korijen, br) ? "" : "ne ");
Preorder: 50 30 20 10 40 70 60 80 90
printf("Unesite broj za brisanje: ");
scanf("%d", &br); Inorder: 10 20 30 40 50 60 70 80 90
Postorder:
korijen = brisi_cvor(korijen, br); 10 20 40 30 60 90 80 70 50
Unesite broj za pretragu: 20
printf("Inorder (nakon brisanja):");
pisi_inorder(korijen); Broj 20 postoji u stablu.
Unesite broj za brisanje: 30
brisi_stablo(korijen); Inorder (nakon brisanja): 10 20 40 50 60 70 80 90
return 0;
}
Stabla (1. dio) 6
A12 STABLA BINARNOG PRETRAŽIVANJA
Napisati program u kojem treba sortirati (u neopadajućem redoslijedu) niz cijelih brojeva
pomoću stabla binarnog pretraživanja.
#include <stdio.h>
#include <stdlib.h>

typedef struct cvor { int info; struct cvor *lijevi, *desni; } CVOR;

// formiranje novog cvora - pomocna funkcija void brisi_stablo(CVOR *korijen) {


CVOR* novi_cvor(int info) { if (korijen != 0) {
CVOR *novi = (CVOR*)malloc(sizeof(CVOR)); brisi_stablo(korijen->lijevi);
novi->lijevi = novi->desni = 0; brisi_stablo(korijen->desni);
novi->info = info; free(korijen);
return novi; }
} }

CVOR* dodaj_cvor(CVOR *korijen, int info) {


if (korijen == 0) return novi_cvor(info);
if (info <= korijen->info)
korijen->lijevi = dodaj_cvor(korijen->lijevi, info);
else
korijen->desni = dodaj_cvor(korijen->desni, info);
return korijen;
}

Stabla (1. dio) 7


A12 STABLA BINARNOG PRETRAŽIVANJA
int obidji_stablo(CVOR *korijen, int *niz) {
if (korijen == 0) return 0;
int l = obidji_stablo(korijen->lijevi, niz);
niz[l] = korijen->info;
int d = obidji_stablo(korijen->desni, niz + l + 1);
return l + 1 + d;
}

void sortiraj(int *niz, int n) {


CVOR *korijen = 0;
for (int i = 0; i < n; i++)
korijen = dodaj_cvor(korijen, niz[i]);
obidji_stablo(korijen, niz);
brisi_stablo(korijen);
}

int main() {
int niz[] = { 50, 30, 40, 20, 10, 50, 70, 60, 80, 90 },
n = sizeof(niz) / sizeof(int);
sortiraj(niz, n);
printf("Sortirano:");
for (int i = 0; i < n; i++)
printf(" %d", niz[i]); Sortirano: 10 20 30 40 50 50 60 70 80 90
return 0;
}
Stabla (1. dio) 8
A12 STABLA BINARNOG PRETRAŽIVANJA
Napisati program u kojem treba:
• definisati tip ARTIKAL kojim se reprezentuje artikal čiji su atributi: šifra (cijeli broj u
opsegu 00000-99999, koji se uvijek ispisuje kao 5-cifreni podatak), naziv, količina i
cijena,
• definisati tip CVOR kojim se reprezentuje čvor stabla binarnog pretraživanja,
• definisati funkciju koja dodaje podatke o novom artiklu u stablo tako da je kriterijum pri
dodavanju novog čvora u stablo šifra artikla,
• definisati funkciju koja omogućava pretraživanje stabla po šifri artikla,
• definisati funkciju koja formatirano ispisuje podatke o svim artiklima,
• definisati funkciju koja omogućava brisanje podataka o artiklu po šifri,
• definisati funkciju koja briše stablo,
• definisati funkciju koja omogućava učitavanje podataka o artiklu,
• u glavnom programu prikazivati meni prema kojem korisnik može da vrši:
 dodavanje podataka o novom artiklu,
 ažuriranje podataka,
 brisanje podataka,
 prikaz podataka o svim artiklima,
 pretraživanje podataka po šifri.

Stabla (1. dio) 9


A12 STABLA BINARNOG PRETRAŽIVANJA
#include <stdio.h>
#include <stdlib.h>

typedef struct { int sifra; char naziv[21]; double kol, cijena; } ARTIKAL;
typedef struct cvor {ARTIKAL art; struct cvor *lijevi, *desni; } CVOR;
static int rb;

// formiranje novog cvora - pomocna funkcija void brisi_stablo(CVOR *korijen) {


CVOR* novi_cvor(ARTIKAL *art) { if (korijen != 0) {
CVOR *novi = (CVOR*)malloc(sizeof(CVOR)); brisi_stablo(korijen->lijevi);
novi->lijevi = novi->desni = 0; brisi_stablo(korijen->desni);
novi->art = *art; free(korijen); }
return novi; }
}
CVOR* dodaj_cvor(CVOR *korijen, ARTIKAL *art) { void citaj(ARTIKAL *art) {
if (korijen == 0) return novi_cvor(art); printf(" Sifra: ");
if (art->sifra == korijen->art.sifra) scanf("%d", &art->sifra);
korijen->art = *art; printf(" Naziv: ");
else if (art->sifra < korijen->art.sifra) scanf("%s", art->naziv);
korijen->lijevi = dodaj_cvor(korijen->lijevi, art); printf(" Kolicina: ");
else scanf("%lf", &art->kol);
korijen->desni = dodaj_cvor(korijen->desni, art); printf(" Cijena: ");
return korijen; scanf("%lf", &art->cijena);
} }

Stabla (1. dio) 10


A12 STABLA BINARNOG PRETRAŽIVANJA
CVOR* trazi(CVOR *korijen, int sifra) {
if (korijen == 0 || sifra == korijen->art.sifra) return korijen;
else if (sifra < korijen->art.sifra)
return trazi(korijen->lijevi, sifra);
else
return trazi(korijen->desni, sifra);
}

void pisi_inorder(CVOR *korijen) {


if (korijen != 0) {
pisi_inorder(korijen->lijevi);
printf("%2d. %05d %-20s %6.2lf %6.2lf %6.2lf\n", rb++,
korijen->art.sifra, korijen->art.naziv, korijen->art.kol, korijen->art.cijena,

korijen->art.kol*korijen->art.cijena);
pisi_inorder(korijen->desni);
}
}

void pisi(CVOR *korijen) {


printf("--- ----- -------------------- ------ ------ ------\n");
printf("RB. SIFRA NAZIV KOL. CIJENA UKUPNO\n");
printf("--- ----- -------------------- ------ ------ ------\n");
rb = 1;
pisi_inorder(korijen);
}
Stabla (1. dio) 11
A12 STABLA BINARNOG PRETRAŽIVANJA
CVOR* brisi_cvor(CVOR *korijen, int sifra) {
if (korijen == 0) return 0;
else if (sifra < korijen->art.sifra)
korijen->lijevi = brisi_cvor(korijen->lijevi, sifra);
else if (sifra > korijen->art.sifra)
korijen->desni = brisi_cvor(korijen->desni, sifra);
else if (korijen->lijevi == 0)
{
CVOR *p = korijen->desni;
free(korijen); // pomocna funkcija
return p; CVOR* trazi_najveci(CVOR *korijen)
} {
else if (korijen->desni == 0) while (korijen->desni != 0)
{ korijen = korijen->desni;
CVOR *p = korijen->lijevi; return korijen;
free(korijen); }
return p;
}
else {
CVOR *p = trazi_najveci(korijen->lijevi);
korijen->art = p->art;
korijen->lijevi = brisi_cvor(korijen->lijevi, korijen->art.sifra);
}
return korijen;
}
Stabla (1. dio) 12
A12 STABLA BINARNOG PRETRAŽIVANJA
int main() {
CVOR *korijen = 0; char c; int sifra; ARTIKAL art;
do {
printf("======================================================================\n");
printf("Dodavanje/azur. [D], brisanje [B], prikaz [P], pretr. [T], kraj [0]? ");
scanf("\n%c", &c);
if (c == 'D') {
printf(" Unesite podatke:\n"); citaj(&art);
korijen = dodaj_cvor(korijen, &art);
}
else if (c == 'B') {
printf(" Sifra: "); scanf("%d", &sifra);
korijen = brisi_cvor(korijen, sifra);
}
else if (c == 'P') pisi(korijen);
else if (c == 'T') {
printf(" Sifra: "); scanf("%d", &sifra);
CVOR *p = trazi(korijen, sifra);
if (p) printf(" Artikal %s ima cijenu %.2lf.\n", p->art.naziv, p->art.cijena);
else printf(" Nema podataka o artiklu sa sifrom %d.\n", sifra);
}
else if (c != '0') printf(" Nepoznata opcija - '%c'.\n", c);
} while (c != '0');
brisi_stablo(korijen); printf("KRAJ!\n"); return 0;
}
Stabla (1. dio) 13
A12 STABLA BINARNOG PRETRAŽIVANJA
Napisati program u kojem treba pročitati sadržaj datoteke čiji je naziv prvi argument
komandne linije, a zatim ispisati broj pojavljivanja svake riječi u datoj datoteci. Riječ je
jedno ili više uzastopnih slova, a od drugih riječi je odvojena znakom koji nije slovo.
Prilikom brojanja pojavljivanja riječi, ignorisati razliku između velikih i malih slova.
#include <stdio.h> void brisi_stablo(CVOR *korijen) {
#include <stdlib.h> if (korijen != 0) {
#include <string.h> brisi_stablo(korijen->lijevi);
#include <ctype.h> brisi_stablo(korijen->desni);
#define MAX 1024 free(korijen);
}
typedef struct cvor { }
char rijec[MAX]; int brojac;
struct cvor *lijevi; struct cvor *desni; void pisi_inorder(CVOR *korijen) {
} CVOR; if (korijen != 0) {
pisi_inorder(korijen->lijevi);
// formiranje novog cvora - pomocna funkcija printf("%s: %d\n",
CVOR* novi_cvor(char *rijec) { korijen->rijec,
CVOR* novi = (CVOR *)malloc(sizeof(CVOR)); korijen->brojac);
novi->lijevi = novi->desni = 0; pisi_inorder(korijen->desni);
strcpy(novi->rijec, rijec); }
novi->brojac = 1; }
return novi;
}

Stabla (2. dio) 14


A12 STABLA BINARNOG PRETRAŽIVANJA
CVOR* dodaj_cvor(CVOR *korijen, char *rijec) { D:\>rijeci.exe lorem.txt
if (korijen == 0)
ad: 4
return novi_cvor(rijec);
if (strcmp(rijec, korijen->rijec) < 0) albucius: 1
korijen->lijevi = dodaj_cvor(korijen->lijevi, rijec);alterum: 1
else if (strcmp(rijec, korijen->rijec) > 0) amet: 1
korijen->desni = dodaj_cvor(korijen->desni, rijec); an: 2
else antiopam: 1
korijen->brojac++; at: 1
return korijen; int main(int argc, char **argv)
audire: 1
} {
int procitaj(FILE *dat, char *rijec) { CVOR *korijen.= .0;.
int i = 0; FILE *dat; lorem: 1
char c; mea: 1
char rijec[MAX];
while (i < MAX - 1 && mediocritatem:
if (argc < 2) 1
return printf("Greska."), 1;
(c = fgetc(dat)) != EOF) if (dat = fopen(argv[1],
mei: 1 "r"))
{ { . . .
if (isalpha(c)) while (procitaj(dat, rijec) != EOF)
vim: 3
rijec[i++] = tolower(c); korijen = dodaj_cvor(korijen, rijec);
else if (i > 0) vis: 1
fclose(dat);
break; vix: 1
pisi_inorder(korijen);
} vocibus: 2
brisi_stablo(korijen);
rijec[i] = '\0'; } volutpat: 1
return i > 0 ? 0 : EOF; return 0; wisi: 1
} }
Stabla (2. dio) 15
A12 STABLA BINARNOG PRETRAŽIVANJA
Napisati program u kojem treba sa standardnog ulaza učitati podatke (indeks, prezime, ime
i prosjek) za n studenata i upisati ih binarno u datoteku čiji je naziv prvi argument
komandne linije. Pored toga, potrebno je kreirati i održavati look-up tabelu (binarno stablo
pretraživanja), koju, na kraju, treba binarno upisati u datoteku čiji je naziv drugi argument
komandne linije.
#include <stdio.h> CVOR* novi_cvor(INDEKS *ind) {
#include <stdlib.h> CVOR *novi = (CVOR*)malloc(sizeof(CVOR));
#include <string.h> novi->lijevi = novi->desni = 0; novi->ind= *ind;
typedef struct { return novi;
char br_ind[8], }
ime[21], CVOR* dodaj_cvor(CVOR *korijen, INDEKS *ind) {
prezime[21]; if (korijen == 0) return novi_cvor(ind);
double prosjek; if (strcmp(ind->kljuc, korijen->ind.kljuc) < 0)
} STUDENT; korijen->lijevi = dodaj_cvor(korijen->lijevi, ind);
typedef struct { else if (strcmp(ind->kljuc, korijen->ind.kljuc) > 0)
char kljuc[8]; korijen->desni = dodaj_cvor(korijen->desni, ind);
int adresa; return korijen;
} INDEKS; }
typedef struct cvor { void brisi_stablo(CVOR* korijen) {
INDEKS ind; if (korijen != 0)
struct cvor *lijevi, { brisi_stablo(korijen->lijevi);
*desni; brisi_stablo(korijen->desni); free(korijen); }
} CVOR; }

Stabla (2. dio) 16


A12 STABLA BINARNOG PRETRAŽIVANJA
void citaj_studenta(STUDENT *st) {
printf(" Indeks: "); scanf("%s", st->br_ind);
printf(" Prezime: "); scanf("%s", st->prezime);
printf(" Ime: "); scanf("%s", st->ime);
printf(" Prosjek: "); scanf("%lf", &st->prosjek);
}

CVOR* upisi_studenta_u_fajl(STUDENT st, CVOR *korijen, FILE *dat) {


INDEKS indeks = { "", ftell(dat) };
strcpy(indeks.kljuc, st.br_ind);
korijen = dodaj_cvor(korijen, &indeks);
fwrite(&st, sizeof(STUDENT), 1, dat);
return korijen;
}

void upisi_indekse_u_fajl(CVOR *korijen, FILE *dat) {


if (korijen != 0) {
fwrite(&korijen->ind, sizeof(INDEKS), 1, dat);
upisi_indekse_u_fajl(korijen->lijevi, dat);
upisi_indekse_u_fajl(korijen->desni, dat);
}
}

Stabla (2. dio) 17


A12 STABLA BINARNOG PRETRAŽIVANJA
int main(int argc, char *argv[])
{
int i, n;
CVOR *korijen = 0;
FILE *dat;
STUDENT st;
if (argc < 3)
return printf("Greska. Nisu navedeni svi argumenti."), 1;
do printf("n="), scanf("%d", &n); while (n < 1);
if (dat = fopen(argv[1], D:\>studenti_unos.exe
"wb")) { studenti.dat indeksi.dat
for (i = 1; i <= n; i++) {
n=4
printf("Podaci o %d. studentu:\n", i);
citaj_studenta(&st); Podaci o 1. studentu:
Indeks: 1101/14
korijen = upisi_studenta_u_fajl(st, korijen, dat);
} Prezime: Markovic
fclose(dat); Ime: Marko
} Prosjek: 8.75
if (dat = fopen(argv[2], "wb"))
. .{ .
upisi_indekse_u_fajl(korijen, dat);
Podaci o 4. studentu:
fclose(dat);
} Indeks: 1102/14
brisi_stablo(korijen); Prezime: Aleksic
return 0; Ime: Aleksandra
} Prosjek: 8.8

Stabla (2. dio) 18


A12 STABLA BINARNOG PRETRAŽIVANJA
Napisati program u kojem treba u datoteci, koja je kreirana u prethodnom zadatku
(studenti.dat), pronaći podatke o studentu čiji se broj indeksa unosi sa standardnog ulaza,
korištenjem odgovarajuće look-up tabele kreirane, takođe, u prethodnom zadatku, te
ispisati podatke o studentu na standardni izlaz.
#include <stdio.h> CVOR* novi_cvor(INDEKS *ind) {
#include <stdlib.h> CVOR *novi = (CVOR*)malloc(sizeof(CVOR));
#include <string.h> novi->lijevi = novi->desni = 0; novi->ind= *ind;
typedef struct { return novi;
char br_ind[8], }
ime[21], CVOR* dodaj_cvor(CVOR *korijen, INDEKS *ind) {
prezime[21]; if (korijen == 0) return novi_cvor(ind);
double prosjek; if (strcmp(ind->kljuc, korijen->ind.kljuc) < 0)
} STUDENT; korijen->lijevi = dodaj_cvor(korijen->lijevi, ind);
typedef struct { else if (strcmp(ind->kljuc, korijen->ind.kljuc) > 0)
char kljuc[8]; korijen->desni = dodaj_cvor(korijen->desni, ind);
int adresa; return korijen;
} INDEKS; }
typedef struct cvor { void brisi_stablo(CVOR* korijen) {
INDEKS ind; if (korijen != 0)
struct cvor *lijevi, { brisi_stablo(korijen->lijevi);
*desni; brisi_stablo(korijen->desni); free(korijen); }
} CVOR; }

Stabla (2. dio) 19


A12 STABLA BINARNOG PRETRAŽIVANJA
CVOR* trazi(CVOR *korijen, char *kljuc) {
if (korijen == 0 || strcmp(kljuc, korijen->ind.kljuc) == 0) return korijen;
else if (strcmp(kljuc, korijen->ind.kljuc) < 0) return trazi(korijen->lijevi, kljuc);
else return trazi(korijen->desni, kljuc);
}
int main(int argc, char *argv[]) {
int i; CVOR *korijen = 0; FILE *dat; STUDENT st; INDEKS indeks; CVOR *rezultat;
if ((dat = fopen("indeksi.dat", "rb"))) {
while (fread(&indeks, sizeof(INDEKS), 1, dat))
korijen = dodaj_cvor(korijen, &indeks);
fclose(dat);
}
printf("Unesite broj indeksa za pretragu: "); scanf("%s", st.br_ind);
if (rezultat = trazi(korijen, st.br_ind)) {
if (dat = fopen("studenti.dat", "rb")) {
fseek(dat, rezultat->ind.adresa, SEEK_SET); //pozicioniranje na pocetak zapisa
if (fread(&st, sizeof(STUDENT), 1, dat))
D:\>studenti_pretraga.exe
printf("Student %s %s (%s) ima prosjek ocjena %.2lf!", st.ime, st.prezime,
Unesitest.prosjek);
st.br_ind, broj indeksa za pretragu: 1102/14
Student Aleksandra Aleksic (1102/14) ima prosjek ocjena 8.80!
fclose(dat);
} D:\>studenti_pretraga.exe
} Unesite broj indeksa za pretragu: 1105/14
else printf("Nema podataka o studentu sa brojem indeksa '%s'!", st.br_ind);
Nema podataka o studentu sa brojem indeksa '1102/14'!
brisi_stablo(korijen); return 0;
}
Stabla (2. dio) 20
A12 ZADACI ZA VJEŽBU
1. Napisati program u programu treba:
• definisati tip CVOR kojim se reprezentuje čvor stabla binarnog pretraživanja, pri
čemu informacioni sadržaj čvora čine dvije riječi (riječ na srpskom jeziku koja
predstavlja ključ, te riječ na engleskom jeziku),
• definisati funkciju koja dodaje novi par riječi u stablo (rječnik),
• definisati funkciju koja omogućava pretraživanje stabla po riječi na srpskom jeziku,
• definisati funkciju koja briše stablo,
• u glavnom programu treba:
 iz datoteke čiji je naziv prvi argument komandne linije pročitati sve parove
riječi (u svakom redu upisan je jedan par riječi) i formirati odgovarajuće stablo
binarnog pretraživanja (rječnik),
 sa standardnog ulaza učitavati riječi na srpskom jeziku, a na standardni izlaz
ispisivati njihov prevod na engleski jezik, dok se ne učita riječ koja nema
prevod.
2. Napisati program koji, na standardni izlaz, (sortirano) ispisuje riječi koje se nalaze i u
datoteci čiji je naziv prvi argument komandne linije i u datoteci čiji je naziv drugi
argument komandne linije.

Stabla (1. dio) 21


A12 ZADACI ZA VJEŽBU
3. Napisati program u kojem treba sa standardnog ulaza učitati podatke za n artikala i
binarno ih upisati u datoteku artikli.dat. Atributi artikla su šifra (cijeli broj u opsegu
00000-99999, koji se uvijek ispisuje kao 5-cifreni podatak), naziv, količina i cijena.
Pored toga, potrebno je kreirati i održavati look-up tabelu (stablo binarnog
pretraživanja), koju, na kraju, treba binarno upisati u datoteku look-up.dat.
4. Napisati program u kojem treba u datoteci artikli.dat, pronaći podatke o artiklu čija se
šifra unosi sa standardnog ulaza, korištenjem odgovarajuće look-up tabele, te ispisati
podatke o artiklu na standardni izlaz.

Stabla (2. dio) 22

You might also like