• Aucun résultat trouvé

Rappel : Le corrig´ e n’a d’int´ erˆ et que si l’exercice a ´ et´ e cherch´ e.

N/A
N/A
Protected

Academic year: 2022

Partager "Rappel : Le corrig´ e n’a d’int´ erˆ et que si l’exercice a ´ et´ e cherch´ e."

Copied!
11
0
0

Texte intégral

(1)

Universit´e Cadi Ayyad Ann´ee 2019−2020

Facult´e polydisciplinaire Langage C et Matlab

Safi SMC (S4)

S´ erie 4

Exercice 1

1) Peut-on utiliser un tableau sans l’avoir initialis´e ? 2) Combien de dimensions un tableau peut-il avoir ?

3) Comment peut-on initialiser enti`erement et facilement un tableau ? 4) Quel int´erˆet ya-t-il `a utiliser un tableau plutˆot que des variables simples ? Exercice 2

1) Quels r´esultat fournira ce programme:

#include<stdio.h>

main() { int t[3];

int i,j;

for(i=0, j=0; i<3; i++) /*1*/

t[i]=j++ + i;

for (i=0,i<3,i++) /*2*/

printf(”%d”,t[i]);

}

2) Qu’affiche le programme suivant:

#include<stdio.h>

main() {

char C[4];

int k;

C[0]=’a’;

C[3]=’J’;

C[2]=’k’;

C[1]=’R’;

for(k=0;k<4;k++) printf(”%c\n”,C[k]);

for(k=0;k<4;k++) C[k]++;

for(k=0;k<4;k++) printf(”%c\n”,C[K]);

}

(2)

Exercice 3

1) ´Ecrire un programme pla¸cant dans un tableau int T[10], les valeurs 1,2,. . . ,10 puis affichant ce tableau.

Vous initialiserez le tableau `a la d´eclaration.

2) Mˆeme question en initialisant le tableau avec une boucle.

3) ´Ecrire un programme qui affiche la somme des 10 ´el´ement du tableau T.

4) ´Ecrire un programme qui demande `a l’utilisateur de saisir un int et dites lui si ce nombre se trouve dans T.

Exercice 4

1) Ecrire un programme qui calcule le produit scalaire de deux vecteurs d’entiers U et V (de mˆeme dimen- sion). Exemple:

3 2 -4 × 2 -3 5 = 3*2+2*(-3)+(-4)*5 = -20

2) Ecrire un programme qui d´etermine la plus grande et la plus petite valeur dans un tableau d’entiers A.

Afficher ensuite la valeur et la position du maximum et du minimum. Si le tableau contient plusieurs maxima ou minima, le programme retiendra la position du premier maximum ou minimum rencontr´e.

3) Probl`eme: On dispose de deux tableaux A et B (de dimensions respectives N et M), tri´es par ordre croissant. Fusionner les ´el´ements de A et B dans un troisi`eme tableau FUS tri´e par ordre croissant.

M´ethode: Utiliser trois indices IA, IB et IFUS. Comparer A[IA] et B[IB]; remplacer FUS[IFUS] par le plus petit des deux ´el´ements; avancer dans le tableau FUS et dans le tableau qui a contribu´e son ´el´ement. Lorsque l’un des deux tableaux A ou B est ´epuis´e, il suffit de recopier les ´el´ements restants de l’autre tableau dans le tableau FUS.

Exercice 5

1) Ecrire un programme qui met `a z´ero les ´el´ements de la diagonale principale d’une matrice carr´ee A donn´ee.

2) Ecrire un programme qui construit et affiche une matrice carr´ee unitaire U de dimension N. Une matrice unitaire est une matrice, telle que:

uij =

1 si i=j

0 sinon

3) Ecrire un programme qui effectue la transposition tA d’une matrice A de dimensions N et M en une matrice de dimensions M et N. La matrice transpos´ee sera m´emoris´ee dans une deuxi`eme matrice B qui sera ensuite affich´ee.

4) Ecrire un programme qui r´ealise la multiplication d’une matrice A par un r´eel X.

