[Défis][1] Vecteur colonne ou vecteur ligne ?
------------------------------------------------------
Défi : créer une fonction qui, pour un vecteur donné, renvoie ce même vecteur, dans l'ordre inverse et dont chaque valeur est multipliée par 2.
Contrainte : la fonction doit être opérationnelle pour un vecteur colonne comme pour un vecteur ligne.
------------------------------------------------------
La recherche dans la documentation MATLAB avec le mot-clé flip nous donne :
Citation:
>> lookfor flip
FLIPDIM Flip matrix along specified dimension.
FLIPLR Flip matrix in left/right direction.
FLIPUD Flip matrix in up/down direction.
Il n'y a donc pas, a priori de fonction universelle, et il faut donc tester le type de vecteur en début de fonction, comme ceci :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
| function V=test(V)
if size(V,1)==1 % Vecteur ligne type V=[1 2 3]
V = 2*fliplr(V);
% ou
% V = 2*flipdim(V,1);
else % Vecteur colonne type V=[1;2;3]
V = 2*flipud(V);
% ou
% V = 2*flipdim(V,2);
end |
Testons :
Citation:
>> V=[1 2 3]
V =
1 2 3
>> W=test(V)
W =
6 4 2
>> V=[1;2;3]
V =
1
2
3
>> W=test(V)
W =
6
4
2
Tout est OK... mais est-il possible de faire plus court ?
Indice : solution en une ligne (déclaration de la fonction mise à part) :
Code:
1 2 3
| function W=test(V)
< Votre solution > |
------------------------------------------------------
Vous pouvez mettre vos solutions à la suite de ce message
:merci: