| Approximation successive |
| Auteur |
Message |
ToTo
Autorisation : Membre
Nb de messages : 104
Inscrit le : Ven 07 Nov 2008, 11:38
|
Posté le : Mar 18 Nov 2008, 17:51
|
|
|
Bonsoir, j'aimerai programmé un p'tit programme tout bête.
Pour ceux qui connaissent j'aimerai faire un programme qui fait des approximations successives.
Pour ceux qui ne connaisse pas le termes, j'explique en quoi consiste le programme.
-Dans un premier temps il faut choisir un nombre entre 0 et 256 ( soit 2^8 ).
-Ensuite la calculette me demandera alors si le nombre choisie est inférieur, supérieur ou égale à 128.
- ..Si le chiffre choisie est égale à 128 -> Fin du programme
....Si le chiffre est inférieur à 128 -> Le MSB ( Most Significant Bit / en binaire ) est alors égale à 0.
....Si le chiffre est supérieur à 128 -> Le MSB est alors égale à 1.
- Dans ces 2 derniers cas il faut refaire une division par 2.
- Et ainsi desuite, jusqu'à trouvé la bonne valeur.
Mon 1er problème est le suivant: Je ne sais pas comment enregistrer une valeur.
|
 |
|
| |
coc5
Autorisation : Membre
Nb de messages : 879
Inscrit le : Sam 16 Jui 2007, 13:37
|
Posté le : Mar 18 Nov 2008, 19:15
|
|
|
Je développerais quand j'aurais le temps, mais pense à utilise des Listes 
|
 |
|
| |
ToTo
Autorisation : Membre
Nb de messages : 104
Inscrit le : Ven 07 Nov 2008, 11:38
|
Posté le : Mar 18 Nov 2008, 20:01
|
|
|
J'ai essayé avec les listes, mais c'est quelque chose que je ne maitrise pas.
Je sais comment en créé une, comment la modifié mais c'est tout. Je ne vois pas comment l'insérer dans le programme.
Si personne ne me répond avant demain soir, je le créerai le programme de façon longue.
|
 |
