Novembre 2024 | Lun | Mar | Mer | Jeu | Ven | Sam | Dim |
---|
| | | | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | | Calendrier |
|
|
| Message d'erreur plus explicite | |
| | Auteur | Message |
---|
papydall
Nombre de messages : 7017 Age : 74 Localisation : Moknine (Tunisie) Entre la chaise et le clavier Date d'inscription : 03/03/2012
| Sujet: Message d'erreur plus explicite Dim 6 Mai 2012 - 21:13 | |
| Je m’adresse ici principalement à Jack. Voila un peu plus de 2 mois que je suis inscrit sur ce Forum. J’ai échangé des programmes, des idées et même des blagues avec une équipe que je trouve très sympathique et des gens qui n’hésitent pas à apporter toute l’aide et soutien qu’on demande. Je les remercie tous sans nommer aucun, de peur d’en oublier ! Mais durant cette période j’ai oublié de te remercier, toi qui nous as offert ce cadeau qu’est PANORAMIC. Ce n’est surtout pas par manque de respect, mais un simple oubli de ma part, oubli d’ailleurs inexcusable ! Je répare donc mon erreur et je te dis mille mercis pour tout ce que tu fais, certes pour ton plaisir avant tout, mais également pour nous qui en profitons tous ! Je profite de l’occasion, pour te demander s’il est possible de trouver dans une prochaine version de PANORAMIC la possibilité de définir, par le programmeur ses propres fonctions en leurs transférant des paramètres ; par exemple comme ceci :
SEC(x) = 1/cos(x) PRINT SEC (3.14)
Cette demande a peut être été déjà faite et si je l’évoque ici c’est parce que je la trouve très pratique. Bien sûr, le dernier mot est à toi. Autre remarque : En ce qui concerne les erreurs du genre « More IF than END_IF », il serait souhaitable d’afficher la ligne incriminée, comme par exemple « More IF than END_IF at line xxx ». Car, lorsque le programme contient quelques dizaines de IF, ça devient pénible de cibler l’endroit de l’erreur. Autre type d’erreur « ‘INF’ is not a valid floating point value », la même remarque s’y applique et l’affichage de la ligne concernée ajoute un confort à la mise au point des programmes. C’est à vous de décider. Toutes mes excuses si ces remarques ont été déjà signalées. Une fois encore, merci Jack.
| |
| | | Invité Invité
| Sujet: Re: Message d'erreur plus explicite Dim 6 Mai 2012 - 22:57 | |
| Je suis bien d'accord avec toi sur bien des points, et je n'y reviendrais pas. Il y a deux sortes d'erreurs: celles de Panoramic, pour lesquelles Jack peut intervenir, et de temps en temps, celles de Windows. Pour ces dernières, je ne pense pas que Jack y pourra quelque chose. Pour les IF et END_IF, j'avais fait un programme pour retrouver les erreurs. Seulement voilà, ce programme est fait pour un codage que j'utilise tout le temps. Les erreurs comme Klaus, m'a montré la possibilité et que Panoramic ne détecte pas d'erreur, ce programme ne convient pas. Je veux parler ce ce type de programme: (exemple de Klaus) avec cette ligne: - Code:
-
if i%>5 then end_if - Code:
-
label loop
dim i%, j%
i%=1
loop: if i%<3 print "i%=";i% i% = i% + 1 else i% = i% + 1 if i%>5 then end_if print "coucou ";i%
end_if if i%>8 then end goto loop Je ne code pas de cette façon. Je mets ici mon programme, mais je sais que JL35 en a fait un, et même Nardo - Spoiler:
- Code:
-
' essai pour trouver les boucles width 0,500:height 0,screen_y label boucle,controle,va_vers_next,marge dim a%,b%,c%,a$,b$, f$,bon%,ferm%,nb%,m$ dim tant%,sinon%,jusqua%,ind%,s$(20) a$="123456789abcdefghijk" for a%=1 to 20:s$(a%)=mid$(a$,a%,1)+" ":next a% ' déclaration des objets dlist 1 :' width 1,150:height 1,100:color 1,247,243,206:font_size 1,10:' jaune pâle open_dialog 2 : filter 2,"|ouvrir le fichier controler|*.bas"
list 3 :width 3,450:height 3,900:font_size 3,12:font_name 3,"Bitstream Vera Sans Mono" dlist 4 dlist 5 dlist 6 ' ------------ f$=file_name$(2) : file_load 1,f$
gosub boucle gosub controle
end ' =========fin========== boucle: if count(1)>0 for a%=1 to count(1) a$=trim$(item_read$(1,a%)) if instr(a$," ")=0 and right$(a$,1)=":" :' label item_add 3,a$:item_add 5,a% end_if if instr(lower$(a$),"return")>0 then item_add 3,"return":item_add 5,a% next a% end_if if count(3)>0 ferm%=0 for a%=1 to count(3) a$=item_read$(3,a%) if ferm%=0 and a$<>"return" then item_add 4,a$ :item_add 6,item_read$(5,a%): ferm%=1 if a$="return" then ferm%=0 next a% end_if return ' ============= controle: ' la list 3, ne sert plus, donc on va s'en re servir clear 3 : clear 5 if count(6) > 0 for a%=1 to count(6) tant%=0:sinon%=0:jusqua%=0:ind%=0 item_add 3,item_read$(4,a%):item_add 3,"":item_add 5,"":item_add 5,"" for b%=val(item_read$(6,a%)) to count(1) a$=trim$(item_read$(1,b%)):a$=lower$(a$) if instr(a$,"return")>0 then exit_for gosub marge if instr(a$,"if")>0 and instr(a$,"then")>0 then goto va_vers_next if instr(a$,"if ")>0 and instr(a$,"end_if")=0 ind%=ind%+1:gosub marge item_add 3,s$(ind%)+m$+"if" :item_add 5,b% end_if if instr(a$,"else")>0 then item_add 3,s$(ind%)+m$+"else":item_add 5,b% if instr(a$,"end_if")>0 gosub marge item_add 3,s$(ind%)+m$+"end_if":item_add 5,b%:ind%=ind%-1 item_add 3,string$(ind%*4+5," ")+"------":item_add 5,"" end_if va_vers_next: next b% item_add 3,"=======================":item_add 5,"" next a% b%=0 for a%=1 to count(3) if len(item_read$(3,a%))>b% then b%=len(item_read$(3,a%)) next a% for a%=1 to count(3) if numeric( item_read$(5,a%))=1 a$=left$( item_read$(3,a%)+string$(b%," "),b%+2) + "[" + item_read$(5,a%) + "]" item_delete 3,a%:item_insert 3,a%,a$ end_if next a% end_if return ' ============================================================================== marge: if ind%=1 m$=" " else m$="" for c%=1 to ind% m$=m$+" |" next c% end_if return
J'ai fait aussi un autre programme, mais j'ai détecté un jour une erreur. Je l'avais corrigé, mais le jour que j'ai voulu le mettre sur le forum, le post était verrouillé, alors qu'il ne l'était pas la veille. Je pense qu'on a pas vu l'utilité du programme, donc je n'ai pas insisté. https://panoramic.1fr1.net/t1244-mode-trace-pour-panoramicJe ne veux pas insister daventage sur mes programmes. |
| | | papydall
Nombre de messages : 7017 Age : 74 Localisation : Moknine (Tunisie) Entre la chaise et le clavier Date d'inscription : 03/03/2012
| Sujet: Re: Message d'erreur plus explicite Lun 7 Mai 2012 - 19:58 | |
| Salut tout le monde ! Une fois de plus, avoir des messages d’erreurs plus explicites facilite grandement le développement des programmes. Exécutez cette unique ligne de code et vous obteniez le message d’erreur suivant : - Code:
-
DIM i,,j
Access violation at address 00501F6B in module ‘PANORAMIN.EXE. Read of address FFFFFFFF Bon, vous avez vite repéré l’erreur, bravo ! Mais imaginez le calvaire que j’ai vécu ce matin. J’ai fais un programme où il y a plusieurs lignes DIM. Chaque ligne contient plusieurs déclarations de variables et le programme comporte quelques centaines de lignes. Mon programme s’exécute d’une manière satisfaisante mais j’ai voulu apporter quelques modifications et une des variables déclarées dans une ligne DIM n’a plus de raison d’exister ; je l’ai donc effacée et par inattention je n’ai pas effacé la virgule qui va avec. En exécutant de nouveau le programme j’ai reçu le message d’erreur ci-haut mentionné. J’ai revu ma copie de haut en bas mais je n’arrive pas à comprendre cette violation : ça frôlait le désespoir ( je suis contre toute violation de quelque nature que ce soit!). Une heure et deux cafés après, j’ai pu localiser le mal. Morale de l’histoire : un message d’erreur plus explicite arrange bien les choses ; par exemple : « Syntax error in line xxx » ou bien « Variable name expected in line DIM » ou quelque chose d’approchant. Je soulève ici un autre problème, un Bug, selon moi. - Code:
-
dim i for i = 7 to 0 print "Cette ligne ne devrait pas être exécutée" next i
Selon ce que je sais comment une boucle FOR …NEXT s’exécute, la ligne PRINT ne devrait pas être exécutée car la valeur du compteur de boucle i est supérieur à la valeur de sortie. En effet, une boucle FOR….NEXT s’exécute de ZERO à N fois. Elle est du type WHILE.….END_WHILE (l’évaluation de la condition de sortie se fait au DEBUT). Or, elle se comporte comme REPEAT….UNTIL (l’évaluation de la condition de sortie se fait APRES la 1ere exécution ce qui peut amener à un comportement inattendu du programme !). Par ailleurs, on calcule le nombre d’exécutions d’une boucle FOR…NEXT comme ceci : Valeur_finale_du_compteur – Valeur_initiale_du_compteur + 1 Exemple : FOR I = 7 TO 13, sera exécute exactement 13 – 7 + 1 = 7 fois Par contre FOR I = 7 TO 0 ne devrait pas être exécuté du tout puisque 0 – 7 +1 est un nombre négatif. C’est ma façon de voir et ce que j’ai étudié, mais je me trompe peut être. A+ | |
| | | JL35
Nombre de messages : 7112 Localisation : 77 Date d'inscription : 29/11/2007
| Sujet: Re: Message d'erreur plus explicite Lun 7 Mai 2012 - 20:22 | |
| Salut papydall, Oui, ça surprend, mais une boucle For Next est toujours exécutée au moins une fois, je crois que c'était pareil en basic. C'est logique après tout, il fait un tour, il incrémente, puis il regarde s'il a fini ou non, mais je ne crois pas qu'il analyse d'abord les bornes (qui ici sont une erreur, ou alors il manque le step -1). Il suffit de le savoir, c'est comme ça.
Pour le Dim, effectivement ce genre d'erreur est très difficile à trouver, alors qu'ici c'est une erreur de syntaxe caractérisée. | |
| | | papydall
Nombre de messages : 7017 Age : 74 Localisation : Moknine (Tunisie) Entre la chaise et le clavier Date d'inscription : 03/03/2012
| Sujet: Re: Message d'erreur plus explicite Lun 7 Mai 2012 - 22:25 | |
| Salut à tous. @JL35 NON, Une boucle FOR…NEXT n’est pas toujours exécutée au mois une fois. Dans tous les langages que j’ai utilisé(les différents BASIC, le Turbo PASCAL, etc..), lorsque la valeur du début du compteur de boucle est supérieure à celle de la fin et qu’il n’y a pas de STEP négatif, la boucle est soit purement et simplement ignorée soit dans des cas rares une erreur est signalée. Mais dans tous les cas, elle n’est pas exécutée. Le principe d’exécution d’une boucle FOR…NEXT est de vérifier la condition de sortie de la boucle AVANT son exécution exactement comme le ferai une boucle WHILE….END_WHILE contrairement à la boucle REPEAT…UNTIL qui s’exécute au mois une fois.
Dernière édition par papydall le Mar 8 Mai 2012 - 2:59, édité 1 fois | |
| | | Invité Invité
| Sujet: Re: Message d'erreur plus explicite Lun 7 Mai 2012 - 23:02 | |
| |
| | | papydall
Nombre de messages : 7017 Age : 74 Localisation : Moknine (Tunisie) Entre la chaise et le clavier Date d'inscription : 03/03/2012
| Sujet: Re: Message d'erreur plus explicite Mar 8 Mai 2012 - 1:17 | |
| Comme disait l’autre : Google est ton ami, j’ai cherché la boucle FOR sur Google pour différents langages (VBA, C, C++, TP, DELPHI…). Il est clairement dit que la boucle FOR…NEXT est en fait une boucle WHILE : la condition de sortie ou non de la boucle est testée AVANT l’exécution des instructions et non après. C’est ce que j’ai toujours appris et utilisé et je n’avais aucun doute la dessus ; mais comme certains ont des points de vues différents, je ne peux que m’incliner sans être tout à fait convaincu ! PS : J’ai exécuté le code suivant en d’autres BASIC et en Turbo Pascal et dans tous les cas la boucle a été ignorée, sauf en PANORAMIC où elle s’est exécutée une fois. - Code:
-
dim i for i = 7 to 1 print "hello" next i
| |
| | | Jean Claude
Nombre de messages : 5950 Age : 70 Localisation : 83 Var Date d'inscription : 07/05/2009
| Sujet: Re: Message d'erreur plus explicite Mar 8 Mai 2012 - 9:11 | |
| C'est vrai qu'à mes débuts avec Panoramic, j'ai souvent été dérouté par ce fonctionnement de for/next. Maintenant je me suis habitué. Sur le fond, Papydall à raison et à chaque fois qu'on aura un nouveau programmeur issu du basic, le sujet pourrais être relancé. JL35 à dit: - Citation :
- Salut papydall,
Oui, ça surprend, mais une boucle For Next est toujours exécutée au moins une fois, je crois que c'était pareil en basic. Pas d'accord, je viens de tester "for n=7 to 1: print n : next n" en QB. L'instruction print n'est pas exécutée une seule fois. T'as pas gardé ton éditeur QB sous le coude JL35.....?. Merci à Cosmos de nous avoir retrouvé la discussion... A+ | |
| | | papydall
Nombre de messages : 7017 Age : 74 Localisation : Moknine (Tunisie) Entre la chaise et le clavier Date d'inscription : 03/03/2012
| Sujet: Re: Message d'erreur plus explicite Mar 8 Mai 2012 - 15:02 | |
| Salut à tous ! Si je reviens sur la question de FOR…NEXT, c’est parce que dans tous les documents que j’ai consulté et étudié jadis concernant l’algorithmique, la méthodologie de programmation et les structures itératives, il est indiqué qu’il ya des structures répétitives du type 0 à n fois et d’autres de 1 à n fois. La 1ere forme (0 à n fois) est utilisée lorsque la condition de sortie de la boucle est connu d’avance : cas de WHILE…END_WHILE et de FOR…NEXT. La 2eme forme (1 à n fois) est utilisée lorsque la condition de sortie de la boucle n’est connue qu’après que la boucle ait été exécuté une première fois : cas de REPEAT…UNTIL. Il est plus prudent de préférer la boucle WHILE à la boucle REPEAT. Dans la boucle FOR, tous les ingrédients sont connus dès le départ : la variable de contrôle, la valeur de début, la valeur de fin et par conséquent la condition de sortie. Je ne vois pas pourquoi le système irait-il à la fin de la boucle (NEXT) pour évaluer la condition de sortie ensuite puisqu’il peut le faire dès le départ ! En vérité, dans la plupart des interpréteurs et compilateurs, le système, en entrant dans une boucle FOR…NEXT, affecte la valeur de début à la variable de contrôle, regarde si cette valeur n’est pas déjà supérieure à celle de fin et suivant le résultat de ce contrôle, décide ou non d’effectuer la boucle. Si la boucle est exécuté, il y aura (à l'instruction NEXT) incrémentation (ou décrémentation suivant le STEP) et le système retourne au début de la boucle, évalue la condition de sortie etc. Je viens de tester le programme suivant, en l’adaptant à chaque langage DIM i FOR i = 1 to 0 PRINT « hello » NEXT i Le résultat est le suivant: BASIC256 -------------> Erreur à la ligne 2 FREE PASCAL ---------> La boucle est ignorée FREE BASIC-----------> La boucle est ignorée QB64-------------------> La boucle est ignorée TURBO PASCAL 7-----> La boucle est ignorée PANORAMIC-----------> La boucle est exécutée une fois A bon entendeur, salut ! | |
| | | Jean Claude
Nombre de messages : 5950 Age : 70 Localisation : 83 Var Date d'inscription : 07/05/2009
| Sujet: Re: Message d'erreur plus explicite Mar 8 Mai 2012 - 20:11 | |
| Papydall à dit: - Citation :
- Dans la boucle FOR, tous les ingrédients sont connus dès le départ : la variable de contrôle, la valeur de début, la valeur de fin et par conséquent la condition de sortie. Je ne vois pas pourquoi le système irait-il à la fin de la boucle (NEXT) pour évaluer la condition de sortie ensuite puisqu’il peut le faire dès le départ !
En vérité, dans la plupart des interpréteurs et compilateurs, le système, en entrant dans une boucle FOR…NEXT, affecte la valeur de début à la variable de contrôle, regarde si cette valeur n’est pas déjà supérieure à celle de fin et suivant le résultat de ce contrôle, décide ou non d’effectuer la boucle. C'est très clair et cohérent... A+ | |
| | | papydall
Nombre de messages : 7017 Age : 74 Localisation : Moknine (Tunisie) Entre la chaise et le clavier Date d'inscription : 03/03/2012
| Sujet: Re: Message d'erreur plus explicite Mar 8 Mai 2012 - 22:25 | |
| Merci Jean Claude. Voila au mois un qui me soutient ! | |
| | | Jicehel
Nombre de messages : 5947 Age : 52 Localisation : 77500 Date d'inscription : 18/04/2011
| Sujet: Re: Message d'erreur plus explicite Mar 8 Mai 2012 - 23:27 | |
| En effet, la logique voudrait qu'il y est 0 boucle d'effectuée. A priori, d'après tes tests, ça semble également être la norme officieuse à défaut d'avoir une norme officielle Beau travail de démonstration, on sent l'esprit scientifique poindre .. | |
| | | papydall
Nombre de messages : 7017 Age : 74 Localisation : Moknine (Tunisie) Entre la chaise et le clavier Date d'inscription : 03/03/2012
| Sujet: Re: Message d'erreur plus explicite Mar 8 Mai 2012 - 23:38 | |
| Merci jicehel. +1 | |
| | | Contenu sponsorisé
| Sujet: Re: Message d'erreur plus explicite | |
| |
| | | | Message d'erreur plus explicite | |
|
Sujets similaires | |
|
| Permission de ce forum: | Vous ne pouvez pas répondre aux sujets dans ce forum
| |
| |
| |