Suite de nombres (MATLAB)

Résolu/Fermé
yoyo - 26 nov. 2008 à 12:26
Sacabouffe Messages postés 9427 Date d'inscription dimanche 19 août 2007 Statut Membre Dernière intervention 29 mai 2009 - 26 nov. 2008 à 16:59
Bonjour,

voici le problème pour lequel j'aimerais un petit coup de pouce: j'aimerais écrire la suite de nombre suivante:

12112113114115116111111111111 etc... (le premier 2 est un cas particulier, et le nombre de 1 qui terminent dépendent de N et de i)

j'ai donc écrit cette fonction qui marche, testez là:

function [y]=suite_nombres(i,N)
p=5+3*i;
%définit l'emplacement des nombres >=2
nb_point=3*(N+1);
k=1;
l=2;



for pnt=1:nb_point,



if pnt==nb_point

g(pnt)=1;
y(pnt)=g(pnt);

elseif pnt==2

g(pnt)=2;
y(pnt)=g(pnt),;

elseif pnt==5

g(pnt)=2;
y(pnt)=g(pnt),;

%Fin des cas particuliers constants

elseif pnt==8+3*(k-1)

l=l+1;

if k<i+1


k=k+1;
g(pnt)=l;
y(pnt)=g(pnt),;

else

g(pnt)=1;
y(pnt)=g(pnt),;

end;

else

g(pnt)=1;
y(pnt)=g(pnt),;

end;

end;



Le truc c'est qu'à l'affichage comme vous pouvez le constater, il commence avec y=1, puis y=12 etc...moi ce que je veux c'est qu'il m'affiche le résultat final directement. Par ailleurs, je me demande si dans le cadre d'un calcul utilisant cette fonction, il utilise seulement le résultat final, ou s'il utilise les résultats de l'affichage dont je ne veux pas!!!!!!!

Merci pour votre aide

1 réponse

Sacabouffe Messages postés 9427 Date d'inscription dimanche 19 août 2007 Statut Membre Dernière intervention 29 mai 2009 1 835
26 nov. 2008 à 16:59
Salut
Tel que ton programme est fait là, en sortie t'as le vecteur y de la suite de nombres.
y(1) = premier chiffre
y(2) = deuxième chiffre
...
...
Je sais pas trop ce que tu veux exactement. Tu veux juste avoir l'affichage de la suite ?

Si c'est le cas, ce que tu peux faire c'est ajouter la ligne y = num2str(y); à ton programme. La variable de sortie y est alors une chaîne de caractères avec des espaces entre chaque nombre.

Si tu veux récupérer le nombre décimal donné par ta suite, ajoute plutôt la ligne y=sum(y.*(10.^(size(y,2)-1:-1:0))); à ton programme.

Pour finir, tu peux grandement simplifier ton programme, il peut s'écrire sous cette forme :
function y=suite_nombres(ii,N)
y=ones(1,3*(N+1));
y(2)=2;
val=(2:ii+2);
ind_val=(5:3:3*(N+1));
m=min(size(val,2),size(ind_val,2));
y(ind_val(1:m))=val(1:m);
J'ai pris ii au lieu de i parce qu'il est un peu dangereux d'utiliser i vu que c'est le nombre complexe pour Matlab normalement. À toi d'ajouter la ligne qui te convient suivant ce que tu veux récupérer en sortie puisque vraisemblablement c'est pas le vecteur des nombres.

Ciao
0