Caricare documenti e articoli online 
INFtub.com è un sito progettato per cercare i documenti in vari tipi di file e il caricamento di articoli online.


 
Non ricordi la password?  ››  Iscriviti gratis
 

Relazione d'Informatica - Programma per la gestione di un archivio Hash di una libreria

informatica



Relazione d'Informatica

Programma per la gestione di un archivio Hash di una libreria


Descrizione del problema: dopo aver richiesto all'utente di inserire i dati d'alcuni libri, questi devono essere memorizzati in un file su disco e successivamente visualizzati. Per la gestione dei dati si utilizza l'indicizzazione hash e non quella 555d39f sequenziale.


Obiettivi da raggiungere: l'obiettivo di questo programma è di creare, diversamente da quanto effettuato fino ad ora, un archivio permanente su disco e non in memoria centrale: in questo modo è possibile modificare le informazioni memorizzate successivamente senza la perdita di dati dovuta alla volatilità della memoria Ram. Inoltre i dati non sono memorizzati sequenzialmente ma attraverso l'indicizzazione effettuata tramite il codice hash.




Specifiche hardware: l'utilizzo del metodo hash per la memorizzazione delle informazioni è molto utile poiché non è più necessario percorrere tutte le informazioni per ricercare il dato desiderato bensì, grazie ad un indice, il dato è immediatamente reperibile. Il file ha la capacità di contenere 30 libri suddivisi in 23 nell'area primaria e 7 nell'area d'overflow. In questo modo possiamo gestire al meglio l'area primaria ma, soprattutto, l'area dei sinonimi.

Infatti la funzione hash consiste nel dividere il codice del libro per 23 (numero primo per cui limita l'apparire dei sinonimi) ed il resto della divisione è utilizzato come indice nel file. La struttura dati è formata da un record composto dal campo codice (integer di 2 bytes che può variare nel nostro caso da 1 a 500) e dal titolo del libro formato da una stringa di 50 caratteri (che occupa 50 bytes per i caratteri ed 1 byte per la lunghezza). Il record occupa totalmente 53 bytes ed il file, essendo di 30 posizioni occupa 1590 bytes.


Tracciato record:

Funzioni utilizzate: il programma è composto da alcune procedure e funzioni oltre al main. La funzione hash fa ritornare l'indice in cui dovrà essere memorizzato il libro (l'indice è dato dal resto della divisione del codice per 23); la procedura carica ha il compito solamente di caricare i dati del libro nella variabile temp2 per essere poi utilizzati successivamente; la funzione test ritorna vera se la posizione puntata dall'indice è vuota (altrimenti bisognerà utilizzare la zona d'overflow).


Limiti del programma: il programma è in grado di gestire al massimo 30 libri ed un minimo di 8 libri:se per esempio viene inserito un libro nell'area primaria ed i 7 libri successivi sono tutti sinonimi (caso molto raro), il file potrà contenere soltanto 8 libri. Il programma non controlla se effettivamente non è più possibile inserire libri ma si limita ad aspettare che l'utente termini l'inserimento dei libri. Questo programma non è in grado di effettuare la cancellazione e la ricerca di un determinato libro: per queste due procedure bisognerebbe mettere un menù alla partenza del programma in modo da favorire l'utente nelle varie procedure.


Listato del programma:


Program libri;

uses crt,dos;

type libro=record

codice:integer;

titolo:string[50];

end;

var archivio:file of libro;

temp2,temp:libro;

risp:char;

i:integer;


function hash(temp2:libro):integer;

begin

hash:=temp2.codice mod 23;

end


procedure carica(var temp2:libro);

begin

with temp2 do

begin

write('Inserisci il codice = ');

readln(codice);

write('Inserisci il titolo = ');

readln titolo);

end;

end;


function test(temp2:libro):boolean;

begin

seek(archivio,hash(temp2));

read(archivio,temp);

if temp.codice=0 then test:=true

else test:=false;

end;


begin

clrscr;

assign(archivio,'c:\libridir.dat');

rewrite(archivio);

with temp do

begin

codice:=0;

titolo:='';

end;

for i:=0 to 29 do

begin

write(archivio,temp);

end;

repeat

carica temp2);

if test(temp2)=true then

begin

seek(archivio,hash(temp2));

write(archivio,temp2);

end

else

begin

i:=23;

repeat

seek(archivio,i

read(archivio,temp);

if temp.codice=0 then

begin

seek(archivio,i);

write(archivio,temp2);

end

else i:=i+1;

until temp.codice=0;

end;

write('Vuoi inserire ancora ?

readln risp);

until (risp='n') or (risp='N');

for i:=0 to 29 do

begin

seek(archivio,i

read(archivio,temp);

writeln(' ');

writeln('Posizione = ',i);

writeln('Codice = ',temp.codice);

writeln('Titolo = ',temp.titolo);

readln;

end;

close(archivio);

end.


Manuale utente: per l'utilizzo del programma l'utente dovrà solamente inserire i dati relativi ai libri. Successivamente il programma effettuerà una stampa di tutti i libri inseriti. L'utente non dovrà eseguire altri comandi ma si limiterà semplicemente a fare questo.


Michele Saldini




Privacy




Articolo informazione


Hits: 1621
Apprezzato: scheda appunto

Commentare questo articolo:

Non sei registrato
Devi essere registrato per commentare

ISCRIVITI



Copiare il codice

nella pagina web del tuo sito.


Copyright InfTub.com 2024