Auteur : Mohamed Messabihi Matière : Initiation à l'algorithmique Date 07 Avril 2014
Durée 1h30
Université Abou Bakr Belkaïd - Tlemcen Faculté des Sciences 1èreAnnée MI Semestre 1
Correction de l'examen de rattrapage
Aucun document n'est autorisé.
Les solutions sous forme de programme Pascal sont aussi acceptées.
Tout appareil électronique doit être éteint (Téléphone, Ordinateur, Tablette, etc.).
1 Nombre parfait (6 pts)
Écrire un algorithme permettant de déterminer si un entier naturel donné par l'utilisateur est un nombre parfait.
On rappelle qu'un nombre est parfait s'il est égal à la somme de ses diviseurs stricts (sauf lui-même).
Ainsi par exemple, l'entier 6 est parfait car 6 = 1 + 2 + 3.
Listing 1 Solution : Algorithme nombre parfait
1 Program P a r f a i t ;
2 var n , i , som : integer ; (1 pts )
3 begin
4 writeln ( ' donner un nombre ' ) ;
5 readln (n ) ; (1 pts )
6 som :=0;
7 for i :=1 to (n div 2) do (1 pts )
8 i f (n mod i ) = 0 then (1 pts )
9 som := som+i ; (1 pts )
10 i f (som=n) then
11 writeln ( ' l e nombre ' , n , ' e s t p a r f a i t ' ) ; (0 ,5 pts )
12 else
13 writeln ( ' l e nombre ' , n , ' n ' ' e s t pas p a r f a i t ' ) ; (0 ,5 pts )
14 end .
Remarque : Les nombres parfaits sont peu nombreux ; les premiers nombres parfaits sont 6, 28, 496, 8128
2 Échange (6 pts)
Soit le programme suivant :
1PROGRAM Trier ;
2VAR u , v : real ;
3
4 { Mettre i c i l a d e f i n i t i o n de l a procedure Echange}
5
6 BEGIN
7 writeln ( ' Donner deux r e e l s u et v ' ) ;
8 readln (u , v ) ;
9 { A p p e l l e r i c i l a procedure Echange}
10 writeln (u , '<=' , v ) ;
11END.
1. Compléter le programme ci-dessus par la dénition de la procédure Echange ainsi que son appel.
B
Mohamed.Messabihi@gmail.com
Page 1La procédure Echange prend deux paramètres réels a et b et échange éventuellement leurs valeurs pour que l'état de sortie soit
a≤b.
Listing 2 Solution : Echange
1PROGRAM Trier ;
2VAR u , v : real ;
3PROCEDURE Echange ( var a , b : real ) ; (2 pts )
4VAR t : real ; (0 ,5 pts )
5 BEGIN
6 i f a > b then (1 pts )
7 begin
8 t := a ; (0 ,5 pts )
9 a := b ; (0 ,5 pts )
10 b := t ; (0 ,5 pts )
11 end ;
12END;
13BEGIN
14 writeln ( ' Donner deux r e e l s u et v ' ) ;
15 readln (u , v ) ;
16 Echange2 (u , v ) ; (1 pts )
17 writeln (u , ' <= ' , v ) ;
18END.
3 Vote électronique (8 pts)
Un vote électronique est organisé, on souhaite utiliser un programme pour saisir et comptabiliser chaque vote. Les électeurs peuvent voter par 'O' (oui), 'N' (Non) ou 'B' (Blanc). Écrire un algorithme qui permet de :
1. demander à
nélecteurs leur vote et les saisir dans un tableau Tab_Votes 2. répartir ces
nvotes sur trois tableaux et les acher
a) Tab_O : un tableau ne contenant que des 'O'.
b) Tab_N : un tableau ne contenant que des 'N' c) Tab_B : un tableau ne contenant que des 'B'
3. acher à la n le pourcentage des Oui, des Non et des votes Blancs.
B
Mohamed.Messabihi@gmail.com
Page 2Listing 3 Solution : Algorithme vote electronique
1 Program Vote_Electronique ;
2 Type
3 TAB = Array [ 1 . . 2 0 0 ] of char ;
4 Var
5 N , i , PTO,PTN,PTB: integer ;
6 Tab_Votes , Tab_O, Tab_N, Tab_B : TAB; (0 ,5 pt )
7 Begin
8 Writeln ( ' Donnez l e nombre d ' ' e l e c t e u r s ' ) ;
9 Readln(N) ; ( 0 . 2 5 pt )
10 For i := 1 To N Do ( 0 . 5 pt )
11 Begin
12 Writeln ( ' Donnez l e vote de l ' ' e l e c t e u r ' , i ) ;
13 Readln( Tab_Votes [ i ] ) ; ( 0 . 2 5 pt )
14 End;
15 PTN:=0;
16 PTO:=0; ( 0 . 7 5 pt )
17 PTB:=0;
18 For i := 1 To N Do ( 0 . 5 pt )
19 I f Tab_Votes [ i ] = 'O' Then ( 0 . 5 pt )
20 Begin
21 PTO:=PTO + 1 ; ( 0 . 2 5 pt )
22 Tab_O[PTO]:= Tab_Votes [ i ] ; ( 0 . 2 5 pt )
23 End
24 Else I f Tab_Votes [ i ] = 'N ' Then ( 0 . 5 pt )
25 Begin
26 PTN:=PTN + 1 ; ( 0 . 2 5 pt )
27 Tab_N[PTN]:= Tab_Votes [ i ] ; ( 0 . 2 5 pt )
28 End
29 Else Begin ( 0 . 5 pt )
30 PTB:=PTB + 1 ; ( 0 . 2 5 pt )
31 Tab_B[PTB]:= Tab_Votes [ i ] ; ( 0 . 2 5 pt )
32 End;
33 Write( ' Tableau des Ouis : ' PTO/N∗100 , '%' ) ; ( 0 . 2 5 pt )
34 For i := 1 To PTO Do
35 Write(Tab_O[ i ] , ' | ' ) ; ( 0 . 5 pt )
36 Writeln ; Write( ' Tableau des Nons ' , PTN/N∗100 , '%' ) ; ( 0 . 2 5 pt )
37 For i := 1 To PTN Do
38 Write(Tab_N[ i ] , ' | ' ) ; ( 0 . 5 pt )
39 Writeln ; Write( ' Tableau des votes Blancs ' , PTB/N∗100 , '%' ) ; ( 0 . 2 5 pt )
40 For i := 1 To PTB Do
41 Write (Tab_B[ i ] , ' | ' ) ; ( 0 . 5 pt )
42 End.
Bon courage !
B