Newsgroup: it.comp.lang.pascal
Titolo: lettura Record

Salve a tutti....
sono un novello autodidatta nel campo della programmazione pascal ed
ho trovato alcune difficoltà che spero vengano dissolte :o))
Io in questi giorni stò cercando di creare un programma che mi
permetta di archiviare i CD in mio possesso ed ecco che subito nella
procedura di lettura che riporto di seguito mi dà problemi...
procedure Lettura(cod,n:integer);
          var i:integer;
begin
cod:=0;
for i:=1 to n do
    begin
    write('titolo cd: ');readln(cd.titolo);
    write('descrizione cd: ');readln(cd.titolo);
    write('tipo cd(pc/psx/musica): ');readln(cd.titolo);
    cd.codice:=cod+1;writeln('Il codice è: ',cd.codice,);
    end;
end;
Il compilatore dice che nella lettura di cd.titolo manca una parentesi
tonda ma non capisco dove...
Essendo l'archivio composto al massimo di 250 cd , vorrei sapere se
questo metodo di ricerca è efficace o deve essere miglorato
Procedure ricerca(var n,i,cod:integer);
begin
write('inserire codice: ');readln(cod);
cd[i+1].codice:=cod;
n:=i+1;
i:=1;
while cd[i].codice<>codice do i:=i+1;
if i<=n then write(cd[i])
        else write('Codice non trovato');
end
Grazie a tutti coloro che potranno aiutarmi :o)
Dario

Grazie a tutti coloro che potranno aiutarmi :o)
W i troppi commenti!!! :-)
Allora, cod glielo passi e poi fai un readln???
i che roba è??? Che valore ha??
codice cos'è???
mentre cd[i].codice<>codice(variabile sconosciuta) fai: i:=i+1;
se cd[i].codice non è mai uguale a codice, quello che hai scritto è un ciclo
infinito...
Quindi direi che la funzione di ricerca non funzionerà al max.
Comunque, passando alla teoria pura:
Esiste un metodo di ricerca molto più efficiente, ma molto semplice.
Occorre però avere un insieme ordinato, cioè il tuo vettore cd deve essere
ordinato per codice in ordine crescente (consigliato) o decrescente.
Per ordinarlo esistono 5 metodi:
1) Inserisci tutti i dati già ordinati :-)
2) Li ordini 1 per 1, guardando qual è il minore, e lo metti per primo,
cerchi il minore (senza più considerare il primo) e lo metti per secondo...
3) Bubble Sort
4) Shell Sort
5) Quick Sort
gli ultimi 3 te li censuro... al max si può parlare del 3, se ti
interessa...
Dopo di ché ecco qua la ricerca:
usero 3 variabili: i: contatore; cod: codice da ricercare; cd[i].codice:
array di cd (ordinato)
1) vai al centro dell'array. i:=125;
2) confronta cod e cd[i].codice.
     Uguali?? --> Fine
     cod maggiore?? --> la parte "sopra" dell'array non ci serve più:
andiamo a metà della parte sotto. i:=187
     cod minore?? --> l'inverso: ci interessa solo la parte sopra; i:=62
ecc.
Facci sapere :-)
Emanuele Cesena
d.a.m...@iol.it
ICQ n° #10570672

end
Secondo me potresti provare a fare qualcosa di simile:
function TrovaCDDaCodice (const CD : TMioCD; const Cod : Word; const n
: Byte) : Byte;
{questa procedura cerca nell'array di records TMioCD il CD
identificato dal Cod passato; se lo trova ritorna l'indice del CD
cercatto, altrimenti ritorna 0; la ricerca avverrà per i primi n CD.
TMioCD può essere qualcosa del tipo:
type 
  TCD = record
    Titolo: string[15];
    Autore: string[15];
    Codice: Word;
    Tipo: string[5];
    Descrizione: string[30]
  end;
  TMioCD = array[1..250] of TCD
Non l'ho testato, quindi non so dirti se il compilatore genera errori
di memoria; prova}
var i : Byte;
begin
  TrovaCDDaCodice := 0;
    {metti le mani avanti: se non trovi nulla, ritorna 0!}
  for i := 1 to n do if CD[i].Codice = Cod then TrovaCDDaCodice := i
    {se trovi un CD con il codice specificato, ritorna la posizione (=
indice) di tale CD!}
end;
Se vuoi spiegazioni chiedimi!
Ciao,
Mauro Molinari
(Pascal programmer & musician)
Internet e-mail: 
maur...@tin.it
 / 
maur...@mbox.vol.it
ICQ #: 10379016
Digital Things Home Page: 
=> 
http://www.geocities.com/SiliconValley/Bay/8251
=> 
http://space.tin.it/musica/gvettora
=> 
http://members.tripod.com/~DjM_DiT
=> 
http://www.musicnation.com/home/digital_things
*** To send me an e-mail, select the right address and remove NOSPAM.
*** Per mandarmi una e-mail, scegli l'indirizzo corretto e togli NOSPAM.

ecc.
proverò a fare quanto detto....
Grazie
					Dario

proverò a fare quanto detto....
A proposito, dopo aver visto la dichiarazione del record, confermo che la
procedura di ricerca che ti ho suggerito dovrebbe funzionare senza problemi.
Inoltre, molto probabilmente, non ti serve un algoritmo di ordinamento,
visto che sono tutti ordinati per codice.
Comunque, dal punto di vista pratico, spiegami una cosettina:
tu inserisci tutti e 250 i CD in una volta sola, e poi?? Appena esci perdi
tutti i dati... :-)
Vabbè... auguri!!!



e non imparo prima queste cose come faccio ad arrivare alla gestione
dei file? Una cosa per volta :o))
grazie 1000 per i suggerimenti!
					Dario

Vedo che più o meno hanno già risolto il tuo problema.
Un unico consiglio nella metodologia di programmazione: uno degli aspetti
importanti è la modularità del programma.Crei moduli vari (procedure e
function) per risolvere vari problemi. A mio parere è da curare quella che
viene chiamata "indipendenza funzionale": in pratica, se non aumenta troppo
il numero dei parametri, cerca di non utilizzare variabili globali, ma passa
tutto ciò che ti serve come parametro.
--
                Francesco Trotta
                icq uin: 4218722
       elimina x_ dall'indirizzo email
http://www.a-vip.com/francesco.trotta


Cavolo!!! E parti da una cosa così complessa???
Occhio che la ricerca non è affatto un problema semplice...
Né tanto meno lo è la gestione di archivi (pensa che esistono "linguaggi"
solo per progettare archivi!!!) :-)
Comunque... contento te!!! Tanti auguri!!! :-)
P.S: A proposito, sei fortunato, in Pascal puoi fare un file di strutture...
ti è andata bene!!! (Probabilmente non avrai capito quello che ti ho detto,
ma quando arriverai alla gestione dei files...) :-)
Ciao
