Newsgroup: it.comp.lang.delphi
Titolo: INC di un integer

Perche se faccio INC di un array di integer delphi il piu delle volte spare
delle cifre esagerate a caso??? Capisco che se mai dichiarato potesse farlo
ma se := 0, con inc va a 1 poi a 143568334... !!!  Mah!  l'ho sostituito con
+1 ma sempre lo stesso! eppure non e sempre lo stesso numero? boh?

+1 ma sempre lo stesso! eppure non e sempre lo stesso numero? boh?
Sbagli in qualche cosa, scrivi il tuo codice e ti sapro' dire.
--
Andrea Laforgia (
andrea_...@bigfoot.com
)
---------------------------------------------
#exclude <windows.h>


var
aCode : Array of Integer;
begin
inc(aCode[ i ]);
..
end;
Ho cmq risolto facendo:
var
aCode : Array of ShortInt;
begin
aCode[ i ] := aCode[ i ] + 1 ;
..
end;
Incredibile ma cosě funziona egregiamente! Di sicuro non ho capito cosa...
Ti ringrazione per l'interessamento e se sapresti speigarmi il perchč ne
sarei molto lieto, non mi interessa tanto risolvere quanto capire ed
imparare!
Ancora grazie
Ciao, Davide

end;
Umm manca l'indice in quell'array. E questo spiega tutto :)
Dovevi scrivere:
 aCode : Array [0..999] of Integer;
per avere un array lungo 1000. Quello che hai scritto tu è un Array
dinamico, ovvero senza indice, che nonostante le affinità con gli array
statici è piuttosto differente (ad esempio è un puntatore, senza entrare
troppo nei dettagli :).
Ad esempio, senza specificare la dimensione, l'array ha dimensione 0 (nezzun
elemento). Per questo se tu prendi l'elemento i, con i>0, esci dai bordi
dell'array e leggi a caso dalla memoria, dove può esserci un qualsiasi
valore (ecco i valori casuali).
Per cambiare a runtime le dimensioni di un array dinamico, devi usare
SetLength. Con
SetLength ( aCode, 1000);
Ottieni lo stesso array di prima [0..999].
Questo non spiega perchè con shortInt invece andava, ma può essere un caso.
Metti che l'area di memoria che vai a pescare a caso, contenga una lunga
fila di zeri. Più che possibile.
Se hai ancora dubbi sugli array dinamici e statici, posta ancora e ti sarà
chiarito ! :)
Ciao !                {MSX}
http://go.to/msx.home

Incredibile ma cosě funziona egregiamente! Di sicuro non ho capito cosa...
Non va bene.
Ti funziona per un caso.
Devi allocare memoria per aCode.

 Ti funziona per un caso.
Ok ma dove sbaglio?
Cmq grazie per l'interessamento.
Ciao Davide

 
falso! ti sta andando di ... fortuna
aCode [ i ] non esiste perchč aCode č dinamico

>
Certamente dopo il begin c'č
     SetLength(aCode, nMaxLvl);                        // Set Array...
     for i := 1 to nMaxLvl do aCode[i] := 0;           // Reset Array
ADDIRITTURA RESETTATO!
<<
Gli array dinamici hanno l'indice che parte da zero; inoltre:
"For a long-string or dynamic-array variable, SetLength reallocates the
string or array referenced by S to the given length. Existing characters in
the string or elements in the array are preserved, but the content of newly
allocated space is undefined. "
quindi č piů sicuro:
SetLength(aCode, nMaxLv1);
ZeroMemory(aCode, Length(aCode)*sizeof(integer));
// unit Windows; implementata con System.FillChar
for i := Low(aCode) to High(aCode) do begin    // se non allocato nessun
errore !
    ...
    inc(aCode[i]);
    ...
end;