Vous êtes sur la page 1sur 13

UNIVERSITE IBN ZOHR Année Universitaire : 2014-2015

Ecole Nationale des Sciences Appliquées – Agadir Filière : ENSA 1

DS 4 – rattrapage en Informatique 2 - Matlab


Durée : 01h00min

Exrcice 1

Ecrire une fonction qui reçoit comme paramètre d’entré une matrice de taille quelconque et
renvoie quatre paramètres de sortie [Sc, Pc, Ml, Mc].
Sc est la somme des éléments de chaque colonne de la matrice ;
Pc est le produit des éléments de chaque colonne de la matrice ;
Ml et Mc sont respectivement les moyennes des éléments des lignes et des colonnes de la
matrice.

Solution :

function [Sc, Pc, Ml, Mc] = mat (A)


[nl, nc] = size (A) ;
Pc = 1 ;
Ml = 0 ;
Mc = 0 ;
for i =1 : nc
Sc (i) =0 ;
Pc (i) =1 ;
for j = 1 : nl
Sc(i) = Sc(i) + A(j , i) ;
Pc (i) = Pc(i) * A(j , i) ;
end
end

for i =1 : nl
Ml (i) =0 ;
for j = 1 : nc
Ml (i) = Ml (i) + A(i , j)/nc ;
end
end

for i =1 : nc
Mc (i) =0 ;
for j = 1 : nl
Mc (i) = Mc (i) + A(j , i)/nl ;
end
end
Exercice 3

a- Ecrire une fonction sous Matlab qui permet de calculer la valeur de la fonction récurrente:

g(0) = 1 ;

g(1) = 1 ;

g(x+1) = g(x) – 0.5g(x-1).

b- Ecrire un script qui permet de remplir le tableau suivant :

n 2 3 4 … 10 11 12 … 100
h(n) 4*g(n) 6*g(n) 8*g(n) … 20*g(n) 5.5/g(n) 6/g(n) … 50/g(n)

c- Ecrire un programme (script matlab) qui permet d’écrire le contenu de ce tableau dans un fichier
sous forme de deux colonnes.

Solution :
a)-
function y = g (x)
if x == 0 || x == 1
y=1;
else
y = g (x) = g (x -1) - 0.5*g (x - 2) ;
end

b)-
T(1, :) = 2 : 100 ;
for n = 2 : 10
T(2 , n-1) = 2*n*g(n) ;
end

for n = 11 : 10
T(2 , n-1) = 0.5*n*g(n) ;
end

c)-
a = fopen(‘ fich.txt ’, ’ w ’) ;
fprintf(a ,’ %f %f\n’, [n’ ,T(2 , :)’]) ;
UNIVERSITE IBN ZOHR Année Universitaire : 2015-2016

Ecole Nationale des Sciences Appliquées – Agadir Filière : ENSA 1

DS4 Informatique-II

Exercice 1

Ecrire une fonction en matlab nbr_paire dont les arguments d’entrée sont : une matrice de taille
N x N et un entier n. La fonction doit calculer en sortie le nombre des valeurs paires qui sont
strictement inférieurs à n et le nombre des valeurs paires supérieures ou égales à n.

Exemple, si et n = 7,

alors, [a, b] = nbr_paire (M, n) avec a =3 et b = 5

function [a, b] = nbr_paire (M, n)

[ nl , nc ]= size ( M ) ;
a=0; b=0;
for i = 1 : nl
for j = 1 : nc
if mod (M (i , j) , 2) = = 0 && M ( i , j) < n
a=a+1;
elseif mod (M (i , j) , 2) = = 0 && M ( i , j) > n
b = b +1 ;
end
end
end
Exercice 2

a- Ecrire une fonction en matlab invers_chaine qui reçoit comme argument d’entrée une
chaine de caractère et renvoi en sortie son inverse :

Exemple : si X =’abcde’ alors la sortie devient Y = ‘edcba’

b- Ecrire une fonction en matlab nbr_symbole qui reçoit comme argument d’entrée une
chaine de caractère et symbole (une lettre). La fonction renvoi en sortie le nombre ce
symbole dans la chaine.
Exemple, si A = ’information’ x =’n’ alors nbr_symbole (A , x) renvoi 2 en sortie.

a)
function M = invers_chaine (L)

N = length (L) ;
for i =1 : N
M ( i ) = L (N – i + 1) ;
end

b)
function N = nbr_symbole (A , x)
L = length(A) ;
N=0;
for i = 1 : L
if A( i ) = = x
N=N+1;
end
end

Exercice 3

On dispose d’un fichier nomé source.txt contenant un text dont on ne connait pas le nombre
exact de ses lignes.
a- En utilisant la fonction invers_chaine (exercice 2), écrire un script de matlab qui permet
d’inverser chaque ligne de source.txt et de l’écrire dans un nouveau fichier nomé
cible.txt.
b- Ecrire un script de matlab qui permet de compter le nombre du caractère ‘x’ dans le
fichier cible.txt.

