Forum de mathématiques - Bibm@th.net
Vous n'êtes pas identifié(e).
- Contributions : Récentes | Sans réponse
Pages : 1
Discussion fermée
#1 23-10-2014 14:24:45
- etoiledouble
- Membre
- Inscription : 23-10-2014
- Messages : 3
Scilab - suite de Syracuse
Bonjour à toutes et à tous,
je suis nouvelle sur le forum alors veuillez excuser mes quelques maladresses. Je suis en prépa économique et pendant les vacances j'ai un petit travail à faire sur scilab en lien avec la suite de Syracuse dont voici l'énoncé :
"Faire varier k de 1 à 1000 et dire quelle est la plus grande altitude rencontrée et pour quel k ; et dire aussi quelle est la plus grande durée de vol rencontrée et pour quel k"
En suivant le cours, j'aboutis au programme suivant :
u=1
vol=1
alt=1
for i=1:1000
while u <> 1 do
if u==2*floor(u/2) then u=u*2 ; else u=3*u+1 ; end
vol=vol+1
if u>alt then alt=u ; end
end
end
disp(altmax, 'altmax=')
disp(volmax,'volmax=')
Malheureusement, en testant le programme sur scilab, celui-ci ne fonctionne pas. Pouvez-vous m'aidez s'il vous plaît?
En vous en remerciant d'avance,
Maud
Hors ligne
#2 23-10-2014 14:52:22
- Fred
- Administrateur
- Inscription : 26-09-2005
- Messages : 7 352
Re : Scilab - suite de Syracuse
Bonjour etoiledouble,
Et bienvenue sur le forum.
D'abord, tu ne nous dis pas ce qui ne fonctionne pas. Est-ce que le programme ne s'exécute pas, ou est-ce qu'il ne te donne pas les résultats voulus???
Cela dit, j'ai quand même deux remarques sur ton programme :
1. Tu initialise u à 1, puis tu ne le modifies plus avant de faire la boucle while. En particulier, je pense que tu devrais le faire dépendre de i et rajouter une ligne u=i juste après la boucle for.
2. Nulle part, tu ne donnes une valeur à volmax alors que tu veux l'afficher à la fin.
Réfléchis bien au rôle joué par vol et par volmax, et au lieu où tu veux écrire vol=1 notamment...
Fred.
Hors ligne
#3 26-10-2014 23:09:48
- etoiledouble
- Membre
- Inscription : 23-10-2014
- Messages : 3
Re : Scilab - suite de Syracuse
Bonsoir Fred, et merci de votre réponse.
Avant votre aide, le programme ne s'exécutait pas. En modifiant le programme en rajoutant u=i avant le boucle for, j'obtiens volmax=59543 et altmax=250504 mais je ne comprends pas comment demander au programme "pour quel k" demandé dans l'énoncé (donc pour quel i si j'ai bien compris?).
En ce qui concerne volmax et altmax j'ai essayé au début vol=max(vol) et alt=max(alt) (et le programme m'a affiché =1000 pour les deux cas automatiquement) comme vu dans une interro, mais visiblement je me suis trompée étant donné que le programme tourne encore...
Je vous remercie de votre aide,
Cordialement,
Maud
Hors ligne
#4 27-10-2014 07:22:00
- Fred
- Administrateur
- Inscription : 26-09-2005
- Messages : 7 352
Re : Scilab - suite de Syracuse
Re,
Il faut que tu ajoutes deux nouvelles variables, kaltmax et kvolmax. Quand tu changes la valeur de altmax et de volmax, tu dois aussi changer la valeur de kaltmax et de kvolmax. Par exemple, tu dois ajouter dans le "if (u>alt)" la ligne kaltmax=i
Fred.
Hors ligne
#5 31-10-2014 17:14:13
- chopin
- Invité
Re : Scilab - suite de Syracuse
bonjour,
J'ai le même souci que toi, ayant le même énoncé mon programme ne fonctionne pas.
voici mon programme
u=1
vol=1
alt=1
for i=1:1000
u=i
while u<>1 do
if u==2*floor(u/2) then u=u/2; else u=3*u+1;end
vol=vol+1
if u>alt, then alt=u, alt=altmax, vol=volmax, kmax=i;end
end
end
disp(altmax,'altmax=')
disp(volmax,'volmax=')
disp(kmax,'kmax=')
mon programme échoue lorsque j’écris mon end juste avant le disp , il s'affiche u=1, u=2
Votre aide me serais très précieuse et je vous remercie d'avance.
cordialement océane
#6 31-10-2014 18:42:43
- totomm
- Membre
- Inscription : 25-08-2011
- Messages : 1 093
Re : Scilab - suite de Syracuse
Bonsoir,
juste avant la boucle "while u<>1 do" u est mis à 1, donc vous n'y entrez pas !!!
La boucle doit commencer par "do" et le "while u<>1" être testé en fin de boucle...
ou alors commencez le for par 2 au lieu de 1
Dernière modification par totomm (31-10-2014 18:43:51)
Hors ligne
#7 01-11-2014 23:13:05
- etoiledouble
- Membre
- Inscription : 23-10-2014
- Messages : 3
Re : Scilab - suite de Syracuse
Bonsoir et merci beaucoup pour vos messages.
J'arrive bien à trouver mes deux valeurs altmax et volmax à la fin et j'arrive à afficher la plus grande altitude rencontrée et pour quel k, mais je ne comprends pas comment afficher la valeur de k pour la plus grande durée de vol.
En vous en remerciant d'avance,
etoiledouble
Dernière modification par etoiledouble (01-11-2014 23:33:31)
Hors ligne
#8 02-11-2014 21:21:56
- Fred
- Administrateur
- Inscription : 26-09-2005
- Messages : 7 352
Re : Scilab - suite de Syracuse
De la même façon que pour kaltmax, dans le test
"if (vol>volmax)", tu dois ajouter la ligne kvolmax=k;
Hors ligne
Pages : 1
Discussion fermée







