You are on page 1of 13

Corrigé de la série 3 d’Algorithmique & langage C

2018/2019
Par : HABET M.-S.

Solution de l’Exercice 1 :
Algorithme Exo1
Const N=8
Var T : tableau[1..N] de réel
som, moy, prod : réel
i, nbz : entier
Début
Ecrire(‘donner les éléments du tableau : ’)
Pour i←1 à N faire
Lire(T[i])
FinPour
nbz ← 0
som ← 0
prod ← 1
Pour i←1 à N faire
som ← som+T[i]
si T[i]<>0 alors prod ← prod*T[i] sinon nbz ← nbz+1 Finsi
FinPour
moy ← som/N
Ecrire(‘somme des elts : ’,som, ‘ moyenne : ’,moy)
Si nbz<N alors
Ecrire(‘produit des éléments non nuls : ’,prod)
sinon
Ecrire(‘tous les éléments sont nuls ’)
Finsi
Fin

Programme en langage C :
#include <stdio.h>
#define N 8
main()
{
float T[N], som, moy, prod;
int i,nbz;

printf("donner les éléments du tableau : \n");


for (i=0;i<N;i++)
scanf("%f",&T[i]);
nbz=0;
-1-
INSIM – Tizi-Ouzou Corrigé de la série 3 Algorithmique 2018/2019

som=0;
prod=1;
for (i=0;i<N;i++){
som = som+T[i];
if (T[i]!=0) prod=prod*T[i]; else nbz++;
}
moy=som/N;
printf("somme des elts : %f , moyenne : %f \n",som,moy);
if (nbz<N)
printf("produit des éléments non nuls : %f \n",prod);
else
printf("tous les éléments sont nuls \n");
}

Solution de l’Exercice 2 :
Algorithme Exo2
Const N=8
Var T1, T2, T3 : tableau[1..N] de réel
ps : réel
i : entier
Début
Ecrire(‘donner les éléments du 1er tableau : ’)
Pour i←1 à N faire
Lire(T1[i])
FinPour
Ecrire(‘donner les éléments du 2ième tableau : ’)
Pour i←1 à N faire
Lire(T2[i])
FinPour
ps ← 0
Pour i←1 à N faire
T3[i] ← T1[i]+T2[i]
ps ← ps+T1[i]*T2[i]
FinPour
Ecrire(‘vecteur somme : ’)
Pour i←1 à N faire
Ecrire(T3[i],‘ ’)
FinPour
Ecrire(‘produit scalaire : ’,ps)
Fin

Programme en langage C :
#include <stdio.h>
#define N 8
main()
-2-
INSIM – Tizi-Ouzou Corrigé de la série 3 Algorithmique 2018/2019

{
float T1[N], T2[N], ps;
int i;

printf("donner les éléments du 1er tableau : \n");


for (i=0; i<N; i++)
scanf("%f",&T1[i]);
printf("donner les éléments du 2ième tableau : \n");
for (i=0; i<N; i++)
scanf("%f",&T2[i]);

ps=0;
for (i=0; i<N; i++){
T3[i] = T1[i]+T2[i];
ps = ps+T1[i]*T2[i];
}

printf("vecteur somme : \n");


for (i=0; i<N; i++)
printf(" %f ",T3[i]);
printf("\n produit scalaire : %f \n",ps);
}

Solution de l’Exercice 3 :
1) On permute T[1] avec T[n], T[2] avec T[n-1], … jusqu’à T[n div 2] et T[n div 2 + 1], si n est pair
ou T[n div 2] et T[n div 2 + 2] sinon :
Algorithme Inv1
Const Nmax=20
Var T : tableau[1..Nmax] de entier
i, j, n, tmp : entier
Début
Ecrire(‘nombre d’’éléments du tableau ? ’)
Répéter Lire(n) Jusqu’à (n>=1) et (n<=Nmax)
Ecrire(‘ donnez les ’,n,‘ éléments de T : ’)
Pour i ← 1 à n faire
Ecrire(i,’ième élément : ’) ; Lire(T[i])
FinPour
i←1; j←n
Tant que i<j faire
tmp ← T[i]
T[i] ← T[j]
T[j] ← tmp
i ← i+1
j ← j-1
FinTanque
-3-
INSIM – Tizi-Ouzou Corrigé de la série 3 Algorithmique 2018/2019

