Examen scilab

Discutez d'informatique ici !
amady89
Messages: 8
Enregistré le: 01 Juin 2012, 11:48

examen scilab

par amady89 » 01 Juin 2012, 12:13

Bonjour,

Il y a un exercice que je n'arrive pas à faire, voici l'énoncé

1)Ecrire une fonction Scilab calculant, pour deux entiers n et K > 1, la suite
des valeurs v(k) de finies par v0 = n et pour 0  k < K
v(k+1) =3uk + 1 si uk est impair
et 1/2uk si uk est pair

2) Pour n = 89, calculer uk pour k = 0;.... ;K = 20.

Pouvez vous m'aider ?

Merci par avance.



Joker62
Membre Transcendant
Messages: 5027
Enregistré le: 24 Déc 2006, 19:29

par Joker62 » 01 Juin 2012, 12:43

Bonjour,

Où bloques-tu ?

amady89
Messages: 8
Enregistré le: 01 Juin 2012, 11:48

par amady89 » 01 Juin 2012, 12:54

Joker62 a écrit:Bonjour,

Où bloques-tu ?


Je ne sais pas comment faire pour distinguer les cas ou u(k) est paire ou impaire et en plus je ne vois pas comment faire pour bien définir la suite u. Pour v(o) et v(1) je n'ai pas de problème mais je ne vois pas comment faire pour la suite.
Voici ce que j'ai fait:

function v=suitev(a,k)
v(0)=a;
if(int u(n)/2 u(n)/2)
for i=1:n
v(i+1)=3*u(n)+1;end
if (int u(n)/2=u(n)/2)
for i=1:n
v(i+1)=0.5*u(n)
end;
endfunction

Joker62
Membre Transcendant
Messages: 5027
Enregistré le: 24 Déc 2006, 19:29

par Joker62 » 01 Juin 2012, 16:23

Pour tester la parité tu as la commande modulo(m,n) qui renvoie le reste de la division euclidienne de m par n

Exemple :

modulo(4,2) = 0 car 4 = 2*2 + 0
modulo(7,2) = 1 car 7 = 2*3 + 1

Ensuite la fonction doit être sous la forme :

function V = Suite(n,K)

endfunction;

n étant le premier terme et K le nombre de calcul à faire.

Afin de voir toute la suite, on va concaténer les différents éléments de la suite :

function V = Suite(n,K)
[indent]V = [n];
TermeActuel = n;

for i = 1:K
[indent]if ( modulo(TermeActuel,2) == 0 ) then
[indent]TermeActuel = TermeActuel / 2;
[/indent]else
[indent]TermeActuel = 3*TermeActuel + 1;
[/indent]end
V = [V,TermeActuel];
[/indent]end
[/indent]endfunction;

Si on veut commencer la suite à 150 et que l'on veut voir les 10 premier termes on fait :
Suite(150,10)

amady89
Messages: 8
Enregistré le: 01 Juin 2012, 11:48

par amady89 » 01 Juin 2012, 20:38

Joker62 a écrit:Pour tester la parité tu as la commande modulo(m,n) qui renvoie le reste de la division euclidienne de m par n

Exemple :

modulo(4,2) = 0 car 4 = 2*2 + 0
modulo(7,2) = 1 car 7 = 2*3 + 1

Ensuite la fonction doit être sous la forme :

function V = Suite(n,K)

endfunction;

n étant le premier terme et K le nombre de calcul à faire.

Afin de voir toute la suite, on va concaténer les différents éléments de la suite :

function V = Suite(n,K)
[indent]V = [n];
TermeActuel = n;

for i = 1:K
[indent]if ( modulo(TermeActuel,2) == 0 ) then
[indent]TermeActuel = TermeActuel / 2;
[/indent]else
[indent]TermeActuel = 3*TermeActuel + 1;
[/indent]end
V = [V,TermeActuel];
[/indent]end
[/indent]endfunction;

Si on veut commencer la suite à 150 et que l'on veut voir les 10 premier termes on fait :
Suite(150,10)


Merci beaucoup !

amady89
Messages: 8
Enregistré le: 01 Juin 2012, 11:48

par amady89 » 02 Juin 2012, 12:47

Le problème est que ensuite je dois trouver pour K=1000 ou K est le nombre de termes de la suite et pour n=57,89,1253 et 8571 la valeur T(n) qui est la plus petite valeur de k si elle existe pour laquelle u(k)=1 et si elle n'existe pas T(n)=-1

j'ai construit cette fonction qui ne marche pas:

function k=T(n)
a=Suite(n,1000);
b=a(1)
k=1;
for k=1:1000
if (b <>1) then k=k+1; else b=-1;
b=k-1;
end;
endfunction;

Je crois que le problème est que je n'arrive pas à tester l'égalité du n ème terme avec 1 puis celle avec le terme n+1

Joker62
Membre Transcendant
Messages: 5027
Enregistré le: 24 Déc 2006, 19:29

par Joker62 » 02 Juin 2012, 23:35

Bonjour,

Comme la suite prend des valeurs entières non nulles, son plus petit terme possible est 1.

Tu peux donc utiliser la syntaxe :

V = Suite(n,1000);
[m,n] = min(V);

m est la valeur minimale
n est la position du premier élément minimal.

amady89
Messages: 8
Enregistré le: 01 Juin 2012, 11:48

par amady89 » 03 Juin 2012, 11:35

Bonjour,

Je ne vois pas en quoi ceci nous donne la valeur m, d'ailleurs en posant n=100 ou peu importe la valeur de n, min(V) nous donne simplement la valeur minimal qui vaut 1 mais pas la position du premier élément de la suite qui prend la valeur 1

Joker62 a écrit:Bonjour,

Comme la suite prend des valeurs entières non nulles, son plus petit terme possible est 1.

Tu peux donc utiliser la syntaxe :

V = Suite(n,1000);
[m,n] = min(V);

m est la valeur minimale
n est la position du premier élément minimal.

Joker62
Membre Transcendant
Messages: 5027
Enregistré le: 24 Déc 2006, 19:29

par Joker62 » 03 Juin 2012, 11:42

A = [10,5,1,4,2,1]

Si on fait

[m,n] = min(A)

on a : m = 1 et n = 3

Le terme minimal 1 est atteint en premier à la position numéro 3

 

Retourner vers ϟ Informatique

Qui est en ligne

Utilisateurs parcourant ce forum : Aucun utilisateur enregistré et 1 invité

Tu pars déja ?



Fais toi aider gratuitement sur Maths-forum !

Créé un compte en 1 minute et pose ta question dans le forum ;-)
Inscription gratuite

Identification

Pas encore inscrit ?

Ou identifiez-vous :

Inscription gratuite