EFM - Algorithme -2012-2013
PARTIE 1 : Techniques de programmation structurée /40
Problème 1.1 : les structures de contrôle (15 pts)
Écrire un algorithme qui demande à l’utilisateur de saisir N entiers, puis affiche le menu suivant :
-
Calculer la somme
-
Calculer le produit
-
Calculer la moyenne
L’utilisateur doit ensuite effectuer un choix (1,2 ou 3) et l’algorithme selon le choix de l’utilisateur va effectuer l’une des opérations ci-dessus (somme, produit ou moyenne) et afficher le résultat
Entrer le nombre de valeurs à saisir :
5
Saisir les valeurs
3
6
7
2
9
Que voulez-vous faire ?
1. Calculer la somme
2. Calculer le produit
3. Calculer la moyenne
Effectuer votre choix :(1,2 ou3)
1
La somme est : 27
Problème 1.2 : les fonctions et les procédures (25 pts)
Un nombre parfait est un entier naturel n tel que S(n)=n où S(n) est la somme des diviseurs propres de n. Ainsi :
-
6 est un nombre parfait car 6 = 1 + 2 + 3.
-
10 n’est pas parfait car 10≠1+2+5.
-
28 est parfait car 28=1+2+4+7+14
Écrire l’algorithme d’une fonction permettant de déterminer si un entier est parfait ou non
-
La fonction retourne 1 si le nombre est parfait
-
elle retourne 0 si le nombre n’est pas parfait
PARTIE 2 : Langage de programmation structurée /40
Problème 2.1 : Manipulation de tableaux (15 pts)
Écrire un programme en C permettant de saisir un tableau d’entiers T de dimension n et d’enregistrer tous les nombres parfaits de T dans un deuxième tableau Tp. Afficher ensuite le tableau Tp.
Pour déterminer si un entier est parfait ou non réutiliser la fonction de l’exercice précédent.
T :
5 |
6 |
10 |
28 |
8128 |
13 |
496 |
Tp :
6 |
28 |
8128 |
496 |
Problème 2.2:les structures de données (25 pts)
Afin de diminuer le taux d’absence de ses stagiaires l’ISTA NTIC calcul pour chaque stagiaire une note de discipline comme suit :
-
Chaque stagiaire a initialement une note de discipline qui vaut 18/20,
-
pour un nombre d’absence inférieur ou égale à 3 on soustrait 0.5 de la note initiale de discipline,
-
pour un nombre d’absence inférieur ou égale à 5 on soustrait 2 de la note de discipline,
-
pour un nombre d’absence inférieur ou égale à 10 on soustrait 8 de la note de discipline
-
pour un nombre d’absence qui dépasse 10 la note de discipline est 0.
Votre programme doit :
-
demander à l’utilisateur de saisir n stagiaires, un stagiaire est définit par son nom, son prénom, son nombre d’absences et sa note de discipline (calculée à partir de nombre d’absences).
-
Classer les stagiaires par ordre décroissant des notes de discipline
-
Afficher les résultats
Nom |
Prénom |
Nombre d’absences |
Note de discipline/20 |
Alaoui |
Ahmed |
0 |
18 |
Fahmi |
Fatima |
2 |
17.5 |
TAZI |
Taha |
7 |
7.5 |
TAHIRI |
Yassine |
10 |
7.5 |
Fadili |
Souad |
12 |
0 |
PARTIE 1 : Techniques de programmation structurée /40
Problème 1.1 : les structures de contrôle (15 pts)
DEBUT Entier : N, choix, S ← 0,P ← 1,M Ecrire("Entrer le nombre de valeurs à saisir: ") Lire(N) entier : T[N] Ecrire("Saisir les valeurs : ") Pour (i ← 0 ,i<N , i←i+1) Lire( T [i] ) Finpour Ecrire ("Que voulez-vouz faire?") Ecrire("1.calculer la somme:") Ecrire("2.calculer le produit:") Ecrire("3.calculer la moyenne:") Ecrire ("effectuer votre choix:") lire(choix) Selon(choix) cas 1: Pour (i ← 0 ,i<N , i←i+1) S←S+T[i] Finpour Ecrire ("la somme est:",S) cas 2: Pour (i ← 0 ,i<N , i←i+1) P←P*T[i] Finpour Ecrire ("le produit est:",P) cas 3: Pour (i ← 0 ,i<N , i←i+1) S←S+T[i] Finpour M←S/N Ecrire ("la moyenne est:",M) sinon: Ecrire"choix invalide") Finselon FIN
Problème 1.2 : les fonctions et les procédures (25 pts)
entier estPARFAIT(N entier) DEBUT entier S←0 Pour (i ← 1 ,i<N , i←i+1) si(N mod i=0) S←S+i finsi Finpour si (S=N) retourne 1 sinon retourne 0 finsi FIN
PARTIE 2 : Langage de programmation structurée /40
Problème 2.1 : Manipulation de tableaux (15 pts)
#include <stdio.h> #include <stdlib.h> int estPARFAIT( int N) { int s=0,i; for(i=0;i<N;i++) { if(N%i==0) s=s+i; } if(s==N) return 1; else return 0; } main() { int n,i,j=0; printf("saisir la dimension du tableau \n"); scanf("%d",&n); int T[n],Tp[n]; //la saisie du tableau T for(i=0;i<n;i++) { printf("saisir l'element %d du tableau T \n",i+1); scanf("%d",&T[i]); } //copie des nombres parfaits de T dans Tp for(i=0;i<n;i++) { if(estPARFAIT(T[i]) { Tp[j]=T[i]; j++; } } //affichage du tableau Tp for(i=0;i<j;i++) printf("%d \t",T[i]); system("pause"); }
Problème 2.2:les structures de données (25 pts)
#include <stdio.h> #include <stdlib.h> main() { int n,i,note=18; //déclarer la structure stagiaire struct stagiaire { char nom[30]; char prenom[30]; int nb_abs; float note_des; }; //saisir les stagiaires printf("entrer le nombres de stagiaires à saisir\n"); scanf("%d",&n); struct stagiaire s[n],tmp; for(i=0;i<n;i++) { printf("entrer les données du stagiaire %d \n"i+1); printf("Nom:"); gets(s[i].nom); printf("prenom:"); gets(s[i].prenom); printf("nombre d'absences:"); scanf("%d",&s[i].nb_abs); //calcule de la note de discipline if(s[i].nb_abs<=3) s[i].note_des=note-0.5; else if(s[i].nb_abs<=5) s[i].note_des=note-2; else if(s[i].nb_abs<=10) s[i].note_des=note-8; else s[i].note_des=0; } //tri des stagiares par ordre décroissant des notes de discipline for(i=0;i<n;i++) { for(j=i;j<n;j++) { if(s[i].note_des<s[j].note_des) { tmp=s[i]; s[i]=s[j]; s[j]=tmp; } } } //affichage du résultat for(i=0;i<n;i++) { printf("stagiaire n° %d \n"i+1); printf("Nom:%s \n",s[i].nom); printf("prenom:%s \n",s[i].prenom); printf("nombre d'absences:%d \n",s[i].nb_abs); printf("note de disciplines:%f \n",s[i].note_des); } system("pause"); }
Nom | Taille | Clics | Téléchargements |
EFM TPS_LPS.pdf | 101.07 Ko | 2614 | Télécharger |