Ecrire (‘tableau inversé : ’)


Pour i ← 1 à n faire Ecrire(‘ ’,T[i]) FinPour
Fin
Programme en langage C :
#include <stdio.h>
#define Nmax 20
main()
{ int T[Nmax], i, j, n, tmp ;
printf("nombre d’éléments du tableau ? ");
do { scanf("%d",&n) ;} while ((n<1) || (n>Nmax));
printf(" donnez les %d éléments de T : \n",n) ;
for (i=0 ; i<n ;i++){
printf("élément d'indice %d : ",i) ; scanf("%d",&T[i]) ;
}
i = 0 ; j = n-1;
while (i<j) {
tmp = T[i];
T[i] = T[j];
T[j] = tmp;
i++;
j--;
}
printf ("tableau inversé : \n");
for (i=0 ; i<n ; i++)
printf(" %d ",T[i]) ;
}

2) On copie T[1] dans Tinv[n], T[2] dans Tinv[n-1], … jusqu’à T[n] dans Tinv[1].
Algorithme Inv2
Const Nmax=20
Var T, Tinv : tableau[1..Nmax] de entier
i, n : entier
Début
Ecrire(‘nombre d’’éléments du tableau ? ’)
Répéter Lire(n) Jusqu’à (n>=1) et (n<=Nmax)
Ecrire(‘ donnez les ’,n,‘ éléments de T : ’)
Pour i ← 1 à n faire
Ecrire(i,’ième élément : ’) ; Lire(T[i])
FinPour
Pour i ← 1 à n faire
Tinv[n-i+1] ← T[i]
FinPour
Ecrire (‘tableau inversé : ’)
Pour i ← 1 à n faire Ecrire(‘ ’,Tinv[i]) FinPour
Fin
-4-
INSIM – Tizi-Ouzou Corrigé de la série 3 Algorithmique 2018/2019

Programme en langage C :
#include <stdio.h>
#define Nmax 20
main()
{ int T[Nmax], Tinv[Nmax], i, n ;
printf("nombre d’éléments du tableau ? ");
do { scanf("%d",&n) ;} while ((n<1) || (n>Nmax));
printf(" donnez les %d éléments de T : \n",n) ;
for (i=0 ; i<n ;i++){
printf("élément d'indice %d : ",i) ; scanf("%d",&T[i]) ;
}

for (i=0; i<n; i++)


Tinv[n-i-1] = T[i];
printf ("tableau inversé : \n");
for (i=0 ; i<n ; i++)
printf(" %d ",Tinv[i]) ;
}

Solution de l’Exercice 4 :
1) recherche séquentielle :
Algorithme Rech_Seq
Const Nmax=20
Var T : tableau[1..Nmax] de entier
k, n, X : entier
trouv : booléen
Début
Ecrire(‘nombre d’’éléments du tableau ? ’)
Répéter Lire(n) Jusqu’à (n>=1) et (n<=Nmax)
Ecrire(‘ donnez les ’,n,‘ éléments de T : ’)
Pour k ← 1 à n faire
Ecrire(k,’ième élément : ’) ; Lire(T[k])
FinPour
k ← 1 ; trouv ← FAUX
Tant que (k<=n) et non trouv faire
Si T[k]=X alors
trouve ← VRAI
Sinon
k ← k+1
FinSi
FinTantque
Si trouve alors Ecrire(X,‘ existe dans le tableau ; son rang est : ’,k)
Sinon Ecrire(X,‘ n’’existe pas dans le tableau’)
FinSi
Fin
-5-
INSIM – Tizi-Ouzou Corrigé de la série 3 Algorithmique 2018/2019

