Poster un nouveau sujet Poster une réponse
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   Citer 

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.

 Adresse email Haut de page Bas de page 
 
coc5
Avatar

Autorisation : Membre
Nb de messages : 879
Inscrit le : Sam 16 Jui 2007, 13:37
Posté le : Mar 18 Nov 2008, 19:15   Citer 

Je développerais quand j'aurais le temps, mais pense à utilise des Listes winkle.gif

 Adresse email Haut de page Bas de page 
 
ToTo



Autorisation : Membre
Nb de messages : 104
Inscrit le : Ven 07 Nov 2008, 11:38
Posté le : Mar 18 Nov 2008, 20:01   Citer 

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.

 Adresse email Haut de page Bas de page 
 
coc5
Avatar

Autorisation : Membre
Nb de messages : 879
Inscrit le : Sam 16 Jui 2007, 13:37
Posté le : Mar 18 Nov 2008, 22:30   Citer 

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 winkle.gif

Ps: Si tu joues au jeu des fautes, tu en as fais plus de trois ddans ton précédent message -_-'

 Adresse email Haut de page Bas de page 
 
ToTo



Autorisation : Membre
Nb de messages : 104
Inscrit le : Ven 07 Nov 2008, 11:38
Posté le : Mer 19 Nov 2008, 14:07   Citer 

J'ai une erreur à cette ligne :


