Exercice 1:
Consiste à créer une fonction quelconque qui prendrait un nombre comme un argument et renverrait un nombre –1, 0 ou 1 en fonction du signe du nombre introduit comme l’argument.
Le script :
function s=signe(n) % fonction prend pour argument un nombre quelconque
if (n<0) % et verifie s’il est negatf, si oui
s=-1; % il affiche –1, si non
elseif (n>0) % il verifie si le nombre est positif, si oui
s=1; % il affiche 1, si non
else % le nombre doit être égal à zero, il n’y a pas d’autre possibilité, alors
s=0; % le programme affiche 0
endif
endfunction
L’exécution:
octave-3.0.1.exe:7> signe(-20)
ans = -1
octave-3.0.1.exe:8> signe(0)
ans = 0
octave-3.0.1.exe:9> signe(35)
ans = 1
Exercice 2:
Consiste à créer une fonction qui prendrait un nombre comme un argument et renverrait une chaine de caractere comme le résultat.
function s=dept(n) % fonction prend pour argument un nombre n quelconque
switch (n) % et si
case {75 77 78} % n est égale à 75, 77 ou 78
s= "Ile-de-France" ; % attribue un tel chaîne de caractères à la variable s, sinon si
case 976 % n est égale à 976
s="DOM" ; % attribue un tel chaîne de caractères à la variable s, sinon si
otherwise % n est autre que 75, 77, 78 et 976
if (1<=n && n<=90) % vérifie si n est d’intervalle de 1 à 90
s="Province" ; % et attribue un tel chaîne de caractères à la variable s, sinon si
elseif (91<=n && n<=95) % n est d’intervalle de 91 à 95
elseif (971<=n && n<=974) % n est d’intervalle de 971 à 974
else % n ne vérifie pas aucune condition
s="Code incorrect" ; % attribue un tel chaîne de caractères à la variable s
endswitch
octave-3.0.1.exe:23> d=dept(974)
d = DOM
octave-3.0.1.exe:24> d=dept(103)
d = Code incorrect
octave-3.0.1.exe:25> d=dept(13)
d = Province
octave-3.0.1.exe:26> d=dept(77)
d = Ile-de-France
octave-3.0.1.exe:27> d=dept(92)
Exercice 3:
Consiste à créer une fonction qui prendrait un vecteur comme un argument et renverrait le résultat numérique.
a) Le résultat c’est la somme simple de tous les éléments du vecteur.
function somme=soma(v)
somme = 0; % j’inicie la variable somme avec la valeur 0
for pos = [1:numel(v)] % pour chaque position (pos) dans le vecteur la fonction va
somme = somme + v(pos); % changer la valeur de somme actuelle en valeur nouvelle,
augmentée par le nombre de cette position
endfor
octave-3.2.4.exe:10> B = [4 67 12 64 23 5 66 13]
B =
4 67 12 64 23 5 66 13
octave-3.2.4.exe:12> somme=soma(B)
somme = 254
b) Le résultat c’est la somme des elements positives du vecteur.
Le script:
function somme=somb(v)
if v(pos) > 0 % verifier si la valeur trouvée est positive, si oui il va
somme = somme + v(pos); % changer la valeur de somme actuelle en valeur
nouvelle, augmentée par le nombre de cette position
octave-3.2.4.exe:29> B=[5 14 -8 4 -10 9]
5 14 -8 4 -10 9
octave-3.2.4.exe:30> somme=somb(B)
somme = 32
octave-3.2.4.exe:31> C=[-3 5 7 -10]
C =
-3 5 7 -10
octave-3.2.4.exe:32> somme=somb(C)
somme = 12
c) Le résultat c’est la moyenne de tous les valeurs du vecteur.
function moyenne=somc(v)
moyenne = somme/numel(v); % je calcule la moyenne
octave-3.2.4.exe:36> A=[1 2 3 4 5]
A =
1 2 3 4 5
octave-3.2.4.exe:37> moyenne=somc(A)
moyenne = 3
octave-3.2.4.exe:38> B
octave-3.2.4.exe:39> moyenne=somc(B)
moyenne = -0.25000
d) Le résultat c’est la moyenne de tous les valeurs du matrice à 12 colonnes.
function moyenne=somd(M)
for ligne = [1:rows(M)] % pour chaque ligne de la matrice et
for colonne = [1:columns(M)] % pour chaque colonne de la matrice la fonction va
somme = somme + M(ligne,colonne); % changer la valeur de somme actuelle en
valeur nouvelle, augmentée par le nombre de cette position
moyenne=somme/numel(M); % je calcule la moyenne
octave-3.2.4.exe:69> M=[1 34 5 12 -4 6 8 12 -6 22 5 23;-7 -8 2 3 7 1 65 12 -30 12 4 -2;1 2 3 4 5 6 7 -8 -9 -10 -11 -12]
M =
1 34 5 12 -4 6 8 12 -6 22 5 23
-7 -8 2 3 7 1 65 12 -30 12 4 -2
1 2 3 4 5 6 7 -8 -9 -10 -11 -12
octave-3.2.4.exe:68> moyenne=somd(M)
moyenne = 12.917
e) Le résultat c’est une colonne qui contient les moyennes des lignes d’une matrice à 12 colonnes.
function moyenne=some(M)
for ligne = [1:rows(M)] % pour chaque ligne de la matrice
somme = 0; % j’inicie la variable somme avec la valeur 0, et
for colonne = [1:columns(M)] % pour chaque élément de cette ligne je
somme = somme + M(ligne,colonne); % change la valeur de somme actuelle en
T(ligne) = somme/columns(M); % je crée un nouveau vecteur dans lequel je met les
moyennes de chaque ligne
moyenne = T'; % je transpose le vecteur pour obtenir une colonne
octave-3.2.4.exe:1> R=[1 1 1 1 2 2 2 2 3 3 3 3;4 4 4 4 5 5 5 5 6 6 6 6]
R =
1 1 1 1 2 2 2 2 3 3 3 3
4 4 4 4 5 5 5 5 6 6 6 6
octave-3.2.4.exe:2> moyenne=some(R)
moyenne =
2
5
octave-3.2.4.exe:4> M=[1 34 5 12 -4 6 8 12 -6 22 5 23;-7 -8 2 3 7 1 65 12 -30 12 4 -2; 1 2 3 4 5 6 7 -8 -9 -10 -11 -12]
octave-3.2.4.exe:5> moyenne=some(M)
9.8333
4.9167
-1.8333
Exercice 4:
Consiste à créer des fonctions qui renverrait les valeurs toruvés dans un vecteur ou une matrice et/ou leurs indices.
a) Le résultat c’est l’indice du dernier zéro d’un vecteur.
function pos=chera(v)
pos = numel(v); % on va commencer la recherche par le dernier élément du vecteur
while (pos > 0) % pour chaque élément du vecteur, la fonction va
if (v(pos) == 0) % vérifier si cet élément est égal à zero, si oui
break % on fini la recherche, si non
pos--; % on passe à un autre élément et repète les pas de while
endwhile % s’il y a le zero, c’est la position pour laquelle la fonction a fait ‘break’ et sortie de la boucle while, sinon c’est zero
octave-3.2.4.exe:2> A=[1 2 0 4 5 0 6 7 0 9]
1 2 0 4 5 0 6 7 0 9
octave-3.2.4.exe:3> pos=chera(A)
pos = 9
octave-3.2.4.exe:4> B=[1 2 3]
1 2 3
octave-3.2.4.exe:5> pos=chera(B)
pos = 0
b) Le résultat c’est l’indice du premier valeur plus petit que la seuil introduit comme un argument.
function pos=cherb(v,seuil)
pos = 1; % on va commencer la recherche par le premier élément du vecteur
while (pos <= numel(v)) % pour chaque élément du vecteur, la fonction va
if (v(pos) < seuil) % vérifier si cet élément est inférieur à la seuil , si oui
pos++; % on passe à un autre élément et repète les pas de while
endwhile
if (pos>numel(v)) % si on a passé au dehors du vecteur, ça signifie qu’il n’y avait pas le nombre plus petit que la seuil, alors
pos = 0; % on attribue la valeur zero à la variable position,
endif % s’il y a le zero, c’est la position pour laquelle la fonction a fait ‘break’ et sortie de la boucle while, sinon c’est zero
octave-3.2.4.exe:8> C=[11 15 16 26 17 27 51 26 7 25 73 15]
11 15 16 26 17 27 51 26 7 25 73 15
octave-3.2.4.exe:9> pos=cherb(C,10)
c) Le résultat c’est la valeur de la première colonne pour laquelle la valeur contenue dans la deuxième colonne est inferieur à la seuil introduit comme un argument.
function mois=cherc(m,seuil)
ligne = 1; % on va commencer la recherche par la première ligne de la matrice
while (ligne <= rows(m)) % pour chaque élément de la deuxième colonne, la fonction va
if (m(ligne,2) < seuil) % vérifier si cet élément est inférieur à la seuil , si oui
ligne++; % on passe à une autre ligne et repète les pas de while
if (ligne <= rows(m)) % si on a trouvé le nombre plus petit que la seuil dedans la matrice mois = m(ligne,1); % le résultat c’est l’élément de la première colonne de la même ligne,
else % sinon
mois = 0; % on a passé au dehors de la matrice, alors le résultat est zero.
octave-3.2.4.exe:4> T=[3 1200;4 800;5 1500;6 700]
T =
3 1200
4 800
5 1500
6 700
...
Santaradesu