Programme en langage C :
#include <stdio.h>
#define TRUE 1
#define FALSE 0
#define Nmax 10
main()
{ int T[Nmax], i, n, trouve, X;
printf("nombre d'éléments du tableau ? ");
do {scanf("%d",&n);}
while ((n<1)||(n>Nmax));
printf("donner les elts du tableau : \n");
for (i=0; i<n; i++) {
printf("element d'indice %d : ",i);
scanf("%d",&T[i]); }
printf("donner l'elt à rechercher : ");
scanf("%d",&X);

trouve = FALSE;
i=0;
while((i<n)&&!(trouve)){
if (T[i]==X) trouve=TRUE;
else i++;
}
if (trouve)
printf("l'élément existe, son rang est : %d \n",i);
else
printf("élément introuvable\n");
}

2) recherche dichotomique :
Algorithme Rech_dich
Const Nmax=20
Var T : tableau[1..Nmax] de entier
D, F, M, X : entier
trouv : booléen
Début
Ecrire(‘nombre d’’éléments du tableau ? ’)
Répéter Lire(n) Jusqu’à (n>=1) et (n<=Nmax)
Ecrire(‘ donnez les ’,n,‘ éléments de T : ’)
Ecrire(‘1er élément : ’) ; Lire(T[1])
Pour k ← 2 à n faire
Ecrire(k,’ième élément : ’)
Répéter Lire(T[k]) Jusqu’à (T[k]>=T[k-1]) /* lire un tableau ordonné */
FinPour
D ← 1 ; F ← n ; trouv ← FAUX
-6-
INSIM – Tizi-Ouzou Corrigé de la série 3 Algorithmique 2018/2019

Répéter
M ← (D + F) div 2
Si X=T[M] alors
trouve ← VRAI
Sinon
Si X<T[M] alors F ← M-1 Sinon D ← M+1 FinSi
FinSi
Jusqu’à trouv ou (D>F)
Si trouve alors Ecrire(X,‘ existe dans le tableau ; son rang est : ’,M)
Sinon Ecrire(X,‘ n’’existe pas dans le tableau’) FinSi
Fin

Programme en langage C :
#include <stdio.h>
#include <stdlib.h>
#define TRUE 1
#define FALSE 0
#define Nmax 10
int main()
{ int T[Nmax], i, n, trouve, D, F, M, X;

printf("nombre d'éléments du tableau ? ");


do {scanf("%d",&n);} while ((n<1)||(n>Nmax));
printf("donner les elts du tableau trie : \n");
printf("element d'indice 0 : ");
scanf("%d",&T[0]);
for (i=1;i<n;i++){
do { printf("element d'indice %d : ",i);
scanf("%d",&T[i]);
} while (T[i]<T[i-1]);}
printf("donner l'elt à rechercher : ");
scanf("%d",&X);
trouve = FALSE;
if ((T[0]<=X)&&(T[n-1]>=X)){
D = 0;
F = n-1;
while((D<=F)&&!(trouve)){
M = (D+F)/2;
if (T[M]==X) trouve=TRUE;
else
if (T[M]<X) D = M+1;
else F = M-1;
}
}

-7-
INSIM – Tizi-Ouzou Corrigé de la série 3 Algorithmique 2018/2019

if (trouve)
printf("l'element existe, son indice est : %d \n",M);
else printf("element introuvable\n");
}