5) Ecrire un programme qui r´ealise l’addition de deux matrices A et B de mˆemes dimensions N et M.

(3)

Correction

Rappel : Le corrig´ e n’a d’int´ erˆ et que si l’exercice a ´ et´ e cherch´ e.

Exercice 1

1) Le tableau peut contenir n’importe quoi et le r´esultat de son utilisation est impr´evisible. En l’initialisant, vous connaissez la valeur des donn´ees qui y sont stock´ees.

2) La seule limite au nombre de dimensions est impos´ee par la place m´emoire. Les besoins en m´emoire d’un tableau augmentent consid´erablement avec le nombre de dimensions. Il faut ´eviter de gaspiller la m´emoire disponible en d´eclarant des tableaux ayant juste la taille n´ecessaire.

3) Vous pouvez le faire avec une instruction de d´eclaration comme celle que nous avons ´etudi´ee dans ce chapitre 4, ou `a l’aide d’une boucle for.

4) Dans le cas du tableau, des donn´ees de mˆeme type sont stock´ees sous un seul nom. La cr´eation et l’initialisation massives de variables diff´erentes sont inconcevables, l’usage d’un tableau consid´erablement sim- plifie consid´erablement le travail.

Exercice 2

1) /*1*/ remplit le tableau avec les valeurs 0(0+0), 2(1+1) et 4(2+2); on obtiendrait plus simplement le mˆeme r´esultat l’expression 2*i.

/*2*/ affiche ”classiquement” les valeurs du tableau t, dans l’ordre ”naturel”, Le r´esultat fournis par ce programme:

0 2 4 2) Nous avons le r´esultat suivant:

a R k J b S l K

Exercice 3

1)

#include<stdio.h>

main() { int i;

int T[10]={1,2,3,4,5,6,7,8,9,10};

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

printf(”T[%d]=%d\n”,i,T[i]);

} 2)

(4)

#include<stdio.h>

main() { int i;

int T[10];

for(i=0;i<10;i++) {

T[i]=i+1;

printf(”T[%d]=%d\n”,i,T[i]);

} }

3)

#include<stdio.h>

main() {

int i, som=0;

int T[10];

for(i=0;i<10;i++) {

T[i]=i+1;

som=som+T[i]; /* ou som+=T[i]; */

}

printf(”La somme des ´el´ements du tableau est %d\n”,som);

}

4)

#include<stdio.h>

main() { int i, t;

int T[10];

for(i=0;i<10;i++) {

T[i]=i+1;

}

printf(”Saisissez une valeur:”);

scanf(”%d”,&t);

i=0;

while(i<10&&T[i]!=t) i++;

if(i>=10)

printf(”%d ne se trouve pas dans le tableau \n”,t);

else

printf(”%d se trouve dans le tableau a l’indice %d.\n”, t, i);

}

Exercice 4 1)

(5)

#include<stdio.h>

main() { int N;

int I;

long PS;

printf(”Dimension des tableaux : ”);

scanf(”%d”, &N );

int V[N];

int U[N];

printf(”** Premier tableau **\n”);

for (I=0; I<N; I++) {

printf(”El´ement %d : ”, I);

scanf(”%d”, &U[I]);

}

printf(”** Deuxi`eme tableau **\n”);

for (I=0; I<N; I++) {

printf(”El´ement %d : ”, I);

scanf(”%d”, &V[I]);

}

/* Calcul du produit scalaire */

for (PS=0, I=0; I<N; I++) PS += (long)U[I]*V[I];

/* Affichage du r´esultat */

printf(”Produit scalaire : %ld\n”, PS);

}

2)

(6)

#include<stdio.h>

main() {

/* D´eclarations */

int N; /* dimension */

int I; /* indice courant */

int MIN; /* position du minimum */

int MAX; /* position du maximum */

/* Saisie des donn´ees */

printf(”Dimension du tableau : ”);

scanf(”%d”, &N ); int A[N]; /* tableau donn´e */

for (I=0; I<N; I++) { printf(”El´ement %d : ”, I);

scanf(”%d”, &A[I]);

}

/* Recherche du maximum et du minimum */

MIN=0;

MAX=0;

for (I=0; I<N; I++) {

if(A[I]>A[MAX]) MAX=I;

if(A[I]<A[MIN]) MIN=I;

}

/* Affichage du r´esultat */

printf(”Position du minimum : %d\n”, MIN);

printf(”Position du maximum : %d\n”, MAX);

printf(”Valeur du minimum : %d\n”, A[MIN]);

printf(”Valeur du maximum : %d\n”, A[MAX]);

} 3)

