Newsgroup: it.comp.lang.pascal
Titolo: Scoperta dell'acqua calda?!?!

Ciao a Oluyede Lawrence.
Gran belle cose la tipizzazione forzata e l'accesso diretto alla memoria!
A che serve una siffatta funzione?
----------------
type PC=^char
function ACheServe(P1,P2:PC; dimensione:word)
    var
        i: word;
    Begin
    i=0;
    while (P1^=P2^) and (i<dimensione) do
        Begin
        inc(i);
        inc(longint(P1));
        inc(longInt(P2));
        end;
    ACheServe= (P1^<>P2^)
    end;
-----------------
Suggerimento di chiamata:
.........
.........
var
    R1,R2:MiaVariabileQualsiasi;
Begin
.........
.........
if ACheServe(@R1,@R2,sizeof(R1)) then  .....
.......
.......
end.
Se a qualcuno serve me lo faccia sapere. Oggi ho bisogno di alimentare la
mia vanità.
Ancora più grazioso sarebbe l'ordinamento dei records contenuti in un file
di un giga in circa tre quarti d'ora. Con la limitazione dei 64 K.
Ciao a tutti.


Ciao.
Simone.
==============================
...e Dio disse: "pkunzip universo.zip"
e-mail: 
drfa...@tiscalinet.it
web: 
http://go.to/drfalken
 (internet
su numero verde, pascal, assembler,
mp3 player, tips'n'tricks)
==============================

 Con quale configurazione ? 80286-12Mhz oppure Athlon 1GHz ?
486 100 Mhz, records con campo stringhe.
Saluti a tutti.

 se sono uguali).
Visto che si dice che questo NG è morto (non è vero), cerco di darti anche
un'alternativa al tuo metodo: un record variante:
Type MioRecord=record
          case integer of
                1: (Campo1:string[20];
                      Campo2: integer ecc ecc);
                2: ( AsBits: set 0..DimRecord of boolean);
  end;
Sono andato a memoria quindi potrei aver scritto boiate nella dichiarazione
del record ma la teoria è quella (io la uso spesso)...
Con questo metodo puoi anche fare:
Record1.AsBits:=Record2.AsBits;
e tutti i campi saranno copiati... ;-)
Ciao :-)
--
(¯`·.¸¸.·´¯`·.¸¸.-> Andrea <-.¸¸.·´¯`·.¸¸.·´¯)
AntiSpam: rimuovere il trattino basso dall'indirizzo per rispondere
AntiSpam: remove the underscore from the e-mail address to reply

 (¯`·.¸¸.·´¯`·.¸¸.-> Andrea <-.¸¸.·´¯`·.¸¸.·´¯)
Il problema non è quello di copiare un record in un altro (sarebbe
sufficiente fare Record1:=Record2) ma di verificare se un record è stato
modificato dall'utente o se un record esiste già in un file per evitare
troppi doppioni.

 troppi doppioni.
Ok, cmq con un record variante hai la rappresentazione binaria del record
senza doverla calcolare... poi fare il confronto con il blocco di memoria in
cui hai i record resta semplice...
Ciao :-)
--
(¯`·.¸¸.·´¯`·.¸¸.-> Andrea <-.¸¸.·´¯`·.¸¸.·´¯)
AntiSpam: rimuovere il trattino basso dall'indirizzo per rispondere


 Saluti a tutti.
Ipotesi: hard disk con spazio sufficiente e richieste di I/O "bufferizzate"
(realizzabile).
Dividi il file in blocchi N blocchi, ordina ogni blocco (puoi usare il
quicksort o l'heapsort), prendi i blocchi a coppie e fai il merge.
A questo punto ti trovi N/2 blocchi (da scaricare sull'hard disk): applica
il merge finche' non arrivi ad 1 blocco.
Es: 320 record
     N = 32 blocchi
Inizialmente ogni blocco sara' composto da 10 record.
Al primo passo ordini i 32 blocchi da 10 record.
Fai il merge dei 32 blocchi a coppie, cioe' Merge(B1, B2); Merge(B3,
B4);...;Merge(B31, B32).
Ottieni 16 blocchi da 20 record, fai il merge delle coppie, cioe' Merge(B1,
B2); Merge(B3, B4);...;Merge(B15, B16).
La procedura finisce quando fai Merge(B1, B2).
Suggerimento: se non hai spazio a sufficienza sull'hard disk, puoi
utilizzare il file di input anche in output per scaricare i blocchi
ordinati...


 Dio disse: "pkunzip universo.zip"
...... e fu il big bang
Salute e prosperità!