problème avec scilab et la fonction fix
Répondre à la discussion
Affichage des résultats 1 à 12 sur 12

problème avec scilab et la fonction fix



  1. #1
    gloups13

    problème avec scilab et la fonction fix


    ------

    Bonsoir,
    Avant de vous présentez mon problème, si vous connaissez une commande qui séléctionne un chiffre d'un nombre(ex:
    x=12.65 sélectionner le 2) alors vous avez résolu mon problème.

    Voilà mon problème:
    J'ai un nombre de deux chiffre, ou une matrice (1,1) moi je veux sélectionner le premier chiffre puis le second.
    J'ai fait un code et je ne comprends vraiment pas pourquoi il ne marche pas tout le temps.

    Code:
    numero=I(1,j);
    numero1=fix(numero/10);//Je sélectionne le premier chiffre
    numero2=fix(10*(numero/10-numero1));//Je sélectionne le deuxième chiffre
    disp(numero,'numero=');
    printf('numero1=%d\n\n',numero1);
    printf('numero2=%d\n\n',numero2);

    voila un résultat qui marche:
    Code:
     numero=
    
       13.
    numero1=1
    
    numero2=3


    voila un résultat qui marche pas:
    Code:
     numero=
    
       12.
    numero1=1
    
    numero2=1
    ça vient peut être de la fonction fix?

    Si vous avez des pistes je suis preneur.
    Merci et bonne soirée.

    -----

  2. #2
    inviteeecca5b6

    Re : problème avec scilab et la fonction fix

    Salut,

    Y'a plusieurs façons de le résoudre.

    Une d'entre elles serait d'utiliser cette approche:
    https://fr.wikipedia.org/wiki/Division_euclidienne

    C'est dans le cadre d'un devoir ?

  3. #3
    gloups13

    Re : problème avec scilab et la fonction fix

    bonjour. oui c'est dans le cadre d'un devoir. j'ai fai un algoritme mais je ne comprends pas pourquoi je passage ne marchait pas comme je voulais.
    merci, je vais regarder l'adresse.

  4. #4
    inviteeecca5b6

    Re : problème avec scilab et la fonction fix

    Ok.

    Etant donné que le nombre 1 est correctement identifié mais pas le nombre 2, tu te doutes qu'il doit y avoir quelque chose de faux à cette ligne
    Code:
    numero2=fix(10*(numero/10-numero1));//Je sélectionne le deuxième chiffre
    Est-ce que la taille des nombres est connues ? Genre, il faut que ça marche avec numero = 8751321754.3214545745 ?

    Si c'est le cas, il faudra adapter le code.

  5. A voir en vidéo sur Futura
  6. #5
    gloups13

    Re : problème avec scilab et la fonction fix

    Bonsoir,
    numero est un nombre entier choisi aléatoirement entre 1 et 360.
    J'ai vérifié le résultat de numero2. Il était faux.
    Je sais où est l'erreur mais mon problème est que je ne sais pas pourquoi c'est faux (car mathématiquement, c'est juste).

    Regardez:
    Code:
    numero=I(1,j);
    printf('numero=%d\n\n',numero);
    numero1=fix(numero/10);//Je sélectionne le premier chiffre
    z=fix(10*(numero/10-numero1));//Je sélectionne le deuxième chiffre
    printf('z=%d\n\n',z);


    et le résultat:
    Code:
    numero=12
    
    numero1=1
    
    z=1
    Normalement,
    et normalement.
    Alors pourquoi il me renvoi z=1 ?




    Sinon j'ai résolu le problème avec cette fonction:

    Code:
    numero2=pmodulo(numero,10);//Je sélectionne le deuxième chiffre
    Mais bon personnellement, j'aimerai bien savoir le pourquoi du comment.
    Cordialement.

  7. #6
    Dlzlogic

    Re : problème avec scilab et la fonction fix

    Bonsoir Gloups,
    Je sais que je me mêle de ce qui ne me regarde pas, mais vous avez un projet précis, qu'il faut étudier, analyser, structurer, et vous ne devez pas vous perdre dans la résolution de petits problèmes ponctuels et mineurs.
    Faites l'analyse du problème posé, un algorithme de la solution envisagée (algorithme = description logique des différentes étapes à effectuer), soumettez là (gg0 a déjà étudié ce type de problème), et je suis sûr qu'on sera nombreux à essayer de vous aider, puisque le problème est intéressant.
    Bonne soirée.

  8. #7
    invite1c6b0acc

    Re : problème avec scilab et la fonction fix

    Dans un ordinateur, les nombres sont écrit en binaire.
    1.2 et 1.3, en binaire, ont un nombre infini de décimales.
    Donc on ne peut connaître qu'une valeur approchée.
    Manifestement, la valeur approchée est plus grande pour 1.3 (comme si on avait 1.3000000000001) et plus petite pour 1.2 (comme si on avait 1.1999999999999999999)
    et fix (1.999999999999999999) = 1 et non pas 2.

    Au lieu d'utiliser des nombres à virgule flottante et d'essayer de les tronquer, ce qui n'a rien a voir avec ton problème, tu ferais mieux, comme l'a suggéré Evil.Saien, de réfléchir à l’algorithme dont tu as besoin : c'est manifestement une division euclidienne ...

  9. #8
    inviteeecca5b6

    Re : problème avec scilab et la fonction fix

    Citation Envoyé par gloups13 Voir le message
    Sinon j'ai résolu le problème avec cette fonction:

    Code:
    numero2=pmodulo(numero,10);//Je sélectionne le deuxième chiffre
    Mais bon personnellement, j'aimerai bien savoir le pourquoi du comment.
    Cordialement.
    En fait, tu as l'équation numero = 10 * numero1 + numero2... Tu connais numero, tu connais numero1, on en déduit assez facilement que numero2 = numero - 10*numero1
    Pas besoin de diviser, pas besoin de fix pour numero2

    Il y a une manière encore plus simple, qui marche à absolument tous les coups sans même faire de boucle. Il suffit de convertir ton numéro en chaine de caractère et le tour est joué. En matlab ça donnerait :
    n_str = num2str(numero)

    Et voilà ! n_str(i) te donne le i-ème chiffre du numéro.

  10. #9
    gloups13

    Re : problème avec scilab et la fonction fix

    Bonjour,
    Désolé pour l'absence. Je vous remercie pour ces réponses et l'explication donnée par @Chanur.
    @Evil.Saien, votre technique de passer par une chaîne de caractère est excellente. Je vais l'utiliser pour résoudre pas mal de problème que j'avais résolu autrement mais en faisant des choses bizarres et compliquées.
    Encore une fois merci de votre aide.
    Je vais poursuivre cet algorithme en y incluant vos astuces.
    CDT

  11. #10
    invite0bbe92c0

    Re : problème avec scilab et la fonction fix

    Citation Envoyé par Chanur Voir le message
    Dans un ordinateur, les nombres sont écrit en binaire.
    1.2 et 1.3, en binaire, ont un nombre infini de décimales.
    Non; sauf à considérer le stockage "float" comme une généralité.

  12. #11
    inviteeecca5b6

    Re : problème avec scilab et la fonction fix

    Citation Envoyé par Bluedeep Voir le message
    Non; sauf à considérer le stockage "float" comme une généralité.
    Intrigué, j'ai essayé sur matlab exactement le même morceau de code que plus haut (en remplaçant fix par ceil, numero=12, numero1=1)
    Code:
    z=fix(10*(numero/10-numero1));//Je sélectionne le deuxième chiffre
    Et je trouve bien z=2.

  13. #12
    invite1c6b0acc

    Re : problème avec scilab et la fonction fix

    Citation Envoyé par Bluedeep Voir le message
    Non; sauf à considérer le stockage "float" comme une généralité.
    Je ne comprends pas.
    Je voulais juste dire que 1,2 s'écrit en binaire : 1,001100110011...
    et 1,3 : 1.0100110011...
    Les deux ont une suite infinie de chiffres.

Discussions similaires

  1. [SCILAB]Optimisation avec contraintes non linéaire dynamique sous scilab avec fmincon possible ?
    Par invite0ef6e499 dans le forum Logiciel - Software - Open Source
    Réponses: 1
    Dernier message: 30/06/2016, 18h20
  2. [scilab] Problème calcul dans fonction
    Par sebtux74 dans le forum Mathématiques du supérieur
    Réponses: 5
    Dernier message: 05/03/2010, 17h00
  3. [scilab]problème fichier de type fonction
    Par invite1cede1ba dans le forum Mathématiques du supérieur
    Réponses: 9
    Dernier message: 14/11/2009, 18h40
  4. probleme fonction fsolve scilab
    Par invite5ed89f6f dans le forum Mathématiques du supérieur
    Réponses: 6
    Dernier message: 20/07/2009, 15h02
  5. Problème avec Scilab
    Par invite2f949375 dans le forum Logiciel - Software - Open Source
    Réponses: 2
    Dernier message: 21/10/2008, 23h18