(7)

#include<stdio.h>

main() {

/* Les tableaux et leurs dimensions */

int A[50], B[50], FUS[100];

int N, M;

int IA, IB, IFUS; /* indices courants */

/* Saisie des donn´ees */

printf(”Dimension du tableau A (max.50) : ”);

scanf(”%d”, &N );

printf(”Entrer les ´el´ements de A dans l’ordre croissant :\n”);

for (IA=0; IA<N; IA++) {

printf(”El´ement A[%d] : ”, IA);

scanf(”%d”, &A[IA]);

}

printf(”Dimension du tableau B (max.50) : ”);

scanf(”%d”, &M );

printf(”Entrer les ´el´ements de B dans l’ordre croissant :\n”);

for (IB=0; IB<M; IB++) {

printf(”El´ement B[%d] : ”, IB);

scanf(”%d”, &B[IB]);

}

/* Fusion des ´el´ements de A et B dans FUS */

IA=0; IB=0; IFUS=0;

while ((IA<N) && (IB<M)) if(A[IA]<B[IB])

{

FUS[IFUS]=A[IA];

IFUS++;

IA++;

} else {

FUS[IFUS]=B[IB];

IFUS++;

IB++;

}

/* Si IA ou IB sont arriv´es `a la fin de leur tableau, */

/* alors copier le reste de l’autre tableau. */

while (IA<N){ FUS[IFUS]=A[IA];

IFUS++;

IA++;

}

while (IB<M) {

FUS[IFUS]=B[IB];

IFUS++;

IB++;

}

/* Edition du r´esultat */

printf(”Tableau FUS :\n”);

for (IFUS=0; IFUS<N+M; IFUS++) printf(”%d ”, FUS[IFUS]);

printf(”\n”);

}

(8)

Exercice 5

1)

#include<stdio.h>

main() {

/* D´eclarations */

int N; /* dimension de la matrice carr´ee */

int I, J; /* indices courants */

/* Saisie des donn´ees */

printf(”Dimension de la matrice carr´ee : ”);

scanf(”%d”, &N);

int A[N][N]; /* matrice carr´ee */

for (I=0; I<N; I++) for (J=0; J<N; J++) {

printf(”El´ement[%d][%d] : ”,I,J);

scanf(”%d”, &A[I][J]);

}

/* Mise `a z´ero de la diagonale principale */

for (I=0; I<N; I++) A[I][I]=0;

/* Affichage du r´esultat */ printf(”Matrice r´esultat :\n”);

for (I=0; I<N; I++) {

for (J=0; J<N; J++) printf(”%7d”, A[I][J]);

printf(”\n”);

} }

2)

#include<stdio.h>

main() {

int N; /* dimension de la matrice identit´e */

int I, J; /* indices courants */

/* Saisie des donn´ees */

printf(”Dimension de la matrice carr´ee : ”);

scanf(”%d”, &N); int U[N][N];

/* Construction de la matrice carr´ee identit´e */

for (I=0; I<N; I++) for (J=0; J<N; J++)

if (I==J) U[I][J]=1;

else U[I][J]=0;

/* Affichage du r´esultat */

printf(”Matrice unitaire de dimension %d :\n”, N);

for (I=0; I<N; I++) {

for (J=0; J<N; J++) printf(”%7d”, U[I][J]);

printf(”\n”);

} }

(9)

3)

#include<stdio.h>

