Algorithme codage
Répondre à la discussion
Affichage des résultats 1 à 27 sur 27

Algorithme codage



  1. #1
    nitnelav97

    Algorithme codage


    ------

    Bonsoir
    je cherche a créer un algorithme sur TI 82 pour permettre un transcodage entre les bases 2, 10 et 16 (seul certains comprendront, désolé pour les autres)
    j'ai quelques problèmes pour formuler mes calcul, ainsi que pour l'utilisation de ma calculette :/
    Merci à toute personne qui pourra m'aider

    PS: pour info je suis en 1ere STI2D SIN

    -----

  2. #2
    Gandhi33

    Re : Algorithme codage

    Bonsoir nitnelav97,

    Si ça t'intéresse, voici un programme de conversion de la base 10 vers n'importe quelle autre base et un autre qui passe de n'importe quelle base vers la base 10. C'est sur une TI 84 Plus C Silver Édition. Les programmes utilisent des listes, les fonctions seq, fill,sum et dim sur les listes et remainder qui calcule le reste d'une division euclidienne

    Code PHP:
    Input "Base?",A
    Disp 
    "Entre un nombre en base 10 et je vais te le convertir dans la base choisie"
    Input F

    1
    ->S
    200
    ->dim(L2
    Fill
    (3.1415926535897932384626433,L(2

    Repeat F
    =0

    remainder
    (F,-> L2(S      //on calcule le reste de la division de F par A (=le dernier chiffre en base A)
    (F-L2(S))/-> F              //on diminue la taille du nombre
    S+1->S                          //on calcule le nombre de chiffres du nombre cherché (S-1 chiffres)

    End

    For(X,S-1,1,-1)

    Disp L2(X)                //on affiche les chiffres 1 à 1
    Pause

    End 
    Pour le programme qui suit, je n'ai pas trouvé de moyen (je n'ai pas beaucoup cherché) pour que la calculatrice comprenne que le nombre que j'entre n'est pas en base 10. Il faut donc entrer les chiffres un à un.

    Code PHP:
    Input "Nombre de chiffres?",J
    Input 
    "Base?"B

    ClrAllLists
    J
    ->dim(L1
    J
    ->dim(L2
    J
    ->dim(L3
    seq
    (B^N,N,J-1,0,-1)->L2            //la liste 2 contient dans l'ordre décroissant toutes les puissance de B: il manque juste les coefficients

    Disp"Entrez les chiffres un à un"

    For(P,1,J)

    Input K
    K
    -> L1(P                  //on met tous les chiffres (coefficients) dans la liste L2

    L1(P)+L2(P)->L3(P.         //la liste L3 contient à présent une combinaison linéaire des puissances de B

    End

    Disp sum
    (L3      //la somme de tous les éléments de la liste 3 donne le nombre cherché 
    On peut éventuellement faire un programme et puis l'autre pour passer de n'importe quelle base à n'importe quelle autre base. On peut aussi rajouter à la fin d'un programme quelque chose du type
    Code PHP:
    prgmNOMDELAUTREPROGRAMME 
    pour effectuer deux programmes à la suite.

    Voilà j'espère que cela te sera utile.

    Cordialement

    Gandhi
    Dernière modification par Gandhi33 ; 25/11/2014 à 18h30.

  3. #3
    nitnelav97

    Re : Algorithme codage

    @gandhi33 je t'avoue franchement que tu m'as perdu... :$
    personnellement j'avais essayé de reproduire sur ma TI82 (peut etre un materiel inadapté je ne sais pas...) les technique que mon prof m'avat donné c'est a dire par exemple, pour passer d'une base 10 à une base 2 (ou 16), diviser par 2 (ou 16) le nombre de départ, en utilisant le reste de la division eucidienne.
    j'ai pensé faire ça en utilisant une boucle "TantQue". mais j'ai apparament un problème dans mon déroulement:
    -Prompt N
    -Tant Que PartEnt(N) > 0
    - N/2 [STO] N
    - If PartDec(N) [différent] 0
    - Then Disp 1
    - Elsa Disp 0
    - FinSI
    -Fin Tant Que

    Le problème est que la boucle ne se refait pas automatiquement...
    Vois tu mon erreur ?

  4. #4
    Gandhi33

    Re : Algorithme codage

    Bonsoir,

    C'est un bon début mais cela ne marche pas
    Premièrement, sache que tes chiffres seront affichés dans le mauvais ordre (unités , dizaines, ...) mais ce n'est pas bien grave.

    Ensuite, une erreur de conception:
    Regarde par exemple le cas n=5
    N prend la valeur 2.5
    Le programme affiche 1, ce qui est correct
    Mais ensuite, N prend la valeur 1.25 et le programme affiche donc 1 alors que ce devrait être 0
    En fait il faut utiliser le fait que

    dividende = quotient . diviseur + reste
    dividende = quotient . 2 + reste

    Tu veux que le quotient devienne le nouveau dividende, mais toi tu dis que

    Quotient=dividende/2

    Or c'est faux:

    Quotient=(dividende-reste)/2

    Aide-toi de cela

    Cordialement

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

    Re : Algorithme codage

    Bonjour,

    j'avais déjà pensé au problème de l'inversement des valeurs données...
    Par contre je crois ne pas pouvoir demander des valeur comme "le reste de la division de x par y'' ou encore ''la partie entière de ...". Alors j'ai essayé de contourner le problème en utilisant un logiciel d'algorithmie: Algobox (seulement sur ordinateur). Voir la pièce jointe.

    Le programme fonctionne correctement mais un problème persiste: un 1 (a la fin du nombre en base 2) ne s'affiche pas
    Par exemple, pour N=241 le programme affiche "0001111" donc %1111000 une fois les chiffre remis dans le bon ordre.
    Or le chiffre exacte (donné par mon prof) est %11110001 (un octet complet avec 8 bits)

    mais je n'arrive pas à voir où est le problème...
    Images attachées Images attachées  

  7. #6
    nitnelav97

    Re : Algorithme codage

    En fait après un autre vérification, c'est toujours le dernier bit qui manque. Par exemple, pour 10 en base 10, je devrais obtenir 0101 (soit %1010) et il me donne "101"...

  8. #7
    Gandhi33

    Re : Algorithme codage

    Bonsoir,

    Tu possèdes normalement sur ta calculatrice un catalogue dans lequel tu trouvera

    remainder(

    ipart(

    fpart(

    Ensuite, ton programme sur Alogobox est bien mais admet un défaut:

    Tout d'abord, considère les entiers n=10 et n=11. Ton programme affichera exactement la même chose pour les deux. En effet, la première opération est n <- floor (n/2). Or, floor (10/2) = floor (11/2)
    Je te laisse le soin de remarquer que le chiffre manquant détermine si le nombre est pair ou impair.
    L'erreur du programme réside dans le fait que tu dois afficher la première fois n%2 avant d'afficher (floor(n/2))%2. Il faut donc corriger ton programme pour s'arranger d'afficher n%2 avant de remplacer n par la partie entière de sa moitié.

    Cordialement

  9. #8
    nitnelav97

    Re : Algorithme codage

    J'ai en effet trouvé le catalogue dans ma calculatrice mais je n' trouve pas les trois commandes indiquées. Quelles pourrait être les commande en français (j'ai quelques truc en français et d'autres en anglais alors je ne sais lus trop ...) ?


    D'autre part, j'ai réussi à finir deux des 6 algorithmes (sur ordinateur): ceux pour passer de la base 10 aux bases 2 e 16. Il ne reste qu'un petit détail à régler (peu important) qui consiste à remplacer les 10, 11, 12, 13, 14 et 15 de la base 16 en A, B, C, D, E et F.
    Il me reste encore les autres à faire...

  10. #9
    Gandhi33

    Re : Algorithme codage

    Bonjour,

    Je pense que tu as

    Code PHP:
    PartEnt(
    PartDéc
    Dans ton catalogue.
    Pour les autres, je pense qu'il serait favorable d'essayer d'abord par toi-même.

    Cordialement

  11. #10
    nitnelav97

    Re : Algorithme codage

    Oui j'ai PartEnt() qui remplace le floo()mais je crois que le PartDec() ne me donne pas le reste de la divison euclidienne, si ?

  12. #11
    Gandhi33

    Re : Algorithme codage

    Bonsoir,

    Non évidemment. Comme son nom l'indique, cela calcule la partie décimale du réel entré.
    Pour les 10, 11, 12,... quelques Si suffisent.
    As-tu essayé les autres programmes?

    Cordialement

  13. #12
    nitnelav97

    Re : Algorithme codage

    Au pire pour les lettres de l’hexadécimal je peux e débrouiller je sais à qui correspondent chaque nombre.

    Non je ne me suis même pas encore penché sur les autres programmes, il faut encore que je réfléchisse à la méthode à suivre en tenant compte des possibilités qu'offrent ma calculatrice...
    Mais déjà tu m'as pas mal aidé pour les deux premier c'est cool de ta part !

  14. #13
    Gandhi33

    Re : Algorithme codage

    Bonsoir,

    Pour passer d'une base quelconque en base 10, l'idée est de demander chaque chiffre à l'utilisateur et d'appliquer simplement la définition de l'écriture en une certaine base. Par exemple, 1011 en base 2 est . Si l'on entre ces quatre chiffres, il suffit de calculer cette somme et de l'afficher à l'écran.

    Cordialement

  15. #14
    nitnelav97

    Re : Algorithme codage

    Mais comment le programme saura de combien de symboles est constitué le nombre de départ ? A moins de ne le rentrer moi-même, je ne suis pas sûr de lui faire calculer tout seul...

  16. #15
    nitnelav97

    Re : Algorithme codage

    ...et il faudrait que je donne chaque symbole pour qu'il fasse le remplacement de x.2*y*
    à moins bien sûr qu'il y ait une autre solution...

    Pour reprendre l'exemple de 1011, il faudrait que je lui dise qu'il y a 4 symboles, que le premier es un 1, le deuxième est un 0, etc...
    Je pense qu'il faut que je trouve une autre solution

  17. #16
    Gandhi33

    Re : Algorithme codage

    Bonsoir,

    J'ai réfléchi à la question d'entrer les nombres un par un. J'en suis arrivé à la conclusion qu'il le faut impérativement, en tout cas pour des bases supérieures à 10.

    Ensuite, pour la question du nombre de chiffres, je vois deux solutions:
    Soit tu demandes au préalable le nombre de chiffres
    Soit tu entres les chiffres de droite à gauche, à partir des unités vers les dizaines, centaines, ...

    Cordialement

  18. #17
    nitnelav97

    Re : Algorithme codage

    Bonsoir,

    même pour une base 2 je crois qu'il est indispensable de les entrer tous un par un...
    Ensuite je pense pouvoir me débrouiller avec une phrase qui me demande combien il y a de nombres, au moins pour la base 2 --> 10

  19. #18
    Gandhi33

    Re : Algorithme codage

    Bonsoir,

    Non pour 2-->10 pas besoin d'entrer tous les chiffres un par un ni du nombre de chiffres.
    La difficulté est que la calculatrice considère le nombre entré comme écrit en base 10 et il faut donc agir en conséquence.
    Code PHP:
    Input n

    0
    ->p
    0
    ->s

    While n>0

     
    //Ici on veut trouver le dernier chiffre (v) de n//

     
    If fpart(n/10) =0
     Then
     0
    ->v
     
    Else
     
    1->v
     End

     
    //Là on calcule simplement le nombre recherché s//
     
    s+v.2^-> s

     p
    +1->p

     
    //Maintenant on enlève le dernier chiffre pour pouvoir recommencer l'opération ci-dessus//
     
    ipart(n/10)->n

    End

    Disp s 
    Voilà je n'ai pas essayé je pense que cela doit fonctionner.

    Cordialement

  20. #19
    nitnelav97

    Re : Algorithme codage

    A quoi correspondent les fonction iPart et fPart exactement ?

  21. #20
    jiherve

    Re : Algorithme codage

    bonsoir,
    c'est équivalent à ent et frac, les parties entières et fractionnaires.
    JR
    l'électronique c'est pas du vaudou!

  22. #21
    nitnelav97

    Re : Algorithme codage

    D'accord c'est ce que je pensais...
    Alors j'ai un problème pendant l'execution e l'algorithme sur Algobos... (piece jointe)/
    N'ayant pas la fonction PartDec sur mon logiciel, j'ai juste remplacé par "(reste de a division de N par 10)*N" afin d'avoir la partie décimale du nombre. Est-ce exacte ?
    Images attachées Images attachées  

  23. #22
    Ashrod

    Re : Algorithme codage

    Bonsoir,

    Je viens de voir la discussion et je me suis dit qu'il y a un autre moyen que d'entrer les "chiffres" un à un (si je comprend bien, en appuyant sur enter entre les frappes).

    L'idée est dans l'utilisation de la fonction getkey et son utilisation pour reconnaître la touche enfoncée.

    En fait, dans ce mode, la calculette attend l'appui sur une touche (en fait toutes les touches à part la touche on/off et peut-être enter). Une petite routine peut capturer cette séquence d'appui de touches et l'interpréter comme l'insertion d'un nombre (je pense à l'hexadécimal pour lequel les touches des lettres A à F sont disjointes des touches des chiffres 0-9) l'appui sur une touche balise permettrait d'arrêter le processus de captation et en utilisant une fonction output, il serait même possible d'afficher le nombre à la volée lors de l'insertion (comme vous le feriez pour un nombre "classique").

    De plus, parallèlement à cet affichage peut être conditionné un système de stockage des valeurs sous forme de liste mais surtout dans une base donnée qui est totalement inconnue de l'utilisateur (c'est la "magie" du programmeur de rendre transparente l'utilisation de son programme aux yeux de l'utilisateur).

    Ensuite, comme les listes sont facilement manipulables, les conversions d'une base à l'autre font l'objet d'un seul sous programme qui transforme la liste en sachant sa base de départ et la base finale voulue. Il est même possible de prévoir de convertir plusieurs fois le même nombre dans différentes bases (pour ne pas avoir à le réinsérer plusieurs fois à chaque conversion demandée).

    J'espère être clair.

    Si c'est vraiment nécessaire, j'essaierai de faire un prototype mais ca fais longtemps que je n'ais plus touché à ma 82 (ancien modèle donc forcément compatible puisque le jeu d'instructions de base se retrouve dans le nouveau) et je n'ais pas beaucoup de temps devant moi.

    Enfin, je ferais le possible.

    A bientôt

  24. #23
    nitnelav97

    Re : Algorithme codage

    @ashrod Alors je t'avoue que je n'ai pas tout saisis mais je dispose d'une calculatrice classique de lycée (TI 82) et je ne crois pas avoir une telle fonctionnalité...
    J'ai aussi le logiciel Algobox sur ordi mais je ne pense pas pouvoir réaliser ce que tu m'as conseillé :/
    Mais merci à tous quand même je prends toutes les idées qui m'arrivent

  25. #24
    Gandhi33

    Re : Algorithme codage

    Citation Envoyé par Ashrod Voir le message
    Bonsoir,

    Je viens de voir la discussion et je me suis dit qu'il y a un autre moyen que d'entrer les "chiffres" un à un (si je comprend bien, en appuyant sur enter entre les frappes).

    L'idée est dans l'utilisation de la fonction getkey et son utilisation pour reconnaître la touche enfoncée.

    En fait, dans ce mode, la calculette attend l'appui sur une touche (en fait toutes les touches à part la touche on/off et peut-être enter). Une petite routine peut capturer cette séquence d'appui de touches et l'interpréter comme l'insertion d'un nombre (je pense à l'hexadécimal pour lequel les touches des lettres A à F sont disjointes des touches des chiffres 0-9) l'appui sur une touche balise permettrait d'arrêter le processus de captation et en utilisant une fonction output, il serait même possible d'afficher le nombre à la volée lors de l'insertion (comme vous le feriez pour un nombre "classique").

    De plus, parallèlement à cet affichage peut être conditionné un système de stockage des valeurs sous forme de liste mais surtout dans une base donnée qui est totalement inconnue de l'utilisateur (c'est la "magie" du programmeur de rendre transparente l'utilisation de son programme aux yeux de l'utilisateur).

    Ensuite, comme les listes sont facilement manipulables, les conversions d'une base à l'autre font l'objet d'un seul sous programme qui transforme la liste en sachant sa base de départ et la base finale voulue. Il est même possible de prévoir de convertir plusieurs fois le même nombre dans différentes bases (pour ne pas avoir à le réinsérer plusieurs fois à chaque conversion demandée).

    J'espère être clair.

    Si c'est vraiment nécessaire, j'essaierai de faire un prototype mais ca fais longtemps que je n'ais plus touché à ma 82 (ancien modèle donc forcément compatible puisque le jeu d'instructions de base se retrouve dans le nouveau) et je n'ais pas beaucoup de temps devant moi.

    Enfin, je ferais le possible.

    A bientôt
    Bonsoir,

    Tout d'abord, le but ici est d'aider nitnelav97 à créer un programme de son niveau, c'est à dire sans listes, getkey, etc.

    Ensuite, l'utilisation de getkey est une bonne idée bien qu'elle admette deux inconvénients:
    -On est limité au nombre de touches de la calculatrice
    -Le programme va faire 3 kilomètres de long si l'on doit à chaque touche associer un nombre
    Sans parler de l'utilisation de output qui sera beaucoup de chipotage et encore des lignes de code...

    Personnellement, je considère que ce n'est pas très gênant pour l'utilisateur d'entrer le nombre de chiffres et les les chiffres un à un mais bon, chacun ses goûts.

    Voilà donc un programme sans getkey pour passer d'une base à une autre.
    Code PHP:
    0->S
    1
    ->F
    200
    ->dim(L2
    Fill
    (1,L(2

    Input 
    "Nombre de chiffres?",N
    Input 
    "Base de départ?"B
    Input 
    "Base d'arrivée?"W

    Disp
    "Entrez les chiffres un à un"

    For(U,N-1,0,-1)

       
    Input G
       S
    +G.B^U->S

    End

    Repeat S
    =0

       remainder
    (S,-> L2(F     
       
    (S-L2(F))/-> S          
       F
    +1->F                     

    End

    For(X,F-1,1,-1)

       
    Disp L2(X)  
       
    Pause

    End 
    Cordialement

  26. #25
    nitnelav97

    Re : Algorithme codage

    Gandhi33 il y a des fonction dans ton programme dont je ne dispose pas malheureusement comme par exemple Repeat ou Remainder ou d'autres... Ce doit être à cause des différences des logiciels que nous utilisons.

    j'ai réussi a réaliser l'algorithme que tu m'as proposé quelques jours auparavant et il y a un problème: Input n

    _0->p
    _0->s
    _While n>0
    //Ici on veut trouver le dernier chiffre (v) de n//
    _If fpart(n/10) =0
    __Then
    __0->v
    ___Else
    ___1->v
    _End
    //Là on calcule simplement le nombre recherché s//
    _ s+v.2^p -> s
    _p+1->p
    //Maintenant on enlève le dernier chiffre pour pouvoir recommencer l'opération ci-dessus//
    _ipart(n/10)->n
    _End
    _Disp s


    Il me détecte une erreur à l'étape sur "Si...''
    Alors j'ai peut être une erreur au niveau des traductions de langage entre ton logiciel et le mien... (fPart et iPart ?)

  27. #26
    Gandhi33

    Re : Algorithme codage

    Quel genre d'erreur ? Division par 0, domaine, variable indéfinie, ... Ou simplement erreur de syntaxe?

    Il ne faut pas d'espace avant le =

    Si Frac//ou PartFrac je ne sais pas//(N/10)=0
    Alors
    ...

  28. #27
    nitnelav97

    Re : Algorithme codage

    Alors j'ai réussi à contourner le problème de ce que je comprenais pas tout à fait en modifiant quelques lignes du programme. je l'ai testé à la main en pas-à-pas et il marche parfaitement bien mais une fois transcrit sur l'ordi, il me donne toujours une erreur au "Si..." Or je ne vois pas mon erreur...
    Regarde la pice jointe et dis moi si tu vois ce qu'il y a à corriger stp parce que là je ne sais plus trop...


    Ensuite j'ai essayé de retranscrire aussi les programme déjà terminés sur ma calculatrice TI82 et là encore les appareils sont contre moi et ma calculette ne me donne qu'un seul chiffre (par exemple un 1 ou un 0 quand je veux passer d'une base 10 à 2), c'est à dire qu'il ne recommence pas la boucle TantQue alors que la condition n'est pas là pour arrêter la boucle...
    Je suis perdu
    Images attachées Images attachées  

Discussions similaires

  1. Codage
    Par matheome dans le forum Mathématiques du supérieur
    Réponses: 0
    Dernier message: 05/04/2013, 09h10
  2. TPE sur le pixels, codage binaire, codage hexadécimal..
    Par invite2dd170e6 dans le forum TPE / TIPE et autres travaux
    Réponses: 0
    Dernier message: 09/11/2012, 16h16
  3. codage possible ??
    Par invite64bb1f45 dans le forum Électronique
    Réponses: 2
    Dernier message: 23/10/2009, 18h39
  4. codage
    Par invitef4609854 dans le forum Électronique
    Réponses: 0
    Dernier message: 02/04/2007, 17h18
  5. TPE codage possible?
    Par inviteb893c8c2 dans le forum TPE / TIPE et autres travaux
    Réponses: 2
    Dernier message: 11/12/2005, 17h06