Soyez le premier à donner votre avis sur cette source.
Snippet vu 5 433 fois - Téléchargée 195 fois
Je m explique... J ai vu, par exemple, au démarrage d un programme : A = B = C = 1 Où A, B et C sont trois variables numériques (Integer, Long, etc...). La personne veut donc affecter la valeur 1 aux variables A, B et C. Mais en résultat toutes les variables seront égales à 0. Pourquoi ? Pour commencer, il faut savoir que toutes les variables numériques sont par défaut égales à 0 au début d un programme. La ligne A = B = C = 1 n affecte une valeur qu a la variable A, non pas à B, ni à C. Car quand vous voulez affecter une valeur à une variable, TOUTE EXPRESSION QUI SUIT LE PREMIER SIGNE "=" sera le calcul de la valeur. Donc : A = B = C = 1 nous donne A = Expression( B = C = 1 ) L expression B = C = 1 est en fait une vérification, ou une comparaison. En plus clair, ça donnerait (parce qu une opération se fait généralement de gauche à droite avec les mêmes opérateurs) : ( B = C ) = 1 Ce qu il faut aussi savoir, c est que les valeurs booléennes (Boolean) VRAI et FAUX (TRUE et FALSE), utilisées dans les comparaisons, peuvent aussi avoir une valeur numérique qui sont -1 pour TRUE, et 0 pour FALSE. On fait la vérification... Au démarrage du programme, A, B et C sont égaux à 0 comme je l ai dit au début. B = C ? --> 0 = 0 ? --> TRUE Donc on enlève "( B = C )" de l expression. ( B = C ) = 1 --> ( TRUE ) = 1 Etant donné que la prochaine comparaison se fait entre une valeur booléenne et un chiffre, la valeur TRUE est convertie en chiffre, donc -1 -1 = 1 ? --> FALSE FALSE est le résultat de l expression. On peut maintenant revenir à la ligne complète : A = B = C = 1 --> A = ( B = C ) = 1 --> A = ( 0 = 0 ) = 1 A = TRUE = 1 --> A = ( TRUE = 1 ) --> A = ( -1 = 1 ) A = FALSE --> A = 0 On affecte donc la valeur 0 à A, et les variables B et C ne changent pas. Voilà.
C'est méthode "mano" que j'ai employée !
++
Cependant tu peux aussi utiliser l'API RtlFillMemory si vraiment la boucle te dérange (ou que tu as plusieurs dimensions à ton tableau), mais ca rempli tous les octets (byte) sans distinction integer ou long.
Une dernière astuce si ton tableau est vraiment de grande taille, tu crées une ligne avec des 3, et tu utilises l'API RtlCopyMemory pour le copier à chaque "colonne"...
Cependant j'insiste qu'une fois compilé, c'est la boucle "mano" qui sera le plus rapide.
par défaut il est initialisé à 0, comment lui dire de s'initialiser à 3 ?
le tableau vide (20,5) : toutes les "cases" seront à 0 mais si on souhaites les déclarer à 3 est t'on obliger defaire une boucle et de tout mettre à 3 ? (très long pour un gros tableau !!)
Merci
++
mais aussi A = B > C
ou encore A = B > C And D < C
bref, tout cela sert a plaçer dans une variable le résultats d'opérations booléenne, qui sont des opérations mathématique aussi importante en prog que les additions et soustraction.
Cela devient interessant de faire un
A B C
do
...
if a then
...
loop
qui sera plus rapide que
do
...
if B = C then
...
loop
mauvais exemple, mais l'idée est là.
Vous n'êtes pas encore membre ?
inscrivez-vous, c'est gratuit et ça prend moins d'une minute !
Les membres obtiennent plus de réponses que les utilisateurs anonymes.
Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.
Le fait d'être membre vous permet d'avoir des options supplémentaires.