Forum Liberty Basic France
• Index
Reprise du message précédent
Citation:
Pfff... J'suis dèg'..
Citation:
Y'a qu'à demander ! essai sa :
Pfff... J'suis dèg'..

____________________
Roro
Roro
____________________
"L'urgent c'est fait ! L'impossible est en cours... pour les miracles, merci de prévoir un délai supplémentaire !"
"L'urgent c'est fait ! L'impossible est en cours... pour les miracles, merci de prévoir un délai supplémentaire !"
Normal, ça s'appelle procéder par approximations successives : quand on aura fait le tour de toutes les situations inattendues et que la fonction fonctionnera malgré tout (puisque c'est sa fonction, de fonctionner, on pourra dire qu'on y est arrivé 
J'investigationne. Pour l'instant, avec a$="1" et b$="11", on a une boucle infinie car le cha court aussi vite que le tour, et donc le tour ne rattrappera jamais le cha.

J'investigationne. Pour l'instant, avec a$="1" et b$="11", on a une boucle infinie car le cha court aussi vite que le tour, et donc le tour ne rattrappera jamais le cha.
____________________
Just BASIC v2.0 :
utilisation occasionnelle ou vérification/débugage difficile avec Windows XP sur un petit eeepc
Just BASIC v2.0 :
'suis perplexe :
avec a$="1" et b$="11" on entre dans une boucle infinie
avec a$="1" et b$="aa" le programme fonctionne normalement (à essayer en mode debug)
dans les deux cas, b$ est chaine, on fait des opérations sur les caractères et je n'ai pas converti b$ en valeur numérique quelque part dans le programme
obtenez-vous la même chose ?
Je réfléchirais demain
avec a$="1" et b$="11" on entre dans une boucle infinie
avec a$="1" et b$="aa" le programme fonctionne normalement (à essayer en mode debug)
dans les deux cas, b$ est chaine, on fait des opérations sur les caractères et je n'ai pas converti b$ en valeur numérique quelque part dans le programme
obtenez-vous la même chose ?
Je réfléchirais demain
____________________
Just BASIC v2.0 :
utilisation occasionnelle ou vérification/débugage difficile avec Windows XP sur un petit eeepc
Just BASIC v2.0 :
Non, c'est normal, on remplace 1 par 11, et au tour d'après, on trouve fort logiquement le second 1 de 11, du coup le programme pense qu'il faut remplacer aussi ce 1, et on boucle comme ça à l'infini.
____________________
Just BASIC v2.0 :
utilisation occasionnelle ou vérification/débugage difficile avec Windows XP sur un petit eeepc
Just BASIC v2.0 :
Eh bien, c'est plus simple et ça semble fonctionner.
En attente du prochain déraillement
Code VB :
En attente du prochain déraillement

