Bibm@th

Forum de mathématiques - Bibm@th.net

Bienvenue dans les forums du site BibM@th, des forums où on dit Bonjour (Bonsoir), Merci, S'il vous plaît...

Vous n'êtes pas identifié(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

Pied de page des forums