|
| |
coc5
Autorisation : Membre
Nb de messages : 879
Inscrit le : Sam 16 Jui 2007, 13:37
|
Posté le : Mar 18 Nov 2008, 22:30
|
|
|
Je te conseillais cela pour stocker les nombres binaires : {1,0,1,0,0,0,0,1} par exemple.
Mais à la relecture je me rends compte que ce programme transforme en fait un nombre décimale en binaire ^^
1- D'abord utilise la boucle Repeat.
| Code | Repeat N=B
//ton code
End |
La boucle va donc se répété tant que la division de ton nombre (N) par 2 soit différente du repère correspondant (256,128,64,32,16,8,4,2,1)
2-Initialiser.
| Code |
Input "Nombre: ",N
0->I:256->B
DelVar L1
|
On a ainsi N, le nombre a transformer, et I qui jouera le rôle de compteur pour savoir à quelle étape on est. Il ne faut pas oublier B qui servira de repère (on pourra remplacer par 256/(2^I) mais ça risque de t'embrouiller.
On supprime également L1 qui pourrait avoir été utilisée dans un autre programme mal codé, et qui pourrait donc contenir des nombres indésirables (DelVar L1).
3-Coder l'algorithme !
| Code |
int(N->N
N/2->N:B/2->B
If N<B:0->L1(1+dim(L1
If N>B:1->L1(1+dim(L1
|
Donc dans l'ordre, on garde seulement la partie entière de N (on traite des nombres entiers, attention !), puis on divise par deux le nombre et le repère, et on vérifie enfin si le nombre est supérieur ou inférieur au repère, et on insère le nombre voulu dans le Ième caractère de la liste (1+dim(L1) sert à insérer au bon endroit de la liste, i.e. à la fin).
Ce qui donne :
| Code | Input "Nombre: ",N
0->I:256->B
DelVar L1
Repeat N=B
int(N->N
N/2->N:B/2->B
If N<B:0->L1(1+dim(L1
If N>B:1->L1(1+dim(L1
End
8->dim(L1
For(I,1,8
Output(1,I,L1(I
End
|
(La fin sert à s'assurer des 8 bits du nombres (on complète par des 0), et à afficher le nombre en parcourant la liste).
Ce code n'est pas parfait, on peut ajouter pleins de trucs mais le principal est là, le nécessaire 
Ps: Si tu joues au jeu des fautes, tu en as fais plus de trois ddans ton précédent message -_-'
|
 |
|
| |
ToTo
Autorisation : Membre
Nb de messages : 104
Inscrit le : Ven 07 Nov 2008, 11:38
|
Posté le : Mer 19 Nov 2008, 14:07
|
|
|
J'ai une erreur à cette ligne :
| Code | | If N<B:0->L1(1+dim(L1 |
|
 |
|
| |
coc5
Autorisation : Membre
Nb de messages : 879
Inscrit le : Sam 16 Jui 2007, 13:37
|
Posté le : Mer 19 Nov 2008, 15:30
|
|
|
Remplace le DelVar L1 par un :
Merci, juste que j'ai déjà vu des remarques du genre juste pour titiller. Ce n'en est pas une donc Hs clos.
|
 |
|
| |
ToTo
Autorisation : Membre
Nb de messages : 104
Inscrit le : Ven 07 Nov 2008, 11:38
|
Posté le : Mer 19 Nov 2008, 17:50
|
|
|
Ça ne marche toujours pas 
|
 |
|
| |
coc5
Autorisation : Membre
Nb de messages : 879
Inscrit le : Sam 16 Jui 2007, 13:37
|
Posté le : Mer 19 Nov 2008, 18:23
|
|
|
Quelle est l'erreur ?
|
 |
|
| |
ToTo
Autorisation : Membre
Nb de messages : 104
Inscrit le : Ven 07 Nov 2008, 11:38
|
Posté le : Mer 19 Nov 2008, 18:25
|
|
|
Toujours la même ligne.
|
 |
|
| |
coc5
Autorisation : Membre
Nb de messages : 879
Inscrit le : Sam 16 Jui 2007, 13:37
|
Posté le : Mer 19 Nov 2008, 18:49
|
|
|
Non mais quel type d'erreur ?
|
 |
|
| |
ToTo
Autorisation : Membre
Nb de messages : 104
Inscrit le : Ven 07 Nov 2008, 11:38
|
Posté le : Mer 19 Nov 2008, 19:29
|
|
|
ERR: DIM INVALIDE
|
 |
|
| |
coc5
Autorisation : Membre
Nb de messages : 879
Inscrit le : Sam 16 Jui 2007, 13:37
|
Posté le : Mer 19 Nov 2008, 20:27
|
|
|
Bon fais
alors.
|
 |
|
| |
ToTo
Autorisation : Membre
Nb de messages : 104
Inscrit le : Ven 07 Nov 2008, 11:38
|
Posté le : Jeu 20 Nov 2008, 18:48
|
|
|
Du coup quand je choisie mon chiffre, juste après il m'écrit:
| Citer | 200SIE UN NOMBRE
ENTRE 0 ET 256
NB= 150 |
Et pour d'autre valeur de NB j'ai toujours ce 200 
|
 |
|
| |
coc5
Autorisation : Membre
Nb de messages : 879
Inscrit le : Sam 16 Jui 2007, 13:37
|
Posté le : Jeu 20 Nov 2008, 19:08
|
|
|
Qu'est ce que NB ?
Sinon rajoute un ClrHome avant le Output() (EffDessin en français je crois).
|
 |
|
| |
ToTo
Autorisation : Membre
Nb de messages : 104
Inscrit le : Ven 07 Nov 2008, 11:38
|
Posté le : Jeu 20 Nov 2008, 19:13
|
|
|
Le NB, c'est en fait N.
Je EffEcr je l'ai ajouté où tu me la dis, mais j'obtiens toujours le code suivant:
|
 |
|
| |
coc5
Autorisation : Membre
Nb de messages : 879
Inscrit le : Sam 16 Jui 2007, 13:37
|
Posté le : Ven 21 Nov 2008, 10:48
|
|
|
Tu n'as pas du bien recopier la fin du code car même si il y a une erreur tu devrais avoir un nombre à 8 bits, dû à la boucle For().
|
 |
|
| |
ToTo
Autorisation : Membre
Nb de messages : 104
Inscrit le : Ven 07 Nov 2008, 11:38
|
Posté le : Ven 21 Nov 2008, 20:43
|
|
|
Je te recopie exactement ce que j'ai:
| Code | EffEcr
Disp "CHOISIE UN NOMBRE","ENTRE 0 ET 256"
Input "NB= ",N
0->I/256->B
1->dim(L1
Reapeat N=B
partEnt(N->N
N/2->N/B/2->B
If N<B
0->L1(1+dim(L1
If N>B
1->L1(1+dim(L1
For(I,1,8
EffEcr
Output(1,I,L1(I
End
ENd |
J'ai essayé le cas le plus facile pour le programme soit 256. J'ai le droit à 7espaces et un 0.
|
 |
|
| |
coc5
Autorisation : Membre
Nb de messages : 879
Inscrit le : Sam 16 Jui 2007, 13:37
|
Posté le : Sam 22 Nov 2008, 11:38
|
|
|
Tu as mis EffEcran devant le Output() à la fin, ça ne peut pas afficher correctement dans ce cas là^^
Il faut le mettre avant le For().
|
 |
|
| |
ToTo
Autorisation : Membre
Nb de messages : 104
Inscrit le : Ven 07 Nov 2008, 11:38
|
Posté le : Sam 22 Nov 2008, 21:46
|
|
|
J'ai bien une sortie sur 8 bits ( pour la valeur 256 ) mais ça ne marche que pour cette valeur et j'obtiens 20000000 -__-'
|
 |
|
| |
coc5
Autorisation : Membre
Nb de messages : 879
Inscrit le : Sam 16 Jui 2007, 13:37
|
Posté le : Sam 22 Nov 2008, 22:04
|
|
|
256 n'est pas codable sur 8 bits -_-
c'est 255 la valeur maximal.
|
 |
|
| |
ToTo
Autorisation : Membre
Nb de messages : 104
Inscrit le : Ven 07 Nov 2008, 11:38
|
Posté le : Sam 22 Nov 2008, 22:22
|
|
|
Exacte. lol.
Bon bah rien ne marche alors !
|
 |
|
| |
coc5
Autorisation : Membre
Nb de messages : 879
Inscrit le : Sam 16 Jui 2007, 13:37
|
Posté le : Dim 23 Nov 2008, 14:19
|
|
|
Bas essaye un nombre de 0 à 255.
|
 |
|
| |
ToTo
Autorisation : Membre
Nb de messages : 104
Inscrit le : Ven 07 Nov 2008, 11:38
|
Posté le : Dim 23 Nov 2008, 15:28
|
|
|
J'ai toujours le droit à 20000000
|
 |
|
| |
coc5
Autorisation : Membre
Nb de messages : 879
Inscrit le : Sam 16 Jui 2007, 13:37
|
Posté le : Dim 23 Nov 2008, 15:58
|
|
|
Ok donc ça voudrait dire que l'algo ne touche pas à la liste de toute la boucle...
Déjà fait {0->L1 au début la place de dim().
Tu ne devrais avoir plus que des 0 à la fin. Maintenant je regarde le code et quand j'aurais compris le problème je te le dis.
Edit: il est impossible de n'avoir que l'algo ne réagisse pas, mais pour savoir si l'erreur vient d'une erreur de recopiage ou pas, remplace {0-L1 par {0,1,2,3,4,5,6,7,8->L1
L'algo ne sera pas bon mais permettra de savoir où est l'erreur.
|
 |
|
| |
ToTo
Autorisation : Membre
Nb de messages : 104
Inscrit le : Ven 07 Nov 2008, 11:38
|
Posté le : Dim 23 Nov 2008, 17:20
|
|
|
Ok, je te dis ça ce soir.
|
 |
|
| |
coc5
Autorisation : Membre
Nb de messages : 879
Inscrit le : Sam 16 Jui 2007, 13:37
|
Posté le : Lun 24 Nov 2008, 21:54
|
|
|
Alors qu'en est-il ?
|
 |
|
| |
ToTo
Autorisation : Membre
Nb de messages : 104
Inscrit le : Ven 07 Nov 2008, 11:38
|
Posté le : Mar 25 Nov 2008, 18:11
|
|
|
Désolé je n'ai pas pu me connecté plutôt.
J'ai recopié ce que tu m'as dit mais il met beaucoup de temps à m'écrire 01234567.
La sortie est sur 8 bits mais c'est tout ce qu'on a. 
|
 |
|
| |
coc5
Autorisation : Membre
Nb de messages : 879
Inscrit le : Sam 16 Jui 2007, 13:37
|
Posté le : Mar 25 Nov 2008, 21:50
|
|
|
Au vu du résultat, le verdict est sans appelle : Une erreur de recopiage. Car ça voudrait dire que les nombres que tu as rentré ne sont ni supérieurs à 128 ni inférieur 128 ni égale à 128
Dans chacun de ces cas mon algo modifie la liste. Si elle n'est pas modifiée c'est donc que l'un des "test" de N est mal recopié.
|
 |
|
| |
ToTo
Autorisation : Membre
Nb de messages : 104
Inscrit le : Ven 07 Nov 2008, 11:38
|
Posté le : Sam 29 Nov 2008, 12:39
|
|
|
Je n'ai pas trouvé l'erreur à part si c'est le dim(
Sinon j'ai nouveau code mais beaucoup plus long et je ne sais pas si il marche:
EffEcr_____________________________// J'efface l'écran
Input N__________________________ // Je choisie un nombre entre 0 et 255
{256,128,64,32,16,8,4,2,1}->L4______ // Je donne 9 valeurs dans la liste L4
L4(1)/2->B________________________// 256/2=128 128 est la nouvelle valeur de B
If N<B ___________________________// Si le nombre choisie est inférieure 128
Them
chaîne(L5,{0})->L5(1)______________// {0} est la 1ere valeur dans la liste L5
If N>B
Them
chaîne(L5,{1})->L5(1)______________// {1} est la 1ere valeur dans la liste L5
N-128->N // Je soustrais 128 au chiffre choisie
Pause
Goto A
L4(2)/2->B
If N<B
Them
chaîne(L5,{0})->L5(2)
If N>B
Them
chaîne(L5,{1})->L5(2)
N-64->N
Pause
Goto A
L4(3)/2->B
If N<B
Them
chaîne(L5,{0})->L5(3)
If N>B
Them
chaîne(L5,{1})->L5(3)
N-32->N
Pause
Goto A
L4(4)/2->B
If N<B
Them
chaîne(L5,{0})->L5(4)
If N>B
Them
chaîne(L5,{1})->L5(4)
N-16->N
Pause
Goto A
L4(5)/2->B
If N<B
Them
chaîne(L5,{0})->L5(5)
If N>B
Them
chaîne(L5,{1})->L5(5)
N-8->N
Pause
Goto A
L4(6)/2->B
If N<B
Them
chaîne(L5,{0})->L5(6)
If N>B
Them
chaîne(L5,{1})->L5(6)
N-4->N
Pause
Goto A
L4(7)/2->B
If N<B
Them
chaîne(L5,{0})->L5(7)
If N>B
Them
chaîne(L5,{1})->L5(7)
N-2->N
Pause
Goto A
L4( 8 )/2->B
If N<B
Them
chaîne(L5,{0})->L5( 8 )
If N>B
Them
chaîne(L5,{1})->L5( 8 )
Pause
Lbl A
If N=B
8->dim(L5)______________________// Rajoute des 0 devant la suite de donnée binaire sur 8 bits
Disp L5__________________________// M'affiche la donné binaire sur 8 bits, soit le nombre de départ en binaire.
En gros ca donne ca ! Mais pour le moment il ne peut pas marcher !
-En vert c'est la partie du programme qui me dit que si N=B le programme ce termine, mais si N est différent de B j'aimerai renvoyé le programme au bon endroit mais je ne voit pas comment faire :/
-Les Pause ne servent certainement à rien
|
 |
|
| |
Google_AdSense
|
Publicité
|
|
|
|
| |
ToTo
Autorisation : Membre
Nb de messages : 104
Inscrit le : Ven 07 Nov 2008, 11:38
|
Posté le : Mer 03 Déc 2008, 16:19
|
|
|
Help ! Je ne sais toujours pas comment programmer =/
|
 |
|
| |
coc5
Autorisation : Membre
Nb de messages : 879
Inscrit le : Sam 16 Jui 2007, 13:37
|
Posté le : Mer 03 Déc 2008, 22:06
|
|
|
Je ne sais pas trop quoi dire car j'ai recopié mon programme et il marche...
Vérifie encore et si non j'aviserais =/
|
 |
|
| |
ToTo
Autorisation : Membre
Nb de messages : 104
Inscrit le : Ven 07 Nov 2008, 11:38
|
Posté le : Jeu 04 Déc 2008, 17:02
|
|
|
Ok, j'me fais ça dès que je peux.
|
 |
|
| |
ToTo
Autorisation : Membre
Nb de messages : 104
Inscrit le : Ven 07 Nov 2008, 11:38
|
Posté le : Mer 10 Déc 2008, 14:27
|
|
|
Je ne vais pas y arrivé avec ce programme =/
J'ai une erreur "DIM INVALIDE".
Ca peu être du à quoi ?
|
 |
|
| |