0% ont trouvé ce document utile (0 vote)
200 vues9 pages

Examen

Transféré par

adeezer2004
Copyright
© © All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats DOCX, PDF, TXT ou lisez en ligne sur Scribd
0% ont trouvé ce document utile (0 vote)
200 vues9 pages

Examen

Transféré par

adeezer2004
Copyright
© © All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats DOCX, PDF, TXT ou lisez en ligne sur Scribd

Université Hassan II Année universitaire 2020-

ENSET MOHAMMEDIA 2021


Département Génie Electrique
GECSI 1 / SEER 1
Mme. OUHMIDA
Examen
Algorithmique et Programmation C
Durée : 3h

Partie I : Algorithmique
Questions de cours : Répondez par vrai ou faux : (2.5 pts)
1. La correction ne fait pas partie des problèmes fondamentaux de l’algorithme. [Faux]
2. Le fait de trouver une tâche pour laquelle il n’y a pas d’algorithme ne cause aucun
problème. [Faux]
3. L’algorithme réalise le programme en séquence ou en parallèle. [Faux]
4. L’opération Lire en algorithmique permet d’afficher un résultat. [Faux]
5. L’instruction Tantque permet de répéter un traitement jusqu’à ce que la condition soit
satisfaite. [Faux]
Exercice (2pts)
On donne un nombre réel X et un nombre entier N positif.
Ecrire un algorithme permettant de calculer la somme suivante :
N
X
S=∑ +X×i
i=0 i!
Algorithme CalculSomme
Variable X, Somme : réel
Variable N, i, fact, F : entier

Début
Ecrire ("Entrée le nombre X :")
Lire (X)
Ecrire ("Entrée le nombre d’itération N :")
Lire (N)
Somme  0
F1

Pour i  0 à N faire
Pour fact  1 a i faire
F  F * fact
FinPour
Somme = Somme + (X/F) + X*i
FinPour
Ecrire ("La somme :" Somme)
Fin

Partie II : Programmation en Langage C


Questions de cours :
Question 1 : Choisir la(les) bonne(s) réponse(s) (1 pt)
1. Si le nombre d’itérations est connu, il est conseillé d’utiliser :
1) while …
2) do … while
3) for …
2. Soit un tableau int T[10] ; pour accéder à la troisième case du tableau T, on utilise :

1) T[3] 3) T{2}
2) T[2] 4) T(3)

Question 2 (Répondre par vrai/faux avec justification pour chaque réponse fausse)
(3.75)

1. Le passage d’arguments dans le langage C se fait :


a. Pour les constantes par valeur et pour les variables par adresse. [Faux]
Justification : possible de faire passage par valeur ou par adresse pour les deux

b. Pour les pointeurs et les tableaux par adresse, pour les variables et les constantes
par valeur. [Faux]
Justification : le passage des tableaux fait par adresse ou valeur

c. Quel que soit le type d’arguments à la fonction appelée, le passage est par valeur.
[Faux]
Justification : En peur faire un passage par adresse pour les fonction

2. En langage C, nous trouvons ces types de variable :


a. Caractère [Vrai]
Justification : ……………………………………………………………………………….

b. Booléen [Faux]
Justification : le langage C pas de type Boolean

c. Entier [Vrai]
Justification : ……………………………………………………………………………….

d. Virgule flottante [Vrai]


Justification : ……………………………………………………………………………….
3. Les instructions itératives suivantes permettent de faire des boucles, en langage
C:
a. for (instruction; instruction; instruction) instruction [Faux]
Justification : for(instructions; expression; instructions) instruction

b. while (expression) instruction [Vrai]


Justification : ………………………………………………………………………….........
c. for (expression ; expression ; expression) instruction [Faux]
Justification : for(instructions; expression; instructions) instruction

d. do instruction while (expression) [Vrai]


Justification :
…………………………………………………………………………...............
4. Ce que retourne une fonction en langage C :
a. Doit être d’un type cohérent avec le type de la fonction. [Vrai]
Justification :
…………………………………………………………………………………...
b. Peut retourner une structure. [Vrai]
Justification :
…………………………………………………………………………………...

c. Peut retourner le contenu d’un tableau. [Faux]


Justification : On peur pas retourner un tableau a la langage C

d. Ne peut retourner qu’un résultat à la fois. [Vrai]


Justification :
…………………………………………………………………………………...

Question 3 : Corriger les instructions suivantes : (2 pts)


Float a, b ; c, ; float a, b, c;
int âge ; int age,
w=20 ; w=20,
y=10 y=10;
int i=2 int i=2;
do do{
+i+; i++;
Printf (le suivant est : %f \n,i); printf ("le suivant est : %d \n ",i);
}while (i<2) }while (i<2);
printf (fin); printf ("fin ");

Question 4 : Evaluer les expressions suivantes sachant que (3 pts)


a=10 b=3 c= -2 d=2 x=10 y=8

(a) (5*X) + 2 * ((3*B) + 4) (d) A %= D++


(b) A += (X+5) (e) A = X * (B<C) + Y *! (B<C)
(c) A *= C + (X-D) (f) !(X-D+C) || D

Notez, à chaque fois, la valeur rendue comme résultat de l'expression et


les valeurs des variables dont le contenu a changé

