LuigiPaolo
unread,Nov 30, 2014, 3:39:53 PM11/30/14You do not have permission to delete messages in this group
Either email addresses are anonymous for this group or you need the view member email addresses permission to view the original message
to
il codice di cui sotto fa parte di un algoritmo
per stilare la classifica di un torneo di scacchi(un pò più articolata che
del calcio).
Il tutto si base sugli insiemi Set del Delphi7 e la classifica
funziona perfettamente solo se i giocatori non superano il numero di 255.
Il problema è che i Set non possono contenere più di 255 elementi
mentre un torneo di scacchi può arrivare anche a 400-500 partecipanti
Pertanto devo per forza lavorare con gli array.
Qualche tempo fa mi fu suggerito l'utilizzo delle funzioni
Contains e SetBit di cui sotto,rispettivamente al posto della
clausa IN e INCLUDE dei Set,lo amico che me le ha inviate
non le ha testate ed io nonostante molti sforzi non sono riuscito
a risolvere il problema.
Si tratterebbe di sostituire le clause IN e INCLUDE con funzioni
adatte agli array.
Inoltre vorrei sapere come si fa a vuotare un array,con i Set
bastava Set1[] o Set2[]
Grazie per chi mi può aiutare anche dandomi solo qualche idea
Voltolini Luigi
?
/////////Funzioni suggerite
type
TMySet = array[0..63] of Byte; // 86 byte = 512 bit
function Contains( const S : TMyset; bit : integer ) : boolean;
begin
Result := (S[ bit div 8 ] and (1 shr (bit mod 8) )) <> 0;
end;
procedure SetBit( var S : TMyset; bit : integer );
begin
S[ bit div 8 ] := S[ bit div 8 ] or (1 shr (bit mod 8) );
end;
//////
?
Codice funzionante con i SET da sostituire
con gli ARRAY....
?
?
////// Set1, Set2: set of 1..255;
?
with Giocatore[ColonnaA] do
begin
if (ColonnaB in Set1) then begin
Include(Set2, ColonnaB)
end;
if not (ColonnaB in Set1) then begin
Include(Set1, ColonnaB);
end;
....
with Giocatore[ColonnaB] do
begin
if (ColonnaA in Set1) then begin
Include(Set2, ColonnaA)
end;
if not (ColonnaA in Set1) then begin
Include(Set1, ColonnaA);
end;