Poster un nouveau sujet Poster une réponse
Une boucle de nombre à afficher
Auteur Message
iceman48



Autorisation : Membre
Nb de messages : 9
Inscrit le : Mer 02 Nov 2011, 0:41
Posté le : Mer 02 Nov 2011, 0:46   Citer 

Bonjour a tous,
Voilà, je dois faire un programme me permettant d'afficher une série de nombre,
En prenant un nombre N, entier naturel
S'il est paire le diviser par 2
S'il est impair le multiplier par 3 et ajouter 1
Si le nombre est différent de 1 recommencer jusqu'à obtenir 1, c'est la que j'ai du mal.

Donc voilà, pour l'instant j'ai ça :
Prompt N
If pgcd(N,2)=2
Then
Disp N/2
Else
If pgcd(N,2)= 1
Then
Disp N*3+1
End

Et donc je n'arrive pas à créer une boucle me permettant de tout afficher.

Merci a tous pour vos futur réponses
iceman

 Adresse email Haut de page Bas de page 
 
snap



Autorisation : Membre
Nb de messages : 364
Inscrit le : Dim 13 Fév 2011, 14:17
Posté le : Mer 02 Nov 2011, 1:01   Citer 

Salut! pour faire ça, il faut mettre :


Code

:Prompt N
:Reapeat N=1
:If non(PartDec(N/2: N/2 -> N
:If partDec(N/2: N*3+1 -> N
:Disp N
:End



----------------------
Commence un monopoly non graphique et compte bien le finir!
Lycée de l'escaut Valenciennes happy.gif
Fan de reflets d'acide!
le meilleur jeu du monde
http://snap-le-terrible.minitroopers.fr
 Adresse email Haut de page Bas de page 
 
iceman48



Autorisation : Membre
Nb de messages : 9
Inscrit le : Mer 02 Nov 2011, 0:41
Posté le : Mer 02 Nov 2011, 1:08   Citer 

Comment se rentre "->" ?

 Adresse email Haut de page Bas de page 
 
snap



Autorisation : Membre
Nb de messages : 364
Inscrit le : Dim 13 Fév 2011, 14:17
Posté le : Mer 02 Nov 2011, 1:10   Citer 

c'est sto la touche au dessus de on.

----------------------
Commence un monopoly non graphique et compte bien le finir!
Lycée de l'escaut Valenciennes happy.gif
Fan de reflets d'acide!
le meilleur jeu du monde
http://snap-le-terrible.minitroopers.fr
 Adresse email Haut de page Bas de page 
 
Google_AdSense



Publicité    



 
iceman48



Autorisation : Membre
Nb de messages : 9
Inscrit le : Mer 02 Nov 2011, 0:41
Posté le : Mer 02 Nov 2011, 1:14   Citer 

Il y a un problème, le programme ne s'arrête pas après avoir fait la liste il affiche des 4 et des 2 sans arrêt

 Adresse email Haut de page Bas de page 
 
snap



Autorisation : Membre
Nb de messages : 364
Inscrit le : Dim 13 Fév 2011, 14:17
Posté le : Mer 02 Nov 2011, 1:22   Citer 

a wé pas faux. Je me suis trompé il faut mettre :


Code

:Prompt N
:Reapeat N=1
:If partDec(N/2: 3N+1 -> N
:If non(PartDec(N/2: N/2 -> N
:Disp N
:End



Et si tu veut obligatoirement rentré un nombre positif sans chiffre après la virgule, met :


Code

:Repeat N et non(partDéc(N
:Prompt N
:End
:Reapeat N=1
:If partDec(N/2: 3N+1 -> N
:If non(PartDec(N/2: N/2 -> N
:Disp N
:End



----------------------
Commence un monopoly non graphique et compte bien le finir!
Lycée de l'escaut Valenciennes happy.gif
Fan de reflets d'acide!
le meilleur jeu du monde
http://snap-le-terrible.minitroopers.fr
 Adresse email Haut de page Bas de page 
 
iceman48



Autorisation : Membre
Nb de messages : 9
Inscrit le : Mer 02 Nov 2011, 0:41
Posté le : Mer 02 Nov 2011, 1:29   Citer 

Merci énormément,
Deux petites choses:
-Est ce possible de ralentir le défilement histoire de pouvoir noter les nombres obtenus
-Sans abuser de ta bonté, serait ce possible d'avoir quelques explications sur le programme, pour ne pas posséder quelque chose que je ne comprends pas

 Adresse email Haut de page Bas de page 
 
snap



Autorisation : Membre
Nb de messages : 364
Inscrit le : Dim 13 Fév 2011, 14:17
Posté le : Mer 02 Nov 2011, 1:40   Citer 

Abuser de ma bonté?? Pas du tout il est 1h du mat j'ai que ça a faire^^

Premierement :
Pour ralentir le programme il y a deux solutions :
- Mettre une pause après le disp, la pause se trouve en faisant Prgm + 8
-Ralentir le programme, il y a deux solutions^^ :
*mettre autant de 69! après le disp pour qu'il le ralentisse assez, donc il faudrait mettre après le disp : 69!:69!:69! etc...
*Mettre une boucle sans rien dedans. Donc après le disp tu met:

Code

:For(A,1, le nombre que tu veut plus il est grand plus il ralentis
:End




Deuxiemement :

Pour le programme :


Code

:Repeat N et non(partDéc(N      <-- repeat est une boucle qui tourne jusqu'a ce que la condition soit vérifiée. non(  signifie =0  PartDéc signifie la partie décimale du nombre choisis.

:Prompt N

:End                            <-- Fin de la boucle

:Reapeat N=1                     <-- on refait une boucle

:If partDec(N/2: 3N+1 -> N      <-- If partDéc(N/2 signifie si le nombre est impaire car un nombre impair divisée par deux possède une partie décimale.

:If non(PartDec(N/2: N/2 -> N    <-- L'inverse

:Disp N                          <-- Affiche le nombre

:End                            <-- Fin de la boucle



----------------------
Commence un monopoly non graphique et compte bien le finir!
Lycée de l'escaut Valenciennes happy.gif
Fan de reflets d'acide!
le meilleur jeu du monde
http://snap-le-terrible.minitroopers.fr
 Adresse email Haut de page Bas de page 
 
iceman48



Autorisation : Membre
Nb de messages : 9
Inscrit le : Mer 02 Nov 2011, 0:41
Posté le : Mer 02 Nov 2011, 1:53   Citer 

Alors le sto signifie ?
Et en ralentissant, je viens de m'apercevoir que le programme n'affiche pas le premier nombre,
Si on prend 17, Le 52 ne s'affiche pas mais directement le 26. Une idée ?

 Adresse email Haut de page Bas de page 
 
snap



Autorisation : Membre
Nb de messages : 364
Inscrit le : Dim 13 Fév 2011, 14:17
Posté le : Mer 02 Nov 2011, 2:01   Citer 

Alors le sto signifie que tu associe un nombre à une variable.
1 -> A Signifie que A prendra la valeur 1
Ensuite si tu ve que le programme marque 56, Il faudrait mettre le disp et la pause juste après le repeat N=1. Je suispas sur que sa marche.Test et dis moi winkle.gif

----------------------
Commence un monopoly non graphique et compte bien le finir!
Lycée de l'escaut Valenciennes happy.gif
Fan de reflets d'acide!
le meilleur jeu du monde
http://snap-le-terrible.minitroopers.fr
 Adresse email Haut de page Bas de page 
 
iceman48



Autorisation : Membre
Nb de messages : 9
Inscrit le : Mer 02 Nov 2011, 0:41
Posté le : Mer 02 Nov 2011, 2:09   Citer 

Non ça ne change rien, mais c'est assez bizarre que le 52 ne soit pas afficher.

 Adresse email Haut de page Bas de page 
 
snap



Autorisation : Membre
Nb de messages : 364
Inscrit le : Dim 13 Fév 2011, 14:17
Posté le : Mer 02 Nov 2011, 2:13   Citer 

A oui j'ai compris. Il faut changer plein de trucs alors^^


Code

:Repeat N et non(partDéc(N
:Prompt N
:End
:Reapeat N=1
:0 -> T
:If partDec(N/2: 1 -> T
:If T : 3N+1 -> N
:If non(T : N/2 -> N
:Disp N
:End



Test ça et dis moi si sa marche

----------------------
Commence un monopoly non graphique et compte bien le finir!
Lycée de l'escaut Valenciennes happy.gif
Fan de reflets d'acide!
le meilleur jeu du monde
http://snap-le-terrible.minitroopers.fr
 Adresse email Haut de page Bas de page 
 
iceman48



Autorisation : Membre
Nb de messages : 9
Inscrit le : Mer 02 Nov 2011, 0:41
Posté le : Mer 02 Nov 2011, 2:21   Citer 

Tout d'abord je dis bravo, ça fonctionne, puis me vient la perplexité .
Comment ce fait t'il qu'ils faillent tant de changement pour afficher un 52 ?

 Adresse email Haut de page Bas de page 
 
snap



Autorisation : Membre
Nb de messages : 364
Inscrit le : Dim 13 Fév 2011, 14:17
Posté le : Mer 02 Nov 2011, 2:24   Citer 

Ben en fait si tu regarde l'ancien programme, si le nombre est impair, il le changeait en pair (nombre impair *3 +1 = pair) et ensuite vu que le programme continue il regarde la condition si le nombre est pair or le nombre ressort de la premiere instruction pair donc la boucle ne fait pas un tour avant de le diviser par 2. En esperant que tu comprend mon raisonnement^^

----------------------
Commence un monopoly non graphique et compte bien le finir!
Lycée de l'escaut Valenciennes happy.gif
Fan de reflets d'acide!
le meilleur jeu du monde
http://snap-le-terrible.minitroopers.fr
 Adresse email Haut de page Bas de page 
 
iceman48



Autorisation : Membre
Nb de messages : 9
Inscrit le : Mer 02 Nov 2011, 0:41
Posté le : Mer 02 Nov 2011, 2:26   Citer 

Et le T dans tout ça ? Pourquoi remplacer un 0 par un T , etc

 Adresse email Haut de page Bas de page 
 
snap



Autorisation : Membre
Nb de messages : 364
Inscrit le : Dim 13 Fév 2011, 14:17
Posté le : Mer 02 Nov 2011, 2:32   Citer 

Ben en fait au début de la boucle, T prend la valeur 0. Ensuite, je lui dit si N/2 est impair, alors T prend la valeur 1. Puis je lui dit si T=1 : condition siN impaire et si T=0 : condition si N pair. Comme ça, vu que T ne peut pas etre egal a 0 ET a 1, il n'y a qu'une condition qui s'active donc le boucle doit refaire un tour avant de faire l'autre condition. Je sais pas si c'est plus compréhensible^^

----------------------
Commence un monopoly non graphique et compte bien le finir!
Lycée de l'escaut Valenciennes happy.gif
Fan de reflets d'acide!
le meilleur jeu du monde
http://snap-le-terrible.minitroopers.fr
 Adresse email Haut de page Bas de page 
 
iceman48



Autorisation : Membre
Nb de messages : 9
Inscrit le : Mer 02 Nov 2011, 0:41
Posté le : Mer 02 Nov 2011, 2:43   Citer 

Ca me semble assez logique, en plus ça marche, que demandez de mieux.
Alors merci beaucoup et désolé de t'avoir fait tenir jusqu'à 3h, en espérant qu'un jour je puisse faire mon programme de moi meme.
A bientôt, et encore merci

 Adresse email Haut de page Bas de page 
 
snap



Autorisation : Membre
Nb de messages : 364
Inscrit le : Dim 13 Fév 2011, 14:17
Posté le : Mer 02 Nov 2011, 2:48   Citer 

Tu ne m'a pas du tout dérangé et en plus j'aime aider des gens à programmer^^ et puis je ne m'endormirai que dans une heure ou deux de toute facon^^
Bonne apprentissage de programmation à toi winkle.gif

PS : t'inquiète sa va assez vite d'apprendre a programmer. J'en suis qu'a ma deuxieme année et je sais déja créé des jeux, des programmes complexes^^ D'ailleur faudrait que je me mette sur un RPG... Je verrai^^

----------------------
Commence un monopoly non graphique et compte bien le finir!
Lycée de l'escaut Valenciennes happy.gif
Fan de reflets d'acide!
le meilleur jeu du monde
http://snap-le-terrible.minitroopers.fr
 Adresse email Haut de page Bas de page 
 
snap



Autorisation : Membre
Nb de messages : 364
Inscrit le : Dim 13 Fév 2011, 14:17
Posté le : Mer 02 Nov 2011, 10:14   Citer 

Encore quelques améliorations dans ton programme si tu veux qu'il soit moins lourd :


Code

:Repeat N et non(partDéc(N
:Input N
:End
:Reapeat N=1
:0 -> T
:If partDec(.5N: 1 -> T   <-- Multiplication plus rapide que division
:If T : 3N+1 -> N
:If non(T : .5N -> N
:Pause N                 <-- après un pause tu peut lui dire d'afficher une valeur ou une ligne de texte.
:End



----------------------
Commence un monopoly non graphique et compte bien le finir!
Lycée de l'escaut Valenciennes happy.gif
Fan de reflets d'acide!
le meilleur jeu du monde
http://snap-le-terrible.minitroopers.fr
 Adresse email Haut de page Bas de page 
 
sandro



Autorisation : Membre
Nb de messages : 1366
Inscrit le : Ven 25 Mar 2011, 22:58
Posté le : Mer 02 Nov 2011, 19:38   Citer 

tu peut encore gagner un octé et quelques millisecondes:

Code
Repeat N et non(partDéc(N
:Input N
:End
:Reapeat N=1
:EffVar TIf partDec(.5N: 1 -> T   <-- Multiplication plus rapide que division + effvar
:If T : 3N+1 -> N
:If non(T : .5N -> N
:Pause N                 <-- après un pause tu peut lui dire d'afficher une valeur ou une ligne de texte.
:End



----------------------
mort à l'inutile, place à la mémoire libre et aux programmes
 Adresse email Haut de page Bas de page 
 
Sangohan38



Autorisation : Membre
Nb de messages : 3293
Inscrit le : Sam 31 Déc 2005, 19:48
Posté le : Sam 05 Nov 2011, 11:26   Citer 

Je pense qu'on peut encore améliorer d'un chouïa:


Code

Repeat N et non(partDéc(N
:Prompt N
:End
:Reapeat N=1
.5N->S
:EffVar TIf partDec(S: 1 -> T   <-- Multiplication plus rapide que division + effvar
:If T : 3N+1 -> N
:If non(T : S -> N
:Pause N                 <-- après un pause tu peut lui dire d'afficher une valeur ou une ligne de texte.
:End



En théorie comme .5N est stockée, la variable est plus rapidement rappelée et la taille du programme est diminuée de 2 octets me semble.

Sangohan38

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





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