Académique Documents
Professionnel Documents
Culture Documents
GM/GC
École Nationale d’Ingénieurs de Saint−Étienne
Algorithmie et programmation 2005-2006
La pile.
correction
1
Le tas.
correction
✐2.4 on veut écrire une fonction permettant de calculer la somme de flottants. En supposant
qu’on écrive :
int main ( int argc , char ∗∗ argv )
{
double ∗p ;
double S ;
p=m a l l o c ( a t o i ( argv [ 1 ] ) ∗ s i z e o f ( double ) ) ;
S=somme tab ( p , . . . ) ;
}
Soit l’entête :
. . . somme tab ( double∗ tab , . . . ) ;
Complétez l’entête et écrivez la routine somme permettant de calculer la somme des flot-
tants se trouvant à l’adresse tab.
double somme tab ( double ∗ tab , int N)
{
/∗ V a r i a b l e s l o c a l e s ∗/
double somme=0;
int i ;
/∗ C a l c u l de l a somme ∗/
for ( i =0; i <N; i ++)
{
somme += tab [ i ] ;
}
return somme ;
}
correction
✐3.1 Construisez un arbre binaire de recherche par adjonctions successives de feuilles pour la
suite de lettres suivantes :
E N I S E
E N
I S
correction
✐3.2 Quelle est la hauteur de cet arbre (cf. page 32 du polycopié pour la définition de la
hauteur) ?
2
La hauteur est de 2
correction
✐3.3 Construisez un arbre de recherche avec les mêmes lettres mais de hauteur maximale.
correction
✐3.4 À votre avis existe-t-il une méthode systématique pour trouver un arbre de hauteur
minimale ?
On classe les éléments par ordre croissant (ici EEINS), on prend la médiane comme
racine. Et on réitère de façon récursive pour les sous-arbres gauche et droit.
correction
correction
Type
Tsudoku = Tableau entier [9][9]
3
✐4.2 En supposant qu’on identifie les 9 zones comme suit :
0 1 2
3 4 5
6 7 8
Donnez le schéma fonctionnel et l’entête de la routine zone renvoyant le numéro de la
zone d’une case donnée.
Routine zone(
D i,j:entier ):entier
correction
correction
– verifier colonne : qui vérifie que pour une colonne c donnée, la valeur V n’est pas
déjà présente sur la colonne c.
Routine verifier colonne(
D s:Tsudoku ;
D c:entier ;
D v:entier ):booléen
correction
– verifier zone : qui vérifie que pour une zone z donnée, la valeur V n’est pas déjà
présente sur la zone z.
Routine verifier zone(
D s:Tsudoku ;
D z:entier ;
D v:entier ):booléen
correction
✐4.4 Donnez le schéma fonctionnel et l’entête de la routine coup valide permettant de vérifier
si mettre la valeur V à une position donnée est autorisé.
correction
Routine jouer(
T s:Tsudoku ;
D i,j:entier ;
D v:entier )
correction
4
Début
verifier colonne(s,j,v) ET
Retourner verifier ligne(s,i,v) ET
verifier zone(s,zone(i,j),v)
Fin
correction
correction
✐4.8 La routine zone. L’opérateur mod (reste de la division entière) ou l’opérateur div (division
entière) vous seront probablement utiles pour cette question.
5
Variable
jeu:Tsudoku
Début
charger une grille de départ
TantQue grille du jeu non décodée Faire
Afficher("veuillez saisir un nombre et une position")
saisir(nombre,i,j)
jouer(jeu,i,jnombre)
FinTantQue
Fin
Il reste bien sûr à définir une routine permettant de savoir si la grille a été « solutionnée
», et une routine pour charger une grille de départ...
correction
Il y a un rapport entre les deux complexité de N/ log2 N . Le temps est dans le même
rapport, soit :
0.5 × 106 / log2 (106 ) = 25085.83
Soit environ 7 heures.
correction