Solution :

a)

n = fopen (‘source.txt’, ’r’) ;

m = fopen (‘cible.txt’, ‘w’) ;

L = 10 ;

while ( L ~= -1)

L = fgets(n) ;
fprintf (m , ‘%s’ , invers_chaine (L)) ;

end

b)

m = fopen (‘cible.txt’, ‘r’) ;

n=0;

L = 10 ;

while (L ~= -1)

L = fgets(m) ;

n = n + nbr_symbole (L ,’x’) ;

end
UNIVERSITE IBN ZOHR Année Universitaire : 2016-2017
Ecole Nationale des Sciences Appliquées – Agadir Filière : CP 1

DS4 Informatique-II (Matlab)

Exercice 1

Ecrire une fonction param_stat qui reçoit un vecteur V de données numériques (de taille quelconque) et
renvoi en sortie deux paramètres statistiques m et s tels que:

- La valeur moyenne :

- L’écart type :
Solution :

function [m s ] = param_stat ( V )
N = length (V) ;
m=0;
for i = 1 : N
m = m + V(i)/N ;
end
m = sqrt (m) ;

s=0;
for i = 1 : N
s = s + (V(i) – m)^2/(N-1) ;
end
s = sqrt (s) ;

Exercice 2

a- Ecrire une fonction qui permet de calculer les valeurs des fonctions récursives suivantes :

b- Ecrire un script pour remplir le tableau Y suivant :

n 0 , 1, 2, …. 40 41, 42, … 60 61, 62, … 100


Y(n) f(n) g(n) f(n) + g(n)

c- Calculer la moyenne des carrées des éléments du vecteur Y :

Solution :

a)
function y = fn (n)

if n == 0

y=1;

else

y = ( gn (n-1) – fn (n-2) )/2 ;

end

function y = gn (n)

if n == 0

y=1;

else

y = ( fn (n-1) – gn (n-1) )/2 ;

end

b)

Y(1, : ) = 0 : 100 ;

for i = 1 : 100

if i <= 40

Y(2 , i+1) = f(i) ;

elseif i <= 60

Y(2 , i+1) = g(i) ;

else

Y(2, i+1) = f(i) + g(i) ;

end

end

c)

mc = 0 ;

for i = 0 : 100

mc = mc + Y(2 , i+1)* Y(2 , i+1)/101 ;

end
Exercice 3

a- Ecrire une fonction nbr_voyelle qui reçoit un vecteur T de chaine de caractères (de taille
quelconque) et renvoi en sortie le nombre N de voyelles contenant dans T.

b- Ecrire un script qui demande de saisir une ligne de texte à partir du clavier et affiche l’une des
deux messages : « Texte correct » si le nombre de voyelle est supérieur ou égal à 5 sinon on
obtient le message : « Texte incorrect »

c- Soit A un tableau 2D qui contient L lignes de textes de C caractères chacune.


Déterminer le nombre de voyelles de chaque ligne du tableau.

d- Afficher la ligne du tableau ayant le plus grand nombre de voyelles.

Solution :

a)
function N = nbr_voyelle (T)

K = length(T) ;
N=0;
for i = 1 : K
if T(i) = = ‘a’ || T(i) = = ‘e’ || T(i) = = ‘i’ || T(i) = = ‘o’ || T(i) = =’u’ || T(i) = = ‘y’
|| T(i) = = ‘A’ || T(i) = = ‘E’ || T(i) = = ‘I’ || T(i) = = ‘O’ || T(i) = =’U’ || T(i) = = ‘U’
N = N + 1;
end
end

b)
L = input(‘saisir une ligne de texte’ , ‘s’) ;
if nbr_voyelle (L) >= 5
disp(‘Texte correct’) ;
else
disp(‘Texte incorrect’) ;
end

c)

for i = 1 : L

n(i) = nbr_voyelle (A(i , :)) ;

end

d)

a = n(1);

for i = 2 : L

if n(i) >= a

a= n(i);
p = i;

end

end

La ligne ayant le plus grand nombre de voyelles :

disp( A(p ,: ) );
UNIVERSITE IBN ZOHR Année Universitaire : 2017-2018
Ecole Nationale des Sciences Appliquées – Agadir Filière : CP 1

DS 4 en Informatique 2 - Matlab
Durée : 01h00min
Exercice 1

Soit X un vecteur contenant 256 valeurs réelles.

Ecrire un script sous Matlab qui permet de :

- découper le vecteur X pour former une matrice carrée A ;


- modifier les valeurs de A en les comparants avec les moyennes de chaque ligne de la
façon suivante :

si ai,j < mi alors on ajoute mi à ai,j , sinon on doit retrancher mi de ai,j

où mi représente la moyenne de la i-ème ligne de A.

