Forum Liberty Basic France

Débutant » [Réglé] Comment fonctionne FUNCTION ? mauvais paramètre en retour, mais bon résultat ???
Le 31/07/2017 à 12h13

Modérateur

Groupe: Modérateur

Inscrit le: 09/02/2015
Messages: 516
Hello tous !

Dans mon actuel projet j'ai créé une fonction qui me renvoie la date et l'heure selon un format perso.

Le problème c'est qu'elle ne devrait pas fonctionner : dans le listing ci-dessous, la valeur retournée par la fonction devrait être le contenu de instantT$, donc chaîne vide, puisque instantT$ n'est utilisée nulle part. Or la fonction retourne le contenu de TopHoraire$...

Comment ça fonctionne chez vous, ou à quel endroit je comprend mal ?


Code VB :
 
'test de "function(paramètre)"

print "Date et heure : ";TopHoraire$(a$)
    'A$ parce qu'il faut citer au moins un paramètre dans le nom de la fonction
    'mais A$ ne sert à rien dans cet exemple)

end
 
 
function TopHoraire$(a$)
 
    'prendre date et heure système
    j$=date$("yyyy/mm/dd")
    h$=time$()
 
    'changer le format de la date
    annee$=left$(j$,4)
    mois$=mid$(j$,6,2)
    nomMois$=word$("jan fév mar avr mai juin juil aout sept oct nov dec",val(mois$))
    jour$=right$(j$,2)
 
    'chaine horaire
    TopHoraire$=jour$+" "+nomMois$+" "+annee$;" - "+h$
 
    functionName$ = instantT$
 
end function
 