Code VB :
chaine$="123456789123456789" for test=1 to 6 select case test case 1 : a$="1" : b$="11" case 2 : a$="1" : b$="aa" case 3 : a$="234" : b$="--" case 4 : a$="567" : b$="--" case 5 : a$="4567" : b$="-" case 6 : a$="a" : b$="---" end select print a$;" remplacé par ";b$;" donne ";REMPLACE$(chaine$,a$,b$,test) next end '*********************** function REMPLACE$(chain$,enlever$,remplacer$,cas) if cas=3 then trace 2 enl=len(enlever$) cha=len(chain$) ch$="" for tour=1 to cha ch$=ch$+mid$(chain$,tour,1) if right$(ch$,enl)=enlever$ then ch$=left$(ch$,len(ch$)-enl)+remplacer$ next REMPLACE$=ch$ end function
____________________
Just BASIC v2.0 :
utilisation occasionnelle ou vérification/débugage difficile avec Windows XP sur un petit eeepc
Just BASIC v2.0 :
Citation:
Il suffit peut-être de faire: "si similaire-->passer"
Non, c'est normal, on remplace 1 par 11,
Il suffit peut-être de faire: "si similaire-->passer"
____________________
Roro
Roro
@Christophe
(Plus que) PARFAIT !
Ben oui, on peut même faire des remplacement de "" ( a$="" : b$="YaRienIci" )
PS
"if cas=3"
Y'a une raison particulière à spécifier "3" ? Ou c juste qu'il fallait mettre une valeur ?
Pas encore compris se que faisait 'trace'...
Edité par joan74 Le 14/04/2021 à 15h02
(Plus que) PARFAIT !
Ben oui, on peut même faire des remplacement de "" ( a$="" : b$="YaRienIci" )
PS
"if cas=3"
Y'a une raison particulière à spécifier "3" ? Ou c juste qu'il fallait mettre une valeur ?
Pas encore compris se que faisait 'trace'...
Edité par joan74 Le 14/04/2021 à 15h02
____________________
"L'urgent c'est fait ! L'impossible est en cours... pour les miracles, merci de prévoir un délai supplémentaire !"
"L'urgent c'est fait ! L'impossible est en cours... pour les miracles, merci de prévoir un délai supplémentaire !"
Je n'avais pas vérifié la possibilité d'un a$ vide, dans ce cas c'est mieux que la fonction retourne la chaine intacte, et j'ai ajouté un "if" dans la fonction pour prévoir ce cas. b$ aussi peut être vide mais c'est moins gênant.
@Roland, j'étais aussi parti dans ton sens, mais j'ai eu soudain l'intuition qu'on s’ennuyait pour rien avec un avant$ et un après$ pour mettre un milieu$ dedans, et j'ai changé de cap.
@joan74 : trace 2 est actif seulement en mode débugage (la coccinelle à côté de la flèche bleue), et veut dire qu'on exécute le programme pas à pas, en cliquant sur "step into" pour passer à l'instruction suivante, et les variables traitées par l'instruction sont affichées.
if pas=3 then trace 2 veut dire que je voulais voir le déroulement de la fonction pour la valeur de boucle de test n°3, et comme les données à l'intérieur d'une fonction sont indépendantes des données à l'extérieur, j'ai dû transmettre la valeur de test avec les paramètres de la fonction. j'aurais pu m'en passer si j'avais défini test comme une variable globale, mais je n'y ai pas pensé.
pour résumer, on place trace 2 (ou 1) juste avant le bloc d'instruction à surveiller, et trace 0 juste après. trace 0 élimine l'effet de trace 2 et de trace 1 et on reprend l'exécution normale.
Comme j'ai été un peu vite pour poster ce matin, je remet la fonction débarrassée de ses échafaudages et complétée de son anti-a$-vide :
Code VB :
@Roland, j'étais aussi parti dans ton sens, mais j'ai eu soudain l'intuition qu'on s’ennuyait pour rien avec un avant$ et un après$ pour mettre un milieu$ dedans, et j'ai changé de cap.
@joan74 : trace 2 est actif seulement en mode débugage (la coccinelle à côté de la flèche bleue), et veut dire qu'on exécute le programme pas à pas, en cliquant sur "step into" pour passer à l'instruction suivante, et les variables traitées par l'instruction sont affichées.
if pas=3 then trace 2 veut dire que je voulais voir le déroulement de la fonction pour la valeur de boucle de test n°3, et comme les données à l'intérieur d'une fonction sont indépendantes des données à l'extérieur, j'ai dû transmettre la valeur de test avec les paramètres de la fonction. j'aurais pu m'en passer si j'avais défini test comme une variable globale, mais je n'y ai pas pensé.
pour résumer, on place trace 2 (ou 1) juste avant le bloc d'instruction à surveiller, et trace 0 juste après. trace 0 élimine l'effet de trace 2 et de trace 1 et on reprend l'exécution normale.
Comme j'ai été un peu vite pour poster ce matin, je remet la fonction débarrassée de ses échafaudages et complétée de son anti-a$-vide :
Code VB :
chaine$="123456789123456789" for test=1 to 6 select case test case 1 : a$="1" : b$="11" case 2 : a$="1" : b$="aa" case 3 : a$="234" : b$="--" case 4 : a$="4567" : b$="--" case 5 : a$="" : b$=" atchoum! " case 6 : a$="a" : b$="---" end select print a$;" remplacé par ";b$;" donne ";REMPLACE$(chaine$,a$,b$) next end '*********************** function REMPLACE$(chain$,enlever$,remplacer$) enl=len(enlever$) cha=len(chain$) if enl>0 then ch$="" for tour=1 to cha ch$=ch$+mid$(chain$,tour,1) if right$(ch$,enl)=enlever$ then ch$=left$(ch$,len(ch$)-enl)+remplacer$ next REMPLACE$=ch$ else REMPLACE$=chain$ end if end function
____________________
Just BASIC v2.0 :
utilisation occasionnelle ou vérification/débugage difficile avec Windows XP sur un petit eeepc
Just BASIC v2.0 :
• Index
1 Utilisateur en ligne : 0 Administrateur, 0 Modérateur, 0 Membre et 1 Visiteur
Utilisateur en ligne : Aucun membre connecté
Utilisateur en ligne : Aucun membre connecté
Répondre
Vous n'êtes pas autorisé à écrire dans cette catégorie