Code
If N<B:0->L1(1+dim(L1



 Adresse email Haut de page Bas de page 
 
coc5
Avatar

Autorisation : Membre
Nb de messages : 879
Inscrit le : Sam 16 Jui 2007, 13:37
Posté le : Mer 19 Nov 2008, 15:30   Citer 

Remplace le DelVar L1 par un :


Code
0->dim(L1



Merci, juste que j'ai déjà vu des remarques du genre juste pour titiller. Ce n'en est pas une donc Hs clos.

 Adresse email Haut de page Bas de page 
 
ToTo



Autorisation : Membre
Nb de messages : 104
Inscrit le : Ven 07 Nov 2008, 11:38
Posté le : Mer 19 Nov 2008, 17:50   Citer 

Ça ne marche toujours pas sad.gif

 Adresse email Haut de page Bas de page 
 
coc5
Avatar

Autorisation : Membre
Nb de messages : 879
Inscrit le : Sam 16 Jui 2007, 13:37
Posté le : Mer 19 Nov 2008, 18:23   Citer 

Quelle est l'erreur ?

 Adresse email Haut de page Bas de page 
 
ToTo



Autorisation : Membre
Nb de messages : 104
Inscrit le : Ven 07 Nov 2008, 11:38
Posté le : Mer 19 Nov 2008, 18:25   Citer 

Toujours la même ligne.

 Adresse email Haut de page Bas de page 
 
coc5
Avatar

Autorisation : Membre
Nb de messages : 879
Inscrit le : Sam 16 Jui 2007, 13:37
Posté le : Mer 19 Nov 2008, 18:49   Citer 

Non mais quel type d'erreur ?

 Adresse email Haut de page Bas de page 
 
ToTo



Autorisation : Membre
Nb de messages : 104
Inscrit le : Ven 07 Nov 2008, 11:38
Posté le : Mer 19 Nov 2008, 19:29   Citer 

ERR: DIM INVALIDE

 Adresse email Haut de page Bas de page 
 
coc5
Avatar

Autorisation : Membre
Nb de messages : 879
Inscrit le : Sam 16 Jui 2007, 13:37
Posté le : Mer 19 Nov 2008, 20:27   Citer 

Bon fais

Code
1->dim(L1


alors.

 Adresse email Haut de page Bas de page 
 
ToTo



Autorisation : Membre
Nb de messages : 104
Inscrit le : Ven 07 Nov 2008, 11:38
Posté le : Jeu 20 Nov 2008, 18:48   Citer 

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 sad.gif

 Adresse email Haut de page Bas de page 
 
coc5
Avatar

Autorisation : Membre
Nb de messages : 879
Inscrit le : Sam 16 Jui 2007, 13:37
Posté le : Jeu 20 Nov 2008, 19:08   Citer 

Qu'est ce que NB ?
Sinon rajoute un ClrHome avant le Output() (EffDessin en français je crois).

 Adresse email Haut de page Bas de page 
 
ToTo



Autorisation : Membre
Nb de messages : 104
Inscrit le : Ven 07 Nov 2008, 11:38
Posté le : Jeu 20 Nov 2008, 19:13   Citer 

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:


Code
  0



 Adresse email Haut de page Bas de page 
 
coc5
Avatar

Autorisation : Membre
Nb de messages : 879
Inscrit le : Sam 16 Jui 2007, 13:37
Posté le : Ven 21 Nov 2008, 10:48   Citer 

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().

 Adresse email Haut de page Bas de page 
 
ToTo



Autorisation : Membre
Nb de messages : 104
Inscrit le : Ven 07 Nov 2008, 11:38
Posté le : Ven 21 Nov 2008, 20:43   Citer 

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.

 Adresse email Haut de page Bas de page 
 
coc5
Avatar

Autorisation : Membre
Nb de messages : 879
Inscrit le : Sam 16 Jui 2007, 13:37
Posté le : Sam 22 Nov 2008, 11:38   Citer 

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().

 Adresse email Haut de page Bas de page 
 
ToTo



Autorisation : Membre
Nb de messages : 104
Inscrit le : Ven 07 Nov 2008, 11:38
Posté le : Sam 22 Nov 2008, 21:46   Citer 

J'ai bien une sortie sur 8 bits ( pour la valeur 256 ) mais ça ne marche que pour cette valeur et j'obtiens 20000000 -__-'

 Adresse email Haut de page Bas de page 
 
coc5
Avatar

Autorisation : Membre
Nb de messages : 879
Inscrit le : Sam 16 Jui 2007, 13:37
Posté le : Sam 22 Nov 2008, 22:04   Citer 

256 n'est pas codable sur 8 bits -_-
c'est 255 la valeur maximal.

 Adresse email Haut de page Bas de page 
 
ToTo



Autorisation : Membre
Nb de messages : 104
Inscrit le : Ven 07 Nov 2008, 11:38
Posté le : Sam 22 Nov 2008, 22:22   Citer 

Exacte. lol.
Bon bah rien ne marche alors !

 Adresse email Haut de page Bas de page 
 
coc5
Avatar

Autorisation : Membre
Nb de messages : 879
Inscrit le : Sam 16 Jui 2007, 13:37
Posté le : Dim 23 Nov 2008, 14:19   Citer 

Bas essaye un nombre de 0 à 255.

 Adresse email Haut de page Bas de page 
 
ToTo



Autorisation : Membre
Nb de messages : 104
Inscrit le : Ven 07 Nov 2008, 11:38
Posté le : Dim 23 Nov 2008, 15:28   Citer 

J'ai toujours le droit à 20000000

 Adresse email Haut de page Bas de page 
 
coc5
Avatar

Autorisation : Membre
Nb de messages : 879
Inscrit le : Sam 16 Jui 2007, 13:37
Posté le : Dim 23 Nov 2008, 15:58   Citer 

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.

 Adresse email Haut de page Bas de page 
 
ToTo



Autorisation : Membre
Nb de messages : 104
Inscrit le : Ven 07 Nov 2008, 11:38
Posté le : Dim 23 Nov 2008, 17:20   Citer 

Ok, je te dis ça ce soir.

 Adresse email Haut de page Bas de page 
 
coc5
Avatar

Autorisation : Membre
Nb de messages : 879
Inscrit le : Sam 16 Jui 2007, 13:37
Posté le : Lun 24 Nov 2008, 21:54   Citer 

Alors qu'en est-il ?

 Adresse email Haut de page Bas de page 
 
ToTo



Autorisation : Membre
Nb de messages : 104
Inscrit le : Ven 07 Nov 2008, 11:38
Posté le : Mar 25 Nov 2008, 18:11   Citer 

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. sad.gif

 Adresse email Haut de page Bas de page 
 
coc5
Avatar

Autorisation : Membre
Nb de messages : 879
Inscrit le : Sam 16 Jui 2007, 13:37
Posté le : Mar 25 Nov 2008, 21:50   Citer 

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 eyeonly.gif
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é.

 Adresse email Haut de page Bas de page 
 
ToTo



Autorisation : Membre
Nb de messages : 104
Inscrit le : Ven 07 Nov 2008, 11:38
Posté le : Sam 29 Nov 2008, 12:39   Citer 

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

 Adresse email Haut de page Bas de page 
 
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   Citer 

Help ! Je ne sais toujours pas comment programmer =/

 Adresse email Haut de page Bas de page 
 
coc5
Avatar

Autorisation : Membre
Nb de messages : 879
Inscrit le : Sam 16 Jui 2007, 13:37
Posté le : Mer 03 Déc 2008, 22:06   Citer 

Je ne sais pas trop quoi dire car j'ai recopié mon programme et il marche...
Vérifie encore et si non j'aviserais =/

 Adresse email Haut de page Bas de page 
 
ToTo



Autorisation : Membre
Nb de messages : 104
Inscrit le : Ven 07 Nov 2008, 11:38
Posté le : Jeu 04 Déc 2008, 17:02   Citer 

Ok, j'me fais ça dès que je peux.

 Adresse email Haut de page Bas de page 
 
ToTo



Autorisation : Membre
Nb de messages : 104
Inscrit le : Ven 07 Nov 2008, 11:38
Posté le : Mer 10 Déc 2008, 14:27   Citer 

Je ne vais pas y arrivé avec ce programme =/

J'ai une erreur "DIM INVALIDE".
Ca peu être du à quoi ?

 Adresse email Haut de page Bas de page 
 
Poster un nouveau sujet Poster une réponse





  Page générée en 6 requêtes