(a (5*X) + 2 * ((3*B) + ->76 /


) 4)
(b A += (X+5) ->25 A = 25
)
(c A *= C + (X-D) ->60 A = 60
)
(d A = X * (B<C) + Y *! ->8 A=8
) (B<C)
(e A != (C *= (-D)) ->1 C=4
)
(f !(X-D+C) || D ->1 /
)
Exercice 1 (1.5 pts)
Ecrire un programme permettant de calculer la valeur médiane de trois variables réelles.
Exemple : 2 8 6  la valeur médiane est 6.
1. En utilisant des structures if imbriqués

#include <stdio.h>
int main() {
float a,b,c,k;
printf("Entree le 1 ere variable: ");
scanf("%f",&a);
printf("Entree le 2eme variable: ");
scanf("%f",&b);
printf("Entree le 3eme variable: ");
scanf("%f",&c);

if (a<b) {
if (b<c) printf("la valeur mediane est: %f",b);
else {
if (a<c) printf("la valeur mediane est: %f",c);
else printf("la valeur mediane est: %f",a);
}
} else {
if (c<b) printf("la valeur mediane est: %f",b);
else {
if (c>a) printf("la valeur mediane est: %f",a);
else printf("la valeur mediane est: %f",c);
}
}
return 0;
}
2. En utilisant l’opérateur conditionnel
#include <stdio.h>
int main() {
float a,b,c,k;
printf("Entree le 1 ere variable: ");
scanf("%f",&a);
printf("Entree le 2eme variable: ");
scanf("%f",&b);
printf("Entree le 3eme variable: ");
scanf("%f",&c);

k = (b<a) ? (b<c) ? (c<a) ? c : a : b : (a<c) ? (c<b) ? c : b : a;


printf("la valeur mediane est: %f",k);
return 0;
}

Exercice 2 (1.25 pts)


Ecrire un programme, en utilisant la boucle while, qui permet de trouver les nombres pairs de
1 à n et de calculer la somme de ses nombres. Le n est saisi par l’utilisateur.

#include <stdio.h>
int main() {
int n, k, somme = 0;
printf("Entree un nombre: ");
scanf("%d",&n);

while (k <= n) {
if(k%2 == 0 && k != 0){
printf("nombres pairs : %d \n",k);
somme += k;
}
k++;
}
printf("la somme des nombres pairs : %d \n",somme);
return 0;
}
Exercice 3 (3.5 pts)
1. Ecrire la structure permettant de présenter un nombre complexe.
typedef struct
{
double Re;
double Im;
}complexe;
2. Ecrire les fonctions suivantes :
double real_part(complex z)
double imag_part(complex z)
complex multiplication(complex z1, complex z2)

 En utilisant le passage par adresse


double real_part(complex *z){
return z->Re;
}
double imag_part(complex *z){
return z->Im;
}
complex multiplication(complex *z1, complex *z2){
complex z3;
[Link] = z1->Re * z2->Re + z1->Im * z2->Im;
[Link] = z1->Re * z2->Im + z1->Im * z2->Re;
return z3;
}

 En utilisant le passage par valeur


double real_part(complex z){
return [Link];
}
double imag_part(complex z){
return [Link];
}
complex multiplication(complex z1, complex z2){
complex z3;
[Link] = [Link] * [Link] + [Link] * [Link];
[Link] = [Link] * [Link] + [Link] * [Link];
return z3;
}
Exercice 4 (1.5)
Ecrire le programme C qui permet de lire et d’afficher un tableau de réels de taille N
 En ordre croissant
 En ordre décroissant
 En ajoutant une case N+1ème qui affiche la somme de toutes les valeurs du tableau

#include <stdio.h>
#include <stdbool.h>
const int T_max = 100;

void afficher_tableau(float T[], int D) {


printf(" {");
for(int i=0; i<D; i++) {
if (i!=(D-1)) printf("%.1f, ",T[i]);
else printf("%.1f}\n\n",T[i]);
}}

void ordre_croiss(float T[], int D) {


float V;
for(int i=0; i<D; i++) {
for(int j=i+1; j<D; j++) {
if (T[j] < T[i]) {V = T[i]; T[i] = T[j]; T[j] = V;}
}
}}

void ordre_decroiss(float T[], int D) {


float V;
for(int i=0; i<D; i++) {
for(int j=i+1; j<D; j++) {
if (T[j] > T[i]) {V = T[i]; T[i] = T[j]; T[j] = V;}
}}}

float somme_tab(float T[], int D){


float somme = 0;
for(int i=0; i<D; i++) {
somme += T[i];
}
return somme;
}

int main() {
float T[T_max];
int D;

printf("Enree le dimension du tableau: ");


scanf("%d",&D);
//entree les valeurs de tableau
for(int i=0; i<D; i++) {
printf("Enree la #%d valeur: ",(i+1));
scanf("%f",&T[i]);
}

//Afichage du tableau
printf("Le tableau entree est :");
afficher_tableau(T, D);

// Le tableau on ordre croissant


printf("Le tableau on ordre croissant :");
ordre_croiss(T, D);
afficher_tableau(T, D);

// Le tableau on ordre decroissant


printf("Le tableau on ordre decroissant :");
ordre_decroiss(T, D);
afficher_tableau(T, D);

// Le tableau avec la somme


printf("Le tableau avec la somme :");
T[D] = somme_tab(T, D);
afficher_tableau(T, D+1);
return 0;
}

Bonne chance !

Vous aimerez peut-être aussi