★ CODING ★ BUG ★ COMMENT RETROUVER UNE ERREUR DANS UNE LIGNE DE DATAS ★ |
Comment retrouver une erreur dans une ligne de Datas |
Les programmes les plus intéressants sont souvent écrits en langage machine, et les listings correspondants reproduits dans les revues comme des suites de DATAs...Souvent, les programmeurs intègrent une “Checksum” (somme de contrôle) aux lignes en question, permettant de déceler une éventuelle erreur de saisie. Cette “checksum” ne permet pas toujours de retrouver une erreur... Par contre, il arrive fréquemment que l'on tombe sur un message d'erreur assez laconique, du genre “Type mismatch error”, affectant la ligne où se trouve la boucle FOR-NEXT incluant le READ de lecture des DATAs. Dans ce cas, le programme est incapable de diagnostiquer une erreur, l'analyseur du BASIC étant bloqué avant lui. Ceci se produit essentiellement lorsque l'on cherche à lire une donnée qui ne correspond pas à la variable à laquelle on veut l'affecter. Supposons que nous ayons tapé le listing de la figure 1 . On obtiendra un “Type mismatch in 20”. La première réaction consiste à dire : “Je n'ai pas d'erreur sur la ligne 20, c'est donc que ce programme est mal foutu !”... et de téléphoner ou d'écrire à la rédaction. Et pourtant, l'erreur est bien dans le listing si vous avez tapé celui-ci comme tel... Pour débusquer l'erreur, il suffit de faire PRINT D$. On obtient alors “g0” qui n'est pas une valeur hexadécimale... Pas étonnant que l'ordinateur la refuse : il est incapable de POKEr quelque chose qui ne soit pas une valeur numérique... De même, il serait incapable de POKEr une valeur supérieure à 255... Dans notre cas, la recherche de l'erreur n'est pas difficile : Il y a très peu de lignes de DATAs et la valeur en cause sera vite découverte. Si l'on travaillait sur un long listing, il serait judicieux de procéder différemment. Après avoir noté la valeur erronée (par PRINT D$), il faut repérer la position du compteur de la boucle FOR-NEXT par un simple PRINT N (dans l'exemple évoqué). Ici, on obtient N = 30009. Il suffit de faire ? 30009 - 30000 (valeur de départ de la boucle) pour savoir que c'est la 10e (9 + 1) DATA qui est en cause. On retrouvera aisément cette DATA si le listing contient toujours le même nombre de données par ligne. Ici on a 6 données par lignes : notre “g0” doit se trouver sur la 2e ligne (2x6) de DATAs. La méthode est simple. Répétons-le, elle est “superflue” ici car le listing est court mais... s'il y avait 3 pages de DATAs on pourrait commencer à voir son intérêt ! Denis BONOMO , AMSTAR n°7
|