Newsgroup: it.comp.lang.delphi
Titolo: Rotazione array

const
   Turno1 : array [1..18] of string =(
'a','a','R','R','b','b','c','c','R','R','b','b','c','c','R','R','b','b');
E' possibile da codice modificare l'ordine dell'array di cui sopra,in modo
per esempio che risulti
('b','b','c','c','R','R','b','b','c','c','R','R','b','b','a','a','R','R')
mantenendo comunque la giusta rotazione?
Spero di essermi spiegato nella maniera giusta
Paolo

Paolo
	Ciao
	MassimoB
 
---------------------------
http:\\
www.massimobeschi.it

Ti ringrazio per la risposta,funziona tutto,anche se non ho capito perche'
ci vogliono due Memo,a me basta una per poter poi appendere le stringhe in
una tabella.(Forse ne hai messe due per farmi meglio capire).
Il nuovo problema e' questo,come faccio a ritornare di colpo all'Array
originale (0..17),in pratica devo nella memo1 creare una sola volta il nuovo
Array,copiarlo nella tabella,azzerare la memo1 e ripristinare l'Array
originale.
Che differenza c'e' se si inizia l'indice da 0 invece che da 1?
Ti ringrazio di nuovo per una tua gentile risposta.
Paolo


> Che differenza c'e' se si inizia l'indice da 0 invece che da 1?
Ci sono diverse ragioni per usare array ad indice inziale 0 piuttosto che 1:
1. Compatibilità con altri ambienti e linguaggi
2. Gli array dinamici iniziano da 0, per cui è bene abituarsi ad usare tale
indice iniziale
3. Se usi un open array come parametro la funzione Low restituisce sempre 0
come primo elemento (almeno era così fino a qualche versione fa di Delphi,
ora non ho l'help per essere più preciso
4. Per array contigui in memoria il calcolo dell'indirizzo per accedere ad
un elemento dell'array è :
AddressOfArray + (N * sizeof(ElementType)) mentre nell'altro caso è
AddressOfArray + ((N - X) * sizeof(ElementType)) quindi leggermente meno
efficiente
5. Il compilatore riesce ad ottimizzare meglio i cicli per l'array quando il
primo l'indice è 0
Antonio

Che differenza c'e' se si inizia l'indice da 0 invece che da 1?
A riguardo di questo punto non ho niente da aggiungere
a quello che ha già detto guastatore ... se non ne puoi
proprio fare a meno usa indicizzazioni che non partano
da 0 ma se in qualche maniera puoi evitarlo .. EVITALO
:)


 esegui turna sulla copia tiri fuori ciň che ti serve


Paolo[...]


In data Mon, 19 Jul 2004 10:18:50 GMT, paolo ha scritto:
ho provato a seguire il thread per capire cosa ti serve ma mi sono perso
tra i loop. Che ne dici di un'arrai bidimensionale? Prima dimensione con
l'ordine giusto, seconda dimensione con l'ordine inverso...
-- 
Ciao, Anto', [37, 143, AQ] 
MB C SC 220 CDI Magma Rot
"Di sempre cio' che senti e fai cio' che pensi."
    G.G. Màrquez

Grazie per le tue gentili risposte,funziona tutto alla meraviglia (uso solo
le memo,perche' non voglio complicare il tutto e perche' ho sotto occhio
quello che accade).
Ora per forza maggiore devo usare la funzione DayOfTheYear per accodare alla
Tabella1 i valori della memo1,al posto di fare
Tabella1Ora.value:= memo1.lines[i];
devo' fare invece:
Tabella1Ora.value:= (memo1.Lines[i][dayoftheyear(Adate)])
questo pezzo di codice pero' mi accoda solo simboli strani,
c'e' qualche accorgimento per ovviare all'errore?
Grazie di nuovo per una tua eventuale risposta
Paolo

Paolo
	Ciao
	MassimoB
 
---------------------------
http:\\
www.massimobeschi.it

Var
  i: Integer;
  turno2: array [0..17] of string ;
  turno3: array [0..17] of string ;
begin
  Memo1.Clear;
  Memo2.Clear;
  Memo3.Clear;
  for i := 0 to 17 do
  begin
    Memo1.Lines.Add(turno[i]);
    turno2[i] := turno[i];
    turno3[i] := turno[i];
  end;
  Turna(turno2,4);
  for i := 0 to 17 do
    Memo2.Lines.Add(turno2[i]);
   Turna(turno3,6);
  for i := 0 to 17 do
    Memo3.Lines.Add(turno3[i]);
end;
//
Vorrei accodare alla Tabella1 i valori degli array turno,turno2 e turno3
senza passare per le memo ,cioe' farlo direttamante
if edit1.text = 'a' then begin
Tabella1Ora.value:= (Turno[dayoftheyear(Adate)])
end;
if edit1.text = 'b' then begin
Tabella1Ora.value:= (Turno2[dayoftheyear(Adate)])
end;
if edit1.text = 'c' then begin
Tabella1Ora.value:= (Turno3[dayoftheyear(Adate)])
end;
ADate e' un campo che contiene le date dal 1° al 31 dicembre,Tabella1Ora e'
un campo stringa che memorizza appunto il turno.
Ovviamente gli array sono del tipo [0..365)
Solo che non riesco proprio ad intercettare i valori dei tre array se lo
faccio direttamente.
Spero di averti chiarito un po' di piu' la cosa
Grazie ancora
Paolo