____________________
Just BASIC v2.0 :
  • utilisation courante avec GNU/Linux Mageia6 + Wine (Pas trouvé d'incohérences ou de bug de compilation à ce jour)
  • utilisation occasionnelle ou vérification/débugage difficile avec Windows XP sur un petit eeepc

   
Le 31/07/2017 à 14h09

Administrateur

Groupe: Administrateur

Inscrit le: 04/03/2012
Messages: 2083
Il semblerait que la dernière chaine crée est considérée comme paramètre de retour.
____________________
Roro

   
Le 31/07/2017 à 15h15

Modérateur

Groupe: Modérateur

Inscrit le: 09/02/2015
Messages: 516
J'y ai cru aussi, mais c'est pas ça. En fait tout se dénoue ici :

Code VB :
 
    'chaine horaire
    TopHoraire$=jour$+" "+nomMois$+" "+annee$;" - "+h$
 


C'est tout con : la chaîne topHoraire$ EST le nom de la fonction topHoraire$, donc forcément, on attribue bien la chaîne jour$+" "+nomMois$+" "+annee$;" - "+h$ à la fonction topHoraire$, et c'est la fonction functionName$ qui récupérait instantT$. Et comme cette dernière n'était ni créée ni appelée, elle était parfaitement ignorée.

Donc la fonction fonctionnait, quelle que soit la chaîne que j'attribuais à functionName$...


Le code corrigé :
Code VB :
 
'test de "function(paramètre)"

print "Date et heure : ";TopHoraire$(a$)
 
end
 
 
function TopHoraire$(a$)
 
    'prendre date et heure système
    j$=date$("yyyy/mm/dd")
    h$=time$()
 
    'changer le format de la date
    annee$=left$(j$,4)
    mois$=mid$(j$,6,2)
    nomMois$=word$("jan fév mar avr mai juin juil aout sept oct nov dec",val(mois$))
    jour$=right$(j$,2)
 
    'attribuer le résultat à la fonction
    TopHoraire$=jour$+" "+nomMois$+" "+annee$;" - "+h$
 
end function
 




Edité par Christophe Le 01/08/2017 à 20h15
____________________
Just BASIC v2.0 :
  • utilisation courante avec GNU/Linux Mageia6 + Wine (Pas trouvé d'incohérences ou de bug de compilation à ce jour)
  • utilisation occasionnelle ou vérification/débugage difficile avec Windows XP sur un petit eeepc

   
Le 01/08/2017 à 20h08

Modérateur

Groupe: Modérateur

Inscrit le: 09/02/2015
Messages: 516
La chose que j'avais loupé :
extrait de l'aide:

To return a value from the function, assign the value to be returned to a variable of the same name as the function. If no return value is specified, then numeric and string functions will return 0 and empty string respectively.

functionName = returnValueExpression


Ce qui veut dire : Pour retourner une valeur depuis une fonction, placer la valeur à retourner dans une variable qui porte le même nom que la fonction. S'il n'y a pas de valeur de retour spécifiée, alors les fonctions numérique et chaine retourneront respectivement 0 et chaine vide.

Donc en clair, functionName$ aurait été parfait pour y placer le résultat, si la fonction s'appelait functionName$...

Msg perso pour Roland : pas le temps actuellement de regarder tes derniers travaux, mais c'est prévu ;)

a+
____________________
Just BASIC v2.0 :
  • utilisation courante avec GNU/Linux Mageia6 + Wine (Pas trouvé d'incohérences ou de bug de compilation à ce jour)
  • utilisation occasionnelle ou vérification/débugage difficile avec Windows XP sur un petit eeepc

   
Le 01/08/2017 à 21h05

Administrateur

Groupe: Administrateur

Inscrit le: 04/03/2012
Messages: 2083
Citation:
Msg perso pour Roland

J'entends un zeste de culpabilité.
Ne te prends pas la tête sur ta participation au forum, ça ne m'empêche pas de dormir.
Pour donner des news: Je parcours le web en long et en large à la recherche d'idées à coder
Et je n'en trouve pô! grrr. Je cherche aussi des listes.
Ah...Et je cherche aussi quelle fonction de out of nowhere je pourrais bien mettre sur mon essai de base
J'ai attaqué le tri; bonjour les index's!
____________________
Roro

   
Le 10/08/2017 à 20h49

Modérateur

Groupe: Modérateur

Inscrit le: 09/02/2015
Messages: 516
Citation:
J'entends un zeste de culpabilité.

Bonne question, on n'est pas toujours au courant de nos motivations profondes ;)

Citation:
Je cherche aussi des listes.
Ah...Et je cherche aussi quelle fonction de out of nowhere je pourrais bien mettre sur mon essai de base

Pourquoi pas une page de catalogue, avec comme traitement une recherche des articles dont le prix est compris entre telle et telle valeur ?

Citation:
J'ai attaqué le tri; bonjour les index's!

J'ai fait ça un moment (l'aurais-je publié ? ) c'est expérimental, mais ça peut peut-être aider :
(Edit : ne fonctionne pas lorsqu'il y a deux mots identiques dans la liste [mots], en fait on entre dans une boucle infinie et on ne peut arrêter le programme qu'avec un ctrl-alt-suppr (ctrl-Echap sous linux/wine) )
Code VB :
 
[mots] data "guidage","fleur","armure","armoire","voile","volontaire","zephir"
nbmots=7
 
restore [mots]
dim liste$(nbmots):dim tri$(nbmots)
for a=0 to nbmots-1:read mot$:liste$(a)=mot$:next
 
 
for ref=0 to nbmots-1
    motRef$=liste$(ref)
 
    for compare=0 to nbmots-1
        if ref<>compare then
 
            'on compare lettre à lettre le mot référence et le mot comparé
            motCompare$=liste$(compare)
            lettre=1
            difference=0
            while difference=0
 
                'codes ascii des lettres
                a=asc(mid$(motRef$,lettre,1))
                b=asc(mid$(motCompare$,lettre,1))
 
                'on supprime la distinction majuscules-minuscules
                if a>96 then a=a-32
                if b>96 then b=b-32
 
                'comparaison
                if a=b then lettre=lettre+1 else difference=1
 
            wend
 
            if a>b then apres=apres+1 else avant=avant+1
 
        end if
 
    next
 
    tri$(apres)=motRef$ 'tri dans l'ordre conventionnel
    'tri$(avant)=motRef$ 'tri dans l'ordre inverse
    avant=0:apres=0
 
next
 
print:for a=0 to nbmots-1:print tri$(a):next
 




Edité par Christophe Le 11/08/2017 à 20h05
____________________
Just BASIC v2.0 :
  • utilisation courante avec GNU/Linux Mageia6 + Wine (Pas trouvé d'incohérences ou de bug de compilation à ce jour)
  • utilisation occasionnelle ou vérification/débugage difficile avec Windows XP sur un petit eeepc

   
Le 10/08/2017 à 23h22

Administrateur

Groupe: Administrateur

Inscrit le: 04/03/2012
Messages: 2083
Tu arrive après la bataille; j'ai mis le tri numérique et alphabétique
Et cerise: Un Comptage et un Mini-Maxi; Moyenne
Je n'ai pas encore regardé ce que donne le comptage alphabétique...?..!..? Lol !

Trouver des listes de choses à 8 ou 10 paramètres n'est pas chose facile
____________________
Roro

   
Le 11/08/2017 à 20h19

Modérateur

Groupe: Modérateur

Inscrit le: 09/02/2015
Messages: 516
Et en plus mon prog de tri ne fonctionne pas. En fait, si, il fonctionne, mais seulement s'il n'y a aucun doublon dans la liste à trier.

En cas de doublon, la boucle while difference=0 devient infinie parce qu'elle se base sur l'inégalité entre les codes ascii des lettres des mots pour considérer que le travail est fini, cette inégalité ne se produisant jamais si les mots comparés sont identiques.

Il y a sûrement une manière élégante de résoudre le problème : un petit défi ouvert à tous ? (à publier sur un fil distinct, bien sûr)
____________________
Just BASIC v2.0 :
  • utilisation courante avec GNU/Linux Mageia6 + Wine (Pas trouvé d'incohérences ou de bug de compilation à ce jour)
  • utilisation occasionnelle ou vérification/débugage difficile avec Windows XP sur un petit eeepc

   
Le 11/08/2017 à 22h01

Administrateur

Groupe: Administrateur

Inscrit le: 04/03/2012
Messages: 2083
Pour mon tri je garde les doublons
Mais je prends quand même ton snippet qui marche.
____________________
Roro

   
Débutant » [Réglé] Comment fonctionne FUNCTION ? mauvais paramètre en retour, mais bon résultat ???  

 |  |

1 Utilisateur en ligne : 0 Administrateur, 0 Modérateur, 0 Membre et 1 Visiteur
Utilisateur en ligne : Aucun membre connecté
Répondre
Vous n'êtes pas autorisé à écrire dans cette catégorie