Professional Documents
Culture Documents
5 Brzi Test
5 Brzi Test
Svaki zapis u datoteci ima svoju adresu, izraženu u broju bajtova od početka datoteke. U
slučaju datoteke s fiksnom veličinom zapisa, adresa pojedinog zapisa predstavlja umnožak
rednog broja zapisa i veličine zapisa. Metode za rad s datotečnim pokazivačem (seekg, seekp,
tellg i tellp) omogućuju prekorednu obradu, odnosno, moguće je odrediti poziciju u datoteci
gdje se može izvršiti operacija čitanja/upisa. Kod relativne organizacije datoteke pojedini
zapis možemo pročitati, ako znamo gdje je u datoteci upisan, što se postiže tako da se adresa
pojedinog zapisa izračuna na temelju vrijednosti ključa.
Indeks je pomoćna struktura koja omogućuje pronalaženje adresa pojedinih zapisa u matičnoj
datoteci na temelju vrijednosti ključa. Za svaki zapis u matičnoj datoteci postoji odgovarajući
zapis u indeksu koji sadrži dva podatka:
– vrijednost ključa i
– adresu zapisa u matičnoj datoteci
Jedna matična datoteka može imati više pridruženih indeksa. Sortiranjem indeksa omogućuje
se primjena binarnog pretraživanja (brže od slijednog pretraživanja).
Sličnost: kod obje organizacije datoteke, ne treba se čitati zapis po zapis da bi se došlo do
željenog zapisa, već kod relativne organizacije adresu zapisa dobivamo i na nju se
pozicioniramo metodama seekg, seekp, tellg i tellp, te se na pojedini zapisa pozicioniramo na
način da pomnožimo redni broj zapisa sa veličinom pojedinog zapisa, a kod indeksne
organizacije, direktno uzimamo adresu zapisa koja se nalazi pored njegovog ključa, npr.
matičnog broja.
Razlike: Moguće je brže pretraživanje indeksno organiziranih datoteka u odnosu na relativno
organizirane. To je moguće zbog toga što se u datoteci nalaze samo ključevi zapisa i njihove
adrese te se njihovim sortiranjem omogućuje binarno pretraživanje datoteke koje je brže u
odnosu na slijedno pretraživanje koje se koristi kod relativno organiziranih datoteka.
Izračunavanje rednog broja zapisa (RBZ) na temelju vrijednosti ključa (K) i veličine datoteke
(u broju zapisa;VD):
– pronađe se prvi manji prim broj od veličine datoteke (PVD)
– RBZ = K % PVD
– upotreba prim broja reducira broj duplikata (zbog “okruglih” brojeva gdje bi
se neke vrijednosti često pojavljivale)
– ako je zapis na poziciji RBZ “zauzet” (duplikat), tada se traži prva prazna
pozicija u datoteci za upis
5. Čemu služi datoteka s „praznim“ zapisima?
Postupak: G
• utvrditi koliko je zapisa u indeksu (N) ore
• DOLJE=0, GORE=N
• ponavljati dok se ne nađe zapis ili
se ponovi vrijednost POZ:
• POZ=(DOLJE+GORE)/2
• pročitati zapis na poziciji POZ i provjeriti je li traženi Poz
• DA: pročitati zapis iz matične datoteke
• izlaz iz petlje
• ako je traženi zapis veći od pročitanog
• DOLJE=POZ inače
• GORE=POZ
Dolje N
Omogućuje se pretraživanje datoteke po više ključeva. Npr. ako za datoteku robe imamo
jednu indeksnu datoteku sortiranu prema sifri proizvoda i jednu sortiranu prema nazivu
proizvoda, tada možemo uz pomoć jedne od njih pretraživati matičnu datoteku ili po šifri
proizvoda ili po nazivu.
fstream dat;
fstream ind;
dat.open(„roba.dat“, ios::in|ios::binary);
ind.open(„roba.ind“, ios::in|ios::binary);
while(1){
ind.read((char*)&indeks, sizeof(indeks));
if (ind.eof()) break;
if (indeks.sifra==32215){
dat.seekg(indeks.adresa);
dat.read((char*)&roba, sizeof(roba));
cout << „Naziv:“ << roba.naziv << endl;
}
}
ind.close();
dat.close();