Solution de l’Exercice 5 :
On va utiliser la méthode du tri par sélection : on cherche le plus petit élément parmi T[1], T[2], …
T[n], et on l’échange avec T[1] ; puis on cherche le plus petit élément parmi T[2], … T[n], et on
l’échange avec T[2] ; et ainsi de suite jusqu’à arriver à T[n-1].
Algorithme Tri_selection
Const Nmax=20
Var T : tableau[1..Nmax] de entier
i, j, min, tmp : entier
Début
Ecrire(‘nombre d’’éléments du tableau ? ’)
Répéter Lire(n) Jusqu’à (n>=1) et (n<=Nmax)
Ecrire(‘ donnez les ’,n,‘ éléments de T : ’)
Pour i ← 1 à n faire Ecrire(i,’ième élément : ’) ; Lire(T[i]) FinPour
Pour i ← 1 à n-1 faire
min ← i
Pour j ← i+1 à n faire
Si T[j] < T[min] alors min ← j FinSi
FinPour
Si min<>i alors tmp ← T[i] ; T[i] ← T[min] ; T[min] ← tmp FinSi
FinPour
Ecrire (‘tableau trié : ’)
Pour i ← 1 à n faire Ecrire(‘ ’,T[i]) FinPour
Fin

Programme en langage C :
#include <stdio.h>
#define Nmax 20
main()
{ int T[Nmax], n, i, j, min, tmp ;

printf("nombre d’elements du tableau ? ") ;


do {scanf("%d",&n);} while ((n<1)||(n>Nmax));
printf("donner les %d elements du tableau T:\n",n);
for (i=0; i<n; i++) {
printf("element d'indice %d : ",i);
scanf("%d",&T[i]); }
for (i=0; i<n-1; i++){
min = i;
for (j=i+1; j<n; j++)
if (T[j]<T[min]) min=j;
-8-
INSIM – Tizi-Ouzou Corrigé de la série 3 Algorithmique 2018/2019

if (min != i) {
tmp=T[i]; T[i] = T[min]; T[min]=tmp; }
}
printf("tableau trie : \n");
for (i=0 ; i<n ; i++)
printf(" %d ",T[i]);
}

Solution de l’Exercice 6 :
1) Somme de deux matrices :
Algorithme Exo6
Const n= 3, m=4
Var A, B, C : tableau [1..n,1..m] de réel
i, j : entier
Début
Ecrire(‘donner les éléments de la matrice A :’)
Pour i←1 à n faire
Pour j←1 à m faire
Lire(A[i,j])
FinPour
FinPour
Ecrire(‘donner les éléments de la matrice B :’)
Pour i←1 à n faire
Pour j←1 à m faire
Lire(B[i,j])
FinPour
FinPour
Pour i←1 à n faire
Pour j←1 à m faire
C[i,j] ← A[i,j] + B[i,j]
FinPour
FinPour
Ecrire(‘les éléments de la matrice somme :’)
Pour i←1 à n faire
Pour j←1 à m faire
Ecrire(C[i,j]) /* sans retour chariot */
FinPour
Ecrire (‘ ’) /* avec retour chariot pour aller au début de la ligne suivante */
FinPour
Fin

Programme en langage C :
#include <stdio.h>
#define n 3

-9-
INSIM – Tizi-Ouzou Corrigé de la série 3 Algorithmique 2018/2019

#define m 4
main()
{ float A[n][m], B[n][m], C[n][m];
int i, j;

printf("donner les elements de la matrice A :\n");


for (i=0; i<n; i++)
for (j=0; j<m; j++)
scanf("%f",&A[i][j]);
printf("donner les elements de la matrice B :\n");
for (i=0; i<n; i++)
for (j=0; j<m; j++)
scanf("%f",&B[i][j]);

for (i=0; i<n; i++)


for (j=0; j<m; j++)
C[i][j] = A[i][j]+B[i][j];

printf("matrice C (somme) :\n");


for (i=0; i<n; i++) {
for (j=0; j<m; j++)
printf(" %f ",C[i][j]);
printf("\n");
}
}

2) Produit de deux matrices :