ai,j est l’élément de la i-ème ligne et la j-ème colnne de A

- construire un nouveau vecteur Y à partir des lignes de la matrice A modifiée.

Solution :
La taille du vecteur est 256, donc il faut chercher la racine carrée de 256 qui 16, alors il
faut construire une matrice carrée 16 x 16 à partir de X comme suit :
for i = 1 : 16
A(i , :) = X((1+(i-1)*16 : i*16) ;
end

d’abord on calcule les moyennes de chaque ligne de A:


for i = 1 : 16
m(i) = 0 ;
for j = 1 : 16
m(i) = m(i) + A(i,j)/16 ;
end
end

on modifie les valeurs de A :


for i = 1 : 16
for j = 1 : 16
if A(i,j) < m(i)
A(i,j) = A(i,j) + m(i) ;
else
A(i,j) = A(i,j) – m(i)
end
end
end
construction du vecteur Y :
for i = 1 : 16
Y((1+(i-1)*16 : i*16) = A(i, :)
end

Exercice 2

- Ecrire une fonction qui reçoit comme paramètre d’entrée une ligne de texte et deux
symboles s1 et s2. La fonction doit chercher le symbole s1 dans la ligne de texte et le
remplace par le s2. A la sortie on obtient une nouvelle ligne de texte et le nombre de
symboles modifiés.
- Ecrire un script qui permet de saisir à partir du clavier une ligne de texte, le symbole à
chercher et le symbole qui le remplacera.

Soit T un tableau de taille L x C (L lignes et C colonnes). On suppose que toutes les lignes de
T contiennent des textes. Soient T1 et T2 deux tableaux de même taille 1 x L contenant
respectivement des textes différents.

- Ecrire un script qui permet de chercher un symbole de T1 dans une ligne T et le remplace
avec celui de T2, de la façon suivante :
On recherche le 1 symbole de T1 dans la 1 ligne de T et on le remplace par le 1 symbole
de T2, on recherche le 2 symbole de T1 dans la deuxième de T et on le remplace par le
2 symbole de T2, et ainsi de suite jusqu’ à la dernière ligne de T.

Solution :
function [ L , n ] = cherch_sym(M, s1,s2)
N = length(M) ;
n=0;
L=M;
for i = 1 : N
if M(i) = = s1
L(i) = s2 ;
n=n+1;
end
end

T = input (‘ saisir une ligne de texte ‘, ‘s’) ;


ch1 = input (‘ saisir le symbole à rechercher’) ;
ch2 = input (‘ saisir le nouveau symbole qui remplacera ch1’) ;
cherch_sym(T, ch1,ch2) ;

for i = 1 : L
[ A(i , :) , n ] = cherch_sym(T(i , :), T1(i) , T2(i)) ;
end
Exercice 3

Soit fiche0.txt un fichier contenant un nombre de lignes de texte. Ecrire un script en Matlab qui permet
de :

- Déterminer le nombre de lignes du fichier fiche0.txt.

Supposons qu’on a déterminé un nombre de lignes N qui est pair.

- Ecrire la moitie du nombre de lignes de fiche0.txt dans un fichier fiche1.txt et le reste dans un
deuxième fichier fiche2.txt
- Echanger les contenus des fichiers fiche1.txt et fiche2.txt entre eux.

Solution :

a = fopen (‘fiche0.txt’ , ‘r’) ;


L = 10 ;
N=0;
while (L ~= -1)
L = fgets(a) ;
N = N+1 ;
end

Le nombre de ligne du fichier fich0.txt est égal à N.

a = fopen (‘fiche0.txt’ , ‘r’) ;


b = fopen (‘fiche1.txt’ , ‘w’) ;
c = fopen (‘fiche2.txt’ , ‘w’) ;
for i = 1 : N/2
L = fgets(a) ;
fprintf (b, ‘%s’, L) ;
end

for i = N/2 + 1 : N
L = fgets(a) ;
fprintf (c, ‘%s’, L) ;
end

Permutation des contenus des fichiers :


Il faut créer un fichier temporaire tmp.txt
k = fopen(‘tmp.txt’ , ‘w’) ;
b = fopen (‘fiche1.txt’ , ‘r’) ;

L = 10 ;
while (L ~= -1)
L = fgets(b) ;
fprintf(k, ‘ %s ‘ , L) ;
end

a = fopen (‘fiche1.txt’ , ‘w’) ;


b = fopen (‘fiche2.txt’ , ‘r’) ;
L = 10 ;
while (L ~= -1)
L = fgets(b) ;
fprintf(a, ‘ %s ‘ , L) ;
end

a = fopen (‘fiche2.txt’ , ‘w’) ;


k = fopen (‘tmp.txt’ , ‘r’) ;

L = 10 ;
while (L ~= -1)
L = fgets(k) ;
fprintf(a, ‘ %s ‘ , L) ;
end

Vous aimerez peut-être aussi