main() {

int N, M; /* dimensions des matrices */

int I, J; /* indices courants */

/* Saisie des donn´ees */

printf(”Nombre de lignes : ”);

scanf(”%d”, &N );

printf(”Nombre de colonnes : ”);

scanf(”%d”, &M );

int A[N][M]; /* matrice initiale */

int B[M][N]; /* matrice r´esultat */

for (I=0; I<N; I++) for (J=0; J<M; J++) {

printf(”El´ement[%d][%d] : ”,I,J);

scanf(”%d”, &A[I][J]);

}

/* Affectation de la matrice transpos´ee `a B */

for (I=0; I<N; I++) for (J=0; J<M; J++)

B[J][I]=A[I][J];

/* Affichage du r´esultat */

/* Attention: maintenant le rˆole de N et M est invers´e. */

printf(”Matrice r´esultat :\n”);

for (I=0; I<M; I++) {

for (J=0; J<N; J++) printf(”%7d”, B[I][J]);

printf(”\n”);

} } 4)

(10)

#include<stdio.h>

main() {

/* D´eclarations */

int N, M; /* dimensions des matrices */

int I, J; /* indices courants */

float X; /* multiplicateur */

/* Saisie des donn´ees */

printf(”Nombre de lignes : ”);

scanf(”%d”, &N );

printf(”Nombre de colonnes : ”);

scanf(”%d”, &M );

float A[N][M],B[N][M]; /*A matrice donn´ee, B matrice r´esultat */

for (I=0; I<N; I++) for (J=0; J<M; J++)

{

printf(”El´ement[%d][%d] : ”,I,J);

scanf(”%f”, &A[I][J]);

}

printf(”Multiplicateur X : ”);

scanf(”%f”, &X );

/* Affectation du r´esultat de la multiplication `a B */

for (I=0; I<N; I++) for (J=0; J<M; J++) B[I][J] = X*A[I][J];

/* Affichage du r´esultat */

printf(”Matrice r´esultat :\n”);

for (I=0; I<N; I++) {

for (J=0; J<M; J++) printf(”%10.2f”, B[I][J]);

printf(”\n”);

} } 5)

(11)

#include<stdio.h>

main() {

/* D´eclarations */

int N, M; /* dimensions des matrices */

int I, J; /* indices courants */

/* Saisie des donn´ees */

printf(”Nombre de lignes : ”);

scanf(”%d”, &N );

printf(”Nombre de colonnes : ”);

scanf(”%d”, &M );

int A[N][M], B[N][M], C[N][M];

printf(”*** Matrice A ***\n”);

for (I=0; I<N; I++) for (J=0; J<M; J++)

{

printf(”El´ement[%d][%d] : ”,I,J);

scanf(”%d”, &A[I][J]);

}

printf(”*** Matrice B ***\n”);

for (I=0; I<N; I++) for (J=0; J<M; J++)

{

printf(”El´ement[%d][%d] : ”,I,J);

scanf(”%d”, &B[I][J]);

}

/* Affectation du r´esultat de l’addition `a C */

for (I=0; I<N; I++) for (J=0; J<M; J++)

C[I][J] = A[I][J]+B[I][J];

/* Affichage du r´esultat */

printf(”Matrice r´esultat C :\n”);

for (I=0; I<N; I++) {

for (J=0; J<M; J++) printf(”%7d”, C[I][J]);

printf(”\n”);

} }

Références

Documents relatifs

Des piles au magnésium équipent certains gilets de sauvetage, mais aussi

W e suppose that the congruence conditions 2.1.1o are satisfied, and shall treat the corresponding equation in the~urely cubic..

[r]

Après avoir résolu les inéquations nécessaires, établir le tableau de signe des expressions suivantes :

Pour d´ eclarer des variables d’un type non sign´ e, il suffit de faire pr´ ec´ eder le nom du type entier du mot-cl´ e unsigned.. Comme pour la question pr´ ec´ edente,

Pour ne pas perdre de la pr´ ecision lors de la division et pour ´ eviter un d´ epassage du domaine lors du calcul du produit, il faut forcer l’utilisation du type double. En

D’autre part, elle permet d’int´ egrer tr` es confortablement l’initialisation et l’incr´ ementation des variables dans la structure..

4 ◦ ) ´ Ecrire une fonction C qui d´ etermine le signe de la d´ eriv´ ee seconde de f en fonction