On suppose qu’on a les déclarations :
Const n=3, p=5, m=4
Var A : tableau [1..n,1..p] de réel
B : tableau [1..p,1..m] de réel
C : tableau [1..n,1..m] de réel
i, j, k : entier
On suppose aussi qu’on a écrit le début de l’algorithme où on lit les valeurs des éléments de A et B.
L’élément C[i,j] s’obtient comme le produit scalaire de la iième ligne de A et la jième colonne de B :
Pour i←1 à n faire
Pour j←1 à m faire
C[i,j] ← 0
Pour k←1 à p
C[i,j] ← C[i,j] + A[i,k] * B[k,j]
FinPour
FinPour
FinPour

- 10 -
INSIM – Tizi-Ouzou Corrigé de la série 3 Algorithmique 2018/2019

Morceau de programme en langage C :


for (i=0; i<n; i++)
for (j=0; j<m; j++) {
C[i][j]=0;
for (k=0; k<p; k++)
C[i][j] = C[i][j]+A[i][j]*B[i][j];
}

Solution de l’Exercice 7 :
1)
Algorithme Exo7_1
Const n= 3
Var A, B : tableau [1..n,1..n] de réel
i, j : entier
Début
Ecrire(’donner les éléments de la matrice A :’)
Pour i←1 à n faire
Pour j←1 à n faire
Lire(A[i,j])
FinPour
FinPour
Pour i←1 à n faire
Pour j←1 à n faire
B[j,i] ← A[i,j]
FinPour
FinPour
Ecrire(‘ matrice transposée : ’)
Pour i←1 à n faire
Pour j←1 à n faire
Ecrire(B[i,j],‘ ’) /* sans retour chariot */
FinPour
Ecrire (‘ ’) /* avec retour chariot */
FinPour
Fin

Programme en langage C :
#include <stdio.h>
#define n 3
main()
{ int A[n][n], B[n][n], i, j;

printf("donner les elements de la matrice A :\n");


for (i=0; i<n; i++)
for (j=0; j<n; j++)
scanf("%d",&A[i][j]);
- 11 -
INSIM – Tizi-Ouzou Corrigé de la série 3 Algorithmique 2018/2019

for (i=0; i<n; i++)


for (j=0; j<n; j++)
B[j][i] = A[i][j];

printf("matrice transposée :\n");


for (i=0; i<n; i++) {
for (j=0; j<n; j++)
printf(" %d ",B[i][j]);
printf("\n");
}
}

2)
Algorithme Exo7_2
Const n= 3
Var A : tableau [1..n,1..n] de réel
i, j : entier ; tmp : réel
Début
Ecrire(’donner les éléments de la matrice A :’)
Pour i←1 à n faire
Pour j←1 à n faire
Lire(A[i,j])
FinPour
FinPour
Pour i←2 à n faire
Pour j←1 à i-1 faire
tmp ← A[i,j])
A[i,j] ← A[j,i])
A[j,i] ← tmp
FinPour
FinPour
Ecrire(‘ matrice transposée : ’)
Pour i←1 à n faire
Pour j←1 à n faire
Ecrire(A[i,j], ‘ ’) /* sans retour chariot */
FinPour
Ecrire (‘ ’) /* avec retour chariot */
FinPour
Fin

Programme en langage C :
#include <stdio.h>
#define n 3
main()
- 12 -
INSIM – Tizi-Ouzou Corrigé de la série 3 Algorithmique 2018/2019

{ int A[n][n], i, j, tmp;

printf("donner les elements de la matrice A :\n");


for (i=0; i<n; i++)
for (j=0; j<n; j++)
scanf("%d",&A[i][j]);

for (i=1; i<n; i++)


for (j=0; j<i; j++) {
tmp = A[i][j];
A[i][j] = A[j][i];
A[j][i] = tmp;
}

printf("matrice transposée :\n");


for (i=0; i<n; i++) {
for (j=0; j<n; j++)
printf(" %d ",A[i][j]);
printf("\n");
}
}

----------*****---------- Fin du corrigé de la série 3 ----------*****----------

- 13 -

You might also like